Compare commits

..

48 Commits

Author SHA1 Message Date
semantic-release-bot
c8b3456738 chore(release): 4.14.2-dev.2 [skip ci]
## [4.14.2-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.14.2-dev.1...v4.14.2-dev.2) (2024-09-21)

### Bug Fixes

* **YouTube - Spoof video streams:** Change default client type to Android VR ([a104eea](a104eeaf68))
* **YouTube - Spoof video streams:** Change default client type to Android VR ([#3672](https://github.com/ReVanced/revanced-patches/issues/3672)) ([e8cb6ee](e8cb6ee028))
2024-09-21 23:33:50 +00:00
LisoUseInAIKyrios
e8cb6ee028 fix(YouTube - Spoof video streams): Change default client type to Android VR (#3672) 2024-09-21 19:31:55 -04:00
semantic-release-bot
3e796eb7c2 chore(release): 4.14.2-dev.1 [skip ci]
## [4.14.2-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.1...v4.14.2-dev.1) (2024-09-21)

### Bug Fixes

* **TikTok - Playback speed:** Prevent crash by fixing invalid patch ([ff8fe46](ff8fe46685))
* **TikTok - Settings:** Prevent crash by fixing invalid patch ([0ab7344](0ab7344295))
* **Twitter - Open links with app chooser:** Constrain patch to last working version `10.48.0-release` ([303d2de](303d2de81d))
2024-09-21 23:20:21 +00:00
oSumAtrIX
303d2de81d fix(Twitter - Open links with app chooser): Constrain patch to last working version 10.48.0-release 2024-09-22 01:18:04 +02:00
oSumAtrIX
0ab7344295 fix(TikTok - Settings): Prevent crash by fixing invalid patch 2024-09-22 01:17:53 +02:00
oSumAtrIX
ff8fe46685 fix(TikTok - Playback speed): Prevent crash by fixing invalid patch 2024-09-22 01:17:47 +02:00
LisoUseInAIKyrios
a104eeaf68 fix(YouTube - Spoof video streams): Change default client type to Android VR 2024-09-21 17:11:54 -04:00
semantic-release-bot
18b09168cc chore(release): 4.14.1 [skip ci]
## [4.14.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.0...v4.14.1) (2024-09-18)

### Bug Fixes

* **YouTube - Check environment:** Only use fields available since Android 8 ([#3655](https://github.com/ReVanced/revanced-patches/issues/3655)) ([e03c14c](e03c14cc01))
2024-09-18 23:02:35 +00:00
oSumAtrIX
f7209f0a53 chore: Merge branch dev to main (#3656) 2024-09-19 01:00:28 +02:00
semantic-release-bot
1fb3fc4857 chore(release): 4.14.1-dev.1 [skip ci]
## [4.14.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.0...v4.14.1-dev.1) (2024-09-18)

### Bug Fixes

* **YouTube - Check environment:** Only use fields available since Android 8 ([#3655](https://github.com/ReVanced/revanced-patches/issues/3655)) ([e03c14c](e03c14cc01))
2024-09-18 22:59:56 +00:00
oSumAtrIX
e03c14cc01 fix(YouTube - Check environment): Only use fields available since Android 8 (#3655) 2024-09-19 00:57:54 +02:00
semantic-release-bot
bed29d00dc chore(release): 4.14.0 [skip ci]
# [4.14.0](https://github.com/ReVanced/revanced-patches/compare/v4.13.3...v4.14.0) (2024-09-18)

### Bug Fixes

* **Pixiv - Hide ads:** Fix for latest version ([#3616](https://github.com/ReVanced/revanced-patches/issues/3616)) ([ff2c456](ff2c4564a0))
* **Soundcloud - Hide ads:** Support latest version ([#3628](https://github.com/ReVanced/revanced-patches/issues/3628)) ([2f7d751](2f7d751f9f))
* **SwissID:** Rename `Remove Google Play Integrity Integrity check` to `Remove Google Play Integrity check` ([#3558](https://github.com/ReVanced/revanced-patches/issues/3558)) ([bdd2f7c](bdd2f7cb0f))
* **YouTube - ReturnYouTubeDislike:** Show estimated like count for videos with hidden likes ([#3601](https://github.com/ReVanced/revanced-patches/issues/3601)) ([70470a9](70470a9162))
* **YouTube - SponsorBlock:** Add summary text to 'view my segments' button ([a642705](a64270514f))
* **YouTube - SponsorBlock:** Handle if the user enters an invalid number into any SB settings ([a276425](a276425d83))
* **YouTube:** Fix issues related to playback by replace streaming data ([#3582](https://github.com/ReVanced/revanced-patches/issues/3582)) ([5b1e07d](5b1e07d861))

### Features

* Add `Change data directory location` patch ([#3602](https://github.com/ReVanced/revanced-patches/issues/3602)) ([96e6f43](96e6f43ca0))
* Add `Check environment` patch ([#3610](https://github.com/ReVanced/revanced-patches/issues/3610)) ([4c2ec28](4c2ec2870c))
* **Duolingo:** Add `Disable ads` and `Enable debug menu` patch ([#3422](https://github.com/ReVanced/revanced-patches/issues/3422)) ([4e323aa](4e323aa206))
* **Sync for Reddit:** Add `Fix /user/ endpoint` patch ([16217f0](16217f012e))
* **Sync for Reddit:** Rename patch to `Use /user/ endpoint` ([5871923](58719239cf))
* **YouTube - Hide Shorts components:** Hide 'Use this sound' button ([#3647](https://github.com/ReVanced/revanced-patches/issues/3647)) ([395e18d](395e18d830))
* **YouTube - Keyword filter:** Add syntax to match whole keywords and not substrings ([#3592](https://github.com/ReVanced/revanced-patches/issues/3592)) ([ed532eb](ed532eb528))
* **YouTube - Spoof client:** Allow forcing AVC codec with iOS ([#3570](https://github.com/ReVanced/revanced-patches/issues/3570)) ([6bb848b](6bb848b991))
* **YouTube Music:** Make working patches compatible with latest versions ([#3556](https://github.com/ReVanced/revanced-patches/issues/3556)) ([f83e314](f83e314dff))
* **YouTube:** Add donation link to settings about screen ([#3626](https://github.com/ReVanced/revanced-patches/issues/3626)) ([bccd62e](bccd62e593))
2024-09-18 22:19:44 +00:00
LisoUseInAIKyrios
d36982e245 chore: Merge branch dev to main (#3559) 2024-09-18 18:17:22 -04:00
ReVanced Bot
13031f0534 chore: Sync translations (#3653) 2024-09-18 17:48:02 -04:00
semantic-release-bot
b5b6ef5d6f chore(release): 4.14.0-dev.15 [skip ci]
# [4.14.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.14...v4.14.0-dev.15) (2024-09-17)

### Bug Fixes

* **YouTube:** Fix issues related to playback by replace streaming data ([#3582](https://github.com/ReVanced/revanced-patches/issues/3582)) ([5b1e07d](5b1e07d861))
2024-09-17 22:47:28 +00:00
Zain
5b1e07d861 fix(YouTube): Fix issues related to playback by replace streaming data (#3582)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2024-09-18 00:45:02 +02:00
ReVanced Bot
e3220cc10a chore: Sync translations (#3649) 2024-09-17 12:37:00 -04:00
semantic-release-bot
02db9378ea chore(release): 4.14.0-dev.14 [skip ci]
# [4.14.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.13...v4.14.0-dev.14) (2024-09-17)

### Features

* **YouTube Music:** Make working patches compatible with latest versions ([#3556](https://github.com/ReVanced/revanced-patches/issues/3556)) ([f83e314](f83e314dff))
2024-09-17 13:58:02 +00:00
Pun Butrach
f83e314dff feat(YouTube Music): Make working patches compatible with latest versions (#3556) 2024-09-17 15:56:00 +02:00
semantic-release-bot
d5e383b78a chore(release): 4.14.0-dev.13 [skip ci]
# [4.14.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.12...v4.14.0-dev.13) (2024-09-17)

### Features

* **YouTube - Hide Shorts components:** Hide 'Use this sound' button ([#3647](https://github.com/ReVanced/revanced-patches/issues/3647)) ([395e18d](395e18d830))
2024-09-17 13:36:53 +00:00
MarcaD
395e18d830 feat(YouTube - Hide Shorts components): Hide 'Use this sound' button (#3647) 2024-09-17 15:34:31 +02:00
semantic-release-bot
887684e7c7 chore(release): 4.14.0-dev.12 [skip ci]
# [4.14.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.11...v4.14.0-dev.12) (2024-09-14)

### Bug Fixes

* **Soundcloud - Hide ads:** Support latest version ([#3628](https://github.com/ReVanced/revanced-patches/issues/3628)) ([2f7d751](2f7d751f9f))
2024-09-14 15:09:54 +00:00
FullerBread2032
2f7d751f9f fix(Soundcloud - Hide ads): Support latest version (#3628)
Co-authored-by: FullerBread2032 <admin@fullerbread2032.tk>
2024-09-14 17:07:27 +02:00
semantic-release-bot
4886a95713 chore(release): 4.14.0-dev.11 [skip ci]
# [4.14.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.10...v4.14.0-dev.11) (2024-09-12)

### Features

* **Sync for Reddit:** Rename patch to `Use /user/ endpoint` ([5871923](58719239cf))
2024-09-12 20:11:21 +00:00
oSumAtrIX
58719239cf feat(Sync for Reddit): Rename patch to Use /user/ endpoint
The bug it was used to fix does not occur anymore. This name is more correct on what the patch actually does.
2024-09-12 22:09:09 +02:00
semantic-release-bot
fcb68cc65e chore(release): 4.14.0-dev.10 [skip ci]
# [4.14.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.9...v4.14.0-dev.10) (2024-09-12)

### Features

* **Sync for Reddit:** Add `Fix /user/ endpoint` patch ([16217f0](16217f012e))
2024-09-12 18:30:19 +00:00
oSumAtrIX
16217f012e feat(Sync for Reddit): Add Fix /user/ endpoint patch 2024-09-12 20:18:22 +02:00
semantic-release-bot
d6f20ee67d chore(release): 4.14.0-dev.9 [skip ci]
# [4.14.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.8...v4.14.0-dev.9) (2024-09-09)

### Features

* **YouTube:** Add donation link to settings about screen ([#3626](https://github.com/ReVanced/revanced-patches/issues/3626)) ([bccd62e](bccd62e593))
2024-09-09 07:23:22 +00:00
LisoUseInAIKyrios
bccd62e593 feat(YouTube): Add donation link to settings about screen (#3626) 2024-09-09 03:21:22 -04:00
semantic-release-bot
1322403698 chore(release): 4.14.0-dev.8 [skip ci]
# [4.14.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.7...v4.14.0-dev.8) (2024-09-09)

### Bug Fixes

* **YouTube - SponsorBlock:** Add summary text to 'view my segments' button ([a642705](a64270514f))
2024-09-09 07:19:55 +00:00
LisoUseInAIKyrios
a64270514f fix(YouTube - SponsorBlock): Add summary text to 'view my segments' button 2024-09-09 03:17:43 -04:00
semantic-release-bot
f5de555adf chore(release): 4.14.0-dev.7 [skip ci]
# [4.14.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.6...v4.14.0-dev.7) (2024-09-06)

### Features

* Add `Check environment` patch ([#3610](https://github.com/ReVanced/revanced-patches/issues/3610)) ([4c2ec28](4c2ec2870c))
2024-09-06 08:29:07 +00:00
oSumAtrIX
4c2ec2870c feat: Add Check environment patch (#3610)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
Co-authored-by: KobeW50 <84587632+KobeW50@users.noreply.github.com>
2024-09-06 10:26:53 +02:00
semantic-release-bot
a73e2458e9 chore(release): 4.14.0-dev.6 [skip ci]
# [4.14.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.5...v4.14.0-dev.6) (2024-09-06)

### Features

* Add `Change data directory location` patch ([#3602](https://github.com/ReVanced/revanced-patches/issues/3602)) ([96e6f43](96e6f43ca0))
2024-09-06 07:47:45 +00:00
KrystianQur
96e6f43ca0 feat: Add Change data directory location patch (#3602)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2024-09-06 09:45:40 +02:00
semantic-release-bot
f667d5a238 chore(release): 4.14.0-dev.5 [skip ci]
# [4.14.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.4...v4.14.0-dev.5) (2024-09-06)

### Bug Fixes

* **Pixiv - Hide ads:** Fix for latest version ([#3616](https://github.com/ReVanced/revanced-patches/issues/3616)) ([ff2c456](ff2c4564a0))
2024-09-06 07:16:05 +00:00
Itroublve
ff2c4564a0 fix(Pixiv - Hide ads): Fix for latest version (#3616)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2024-09-06 09:13:57 +02:00
semantic-release-bot
b568207e49 chore(release): 4.14.0-dev.4 [skip ci]
# [4.14.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.3...v4.14.0-dev.4) (2024-09-01)

### Bug Fixes

* **YouTube - ReturnYouTubeDislike:** Show estimated like count for videos with hidden likes ([#3601](https://github.com/ReVanced/revanced-patches/issues/3601)) ([70470a9](70470a9162))
2024-09-01 21:51:42 +00:00
LisoUseInAIKyrios
70470a9162 fix(YouTube - ReturnYouTubeDislike): Show estimated like count for videos with hidden likes (#3601) 2024-09-01 17:49:42 -04:00
semantic-release-bot
9922f47a49 chore(release): 4.14.0-dev.3 [skip ci]
# [4.14.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.2...v4.14.0-dev.3) (2024-08-30)

### Features

* **YouTube - Keyword filter:** Add syntax to match whole keywords and not substrings ([#3592](https://github.com/ReVanced/revanced-patches/issues/3592)) ([ed532eb](ed532eb528))
2024-08-30 21:40:57 +00:00
LisoUseInAIKyrios
ed532eb528 feat(YouTube - Keyword filter): Add syntax to match whole keywords and not substrings (#3592) 2024-08-30 17:38:59 -04:00
ReVanced Bot
74f3f82927 chore: Sync translations (#3593) 2024-08-28 22:33:49 -04:00
semantic-release-bot
6544cd5fc6 chore(release): 4.14.0-dev.2 [skip ci]
# [4.14.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.1...v4.14.0-dev.2) (2024-08-24)

### Features

* **Duolingo:** Add `Disable ads` and `Enable debug menu` patch ([#3422](https://github.com/ReVanced/revanced-patches/issues/3422)) ([4e323aa](4e323aa206))
2024-08-24 12:46:50 +00:00
Joshua May
4e323aa206 feat(Duolingo): Add Disable ads and Enable debug menu patch (#3422)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
2024-08-24 14:44:35 +02:00
ReVanced Bot
c1cee281ff chore: Sync translations (#3574) 2024-08-23 00:37:22 -04:00
ReVanced Bot
0779f9fc5e chore: Sync translations (#3573) 2024-08-23 00:13:52 -04:00
semantic-release-bot
0ee5cf98ab chore(release): 4.14.0-dev.1 [skip ci]
# [4.14.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.13.4-dev.2...v4.14.0-dev.1) (2024-08-22)

### Features

* **YouTube - Spoof client:** Allow forcing AVC codec with iOS ([#3570](https://github.com/ReVanced/revanced-patches/issues/3570)) ([6bb848b](6bb848b991))
2024-08-22 17:51:00 +00:00
LisoUseInAIKyrios
6bb848b991 feat(YouTube - Spoof client): Allow forcing AVC codec with iOS (#3570) 2024-08-22 13:48:49 -04:00
160 changed files with 5087 additions and 6315 deletions

View File

@@ -1,3 +1,166 @@
## [4.14.2-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.14.2-dev.1...v4.14.2-dev.2) (2024-09-21)
### Bug Fixes
* **YouTube - Spoof video streams:** Change default client type to Android VR ([74c8637](https://github.com/ReVanced/revanced-patches/commit/74c8637943347078955f51325bc6af92a35d4463))
* **YouTube - Spoof video streams:** Change default client type to Android VR ([#3672](https://github.com/ReVanced/revanced-patches/issues/3672)) ([a3306f6](https://github.com/ReVanced/revanced-patches/commit/a3306f6717a09b734354f00363a96abad0ae14e7))
## [4.14.2-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.1...v4.14.2-dev.1) (2024-09-21)
### Bug Fixes
* **TikTok - Playback speed:** Prevent crash by fixing invalid patch ([82d53cb](https://github.com/ReVanced/revanced-patches/commit/82d53cbc3bbfa585ba4337fdfaec9f0f19c802e6))
* **TikTok - Settings:** Prevent crash by fixing invalid patch ([8074032](https://github.com/ReVanced/revanced-patches/commit/8074032fad3eff1c03296a882d2e2820da99b592))
* **Twitter - Open links with app chooser:** Constrain patch to last working version `10.48.0-release` ([b9955d5](https://github.com/ReVanced/revanced-patches/commit/b9955d5ff6e456593b01f0f25d80ff660d02082a))
## [4.14.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.0...v4.14.1) (2024-09-18)
### Bug Fixes
* **YouTube - Check environment:** Only use fields available since Android 8 ([#3655](https://github.com/ReVanced/revanced-patches/issues/3655)) ([4413533](https://github.com/ReVanced/revanced-patches/commit/441353306572340131030e1c4fee1ab6acb63cd9))
## [4.14.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.14.0...v4.14.1-dev.1) (2024-09-18)
### Bug Fixes
* **YouTube - Check environment:** Only use fields available since Android 8 ([#3655](https://github.com/ReVanced/revanced-patches/issues/3655)) ([4413533](https://github.com/ReVanced/revanced-patches/commit/441353306572340131030e1c4fee1ab6acb63cd9))
# [4.14.0](https://github.com/ReVanced/revanced-patches/compare/v4.13.3...v4.14.0) (2024-09-18)
### Bug Fixes
* **Pixiv - Hide ads:** Fix for latest version ([#3616](https://github.com/ReVanced/revanced-patches/issues/3616)) ([98956e8](https://github.com/ReVanced/revanced-patches/commit/98956e8f1a41347bb435720bbf984969469a7110))
* **Soundcloud - Hide ads:** Support latest version ([#3628](https://github.com/ReVanced/revanced-patches/issues/3628)) ([66e7e33](https://github.com/ReVanced/revanced-patches/commit/66e7e33efce9b702fdfcc2b9803e9da8491c1f08))
* **SwissID:** Rename `Remove Google Play Integrity Integrity check` to `Remove Google Play Integrity check` ([#3558](https://github.com/ReVanced/revanced-patches/issues/3558)) ([0f5a771](https://github.com/ReVanced/revanced-patches/commit/0f5a771a5cff5684b4a8fd317f4938fe2cf3cbbe))
* **YouTube - ReturnYouTubeDislike:** Show estimated like count for videos with hidden likes ([#3601](https://github.com/ReVanced/revanced-patches/issues/3601)) ([005be82](https://github.com/ReVanced/revanced-patches/commit/005be82d71b2a42387b1b57035930b20f4663794))
* **YouTube - SponsorBlock:** Add summary text to 'view my segments' button ([df80b9f](https://github.com/ReVanced/revanced-patches/commit/df80b9f92f0d981b9a40b7756d74f8ccc3dcb1e9))
* **YouTube - SponsorBlock:** Handle if the user enters an invalid number into any SB settings ([37b3dd1](https://github.com/ReVanced/revanced-patches/commit/37b3dd1e789f8bb16fa1b9dd582e39c89dbe730c))
* **YouTube:** Fix issues related to playback by replace streaming data ([#3582](https://github.com/ReVanced/revanced-patches/issues/3582)) ([dfa94d7](https://github.com/ReVanced/revanced-patches/commit/dfa94d70f65150d6ef24ea6378b8e6a317055186))
### Features
* Add `Change data directory location` patch ([#3602](https://github.com/ReVanced/revanced-patches/issues/3602)) ([5998029](https://github.com/ReVanced/revanced-patches/commit/59980292809cc0626bf49a160eeb05a1523c4eda))
* Add `Check environment` patch ([#3610](https://github.com/ReVanced/revanced-patches/issues/3610)) ([fbcbdaf](https://github.com/ReVanced/revanced-patches/commit/fbcbdafa4938a35b5fdec46aae7b250a84b9c139))
* **Duolingo:** Add `Disable ads` and `Enable debug menu` patch ([#3422](https://github.com/ReVanced/revanced-patches/issues/3422)) ([d0a8599](https://github.com/ReVanced/revanced-patches/commit/d0a8599f76ce653e5d7c98069ad3c58b9ab9c5eb))
* **Sync for Reddit:** Add `Fix /user/ endpoint` patch ([46d11f3](https://github.com/ReVanced/revanced-patches/commit/46d11f3530fcdae9ed08b7e93aac235638a92dff))
* **Sync for Reddit:** Rename patch to `Use /user/ endpoint` ([98ead49](https://github.com/ReVanced/revanced-patches/commit/98ead493380932cb105530f4ba992673fd364d82))
* **YouTube - Hide Shorts components:** Hide 'Use this sound' button ([#3647](https://github.com/ReVanced/revanced-patches/issues/3647)) ([33fc090](https://github.com/ReVanced/revanced-patches/commit/33fc09061431d4aa457d743c09a0de31ec566df1))
* **YouTube - Keyword filter:** Add syntax to match whole keywords and not substrings ([#3592](https://github.com/ReVanced/revanced-patches/issues/3592)) ([f5fb351](https://github.com/ReVanced/revanced-patches/commit/f5fb3512cfafe214ba6a6d25ba0825ae1884a0ff))
* **YouTube - Spoof client:** Allow forcing AVC codec with iOS ([#3570](https://github.com/ReVanced/revanced-patches/issues/3570)) ([1a49d1f](https://github.com/ReVanced/revanced-patches/commit/1a49d1f3c2a343d05d0abc07c143add486246fd0))
* **YouTube Music:** Make working patches compatible with latest versions ([#3556](https://github.com/ReVanced/revanced-patches/issues/3556)) ([12f6f19](https://github.com/ReVanced/revanced-patches/commit/12f6f1966ad04631451940f7b64d785c3ef481a0))
* **YouTube:** Add donation link to settings about screen ([#3626](https://github.com/ReVanced/revanced-patches/issues/3626)) ([0684ab5](https://github.com/ReVanced/revanced-patches/commit/0684ab5f183631de5720352049cfd293daa58eb0))
# [4.14.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.14...v4.14.0-dev.15) (2024-09-17)
### Bug Fixes
* **YouTube:** Fix issues related to playback by replace streaming data ([#3582](https://github.com/ReVanced/revanced-patches/issues/3582)) ([dfa94d7](https://github.com/ReVanced/revanced-patches/commit/dfa94d70f65150d6ef24ea6378b8e6a317055186))
# [4.14.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.13...v4.14.0-dev.14) (2024-09-17)
### Features
* **YouTube Music:** Make working patches compatible with latest versions ([#3556](https://github.com/ReVanced/revanced-patches/issues/3556)) ([12f6f19](https://github.com/ReVanced/revanced-patches/commit/12f6f1966ad04631451940f7b64d785c3ef481a0))
# [4.14.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.12...v4.14.0-dev.13) (2024-09-17)
### Features
* **YouTube - Hide Shorts components:** Hide 'Use this sound' button ([#3647](https://github.com/ReVanced/revanced-patches/issues/3647)) ([33fc090](https://github.com/ReVanced/revanced-patches/commit/33fc09061431d4aa457d743c09a0de31ec566df1))
# [4.14.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.11...v4.14.0-dev.12) (2024-09-14)
### Bug Fixes
* **Soundcloud - Hide ads:** Support latest version ([#3628](https://github.com/ReVanced/revanced-patches/issues/3628)) ([66e7e33](https://github.com/ReVanced/revanced-patches/commit/66e7e33efce9b702fdfcc2b9803e9da8491c1f08))
# [4.14.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.10...v4.14.0-dev.11) (2024-09-12)
### Features
* **Sync for Reddit:** Rename patch to `Use /user/ endpoint` ([98ead49](https://github.com/ReVanced/revanced-patches/commit/98ead493380932cb105530f4ba992673fd364d82))
# [4.14.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.9...v4.14.0-dev.10) (2024-09-12)
### Features
* **Sync for Reddit:** Add `Fix /user/ endpoint` patch ([46d11f3](https://github.com/ReVanced/revanced-patches/commit/46d11f3530fcdae9ed08b7e93aac235638a92dff))
# [4.14.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.8...v4.14.0-dev.9) (2024-09-09)
### Features
* **YouTube:** Add donation link to settings about screen ([#3626](https://github.com/ReVanced/revanced-patches/issues/3626)) ([0684ab5](https://github.com/ReVanced/revanced-patches/commit/0684ab5f183631de5720352049cfd293daa58eb0))
# [4.14.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.7...v4.14.0-dev.8) (2024-09-09)
### Bug Fixes
* **YouTube - SponsorBlock:** Add summary text to 'view my segments' button ([df80b9f](https://github.com/ReVanced/revanced-patches/commit/df80b9f92f0d981b9a40b7756d74f8ccc3dcb1e9))
# [4.14.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.6...v4.14.0-dev.7) (2024-09-06)
### Features
* Add `Check environment` patch ([#3610](https://github.com/ReVanced/revanced-patches/issues/3610)) ([fbcbdaf](https://github.com/ReVanced/revanced-patches/commit/fbcbdafa4938a35b5fdec46aae7b250a84b9c139))
# [4.14.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.5...v4.14.0-dev.6) (2024-09-06)
### Features
* Add `Change data directory location` patch ([#3602](https://github.com/ReVanced/revanced-patches/issues/3602)) ([5998029](https://github.com/ReVanced/revanced-patches/commit/59980292809cc0626bf49a160eeb05a1523c4eda))
# [4.14.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.4...v4.14.0-dev.5) (2024-09-06)
### Bug Fixes
* **Pixiv - Hide ads:** Fix for latest version ([#3616](https://github.com/ReVanced/revanced-patches/issues/3616)) ([98956e8](https://github.com/ReVanced/revanced-patches/commit/98956e8f1a41347bb435720bbf984969469a7110))
# [4.14.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.3...v4.14.0-dev.4) (2024-09-01)
### Bug Fixes
* **YouTube - ReturnYouTubeDislike:** Show estimated like count for videos with hidden likes ([#3601](https://github.com/ReVanced/revanced-patches/issues/3601)) ([005be82](https://github.com/ReVanced/revanced-patches/commit/005be82d71b2a42387b1b57035930b20f4663794))
# [4.14.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.2...v4.14.0-dev.3) (2024-08-30)
### Features
* **YouTube - Keyword filter:** Add syntax to match whole keywords and not substrings ([#3592](https://github.com/ReVanced/revanced-patches/issues/3592)) ([f5fb351](https://github.com/ReVanced/revanced-patches/commit/f5fb3512cfafe214ba6a6d25ba0825ae1884a0ff))
# [4.14.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.14.0-dev.1...v4.14.0-dev.2) (2024-08-24)
### Features
* **Duolingo:** Add `Disable ads` and `Enable debug menu` patch ([#3422](https://github.com/ReVanced/revanced-patches/issues/3422)) ([d0a8599](https://github.com/ReVanced/revanced-patches/commit/d0a8599f76ce653e5d7c98069ad3c58b9ab9c5eb))
# [4.14.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.13.4-dev.2...v4.14.0-dev.1) (2024-08-22)
### Features
* **YouTube - Spoof client:** Allow forcing AVC codec with iOS ([#3570](https://github.com/ReVanced/revanced-patches/issues/3570)) ([1a49d1f](https://github.com/ReVanced/revanced-patches/commit/1a49d1f3c2a343d05d0abc07c143add486246fd0))
## [4.13.4-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.13.4-dev.1...v4.13.4-dev.2) (2024-08-20)

View File

@@ -16,6 +16,14 @@ public final class app/revanced/patches/all/connectivity/wifi/spoof/SpoofWifiPat
public fun transform (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Lkotlin/Triple;)V
}
public final class app/revanced/patches/all/directory/ChangeDataDirectoryLocationPatch : app/revanced/patches/all/misc/transformation/BaseTransformInstructionsPatch {
public static final field INSTANCE Lapp/revanced/patches/all/directory/ChangeDataDirectoryLocationPatch;
public fun filterMap (Lcom/android/tools/smali/dexlib2/iface/ClassDef;Lcom/android/tools/smali/dexlib2/iface/Method;Lcom/android/tools/smali/dexlib2/iface/instruction/Instruction;I)Ljava/lang/Integer;
public synthetic fun filterMap (Lcom/android/tools/smali/dexlib2/iface/ClassDef;Lcom/android/tools/smali/dexlib2/iface/Method;Lcom/android/tools/smali/dexlib2/iface/instruction/Instruction;I)Ljava/lang/Object;
public fun transform (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;I)V
public synthetic fun transform (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Ljava/lang/Object;)V
}
public final class app/revanced/patches/all/interaction/gestures/PredictiveBackGesturePatch : app/revanced/patcher/patch/ResourcePatch {
public static final field INSTANCE Lapp/revanced/patches/all/interaction/gestures/PredictiveBackGesturePatch;
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
@@ -243,6 +251,18 @@ public final class app/revanced/patches/cieid/restrictions/root/BypassRootChecks
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
}
public final class app/revanced/patches/duolingo/ad/DisableAdsPatch : app/revanced/patcher/patch/BytecodePatch {
public static final field INSTANCE Lapp/revanced/patches/duolingo/ad/DisableAdsPatch;
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
}
public final class app/revanced/patches/duolingo/debug/EnableDebugMenuPatch : app/revanced/patcher/patch/BytecodePatch {
public static final field INSTANCE Lapp/revanced/patches/duolingo/debug/EnableDebugMenuPatch;
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
}
public final class app/revanced/patches/facebook/ads/story/HideStoryAdsPatch : app/revanced/patcher/patch/BytecodePatch {
public static final field INSTANCE Lapp/revanced/patches/facebook/ads/story/HideStoryAdsPatch;
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
@@ -808,6 +828,12 @@ public final class app/revanced/patches/reddit/customclients/syncforreddit/fix/s
public static final field INSTANCE Lapp/revanced/patches/reddit/customclients/syncforreddit/fix/slink/FixSLinksPatch;
}
public final class app/revanced/patches/reddit/customclients/syncforreddit/fix/user/UseUserEndpointPatch : app/revanced/patcher/patch/BytecodePatch {
public static final field INSTANCE Lapp/revanced/patches/reddit/customclients/syncforreddit/fix/user/UseUserEndpointPatch;
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
}
public final class app/revanced/patches/reddit/customclients/syncforreddit/misc/integrations/IntegrationsPatch : app/revanced/patches/shared/misc/integrations/BaseIntegrationsPatch {
public static final field INSTANCE Lapp/revanced/patches/reddit/customclients/syncforreddit/misc/integrations/IntegrationsPatch;
}
@@ -842,6 +868,12 @@ public final class app/revanced/patches/serviceportalbund/detection/root/RootDet
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
}
public abstract class app/revanced/patches/shared/misc/checks/BaseCheckEnvironmentPatch : app/revanced/patcher/patch/BytecodePatch {
public fun <init> (Lapp/revanced/patcher/fingerprint/MethodFingerprint;Ljava/util/Set;Lapp/revanced/patches/shared/misc/integrations/BaseIntegrationsPatch;)V
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
}
public final class app/revanced/patches/shared/misc/fix/verticalscroll/VerticalScrollPatch : app/revanced/patcher/patch/BytecodePatch {
public static final field INSTANCE Lapp/revanced/patches/shared/misc/fix/verticalscroll/VerticalScrollPatch;
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
@@ -1850,6 +1882,10 @@ public final class app/revanced/patches/youtube/misc/backgroundplayback/Backgrou
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
}
public final class app/revanced/patches/youtube/misc/check/CheckEnvironmentPatch : app/revanced/patches/shared/misc/checks/BaseCheckEnvironmentPatch {
public static final field INSTANCE Lapp/revanced/patches/youtube/misc/check/CheckEnvironmentPatch;
}
public final class app/revanced/patches/youtube/misc/debugging/DebuggingPatch : app/revanced/patcher/patch/ResourcePatch {
public static final field INSTANCE Lapp/revanced/patches/youtube/misc/debugging/DebuggingPatch;
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
@@ -1880,6 +1916,12 @@ public final class app/revanced/patches/youtube/misc/fix/playback/SpoofSignature
public fun execute (Lapp/revanced/patcher/data/ResourceContext;)V
}
public final class app/revanced/patches/youtube/misc/fix/playback/SpoofVideoStreamsPatch : app/revanced/patcher/patch/BytecodePatch {
public static final field INSTANCE Lapp/revanced/patches/youtube/misc/fix/playback/SpoofVideoStreamsPatch;
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
}
public final class app/revanced/patches/youtube/misc/fix/playback/UserAgentClientSpoofPatch : app/revanced/patches/all/misc/transformation/BaseTransformInstructionsPatch {
public static final field INSTANCE Lapp/revanced/patches/youtube/misc/fix/playback/UserAgentClientSpoofPatch;
public synthetic fun filterMap (Lcom/android/tools/smali/dexlib2/iface/ClassDef;Lcom/android/tools/smali/dexlib2/iface/Method;Lcom/android/tools/smali/dexlib2/iface/instruction/Instruction;I)Ljava/lang/Object;

View File

@@ -31,6 +31,8 @@ dependencies {
implementation(libs.guava)
// Used in JsonGenerator.
implementation(libs.gson)
// Android API stubs defined here.
compileOnly(project(":stub"))
}
kotlin {

View File

@@ -1,4 +1,4 @@
org.gradle.parallel = true
org.gradle.caching = true
kotlin.code.style = official
version = 4.13.4-dev.2
version = 4.14.2-dev.2

File diff suppressed because one or more lines are too long

View File

@@ -5,3 +5,5 @@ buildCache {
isEnabled = "CI" !in System.getenv()
}
}
include(":stub")

View File

@@ -0,0 +1,73 @@
package app.revanced.patches.all.directory
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patches.all.misc.transformation.BaseTransformInstructionsPatch
import app.revanced.util.getReference
import com.android.tools.smali.dexlib2.iface.ClassDef
import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.instruction.Instruction
import com.android.tools.smali.dexlib2.iface.instruction.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
@Patch(
name = "Change data directory location",
description = "Changes the data directory in the application from " +
"the app internal storage directory to /sdcard/android/data accessible by root-less devices." +
"Using this patch can cause unexpected issues with some apps.",
use = false,
)
@Suppress("unused")
object ChangeDataDirectoryLocationPatch : BaseTransformInstructionsPatch<Int>() {
override fun filterMap(
classDef: ClassDef,
method: Method,
instruction: Instruction,
instructionIndex: Int,
): Int? {
val reference = instruction.getReference<MethodReference>() ?: return null
if (!MethodUtil.methodSignaturesMatch(reference, MethodCall.GetDir.reference)) {
return null
}
return instructionIndex
}
override fun transform(
mutableMethod: MutableMethod,
entry: Int,
) = transformMethodCall(entry, mutableMethod)
private fun transformMethodCall(
instructionIndex: Int,
mutableMethod: MutableMethod,
) {
val getDirInstruction = mutableMethod.getInstruction<Instruction35c>(instructionIndex)
val contextRegister = getDirInstruction.registerC
val dataRegister = getDirInstruction.registerD
mutableMethod.replaceInstruction(
instructionIndex,
"invoke-virtual { v$contextRegister, v$dataRegister }, " +
"Landroid/content/Context;->getExternalFilesDir(Ljava/lang/String;)Ljava/io/File;",
)
}
private enum class MethodCall(
val reference: MethodReference,
) {
GetDir(
ImmutableMethodReference(
"Landroid/content/Context;",
"getDir",
listOf("Ljava/lang/String;", "I"),
"Ljava/io/File;",
),
),
}
}

View File

@@ -83,8 +83,9 @@ object AddResourcesPatch : ResourcePatch(), MutableMap<Value, MutableSet<BaseRes
"eu-rES" to "eu",
"fa-rIR" to "fa",
"fi-rFI" to "fi",
"tl-rPH" to "tl",
"fil-rPH" to "tl",
"fr-rFR" to "fr",
"ga-rIE" to "ga",
"gl-rES" to "gl",
"gu-rIN" to "gu",
"hi-rIN" to "hi",
@@ -139,7 +140,6 @@ object AddResourcesPatch : ResourcePatch(), MutableMap<Value, MutableSet<BaseRes
"uz-rUZ" to "uz",
"vi-rVN" to "vi",
"zh-rCN" to "zh-rCN",
"zh-rHK" to "zh-rHK",
"zh-rTW" to "zh-rTW",
"zu-rZA" to "zu",
)

View File

@@ -0,0 +1,41 @@
package app.revanced.patches.duolingo.ad
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patches.duolingo.ad.fingerprints.InitializeMonetizationDebugSettingsFingerprint
import app.revanced.util.resultOrThrow
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
@Patch(
name = "Disable ads",
compatiblePackages = [CompatiblePackage("com.duolingo")]
)
@Suppress("unused")
object DisableAdsPatch : BytecodePatch(
setOf(InitializeMonetizationDebugSettingsFingerprint)
) {
override fun execute(context: BytecodeContext) {
// Couple approaches to remove ads exist:
//
// MonetizationDebugSettings has a boolean value for "disableAds".
// OnboardingState has a getter to check if the user has any "adFreeSessions".
// SharedPreferences has a debug boolean value with key "disable_ads", which maps to "DebugCategory.DISABLE_ADS".
//
// MonetizationDebugSettings seems to be the most general setting to work fine.
InitializeMonetizationDebugSettingsFingerprint.resultOrThrow().let {
it.mutableMethod.apply {
val insertIndex = it.scanResult.patternScanResult!!.startIndex
val register = getInstruction<TwoRegisterInstruction>(insertIndex).registerA
addInstructions(
insertIndex,
"const/4 v$register, 0x1"
)
}
}
}
}

View File

@@ -0,0 +1,21 @@
package app.revanced.patches.duolingo.ad.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal object InitializeMonetizationDebugSettingsFingerprint : MethodFingerprint(
returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
parameters = listOf(
"Z", // disableAds
"Z", // useDebugBilling
"Z", // showManageSubscriptions
"Z", // alwaysShowSuperAds
"Lcom/duolingo/debug/FamilyQuestOverride;",
),
opcodes = listOf(
Opcode.IPUT_BOOLEAN
)
)

View File

@@ -0,0 +1,35 @@
package app.revanced.patches.duolingo.debug
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patches.duolingo.debug.fingerprints.InitializeBuildConfigProviderFingerprint
import app.revanced.util.resultOrThrow
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
@Patch(
name = "Enable debug menu",
compatiblePackages = [CompatiblePackage("com.duolingo", ["5.158.4"])],
use = false
)
@Suppress("unused")
object EnableDebugMenuPatch : BytecodePatch(
setOf(InitializeBuildConfigProviderFingerprint)
) {
override fun execute(context: BytecodeContext) {
InitializeBuildConfigProviderFingerprint.resultOrThrow().let {
it.mutableMethod.apply {
val insertIndex = it.scanResult.patternScanResult!!.startIndex
val register = getInstruction<TwoRegisterInstruction>(insertIndex).registerA
addInstructions(
insertIndex,
"const/4 v$register, 0x1"
)
}
}
}
}

View File

@@ -0,0 +1,25 @@
package app.revanced.patches.duolingo.debug.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
/**
* The `BuildConfigProvider` class has two booleans:
*
* - `isChina`: (usually) compares "play" with "china"...except for builds in China
* - `isDebug`: compares "release" with "debug" <-- we want to force this to `true`
*/
internal object InitializeBuildConfigProviderFingerprint : MethodFingerprint(
returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
strings = listOf(
"debug",
"release",
"china",
),
opcodes = listOf(
Opcode.IPUT_BOOLEAN
)
)

View File

@@ -13,16 +13,7 @@ import app.revanced.util.exception
name = "Hide video ads",
description = "Hides ads that appear while listening to or streaming music videos, podcasts, or songs.",
compatiblePackages = [
CompatiblePackage(
"com.google.android.apps.youtube.music",
[
"6.45.54",
"6.51.53",
"7.01.53",
"7.02.52",
"7.03.52",
]
)
CompatiblePackage("com.google.android.apps.youtube.music")
],
)
@Suppress("unused")

View File

@@ -12,16 +12,7 @@ import com.android.tools.smali.dexlib2.Opcode
@Patch(
description = "Adds more audio codec options. The new audio codecs usually result in better audio quality.",
compatiblePackages = [
CompatiblePackage(
"com.google.android.apps.youtube.music",
[
"6.45.54",
"6.51.53",
"7.01.53",
"7.02.52",
"7.03.52",
]
)
CompatiblePackage("com.google.android.apps.youtube.music")
]
)
@Deprecated("This patch is no longer needed as the feature is now enabled by default.")

View File

@@ -12,16 +12,7 @@ import app.revanced.util.exception
name = "Enable exclusive audio playback",
description = "Enables the option to play audio without video.",
compatiblePackages = [
CompatiblePackage(
"com.google.android.apps.youtube.music",
[
"6.45.54",
"6.51.53",
"7.01.53",
"7.02.52",
"7.03.52",
]
)
CompatiblePackage("com.google.android.apps.youtube.music")
]
)
@Suppress("unused")

View File

@@ -14,16 +14,7 @@ import app.revanced.patches.music.interaction.permanentrepeat.fingerprints.Repea
name = "Permanent repeat",
description = "Permanently remember your repeating preference even if the playlist ends or another track is played.",
compatiblePackages = [
CompatiblePackage(
"com.google.android.apps.youtube.music",
[
"6.45.54",
"6.51.53",
"7.01.53",
"7.02.52",
"7.03.52",
]
)
CompatiblePackage("com.google.android.apps.youtube.music")
],
use = false
)

View File

@@ -14,16 +14,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
name = "Hide category bar",
description = "Hides the category bar at the top of the homepage.",
compatiblePackages = [
CompatiblePackage(
"com.google.android.apps.youtube.music",
[
"6.45.54",
"6.51.53",
"7.01.53",
"7.02.52",
"7.03.52",
]
)
CompatiblePackage("com.google.android.apps.youtube.music")
],
use = false,
)

View File

@@ -17,16 +17,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
name = "Hide 'Get Music Premium' label",
description = "Hides the \"Get Music Premium\" label from the account menu and settings.",
compatiblePackages = [
CompatiblePackage(
"com.google.android.apps.youtube.music",
[
"6.45.54",
"6.51.53",
"7.01.53",
"7.02.52",
"7.03.52",
]
)
CompatiblePackage("com.google.android.apps.youtube.music")
]
)
@Suppress("unused")

View File

@@ -23,16 +23,7 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference
name = "Remove upgrade button",
description = "Removes the upgrade tab from the pivot bar.",
compatiblePackages = [
CompatiblePackage(
"com.google.android.apps.youtube.music",
[
"6.45.54",
"6.51.53",
"7.01.53",
"7.02.52",
"7.03.52",
]
)
CompatiblePackage("com.google.android.apps.youtube.music")
]
)
@Suppress("unused")

View File

@@ -13,16 +13,7 @@ import app.revanced.patches.music.misc.androidauto.fingerprints.CheckCertificate
name = "Bypass certificate checks",
description = "Bypasses certificate checks which prevent YouTube Music from working on Android Auto.",
compatiblePackages = [
CompatiblePackage(
"com.google.android.apps.youtube.music",
[
"6.45.54",
"6.51.53",
"7.01.53",
"7.02.52",
"7.03.52",
]
)
CompatiblePackage("com.google.android.apps.youtube.music")
]
)
@Suppress("unused")

View File

@@ -14,16 +14,7 @@ import app.revanced.util.resultOrThrow
name = "Remove background playback restrictions",
description = "Removes restrictions on background playback, including playing kids videos in the background.",
compatiblePackages = [
CompatiblePackage(
"com.google.android.apps.youtube.music",
[
"6.45.54",
"6.51.53",
"7.01.53",
"7.02.52",
"7.03.52",
]
)
CompatiblePackage("com.google.android.apps.youtube.music")
]
)
@Suppress("unused")

View File

@@ -23,16 +23,7 @@ object GmsCoreSupportPatch : BaseGmsCoreSupportPatch(
integrationsPatchDependency = IntegrationsPatch::class,
gmsCoreSupportResourcePatch = GmsCoreSupportResourcePatch,
compatiblePackages = setOf(
CompatiblePackage(
"com.google.android.apps.youtube.music",
setOf(
"6.45.54",
"6.51.53",
"7.01.53",
"7.02.52",
"7.03.52",
),
),
CompatiblePackage("com.google.android.apps.youtube.music"),
),
fingerprints = setOf(
CastDynamiteModuleV2Fingerprint,

View File

@@ -1,28 +1,25 @@
package app.revanced.patches.pixiv.ads
import app.revanced.util.exception
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patches.pixiv.ads.fingerprints.IsNotPremiumFingerprint
import app.revanced.patches.pixiv.ads.fingerprints.ShouldShowAdsFingerprint
import app.revanced.util.exception
@Patch(
name = "Hide ads",
compatiblePackages = [CompatiblePackage("jp.pxv.android")]
compatiblePackages = [CompatiblePackage("jp.pxv.android")],
)
@Suppress("unused")
object HideAdsPatch : BytecodePatch(setOf(IsNotPremiumFingerprint)) {
// Always return false in the "isNotPremium" method which normally returns !this.accountManager.isPremium.
// However, this is not the method that controls the user's premium status.
// Instead, this method is used to determine whether ads should be shown.
object HideAdsPatch : BytecodePatch(setOf(ShouldShowAdsFingerprint)) {
override fun execute(context: BytecodeContext) =
IsNotPremiumFingerprint.result?.mutableClass?.virtualMethods?.first()?.addInstructions(
ShouldShowAdsFingerprint.result?.mutableMethod?.addInstructions(
0,
"""
const/4 v0, 0x0
return v0
"""
) ?: throw IsNotPremiumFingerprint.exception
}
""",
) ?: throw ShouldShowAdsFingerprint.exception
}

View File

@@ -1,21 +0,0 @@
package app.revanced.patches.pixiv.ads.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal object IsNotPremiumFingerprint : MethodFingerprint(
"V",
AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
listOf("L"),
strings = listOf("pixivAccountManager"),
customFingerprint = custom@{ _, classDef ->
// The "isNotPremium" method is the only method in the class.
if (classDef.virtualMethods.count() != 1) return@custom false
classDef.virtualMethods.first().let { isNotPremiumMethod ->
isNotPremiumMethod.parameterTypes.size == 0 && isNotPremiumMethod.returnType == "Z"
}
}
)

View File

@@ -0,0 +1,14 @@
package app.revanced.patches.pixiv.ads.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal object ShouldShowAdsFingerprint : MethodFingerprint(
"Z",
AccessFlags.PUBLIC or AccessFlags.FINAL,
customFingerprint = { methodDef, classDef ->
classDef.type.endsWith("AdUtils;") && methodDef.name == "shouldShowAds"
}
)

View File

@@ -0,0 +1,61 @@
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.fingerprint.MethodFingerprint
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.*
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.OAuthFriendRequestFingerprint
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.OAuthSubredditInfoRequestHelperFingerprint
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.OAuthUnfriendRequestFingerprint
import app.revanced.util.getReference
import app.revanced.util.resultOrThrow
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.StringReference
@Patch(
name = "Use /user/ endpoint",
description = "Replaces the deprecated endpoint for viewing user profiles /u with /user, that used to fix a bug.",
compatiblePackages = [
CompatiblePackage("com.laurencedawson.reddit_sync"),
CompatiblePackage("com.laurencedawson.reddit_sync.pro"),
CompatiblePackage("com.laurencedawson.reddit_sync.dev"),
],
use = false,
)
@Suppress("unused")
object UseUserEndpointPatch : BytecodePatch(
fingerprints = setOf(
OAuthFriendRequestFingerprint,
OAuthSubredditInfoRequestConstructorFingerprint,
OAuthSubredditInfoRequestHelperFingerprint,
OAuthUnfriendRequestFingerprint,
OAuthUserIdRequestFingerprint,
OAuthUserInfoRequestFingerprint,
),
) {
override fun execute(context: BytecodeContext) {
arrayOf(
OAuthFriendRequestFingerprint,
OAuthSubredditInfoRequestConstructorFingerprint,
OAuthSubredditInfoRequestHelperFingerprint,
OAuthUnfriendRequestFingerprint,
OAuthUserIdRequestFingerprint,
OAuthUserInfoRequestFingerprint,
).map(MethodFingerprint::resultOrThrow).map {
it.scanResult.stringsScanResult!!.matches.first().index to it.mutableMethod
}.forEach { (userPathStringIndex, method) ->
val userPathStringInstruction = method.getInstruction<OneRegisterInstruction>(userPathStringIndex)
val userPathStringRegister = userPathStringInstruction.registerA
val fixedUserPathString = userPathStringInstruction.getReference<StringReference>()!!.string.replace("u/", "user/")
method.replaceInstruction(
userPathStringIndex,
"const-string v$userPathStringRegister, \"${fixedUserPathString}\"",
)
}
}
}

View File

@@ -0,0 +1,10 @@
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
import app.revanced.patcher.fingerprint.MethodFingerprint
internal abstract class BaseUserEndpointFingerprint(source: String, accessFlags: Int? = null) :
MethodFingerprint(
accessFlags = accessFlags,
strings = listOf("u/"),
customFingerprint = { _, classDef -> classDef.sourceFile == source },
)

View File

@@ -0,0 +1,3 @@
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
internal object OAuthFriendRequestFingerprint : BaseUserEndpointFingerprint("OAuthFriendRequest.java")

View File

@@ -0,0 +1,10 @@
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
import app.revanced.patcher.extensions.or
import com.android.tools.smali.dexlib2.AccessFlags
internal object OAuthSubredditInfoRequestConstructorFingerprint :
BaseUserEndpointFingerprint(
"OAuthSubredditInfoRequest.java",
AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
)

View File

@@ -0,0 +1,10 @@
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
import app.revanced.patcher.extensions.or
import com.android.tools.smali.dexlib2.AccessFlags
internal object OAuthSubredditInfoRequestHelperFingerprint :
BaseUserEndpointFingerprint(
"OAuthSubredditInfoRequest.java",
AccessFlags.PRIVATE or AccessFlags.STATIC,
)

View File

@@ -0,0 +1,3 @@
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
internal object OAuthUnfriendRequestFingerprint : BaseUserEndpointFingerprint("OAuthUnfriendRequest.java")

View File

@@ -0,0 +1,3 @@
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
internal object OAuthUserIdRequestFingerprint : BaseUserEndpointFingerprint("OAuthUserIdRequest.java")

View File

@@ -0,0 +1,3 @@
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
internal object OAuthUserInfoRequestFingerprint : BaseUserEndpointFingerprint("OAuthUserInfoRequest.java")

View File

@@ -0,0 +1,114 @@
package app.revanced.patches.shared.misc.checks
import android.os.Build.*
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.fingerprint.MethodFingerprint
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.util.proxy.mutableTypes.encodedValue.MutableEncodedValue
import app.revanced.patcher.util.proxy.mutableTypes.encodedValue.MutableLongEncodedValue
import app.revanced.patcher.util.proxy.mutableTypes.encodedValue.MutableStringEncodedValue
import app.revanced.patches.all.misc.resources.AddResourcesPatch
import app.revanced.patches.shared.misc.checks.fingerprints.PatchInfoBuildFingerprint
import app.revanced.patches.shared.misc.checks.fingerprints.PatchInfoFingerprint
import app.revanced.patches.shared.misc.integrations.BaseIntegrationsPatch
import app.revanced.util.exception
import app.revanced.util.resultOrThrow
import com.android.tools.smali.dexlib2.immutable.value.ImmutableLongEncodedValue
import com.android.tools.smali.dexlib2.immutable.value.ImmutableStringEncodedValue
import java.nio.charset.StandardCharsets
import java.security.MessageDigest
import kotlin.io.encoding.Base64
import kotlin.io.encoding.ExperimentalEncodingApi
abstract class BaseCheckEnvironmentPatch(
private val mainActivityOnCreateFingerprint: MethodFingerprint,
compatiblePackages: Set<CompatiblePackage>,
integrationsPatch: BaseIntegrationsPatch,
) : BytecodePatch(
description = "Checks, if the application was patched by, otherwise warns the user.",
compatiblePackages = compatiblePackages,
dependencies = setOf(
AddResourcesPatch::class,
integrationsPatch::class,
),
fingerprints = setOf(
PatchInfoFingerprint,
PatchInfoBuildFingerprint,
mainActivityOnCreateFingerprint,
),
) {
override fun execute(context: BytecodeContext) {
AddResourcesPatch(BaseCheckEnvironmentPatch::class)
setPatchInfo()
invokeCheck()
}
private fun setPatchInfo() {
PatchInfoFingerprint.setClassFields(
"PATCH_TIME" to System.currentTimeMillis().encoded,
)
fun setBuildInfo() {
PatchInfoBuildFingerprint.setClassFields(
"PATCH_BOARD" to BOARD.encodedAndHashed,
"PATCH_BOOTLOADER" to BOOTLOADER.encodedAndHashed,
"PATCH_BRAND" to BRAND.encodedAndHashed,
"PATCH_CPU_ABI" to CPU_ABI.encodedAndHashed,
"PATCH_CPU_ABI2" to CPU_ABI2.encodedAndHashed,
"PATCH_DEVICE" to DEVICE.encodedAndHashed,
"PATCH_DISPLAY" to DISPLAY.encodedAndHashed,
"PATCH_FINGERPRINT" to FINGERPRINT.encodedAndHashed,
"PATCH_HARDWARE" to HARDWARE.encodedAndHashed,
"PATCH_HOST" to HOST.encodedAndHashed,
"PATCH_ID" to ID.encodedAndHashed,
"PATCH_MANUFACTURER" to MANUFACTURER.encodedAndHashed,
"PATCH_MODEL" to MODEL.encodedAndHashed,
"PATCH_PRODUCT" to PRODUCT.encodedAndHashed,
"PATCH_RADIO" to RADIO.encodedAndHashed,
"PATCH_TAGS" to TAGS.encodedAndHashed,
"PATCH_TYPE" to TYPE.encodedAndHashed,
"PATCH_USER" to USER.encodedAndHashed,
)
}
try {
Class.forName("android.os.Build")
// This only works on Android,
// because it uses Android APIs.
setBuildInfo()
} catch (_: ClassNotFoundException) { }
}
private fun invokeCheck() = mainActivityOnCreateFingerprint.result?.mutableMethod?.addInstructions(
0,
"invoke-static/range { p0 .. p0 },$INTEGRATIONS_CLASS_DESCRIPTOR->check(Landroid/app/Activity;)V",
) ?: throw mainActivityOnCreateFingerprint.exception
private companion object {
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
"Lapp/revanced/integrations/shared/checks/CheckEnvironmentPatch;"
@OptIn(ExperimentalEncodingApi::class)
private val String.encodedAndHashed
get() = MutableStringEncodedValue(
ImmutableStringEncodedValue(
Base64.encode(
MessageDigest.getInstance("SHA-1")
.digest(this.toByteArray(StandardCharsets.UTF_8)),
),
),
)
private val Long.encoded get() = MutableLongEncodedValue(ImmutableLongEncodedValue(this))
private fun <T : MutableEncodedValue> MethodFingerprint.setClassFields(vararg fieldNameValues: Pair<String, T>) {
val fieldNameValueMap = mapOf(*fieldNameValues)
resultOrThrow().mutableClass.fields.forEach { field ->
field.initialValue = fieldNameValueMap[field.name] ?: return@forEach
}
}
}
}

View File

@@ -0,0 +1,7 @@
package app.revanced.patches.shared.misc.checks.fingerprints
import app.revanced.patcher.fingerprint.MethodFingerprint
internal object PatchInfoBuildFingerprint : MethodFingerprint(
customFingerprint = { _, classDef -> classDef.type == "Lapp/revanced/integrations/shared/checks/PatchInfo\$Build;" },
)

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.shared.misc.checks.fingerprints
import app.revanced.patcher.fingerprint.MethodFingerprint
internal object PatchInfoFingerprint : MethodFingerprint(
customFingerprint = { _, classDef ->
classDef.type == "Lapp/revanced/integrations/shared/checks/PatchInfo;"
},
)

View File

@@ -115,8 +115,8 @@ abstract class BaseGmsCoreSupportPatch(
// Verify GmsCore is installed and whitelisted for power optimizations and background usage.
mainActivityOnCreateFingerprint.result?.mutableMethod?.apply {
// Temporary fix for Google photos integration.
var setContextIndex = indexOfFirstInstruction {
// Temporary fix for patches with an integrations patch that hook the onCreate method as well.
val setContextIndex = indexOfFirstInstruction {
val reference = getReference<MethodReference>() ?: return@indexOfFirstInstruction false
reference.toString() == "Lapp/revanced/integrations/shared/Utils;->setContext(Landroid/content/Context;)V"

View File

@@ -62,7 +62,7 @@ object HideAdsPatch : BytecodePatch(
// Prevent verification of an HTTP header containing the user's current plan, which would contradict the previous patch.
InterceptFingerprint.resultOrThrow().let { result ->
val conditionIndex = result.scanResult.patternScanResult!!.endIndex
val conditionIndex = result.scanResult.patternScanResult!!.endIndex + 1
result.mutableMethod.addInstruction(
conditionIndex,
"return-object p1",

View File

@@ -9,14 +9,13 @@ internal object InterceptFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC.value,
parameters = listOf("L"),
opcodes = listOf(
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
Opcode.IF_EQZ,
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT_OBJECT
),
strings = listOf("SC-Mob-UserPlan", "Configuration"),
customFingerprint = { _, classDef ->
classDef.sourceFile == "ApiUserPlanInterceptor.java"
classDef.sourceFile == "ApiUserPlanInterceptor.java" ||
classDef.sourceFile == "ApiUserPlanInterceptor.kt"
},
)

View File

@@ -20,19 +20,19 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
@Patch(
name = "Playback speed",
description = "Enables the playback speed option for all videos and " +
"retains the speed configurations in between videos.",
"retains the speed configurations in between videos.",
compatiblePackages = [
CompatiblePackage("com.ss.android.ugc.trill", ["32.5.3"]),
CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"])
]
CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"]),
],
)
@Suppress("unused")
object PlaybackSpeedPatch : BytecodePatch(
setOf(
GetSpeedFingerprint,
OnRenderFirstFrameFingerprint,
SetSpeedFingerprint
)
SetSpeedFingerprint,
),
) {
override fun execute(context: BytecodeContext) {
SetSpeedFingerprint.result?.let { onVideoSwiped ->
@@ -44,7 +44,7 @@ object PlaybackSpeedPatch : BytecodePatch(
addInstruction(
injectIndex,
"invoke-static { v$register }," +
" Lapp/revanced/integrations/tiktok/speed/PlaybackSpeedPatch;->rememberPlaybackSpeed(F)V"
" Lapp/revanced/integrations/tiktok/speed/PlaybackSpeedPatch;->rememberPlaybackSpeed(F)V",
)
} ?: throw GetSpeedFingerprint.exception
@@ -64,9 +64,9 @@ object PlaybackSpeedPatch : BytecodePatch(
# Desired playback speed retrieved using getPlaybackSpeed method.
invoke-static {}, Lapp/revanced/integrations/tiktok/speed/PlaybackSpeedPatch;->getPlaybackSpeed()F
move-result-object v2
move-result v2
invoke-static { v0, v1, v2 }, ${onVideoSwiped.method}
"""
""",
) ?: throw OnRenderFirstFrameFingerprint.exception
// Force enable the playback speed option for all videos.
@@ -75,7 +75,7 @@ object PlaybackSpeedPatch : BytecodePatch(
"""
const/4 v0, 0x1
return v0
"""
""",
) ?: throw PatchException("Failed to force enable the playback speed option.")
} ?: throw SetSpeedFingerprint.exception
}

View File

@@ -25,8 +25,8 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference
dependencies = [IntegrationsPatch::class],
compatiblePackages = [
CompatiblePackage("com.ss.android.ugc.trill", ["32.5.3"]),
CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"])
]
CompatiblePackage("com.zhiliaoapp.musically", ["32.5.3"]),
],
)
object SettingsPatch : BytecodePatch(
setOf(
@@ -34,21 +34,21 @@ object SettingsPatch : BytecodePatch(
AddSettingsEntryFingerprint,
SettingsEntryFingerprint,
SettingsEntryInfoFingerprint,
)
),
) {
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
"Lapp/revanced/integrations/tiktok/settings/AdPersonalizationActivityHook;"
private const val INITIALIZE_SETTINGS_METHOD_DESCRIPTOR =
"$INTEGRATIONS_CLASS_DESCRIPTOR->initialize(" +
"Lcom/bytedance/ies/ugc/aweme/commercialize/compliance/personalization/AdPersonalizationActivity;" +
")Z"
"Lcom/bytedance/ies/ugc/aweme/commercialize/compliance/personalization/AdPersonalizationActivity;" +
")Z"
private const val CREATE_SETTINGS_ENTRY_METHOD_DESCRIPTOR =
"$INTEGRATIONS_CLASS_DESCRIPTOR->createSettingsEntry(" +
"Ljava/lang/String;" +
"Ljava/lang/String;" +
")Ljava/lang/Object;"
"Ljava/lang/String;" +
"Ljava/lang/String;" +
")Ljava/lang/Object;"
override fun execute(context: BytecodeContext) {
// Find the class name of classes which construct a settings entry
@@ -70,8 +70,8 @@ object SettingsPatch : BytecodePatch(
markIndex + 2,
listOf(
getUnitManager,
addEntry
)
addEntry,
),
)
addInstructions(
@@ -81,7 +81,8 @@ object SettingsPatch : BytecodePatch(
const-string v1, "$settingsButtonInfoClass"
invoke-static {v0, v1}, $CREATE_SETTINGS_ENTRY_METHOD_DESCRIPTOR
move-result-object v0
"""
check-cast v0, ${SettingsEntryFingerprint.result!!.classDef}
""",
)
} ?: throw AddSettingsEntryFingerprint.exception
@@ -102,12 +103,10 @@ object SettingsPatch : BytecodePatch(
if-eqz v$usableRegister, :do_not_open
return-void
""",
ExternalLabel("do_not_open", getInstruction(initializeSettingsIndex))
ExternalLabel("do_not_open", getInstruction(initializeSettingsIndex)),
)
} ?: throw AdPersonalizationActivityOnCreateFingerprint.exception
}
private fun String.toClassName(): String {
return substring(1, this.length - 1).replace("/", ".")
}
}
private fun String.toClassName(): String = substring(1, this.length - 1).replace("/", ".")
}

View File

@@ -12,7 +12,7 @@ import app.revanced.util.exception
name = "Open links with app chooser",
description = "Instead of opening links directly, open them with an app chooser. " +
"As a result you can select a browser to open the link with.",
compatiblePackages = [CompatiblePackage("com.twitter.android")],
compatiblePackages = [CompatiblePackage("com.twitter.android", ["10.48.0-release"])],
use = false,
)
@Suppress("unused")

View File

@@ -138,8 +138,10 @@ object HideLayoutComponentsPatch : BytecodePatch(
SwitchPreference("revanced_hide_keyword_content_search"),
TextPreference("revanced_hide_keyword_content_phrases", inputType = InputType.TEXT_MULTI_LINE),
NonInteractivePreference("revanced_hide_keyword_content_about"),
),
),
NonInteractivePreference(key = "revanced_hide_keyword_content_about_whole_words",
tag = "app.revanced.integrations.youtube.settings.preference.HtmlPreference")
)
)
)
SettingsPatch.PreferenceScreen.GENERAL_LAYOUT.addPreferences(

View File

@@ -38,6 +38,7 @@ object HideShortsComponentsResourcePatch : ResourcePatch() {
SwitchPreference("revanced_hide_shorts_subscribe_button"),
SwitchPreference("revanced_hide_shorts_paused_overlay_buttons"),
SwitchPreference("revanced_hide_shorts_save_sound_button"),
SwitchPreference("revanced_hide_shorts_use_this_sound_button"),
SwitchPreference("revanced_hide_shorts_shop_button"),
SwitchPreference("revanced_hide_shorts_tagged_products"),
SwitchPreference("revanced_hide_shorts_search_suggestions"),

View File

@@ -0,0 +1,13 @@
package app.revanced.patches.youtube.misc.check
import app.revanced.patches.shared.misc.checks.BaseCheckEnvironmentPatch
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
import app.revanced.patches.youtube.shared.fingerprints.MainActivityOnCreateFingerprint
@Suppress("unused")
object CheckEnvironmentPatch :
BaseCheckEnvironmentPatch(
mainActivityOnCreateFingerprint = MainActivityOnCreateFingerprint,
integrationsPatch = IntegrationsPatch,
compatiblePackages = setOf(CompatiblePackage("com.google.android.youtube")),
)

View File

@@ -1,390 +1,11 @@
package app.revanced.patches.youtube.misc.fix.playback
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.getInstructions
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.extensions.or
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
import app.revanced.patches.all.misc.resources.AddResourcesPatch
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.backgroundplayback.BackgroundPlaybackPatch
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.*
import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch
import app.revanced.patches.youtube.misc.settings.SettingsPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.resultOrThrow
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
import com.android.tools.smali.dexlib2.iface.reference.TypeReference
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
@Patch(
name = "Spoof client",
description = "Spoofs the client to allow video playback.",
dependencies = [
SettingsPatch::class,
AddResourcesPatch::class,
UserAgentClientSpoofPatch::class,
// Required since iOS livestream fix partially enables background playback.
BackgroundPlaybackPatch::class,
PlayerTypeHookPatch::class,
],
compatiblePackages = [
CompatiblePackage(
"com.google.android.youtube",
[
// This patch works with these versions,
// but the dependent background playback patch does not.
// "18.37.36",
// "18.38.44",
// "18.43.45",
// "18.44.41",
// "18.45.43",
"18.48.39",
"18.49.37",
"19.01.34",
"19.02.39",
"19.03.36",
"19.04.38",
"19.05.36",
"19.06.39",
"19.07.40",
"19.08.36",
"19.09.38",
"19.10.39",
"19.11.43",
"19.12.41",
"19.13.37",
"19.14.43",
"19.15.36",
"19.16.39",
],
),
],
)
@Deprecated("This patch is obsolete.", replaceWith = ReplaceWith("SpoofVideoStreamsPatch"))
object SpoofClientPatch : BytecodePatch(
setOf(
// Client type spoof.
BuildInitPlaybackRequestFingerprint,
BuildPlayerRequestURIFingerprint,
SetPlayerRequestClientTypeFingerprint,
CreatePlayerRequestBodyFingerprint,
CreatePlayerRequestBodyWithModelFingerprint,
CreatePlayerRequestBodyWithVersionReleaseFingerprint,
// Player gesture config.
PlayerGestureConfigSyntheticFingerprint,
// Player speed menu item.
CreatePlaybackSpeedMenuItemFingerprint,
// Video qualities missing.
BuildRequestFingerprint,
// Livestream audio only background playback.
PlayerResponseModelBackgroundAudioPlaybackFingerprint,
)
dependencies = setOf(SpoofVideoStreamsPatch::class),
) {
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
"Lapp/revanced/integrations/youtube/patches/spoof/SpoofClientPatch;"
private const val CLIENT_INFO_CLASS_DESCRIPTOR =
"Lcom/google/protos/youtube/api/innertube/InnertubeContext\$ClientInfo;"
private const val REQUEST_CLASS_DESCRIPTOR =
"Lorg/chromium/net/ExperimentalUrlRequest;"
private const val REQUEST_BUILDER_CLASS_DESCRIPTOR =
"Lorg/chromium/net/ExperimentalUrlRequest\$Builder;"
override fun execute(context: BytecodeContext) {
AddResourcesPatch(this::class)
SettingsPatch.PreferenceScreen.MISC.addPreferences(
PreferenceScreen(
key = "revanced_spoof_client_screen",
sorting = PreferenceScreen.Sorting.UNSORTED,
preferences = setOf(
SwitchPreference("revanced_spoof_client"),
SwitchPreference("revanced_spoof_client_use_ios"),
),
),
)
// region Block /initplayback requests to fall back to /get_watch requests.
BuildInitPlaybackRequestFingerprint.resultOrThrow().let {
val moveUriStringIndex = it.scanResult.patternScanResult!!.startIndex
it.mutableMethod.apply {
val targetRegister = getInstruction<OneRegisterInstruction>(moveUriStringIndex).registerA
addInstructions(
moveUriStringIndex + 1,
"""
invoke-static { v$targetRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->blockInitPlaybackRequest(Ljava/lang/String;)Ljava/lang/String;
move-result-object v$targetRegister
""",
)
}
}
// endregion
// region Block /get_watch requests to fall back to /player requests.
BuildPlayerRequestURIFingerprint.resultOrThrow().let {
val invokeToStringIndex = it.scanResult.patternScanResult!!.startIndex
it.mutableMethod.apply {
val uriRegister = getInstruction<FiveRegisterInstruction>(invokeToStringIndex).registerC
addInstructions(
invokeToStringIndex,
"""
invoke-static { v$uriRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->blockGetWatchRequest(Landroid/net/Uri;)Landroid/net/Uri;
move-result-object v$uriRegister
""",
)
}
}
// endregion
// region Get field references to be used below.
val (clientInfoField, clientInfoClientTypeField, clientInfoClientVersionField) =
SetPlayerRequestClientTypeFingerprint.resultOrThrow().let { result ->
// Field in the player request object that holds the client info object.
val clientInfoField = result.mutableMethod
.getInstructions().find { instruction ->
// requestMessage.clientInfo = clientInfoBuilder.build();
instruction.opcode == Opcode.IPUT_OBJECT &&
instruction.getReference<FieldReference>()?.type == CLIENT_INFO_CLASS_DESCRIPTOR
}?.getReference<FieldReference>() ?: throw PatchException("Could not find clientInfoField")
// Client info object's client type field.
val clientInfoClientTypeField = result.mutableMethod
.getInstruction(result.scanResult.patternScanResult!!.endIndex)
.getReference<FieldReference>() ?: throw PatchException("Could not find clientInfoClientTypeField")
// Client info object's client version field.
val clientInfoClientVersionField = result.mutableMethod
.getInstruction(result.scanResult.stringsScanResult!!.matches.first().index + 1)
.getReference<FieldReference>()
?: throw PatchException("Could not find clientInfoClientVersionField")
Triple(clientInfoField, clientInfoClientTypeField, clientInfoClientVersionField)
}
val clientInfoClientModelField = CreatePlayerRequestBodyWithModelFingerprint.resultOrThrow().let {
val getClientModelIndex =
CreatePlayerRequestBodyWithModelFingerprint.indexOfBuildModelInstruction(it.method)
// The next IPUT_OBJECT instruction after getting the client model is setting the client model field.
val index = it.mutableMethod.indexOfFirstInstructionOrThrow(getClientModelIndex) {
opcode == Opcode.IPUT_OBJECT
}
it.mutableMethod.getInstruction(index).getReference<FieldReference>()
?: throw PatchException("Could not find clientInfoClientModelField")
}
val clientInfoOsVersionField = CreatePlayerRequestBodyWithVersionReleaseFingerprint.resultOrThrow().let {
val getOsVersionIndex =
CreatePlayerRequestBodyWithVersionReleaseFingerprint.indexOfBuildVersionReleaseInstruction(it.method)
// The next IPUT_OBJECT instruction after getting the client os version is setting the client os version field.
val index = it.mutableMethod.indexOfFirstInstructionOrThrow(getOsVersionIndex) {
opcode == Opcode.IPUT_OBJECT
}
it.mutableMethod.getInstruction(index).getReference<FieldReference>()
?: throw PatchException("Could not find clientInfoOsVersionField")
}
// endregion
// region Spoof client type for /player requests.
CreatePlayerRequestBodyFingerprint.resultOrThrow().let { result ->
val setClientInfoMethodName = "patch_setClientInfo"
val checkCastIndex = result.scanResult.patternScanResult!!.startIndex
var clientInfoContainerClassName: String
result.mutableMethod.apply {
val checkCastInstruction = getInstruction<OneRegisterInstruction>(checkCastIndex)
val requestMessageInstanceRegister = checkCastInstruction.registerA
clientInfoContainerClassName = checkCastInstruction.getReference<TypeReference>()!!.type
addInstruction(
checkCastIndex + 1,
"invoke-static { v$requestMessageInstanceRegister }," +
" ${result.classDef.type}->$setClientInfoMethodName($clientInfoContainerClassName)V",
)
}
// Change client info to use the spoofed values.
// Do this in a helper method, to remove the need of picking out multiple free registers from the hooked code.
result.mutableClass.methods.add(
ImmutableMethod(
result.mutableClass.type,
setClientInfoMethodName,
listOf(ImmutableMethodParameter(clientInfoContainerClassName, null, "clientInfoContainer")),
"V",
AccessFlags.PRIVATE or AccessFlags.STATIC,
null,
null,
MutableMethodImplementation(3),
).toMutable().apply {
addInstructions(
"""
invoke-static { }, $INTEGRATIONS_CLASS_DESCRIPTOR->isClientSpoofingEnabled()Z
move-result v0
if-eqz v0, :disabled
iget-object v0, p0, $clientInfoField
# Set client type to the spoofed value.
iget v1, v0, $clientInfoClientTypeField
invoke-static { v1 }, $INTEGRATIONS_CLASS_DESCRIPTOR->getClientTypeId(I)I
move-result v1
iput v1, v0, $clientInfoClientTypeField
# Set client model to the spoofed value.
iget-object v1, v0, $clientInfoClientModelField
invoke-static { v1 }, $INTEGRATIONS_CLASS_DESCRIPTOR->getClientModel(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
iput-object v1, v0, $clientInfoClientModelField
# Set client version to the spoofed value.
iget-object v1, v0, $clientInfoClientVersionField
invoke-static { v1 }, $INTEGRATIONS_CLASS_DESCRIPTOR->getClientVersion(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
iput-object v1, v0, $clientInfoClientVersionField
# Set client os version to the spoofed value.
iget-object v1, v0, $clientInfoOsVersionField
invoke-static { v1 }, $INTEGRATIONS_CLASS_DESCRIPTOR->getOsVersion(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
iput-object v1, v0, $clientInfoOsVersionField
:disabled
return-void
""",
)
},
)
}
// endregion
// region Fix player gesture if spoofing to iOS.
PlayerGestureConfigSyntheticFingerprint.resultOrThrow().let {
val endIndex = it.scanResult.patternScanResult!!.endIndex
val downAndOutLandscapeAllowedIndex = endIndex - 3
val downAndOutPortraitAllowedIndex = endIndex - 9
arrayOf(
downAndOutLandscapeAllowedIndex,
downAndOutPortraitAllowedIndex,
).forEach { index ->
val gestureAllowedMethod = context.toMethodWalker(it.mutableMethod)
.nextMethod(index, true)
.getMethod() as MutableMethod
gestureAllowedMethod.apply {
val isAllowedIndex = getInstructions().lastIndex
val isAllowed = getInstruction<OneRegisterInstruction>(isAllowedIndex).registerA
addInstructions(
isAllowedIndex,
"""
invoke-static { v$isAllowed }, $INTEGRATIONS_CLASS_DESCRIPTOR->enablePlayerGesture(Z)Z
move-result v$isAllowed
""",
)
}
}
}
// endregion
// region Fix livestream audio only background play if spoofing to iOS.
// This force enables audio background playback.
PlayerResponseModelBackgroundAudioPlaybackFingerprint.resultOrThrow().mutableMethod.addInstructions(
0,
"""
invoke-static { }, $INTEGRATIONS_CLASS_DESCRIPTOR->overrideBackgroundAudioPlayback()Z
move-result v0
if-eqz v0, :do_not_override
return v0
:do_not_override
nop
"""
)
// endregion
// Fix playback speed menu item if spoofing to iOS.
CreatePlaybackSpeedMenuItemFingerprint.resultOrThrow().let {
val scanResult = it.scanResult.patternScanResult!!
if (scanResult.startIndex != 0) throw PatchException("Unexpected start index: ${scanResult.startIndex}")
it.mutableMethod.apply {
// Find the conditional check if the playback speed menu item is not created.
val shouldCreateMenuIndex =
indexOfFirstInstructionOrThrow(scanResult.endIndex) { opcode == Opcode.IF_EQZ }
val shouldCreateMenuRegister = getInstruction<OneRegisterInstruction>(shouldCreateMenuIndex).registerA
addInstructions(
shouldCreateMenuIndex,
"""
invoke-static { v$shouldCreateMenuRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->forceCreatePlaybackSpeedMenu(Z)Z
move-result v$shouldCreateMenuRegister
""",
)
}
}
// endregion
// region Fix video qualities missing, if spoofing to iOS by overriding the user agent.
BuildRequestFingerprint.resultOrThrow().let { result ->
result.mutableMethod.apply {
val buildRequestIndex = getInstructions().lastIndex - 2
val requestBuilderRegister = getInstruction<FiveRegisterInstruction>(buildRequestIndex).registerC
val newRequestBuilderIndex = result.scanResult.patternScanResult!!.endIndex
val urlRegister = getInstruction<FiveRegisterInstruction>(newRequestBuilderIndex).registerD
// Replace "requestBuilder.build(): Request" with "overrideUserAgent(requestBuilder, url): Request".
replaceInstruction(
buildRequestIndex,
"invoke-static { v$requestBuilderRegister, v$urlRegister }, " +
"$INTEGRATIONS_CLASS_DESCRIPTOR->" +
"overrideUserAgent(${REQUEST_BUILDER_CLASS_DESCRIPTOR}Ljava/lang/String;)" +
REQUEST_CLASS_DESCRIPTOR
)
}
}
// endregion
}
}
override fun execute(context: BytecodeContext) {}
}

View File

@@ -1,239 +1,12 @@
package app.revanced.patches.youtube.misc.fix.playback
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.smali.ExternalLabel
import app.revanced.patches.all.misc.resources.AddResourcesPatch
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen.Sorting
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.*
import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch
import app.revanced.patches.youtube.misc.settings.SettingsPatch
import app.revanced.patches.youtube.video.information.VideoInformationPatch
import app.revanced.patches.youtube.video.playerresponse.PlayerResponseMethodHookPatch
import app.revanced.util.exception
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
@Patch(
description = "Spoofs the signature to prevent playback issues.",
dependencies = [
SettingsPatch::class,
PlayerTypeHookPatch::class,
PlayerResponseMethodHookPatch::class,
VideoInformationPatch::class,
SpoofSignatureResourcePatch::class,
AddResourcesPatch::class,
],
)
@Deprecated("This patch will be removed in the future.")
@Deprecated("This patch is obsolete.", replaceWith = ReplaceWith("SpoofVideoStreamsPatch"))
object SpoofSignaturePatch : BytecodePatch(
setOf(
PlayerResponseModelImplGeneralFingerprint,
PlayerResponseModelImplLiveStreamFingerprint,
PlayerResponseModelImplRecommendedLevelFingerprint,
StoryboardRendererSpecFingerprint,
StoryboardRendererDecoderSpecFingerprint,
StoryboardRendererDecoderRecommendedLevelFingerprint,
StoryboardThumbnailParentFingerprint,
SpoofSignaturePatchScrubbedPreviewLayoutFingerprint,
StatsQueryParameterFingerprint,
ParamsMapPutFingerprint,
),
dependencies = setOf(SpoofVideoStreamsPatch::class),
) {
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
"Lapp/revanced/integrations/youtube/patches/spoof/SpoofSignaturePatch;"
override fun execute(context: BytecodeContext) {
AddResourcesPatch(this::class)
SettingsPatch.PreferenceScreen.MISC.addPreferences(
PreferenceScreen(
key = "revanced_spoof_signature_verification_screen",
sorting = Sorting.UNSORTED,
preferences = setOf(
SwitchPreference("revanced_spoof_signature_verification_enabled"),
SwitchPreference("revanced_spoof_signature_in_feed_enabled"),
SwitchPreference("revanced_spoof_storyboard"),
),
),
)
// Hook the player parameters.
PlayerResponseMethodHookPatch += PlayerResponseMethodHookPatch.Hook.ProtoBufferParameter(
"$INTEGRATIONS_CLASS_DESCRIPTOR->spoofParameter(Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;",
)
// Force the seekbar time and chapters to always show up.
// This is used if the storyboard spec fetch fails, for viewing paid videos,
// or if storyboard spoofing is turned off.
StoryboardThumbnailParentFingerprint.result?.classDef?.let { classDef ->
StoryboardThumbnailFingerprint.also {
it.resolve(
context,
classDef,
)
}.result?.let {
val endIndex = it.scanResult.patternScanResult!!.endIndex
// Replace existing instruction to preserve control flow label.
// The replaced return instruction always returns false
// (it is the 'no thumbnails found' control path),
// so there is no need to pass the existing return value to integrations.
it.mutableMethod.replaceInstruction(
endIndex,
"""
invoke-static {}, $INTEGRATIONS_CLASS_DESCRIPTOR->getSeekbarThumbnailOverrideValue()Z
""",
)
// Since this is end of the method must replace one line then add the rest.
it.mutableMethod.addInstructions(
endIndex + 1,
"""
move-result v0
return v0
""",
)
} ?: throw StoryboardThumbnailFingerprint.exception
}
// If storyboard spoofing is turned off, then hide the empty seekbar thumbnail view.
SpoofSignaturePatchScrubbedPreviewLayoutFingerprint.result?.apply {
val endIndex = scanResult.patternScanResult!!.endIndex
mutableMethod.apply {
val imageViewFieldName = getInstruction<ReferenceInstruction>(endIndex).reference
addInstructions(
implementation!!.instructions.lastIndex,
"""
iget-object v0, p0, $imageViewFieldName # copy imageview field to a register
invoke-static {v0}, $INTEGRATIONS_CLASS_DESCRIPTOR->seekbarImageViewCreated(Landroid/widget/ImageView;)V
""",
)
}
} ?: throw SpoofSignaturePatchScrubbedPreviewLayoutFingerprint.exception
/**
* Hook StoryBoard renderer url
*/
arrayOf(
PlayerResponseModelImplGeneralFingerprint,
PlayerResponseModelImplLiveStreamFingerprint,
).forEach { fingerprint ->
fingerprint.result?.let {
it.mutableMethod.apply {
val getStoryBoardIndex = it.scanResult.patternScanResult!!.endIndex
val getStoryBoardRegister =
getInstruction<OneRegisterInstruction>(getStoryBoardIndex).registerA
addInstructions(
getStoryBoardIndex,
"""
invoke-static { v$getStoryBoardRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->getStoryboardRendererSpec(Ljava/lang/String;)Ljava/lang/String;
move-result-object v$getStoryBoardRegister
""",
)
}
} ?: throw fingerprint.exception
}
// Hook recommended seekbar thumbnails quality level.
StoryboardRendererDecoderRecommendedLevelFingerprint.result?.let {
val moveOriginalRecommendedValueIndex = it.scanResult.patternScanResult!!.endIndex
val originalValueRegister = it.mutableMethod
.getInstruction<OneRegisterInstruction>(moveOriginalRecommendedValueIndex).registerA
it.mutableMethod.addInstructions(
moveOriginalRecommendedValueIndex + 1,
"""
invoke-static { v$originalValueRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->getRecommendedLevel(I)I
move-result v$originalValueRegister
""",
)
} ?: throw StoryboardRendererDecoderRecommendedLevelFingerprint.exception
// Hook the recommended precise seeking thumbnails quality level.
PlayerResponseModelImplRecommendedLevelFingerprint.result?.let {
it.mutableMethod.apply {
val moveOriginalRecommendedValueIndex = it.scanResult.patternScanResult!!.endIndex
val originalValueRegister =
getInstruction<OneRegisterInstruction>(moveOriginalRecommendedValueIndex).registerA
addInstructions(
moveOriginalRecommendedValueIndex,
"""
invoke-static { v$originalValueRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->getRecommendedLevel(I)I
move-result v$originalValueRegister
""",
)
}
} ?: throw PlayerResponseModelImplRecommendedLevelFingerprint.exception
StoryboardRendererSpecFingerprint.result?.let {
it.mutableMethod.apply {
val storyBoardUrlParams = 0
addInstructionsWithLabels(
0,
"""
if-nez p$storyBoardUrlParams, :ignore
invoke-static { p$storyBoardUrlParams }, $INTEGRATIONS_CLASS_DESCRIPTOR->getStoryboardRendererSpec(Ljava/lang/String;)Ljava/lang/String;
move-result-object p$storyBoardUrlParams
""",
ExternalLabel("ignore", getInstruction(0)),
)
}
} ?: throw StoryboardRendererSpecFingerprint.exception
// Hook the seekbar thumbnail decoder and use a NULL spec for live streams.
StoryboardRendererDecoderSpecFingerprint.result?.let {
val storyBoardUrlIndex = it.scanResult.patternScanResult!!.startIndex + 1
val storyboardUrlRegister =
it.mutableMethod.getInstruction<OneRegisterInstruction>(storyBoardUrlIndex).registerA
it.mutableMethod.addInstructions(
storyBoardUrlIndex + 1,
"""
invoke-static { v$storyboardUrlRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->getStoryboardDecoderRendererSpec(Ljava/lang/String;)Ljava/lang/String;
move-result-object v$storyboardUrlRegister
""",
)
} ?: throw StoryboardRendererDecoderSpecFingerprint.exception
// Fix stats not being tracked.
// Due to signature spoofing "adformat" is present in query parameters made for /stats requests,
// even though, for regular videos, it should not be.
// This breaks stats tracking.
// Replace the ad parameter with the video parameter in the query parameters.
StatsQueryParameterFingerprint.result?.let {
val putMethod = ParamsMapPutFingerprint.result?.method?.toString()
?: throw ParamsMapPutFingerprint.exception
it.mutableMethod.apply {
val adParamIndex = it.scanResult.stringsScanResult!!.matches.first().index
val videoParamIndex = adParamIndex + 3
// Replace the ad parameter with the video parameter.
replaceInstruction(adParamIndex, getInstruction(videoParamIndex))
// Call paramsMap.put instead of paramsMap.putIfNotExist
// because the key is already present in the map.
val putAdParamIndex = adParamIndex + 1
val putIfKeyNotExistsInstruction = getInstruction<FiveRegisterInstruction>(putAdParamIndex)
replaceInstruction(
putAdParamIndex,
"invoke-virtual { " +
"v${putIfKeyNotExistsInstruction.registerC}, " +
"v${putIfKeyNotExistsInstruction.registerD}, " +
"v${putIfKeyNotExistsInstruction.registerE} }, " +
putMethod,
)
}
} ?: throw StatsQueryParameterFingerprint.exception
}
override fun execute(context: BytecodeContext) {}
}

View File

@@ -2,18 +2,8 @@ package app.revanced.patches.youtube.misc.fix.playback
import app.revanced.patcher.data.ResourceContext
import app.revanced.patcher.patch.ResourcePatch
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patches.shared.misc.mapping.ResourceMappingPatch
@Patch(dependencies = [ResourceMappingPatch::class])
@Deprecated("This patch will be removed in the future.")
object SpoofSignatureResourcePatch : ResourcePatch() {
internal var scrubbedPreviewThumbnailResourceId: Long = -1
override fun execute(context: ResourceContext) {
scrubbedPreviewThumbnailResourceId = ResourceMappingPatch[
"id",
"thumbnail",
]
}
override fun execute(context: ResourceContext) {}
}

View File

@@ -0,0 +1,285 @@
package app.revanced.patches.youtube.misc.fix.playback
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.InstructionExtensions.getInstructions
import app.revanced.patcher.extensions.or
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
import app.revanced.patches.all.misc.resources.AddResourcesPatch
import app.revanced.patches.shared.misc.settings.preference.ListPreference
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.BuildInitPlaybackRequestFingerprint
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.BuildMediaDataSourceFingerprint
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.BuildPlayerRequestURIFingerprint
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.BuildRequestFingerprint
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.CreateStreamingDataFingerprint
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.ProtobufClassParseByteBufferFingerprint
import app.revanced.patches.youtube.misc.settings.SettingsPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import app.revanced.util.resultOrThrow
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
@Patch(
name = "Spoof video streams",
description = "Spoofs the client video streams to allow video playback.",
dependencies = [
SettingsPatch::class,
AddResourcesPatch::class,
UserAgentClientSpoofPatch::class,
],
compatiblePackages = [
CompatiblePackage(
"com.google.android.youtube",
[
"18.37.36",
"18.38.44",
"18.43.45",
"18.44.41",
"18.45.43",
"18.48.39",
"18.49.37",
"19.01.34",
"19.02.39",
"19.03.36",
"19.04.38",
"19.05.36",
"19.06.39",
"19.07.40",
"19.08.36",
"19.09.38",
"19.10.39",
"19.11.43",
"19.12.41",
"19.13.37",
"19.14.43",
"19.15.36",
"19.16.39",
],
),
],
)
object SpoofVideoStreamsPatch : BytecodePatch(
setOf(
BuildInitPlaybackRequestFingerprint,
BuildPlayerRequestURIFingerprint,
CreateStreamingDataFingerprint,
BuildMediaDataSourceFingerprint,
BuildRequestFingerprint,
ProtobufClassParseByteBufferFingerprint,
),
) {
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
"Lapp/revanced/integrations/youtube/patches/spoof/SpoofVideoStreamsPatch;"
override fun execute(context: BytecodeContext) {
AddResourcesPatch(this::class)
SettingsPatch.PreferenceScreen.MISC.addPreferences(
PreferenceScreen(
key = "revanced_spoof_video_streams_screen",
sorting = PreferenceScreen.Sorting.UNSORTED,
preferences = setOf(
SwitchPreference("revanced_spoof_video_streams"),
ListPreference(
"revanced_spoof_video_streams_client",
summaryKey = null
),
SwitchPreference(
"revanced_spoof_video_streams_ios_force_avc",
tag = "app.revanced.integrations.youtube.settings.preference.ForceAVCSpoofingPreference",
),
NonInteractivePreference("revanced_spoof_video_streams_about_android_vr"),
NonInteractivePreference("revanced_spoof_video_streams_about_ios"),
),
),
)
// region Block /initplayback requests to fall back to /get_watch requests.
BuildInitPlaybackRequestFingerprint.resultOrThrow().let {
val moveUriStringIndex = it.scanResult.patternScanResult!!.startIndex
it.mutableMethod.apply {
val targetRegister = getInstruction<OneRegisterInstruction>(moveUriStringIndex).registerA
addInstructions(
moveUriStringIndex + 1,
"""
invoke-static { v$targetRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->blockInitPlaybackRequest(Ljava/lang/String;)Ljava/lang/String;
move-result-object v$targetRegister
""",
)
}
}
// endregion
// region Block /get_watch requests to fall back to /player requests.
BuildPlayerRequestURIFingerprint.resultOrThrow().let {
val invokeToStringIndex = it.scanResult.patternScanResult!!.startIndex
it.mutableMethod.apply {
val uriRegister = getInstruction<FiveRegisterInstruction>(invokeToStringIndex).registerC
addInstructions(
invokeToStringIndex,
"""
invoke-static { v$uriRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->blockGetWatchRequest(Landroid/net/Uri;)Landroid/net/Uri;
move-result-object v$uriRegister
""",
)
}
}
// endregion
// region Get replacement streams at player requests.
BuildRequestFingerprint.resultOrThrow().mutableMethod.apply {
val newRequestBuilderIndex = indexOfFirstInstructionOrThrow {
opcode == Opcode.INVOKE_VIRTUAL &&
getReference<MethodReference>()?.name == "newUrlRequestBuilder"
}
val urlRegister = getInstruction<FiveRegisterInstruction>(newRequestBuilderIndex).registerD
val freeRegister = getInstruction<OneRegisterInstruction>(newRequestBuilderIndex + 1).registerA
addInstructions(
newRequestBuilderIndex,
"""
move-object v$freeRegister, p1
invoke-static { v$urlRegister, v$freeRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->fetchStreams(Ljava/lang/String;Ljava/util/Map;)V
""",
)
}
// endregion
// region Replace the streaming data with the replacement streams.
CreateStreamingDataFingerprint.resultOrThrow().let { result ->
result.mutableMethod.apply {
val setStreamDataMethodName = "patch_setStreamingData"
val resultMethodType = result.mutableClass.type
val videoDetailsIndex = result.scanResult.patternScanResult!!.endIndex
val videoDetailsRegister = getInstruction<TwoRegisterInstruction>(videoDetailsIndex).registerA
val videoDetailsClass = getInstruction(videoDetailsIndex).getReference<FieldReference>()!!.type
addInstruction(
videoDetailsIndex + 1,
"invoke-direct { p0, v$videoDetailsRegister }, " +
"$resultMethodType->$setStreamDataMethodName($videoDetailsClass)V",
)
val protobufClass = ProtobufClassParseByteBufferFingerprint.resultOrThrow().mutableMethod.definingClass
val setStreamingDataIndex = result.scanResult.patternScanResult!!.startIndex
val playerProtoClass = getInstruction(setStreamingDataIndex + 1)
.getReference<FieldReference>()!!.definingClass
val setStreamingDataField = getInstruction(setStreamingDataIndex).getReference<FieldReference>()
val getStreamingDataField = getInstruction(
indexOfFirstInstructionOrThrow {
opcode == Opcode.IGET_OBJECT && getReference<FieldReference>()?.definingClass == playerProtoClass
}
).getReference<FieldReference>()
// Use a helper method to avoid the need of picking out multiple free registers from the hooked code.
result.mutableClass.methods.add(
ImmutableMethod(
resultMethodType,
setStreamDataMethodName,
listOf(ImmutableMethodParameter(videoDetailsClass, null, "videoDetails")),
"V",
AccessFlags.PRIVATE or AccessFlags.FINAL,
null,
null,
MutableMethodImplementation(9),
).toMutable().apply {
addInstructionsWithLabels(
0,
"""
invoke-static { }, $INTEGRATIONS_CLASS_DESCRIPTOR->isSpoofingEnabled()Z
move-result v0
if-eqz v0, :disabled
# Get video id.
iget-object v2, p1, $videoDetailsClass->c:Ljava/lang/String;
if-eqz v2, :disabled
# Get streaming data.
invoke-static { v2 }, $INTEGRATIONS_CLASS_DESCRIPTOR->getStreamingData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
move-result-object v3
if-eqz v3, :disabled
# Parse streaming data.
sget-object v4, $playerProtoClass->a:$playerProtoClass
invoke-static { v4, v3 }, $protobufClass->parseFrom(${protobufClass}Ljava/nio/ByteBuffer;)$protobufClass
move-result-object v5
check-cast v5, $playerProtoClass
# Set streaming data.
iget-object v6, v5, $getStreamingDataField
if-eqz v6, :disabled
iput-object v6, p0, $setStreamingDataField
:disabled
return-void
""",
)
},
)
}
}
// endregion
// region Remove /videoplayback request body to fix playback.
// This is needed when using iOS client as streaming data source.
BuildMediaDataSourceFingerprint.resultOrThrow().let {
it.mutableMethod.apply {
val targetIndex = getInstructions().lastIndex
// Instructions are added just before the method returns,
// so there's no concern of clobbering in-use registers.
addInstructions(
targetIndex,
"""
# Field a: Stream uri.
# Field c: Http method.
# Field d: Post data.
move-object v0, p0 # method has over 15 registers and must copy p0 to a lower register.
iget-object v1, v0, $definingClass->a:Landroid/net/Uri;
iget v2, v0, $definingClass->c:I
iget-object v3, v0, $definingClass->d:[B
invoke-static { v1, v2, v3 }, $INTEGRATIONS_CLASS_DESCRIPTOR->removeVideoPlaybackPostBody(Landroid/net/Uri;I[B)[B
move-result-object v1
iput-object v1, v0, $definingClass->d:[B
""",
)
}
}
// endregion
}
}

View File

@@ -0,0 +1,22 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal object BuildMediaDataSourceFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
returnType = "V",
parameters = listOf(
"Landroid/net/Uri;",
"J",
"I",
"[B",
"Ljava/util/Map;",
"J",
"J",
"Ljava/lang/String;",
"I",
"Ljava/lang/Object;"
)
)

View File

@@ -3,13 +3,34 @@ package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal object BuildRequestFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC,
returnType = "Lorg/chromium/net/UrlRequest;",
opcodes = listOf(
Opcode.INVOKE_DIRECT,
Opcode.INVOKE_VIRTUAL
)
customFingerprint = { methodDef, _ ->
// Different targets have slightly different parameters
// Earlier targets have parameters:
//L
//Ljava/util/Map;
//[B
//L
//L
//L
//Lorg/chromium/net/UrlRequest$Callback;
// Later targets have parameters:
//L
//Ljava/util/Map;
//[B
//L
//L
//L
//Lorg/chromium/net/UrlRequest\$Callback;
//L
val parameterTypes = methodDef.parameterTypes
(parameterTypes.size == 7 || parameterTypes.size == 8)
&& parameterTypes[1] == "Ljava/util/Map;" // URL headers.
}
)

View File

@@ -1,34 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal object CreatePlaybackSpeedMenuItemFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
returnType = "V",
opcodes = listOf(
Opcode.IGET_OBJECT, // First instruction of the method
Opcode.IGET_OBJECT,
Opcode.IGET_OBJECT,
Opcode.CONST_4,
Opcode.IF_EQZ,
Opcode.INVOKE_INTERFACE,
null // MOVE_RESULT or MOVE_RESULT_OBJECT, Return value controls the creation of the playback speed menu item.
),
// 19.01 and earlier is missing the second parameter.
// Since this fingerprint is somewhat weak, work around by checking for both method parameter signatures.
customFingerprint = custom@{ methodDef, _ ->
// 19.01 and earlier parameters are: "[L"
// 19.02+ parameters are "[L", "F"
val parameterTypes = methodDef.parameterTypes
val firstParameter = parameterTypes.firstOrNull()
if (firstParameter == null || !firstParameter.startsWith("[L")) {
return@custom false
}
parameterTypes.size == 1 || (parameterTypes.size == 2 && parameterTypes[1] == "F")
}
)

View File

@@ -1,15 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.Opcode
internal object CreatePlayerRequestBodyFingerprint : MethodFingerprint(
returnType = "V",
parameters = listOf("L"),
opcodes = listOf(
Opcode.CHECK_CAST,
Opcode.IGET,
Opcode.AND_INT_LIT16,
),
strings = listOf("ms"),
)

View File

@@ -1,31 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.CreatePlayerRequestBodyWithModelFingerprint.indexOfBuildModelInstruction
import app.revanced.util.containsWideLiteralInstructionValue
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstruction
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
internal object CreatePlayerRequestBodyWithModelFingerprint : MethodFingerprint(
returnType = "L",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf(),
customFingerprint = { methodDef, _ ->
methodDef.containsWideLiteralInstructionValue(1073741824) &&
indexOfBuildModelInstruction(methodDef) >= 0
},
) {
fun indexOfBuildModelInstruction(methodDef: Method) =
methodDef.indexOfFirstInstruction {
val reference = getReference<FieldReference>()
reference?.definingClass == "Landroid/os/Build;" &&
reference.name == "MODEL" &&
reference.type == "Ljava/lang/String;"
}
}

View File

@@ -1,31 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.CreatePlayerRequestBodyWithVersionReleaseFingerprint.indexOfBuildVersionReleaseInstruction
import app.revanced.util.containsWideLiteralInstructionValue
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstruction
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
internal object CreatePlayerRequestBodyWithVersionReleaseFingerprint : MethodFingerprint(
returnType = "L",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf(),
customFingerprint = { methodDef, _ ->
methodDef.containsWideLiteralInstructionValue(1073741824) &&
indexOfBuildVersionReleaseInstruction(methodDef) >= 0
},
) {
fun indexOfBuildVersionReleaseInstruction(methodDef: Method) =
methodDef.indexOfFirstInstruction {
val reference = getReference<FieldReference>()
reference?.definingClass == "Landroid/os/Build\$VERSION;" &&
reference.name == "RELEASE" &&
reference.type == "Ljava/lang/String;"
}
}

View File

@@ -0,0 +1,24 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal object CreateStreamingDataFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
returnType = "V",
parameters = listOf("L"),
opcodes = listOf(
Opcode.IPUT_OBJECT,
Opcode.IGET_OBJECT,
Opcode.IF_NEZ,
Opcode.SGET_OBJECT,
Opcode.IPUT_OBJECT
),
customFingerprint = { methodDef, classDef ->
classDef.fields.any { field ->
field.name == "a" && field.type.endsWith("/StreamingDataOuterClass\$StreamingData;")
}
},
)

View File

@@ -1,25 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
@Deprecated("Fingerprint is obsolete and will be deleted soon")
internal object ParamsMapPutFingerprint : MethodFingerprint(
returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf(
"Ljava/lang/String;",
"Ljava/lang/String;",
),
opcodes = listOf(
Opcode.CONST_4,
Opcode.CONST_4,
Opcode.CONST_4,
Opcode.MOVE_OBJECT,
Opcode.MOVE_OBJECT,
Opcode.MOVE_OBJECT,
Opcode.INVOKE_DIRECT_RANGE,
),
)

View File

@@ -1,49 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstruction
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
internal object PlayerGestureConfigSyntheticFingerprint : MethodFingerprint(
returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf("Ljava/lang/Object;"),
opcodes = listOf(
Opcode.SGET_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
Opcode.IF_EQZ,
Opcode.IF_EQZ,
Opcode.IGET_OBJECT,
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL, // playerGestureConfig.downAndOutLandscapeAllowed.
Opcode.MOVE_RESULT,
Opcode.CHECK_CAST,
Opcode.IPUT_BOOLEAN,
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL, // playerGestureConfig.downAndOutPortraitAllowed.
Opcode.MOVE_RESULT,
Opcode.IPUT_BOOLEAN,
Opcode.RETURN_VOID,
),
customFingerprint = { methodDef, classDef ->
fun indexOfDownAndOutAllowedInstruction(methodDef: Method) =
methodDef.indexOfFirstInstruction {
val reference = getReference<MethodReference>()
reference?.definingClass == "Lcom/google/android/libraries/youtube/innertube/model/media/PlayerConfigModel;" &&
reference.parameterTypes.isEmpty() &&
reference.returnType == "Z"
}
// This method is always called "a" because this kind of class always has a single method.
methodDef.name == "a" && classDef.methods.count() == 2 &&
indexOfDownAndOutAllowedInstruction(methodDef) >= 0
},
)

View File

@@ -1,25 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal object PlayerResponseModelBackgroundAudioPlaybackFingerprint : MethodFingerprint(
returnType = "Z",
accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC,
parameters = listOf("Lcom/google/android/libraries/youtube/innertube/model/player/PlayerResponseModel;"),
opcodes = listOf(
Opcode.CONST_4,
Opcode.IF_EQZ,
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
Opcode.IF_NEZ,
Opcode.GOTO,
Opcode.RETURN,
null, // Opcode.CONST_4 or Opcode.MOVE
Opcode.RETURN,
)
)

View File

@@ -1,24 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import app.revanced.util.containsWideLiteralInstructionValue
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
@Deprecated("Fingerprint is obsolete and will be deleted soon")
internal object PlayerResponseModelImplGeneralFingerprint : MethodFingerprint(
returnType = "Ljava/lang/String;",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = emptyList(),
opcodes = listOf(
Opcode.RETURN_OBJECT,
Opcode.CONST_4,
Opcode.RETURN_OBJECT,
),
customFingerprint = handler@{ methodDef, _ ->
if (!methodDef.definingClass.endsWith("/PlayerResponseModelImpl;")) return@handler false
methodDef.containsWideLiteralInstructionValue(55735497)
},
)

View File

@@ -1,24 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import app.revanced.util.containsWideLiteralInstructionValue
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
@Deprecated("Fingerprint is obsolete and will be deleted soon")
internal object PlayerResponseModelImplLiveStreamFingerprint : MethodFingerprint(
returnType = "Ljava/lang/String;",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = emptyList(),
opcodes = listOf(
Opcode.RETURN_OBJECT,
Opcode.CONST_4,
Opcode.RETURN_OBJECT,
),
customFingerprint = handler@{ methodDef, _ ->
if (!methodDef.definingClass.endsWith("/PlayerResponseModelImpl;")) return@handler false
methodDef.containsWideLiteralInstructionValue(70276274)
},
)

View File

@@ -1,24 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import app.revanced.util.containsWideLiteralInstructionValue
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
@Deprecated("Fingerprint is obsolete and will be deleted soon")
internal object PlayerResponseModelImplRecommendedLevelFingerprint : MethodFingerprint(
returnType = "I",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = emptyList(),
opcodes = listOf(
Opcode.SGET_OBJECT,
Opcode.IGET,
Opcode.RETURN,
),
customFingerprint = handler@{ methodDef, _ ->
if (!methodDef.definingClass.endsWith("/PlayerResponseModelImpl;")) return@handler false
methodDef.containsWideLiteralInstructionValue(55735497)
},
)

View File

@@ -0,0 +1,19 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal object ProtobufClassParseByteBufferFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PROTECTED or AccessFlags.STATIC,
parameters = listOf("L", "Ljava/nio/ByteBuffer;"),
returnType = "L",
opcodes = listOf(
Opcode.SGET_OBJECT,
Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_OBJECT,
Opcode.RETURN_OBJECT,
),
customFingerprint = { methodDef, _ -> methodDef.name == "parseFrom" },
)

View File

@@ -1,13 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.util.patch.LiteralValueFingerprint
import com.android.tools.smali.dexlib2.Opcode
internal object SetPlayerRequestClientTypeFingerprint : LiteralValueFingerprint(
opcodes = listOf(
Opcode.IGET,
Opcode.IPUT, // Sets ClientInfo.clientId.
),
strings = listOf("10.29"),
literalSupplier = { 134217728 }
)

View File

@@ -1,28 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patches.youtube.misc.fix.playback.SpoofSignatureResourcePatch
import app.revanced.util.patch.LiteralValueFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
@Deprecated("Fingerprint is obsolete and will be deleted soon")
internal object SpoofSignaturePatchScrubbedPreviewLayoutFingerprint : LiteralValueFingerprint(
accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL,
returnType = "V",
parameters = listOf("Landroid/content/Context;", "Landroid/util/AttributeSet;", "I", "I"),
opcodes = listOf(
Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
Opcode.INVOKE_VIRTUAL,
Opcode.CONST,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.CHECK_CAST,
Opcode.IPUT_OBJECT, // preview imageview
),
// This resource is used in ~ 40 different locations, but this method has a distinct list of parameters to match to.
literalSupplier = { SpoofSignatureResourcePatch.scrubbedPreviewThumbnailResourceId },
)

View File

@@ -1,8 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.fingerprint.MethodFingerprint
@Deprecated("Fingerprint is obsolete and will be deleted soon")
internal object StatsQueryParameterFingerprint : MethodFingerprint(
strings = listOf("adunit"),
)

View File

@@ -1,24 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
/**
* Resolves to the same method as [StoryboardRendererDecoderSpecFingerprint].
*/
@Deprecated("Fingerprint is obsolete and will be deleted soon")
internal object StoryboardRendererDecoderRecommendedLevelFingerprint : MethodFingerprint(
returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf("Lcom/google/android/libraries/youtube/innertube/model/player/PlayerResponseModel;"),
opcodes = listOf(
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT_OBJECT,
Opcode.IPUT_OBJECT,
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT,
),
strings = listOf("#-1#"),
)

View File

@@ -1,24 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
/**
* Resolves to the same method as [StoryboardRendererDecoderRecommendedLevelFingerprint].
*/
@Deprecated("Fingerprint is obsolete and will be deleted soon")
internal object StoryboardRendererDecoderSpecFingerprint : MethodFingerprint(
returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = listOf("Lcom/google/android/libraries/youtube/innertube/model/player/PlayerResponseModel;"),
opcodes = listOf(
Opcode.INVOKE_INTERFACE, // First instruction of the method.
Opcode.MOVE_RESULT_OBJECT,
Opcode.CONST_4,
Opcode.CONST_4,
Opcode.IF_NEZ,
),
strings = listOf("#-1#"),
)

View File

@@ -1,13 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
@Deprecated("Fingerprint is obsolete and will be deleted soon")
internal object StoryboardRendererSpecFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC,
returnType = "L",
parameters = listOf("Ljava/lang/String;", "J"),
strings = listOf("\\|"),
)

View File

@@ -1,24 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
/**
* Resolves using the class found in [StoryboardThumbnailParentFingerprint].
*/
@Deprecated("Fingerprint is obsolete and will be deleted soon")
internal object StoryboardThumbnailFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
returnType = "Z",
parameters = listOf(),
opcodes = listOf(
Opcode.MOVE_RESULT,
Opcode.IF_GTZ,
Opcode.GOTO,
Opcode.CONST_4,
Opcode.RETURN,
Opcode.RETURN, // Last instruction of method.
),
)

View File

@@ -1,18 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
/**
* Here lies code that creates the seekbar thumbnails.
*
* An additional change here might force the thumbnails to be created,
* or possibly a change somewhere else (maybe involving YouTube 18.23.35 class `hte`)
*/
@Deprecated("Fingerprint is obsolete and will be deleted soon")
internal object StoryboardThumbnailParentFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
returnType = "Landroid/graphics/Bitmap;",
strings = listOf("Storyboard regionDecoder.decodeRegion exception - "),
)

View File

@@ -32,12 +32,11 @@ object GmsCoreSupportPatch : BaseGmsCoreSupportPatch(
CompatiblePackage(
"com.google.android.youtube",
setOf(
// Patch supports these versions but ClientSpoof does not.
// "18.37.36",
// "18.38.44",
// "18.43.45",
// "18.44.41",
// "18.45.43",
"18.37.36",
"18.38.44",
"18.43.45",
"18.44.41",
"18.45.43",
"18.48.39",
"18.49.37",
"19.01.34",

View File

@@ -15,6 +15,7 @@ import app.revanced.patches.shared.misc.settings.preference.IntentPreference
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen.Sorting
import app.revanced.patches.shared.misc.settings.preference.TextPreference
import app.revanced.patches.youtube.misc.check.CheckEnvironmentPatch
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
import app.revanced.patches.youtube.misc.settings.fingerprints.LicenseActivityOnCreateFingerprint
import app.revanced.patches.youtube.misc.settings.fingerprints.SetThemeFingerprint
@@ -30,6 +31,9 @@ import java.io.Closeable
IntegrationsPatch::class,
SettingsResourcePatch::class,
AddResourcesPatch::class,
// Currently there is no easy way to make a mandatory patch,
// so for now this is a dependent of this patch.
CheckEnvironmentPatch::class,
],
)
object SettingsPatch :

View File

@@ -28,8 +28,6 @@ object SettingsResourcePatch : BaseSettingsResourcePatch(
override fun execute(context: ResourceContext) {
super.execute(context)
AddResourcesPatch(this::class)
// Used for a fingerprint from SettingsPatch.
appearanceStringId = ResourceMappingPatch["string", "app_theme_appearance_dark"]

View File

@@ -32,15 +32,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<!-- Settings about dialog. -->
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
</patch>
<patch id="misc.settings.SettingsPatch">
</patch>
<patch id="misc.debugging.DebuggingPatch">
@@ -57,7 +58,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- '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. -->
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
<patch id="ad.general.HideAdsResourcePatch">
@@ -171,8 +172,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.sponsorblock.SponsorBlockResourcePatch">
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<!-- Shown in the settings preferences, and translations can be any text length. -->
</patch>
<patch id="layout.spoofappversion.SpoofAppVersionPatch">
@@ -234,10 +233,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.EnableSlideToSeekPatch">
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,15 +32,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<!-- Settings about dialog. -->
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
</patch>
<patch id="misc.settings.SettingsPatch">
</patch>
<patch id="misc.debugging.DebuggingPatch">
@@ -57,7 +58,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- '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. -->
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
<patch id="ad.general.HideAdsResourcePatch">
@@ -171,8 +172,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.sponsorblock.SponsorBlockResourcePatch">
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<!-- Shown in the settings preferences, and translations can be any text length. -->
</patch>
<patch id="layout.spoofappversion.SpoofAppVersionPatch">
@@ -234,10 +233,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.EnableSlideToSeekPatch">
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,6 +32,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
<string name="revanced_check_environment_failed_title">فشلت عمليات التحقق</string>
<string name="revanced_check_environment_dialog_open_official_source_button">فتح الموقع الرسمي</string>
<string name="revanced_check_environment_dialog_ignore_button">تجاهل</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;لا يبدو أن هذا التطبيق قد تم تعديله من قبلك.&lt;/h5&gt;&lt;br&gt;قد لا يعمل هذا التطبيق بشكل صحيح، &lt;b&gt;قد يكون ضارًا أو حتى خطيرًا للاستخدام&lt;/b&gt;.&lt;br&gt;&lt;br&gt;تشير هذه الفحوصات إلى أن هذا التطبيق تم تعديله مسبقًا أو تم الحصول عليه من شخص آخر:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt;يوصى بشدة بـ &lt;b&gt;إلغاء تثبيت هذا التطبيق وتعديله بنفسك&lt;/b&gt; للتأكد من أنك تستخدم تطبيقًا معتمدًا وآمنًا.&lt;p&gt;&lt;br&gt;في حالة تجاهل هذا التحذير، سيتم عرضه مرتين فقط.</string>
<string name="revanced_check_environment_not_same_patching_device">تم تعديله على جهاز مختلف</string>
<string name="revanced_check_environment_manager_not_expected_installer">لم يتم تثبيته بواسطة ReVanced Manager</string>
<string name="revanced_check_environment_not_near_patch_time">تم تعديله قبل أكثر من 10 دقائق</string>
<string name="revanced_check_environment_not_near_patch_time_days">تم التعديل منذ %s يوم</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">تاريخ إنشاء APK تالف</string>
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_confirm_user_dialog_title">هل ترغب في المتابعة؟</string>
<string name="revanced_settings_reset">إعادة التعيين</string>
@@ -42,6 +53,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_import_reset">إعادة تعيين إعدادات ReVanced إلى الوضع الافتراضي</string>
<string name="revanced_settings_import_success">تم استيراد %d إعدادات</string>
<string name="revanced_settings_import_failure_parse">فشل الاستيراد: %s</string>
<string name="revanced_pref_import_export_title">استيراد / تصدير</string>
<string name="revanced_pref_import_export_summary">استيراد / تصدير إعدادات ReVanced</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">أنت تستخدم إصدار ReVanced Patches &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">ملاحظة</string>
<string name="revanced_settings_about_links_dev_body">هذا الإصدار هو إصدار مسبق، وقد تواجه مشاكل غير متوقعة</string>
<string name="revanced_settings_about_links_header">الروابط الرسمية</string>
<string name="revanced_settings_about_links_donate">تبرع</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -54,14 +73,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings_about_links_body">أنت تستخدم إصدار ReVanced Patches &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">ملاحظة</string>
<string name="revanced_settings_about_links_dev_body">هذا الإصدار هو إصدار مسبق، وقد تواجه مشاكل غير متوقعة</string>
<string name="revanced_settings_about_links_header">الروابط الرسمية</string>
<string name="revanced_pref_import_export_title">استيراد / تصدير</string>
<string name="revanced_pref_import_export_summary">استيراد / تصدير إعدادات ReVanced</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">لمحة</string>
<string name="revanced_settings_screen_01_ads_title">الإعلانات</string>
@@ -242,14 +253,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">الكلمات المفتاحية المراد إخفاؤها</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">الكلمات المفتاحية والعبارات المراد إخفاؤها، مفصولة بأسطر جديد\n\nالكلمات التي تحتوي على أحرف كبيرة في الوسط يجب إدخالها مع التغليف (مثل: iPhone, TikTok, Leblanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">الكلمات والعبارات الرئيسية التي يجب إخفاؤها، مفصولة بسطر جديد\n\nالكلمات الرئيسية يمكن أن تكون أسماء قنوات أو أي نص يظهر في عناوين الفيديو\n\nيجب إدخال الكلمات التي تحتوي على أحرف كبيرة في الوسط بإستخدام الأحرف الكبيرة (مثال: iPhone، TikTok، LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">حول تصفية الكلمات المفتاحية</string>
<string name="revanced_hide_keyword_content_about_summary">الصفحة الرئيسية/الاشتراك/نتائج البحث يتم تصفيتها لإخفاء المحتوى الذي يطابق عبارات الكلمات المفتاحية\n\nالتقييد\n• بعض المقاطع القصيرة قد لا تكون مخفية\n• بعض مكونات واجهة المستخدم قد لا تكون مخفية\n• البحث عن كلمة رئيسية قد لا يظهر أي نتائج</string>
<string name="revanced_hide_keyword_content_about_summary">الصفحة الرئيسية/الاشتراكات/نتائج الإشتراك/يتم تصفية نتائج البحث لإخفاء المحتوى الذي يتطابق مع عبارات الكلمات الرئيسية\n\nالقيود\n• لا يمكن إخفاء فيديوهات Shorts بواسطة اسم القناة\n• قد لا تكون بعض مكونات واجهة المستخدم مخفية\n• قد لا تظهر نتائج بحث عن كلمة رئيسية</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">مطابقة الكلمات بأكملها</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<string name="revanced_hide_keyword_content_about_whole_words_summary">سيؤدي وضع علامة اقتباس مزدوجة حول كلمة رئيسية/عبارة إلى منع التطابقات الجزئية لعناوين الفيديو وأسماء القنوات.&lt;br&gt;&lt;br&gt;على سبيل المثال،&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; سيخفي الفيديو: &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;ولكن لن يخفي: &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">الكلمة المفتاحية غير صالحة. لا يمكن استخدام: \'%s\' كعامل تصفية</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">الكلمة المفتاحية غير صالحة. \'%1$s\' أقل من %2$d حرفًا</string>
<string name="revanced_hide_keyword_toast_invalid_broad">الكلمة الرئيسية \'%s\' سوف تخفي جميع الفيديوهات</string>
<string name="revanced_hide_keyword_toast_invalid_common">لا يمكن استخدام الكلمة الرئيسية: %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">إضافة اقتباسات لاستخدام الكلمة الرئيسية: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">الكلمة الرئيسية لها بيانات متضاربة: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">الكلمة الرئيسية قصيرة جدًا وتتطلب اقتباسات: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">الكلمة الرئيسية سوف تخفي جميع الفيديوهات: %s</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">إخفاء الإعلانات العامة</string>
@@ -615,6 +630,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_save_sound_button_title">إخفاء حفظ الصوت إلى زر قائمة التشغيل</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">تم إخفاء حفظ الصوت في قائمة التشغيل</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">يتم عرض حفظ الصوت في قائمة التشغيل</string>
<string name="revanced_hide_shorts_use_this_sound_button_title">إخفاء زر استخدام هذا الصوت</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_on">تم إخفاء زر استخدام هذا الصوت</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_off">يتم عرض زر استخدام هذا الصوت</string>
<string name="revanced_hide_shorts_search_suggestions_title">إخفاء اقتراحات البحث</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">تم إخفاء اقتراحات البحث</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">يتم عرض اقتراحات البحث</string>
@@ -678,7 +696,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">شفافية واجهة المشغل يجب أن تكون بين 0-100</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">مخفي</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">لم يعجبني غير متاح مؤقتًا (انتهت مهلة API)</string>
<string name="revanced_ryd_failure_connection_status_code">لم يعجبني غير متاح (الحالة %d)</string>
@@ -774,6 +791,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_skipcount_sum_off">تم تعطيل تتبع مرات التخطي</string>
<string name="revanced_sb_general_min_duration">الحد الأدنى لمدة المقطع</string>
<string name="revanced_sb_general_min_duration_sum">لن يتم عرض المقاطع الأقصر من هذه القيمة (بالثواني) أو تخطيها</string>
<string name="revanced_sb_general_min_duration_invalid">المدة الزمنية غير صالحة</string>
<string name="revanced_sb_general_uuid">معرف المستخدم الفريد الخاص بك</string>
<string name="revanced_sb_general_uuid_sum">يجب أن يبقى هذا خاصًا. انه مثل كلمة المرور ولا ينبغي مشاركته مع أي شخص. إذا كان شخص ما يملك هذا، فيمكنه انتحال شخصيتك</string>
<string name="revanced_sb_general_uuid_invalid">يجب أن يكون معرف المستخدم الخاص 30 حرفًا على الأقل</string>
@@ -874,8 +892,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">الوقت الذي يبدأ عنده المقطع</string>
<string name="revanced_sb_new_segment_time_end">الوقت الذي ينتهي عنده المقطع</string>
<string name="revanced_sb_new_segment_confirm_title">هل الأوقات صحيحة؟</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">المقطع من\n\n%1$s\nto\n%2$s\n\n(%3$s)\n\nReady to جاهز للإرسال؟</string>
<string name="revanced_sb_new_segment_start_is_before_end">يجب أن تكون البداية قبل النهاية</string>
<string name="revanced_sb_new_segment_mark_locations_first">ضع علامة على موقعين في شريط الوقت أولًا</string>
@@ -894,6 +910,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_stats_username_changed">تم تغيير اسم المستخدم بنجاح</string>
<string name="revanced_sb_stats_reputation">سمعتك هي &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">لقد أنشأت &lt;b&gt;%s&lt;/b&gt; مقطع</string>
<string name="revanced_sb_stats_submissions_sum">اضغط هنا لعرض المقاطع الخاصة بك</string>
<string name="revanced_sb_stats_saved_zero">متصدرين SponsorBlock</string>
<string name="revanced_sb_stats_saved">لقد قمت بحفظ الناس من &lt;b&gt;%s&lt;/b&gt; مقطع</string>
<string name="revanced_sb_stats_saved_sum_zero">اضغط هنا لرؤية الإحصائيات العالمية وأبرز المساهمين</string>
@@ -926,7 +943,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_app_version_target_entry_2">18.20.39 - استعادة سرعة الفيديو الواسعة &amp; قائمة الجودة</string>
<string name="revanced_spoof_app_version_target_entry_3">18.09.39 - استعادة علامة تبويب المكتبة</string>
<string name="revanced_spoof_app_version_target_entry_4">17.41.37 - استعادة رف قائمة التشغيل القديم</string>
<string name="revanced_spoof_app_version_target_entry_5">17.30.34 - استعادة تصميم واجهة المستخدم القديم</string>
<string name="revanced_spoof_app_version_target_entry_5">17.33.42 - استعادة تصميم واجهة المستخدم القديم</string>
</patch>
<patch id="layout.startpage.ChangeStartPagePatch">
<string name="revanced_start_page_title">تعيين صفحة البداية</string>
@@ -1115,21 +1132,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">تم تمكين Slide to Seek</string>
<string name="revanced_slide_to_seek_summary_off">تم تعطيل Slide to Seek</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_title">Spoof Client</string>
<string name="revanced_spoof_client_screen_summary">محاكاة العميل لمنع مشكلات التشغيل</string>
<string name="revanced_spoof_client_title">Spoof Client</string>
<string name="revanced_spoof_client_summary_on">يتم محاكاة العميل</string>
<string name="revanced_spoof_client_summary_off">لا يتم محاكاة العميل\n\nقد لا يعمل تشغيل الفيديو</string>
<string name="revanced_spoof_client_user_dialog_message">إيقاف تشغيل هذا الإعداد قد يسبب مشاكل في تشغيل الفيديو.</string>
<string name="revanced_spoof_client_use_ios_title">Spoof Client to iOS</string>
<string name="revanced_spoof_client_use_ios_summary_on">تتم حاليًا محاكاة العميل إلـى iOS\n\nالآثار الجانبية تشمل:\n• قد لا يكون فيديو HDR متوفرًا\n• لا يعمل سجل المشاهدة مع حساب العلامة التجارية</string>
<string name="revanced_spoof_client_use_ios_summary_off">تتم حاليًا محاكاة العميل إلـى Android VR\n\nالآثار الجانبية تشمل:\n• لا يوجد فيديو HDR\n• فيديوهات الأطفال لا يتم تشغيلهم\n• مقاطع الفيديو الموقوفة يمكن أن تستأنف عشوائياً\n• جودة منخفضة لمصغرات شريط التقدم\n• زر التنزيل مخفي\n• بطاقات نهاية الشاشة مخفية</string>
<string name="revanced_spoof_client_storyboard_timeout">محاكاة مصغرات العميل غير متوفرة (انتهت مهلة API)</string>
<string name="revanced_spoof_client_storyboard_io_exception">محاكاة مصغرات العميل غير متوفرة مؤقتًا: %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">Spoof Video Streams</string>
<string name="revanced_spoof_video_streams_screen_summary">تزييف تدفقات الفيديو الخاصة بالعميل لمنع حدوث مشكلات أثناء التشغيل</string>
<string name="revanced_spoof_video_streams_title">Spoof Video Streams</string>
<string name="revanced_spoof_video_streams_summary_on">يتم تزييف تدفقات الفيديو</string>
<string name="revanced_spoof_video_streams_summary_off">لا يتم تزييف تدفقات الفيديو\n\nقد لا يعمل تشغيل الفيديو</string>
<string name="revanced_spoof_video_streams_user_dialog_message">إيقاف تشغيل هذا الإعداد قد يسبب مشاكل في تشغيل الفيديو.</string>
<string name="revanced_spoof_video_streams_client_type_title">العميل الافتراضي</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">فرض AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ترميز الفيديو هو AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ترميز الفيديو هو VP9 أو AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">لا يحتوي جهازك على فك تشفير الأجهزة VP9، وهذا الإعداد يعمل دائما عند تمكين تزييف العميل</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">قد يؤدي تمكين هذا إلى تحسين عمر البطارية وإصلاح مشكلة تقطيع التشغيل.\n\nيتمتع تنسيق AVC بدقة قصوى تبلغ 1080P، وسيستخدم تشغيل الفيديو المزيد من بيانات الإنترنت مقارنةً بتنسيق VP9 أو AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">التأثيرات الجانبية لمحاكاة iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• قد لا يتم تشغيل الأفلام أو الفيديوهات المدفوعة\n• يبدأ البث المباشر من البداية</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">التأثيرات الجانبية لمحاكاة Android VR</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• قائمة المقطع الصوتي مفقودة</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,15 +32,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<!-- Settings about dialog. -->
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
</patch>
<patch id="misc.settings.SettingsPatch">
</patch>
<patch id="misc.debugging.DebuggingPatch">
@@ -57,7 +58,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- '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. -->
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
<patch id="ad.general.HideAdsResourcePatch">
@@ -171,8 +172,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.sponsorblock.SponsorBlockResourcePatch">
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<!-- Shown in the settings preferences, and translations can be any text length. -->
</patch>
<patch id="layout.spoofappversion.SpoofAppVersionPatch">
@@ -234,10 +233,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.EnableSlideToSeekPatch">
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,6 +32,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
<string name="revanced_check_environment_failed_title">Yoxlamalar uğursuz oldu</string>
<string name="revanced_check_environment_dialog_open_official_source_button">Xidməti veb saytı</string>
<string name="revanced_check_environment_dialog_ignore_button">Yan keç</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;Bu tətbiq sizin tərəfinizdən yamaqlanmayıb.&lt;/h5&gt;&lt;br&gt;Bu tətbiq düzgün işləməyə bilər, &lt;b&gt;istifadə etmək zərərli və ya hətta təhlükəli ola bilər&lt;/b&gt;.&lt;br&gt;&lt;br&gt;&lt;br&gt;Bu yoxlamalar bu tətbiqin əvvəldən yamaqlandığını və ya başqasından əldə edildiyini göstərir:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt; &lt;br&gt;onu silməyiniz və özünüz yamaqlamağınız tövsiyə olunur. &lt;/b&gt;təsdiqlənmiş və təhlükəsiz tətbiq istifadə etdiyinizə əmin olmaq üçün. &lt;p&gt;&lt;br&gt; İnkar edilməzsə, bu xəbərdarlıq yalnız iki dəfə göstəriləcək.</string>
<string name="revanced_check_environment_not_same_patching_device">Fərqli cihazda yamaqlanıb</string>
<string name="revanced_check_environment_manager_not_expected_installer">ReVanced Manager tərəfindən quraşdırılmayıb</string>
<string name="revanced_check_environment_not_near_patch_time">10 dəqiqədən çox əvvəl yamaqlanıb</string>
<string name="revanced_check_environment_not_near_patch_time_days">%s gün əvvəl yamaqlanıb</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK quruluş tarixi pozulub</string>
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_confirm_user_dialog_title">Davam etmək istəyirsiniz?</string>
<string name="revanced_settings_reset">Sıfırla</string>
@@ -42,6 +53,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_import_reset">ReVanced tənzimləmələr standarta təyin edildi</string>
<string name="revanced_settings_import_success">%d tənzimləmə idxal edildi</string>
<string name="revanced_settings_import_failure_parse">Uğursuz idxal prosesi: %s</string>
<string name="revanced_pref_import_export_title">İdxal/İxrac et</string>
<string name="revanced_pref_import_export_summary">ReVanced tənzimləmələrin idxal/ixrac et</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">ReVanced Patches &lt;i&gt;%s&lt;/i&gt; versiyasını istifadə edirsiniz</string>
<string name="revanced_settings_about_links_dev_header">Qeyd</string>
<string name="revanced_settings_about_links_dev_body">Bu versiya ilkin buraxılışdır və gözlənilməz problemlərlə üzləşə bilərsiniz</string>
<string name="revanced_settings_about_links_header">Rəsmi bağlantılar</string>
<string name="revanced_settings_about_links_donate">İanə ver</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -54,14 +73,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings_about_links_body">ReVanced Patches &lt;i&gt;%s&lt;/i&gt; versiyasını istifadə edirsiniz</string>
<string name="revanced_settings_about_links_dev_header">Qeyd</string>
<string name="revanced_settings_about_links_dev_body">Bu versiya ilkin buraxılışdır və gözlənilməz problemlərlə üzləşə bilərsiniz</string>
<string name="revanced_settings_about_links_header">Rəsmi bağlantılar</string>
<string name="revanced_pref_import_export_title">İdxal/İxrac et</string>
<string name="revanced_pref_import_export_summary">ReVanced tənzimləmələrin idxal/ixrac et</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">Haqqında</string>
<string name="revanced_settings_screen_01_ads_title">Reklamlar</string>
@@ -242,14 +253,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Gizlədiləcək açar sözlər</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">Yeni sətirlərlə ayrılmış gizlədiləcək açar sözlər və ifadələr\n\nOrtada böyük hərf olan sözlər korpusla birlikdə daxil edilməlidir (yəni: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">Yeni sətirlərlə ayrılmış gizlədiləcək açar sözlər və frazalar\n\nAçar sözlər kanal adları və ya video adlarında göstərilən istənilən mətn ola bilər\n\nOrtada böyük hərf olan sözlər korpusla birlikdə qeyd edilməlidir (yəni: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">Açar söz filtrləməsi haqqında</string>
<string name="revanced_hide_keyword_content_about_summary">Əsas səhifə/Abunəlik/Axtarış nəticələri açar söz ifadələrinə uyğunlaşan məzmunu gizlətmək üçün filtrlənir\n\nMəhdudiyyətlər\n• Bəzi Shorts gizlənə bilməz\n• Bəzi UI elementləri gizlənə bilməz\n• Açar söz axtarışı heç bir nəticə göstərməyə bilər</string>
<string name="revanced_hide_keyword_content_about_summary">Əsas səhifə/Abunəlik/Axtarış nəticələri açar söz ifadələrinə uyğunlaşan məzmunu gizlətmək üçün filtrlənir\n\nMəhdudiyyətlər\n• Shorts-lar kanal adına görə gizlənə bilməz\n• Bəzi UI hissəcikləri gizlədilə bilməz\n• Açar söz axtarışında nəticə olmaya bilər</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">Bütün sözləri uyğunlaşdır</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<string name="revanced_hide_keyword_content_about_whole_words_summary">Açar söz/frazanın qoşa dırnaqlarla əhatə olunması video adları və kanal adlarının qismən uyğunlaşmasına mane olacaq &lt;br&gt;&lt;br&gt;Məsələn,&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; videonu gizlədəcək:&lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt; lakin gizlətməyəcək: Düzgün;&lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">Etibarsız açar sözü. \'%s\' istifadə edilə bilməz</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">Etibarsız açar sözü. \'%1$s\', %2$d simvoldan azdır</string>
<string name="revanced_hide_keyword_toast_invalid_broad">\"%s\" açar sözü, bütün videolarda gizlədiləcək</string>
<string name="revanced_hide_keyword_toast_invalid_common">Açar söz istifadə edilə bilmir: %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Açar söz istifadəsi üçün istinad əlavə et: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">Açar sözün ziddiyyətli hissəcikləri var: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">Açar söz çox qısadır və istinad tələb edir: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Açar söz, bütün videoları gizlədəcək: %s</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">Ümumi reklamları gizlət</string>
@@ -307,7 +322,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_copy_video_url_timestamp_summary_off">Düymə göstərilmir</string>
</patch>
<patch id="interaction.dialog.RemoveViewerDiscretionDialogPatch">
<string name="revanced_remove_viewer_discretion_dialog_title">İzləyici mülahizə dialoqunu sil</string>
<string name="revanced_remove_viewer_discretion_dialog_title">İzləyici mülahizə dialoqun sil</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_on">Dialoq silindi</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Dialoq göstərilir</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Bu, yaş məhdudiyyətini ötürmür. Sadəcə avtomatik qəbul edir.</string>
@@ -615,6 +630,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_save_sound_button_title">Səsi pleylistdə saxlama düyməsini gizlət</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Səsi pleylistdə saxlama gizlidir</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Səsi pleylistdə saxlama göstərilir</string>
<string name="revanced_hide_shorts_use_this_sound_button_title">\"Bu səsi istifadə et\" düyməsini gizlət</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_on">\"Bu səsi istifadə et\" düyməsi gizlidir</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_off">\"Bu səsi istifadə et\" 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_summary_on">Axtarış təklifləri gizlədilib</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">Axtarış təklifləri göstərilir</string>
@@ -678,7 +696,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">Oynadıcı örtüyünün qeyri-şəffaflığı 0-100 arası olmalıdır</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Gizli</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">\"Bəyənməmə\" müvəqqəti əlçatmazdır(API vaxtı bitdi)</string>
<string name="revanced_ryd_failure_connection_status_code">Bəyənməmə əlçatmazdır (status %d)</string>
@@ -774,6 +791,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_skipcount_sum_off">Ötürmə sayının izlənməsi aktiv deyil</string>
<string name="revanced_sb_general_min_duration">Minimum bölüm müddəti</string>
<string name="revanced_sb_general_min_duration_sum">Bölümlər bu dəyərdən (saniyə olaraq) daha qısadırsa göstərilməyəcək və ya ötürülməyəcək</string>
<string name="revanced_sb_general_min_duration_invalid">Etibarsız vaxt müddəti</string>
<string name="revanced_sb_general_uuid">Şəxsi istifadəçi kimliyiniz</string>
<string name="revanced_sb_general_uuid_sum">Bu gizli saxlanılmalıdır. Bu, parol kimidir və heç kimlə paylaşılmamalıdır. Kimsə bunu bilsə, onlar sizi təqlid edə bilər</string>
<string name="revanced_sb_general_uuid_invalid">Şəxsi istifadəçi kimliyiniz ən az 30 simvol uzunluğunda olmalıdır</string>
@@ -874,8 +892,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Bölüm başladığı vaxt</string>
<string name="revanced_sb_new_segment_time_end">Bölümün bitmə vaxtı</string>
<string name="revanced_sb_new_segment_confirm_title">Vaxtlar düzgündür?</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">Bölüm \n\n%1$s\n\n%2$s\n\n(%3$s)\n\nTəqdim etməyə hazırsınız?</string>
<string name="revanced_sb_new_segment_start_is_before_end">Başlanğıc sondan əvvəl olmalıdır</string>
<string name="revanced_sb_new_segment_mark_locations_first">Əvvəlcə vaxt çubuğunda iki yeri doldur</string>
@@ -894,6 +910,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_stats_username_changed">İstifadəçi adı uğurla dəyişdirildi</string>
<string name="revanced_sb_stats_reputation">Nüfuzunuz &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">&lt;b&gt;%s&lt;/b&gt; bölüm yaratdınız</string>
<string name="revanced_sb_stats_submissions_sum">Bölümlərinizə baxmaq üçün bura toxunun</string>
<string name="revanced_sb_stats_saved_zero">SponsorBlock liderlik lövhəsi</string>
<string name="revanced_sb_stats_saved">İnsanları &lt;b&gt;%s&lt;/b&gt; bölümdən xilas etdiniz</string>
<string name="revanced_sb_stats_saved_sum_zero">Qlobal statistikaları və başlıca töhfəçiləri görmək üçün bura toxunun</string>
@@ -1007,7 +1024,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_alt_thumbnail_search_title">Axtarış nəticələri</string>
<string name="revanced_alt_thumbnail_options_entry_1">Orijinal miniatürlər</string>
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow &amp; Orijinal miniatürlər</string>
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow &amp; Kadr çəkilişləri</string>
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow &amp; Kadr çəkilişlər</string>
<string name="revanced_alt_thumbnail_options_entry_4">Kadr çəkilişləri</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow YouTube videoları üçün bölük mənbəli miniatürlər təchiz edir. Bu miniatürlər hər zaman YouTube tərəfindən təmin edilənlərdən daha uyğun olur\n\nƏgər aktivləşdirilərsə, video URL-lər API serverinə göndəriləcək və başqa heç bir məlumat göndərilməyəcək. Videoda DeArrow miniatürləri yoxdursa, orijinal və ya hələ də kadr çəkilişləri göstərilir\n\nDeArrow haqqında ətraflı öyrənmək üçün bura toxun</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">API əlçatan deyilsə ani bildiriş göstər</string>
@@ -1115,21 +1132,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">Axtarmaq üçün sürüşdürmə aktivdir</string>
<string name="revanced_slide_to_seek_summary_off">Axtarmaq üçün sürüşdürmə aktiv deyil</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_title">Qəbuledicini saxtalaşdır</string>
<string name="revanced_spoof_client_screen_summary">Oynatma problemlərinin olmaması üçün client-i saxtalaşdır</string>
<string name="revanced_spoof_client_title">Qəbuledicini saxtalaşdır</string>
<string name="revanced_spoof_client_summary_on">Qəbuledici saxtalaşdırıldı</string>
<string name="revanced_spoof_client_summary_off">Qəbuledici dəyişməyib\n\nVideo oynatma işləməyə bilər</string>
<string name="revanced_spoof_client_user_dialog_message">Bu seçimin bağlanması, video oynatma problemlərinə səbəb ola bilər.</string>
<string name="revanced_spoof_client_use_ios_title">Qəbuledicini iOS olaraq saxtalaşdır</string>
<string name="revanced_spoof_client_use_ios_summary_on">Qəbuledici hazırda iOS üzrə saxtalaşdırılıb\n\nYan təsirlərə daxildir:\n• HDR video mövcud olmaya bilər\n• Baxış tarixçəsi ödəyici hesab ilə işləmir</string>
<string name="revanced_spoof_client_use_ios_summary_off">Qəbuledici hazırda Android VR\'ə saxtalaşdırılıb. Yan təsirlərə daxildir:\n• HDR video yoxdur\n• Uşaq videoları oynadılmır\n• Fasilə verilmiş videolar gözlənilmədən davam edə bilər\n• Aşağı keyfiyyətli Shorts axtarma çubuğu miniatürləri\n• \"Yüklə\" fəaliyyət düyməsi gizlidir\n• Bitiş ekran kartları gizlidir</string>
<string name="revanced_spoof_client_storyboard_timeout">Client kiçik şəkillərini təqlid etmə əlçatmazdır (API vaxtı bitdi)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Client kiçik şəkillərini təqlid etmə müvəqqəti əlçatmazdır: %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">Video yayımları təqlid et</string>
<string name="revanced_spoof_video_streams_screen_summary">Oxutma problemlərini önləmək üçün client video yayımlarını təqlid et</string>
<string name="revanced_spoof_video_streams_title">Video yayımları təqlid et</string>
<string name="revanced_spoof_video_streams_summary_on">Video yayımları təqlid edilir</string>
<string name="revanced_spoof_video_streams_summary_off">Video yayımları təqlid edilmir\n\nVideo oxutma işləməyə bilər</string>
<string name="revanced_spoof_video_streams_user_dialog_message">Bu ayarı söndürmək, video oxutma problemlərinə səbəb ola bilər.</string>
<string name="revanced_spoof_video_streams_client_type_title">İlkin client</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Məcburi AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodlaşdırma: AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodlaşdırma: VP9 və ya AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Cihazınızda VP9 hardware decoding yoxdur və bu ayar, \"Client təqlid etmə\" fəal olduqda həmişə açıqdır</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Bunu fəallaşdırmaq, batareya ömrünü uzada və oxutmadakı ilişmələri düzəldə bilər.\n\nAVC, maksimum 1080p dəqiqliyinə sahibdir və video oxutma, VP9 və ya AV1-ə görə daha çox internet datası istifadə edəcək.</string>
<string name="revanced_spoof_video_streams_about_ios_title">iOS təqlidinin yan təsirləri</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Filmlər və ya ödənişli videolar oxudulmaya bilər\n• Canlı yayımlar başdan başlayır</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR təqlidinin yan təsirləri</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Səs trek menyusu əskikdir</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,6 +32,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_confirm_user_dialog_title">Вы хочаце працягнуць?</string>
<string name="revanced_settings_reset">Скінуць</string>
@@ -42,6 +44,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_import_reset">Налады ReVanced скінуты да стандартных</string>
<string name="revanced_settings_import_success">Імпартавана %d налад</string>
<string name="revanced_settings_import_failure_parse">Памылка імпарту: %s</string>
<string name="revanced_pref_import_export_title">Імпарт / Экспарт</string>
<string name="revanced_pref_import_export_summary">Імпарт / Экспарт налад ReVanced</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">Вы выкарыстоўваеце версію ReVanced Patches &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Нататка</string>
<string name="revanced_settings_about_links_dev_body">Гэтая версія з\"яўляецца папярэдняй версіяй, і вы можаце сутыкнуцца з непрадбачанымі праблемамі</string>
<string name="revanced_settings_about_links_header">Афіцыйныя спасылкі</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -54,14 +63,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings_about_links_body">Вы выкарыстоўваеце версію ReVanced Patches &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Нататка</string>
<string name="revanced_settings_about_links_dev_body">Гэтая версія з\"яўляецца папярэдняй версіяй, і вы можаце сутыкнуцца з непрадбачанымі праблемамі</string>
<string name="revanced_settings_about_links_header">Афіцыйныя спасылкі</string>
<string name="revanced_pref_import_export_title">Імпарт / Экспарт</string>
<string name="revanced_pref_import_export_summary">Імпарт / Экспарт налад ReVanced</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">Пра праграму</string>
<string name="revanced_settings_screen_01_ads_title">Аб\"явы</string>
@@ -242,14 +243,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Ключавыя словы, якія трэба схаваць</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">Ключавыя словы і фразы, якія трэба схаваць, падзеленыя новымі радкамі\n\nСловы з вялікімі літарамі пасярэдзіне трэба ўводзіць з вялікім рэгістрам (напрыклад: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">Аб фільтрацыі ключавых слоў</string>
<string name="revanced_hide_keyword_content_about_summary">Галоўная/Падпіска/Вынікі пошуку фільтруюцца, каб схаваць змесціва, якое супадае з ключавымі фразамі\n\nАбмежаванні\n• Некаторыя шорты могуць быць не схаваны\n• Некаторыя кампаненты карыстальніцкага інтэрфейсу могуць быць не схаваны\n• Пошук па ключавым слове можа не даць вынікаў</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">Няправільнае ключавое слова. Немагчыма выкарыстоўваць: \"%s\" у якасці фільтра</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">Няправільнае ключавое слова. \"%1$s\" змяшчае менш за %2$d сімвалаў</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Ключавое слова \"%s\" схавае ўсе відэа</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">Схаваць агульную рэкламу</string>
@@ -430,7 +426,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_home_button_summary_on">Кнопка \"Дадому\" схавана</string>
<string name="revanced_hide_home_button_summary_off">Паказана кнопка \"Дадому\".</string>
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_hide_shorts_button_title">Схаваць шорты</string>
<string name="revanced_hide_shorts_button_title">Схаваць кнопку \"Shorts\"</string>
<string name="revanced_hide_shorts_button_summary_on">Кнопка Shorts схавана</string>
<string name="revanced_hide_shorts_button_summary_off">Паказана кнопка Shorts</string>
<!-- The Create button has no display name. Translate normally. -->
@@ -678,7 +674,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">Непразрыстасць накладання прайгравальніка павінна быць паміж 0-100</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Схаваны</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">Адзнакі \"Не падабаецца\" часова недаступныя (час чакання API скончыўся)</string>
<string name="revanced_ryd_failure_connection_status_code">Дызлайкі недаступныя (статус %d)</string>
@@ -874,8 +869,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Час пачатку сегмента</string>
<string name="revanced_sb_new_segment_time_end">Час заканчэння сегмента</string>
<string name="revanced_sb_new_segment_confirm_title">Ці правільны час?</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">Сегмент ад\n\n%1$s\nда\n%2$s\n\n(%3$s)\n\nГатовы адправіць?</string>
<string name="revanced_sb_new_segment_start_is_before_end">Пачынаць трэба раней за канец</string>
<string name="revanced_sb_new_segment_mark_locations_first">Спачатку адзначце два месцы на панэлі часу</string>
@@ -1114,20 +1107,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">Слайд для пошуку ўключаны</string>
<string name="revanced_slide_to_seek_summary_off">Слайд для пошуку не ўключаны</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_title">Падман кліента</string>
<string name="revanced_spoof_client_screen_summary">Падробка кліента, каб прадухіліць праблемы з прайграваннем</string>
<string name="revanced_spoof_client_title">Падман кліента</string>
<string name="revanced_spoof_client_summary_on">Кліент падроблены</string>
<string name="revanced_spoof_client_summary_off">Кліент не падроблены\n\nПрайграванне відэа можа не працаваць</string>
<string name="revanced_spoof_client_user_dialog_message">Адключэнне гэтай налады можа выклікаць праблемы з прайграваннем відэа.</string>
<string name="revanced_spoof_client_use_ios_title">Падробка кліента для iOS</string>
<string name="revanced_spoof_client_use_ios_summary_off">Кліент у цяперашні час падроблены для Android VR. Пабочныя эфекты ўключаюць:\n• Няма HDR-відэа\n• Дзіцячыя відэа не прайграваюцца\n• Прыпыненыя відэа могуць аднаўляцца выпадковым чынам\n• Нізкая якасць мініяцюр на панэлі пошуку Shorts\n• Кнопка дзеяння Спампаваць схавана\n• Карткі канцавога экрана схаваны</string>
<string name="revanced_spoof_client_storyboard_timeout">Мініяцюры кліента Spoof недаступныя (час чакання API скончыўся)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Мініяцюры кліента Spoof часова недаступныя: %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_user_dialog_message">Адключэнне гэтай налады можа выклікаць праблемы з прайграваннем відэа.</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,16 +32,35 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
<string name="revanced_check_environment_failed_title">Проверката е неуспешна</string>
<string name="revanced_check_environment_dialog_open_official_source_button">Отворете официалния уебсайт</string>
<string name="revanced_check_environment_dialog_ignore_button">Пропусни</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;Изглежда, че това приложение не е коригирано от вас.&lt;/h5&gt;&lt;br&gt;Това приложение може да не функционира правилно, &lt;b&gt;може да бъде вредно или дори опасно за използване&lt;/b&gt;.&lt; br&gt;&lt;br&gt;Тези проверки предполагат, че това приложение е предварително коригирано или получено от някой друг:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt;Силно се препоръчва да &lt;b&gt;деинсталирайте това приложение и го поправете сами&lt;/b&gt; за да сте сигурни, че използвате валидирано и защитено приложение.&lt;p&gt;&lt;br&gt;Ако бъде пренебрегнато, това предупреждение ще се покаже само два пъти.</string>
<string name="revanced_check_environment_not_same_patching_device">Коригирано на друго устройство</string>
<string name="revanced_check_environment_manager_not_expected_installer">Не е инсталиран ReVanced Manager</string>
<string name="revanced_check_environment_not_near_patch_time">Редактирано преди повече от 10 минути</string>
<string name="revanced_check_environment_not_near_patch_time_days">Коригирано преди %s дни</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Датата на компилация на APK е повредена</string>
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_confirm_user_dialog_title">Желаете ли да продължите?</string>
<string name="revanced_settings_confirm_user_dialog_title">Искате ли да продължите?</string>
<string name="revanced_settings_reset">Нулиране</string>
<string name="revanced_settings_restart_title">Опреснете и рестартирайте</string>
<string name="revanced_settings_restart_title">Рестартирай и опресни</string>
<string name="revanced_settings_restart">Рестартиране</string>
<string name="revanced_settings_import">Импортиране</string>
<string name="revanced_settings_import_copy">Копиране</string>
<string name="revanced_settings_import_reset">Настройките на ReVanced бяха нулирани</string>
<string name="revanced_settings_import_success">Следните настройки бяха импортирани успешно: %d</string>
<string name="revanced_settings_import_failure_parse">Импортирането беше неуспешно: %s</string>
<string name="revanced_pref_import_export_title">Импортиране / Експортиране</string>
<string name="revanced_pref_import_export_summary">Импортиране / Експортиране на ReVanced настройките</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">Вие използвате версията на ReVanced Patches&lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Забележка</string>
<string name="revanced_settings_about_links_dev_body">Тази версия е предварителна, така че може да срещнете неочаквани проблеми</string>
<string name="revanced_settings_about_links_header">Официални линкове</string>
<string name="revanced_settings_about_links_donate">Дарение</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -54,14 +73,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings_about_links_body">Вие използвате версията на ReVanced Patches&lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Забележка</string>
<string name="revanced_settings_about_links_dev_body">Тази версия е предварителна, така че може да срещнете неочаквани проблеми</string>
<string name="revanced_settings_about_links_header">Официални линкове</string>
<string name="revanced_pref_import_export_title">Импортиране / Експортиране</string>
<string name="revanced_pref_import_export_summary">Импортиране / Експортиране на ReVanced настройките</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">Относно</string>
<string name="revanced_settings_screen_01_ads_title">Реклами</string>
@@ -69,8 +80,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_screen_03_feed_title">Поток</string>
<string name="revanced_settings_screen_04_player_title">Плейър</string>
<string name="revanced_settings_screen_05_general_title">Общо оформление</string>
<string name="revanced_settings_screen_06_shorts_title">Shorts</string>
<string name="revanced_settings_screen_07_seekbar_title">Seekbar</string>
<string name="revanced_settings_screen_07_seekbar_title">Лента за прогрес на видеото</string>
<string name="revanced_settings_screen_08_swipe_controls_title">Контроли с плъзгане</string>
<string name="revanced_settings_screen_11_misc_title">Разни</string>
<string name="revanced_settings_screen_12_video_title">Видео</string>
@@ -243,14 +253,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Ключови думи, които да бъдат скрити</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">Ключови думи и фрази, които да бъдат скрити, разделени с нови редове\n\nДуми с главни букви в средата трябва да бъдат въведени с големи букви (например: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">Ключови думи и фрази за скриване, разделени с нови редове\n\nКлючовите думи могат да бъдат имена на канали или всеки текст, показан в заглавията на видеоклиповете\n\nДумите с главни букви в средата трябва да бъдат въведени с малки букви (напр.: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">За филтриране с ключови думи</string>
<string name="revanced_hide_keyword_content_about_summary">Начало/Абонамент/Резултатите от търсенето се филтрират, за да се скрие съдържанието, което съответства на ключовите фрази\n\nОграничения\n• Някои кратки видеоклипове може да не са скрити\n• Някои компоненти на потребителския интерфейс може да не са скрити\n• Търсенето на ключова дума може да не покаже резултати</string>
<string name="revanced_hide_keyword_content_about_summary">Начало/Абонамент/Резултатите от търсенето се филтрират, за да се скрие съдържание, което съответства на ключови фрази\n\nОграничения\n• Shorts не могат да бъдат скрити от името на канала\n• Някои компоненти на потребителския интерфейс може да не са скрити\n• Търсенето по ключова дума може да не покаже резултати</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">Съвпадение на всички думи</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<string name="revanced_hide_keyword_content_about_whole_words_summary">Ограждането на ключова дума/фраза с двойни кавички ще предотврати частични съвпадения на заглавия на видеоклипове и имена на канали&lt;br&gt;&lt;br&gt;Например,&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; ще скрие видеоклипа: &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;но няма да скрие: &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">Невалидна дума. Не може да се използва: \'%s\' като филтър</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">Невалидна ключова дума. %1$s е по-малко от %2$d знака</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Ключовата дума \'%s\' ще скрие всички видеоклипове</string>
<string name="revanced_hide_keyword_toast_invalid_common">Не можете да използвате ключовата дума: %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Добавете кавички, за да използвате ключова дума: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">Ключовата дума има противоречиви твърдения: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">Ключовата дума е твърде кратка и изисква кавички: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Всички видеа с ключовата дума ще бъдат скрити: %s</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">Скриване на общите реклами</string>
@@ -367,29 +381,79 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_swipe_threshold_summary">Праг преди да се осъществи плъзгането</string>
</patch>
<patch id="layout.autocaptions.AutoCaptionsPatch">
<string name="revanced_auto_captions_title">Автоматични Субтитри</string>
<string name="revanced_auto_captions_summary_on">Автоматичните Субтитри са деактивирани</string>
<string name="revanced_auto_captions_summary_off">Автоматичните Субтитри са активирани</string>
</patch>
<patch id="layout.buttons.action.HideButtonsPatch">
<string name="revanced_hide_buttons_screen_title">Бутони за действия</string>
<string name="revanced_hide_buttons_screen_summary">Скриване или показване на бутони под видеото</string>
<string name="revanced_hide_like_dislike_button_title">Бутони \"Харесвам\" и \"Не харесвам\"</string>
<string name="revanced_hide_like_dislike_button_summary_on">Бутоните \"Харесвам\" и \"Не харесвам\" са скрити</string>
<string name="revanced_hide_like_dislike_button_summary_off">Бутоните \"Харесвам\" и \"Не харесвам\" се показват</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_share_button_title">Скриване на споделянето</string>
<string name="revanced_hide_share_button_summary_on">Бутона за споделяне е скрит</string>
<string name="revanced_hide_share_button_summary_off">Бутона за споделяне се показва</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
<string name="revanced_hide_report_button_title">Бутон за доклади</string>
<string name="revanced_hide_report_button_summary_on">Бутона за докладване е скрит</string>
<string name="revanced_hide_report_button_summary_off">Бутона за докладване се показва</string>
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_remix_button_title">Бутон за ремикс</string>
<string name="revanced_hide_remix_button_summary_on">Бутона за ремикс е скрит</string>
<string name="revanced_hide_remix_button_summary_off">Бутона за ремикс се показва</string>
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_download_button_title">Бутон за изтегляне</string>
<string name="revanced_hide_download_button_summary_on">Бутона за изтегляне е скрит</string>
<string name="revanced_hide_download_button_summary_off">Бутона за изтегляне се показва</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Бутон за благодарност</string>
<string name="revanced_hide_thanks_button_summary_on">Бутона за благодарност е скрит</string>
<string name="revanced_hide_thanks_button_summary_off">Бутона за благодарност се показва</string>
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_clip_button_title">Бутон за създаване на клип</string>
<string name="revanced_hide_clip_button_summary_on">Бутона за клип е скрит</string>
<string name="revanced_hide_clip_button_summary_off">Бутона за клип се показва</string>
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_playlist_button_title">Бутон за Запазване в плейлиста</string>
<string name="revanced_hide_playlist_button_summary_on">Бутонът за Запазване в плейлиста е скрит</string>
<string name="revanced_hide_playlist_button_summary_off">Бутонът за Запазване в плейлиста се показва</string>
</patch>
<patch id="layout.buttons.autoplay.HideAutoplayButtonPatch">
<string name="revanced_hide_autoplay_button_title">Бутона за авт. изпълнение</string>
<string name="revanced_hide_autoplay_button_summary_on">Бутона за авт. изпълнение е скрит</string>
<string name="revanced_hide_autoplay_button_summary_off">Бутона за авт. изпълнение се показва</string>
</patch>
<patch id="layout.buttons.captions.HideCaptionsButtonPatch">
<!-- This button does not display any text, but 'captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title' -->
<string name="revanced_hide_captions_button_title">Бутона за Субтитри</string>
<string name="revanced_hide_captions_button_summary_on">Бутона за субтити е скрит</string>
<string name="revanced_hide_captions_button_summary_off">Бутона за субтити се показва</string>
</patch>
<patch id="layout.buttons.cast.HideCastButtonPatch">
<string name="revanced_hide_cast_button_title">Бутон за предаване на Тв</string>
<string name="revanced_hide_cast_button_summary_on">Бутонът за предаване е скрит</string>
<string name="revanced_hide_cast_button_summary_off">Бутонът за предаване се показва</string>
</patch>
<patch id="layout.buttons.navigation.NavigationButtonsPatch">
<string name="revanced_navigation_buttons_screen_title">Бутони за навигация</string>
<string name="revanced_navigation_buttons_screen_summary">Скриване или промяна на бутоните в лентата за навигация</string>
<!-- 'Home' should be translated using the same localized wording YouTube displays for the tab. -->
<string name="revanced_hide_home_button_title">Бутон за Начало</string>
<string name="revanced_hide_home_button_summary_on">Бутона за начало е скрит</string>
<string name="revanced_hide_home_button_summary_off">Бутона за начало се показва</string>
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_hide_shorts_button_title">Бутон за Кратки клипове</string>
<string name="revanced_hide_shorts_button_summary_on">Бутона за кратки клипове е скрит</string>
<string name="revanced_hide_shorts_button_summary_off">Бутона за кратки клипове се показва</string>
<!-- The Create button has no display name. Translate normally. -->
<string name="revanced_hide_create_button_title">Бутон за създаване на клип</string>
<string name="revanced_hide_create_button_summary_on">Бутонът за създаване е скрит</string>
<string name="revanced_hide_create_button_summary_off">Бутона за създаване се показва</string>
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_hide_subscriptions_button_title">Абонаменти</string>
<string name="revanced_hide_subscriptions_button_summary_on">Бутона за абонаменти е скрит</string>
<string name="revanced_hide_subscriptions_button_summary_off">Бутона за абонаменти се показва</string>
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
@@ -416,9 +480,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_flyout_loop_video_summary_on">Менюто за повторение е скрито</string>
<string name="revanced_hide_player_flyout_loop_video_summary_off">Менюто за повторение се показва</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_ambient_mode_title">Ambient mode</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">Менюто за околен режим е скрито</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">Менюто за околен режим се показва</string>
<string name="revanced_hide_player_flyout_ambient_mode_title">Подсветка около видеото</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">Менюто за подсветка около видеото е скрито</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">Менюто за подсветка около видеото се показва</string>
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_help_title">Помощ &amp; Отзиви</string>
<string name="revanced_hide_player_flyout_help_summary_on">Менюто &amp; за помощ е скрито</string>
@@ -437,12 +501,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Менюто на заключен екран е скрито</string>
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Менюто на заключен екран се показва</string>
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
<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_off">Менюто за избор на Аудио се показва</string>
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_watch_in_vr_title">Гледайте във VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Менюто за гледане в VR е скрито</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Менюто за гледане в VR се показва</string>
</patch>
<patch id="layout.buttons.player.hide.HidePlayerButtonsPatch">
<string name="revanced_hide_player_buttons_title">Бутони за Предишно &amp; Следващо видео</string>
<string name="revanced_hide_player_buttons_summary_on">Бутоните са скрити</string>
<string name="revanced_hide_player_buttons_summary_off">Бутоните се показват</string>
</patch>
@@ -456,26 +524,86 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_comments_screen_summary">Скриване или показване на секцията за коментари</string>
<string name="revanced_hide_comments_by_members_header_title">Скриване на „Коментари, направени от членове“</string>
<string name="revanced_hide_comments_by_members_header_summary_on">„Коментари от членове“ са скрити</string>
<string name="revanced_hide_comments_by_members_header_summary_off">„Коментари от членове“ се показват</string>
<string name="revanced_hide_comments_section_title">Скриване на секцията с коментари</string>
<string name="revanced_hide_comments_section_summary_on">Секцията с коментари е скрита</string>
<string name="revanced_hide_comments_section_summary_off">Секцията с коментари се показва</string>
<string name="revanced_hide_comments_create_a_short_button_title">Бутон за създаване на Shorts</string>
<string name="revanced_hide_comments_create_a_short_button_summary_on">Бутон за създаване на Shorts е скрит</string>
<string name="revanced_hide_comments_create_a_short_button_summary_off">Бутон за създаване на Shorts се показва</string>
<string name="revanced_hide_comments_preview_comment_title">Преглед на коментари</string>
<string name="revanced_hide_comments_preview_comment_summary_on">Прегледа на коментари е скрит</string>
<string name="revanced_hide_comments_preview_comment_summary_off">Прегледа на коментари се показва</string>
<string name="revanced_hide_comments_thanks_button_title">Бутон за благодарност</string>
<string name="revanced_hide_comments_thanks_button_summary_on">Бутона за благодарност е скрит</string>
<string name="revanced_hide_comments_thanks_button_summary_off">Бутона за благодарност се показва</string>
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Бутони в лентата на прогреса и емотикони</string>
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Бутоните са скрити</string>
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Бутоните се показват</string>
</patch>
<patch id="layout.hide.crowdfundingbox.CrowdfundingBoxResourcePatch">
<string name="revanced_hide_crowdfunding_box_title">Дарителска кутия</string>
<string name="revanced_hide_crowdfunding_box_summary_on">Кутията за дарения е скрита</string>
<string name="revanced_hide_crowdfunding_box_summary_off">Кутията за дарения се показва</string>
</patch>
<patch id="layout.hide.endscreencards.HideEndscreenCardsResourcePatch">
<string name="revanced_hide_endscreen_cards_title">Скриване на препоръките в края</string>
<string name="revanced_hide_endscreen_cards_summary_on">Препоръките в края са скрити</string>
<string name="revanced_hide_endscreen_cards_summary_off">Препоръките в края се показват</string>
</patch>
<patch id="layout.hide.filterbar.HideFilterBarResourcePatch">
<string name="revanced_hide_filter_bar_screen_title">Лента с филтри</string>
<string name="revanced_hide_filter_bar_screen_summary">Скриване или показване на лентата с категории в емисията, резултатите от търсенето и свързаните видеоклипове</string>
<string name="revanced_hide_filter_bar_feed_in_feed_title">Скриване на горната лента с категории в емисията</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Скрита</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Показва се</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Филтъри на търсене</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Панелът с филтъри на търсене е скрит</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Панелът с филтъри на търсене се показва</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Скриване в сродни видеоклипове</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Скриване в сродни видеоклипове</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Показано в сродни видеоклипове</string>
</patch>
<patch id="layout.hide.floatingmicrophone.HideFloatingMicrophoneButtonResourcePatch">
<string name="revanced_hide_floating_microphone_button_title">Плаващ бутон за микрофона</string>
<string name="revanced_hide_floating_microphone_button_summary_on">Бутонът на микрофона е скрит</string>
<string name="revanced_hide_floating_microphone_button_summary_off">Показан е бутон на микрофона</string>
</patch>
<patch id="layout.hide.fullscreenambientmode.DisableFullscreenAmbientModePatch">
<string name="revanced_disable_fullscreen_ambient_mode_title">Деактивирайте подсветка около видеото на цял екран</string>
<string name="revanced_disable_fullscreen_ambient_mode_summary_on">Подсветката в режим на цял екран е деактивирана</string>
<string name="revanced_disable_fullscreen_ambient_mode_summary_off">Подсветката в режим на цял екран е активирана</string>
</patch>
<patch id="layout.hide.infocards.HideInfocardsResourcePatch">
<string name="revanced_hide_info_cards_title">Скриване на инфо. карти</string>
<string name="revanced_hide_info_cards_summary_on">Информационните карти са скрити</string>
<string name="revanced_hide_info_cards_summary_off">Информационните карти се показват</string>
</patch>
<patch id="layout.hide.rollingnumber.DisableRollingNumberAnimationPatch">
<string name="revanced_disable_rolling_number_animations_title">Анимация на числа в реално време</string>
<string name="revanced_disable_rolling_number_animations_summary_on">Анимацията е деактивирана</string>
<string name="revanced_disable_rolling_number_animations_summary_off">Анимацията е активирана</string>
</patch>
<patch id="layout.hide.seekbar.HideSeekbarPatch">
<string name="revanced_hide_seekbar_title">Скриване на лента за време на плейъра</string>
<string name="revanced_hide_seekbar_summary_on">Лентата за време на плейъра е скрита</string>
<string name="revanced_hide_seekbar_summary_off">Лентата за време на плейъра се показва</string>
<string name="revanced_hide_seekbar_thumbnail_title">Скр. лента за време при миниатюрите</string>
<string name="revanced_hide_seekbar_thumbnail_summary_on">Лентата за време при миниатюрите е скрита</string>
<string name="revanced_hide_seekbar_thumbnail_summary_off">Лентата за време при миниатюрите се показва</string>
</patch>
<patch id="layout.hide.shorts.HideShortsComponentsResourcePatch">
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
<string name="revanced_hide_shorts_home_title">Скриване на Shorts в началната лента</string>
<string name="revanced_hide_shorts_home_summary_on">Shorts в началната лента са скрити</string>
<string name="revanced_hide_shorts_home_summary_off">Shorts в началната лента са показани</string>
<!-- 'subscription' should be translated using the same localized wording YouTube displays for the subscription tab. -->
<string name="revanced_hide_shorts_subscriptions_title">Shorts в раздел „Абонаменти“</string>
<string name="revanced_hide_shorts_subscriptions_summary_on">Shorts в раздел „Абонаменти“ са скрити</string>
<string name="revanced_hide_shorts_subscriptions_summary_off">Shorts в раздел „Абонаменти“ се показват</string>
<string name="revanced_hide_shorts_search_title">Shorts в резултатите от търсенето</string>
<string name="revanced_hide_shorts_search_summary_on">Shorts в резултатите от търсенето са скрити</string>
<string name="revanced_hide_shorts_search_summary_off">Shorts в резултатите от търсенето се показват</string>
<!-- 'join' should be translated using the same localized wording YouTube displays for the button. -->
<string name="revanced_hide_shorts_join_button_title">Бутон за присъединяване</string>
<string name="revanced_hide_shorts_join_button_summary_on">Бутона за присъединяване е скрит</string>
@@ -515,137 +643,498 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_comments_button_summary_on">Бутон за коментари е скрит</string>
<string name="revanced_hide_shorts_comments_button_summary_off">Бутон за коментари се показва</string>
<!-- 'remix' should be translated using the same localized wording YouTube displays for the button. -->
<string name="revanced_hide_shorts_remix_button_title">Бутон за ремикс</string>
<string name="revanced_hide_shorts_remix_button_summary_on">Бутона за ремикс е скрит</string>
<string name="revanced_hide_shorts_remix_button_summary_off">Бутона за ремикс се показва</string>
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
<string name="revanced_hide_shorts_share_button_title">Бутон за споделяне</string>
<string name="revanced_hide_shorts_share_button_summary_on">Бутона за споделяне е скрит</string>
<string name="revanced_hide_shorts_share_button_summary_off">Бутона за споделяне се показва</string>
<string name="revanced_hide_shorts_info_panel_title">Информационни панели</string>
<string name="revanced_hide_shorts_info_panel_summary_on">Информационните панели са скрити</string>
<string name="revanced_hide_shorts_info_panel_summary_off">Информационните панели се показват</string>
<string name="revanced_hide_shorts_channel_bar_title">Скриване на лентата на канала</string>
<string name="revanced_hide_shorts_channel_bar_summary_on">Лентата на канала е скрита</string>
<string name="revanced_hide_shorts_channel_bar_summary_off">Лентата на канала е показана</string>
<string name="revanced_hide_shorts_video_title_title">Заглавие на видеото</string>
<string name="revanced_hide_shorts_video_title_summary_on">Заглавието е скрито</string>
<string name="revanced_hide_shorts_video_title_summary_off">Заглавието се показва</string>
<string name="revanced_hide_shorts_sound_metadata_label_title">Скриване на музикални метаданни</string>
<string name="revanced_hide_shorts_sound_metadata_label_summary_on">Метаданни са скрити</string>
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">Метаданни се показват</string>
<string name="revanced_hide_shorts_full_video_link_label_title">Скриване на етикет за връзка към видеоклипа</string>
<string name="revanced_hide_shorts_full_video_link_label_summary_on">Етикетът за видео връзка е скрит</string>
<string name="revanced_hide_shorts_full_video_link_label_summary_off">Етикетът за видео връзка се показва</string>
<string name="revanced_hide_shorts_sound_button_title">Скрийте бутона „Звук“</string>
<string name="revanced_hide_shorts_sound_button_summary_on">Бутона за Звук е скрит</string>
<string name="revanced_hide_shorts_sound_button_summary_off">Бутона за Звук се показва</string>
<string name="revanced_hide_shorts_navigation_bar_title">Скриване лентата за навигация</string>
<string name="revanced_hide_shorts_navigation_bar_summary_on">Навигационната лента е скрита</string>
<string name="revanced_hide_shorts_navigation_bar_summary_off">Навигационната лента се показва</string>
</patch>
<patch id="layout.hide.suggestedvideoendscreen.DisableSuggestedVideoEndScreenResourcePatch">
<string name="revanced_disable_suggested_video_end_screen_title">Препоръчани видеоклипове в края</string>
<string name="revanced_disable_suggested_video_end_screen_summary_on">Препоръчаните видеоклипове в края са скрити</string>
<string name="revanced_disable_suggested_video_end_screen_summary_off">Препоръчаните видеоклипове в края се показват</string>
</patch>
<patch id="layout.hide.time.HideTimestampPatch">
<string name="revanced_hide_timestamp_title">Скриване на клеймото за време на видеоклипа</string>
<string name="revanced_hide_timestamp_summary_on">Скрито</string>
<string name="revanced_hide_timestamp_summary_off">Показва се</string>
</patch>
<patch id="layout.panels.popup.PlayerPopupPanelsPatch">
<string name="revanced_hide_player_popup_panels_title">Изскачащи панели на плейъра</string>
<string name="revanced_hide_player_popup_panels_summary_on">Изскачащите панели на плейъра са скрити</string>
<string name="revanced_hide_player_popup_panels_summary_off">Изскачащите панели на плейъра се показват</string>
</patch>
<patch id="layout.player.overlay.CustomPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">Прозрачност на настройките в Плеара</string>
<string name="revanced_player_overlay_opacity_summary">Стойност на прозрачност между 0-100, където 0 е прозрачно</string>
<string name="revanced_player_overlay_opacity_invalid_toast">Прозрачността на менюто на плейъра трябва да бъде между 0-100</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Скрито</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">Нехаресванията временно не са налични (API timed out)</string>
<string name="revanced_ryd_failure_connection_status_code">Нехаресванията не са налични (status %d)</string>
<string name="revanced_ryd_failure_client_rate_limit_requested">Нехаресванията не са достъпни (достигнат лимит на API)</string>
<string name="revanced_ryd_failure_generic">Нехаресванията не са налични (%s)</string>
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Презареди видеото за гласуване с ReturnYouTubeDislike</string>
<string name="revanced_ryd_enable_summary_on">Нехаресванията се показват</string>
<string name="revanced_ryd_enable_summary_off">Нехаресванията не се показват</string>
<string name="revanced_ryd_shorts_title">Пок. нехаресвания в кратките клипове</string>
<string name="revanced_ryd_shorts_summary_on">Нехаресванията се показват в кратките клипове</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">Нехаресвания, показани в Shorts\n\nОграничение: Нехаресванията може да не се показват в режим „инкогнито“</string>
<string name="revanced_ryd_shorts_summary_off">Нехаресванията са скрити в кратките клипове</string>
<string name="revanced_ryd_dislike_percentage_title">Нехаресвания като процент</string>
<string name="revanced_ryd_dislike_percentage_summary_on">Нехаресванията се показват като процент</string>
<string name="revanced_ryd_dislike_percentage_summary_off">Нехаресванията се показват като число</string>
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
<string name="revanced_ryd_compact_layout_title">Компактен бутон за харесване</string>
<string name="revanced_ryd_compact_layout_summary_on">Включен компактен бутон \"Харесва ми\"</string>
<string name="revanced_ryd_compact_layout_summary_off">Най-добър изглед на бутона за харесване</string>
<string name="revanced_ryd_toast_on_connection_error_title">Показване на известие, ако API не е наличен</string>
<string name="revanced_ryd_toast_on_connection_error_summary_on">Показва известие, ако Return YouTube Dislike не е наличен</string>
<string name="revanced_ryd_toast_on_connection_error_summary_off">Не се показва известие, ако ReturnYouTube Dislike не е наличен</string>
<string name="revanced_ryd_about">Относно</string>
<string name="revanced_ryd_attribution_summary">Данните за нехаресване са от Return YouTube Dislike API. Докоснете за да научите повече</string>
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
<string name="revanced_ryd_statistics_category_title">Статистика Return YouTube Dislike API на това устройство</string>
<string name="revanced_ryd_statistics_getFetchCallResponseTimeAverage_title">Време за отговор на API, средно</string>
<string name="revanced_ryd_statistics_getFetchCallResponseTimeMin_title">Време за отговор на API, минимално</string>
<string name="revanced_ryd_statistics_getFetchCallResponseTimeMax_title">Време за отговор на API, максимално</string>
<string name="revanced_ryd_statistics_getFetchCallResponseTimeLast_title">Време за отговор на API, последно видео</string>
<string name="revanced_ryd_statistics_getFetchCallResponseTimeLast_rate_limit_summary">Нехаресванията временно не са налични - в сила е лимитът API клиента</string>
<string name="revanced_ryd_statistics_getFetchCallCount_title">API получава гласове, брой заявки</string>
<string name="revanced_ryd_statistics_getFetchCallCount_zero_summary">Неуспешни мрежови заявки</string>
<string name="revanced_ryd_statistics_getFetchCallCount_non_zero_summary">%d мрежови заявки</string>
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_title">API извлича гласове, брой изчаквания</string>
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary">Мрежовите заявки нямаха изчакване</string>
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_non_zero_summary">%d изтече времето за изчакване на мрежовите повиквания</string>
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_title">Ограничения на скоростта на API клиент</string>
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_zero_summary">Ограниченията на скоростта на клиента на Api не са открити</string>
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_non_zero_summary">Открити са ограничения на скоростта на клиента на Api %d пъти</string>
<string name="revanced_ryd_statistics_millisecond_text">%d милисекунди</string>
</patch>
<patch id="layout.searchbar.WideSearchbarPatch">
<string name="revanced_wide_searchbar_title">Широка лента за търсене</string>
<string name="revanced_wide_searchbar_summary_on">Широката лента за търсене е включена</string>
<string name="revanced_wide_searchbar_summary_off">Широката лента за търсене е изключена</string>
</patch>
<patch id="layout.seekbar.RestoreOldSeekbarThumbnailsPatch">
<string name="revanced_restore_old_seekbar_thumbnails_title">Стари миниатюри на времевата линия</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Над лентата за възпроизвеждане се появяват миниатюри</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Миниатюрите се показват в режим на цял екран</string>
</patch>
<patch id="layout.sponsorblock.SponsorBlockResourcePatch">
<string name="revanced_sb_enable_sb">Включване на SponsorBlock</string>
<string name="revanced_sb_enable_sb_sum">SponsorBlock е система за прескачане на досадни части и реклами от видеоклиповете в YouTube</string>
<string name="revanced_sb_appearance_category">Облик</string>
<string name="revanced_sb_enable_voting">Бутона за гласуване</string>
<string name="revanced_sb_enable_voting_sum_on">Бутона за гласуване на част се показва</string>
<string name="revanced_sb_enable_voting_sum_off">Бутона за гласуване на част е скрит</string>
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
<string name="revanced_sb_enable_compact_skip_button">Компактен бутон за пропускане</string>
<string name="revanced_sb_enable_compact_skip_button_sum_on">Мин. ширина на бутона за пропускане</string>
<string name="revanced_sb_enable_compact_skip_button_sum_off">Най-добър изглед на бутона за пропускане</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Авт. скриване на бутона за пропускане</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Бутона за пропускане се скрива след няколко секунди</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Бутона за пропускане се показва за цялата част</string>
<string name="revanced_sb_general_skiptoast">Показв. известие при автом. пропуск. част</string>
<string name="revanced_sb_general_skiptoast_sum_on">Показване на известие при автоматично пропусната част. Докоснете тук за пример</string>
<string name="revanced_sb_general_skiptoast_sum_off">Известието не се показва. Докоснете тук за пример</string>
<string name="revanced_sb_general_time_without">Показване на дължината на видеото без сигментите</string>
<string name="revanced_sb_general_time_without_sum_on">Дължината на видеото без всички части показана в скоби до цялата дължина</string>
<string name="revanced_sb_general_time_without_sum_off">Цялата дължина на видето се показва</string>
<string name="revanced_sb_create_segment_category">Създаване на нови части</string>
<string name="revanced_sb_enable_create_segment">Показване на бутона за нова част</string>
<string name="revanced_sb_enable_create_segment_sum_on">Бутона създаване за нова част се показва</string>
<string name="revanced_sb_enable_create_segment_sum_off">Бутона създаване за нова част не се показва</string>
<string name="revanced_sb_general_adjusting">Настройване стъпка на новата част</string>
<string name="revanced_sb_general_adjusting_sum">Милисекундите с който се преместват бутоните за настройка при създаване на част</string>
<string name="revanced_sb_general_adjusting_invalid">Стойността трябва да е положително число</string>
<string name="revanced_sb_guidelines_preference_title">Преглед на ръководните линии</string>
<string name="revanced_sb_guidelines_preference_sum">Указанията съдържат правила и съвети за създаване на нови части</string>
<string name="revanced_sb_guidelines_popup_title">Следвайте указанията</string>
<string name="revanced_sb_guidelines_popup_content">Прочетете указанията на SponsorBlock преди да създадете нови части</string>
<string name="revanced_sb_guidelines_popup_already_read">Вече прочетох</string>
<string name="revanced_sb_guidelines_popup_open">Покажи ми</string>
<string name="revanced_sb_general">Общи</string>
<string name="revanced_sb_toast_on_connection_error_title">Показване на известие, ако API не е наличен</string>
<string name="revanced_sb_toast_on_connection_error_summary_on">Показва се известие, ако SponsorBlock не е наличен</string>
<string name="revanced_sb_toast_on_connection_error_summary_off">Показва се известие, ако SponsorBlock не е наличен</string>
<string name="revanced_sb_general_skipcount">Прослед. на броя пропускания</string>
<string name="revanced_sb_general_skipcount_sum_on">Показва в класацията на SponsorBlock колко време е спестено. Съобщение се изпраща при всяка пропусната част</string>
<string name="revanced_sb_general_skipcount_sum_off">Прослед. на броя пропускания е изключен</string>
<string name="revanced_sb_general_min_duration">Минимална продължителност на сегмента</string>
<string name="revanced_sb_general_min_duration_sum">Части, по-кратки от тази стойност (в секунди) няма да бъдат пропускани или показвани</string>
<string name="revanced_sb_general_min_duration_invalid">Невалидна времетраене</string>
<string name="revanced_sb_general_uuid">Вашият уникален потребителски id</string>
<string name="revanced_sb_general_uuid_sum">Това трябва да се държи тайно. То е като парола и не трябва да се споделя с никого. Ако някой го има, то той може да се представи вместо вас</string>
<string name="revanced_sb_general_uuid_invalid">Личният Id трябва да е с дължина поне 30 знака</string>
<string name="revanced_sb_general_api_url">Промяна URL на API</string>
<string name="revanced_sb_general_api_url_sum">Адресът, който SponsorBlock използва за свързване към сървъра</string>
<string name="revanced_sb_api_url_reset">Нулиране URL адреса на API</string>
<string name="revanced_sb_api_url_invalid">URL адресът е невалиден</string>
<string name="revanced_sb_api_url_changed">URL адресът на API е променен</string>
<string name="revanced_sb_settings_ie">Настройки за внасяне и изнасяне</string>
<string name="revanced_sb_settings_copy">Копиране</string>
<string name="revanced_sb_settings_ie_sum">Вашата JSON конфигурация на SponsorBlock може да бъде импортирана/експортирана в ReVanced и други платформи на SponsorBlock</string>
<string name="revanced_sb_settings_ie_sum_warning">Вашата SponsorBlock JSON конфигурация която може да се импортира/експортира до ReVanced или други платформи ползващи SponsorBlock. Това включва вашия потребителски id. Споделяйте това разумно</string>
<string name="revanced_sb_settings_import_successful">Настройките са успешно въстановени</string>
<string name="revanced_sb_settings_import_failed">Неуспешно импортиране: %s</string>
<string name="revanced_sb_settings_export_failed">Неуспешно експортиране на %s</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">Вашите настройки на SponsorBlock съдържат лично Id.\n\nВашето Id е като парола и не трябва да се споделя с никого\n</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Не показвай отново</string>
<string name="revanced_sb_diff_segments">Промени поведението на сигмента</string>
<string name="revanced_sb_segments_sponsor">Спонсор</string>
<string name="revanced_sb_segments_sponsor_sum">Платена промоция, платени препоръки и директни реклами. Не за самореклама или безплатни препоръки за каузи/създатели/уебсайтове/продукти, които се харесват на автора</string>
<string name="revanced_sb_segments_selfpromo">Неплатена/Самореклама</string>
<string name="revanced_sb_segments_selfpromo_sum">Подобно на „Спонсор“, с изключение на неплатено или самореклама. Включва раздели за стоки, дарения или информация за това с кого са си сътрудничили</string>
<string name="revanced_sb_segments_interaction">Напомняне за действие (абониране)</string>
<string name="revanced_sb_segments_interaction_sum">Кратко напомняне да харесате, абонирате или последвате в средата на съдържанието. Ако е дълго или за нещо конкретно, вместо това трябва да бъде самореклама</string>
<string name="revanced_sb_segments_highlight">Акценти</string>
<string name="revanced_sb_segments_highlight_sum">Частта от видеото която повечето хора търсят</string>
<string name="revanced_sb_segments_intro">Пауза / Начална анимация</string>
<string name="revanced_sb_segments_intro_sum">Интервал без реално съдържание. Може да бъде пауза, статичен кадър, повтаряща се анимация. Това не трябва да се използва за преходи, съдържащи информация</string>
<string name="revanced_sb_segments_outro">Карти в края/Пояснения</string>
<string name="revanced_sb_segments_outro_sum">Информация или когато се показват крайните карти на YouTube. Не за заключения с информация</string>
<string name="revanced_sb_segments_preview">Кратък преглед/Обобщение</string>
<string name="revanced_sb_segments_preview_sum">Колекция от клипове, които показват какво предстои в този видеоклип или в други видеоклипове от поредицата, където цялата информация се повтаря по-късно във видеоклипа</string>
<string name="revanced_sb_segments_filler">Пълнеж/Шеги</string>
<string name="revanced_sb_segments_filler_sum">Сцени извън темата, добавени само за пълнеж или хумор, които не са необходими за разбирането на основното съдържание на видеоклипа. Това не трябва да включва сегменти, предоставящи контекст или справочни данни</string>
<string name="revanced_sb_segments_nomusic">Музика: Част без музика</string>
<string name="revanced_sb_segments_nomusic_sum">За използване само в музикални видеоклипове. Това трябва да се използва само за части от музикални видеоклипове, които вече не са обхванати от друга категория</string>
<string name="revanced_sb_skip_button_compact">Пропусни</string>
<string name="revanced_sb_skip_button_compact_highlight">Акценти</string>
<string name="revanced_sb_skip_button_sponsor">Пропусни спонсор</string>
<string name="revanced_sb_skip_button_selfpromo">Пропусни промоция</string>
<string name="revanced_sb_skip_button_interaction">Пропусни подканване</string>
<string name="revanced_sb_skip_button_highlight">Пропусни до акценти</string>
<string name="revanced_sb_skip_button_intro_beginning">Пропуснете въведението</string>
<string name="revanced_sb_skip_button_intro_middle">Пропусни пауза</string>
<string name="revanced_sb_skip_button_intro_end">Пропусни пауза</string>
<string name="revanced_sb_skip_button_outro">Пропусни заключение</string>
<string name="revanced_sb_skip_button_preview_beginning">Пропусни преглед</string>
<string name="revanced_sb_skip_button_preview_middle">Пропусни преглед</string>
<string name="revanced_sb_skip_button_preview_end">Пропуснете обобщението</string>
<string name="revanced_sb_skip_button_filler">Пропусни пълнеж</string>
<string name="revanced_sb_skip_button_nomusic">Пропусни част без музика</string>
<string name="revanced_sb_skip_button_unsubmitted">Пропускане на сегмент</string>
<string name="revanced_sb_skipped_sponsor">Пропуснат спонсор</string>
<string name="revanced_sb_skipped_selfpromo">Пропусната самореклама</string>
<string name="revanced_sb_skipped_interaction">Пропуснато досадно напомняне</string>
<string name="revanced_sb_skipped_highlight">Пропуснато до акцент</string>
<string name="revanced_sb_skipped_intro_beginning">Пропуснато въведение</string>
<string name="revanced_sb_skipped_intro_middle">Пропусни паузи</string>
<string name="revanced_sb_skipped_intro_end">Пропусни паузи</string>
<string name="revanced_sb_skipped_outro">Пропуснато заключение</string>
<string name="revanced_sb_skipped_preview_beginning">Пропуснат преглед</string>
<string name="revanced_sb_skipped_preview_middle">Пропуснат преглед</string>
<string name="revanced_sb_skipped_preview_end">Пропуснато повторение</string>
<string name="revanced_sb_skipped_filler">Пропуснат пълнеж</string>
<string name="revanced_sb_skipped_nomusic">Пропусната част без музика</string>
<string name="revanced_sb_skipped_unsubmitted">Пропуснат неизпратен сегмент</string>
<string name="revanced_sb_skipped_multiple_segments">Пропуснати множество части</string>
<string name="revanced_sb_skip_automatically">Да се прескача от само себе си</string>
<string name="revanced_sb_skip_automatically_once">Авт. пропускане веднъж</string>
<string name="revanced_sb_skip_showbutton">Показвай бутон за пропускане</string>
<string name="revanced_sb_skip_seekbaronly">Показв. в лентата за време</string>
<string name="revanced_sb_skip_ignore">Изключване</string>
<string name="revanced_sb_submit_failed_invalid">Не може да се изпрати сегмент: %s</string>
<string name="revanced_sb_submit_failed_timeout">SponsorBlock временно не работи</string>
<string name="revanced_sb_submit_failed_unknown_error">Не могат да се изпратят сигменти: (статус:%1$d %2$s)</string>
<string name="revanced_sb_submit_failed_rate_limit">Не може да се изпрати частта.\nБроят е ограничен (Твърде много от един и същ потребител, IP)</string>
<string name="revanced_sb_submit_failed_forbidden">Не може да се изпрати частта: %s</string>
<string name="revanced_sb_submit_failed_duplicate">Не може да се изпрати частта.\nВече съществува</string>
<string name="revanced_sb_submit_succeeded">Частта е изпратена успешно</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock временно не е наличен (API timed out)</string>
<string name="revanced_sb_sponsorblock_connection_failure_status">SponsorBlock временно не е наличен (status %d)</string>
<string name="revanced_sb_sponsorblock_connection_failure_generic">SponsorBlock временно не е наличен</string>
<string name="revanced_sb_vote_failed_timeout">Не може да се гласува за сегмент (API timed out)</string>
<string name="revanced_sb_vote_failed_unknown_error">Не може да се гласува за частите: (статус: %1$d %2$s)</string>
<string name="revanced_sb_vote_failed_forbidden">Не може да се гласува за част: %s</string>
<string name="revanced_sb_vote_upvote">Положителен вот</string>
<string name="revanced_sb_vote_downvote">Отрицателен вот</string>
<string name="revanced_sb_vote_category">Промяна на категорията</string>
<string name="revanced_sb_vote_no_segments">Няма сегменти, за които да гласувате</string>
<string name="revanced_sb_new_segment_choose_category">Изберете категория сегмент</string>
<string name="revanced_sb_new_segment_disabled_category">Категорията е изкл. в настройките. Вкл. я за да можете да изпратите.</string>
<string name="revanced_sb_new_segment_title">Нова част в SponsorBlock</string>
<string name="revanced_sb_new_segment_mark_time_as_question">Задаване на %s като начало или край на нов раздел?</string>
<string name="revanced_sb_new_segment_mark_start">начало</string>
<string name="revanced_sb_new_segment_mark_end">край</string>
<string name="revanced_sb_new_segment_now">сега</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_time_start">Частта започва от</string>
<string name="revanced_sb_new_segment_time_end">Частта свършва до</string>
<string name="revanced_sb_new_segment_confirm_title">Времената точни ли са?</string>
<string name="revanced_sb_new_segment_confirm_content">Сегментът продължава от\n\n%1$s\nдо\n%2$s\n\n(%3$s)\n\nГотов ли е за изпращане?</string>
<string name="revanced_sb_new_segment_start_is_before_end">Началото трябва да бъде преди края</string>
<string name="revanced_sb_new_segment_mark_locations_first">Първо маркирайте две места в лентата за времето</string>
<string name="revanced_sb_new_segment_preview_segment_first">Преглед и проверка на частта за нормално пропускане</string>
<string name="revanced_sb_new_segment_edit_by_hand_title">Ръчно редактиране на времената на частта</string>
<string name="revanced_sb_new_segment_edit_by_hand_content">Желаете ли да редактирате времената за начало или край на частта?</string>
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Зададено е невалидно време</string>
<string name="revanced_sb_stats">Статистика</string>
<!-- Shown in the settings preferences, and translations can be any text length. -->
<string name="revanced_sb_stats_connection_failure">Статистиката е враменно недостъпна (API не работи)</string>
<string name="revanced_sb_stats_loading">Зареждане...</string>
<string name="revanced_sb_stats_sb_disabled">SponsorBlock е изключено</string>
<string name="revanced_sb_stats_username">Вашето потреб. име: &lt;b&gt;%s&lt;/b&gt;</string>
<string name="revanced_sb_stats_username_change">Докоснете за промяна потребителското име</string>
<string name="revanced_sb_stats_username_change_unknown_error">Не може да се промени потреб. име: Състояние: %1$d%2$s</string>
<string name="revanced_sb_stats_username_changed">Потребителското име е успешно променено</string>
<string name="revanced_sb_stats_reputation">Репутацията ви е &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">Създадохте &lt;b&gt;%s&lt;/b&gt; части</string>
<string name="revanced_sb_stats_submissions_sum">Докоснете тук, за да видите вашите сегменти</string>
<string name="revanced_sb_stats_saved_zero">SponsorBlock класация</string>
<string name="revanced_sb_stats_saved">Спасихте хората от &lt;b&gt;%s&lt;/b&gt; части</string>
<string name="revanced_sb_stats_saved_sum_zero">Докоснете за да видите статистиката и тези допринесли най-много</string>
<string name="revanced_sb_stats_saved_sum">Това е &lt;b&gt;%s&lt;/b&gt; от живота им.&lt;br&gt;Щракнете, за да видите класацията</string>
<string name="revanced_sb_stats_self_saved">Пропуснали сте &lt;b&gt;%s&lt;/b&gt; части</string>
<string name="revanced_sb_stats_self_saved_sum">Това е &lt;b&gt;%s&lt;/b&gt;</string>
<string name="revanced_sb_stats_self_saved_reset_title">Нулиране на брояча на пропуснати части?</string>
<string name="revanced_sb_stats_saved_hour_format">%1$s часове %2$s минути</string>
<string name="revanced_sb_stats_saved_minute_format">%1$s минути %2$s секунди</string>
<string name="revanced_sb_stats_saved_second_format">%s секунди</string>
<string name="revanced_sb_color_dot_label">Цвят:</string>
<string name="revanced_sb_color_changed">Цветът е променен</string>
<string name="revanced_sb_color_reset">Възстанови цвета</string>
<string name="revanced_sb_color_invalid">Невалидна стойност за цвета</string>
<string name="revanced_sb_reset_color">Възстановяване на цвят</string>
<string name="revanced_sb_reset">Нулиране</string>
<string name="revanced_sb_about">Относно</string>
<string name="revanced_sb_about_api_sum">Данните са предоставени от SponsorBlock API. Докоснете тук за повече информация и изтеглияния</string>
</patch>
<patch id="layout.spoofappversion.SpoofAppVersionPatch">
<string name="revanced_spoof_app_version_title">Подлъгване за версията на приложението</string>
<string name="revanced_spoof_app_version_summary_on">Подправена версия</string>
<string name="revanced_spoof_app_version_summary_off">Не подправена версия</string>
<string name="revanced_spoof_app_version_user_dialog_message">Версията на приложението YouTube ще бъде променена на по-стара.\n\nТова ще промени външния вид и функциите на приложението.\n\nно ако по-късно се деактивира, се препоръчва да изчистите данните на приложението, за да избегнете грешки в потребителския интерфейс.</string>
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
<string name="revanced_spoof_app_version_target_title">Подлъгване за версията на</string>
<!-- 'RYD' is 'Return YouTube Dislike' -->
<string name="revanced_spoof_app_version_target_entry_1">18.33.40 - Възстановете RYD в режим „инкогнито“ на Shorts</string>
<string name="revanced_spoof_app_version_target_entry_2">18.20.39 - Възстановяване на видео скорост &amp; в менюто за качество</string>
<string name="revanced_spoof_app_version_target_entry_3">18.09.39 - Възстановяване на таб \"Библиотека\"</string>
<string name="revanced_spoof_app_version_target_entry_4">17.41.37 - Връщане на секцията с плейлиста към стария стил</string>
<string name="revanced_spoof_app_version_target_entry_5">17.33.42 - Възстановява стария изглед</string>
</patch>
<patch id="layout.startpage.ChangeStartPagePatch">
<string name="revanced_start_page_title">Задай начална страница</string>
<string name="revanced_start_page_entry_0">По подразбиране</string>
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
<string name="revanced_start_page_entry_1">Начало</string>
<string name="revanced_start_page_entry_2">Търсене</string>
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the subscriptions tab. -->
<string name="revanced_start_page_entry_3">Абонаменти</string>
<string name="revanced_start_page_entry_4">Разгледайте</string>
<string name="revanced_start_page_entry_5">Shorts</string>
<!-- 'You' should be translated using the same localized wording YouTube displays for the You (library) tab. -->
<string name="revanced_start_page_entry_6">Раздел \"Вие\"</string>
<string name="revanced_start_page_entry_7">Харесани видеа</string>
<!-- 'History' should be translated using the same localized wording YouTube displays for the 'history' section in the 'You' tab. -->
<string name="revanced_start_page_entry_8">История</string>
<string name="revanced_start_page_entry_9">Популярни</string>
</patch>
<patch id="layout.startupshortsreset.DisableResumingShortsOnStartupPatch">
<string name="revanced_disable_resuming_shorts_player_title">Скриване на Shorts плейъра при стартиране</string>
<string name="revanced_disable_resuming_shorts_player_summary_on">Shorts плейъра при стартиране на приложението е скрит</string>
<string name="revanced_disable_resuming_shorts_player_summary_off">Shorts плейъра при стартиране на приложението се показва</string>
</patch>
<patch id="layout.tablet.EnableTabletLayoutPatch">
<string name="revanced_tablet_layout_title">Включи режим за таблет</string>
<string name="revanced_tablet_layout_summary_on">Режим за таблет е вкл.</string>
<string name="revanced_tablet_layout_summary_off">Режим за таблет е изкл.</string>
<string name="revanced_tablet_layout_user_dialog_message">Публикациите в общността не се показват на оформления за таблет</string>
</patch>
<patch id="layout.miniplayer.MiniplayerPatch">
<string name="revanced_miniplayer_screen_title">Минимизиран екран за възпроизвеждане</string>
<string name="revanced_miniplayer_screen_summary">Променете стила на минимизирания екран за възпроизвеждане</string>
<string name="revanced_miniplayer_type_title">Минимизиран тип екран за гледане</string>
<string name="revanced_miniplayer_type_entry_1">Оригинал</string>
<string name="revanced_miniplayer_type_entry_2">Телефон</string>
<string name="revanced_miniplayer_type_entry_3">Таблет</string>
<string name="revanced_miniplayer_type_entry_4">Модерен 1</string>
<string name="revanced_miniplayer_type_entry_5">Модерен 2</string>
<string name="revanced_miniplayer_type_entry_6">Модерен 3</string>
<string name="revanced_miniplayer_hide_expand_close_title">Бутони за разширяване и свиване на екрана</string>
<string name="revanced_miniplayer_hide_expand_close_summary_on">Скрит.\n(плъзнете минимизирания екран на плейъра, за да разширите или затворите видеоклипа)</string>
<string name="revanced_miniplayer_hide_expand_close_summary_off">Бутони за разширяване и свиване на екрана са видими</string>
<string name="revanced_miniplayer_hide_subtext_title">Екранни текстове, етикети</string>
<string name="revanced_miniplayer_hide_subtext_summary_on">Скрити</string>
<string name="revanced_miniplayer_hide_subtext_summary_off">Показват се</string>
<string name="revanced_miniplayer_hide_rewind_forward_title">Бутони за напред и назад</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Бутони за напред и назад са скрити</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Бутони за напред и назад са показани</string>
<string name="revanced_miniplayer_opacity_title">Прозрачност на менютата</string>
<string name="revanced_miniplayer_opacity_summary">Стойност на прозрачност между 0-100, където 0 е прозрачно</string>
<string name="revanced_miniplayer_opacity_invalid_toast">Прозрачността на менюто трябва да бъде между 0-100</string>
</patch>
<patch id="layout.theme.ThemeBytecodePatch">
<string name="revanced_gradient_loading_screen_title">Фон на екрана при зареждане на видео</string>
<string name="revanced_gradient_loading_screen_summary_on">Екранът за зареждане ще има градиентен фон</string>
<string name="revanced_gradient_loading_screen_summary_off">Екранът за зареждане ще има плътен фон</string>
</patch>
<patch id="layout.theme.ThemeResourcePatch">
<string name="revanced_seekbar_custom_color_title">Промяна на цвета на индикатора за време</string>
<string name="revanced_seekbar_custom_color_summary_on">Показва се персонализиран цвят на лентата за напредък</string>
<string name="revanced_seekbar_custom_color_summary_off">Показва се оригиналния цвят на лентата за напредък</string>
<string name="revanced_seekbar_custom_color_value_title">Персонализиран цвят на лентата за напредък</string>
<string name="revanced_seekbar_custom_color_value_summary">Цветове на лентата за напредък</string>
<string name="revanced_seekbar_custom_color_invalid">Невалидна стойност на цвета. Използвй стойност по подразбиране.</string>
</patch>
<patch id="layout.thumbnails.BypassImageRegionRestrictions">
<string name="revanced_bypass_image_region_restrictions_title">Прескочете забраната за зареждане на изображение</string>
<string name="revanced_bypass_image_region_restrictions_summary_on">Домейнът yt4.ggpht.com се използва за зареждане на изображения</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">Оригиналният домейн се използва за зареждане на изображения\n\nАктивирането на тази настройка може да коригира зареждането на изображения, които са блокирани в някои региони</string>
</patch>
<patch id="layout.thumbnails.AlternativeThumbnailsPatch">
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
<string name="revanced_alt_thumbnail_home_title">Раздел Начало</string>
<!-- 'Subscription' should be translated using the same localized wording YouTube displays for the subscription tab. -->
<string name="revanced_alt_thumbnail_subscription_title">Раздел Абонаменти</string>
<!-- 'You' should be translated using the same localized wording YouTube displays for the You (library) tab. -->
<string name="revanced_alt_thumbnail_library_title">Раздел \"Вие\"</string>
<string name="revanced_alt_thumbnail_player_title">Плейлисти, предложения</string>
<string name="revanced_alt_thumbnail_search_title">Резултати от търсенето</string>
<string name="revanced_alt_thumbnail_options_entry_1">Оригинални миниатюри</string>
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow &amp; оригинални миниатюри</string>
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow &amp; Неподвижни кадри</string>
<string name="revanced_alt_thumbnail_options_entry_4">Неподвижни кадри</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow предоставя миниатюри на публиката за видеоклипове. Тези миниатюри често са по-подходящи от тези, предоставени от самия YouTube. Ако е активирано, URL адресите на видео ще бъдат изпратени до API сървъра, без да се изпращат други данни. Ако видеоклипът няма миниатюри на DeArrow, ще се покажат или неговите оригинални миниатюри, или заснети кадри. Щракнете, за да научите повече за DeArrow</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Показване на известие, ако API не е наличен</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Показва се известие, ако DeArrow не е наличен</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Показва се известие, ако DeArrow не е наличен</string>
<string name="revanced_alt_thumbnail_dearrow_api_url_title">Крайна точка на API на DeArrow</string>
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">URL адресът на крайната точка за съхранение на миниатюри DeArrow</string>
<string name="revanced_alt_thumbnail_stills_about_title">Неподвижни миниатюри</string>
<string name="revanced_alt_thumbnail_stills_about_summary">Неподвижните снимки се правят от началото / средата / края на всеки видеоклип. Тези изображения са вградени в YouTube и не се използва външен API</string>
<string name="revanced_alt_thumbnail_stills_fast_title">Използване на бързо заснемане на кадри</string>
<string name="revanced_alt_thumbnail_stills_fast_summary_on">Използват се кадри със средно качество. Миниатюрите ще се зареждат по-бързо, но видеоклипове на живо, неиздадени или много стари може да показват празни миниатюри</string>
<string name="revanced_alt_thumbnail_stills_fast_summary_off">Използване на висококачествени снимки</string>
<string name="revanced_alt_thumbnail_stills_time_title">Времето на видеоклипа, от който ще бъдат взети кадрите</string>
<string name="revanced_alt_thumbnail_stills_time_entry_1">Начало на видеото</string>
<string name="revanced_alt_thumbnail_stills_time_entry_2">Средата на видеото</string>
<string name="revanced_alt_thumbnail_stills_time_entry_3">Края на видеото</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_alt_thumbnail_dearrow_error">DeArrow временно не е наличен. (код на състоянието: %s)</string>
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow временно не е наличен</string>
</patch>
<patch id="misc.announcements.AnnouncementsPatch">
<string name="revanced_announcements_title">Показване на ReVanced съобщения</string>
<string name="revanced_announcements_summary_on">Съобщенията се показват при стартиране</string>
<string name="revanced_announcements_summary_off">Съобщенията не се показват при стартиране</string>
<string name="revanced_announcements_enabled_summary">Показване на съобщения при стартиране</string>
<string name="revanced_announcements_connection_failed">Неуспешно свързване с доставчик на съобщения</string>
<string name="revanced_announcements_dialog_dismiss">Отхвърли</string>
</patch>
<patch id="misc.dns.CheckWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Предупреждение</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Историята ви на гледане не се запазва.&lt;br&gt;&lt;br&gt;Това най-вероятно е причинено от DNS блокиращ реклами или мрежов прокси.&lt;br&gt;&lt;br&gt;За да коригирате това, поставете &lt;b&gt;s.youtube в белия списък.com&lt;/b&gt; или изключете всички DNS блокери и проксита.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Не показвай отново</string>
</patch>
<patch id="misc.autorepeat.AutoRepeatPatch">
<string name="revanced_auto_repeat_title">Автоматично повтаряне на текущия видеоклип</string>
<string name="revanced_auto_repeat_summary_on">Включено автоматично повтаряне на текущия видеоклип</string>
<string name="revanced_auto_repeat_summary_off">Изключено автоматично повтаряне на текущия видеоклип</string>
</patch>
<patch id="misc.dimensions.spoof.SpoofDeviceDimensionsPatch">
<string name="revanced_spoof_device_dimensions_title">Лъжливи параметри на устройството</string>
<string name="revanced_spoof_device_dimensions_summary_on">Подправената резолюция на устройството\n\nМоже да се отключи по-високо качество на видеото, но може да изпитате засичане при възпроизвеждане на видео, по-лош живот на батерията и неизвестни странични ефекти</string>
<string name="revanced_spoof_device_dimensions_summary_off">Резолюцията на устройството не е подправена\n\nАктивирането на това не може да отключи по-високо качество на видеото</string>
<string name="revanced_spoof_device_dimensions_user_dialog_message">Разрешаването на това може да причини прекъсване на възпроизвеждането на видео, влошен живот на батерията и неизвестни странични ефекти.</string>
</patch>
<patch id="misc.gms.GmsCoreSupportResourcePatch">
<string name="microg_settings_title">GmsCore Настройки</string>
<string name="microg_settings_summary">Настройки на GmsCore</string>
</patch>
<patch id="misc.links.BypassURLRedirectsPatch">
<string name="revanced_bypass_url_redirects_title">Заобикаляне на URL пренасочване</string>
<string name="revanced_bypass_url_redirects_summary_on">URL пренасочванията се заобикалят</string>
<string name="revanced_bypass_url_redirects_summary_off">URL пренасочванията не се заобикалят</string>
</patch>
<patch id="misc.links.OpenLinksExternallyPatch">
<string name="revanced_external_browser_title">Отваряне на връзки в браузъра</string>
<string name="revanced_external_browser_summary_on">Отваряне на външни връзки</string>
<string name="revanced_external_browser_summary_off">Отваряне на връзки в приложението</string>
</patch>
<patch id="misc.privacy.RemoveTrackingQueryParameterPatch">
<string name="revanced_remove_tracking_query_parameter_title">Премахнете параметъра на заявката за проследяване</string>
<string name="revanced_remove_tracking_query_parameter_summary_on">Параметърът на заявката за проследяване е премахнат от връзките</string>
<string name="revanced_remove_tracking_query_parameter_summary_off">Параметърът на заявката за проследяване не е премахнат от връзките</string>
</patch>
<patch id="misc.zoomhaptics.ZoomHapticsPatch">
<string name="revanced_disable_zoom_haptics_title">Деактивиране на вибрация при мащабиране</string>
<string name="revanced_disable_zoom_haptics_summary_on">Вибрациите са деактивирани</string>
<string name="revanced_disable_zoom_haptics_summary_off">Вибрациите са активирани</string>
</patch>
<patch id="video.quality.RememberVideoQualityPatch">
<string name="revanced_video_quality_default_entry_1">Автоматично качество</string>
<string name="revanced_remember_video_quality_last_selected_title">Запомни промените в качеството на видеото</string>
<string name="revanced_remember_video_quality_last_selected_summary_on">Промените в качеството се отнасят за всички видеоклипове</string>
<string name="revanced_remember_video_quality_last_selected_summary_off">Промените в качеството се отнасят само за текущия видеоклип</string>
<string name="revanced_video_quality_default_wifi_title">Предпочитано качество при Wi-Fi</string>
<string name="revanced_video_quality_default_mobile_title">Предпочитано качество при мобилни данни</string>
<string name="revanced_remember_video_quality_mobile">мобилни данни</string>
<string name="revanced_remember_video_quality_wifi">wi-fi</string>
<string name="revanced_remember_video_quality_toast">Променено стандартно %1$s качество на: %2$s</string>
</patch>
<patch id="video.speed.button.PlaybackSpeedButtonPatch">
<string name="revanced_playback_speed_dialog_button_title">Показване бутон за скорост</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Бутонът е показан</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Бутонът не е показан</string>
</patch>
<patch id="video.speed.custom.CustomPlaybackSpeedPatch">
<string name="revanced_custom_playback_speeds_title">Персонализирани скорости на възпроизвеждане</string>
<string name="revanced_custom_playback_speeds_summary">Добавете или променете наличните скорости на възпроизвеждане</string>
<string name="revanced_custom_playback_speeds_invalid">Персоналната скорост трябва да е по-малка от %s. Използване на стойности по подразбиране.</string>
<string name="revanced_custom_playback_speeds_parse_exception">Невалидни персонализирани скорости на възпроизвеждане. Използване на стойности по подразбиране.</string>
</patch>
<patch id="video.speed.remember.RememberPlaybackSpeedPatch">
<string name="revanced_remember_playback_speed_last_selected_title">Запомни промените в скоростта на възпроизвеждане</string>
<string name="revanced_remember_playback_speed_last_selected_summary_on">Промените в скоростта на възпроизвеждане се отнасят за всички видеоклипове</string>
<string name="revanced_remember_playback_speed_last_selected_summary_off">Промените в скоростта на възпроизвеждане се отнасят само за текущия видеоклип</string>
<string name="revanced_playback_speed_default_title">Скорост на възпроизвеждане по подразбиране</string>
<string name="revanced_remember_playback_speed_toast">Скоростта по подразбиране е променена на: %s</string>
</patch>
<patch id="video.videoqualitymenu.RestoreOldVideoQualityMenuResourcePatch">
<string name="revanced_restore_old_video_quality_menu_title">Възстановете старото меню за качество на видеото</string>
<string name="revanced_restore_old_video_quality_menu_summary_on">Показва се старото меню за видео качество</string>
<string name="revanced_restore_old_video_quality_menu_summary_off">Старото меню за видео качество е скрито</string>
</patch>
<patch id="interaction.seekbar.EnableSlideToSeekPatch">
<string name="revanced_slide_to_seek_title">Активиране на слайд за превъртане</string>
<string name="revanced_slide_to_seek_summary_on">Слайд за превъртане е активиран</string>
<string name="revanced_slide_to_seek_summary_off">Слайд за превъртане е деактивиран</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_user_dialog_message">Деактивирането на тази настройка ще доведе до проблеми с възпроизвеждането на видео.</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Активирането на това може да подобри живота на батерията и да коригира прекъсванията при възпроизвеждане.\n\nAVC има максимална разделителна способност от 1080p и възпроизвеждането на видео ще използва повече интернет данни от VP9 или AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">ранични ефекти от подмяната на iOS</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Странични ефекти от подправяне на Android VR</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">
@@ -653,22 +1142,53 @@ This is because Crowdin requires temporarily flattening this file and removing t
</app>
<app id="twitch">
<patch id="ad.audio.AudioAdsPatch">
<string name="revanced_block_audio_ads_title">Аудио реклами</string>
<string name="revanced_block_audio_ads_summary_on">Аудио рекламата е блокирана</string>
<string name="revanced_block_audio_ads_summary_off">Аудио рекламата е разблокирана</string>
</patch>
<patch id="ad.embedded.EmbeddedAdsPatch">
<string name="revanced_embedded_ads_service_unavailable">%s е недостъпен. Може да се показват реклами. Опитайте друга услуга за блокиране на реклами.</string>
<string name="revanced_embedded_ads_service_failed">%s сървърът върна грешка. Може да се показват реклами. Опитайте да превключите друга услуга за блокиране на реклами.</string>
<string name="revanced_block_embedded_ads_title">Блокиране на вградени видеореклами</string>
<string name="revanced_block_embedded_ads_entry_1">Деактивирано</string>
<string name="revanced_block_embedded_ads_entry_2">Luminous прокси</string>
<string name="revanced_block_embedded_ads_entry_3">PurpleAdBlock прокси</string>
</patch>
<patch id="ad.video.VideoAdsPatch">
<string name="revanced_block_video_ads_title">Видео реклами</string>
<string name="revanced_block_video_ads_summary_on">Видео рекламата е блокирана</string>
<string name="revanced_block_video_ads_summary_off">Видео рекламата е разблокирана</string>
</patch>
<patch id="chat.antidelete.ShowDeletedMessagesPatch">
<string name="revanced_deleted_msg">съобщението е изтрито</string>
<string name="revanced_show_deleted_messages_title">Покажи изтритите съобщения</string>
<string name="revanced_show_deleted_messages_entry_1">Не показвай изтритите съобщения</string>
<string name="revanced_show_deleted_messages_entry_2">Скрийте изтритите съобщения зад спойлер</string>
<string name="revanced_show_deleted_messages_entry_3">Показване на изтритите съобщения като зачеркнат текст</string>
</patch>
<patch id="chat.autoclaim.AutoClaimChannelPointsPatch">
<string name="revanced_auto_claim_channel_points_title">Автоматично изискване на Channel Points</string>
<string name="revanced_auto_claim_channel_points_summary_on">Автоматично изискване на Channel Points</string>
<string name="revanced_auto_claim_channel_points_summary_off">Channel Points в канала не се изискват автоматично</string>
</patch>
<patch id="debug.DebugModePatch">
<!-- Twitch specific internal debug mode, and not the same as 'revanced_debug_title' -->
<string name="revanced_twitch_debug_mode_title">Активирайте режима за отстраняване на грешки в Twitch</string>
<string name="revanced_twitch_debug_mode_summary_on">Режимът за отстраняване на грешки в Twitch е активиран (не се препоръчва)</string>
<string name="revanced_twitch_debug_mode_summary_off">Режимът за отстраняване на грешки в Twitch е деактивиран</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings">Настройки на ReVanced</string>
<string name="revanced_ads_screen_title">Реклами</string>
<string name="revanced_ads_screen_summary">Настройки за блокиране на реклами</string>
<string name="revanced_chat_screen_title">Чатове</string>
<string name="revanced_chat_screen_summary">Настройки на чата</string>
<string name="revanced_misc_screen_title">Разни</string>
<string name="revanced_misc_screen_summary">Допълнителни настройки</string>
<string name="revanced_general_category_title">Основни настройки</string>
<string name="revanced_other_category_title">Други настройки</string>
<string name="revanced_client_ads_category_title">Клиентска реклама</string>
<string name="revanced_surestream_ads_category_title">Сърварна реклама</string>
<string name="revanced_twitch_debug_title">Дневник на отстраняването на грешки</string>
<string name="revanced_twitch_debug_summary_on">Дневникът за остраняване на грешки е активиран</string>
<string name="revanced_twitch_debug_summary_off">Дневникът за остраняване на грешки е деактивиран</string>

View File

@@ -32,6 +32,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_confirm_user_dialog_title">আপনি কি এগিয়ে যেতে ইচ্ছুক?</string>
<string name="revanced_settings_reset">আবার সেট করুন</string>
@@ -42,6 +44,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_import_reset">ReVanced সেটিং ডিফল্ট সেট করা হয়েছে</string>
<string name="revanced_settings_import_success">%d সেটিং আমদানি হয়েছে</string>
<string name="revanced_settings_import_failure_parse">আমদানি করা যায়নি: %s</string>
<string name="revanced_pref_import_export_title">আমদানি এবং রপ্তানি</string>
<string name="revanced_pref_import_export_summary">ReVanced সেটিং আমদানি বা রপ্তানি করুন</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">আপনি ReVanced প্যাচ সংস্করণ &lt;i&gt;%s&lt;/i&gt; ব্যবহার করছেন</string>
<string name="revanced_settings_about_links_dev_header">দ্রষ্টব্য</string>
<string name="revanced_settings_about_links_dev_body">এই সংস্করণ একটি প্রাক-প্রকাশনা এবং এতে আপনি অনাকাঙ্খিত সমস্যার সম্মুখিন হতে পারেন</string>
<string name="revanced_settings_about_links_header">অফিশ্যাল লিংকসমূহ</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -54,14 +63,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings_about_links_body">আপনি ReVanced প্যাচ সংস্করণ &lt;i&gt;%s&lt;/i&gt; ব্যবহার করছেন</string>
<string name="revanced_settings_about_links_dev_header">দ্রষ্টব্য</string>
<string name="revanced_settings_about_links_dev_body">এই সংস্করণ একটি প্রাক-প্রকাশনা এবং এতে আপনি অনাকাঙ্খিত সমস্যার সম্মুখিন হতে পারেন</string>
<string name="revanced_settings_about_links_header">অফিশ্যাল লিংকসমূহ</string>
<string name="revanced_pref_import_export_title">আমদানি এবং রপ্তানি</string>
<string name="revanced_pref_import_export_summary">ReVanced সেটিং আমদানি বা রপ্তানি করুন</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">সম্পর্কিত</string>
<string name="revanced_settings_screen_01_ads_title">বিজ্ঞাপন</string>
@@ -232,13 +233,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">লুকানোর জন্য কীওয়ার্ড</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">লুকানোর জন্য কীওয়ার্ড এবং বাক্যাংশ, নতুন লাইনে পৃথক করা\n\nশব্দের মাঝে বড় হাতের অক্ষর থাকলে তা অবশ্যই সঠিক আবরণে লিখতে হবে (উদাহরণ: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">কীওয়ার্ড ফিল্টারিং সম্পর্কে</string>
<string name="revanced_hide_keyword_content_about_summary">প্রধান পাতা/সাবস্ক্রিপশন/অনুসন্ধান ফলাফল গুলো কীওয়ার্ড বাক্যাংশের সাথে মিলিয়ে লুকানোর জন্য ফিল্টার করা হয়েছে\n\nসীমাবদ্ধতা\n• কিছু Shorts নাও লুকানো হতে পারে\n• কিছু ইউআই উপাদান নাও লুকানো হতে পারে\n• কোন কীওয়ার্ড সার্চ করলে কোন ফলাফল নাও দেখাতে পারে</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">অবৈধ কীওয়ার্ড ফিল্টার \'%s\' ব্যবহার করা যাবে না</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">ত্রুটিপূর্ণ কীওয়ার্ড। \'%1$s\' টি %2$d অক্ষর থেকে কম</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">সাধারণ বিজ্ঞাপন লুকান</string>
@@ -604,7 +601,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">প্লেয়ার ওভারলে অস্বচ্ছতা অবশ্যই -১০০ এর মধ্যে হতে হবে</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">লুকিয়ে রয়েছে</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">অপছন্দ সাময়িকভাবে উপলভ্য নয় (API সময় শেষ হয়েছে)</string>
<string name="revanced_ryd_failure_connection_status_code">অপছন্দ উপলভ্য নয় (অবস্থা %d)</string>
@@ -799,8 +795,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">সেগমেন্টটি শুরু হওয়ার সময়</string>
<string name="revanced_sb_new_segment_time_end">সেগমেন্টটি শেষ হওয়ার সময়</string>
<string name="revanced_sb_new_segment_confirm_title">সময়কাল কি সঠিক?</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">সেগমেন্ট সময়কাল\n\n%1$s\nথেকে\n%2$s\n\n(%3$s)\n\nজমা করার জন্য প্রস্তুত?</string>
<string name="revanced_sb_new_segment_start_is_before_end">শুরু অবশ্যই শেষের আগে হতে হবে</string>
<string name="revanced_sb_new_segment_mark_locations_first">আগে সময় বারে দুটি অবস্থান চিহ্নিত করুন</string>
@@ -1037,19 +1031,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">ভিডিওর নির্দিষ্ট অংশে যেতে টানুন সক্রিয় করা হয়েছে</string>
<string name="revanced_slide_to_seek_summary_off">ভিডিওর নির্দিষ্ট অংশে যেতে টানুন সক্রিয় করা হয়নি</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_title">ক্লায়েন্ট স্পুফ করুন</string>
<string name="revanced_spoof_client_screen_summary">প্লেব্যাক সমস্যা প্রতিরোধ করতে ক্লায়েন্ট স্পুফ করুন</string>
<string name="revanced_spoof_client_title">ক্লায়েন্ট স্পুফ করুন</string>
<string name="revanced_spoof_client_summary_on">ক্লায়েন্ট স্পুফ করা হয়েছে</string>
<string name="revanced_spoof_client_summary_off">ক্লায়েন্ট স্পুফ করা হয়নি\n\nভিডিও প্লেব্যাক ঠিকমতো কাজ নাও করতে পারে</string>
<string name="revanced_spoof_client_user_dialog_message">এই সেটিংটি বন্ধ করার ফলে ভিডিও প্লেব্যাক ত্রুটি হতে পারে।</string>
<string name="revanced_spoof_client_use_ios_title">ক্লায়েন্ট iOS এ স্পুফ করুন</string>
<string name="revanced_spoof_client_storyboard_timeout">ক্লায়েন্ট স্পুফ থাম্বনেইল সাময়িকভাবে উপলভ্য নয় (API সময় শেষ হয়েছে)</string>
<string name="revanced_spoof_client_storyboard_io_exception">স্পুফ ক্লায়েন্ট থাম্বনেইল সাময়িকভাবে উপলভ্য নয়: %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_user_dialog_message">এই সেটিংটি বন্ধ করার ফলে ভিডিও প্লেব্যাক ত্রুটি হতে পারে।</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,15 +32,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<!-- Settings about dialog. -->
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
</patch>
<patch id="misc.settings.SettingsPatch">
</patch>
<patch id="misc.debugging.DebuggingPatch">
@@ -57,7 +58,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- '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. -->
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
<patch id="ad.general.HideAdsResourcePatch">
@@ -171,8 +172,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.sponsorblock.SponsorBlockResourcePatch">
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<!-- Shown in the settings preferences, and translations can be any text length. -->
</patch>
<patch id="layout.spoofappversion.SpoofAppVersionPatch">
@@ -234,10 +233,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.EnableSlideToSeekPatch">
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,16 +32,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_reset">Restablir</string>
<!-- Settings about dialog. -->
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">Quant a</string>
</patch>
@@ -59,7 +60,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- '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. -->
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
<patch id="ad.general.HideAdsResourcePatch">
@@ -175,8 +176,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_appearance_category">Aparença</string>
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<!-- Shown in the settings preferences, and translations can be any text length. -->
<string name="revanced_sb_stats_loading">S\'està carregant...</string>
<string name="revanced_sb_reset">Restablir</string>
@@ -243,10 +242,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.EnableSlideToSeekPatch">
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,6 +32,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
<string name="revanced_check_environment_failed_title">Kontroly selhaly</string>
<string name="revanced_check_environment_dialog_open_official_source_button">Otevřít oficiální webovou stránku</string>
<string name="revanced_check_environment_dialog_ignore_button">Ignorovat</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;Zdá se, že tuto aplikaci neupravujete.&lt;/h5&gt;&lt;br&gt;Tato aplikace nemusí fungovat správně, &lt;b&gt;může být škodlivá nebo dokonce nebezpečná pro použití&lt;/b&gt;.&lt;br&gt;&lt;br&gt;Z těchto kontrol vyplývá, že tato aplikace je předem upravena nebo získána od někoho jiného:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt;Je důrazně doporučeno &lt;b&gt;odinstalovat tuto aplikaci a opravit ji sami&lt;/b&gt; , abyste se ujistili, že používáte ověřenou a bezpečnou aplikaci.&lt;p&gt;&lt;br&gt;Pokud je ignorováno, toto varování se zobrazí pouze dvakrát.</string>
<string name="revanced_check_environment_not_same_patching_device">Upraveno na jiném zařízení</string>
<string name="revanced_check_environment_manager_not_expected_installer">Není nainstalován ReVanced Manager</string>
<string name="revanced_check_environment_not_near_patch_time">Upraveno před více než 10 minutami</string>
<string name="revanced_check_environment_not_near_patch_time_days">Patchnuto před %s dny</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK datum sestavení je poškozeno</string>
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_title">ReVanced</string>
<string name="revanced_settings_confirm_user_dialog_title">Přejete si pokračovat?</string>
@@ -43,6 +54,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_import_reset">Nastavení Revanced resetováno do výchozího stavu</string>
<string name="revanced_settings_import_success">Importováno %d nastavení</string>
<string name="revanced_settings_import_failure_parse">Importováni selhalo: %s</string>
<string name="revanced_pref_import_export_title">Import / Export</string>
<string name="revanced_pref_import_export_summary">Importovat/ exportovat nastavení ReVanced</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">Používáte ReVanced Patches verze &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Poznámka</string>
<string name="revanced_settings_about_links_dev_body">Tato verze je předběžná verze a můžete zaznamenat neočekávané problémy</string>
<string name="revanced_settings_about_links_header">Oficiální odkazy</string>
<string name="revanced_settings_about_links_donate">Přispět</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -55,15 +74,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings">ReVanced</string>
<string name="revanced_settings_about_links_body">Používáte ReVanced Patches verze &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Poznámka</string>
<string name="revanced_settings_about_links_dev_body">Tato verze je předběžná verze a můžete zaznamenat neočekávané problémy</string>
<string name="revanced_settings_about_links_header">Oficiální odkazy</string>
<string name="revanced_pref_import_export_title">Import / Export</string>
<string name="revanced_pref_import_export_summary">Importovat/ exportovat nastavení ReVanced</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">O aplikaci</string>
<string name="revanced_settings_screen_01_ads_title">Reklamy</string>
@@ -71,7 +81,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_screen_03_feed_title">Přísun</string>
<string name="revanced_settings_screen_04_player_title">Přehrávač</string>
<string name="revanced_settings_screen_05_general_title">Celkové rozložení</string>
<string name="revanced_settings_screen_06_shorts_title">Shorts</string>
<string name="revanced_settings_screen_07_seekbar_title">Lišta</string>
<string name="revanced_settings_screen_08_swipe_controls_title">Ovládání gesty</string>
<string name="revanced_settings_screen_11_misc_title">Ostatní</string>
@@ -245,14 +254,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Klíčová slova ke skrytí</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">klíčová slova a fráze ke skrytí, odděleno novými řádky\n\nSlova s velkými písmeny uprostřed musí být zadána s pláštěm (ie: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">klíčová slova a fráze ke skrytí, odděleno novými řádky\n\nKlíčová slova mohou být jména kanálů nebo jakýkoli text zobrazený v nadpisech videa\n\nSlova s velkými písmeny uprostřed musí být zadána se skříní (např: iPhone, iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">O filtrování klíčových slov</string>
<string name="revanced_hide_keyword_content_about_summary">Výsledky domovského/předplatného/vyhledávání jsou filtrovány pro skrytí obsahu, který odpovídá výrazům klíčových slov\n\nOmezení\n• Některé krátkosti nemusí být skryty\n• Některé komponenty uživatelského rozhraní nemusí být skryté\n• Hledání klíčových slov nemusí zobrazovat žádné výsledky</string>
<string name="revanced_hide_keyword_content_about_summary">Výsledky domovského/předplatného/vyhledávání jsou filtrovány pro skrytí obsahu, který odpovídá výrazům klíčových slov\n\nOmezení\n• Krátké nelze skrýt podle názvu kanálu\n• Některé komponenty uživatelského rozhraní nemusí být skryté\n• Hledání klíčového slova nemusí zobrazovat žádné výsledky</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">Porovnat celá slova</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<string name="revanced_hide_keyword_content_about_whole_words_summary">Zaokrouhlení klíčového slova/fráze s dvojitými uvozovkami zabrání částečným shodám s názvy videí a kanálů&lt;br&gt;&lt;br&gt;Například&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; skryje video: &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;, ale nebude skrýt: &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">Neplatné klíčové slovo. Nelze použít: \'%s\' jako filtr</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">Neplatné klíčové slovo. \'%1$s\' je menší než %2$d znaků</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Klíčové slovo \'%s\' skryje všechna videa</string>
<string name="revanced_hide_keyword_toast_invalid_common">Nelze použít klíčové slovo: %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Přidat uvozovky pro použití klíčového slova: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">Klíčové slovo obsahuje protichůdné deklarace: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">Klíčové slovo je příliš krátké a vyžaduje uvozovky: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Klíčové slovo skryje všechna videa: %s</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">Skrýt obecné reklamy</string>
@@ -433,7 +446,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_home_button_summary_on">Tlačítko Domů je skryté</string>
<string name="revanced_hide_home_button_summary_off">Tlačítko Domů je zobrazeno</string>
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_hide_shorts_button_title">Skrýt krátké</string>
<string name="revanced_hide_shorts_button_title">Skrýt Shorts</string>
<string name="revanced_hide_shorts_button_summary_on">Tlačítko \"Shorts\" je skryté</string>
<string name="revanced_hide_shorts_button_summary_off">Tlačítko \"Shorts\" je viditelné</string>
<!-- The Create button has no display name. Translate normally. -->
@@ -618,6 +631,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_save_sound_button_title">Skrýt zvuk do playlistu</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Uložit zvuk do playlistu je skrytý</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Ukládat zvuk do seznamu skladeb je zobrazen</string>
<string name="revanced_hide_shorts_use_this_sound_button_title">Skrýt toto tlačítko zvuku</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_on">Použít toto zvukové tlačítko je skryté</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_off">Použít toto zvukové tlačítko je zobrazeno</string>
<string name="revanced_hide_shorts_search_suggestions_title">Skrýt návrhy hledání</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">Návrhy hledání jsou skryty</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">Návrhy hledání jsou zobrazeny</string>
@@ -681,7 +697,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">Průhlednost překrytí přehrávače musí být od 0 do 100</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Hidden</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">Líbí se mi dočasně nedostupné (vypršel časový limit API)</string>
<string name="revanced_ryd_failure_connection_status_code">Nelíbí se mi nedostupné (status %d)</string>
@@ -777,6 +792,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_skipcount_sum_off">Přeskočit počet sledování není povoleno</string>
<string name="revanced_sb_general_min_duration">Minimální doba trvání segmentu</string>
<string name="revanced_sb_general_min_duration_sum">Segmenty kratší než tato hodnota (v sekundách) nebudou zobrazeny nebo přeskočeny</string>
<string name="revanced_sb_general_min_duration_invalid">Neplatná doba trvání</string>
<string name="revanced_sb_general_uuid">Vaše soukromé ID uživatele</string>
<string name="revanced_sb_general_uuid_sum">Toto by mělo být ponecháno v soukromí. To je jako heslo a nemělo by být s nikým sdíleno. Pokud to někdo má, mohou vás zosobnit</string>
<string name="revanced_sb_general_uuid_invalid">Soukromé ID uživatele musí mít alespoň 30 znaků</string>
@@ -877,8 +893,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Čas začátku segmentu</string>
<string name="revanced_sb_new_segment_time_end">Čas ukončení segmentu v</string>
<string name="revanced_sb_new_segment_confirm_title">Mají časy pravdu?</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">Segment je od\n\n%1$s\ndo\n%2$s\n\n(%3$s)\n\nPřipraveno k odeslání?</string>
<string name="revanced_sb_new_segment_start_is_before_end">Začátek musí být před koncem</string>
<string name="revanced_sb_new_segment_mark_locations_first">Nejdříve označte dvě místa v časové liště</string>
@@ -897,6 +911,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_stats_username_changed">Uživatelské jméno bylo úspěšně změněno</string>
<string name="revanced_sb_stats_reputation">Tvá reputace je &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">Vytvořili jste &lt;b&gt;%s&lt;/b&gt; segmenty</string>
<string name="revanced_sb_stats_submissions_sum">Klepnutím sem zobrazíte své segmenty</string>
<string name="revanced_sb_stats_saved_zero">Žebříček SponsorBlock</string>
<string name="revanced_sb_stats_saved">Uložili jste lidi z &lt;b&gt;%s&lt;/b&gt; segmentů</string>
<string name="revanced_sb_stats_saved_sum_zero">Klepnutím sem zobrazíte globální statistiky a nejlepší přispěvatelé</string>
@@ -978,7 +993,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_hide_rewind_forward_title">Skrýt přeskočit tlačítka vpřed a zpět</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Přeskočit vpřed a zpět jsou skryty</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Přeskočit vpřed a zpět jsou zobrazeny</string>
<string name="revanced_miniplayer_opacity_title">Overlay opacity</string>
<string name="revanced_miniplayer_opacity_title">Neprůhlednost překrytí</string>
<string name="revanced_miniplayer_opacity_summary">Neprůhlednost mezi 0-100, kde 0 je průhledná</string>
<string name="revanced_miniplayer_opacity_invalid_toast">Neprůhlednost překrytí minipřehrávače musí být mezi 0-100</string>
</patch>
@@ -1119,35 +1134,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">Posunutí pro vyhledání je povoleno</string>
<string name="revanced_slide_to_seek_summary_off">Posunutí k vyhledání není povoleno</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_title">Sponzor</string>
<string name="revanced_spoof_client_screen_summary">Spořič klienta, aby zabránil problémům s přehráváním</string>
<string name="revanced_spoof_client_title">Sponzor</string>
<string name="revanced_spoof_client_summary_on">Klient je falešný</string>
<string name="revanced_spoof_client_summary_off">Klient není spoofed\n\nPřehrávání videa nemusí fungovat</string>
<string name="revanced_spoof_client_user_dialog_message">Vypnutí tohoto nastavení může způsobit problémy při přehrávání videa.</string>
<string name="revanced_spoof_client_use_ios_title">Spořič do iOS</string>
<string name="revanced_spoof_client_use_ios_summary_on">Klient je v současné době spokojen s iOS\n\nBoční efekty zahrnují:\n• HDR video nemusí být k dispozici\n• Historie sledování nefunguje s obchodním účtem</string>
<string name="revanced_spoof_client_use_ios_summary_off">Klient je v současné době spout s Androidem VR. Boční efekty zahrnují:\n• No HDR video\n• Dětská videa nepřehrávají\n• Pozastavená videa mohou náhodně pokračovat\n• Nízká kvalita krátkých náhledů ve vyhledávacím panelu\n• Tlačítko pro stažení akce je skryté\n• Karty s ukončenou obrazovkou jsou skryté</string>
<string name="revanced_spoof_client_storyboard_timeout">Náhledy klientů nejsou k dispozici (vypršel časový limit API)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Spouštění náhledů klientů dočasně není k dispozici: %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<string name="revanced_spoof_signature_verification_screen_title">Podpis aplikace</string>
<string name="revanced_spoof_signature_verification_screen_summary">Podpis aplikace zabraňující problémům při přehrávání</string>
<string name="revanced_spoof_signature_verification_enabled_title">Podpis aplikace</string>
<string name="revanced_spoof_signature_verification_enabled_summary_on">Podpis aplikace spoofed\n\nBoční efekty zahrnují:\n• Rozšířená bitrate není k dispozici\n• Videa nelze stáhnout\n• Žádné náhledy pro placená videa</string>
<string name="revanced_spoof_signature_verification_enabled_summary_off">Podpis aplikace není falešný\n\nPřehrávání videa nemusí fungovat</string>
<string name="revanced_spoof_signature_verification_enabled_user_dialog_message">Vypnutí tohoto nastavení způsobí problémy při přehrávání videa.</string>
<string name="revanced_spoof_signature_in_feed_enabled_title">Podpis aplikace do kanálu</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_on">Podpis aplikace spoofed\n\nBoční efekty zahrnují:\n• Video kanálu chybí titulky\n• Automaticky přehrávaná videa se zobrazí ve vaší historii sledování</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_off">Podpis aplikace není falešný pro videa s kanálem\n\nPřed zjištěním problémů s přehráváním se videa kanálu budou přehrávat méně než 1 minutu</string>
<string name="revanced_spoof_storyboard_title">Příběh</string>
<string name="revanced_spoof_storyboard_summary_on">Skládací krabice</string>
<string name="revanced_spoof_storyboard_summary_off">Storyboard není falešný\n\nBoční efekty zahrnují:\n• Žádný ambientní režim\n• Náhledy v panelu vyhledávání jsou skryté</string>
<string name="revanced_spoof_storyboard_timeout">Spoof storyboard dočasně není k dispozici (vypršel časový limit API)</string>
<string name="revanced_spoof_storyboard_io_exception">Příběhová deska dočasně není k dispozici: %s</string>
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">Spouštěcí video streamy</string>
<string name="revanced_spoof_video_streams_screen_summary">Spouštět klientské video streamy, aby se zabránilo problémům s přehráváním</string>
<string name="revanced_spoof_video_streams_title">Spouštěcí video streamy</string>
<string name="revanced_spoof_video_streams_summary_on">Video streamy jsou falešné</string>
<string name="revanced_spoof_video_streams_summary_off">Video streamy nejsou falešné\n\nPřehrávání videa nemusí fungovat</string>
<string name="revanced_spoof_video_streams_user_dialog_message">Vypnutí tohoto nastavení může způsobit problémy při přehrávání videa.</string>
<string name="revanced_spoof_video_streams_client_type_title">Výchozí klient</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Síla AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodek je AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodek je VP9 nebo AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Vaše zařízení nemá hardwarové dekódování VP9 a toto nastavení je vždy zapnuto, když je aktivní spoofování klienta</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Povolení této funkce může zlepšit životnost baterie a opravit stahování přehrávání.\n\nAVC má maximální rozlišení 1080p a video přehrávání bude používat více dat než VP9 nebo AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">Boční efekty iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Filmy nebo placené videa nemusí hrát\n• Živočišné rekony začínají od začátku</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Boční efekty Android VR</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Menu zvukové stopy chybí</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,6 +32,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
<string name="revanced_check_environment_failed_title">Kontrol mislykkedes</string>
<string name="revanced_check_environment_dialog_open_official_source_button">Åbn officielle hjemmeside</string>
<string name="revanced_check_environment_dialog_ignore_button">Ignorer</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;Denne app ser ikke ud til at være lappet af dig.&lt;/h5&gt;&lt;br&gt;Denne app fungerer muligvis ikke korrekt, &lt;b&gt;kan være skadeligt eller endda farligt at bruge&lt;/b&gt;.&lt;br&gt;&lt;br&gt;Disse kontroller antyder, at denne app er pre-lappet eller opnået fra en anden:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt;Det anbefales kraftigt at &lt;b&gt;afinstallere denne app og lappe den selv&lt;/b&gt; for at sikre, at du bruger en valideret og sikker app.&lt;p&gt;&lt;br&gt;Hvis ignoreret, vil denne advarsel kun blive vist to gange.</string>
<string name="revanced_check_environment_not_same_patching_device">Rettet på en anden enhed</string>
<string name="revanced_check_environment_manager_not_expected_installer">Ikke installeret af ReVanced Manager</string>
<string name="revanced_check_environment_not_near_patch_time">Patched mere end 10 minutter siden</string>
<string name="revanced_check_environment_not_near_patch_time_days">Patched %s dage siden</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK byggedato er ødelagt</string>
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_title">ReVanced</string>
<string name="revanced_settings_confirm_user_dialog_title">Ønsker du at fortsætte?</string>
@@ -43,6 +54,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_import_reset">ReVanced indstillinger nulstillet til standard</string>
<string name="revanced_settings_import_success">Importerede %d indstillinger</string>
<string name="revanced_settings_import_failure_parse">Import mislykkedes: %s</string>
<string name="revanced_pref_import_export_title">Import / Eksport</string>
<string name="revanced_pref_import_export_summary">Importer / Eksport ReVanced indstillinger</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">Du bruger ReVanced Patches version &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Bemærkning</string>
<string name="revanced_settings_about_links_dev_body">Denne version er en pre-release og du kan opleve uventede problemer</string>
<string name="revanced_settings_about_links_header">Officielle links</string>
<string name="revanced_settings_about_links_donate">Donér</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -55,15 +74,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings">ReVanced</string>
<string name="revanced_settings_about_links_body">Du bruger ReVanced Patches version &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Bemærkning</string>
<string name="revanced_settings_about_links_dev_body">Denne version er en pre-release og du kan opleve uventede problemer</string>
<string name="revanced_settings_about_links_header">Officielle links</string>
<string name="revanced_pref_import_export_title">Import / Eksport</string>
<string name="revanced_pref_import_export_summary">Importer / Eksport ReVanced indstillinger</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">Om</string>
<string name="revanced_settings_screen_01_ads_title">Annoncer</string>
@@ -244,14 +254,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Nøgleord at skjule</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">Nøgleord og sætninger at skjule, adskilt af nye linjer\n\nOrd med store bogstaver i midten skal indtastes med casing (dvs. iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">Nøgleord og sætninger at skjule, adskilt af nye linjer\n\nSøgeord kan være kanalnavne eller enhver tekst vist i video titler\n\nOrd med store bogstaver i midten skal indtastes med casing (dvs. iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">Om søgeord filtrering</string>
<string name="revanced_hide_keyword_content_about_summary">Hjem/Abonnement/Søgeresultater filtreres for at skjule indhold, der matcher søgeordssætninger\n\nBegrænsninger\n• Nogle Shorts er muligvis ikke skjult\n• Nogle UI-komponenter er muligvis ikke skjult\n• Søger efter et søgeord, kan ikke vise nogen resultater</string>
<string name="revanced_hide_keyword_content_about_summary">Hjem/Abonnement/Søgeresultater filtreres for at skjule indhold, der matcher søgeordssætninger\n\nBegrænsninger\n• Korte kan ikke skjules ved kanalnavn\n• Nogle UI-komponenter kan ikke skjules\n• Søger efter et søgeord, kan ikke vise nogen resultater</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">Match hele ord</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<string name="revanced_hide_keyword_content_about_whole_words_summary">Omkring et nøgleord/sætning med dobbelt-citater vil forhindre partielle kampe af videotitler og kanalnavne&lt;br&gt;&lt;br&gt;For eksempel&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; vil skjule videoen: &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;, men skjuler ikke: &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">Ugyldigt søgeord. Kan ikke bruge: \'%s\' som et filter</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">Ugyldigt søgeord. \'%1$s\' er mindre end %2$d tegn</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Nøgleord \'%s\' vil skjule alle videoer</string>
<string name="revanced_hide_keyword_toast_invalid_common">Kan ikke bruge søgeord: %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Tilføj tilbud for at bruge søgeord: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">Nøgleord har modstridende erklæringer: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">Nøgleord er for kort og kræver tilbud: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Nøgleord vil skjule alle videoer: %s</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">Skjul generelle annoncer</string>
@@ -616,6 +630,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_save_sound_button_title">Skjul gem lyd til afspilningslisteknappen</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Gem lyd til afspilningslisten er skjult</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Gem lyd til afspilningslisten vises</string>
<string name="revanced_hide_shorts_use_this_sound_button_title">Skjul brug denne lydknap</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_on">Brug denne lydknap er skjult</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_off">Brug denne lydknap vises</string>
<string name="revanced_hide_shorts_search_suggestions_title">Skjul søgeforslag</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">Søgeforslag er skjult</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">Søgeforslag er vist</string>
@@ -679,7 +696,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">Spiller overlay gennemsigtighed skal være mellem 0-100</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Hidden</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">Dislikerer midlertidigt ikke tilgængelig (API-timeout ud)</string>
<string name="revanced_ryd_failure_connection_status_code">Dislikationer er ikke tilgængelige (status %d)</string>
@@ -775,6 +791,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_skipcount_sum_off">Overspring tælling er ikke aktiveret</string>
<string name="revanced_sb_general_min_duration">Minimum linjestykketid</string>
<string name="revanced_sb_general_min_duration_sum">Segmenter kortere end denne værdi (i sekunder) vil ikke blive vist eller sprunget over</string>
<string name="revanced_sb_general_min_duration_invalid">Ugyldig tidsvarighed</string>
<string name="revanced_sb_general_uuid">Dit private bruger-id</string>
<string name="revanced_sb_general_uuid_sum">Dette bør holdes privat. Dette er ligesom en adgangskode og bør ikke deles med nogen. Hvis nogen har dette, kan de udgive dig</string>
<string name="revanced_sb_general_uuid_invalid">Privat bruger-id skal være mindst 30 tegn langt</string>
@@ -875,8 +892,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Tidspunkt for segmentet begynder på</string>
<string name="revanced_sb_new_segment_time_end">Tidspunkt for segmentet slutter på</string>
<string name="revanced_sb_new_segment_confirm_title">Er tiderne korrekte?</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">Segmentet er fra\n\n%1$s\ntil\n%2$s\n\n(%3$s)\n\nKlar til at indsende?</string>
<string name="revanced_sb_new_segment_start_is_before_end">Start skal være før slutningen</string>
<string name="revanced_sb_new_segment_mark_locations_first">Markér to steder på tidsbjælken først</string>
@@ -895,6 +910,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_stats_username_changed">Brugernavn ændret</string>
<string name="revanced_sb_stats_reputation">Dit omdømme er &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">Du har oprettet &lt;b&gt;%s&lt;/b&gt; segmenter</string>
<string name="revanced_sb_stats_submissions_sum">Tryk her for at se dine segmenter</string>
<string name="revanced_sb_stats_saved_zero">SponsorBlokér leaderboard</string>
<string name="revanced_sb_stats_saved">Du har gemt folk fra &lt;b&gt;%s&lt;/b&gt; segmenter</string>
<string name="revanced_sb_stats_saved_sum_zero">Tryk her for at se de globale statistikker og topbidragsydere</string>
@@ -975,7 +991,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_hide_rewind_forward_title">Skjul overspring fremad og tilbage knapper</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Spring frem og tilbage er skjult</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Spring frem og tilbage vises</string>
<string name="revanced_miniplayer_opacity_title">Overlay opacity</string>
<string name="revanced_miniplayer_opacity_title">Overlay uigennemsigtighed</string>
<string name="revanced_miniplayer_opacity_summary">Gennemsigtighedsværdi mellem 0-100, hvor 0 er gennemsigtig</string>
<string name="revanced_miniplayer_opacity_invalid_toast">Miniplayer overlay gennemsigtighed skal være mellem 0-100</string>
</patch>
@@ -1116,35 +1132,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">Dias for at søge er aktiveret</string>
<string name="revanced_slide_to_seek_summary_off">Dias til søgning er ikke aktiveret</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_title">Spoof klient</string>
<string name="revanced_spoof_client_screen_summary">Spoof klienten for at forhindre afspilningsproblemer</string>
<string name="revanced_spoof_client_title">Spoof klient</string>
<string name="revanced_spoof_client_summary_on">Kunden er spoofed</string>
<string name="revanced_spoof_client_summary_off">Klienten er ikke forfalsket\n\nVideoafspilning fungerer muligvis ikke</string>
<string name="revanced_spoof_client_user_dialog_message">At slå denne indstilling fra kan forårsage problemer med videoafspilning.</string>
<string name="revanced_spoof_client_use_ios_title">Spoof klient til iOS</string>
<string name="revanced_spoof_client_use_ios_summary_on">Klienten er i øjeblikket spoofed til iOS\n\nBivirkninger omfatter:\n• HDR-video er muligvis ikke tilgængelig\n• Watch historie fungerer ikke med en brandkonto</string>
<string name="revanced_spoof_client_use_ios_summary_off">Klienten er i øjeblikket spoofed til Android VR. Bivirkninger omfatter:\n• Ingen HDR-video\n• Kids videoer ikke afspilning\n• Pause videoer kan tilfældigt genoptage\n• Lav kvalitet Shorts søgelinje miniaturer\n• Download handling knap er skjult\n• End screen cards are hidden</string>
<string name="revanced_spoof_client_storyboard_timeout">Spoof klient miniaturer ikke tilgængelige (API timemed out)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Spoof klient miniaturer midlertidigt ikke tilgængelige: %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<string name="revanced_spoof_signature_verification_screen_title">Spoof app signatur</string>
<string name="revanced_spoof_signature_verification_screen_summary">Spoof app-signaturen for at forhindre afspilningsproblemer</string>
<string name="revanced_spoof_signature_verification_enabled_title">Spoof app signatur</string>
<string name="revanced_spoof_signature_verification_enabled_summary_on">App signatur spoofed\n\nBivirkninger omfatter:\n• Forbedret bitrate er ikke tilgængelig\n• Videoer kan ikke downloades\n• Ingen søgelinje miniaturer til betalte videoer</string>
<string name="revanced_spoof_signature_verification_enabled_summary_off">App signatur ikke forfalsket\n\nVideo afspilning fungerer muligvis ikke</string>
<string name="revanced_spoof_signature_verification_enabled_user_dialog_message">At slå denne indstilling fra vil forårsage problemer med videoafspilning.</string>
<string name="revanced_spoof_signature_in_feed_enabled_title">Spoof app signatur i feed</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_on">App signatur spoofed\n\nBivirkninger omfatter:\n• Feed videoer mangler undertekster\n• Automatisk afspillede feed videoer vil blive vist i din ur historie</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_off">App signatur ikke spoofed for feed videoer\n\nFeed videoer vil spille i mindre end 1 minut, før der opstår afspilningsproblemer</string>
<string name="revanced_spoof_storyboard_title">Spoof storyboard</string>
<string name="revanced_spoof_storyboard_summary_on">Storyboard spoofed</string>
<string name="revanced_spoof_storyboard_summary_off">Storyboard ikke forfalsket\n\nBivirkninger omfatter:\n• Ingen omgivende tilstand\n• Seekbar miniaturer er skjult</string>
<string name="revanced_spoof_storyboard_timeout">Spoof storyboard midlertidigt ikke tilgængelig (API timemed out)</string>
<string name="revanced_spoof_storyboard_io_exception">Spoof storyboard midlertidigt ikke tilgængelig: %s</string>
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">Spoof video streams</string>
<string name="revanced_spoof_video_streams_screen_summary">Spoof klienten video streams for at forhindre afspilning problemer</string>
<string name="revanced_spoof_video_streams_title">Spoof video streams</string>
<string name="revanced_spoof_video_streams_summary_on">Video streams er spoofed</string>
<string name="revanced_spoof_video_streams_summary_off">Videostreams er ikke forfalskede\n\nVideoafspilning fungerer muligvis ikke</string>
<string name="revanced_spoof_video_streams_user_dialog_message">At slå denne indstilling fra kan forårsage problemer med videoafspilning.</string>
<string name="revanced_spoof_video_streams_client_type_title">Standard klient</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Gennemtving AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video codec er AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video-codec er VP9 eller AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Din enhed har ikke VP9 hardwareafkodning, og denne indstilling er altid tændt, når Client spoofing er aktiveret</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Aktivering af dette kan forbedre batteriets levetid og rette afspilningsstuttering.\n\nAVC har en maksimal opløsning på 1080p, og videoafspilning vil bruge flere internetdata end VP9 eller AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">iOS forfalskning bivirkninger</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Film eller betalte videoer kan ikke afspille\n• Livestreams starter fra starten</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR spoofing bivirkninger</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Menuen Lydspor mangler</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,6 +32,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
<string name="revanced_check_environment_failed_title">Überprüfungen fehlgeschlagen</string>
<string name="revanced_check_environment_dialog_open_official_source_button">Offizielle Webseite öffnen</string>
<string name="revanced_check_environment_dialog_ignore_button">Ignorieren</string>
<string name="revanced_check_environment_not_same_patching_device">Auf einem anderen Gerät gepatcht</string>
<string name="revanced_check_environment_manager_not_expected_installer">Nicht von ReVanced Manager installiert</string>
<string name="revanced_check_environment_not_near_patch_time">Vor mehr als 10 Minuten gepatcht</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK-Erstellungsdatum ist beschädigt</string>
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_title">ReVanced</string>
<string name="revanced_settings_confirm_user_dialog_title">Möchtest du fortfahren?</string>
@@ -43,6 +52,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_import_reset">ReVanced Einstellungen auf Standard zurückgesetzt</string>
<string name="revanced_settings_import_success">%d Einstellungen importiert</string>
<string name="revanced_settings_import_failure_parse">Import fehlgeschlagen: %s</string>
<string name="revanced_pref_import_export_title">Importieren / Exportieren</string>
<string name="revanced_pref_import_export_summary">ReVanced Einstellungen importieren / exportieren</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">Du verwendest ReVanced Patches Version &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Notiz</string>
<string name="revanced_settings_about_links_dev_body">Diese Version ist eine Vorabversion und du könntest unerwartete Probleme haben</string>
<string name="revanced_settings_about_links_header">Offizielle Links</string>
<string name="revanced_settings_about_links_donate">Spenden</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -55,15 +72,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings">ReVanced</string>
<string name="revanced_settings_about_links_body">Du verwendest ReVanced Patches Version &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Notiz</string>
<string name="revanced_settings_about_links_dev_body">Diese Version ist eine Vorabversion und du könntest unerwartete Probleme haben</string>
<string name="revanced_settings_about_links_header">Offizielle Links</string>
<string name="revanced_pref_import_export_title">Importieren / Exportieren</string>
<string name="revanced_pref_import_export_summary">ReVanced Einstellungen importieren / exportieren</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">Über</string>
<string name="revanced_settings_screen_01_ads_title">Werbung</string>
@@ -71,7 +79,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_screen_03_feed_title">Feed</string>
<string name="revanced_settings_screen_04_player_title">Player</string>
<string name="revanced_settings_screen_05_general_title">Generelles Layout</string>
<string name="revanced_settings_screen_06_shorts_title">Shorts</string>
<string name="revanced_settings_screen_07_seekbar_title">Suchleiste</string>
<string name="revanced_settings_screen_08_swipe_controls_title">Wischgesten</string>
<string name="revanced_settings_screen_11_misc_title">Sonstiges</string>
@@ -245,14 +252,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Zu versteckende Stichwörter</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">Stichwörter und zu versteckende Phrasen durch neue Zeilen\n\ngetrennte Wörter mit Großbuchstaben in der Mitte müssen mit dem Gehäuse eingegeben werden (z.B. iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">Stichwörter und zu versteckende Phrasen durch neue Zeilen\n\ngetrennte Schlüsselwörter können Kanalnamen oder beliebiger Text sein, der in den Videotiteln\n\nWörter mit Großbuchstaben in der Mitte angezeigt werden muss mit dem Gehäuse eingegeben werden (z.B. iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">Über Keyword-Filterung</string>
<string name="revanced_hide_keyword_content_about_summary">Home/Abonnement/Suchergebnisse werden gefiltert, um Inhalte auszublenden, die den Schlüsselwörtern entsprechen\n\nBeschränkungen\n • Einige Shorts könnten nicht ausgeblendet werden\n• Einige UI-Komponenten könnten nicht ausgeblendet werden\n• Suche nach einem Schlüsselwort könnte keine Ergebnisse liefern</string>
<string name="revanced_hide_keyword_content_about_summary">Home/Abonnement/Suchergebnisse werden gefiltert, um Inhalte zu verstecken, die den Schlüsselwörtern\n\nBeschränkungen\nentsprechen • Shorts können nicht mit dem Kanalnamen\nversteckt werden • Einige UI-Komponenten können nicht versteckt werden\n• Suche nach einem Stichwort kann keine Ergebnisse zeigen</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">Ganze Wörter abgleichen</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<string name="revanced_hide_keyword_content_about_whole_words_summary">Durch das Umschließen mit doppelten Anführungszeichen wird verhindert, dass teilweise Videotitel und Kanalnamen&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; wird das Video ausblenden: &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;aber nicht versteckt: &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">Ungültiges Schlüsselwort. Kann nicht verwenden: \'%s\' als Filter</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">Ungültiges Schlüsselwort. \'%1$s\' ist weniger als %2$d Zeichen</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Schlüsselwort \'%s\' wird alle Videos ausblenden</string>
<string name="revanced_hide_keyword_toast_invalid_common">Kann Schlüsselwort nicht verwenden: %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Zitate hinzufügen, um Schlüsselwort zu verwenden: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">Schlüsselwort hat widersprüchliche Erklärungen: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">Keyword ist zu kurz und erfordert Anführungszeichen: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Stichwort wird alle Videos ausblenden: %s</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">Allgemeine Werbung ausblenden</string>
@@ -376,7 +387,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.buttons.action.HideButtonsPatch">
<string name="revanced_hide_buttons_screen_title">Aktionstasten</string>
<string name="revanced_hide_buttons_screen_summary">Verstecke oder zeige Schaltflächen unter Videos</string>
<string name="revanced_hide_like_dislike_button_title">Gefällt mir</string>
<string name="revanced_hide_like_dislike_button_title">Verstecke Likes und Dislikes</string>
<string name="revanced_hide_like_dislike_button_summary_on">\"Gefällt mir\"-Tasten sind ausgeblendet</string>
<string name="revanced_hide_like_dislike_button_summary_off">\"Gefällt mir\"-Tasten werden angezeigt</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
@@ -618,15 +629,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_save_sound_button_title">Speicherton in Wiedergabelisten-Button ausblenden</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Ton in Wiedergabeliste speichern ist ausgeblendet</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Ton in Wiedergabeliste speichern wird angezeigt</string>
<string name="revanced_hide_shorts_use_this_sound_button_title">Diese Sound-Taste ausblenden</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_on">Diese Sound-Taste ist ausgeblendet</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_off">Diese Sound-Taste wird angezeigt</string>
<string name="revanced_hide_shorts_search_suggestions_title">Suchvorschläge ausblenden</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">Suchvorschläge sind ausgeblendet</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">Suchvorschläge werden angezeigt</string>
<string name="revanced_hide_shorts_like_button_title">Verstecke wie Button</string>
<string name="revanced_hide_shorts_like_button_title">Verstecke \"Gefällt mir\" Button</string>
<string name="revanced_hide_shorts_like_button_summary_on">\"Gefällt mir\" Button ist ausgeblendet</string>
<string name="revanced_hide_shorts_like_button_summary_off">\"Gefällt mir\" Button wird angezeigt</string>
<string name="revanced_hide_shorts_dislike_button_title">Verstecke nicht wie Button</string>
<string name="revanced_hide_shorts_dislike_button_summary_on">Nicht wie Button ist ausgeblendet</string>
<string name="revanced_hide_shorts_dislike_button_summary_off">Button wird angezeigt</string>
<string name="revanced_hide_shorts_dislike_button_title">Verstecke \"Gefällt mir nicht\" Button</string>
<string name="revanced_hide_shorts_dislike_button_summary_on">\"Gefällt mir nicht\" Button ist ausgeblendet</string>
<string name="revanced_hide_shorts_dislike_button_summary_off">\"Gefällt mir nicht\" Button wird angezeigt</string>
<string name="revanced_hide_shorts_comments_button_title">Kommentar-Button ausblenden</string>
<string name="revanced_hide_shorts_comments_button_summary_on">Kommentar-Button ist ausgeblendet</string>
<string name="revanced_hide_shorts_comments_button_summary_off">Kommentar-Button wird angezeigt</string>
@@ -681,11 +695,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">Spieler-Overlay-Deckkraft muss zwischen 0-100 liegen</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Nicht anzeigen</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">Dislikes vorläufig nicht verfügbar (API Timeout)</string>
<string name="revanced_ryd_failure_connection_status_code">Dislikes nicht verfügbar (Status %d)</string>
<string name="revanced_ryd_failure_client_rate_limit_requested">Nicht verfügbar (Client-API-Limit erreicht)</string>
<string name="revanced_ryd_failure_client_rate_limit_requested">Dislikes nicht verfügbar (Client-API-Limit erreicht)</string>
<string name="revanced_ryd_failure_generic">Dislikes nicht verfügbar (%s)</string>
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Video neu laden, um mit Return YouTube Dislike abzustimmen</string>
@@ -699,7 +712,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_ryd_dislike_percentage_summary_on">Dislikes als Prozentsatz angezeigt</string>
<string name="revanced_ryd_dislike_percentage_summary_off">Dislikes als Nummer angezeigt</string>
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
<string name="revanced_ryd_compact_layout_title">Kompakt wie Button</string>
<string name="revanced_ryd_compact_layout_title">Kompakter \"Gefällt mir\" Button</string>
<string name="revanced_ryd_compact_layout_summary_on">\"Gefällt mir\" Button für minimale Breite</string>
<string name="revanced_ryd_compact_layout_summary_off">\"Gefällt mir\" Button für das beste Aussehen</string>
<string name="revanced_ryd_toast_on_connection_error_title">Einen Toast anzeigen, wenn die API nicht verfügbar ist</string>
@@ -777,6 +790,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_skipcount_sum_off">Überspringungszähler ist nicht aktiviert</string>
<string name="revanced_sb_general_min_duration">Mindestdauer der Segmente</string>
<string name="revanced_sb_general_min_duration_sum">Segmente kürzer als dieser Wert (in Sekunden) werden nicht angezeigt oder übersprungen</string>
<string name="revanced_sb_general_min_duration_invalid">Ungültige Zeitdauer</string>
<string name="revanced_sb_general_uuid">Ihre private Benutzer-Id</string>
<string name="revanced_sb_general_uuid_sum">Das sollte vertraulich behandelt werden. Das ist wie ein Passwort und sollte mit niemandem geteilt werden. Wenn jemand das hat, kann er sich für dich ausgeben</string>
<string name="revanced_sb_general_uuid_invalid">Private Benutzer-Id muss mindestens 30 Zeichen lang sein</string>
@@ -877,8 +891,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Das Segiment beginnt ab</string>
<string name="revanced_sb_new_segment_time_end">Das Segiment endet bei</string>
<string name="revanced_sb_new_segment_confirm_title">Sind diese Zeiten richtig?</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">Das Segment ist von\n\n\n%1$s\nbis\n%2$s\n\n(%3$s)\n\nBereit zum Absenden?</string>
<string name="revanced_sb_new_segment_start_is_before_end">Start muss vor dem Ende sein</string>
<string name="revanced_sb_new_segment_mark_locations_first">Markieren sie zuerst zwei Punkte auf der Zeitleiste</string>
@@ -897,6 +909,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_stats_username_changed">Benutzername wurde geändert</string>
<string name="revanced_sb_stats_reputation">Dein Ruf ist &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">Du hast &lt;b&gt;%s&lt;/b&gt; Segmente erstellt</string>
<string name="revanced_sb_stats_submissions_sum">Tippen Sie hier, um Ihre Segmente anzuzeigen</string>
<string name="revanced_sb_stats_saved_zero">SponsorBlock Rangliste</string>
<string name="revanced_sb_stats_saved">Du hast den Leuten &lt;b&gt;%s&lt;/b&gt; Segmente erspart</string>
<string name="revanced_sb_stats_saved_sum_zero">Hier tippen, um die globalen Statistiken und Top-Beitragszahler zu sehen</string>
@@ -943,7 +956,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_start_page_entry_5">Shorts</string>
<!-- 'You' should be translated using the same localized wording YouTube displays for the You (library) tab. -->
<string name="revanced_start_page_entry_6">Tab</string>
<string name="revanced_start_page_entry_7">Geiked Videos</string>
<string name="revanced_start_page_entry_7">Videos, die ich mag</string>
<!-- 'History' should be translated using the same localized wording YouTube displays for the 'history' section in the 'You' tab. -->
<string name="revanced_start_page_entry_8">Verlauf</string>
<string name="revanced_start_page_entry_9">Beliebt</string>
@@ -978,7 +991,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_hide_rewind_forward_title">Vorwärts- und Rückwärts-Buttons ausblenden</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Vorwärts skippen und zurück sind ausgeblendet</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Vorwärts und zurück springen werden angezeigt</string>
<string name="revanced_miniplayer_opacity_title">Overlay opacity</string>
<string name="revanced_miniplayer_opacity_title">Deckkraft der Überlagerung</string>
<string name="revanced_miniplayer_opacity_summary">Deckkraft Wert zwischen 0-100, wobei 0 transparent ist</string>
<string name="revanced_miniplayer_opacity_invalid_toast">Miniplayer-Overlay-Deckkraft muss zwischen 0-100 liegen</string>
</patch>
@@ -1042,7 +1055,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="misc.dns.CheckWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Warnung</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Ihr Beobachtungsverlauf wird nicht gespeichert.&lt;br&gt;&lt;br&gt;Dies wird höchstwahrscheinlich durch einen DNS-Werbeblocker oder einen Netzwerkproxy verursacht.&lt;br&gt;&lt;br&gt;Um dies zu beheben, ist die Whitelist &lt;b&gt;s.youtube.com&lt;/b&gt; oder schalten Sie alle DNS-Blocker und Proxies aus.</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Ihr Verlauf wird nicht gespeichert.&lt;br&gt;&lt;br&gt;Dies wird höchstwahrscheinlich durch einen DNS-Werbeblocker oder einen Netzwerkproxy verursacht.&lt;br&gt;&lt;br&gt;Um dies zu beheben, setze &lt;b&gt;s.youtube.com&lt;/b&gt; auf die Whitelist oder schalten Sie alle DNS-Blocker und Proxies aus.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Nicht wieder anzeigen</string>
</patch>
<patch id="misc.autorepeat.AutoRepeatPatch">
@@ -1119,35 +1132,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">Slide zum Suchen ist aktiviert</string>
<string name="revanced_slide_to_seek_summary_off">Slide zum Suchen ist nicht aktiviert</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_title">Spoof-Client</string>
<string name="revanced_spoof_client_screen_summary">Spoof des Clients, um Wiedergabeprobleme zu verhindern</string>
<string name="revanced_spoof_client_title">Spoof-Client</string>
<string name="revanced_spoof_client_summary_on">Client ist getäuscht</string>
<string name="revanced_spoof_client_summary_off">Client ist nicht gefälscht\n\nVideo-Wiedergabe funktioniert möglicherweise nicht</string>
<string name="revanced_spoof_client_user_dialog_message">Das Deaktivieren dieser Einstellung kann zu Videowiedergabeproblemen führen.</string>
<string name="revanced_spoof_client_use_ios_title">Spoof-Client zu iOS</string>
<string name="revanced_spoof_client_use_ios_summary_on">Der Client ist derzeit zu iOS\n\nSeiteneffekten gefälscht:\n• HDR-Video ist möglicherweise nicht verfügbar\n• Verlauf funktioniert nicht mit einem Markenkonto</string>
<string name="revanced_spoof_client_use_ios_summary_off">Der Client ist derzeit auf Android VR gespoofed. Nebeneffekte können sein:\n• Kein HDR Video\n• Kindervideos spielen nicht\n• Pausierte Videos könnten zufällig wieder aufgenommen werden\n• Niedrige Qualität der Shorts-Suchleisten-Thumbnails\n• Download-Button ist ausgeblendet\n• Endbildschirm-Karten werden versteckt</string>
<string name="revanced_spoof_client_storyboard_timeout">Spoof-Thumbnails nicht verfügbar (API-Zeitüberschreitung)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Spoof-Client-Thumbnails vorübergehend nicht verfügbar: %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<string name="revanced_spoof_signature_verification_screen_title">Spoof-App-Signatur</string>
<string name="revanced_spoof_signature_verification_screen_summary">Spoof der App-Signatur, um Wiedergabeprobleme zu vermeiden</string>
<string name="revanced_spoof_signature_verification_enabled_title">Spoof-App-Signatur</string>
<string name="revanced_spoof_signature_verification_enabled_summary_on">App-Signatur gefälscht\n\nNebeneffekte beinhalten:\n• Erweiterte Bitrate ist nicht verfügbar\n• Videos können nicht\nheruntergeladen werden • Keine Suchleisten-Vorschaubilder für bezahlte Videos</string>
<string name="revanced_spoof_signature_verification_enabled_summary_off">App-Signatur nicht gefälscht\n\nVideowiedergabe funktioniert möglicherweise nicht</string>
<string name="revanced_spoof_signature_verification_enabled_user_dialog_message">Das Deaktivieren dieser Einstellung führt zu Videowiedergabeproblemen.</string>
<string name="revanced_spoof_signature_in_feed_enabled_title">Spoof-App-Signatur im Feed</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_on">App-Signatur gefälscht\n\nNebeneffekte beinhalten:\n• Feed-Videos fehlen Untertitel\n• Automatisch abgespielte Feed-Videos werden in Ihrem Überwachungsverlauf angezeigt</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_off">App-Signatur für Feed-Videos nicht gefälscht\n\nFeed Videos werden weniger als 1 Minute vor Wiedergabeproblemen abgespielt</string>
<string name="revanced_spoof_storyboard_title">Spoof-Storyboard</string>
<string name="revanced_spoof_storyboard_summary_on">Storyboard gefälscht</string>
<string name="revanced_spoof_storyboard_summary_off">Storyboard nicht gefälscht\n\nNebeneffekte beinhalten:\n• Kein Umgebungsmodus\n• Suchleisten-Thumbnails werden ausgeblendet</string>
<string name="revanced_spoof_storyboard_timeout">Spoof-Storyboard vorübergehend nicht verfügbar (API Timeout)</string>
<string name="revanced_spoof_storyboard_io_exception">Spoof Storyboard vorübergehend nicht verfügbar: %s</string>
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">Spoof-Video-Streams</string>
<string name="revanced_spoof_video_streams_screen_summary">Spoof der Client-Videostreams um Wiedergabeprobleme zu verhindern</string>
<string name="revanced_spoof_video_streams_title">Spoof-Video-Streams</string>
<string name="revanced_spoof_video_streams_summary_on">Video-Streams sind gefälscht</string>
<string name="revanced_spoof_video_streams_summary_off">Video-Streams sind nicht gefälscht\n\nVideo-Wiedergabe funktioniert möglicherweise nicht</string>
<string name="revanced_spoof_video_streams_user_dialog_message">Das Deaktivieren dieser Einstellung kann zu Videowiedergabeproblemen führen.</string>
<string name="revanced_spoof_video_streams_client_type_title">Standard-Client</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">AVC erzwingen (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video Codec ist AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video Codec ist VP9 oder AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Ihr Gerät hat keine VP9-Hardware-Dekodierung, und diese Einstellung ist immer aktiviert, wenn Client-Spoofing aktiviert ist</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Das Aktivieren kann die Akkulaufzeit verbessern und die Wiedergabe-Stutting beheben.\n\nAVC hat eine maximale Auflösung von 1080p, und die Videowiedergabe wird mehr Internet-Daten als VP9 oder AV1 verwenden.</string>
<string name="revanced_spoof_video_streams_about_ios_title">iOS Spoofing Nebeneffekte</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Filme oder bezahlte Videos dürfen nicht\nabspielen • Livestreams beginnen von Anfang an</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR Spoofing Nebeneffekte</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Audiospurmenü fehlt</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,6 +32,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
<string name="revanced_check_environment_failed_title">Αποτυχία ελέγχων</string>
<string name="revanced_check_environment_dialog_open_official_source_button">Άνοιγμα επίσημης ιστοσελίδας</string>
<string name="revanced_check_environment_dialog_ignore_button">Παράλειψη</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;Αυτή η εφαρμογή δεν φαίνεται να έχει τροποποιηθεί από εσάς.&lt;/h5&gt;&lt;br&gt;Αυτή η εφαρμογή μπορεί να μην λειτουργεί σωστά, &lt;b&gt;θα μπορούσε να είναι επιβλαβής ή ακόμα και επικίνδυνη για χρήση&lt;/b&gt;.&lt;br&gt;&lt;br&gt;Αυτοί οι έλεγχοι υποδηλώνουν ότι αυτή η εφαρμογή έχει τροποποιηθεί στο παρελθόν ή λήφθηκε από κάποιον άλλο:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt;Συνιστάται έντονα να απεγκαταστήσετε την εφαρμογή &lt;br&gt;και να την τροποποιήσετε μόνοι σας&lt;br&gt; για να διασφαλίσετε ότι χρησιμοποιείτε μια επικυρωμένη και ασφαλή εφαρμογή.&lt;p&gt;&lt;br&gt;Εάν αγνοηθεί, αυτή η προειδοποίηση θα εμφανιστεί μόνο δύο φορές.</string>
<string name="revanced_check_environment_not_same_patching_device">Τροποποιήθηκε σε διαφορετική συσκευή</string>
<string name="revanced_check_environment_manager_not_expected_installer">Δεν έχει εγκατασταθεί μέσω του ReVanced Manager</string>
<string name="revanced_check_environment_not_near_patch_time">Τροποποιήθηκε πάνω από 10 λεπτά πριν</string>
<string name="revanced_check_environment_not_near_patch_time_days">Τροποποιήθηκε πριν %s μέρες</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">Ημερομηνία κατασκευής του APK είναι κατεστραμμένη</string>
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_confirm_user_dialog_title">Θέλετε να συνεχίσετε;</string>
<string name="revanced_settings_reset">Επαναφορά</string>
@@ -42,6 +53,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_import_reset">Επαναφέρθηκαν οι προεπιλεγμένες ρυθμίσεις ReVanced</string>
<string name="revanced_settings_import_success">Έγινε εισαγωγή %d ρυθμίσεων</string>
<string name="revanced_settings_import_failure_parse">Η εισαγωγή απέτυχε: %s</string>
<string name="revanced_pref_import_export_title">Εισαγωγή / Εξαγωγή</string>
<string name="revanced_pref_import_export_summary">Εισαγωγή / Εξαγωγή ρυθμίσεων ReVanced</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">Χρησιμοποιείτε τις τροποποιήσεις ReVanced έκδοσης &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Σημείωση</string>
<string name="revanced_settings_about_links_dev_body">Αυτή η έκδοση είναι σε πρώιμο στάδιο, επομένως πιθανότατα να αντιμετωπίσετε απρόοπτα προβλήματα</string>
<string name="revanced_settings_about_links_header">Επίσημοι σύνδεσμοι</string>
<string name="revanced_settings_about_links_donate">Δωρεά</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -54,14 +73,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings_about_links_body">Χρησιμοποιείτε τις τροποποιήσεις ReVanced έκδοσης &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Σημείωση</string>
<string name="revanced_settings_about_links_dev_body">Αυτή η έκδοση είναι σε πρώιμο στάδιο, επομένως πιθανότατα να αντιμετωπίσετε απρόοπτα προβλήματα</string>
<string name="revanced_settings_about_links_header">Επίσημοι σύνδεσμοι</string>
<string name="revanced_pref_import_export_title">Εισαγωγή / Εξαγωγή</string>
<string name="revanced_pref_import_export_summary">Εισαγωγή / Εξαγωγή ρυθμίσεων ReVanced</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">Σχετικά με</string>
<string name="revanced_settings_screen_01_ads_title">Διαφημίσεις</string>
@@ -69,7 +80,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_screen_03_feed_title">Ροή</string>
<string name="revanced_settings_screen_04_player_title">Οθόνη αναπαραγωγής</string>
<string name="revanced_settings_screen_05_general_title">Γενική διάταξη</string>
<string name="revanced_settings_screen_06_shorts_title">Shorts</string>
<string name="revanced_settings_screen_07_seekbar_title">Γραμμή προόδου βίντεο</string>
<string name="revanced_settings_screen_08_swipe_controls_title">Έλεγχος με κατακόρυφη σάρωση οθόνης</string>
<string name="revanced_settings_screen_11_misc_title">Διάφορα</string>
@@ -243,14 +253,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Λέξεις-κλειδιά για απόκρυψη</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">Λέξεις-κλειδιά και φράσεις προς απόκρυψη, διαχωρισμένες η μία κάτω από την άλλη\n\nΔώστε προσοχή στα πεζά και κεφάλαια γράμματα διότι ισχύει ευαισθησία πεζότητας (π.χ.: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">Λέξεις-κλειδιά και φράσεις προς απόκρυψη, διαχωρισμένες η μία κάτω από την άλλη\n\nΛέξεις-κλειδιά μπορεί να είναι ονόματα καναλιών ή οποιοδήποτε κείμενο εμφανίζεται σε τίτλους βίντεο\n\nΔώστε προσοχή στα πεζά και κεφάλαια γράμματα διότι ισχύει ευαισθησία πεζότητας (π.χ.: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">Σχετικά με το φιλτράρισμα λέξεων-κλειδιών</string>
<string name="revanced_hide_keyword_content_about_summary">Οι καρτέλες «Αρχική», «Εγγραφές» και τα αποτελέσματα αναζήτησης φιλτράρονται για απόκρυψη περιεχομένου που ταιριάζει με τις λέξεις-κλειδιά\n\nΠεριορισμοί\n• Κάποια Shorts ενδέχεται να μην κρύβονται\n• Κάποια στοιχεία UI ενδέχεται να μην κρύβονται\n• Η αναζήτηση για μια λέξη-κλειδί ενδέχεται να μην εμφανίζει κανένα αποτέλεσμα</string>
<string name="revanced_hide_keyword_content_about_summary">Οι καρτέλες «Αρχική», «Εγγραφές» και τα αποτελέσματα αναζήτησης φιλτράρονται για απόκρυψη περιεχομένου που ταιριάζει με τις λέξεις-κλειδιά\n\nΠεριορισμοί\n• Τα Shorts δε γίνεται να κρυφτούν με βάση το όνομα καναλιού\n• Κάποια στοιχεία UI ενδέχεται να μην κρύβονται\n• Η αναζήτηση για μια λέξη-κλειδί ενδέχεται να μην εμφανίζει κανένα αποτέλεσμα</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">Ταίριασμα ολόκληρων λέξεων</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<string name="revanced_hide_keyword_content_about_whole_words_summary">Περιβάλλοντας μια λέξη-κλειδί / φράση με διπλά εισαγωγικά θα αποτρέψει μερικές αντιστοιχίες των τίτλων βίντεο και των ονομάτων καναλιών&lt;br&gt;&lt;br&gt;Για παράδειγμα,&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; θα κρύψει το βίντεο: &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;αλλά δεν θα κρύψει: &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">Μη έγκυρη λέξη-κλειδί. Αδυναμία χρήσης: \'%s\' ως φίλτρο</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">Μη έγκυρη λέξη-κλειδί. Το \'%1$s\' είναι μικρότερο από %2$d χαρακτήρες</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Η λέξη «%s» θα κρύψει όλα τα βίντεο</string>
<string name="revanced_hide_keyword_toast_invalid_common">Αδυναμία χρήσης λέξης-κλειδί: %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Προσθήκη εισαγωγικών για χρήση λέξης-κλειδί: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">Λέξη-κλειδί έχει αντικρουόμενες δηλώσεις: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">Η λέξη-κλειδί είναι πολύ σύντομη και απαιτεί εισαγωγικά: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Θα κρυφτούν όλα τα βίντεο με την λέξη-κλειδί: %s</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">Γενικές διαφημίσεις</string>
@@ -616,6 +630,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_save_sound_button_title">Κουμπί αποθήκευσης ήχου σε λίστα αναπαραγωγής</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_shorts_use_this_sound_button_title">Κουμπί «Χρήση αυτού του ήχου»</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_shorts_search_suggestions_title">Προτάσεις αναζήτησης</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">Κρυμμένες</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">Εμφανίζονται</string>
@@ -679,7 +696,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">Η αδιαφάνεια φόντου οθόνης αναπαραγωγής πρέπει να είναι μεταξύ 0-100</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Κρυμμένα</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">Dislike προσωρινά μη διαθέσιμα (καθυστέρηση API)</string>
<string name="revanced_ryd_failure_connection_status_code">Δεδομένα dislike μη διαθέσιμα (κατάσταση %d)</string>
@@ -775,6 +791,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_skipcount_sum_off">Ο μετρητής παραλείψεων δεν είναι ενεργός</string>
<string name="revanced_sb_general_min_duration">Ελάχιστη διάρκεια τμήματος</string>
<string name="revanced_sb_general_min_duration_sum">Τμήματα μικρότερα από την καθορισμένη τιμή (σε δευτερόλεπτα) δεν θα εμφανίζονται ούτε θα παραλείπονται</string>
<string name="revanced_sb_general_min_duration_invalid">Μη έγκυρη διάρκεια χρόνου</string>
<string name="revanced_sb_general_uuid">Το ιδιωτικό σας αναγνωριστικό χρήστη</string>
<string name="revanced_sb_general_uuid_sum">Αυτό πρέπει να μείνει μυστικό. Είναι σαν έναν κωδικό που δεν πρέπει να μοιραστείτε με κανέναν. Εάν κάποιος αποκτήσει αυτόν τον κωδικό, μπορεί να σας υποδυθεί</string>
<string name="revanced_sb_general_uuid_invalid">Το ιδιωτικό αναγνωριστικό χρήστη πρέπει να είναι τουλάχιστον 30 χαρακτήρες</string>
@@ -875,8 +892,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Χρόνος έναρξης του τμήματος</string>
<string name="revanced_sb_new_segment_time_end">Χρόνος λήξης του τμήματος</string>
<string name="revanced_sb_new_segment_confirm_title">Είναι σωστοί οι χρόνοι;</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">Το τμήμα είναι από\n\n%1$s\nσε\n%2$s\n\n(%3$s)\n\nΈτοιμο για υποβολή;</string>
<string name="revanced_sb_new_segment_start_is_before_end">Η αρχή πρέπει να είναι πριν από το τέλος</string>
<string name="revanced_sb_new_segment_mark_locations_first">Σημειώστε δύο σημεία στην γραμμή προόδου πρώτα</string>
@@ -895,6 +910,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_stats_username_changed">Το όνομα χρήστη άλλαξε επιτυχώς</string>
<string name="revanced_sb_stats_reputation">Η φήμη σας είναι &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">Δημιουργήσατε &lt;b&gt;%s&lt;/b&gt; τμήματα</string>
<string name="revanced_sb_stats_submissions_sum">Πατήστε για να δείτε τα τμήματα σας</string>
<string name="revanced_sb_stats_saved_zero">Πίνακας κατάταξης SponsorBlock</string>
<string name="revanced_sb_stats_saved">Έχετε σώσει τους συνανθρώπους σας από &lt;b&gt;%s&lt;/b&gt; τμήματα</string>
<string name="revanced_sb_stats_saved_sum_zero">Πατήστε για να δείτε τα παγκόσμια στατιστικά και τους κορυφαίους συνεισφέροντες</string>
@@ -1117,22 +1133,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">Η αναζήτηση στη γραμμή προόδου με χειρονομία οριζόντιας σάρωσης είναι ενεργοποιημένη</string>
<string name="revanced_slide_to_seek_summary_off">Η αναζήτηση στη γραμμή προόδου με χειρονομία σάρωσης είναι απενεργοποιημένη</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_title">Παραποίηση προγράμματος πελάτη</string>
<string name="revanced_spoof_client_screen_summary">Παραποίηση του προγράμματος πελάτη για την αποφυγή προβλημάτων αναπαραγωγής</string>
<string name="revanced_spoof_client_title">Παραποίηση προγράμματος πελάτη</string>
<string name="revanced_spoof_client_summary_on">Το πρόγραμμα πελάτη παραποιείται</string>
<string name="revanced_spoof_client_summary_off">Το πρόγραμμα πελάτη δεν παραποιείται\n\nΗ αναπαραγωγή βίντεο ενδέχεται να μη λειτουργεί</string>
<string name="revanced_spoof_client_user_dialog_message">Η απενεργοποίηση αυτής της ρύθμισης ενδέχεται να προκαλέσει προβλήματα αναπαραγωγής βίντεο.</string>
<string name="revanced_spoof_client_use_ios_title">Παραποίηση σε iOS</string>
<string name="revanced_spoof_client_use_ios_summary_on">Ο πελάτης αυτή τη στιγμή παραποιείται ως iOS\n\nΟι παρενέργειες περιλαμβάνουν:\n• Δεν υπάρχει η ποιότητα HDR στα βίντεο\n• Το ιστορικό παρακολούθησης δε λειτουργεί σε ολοκαίνουριους λογαριασμούς</string>
<string name="revanced_spoof_client_use_ios_summary_off">Ο πελάτης αυτή τη στιγμή παραποιείται ως Android VR. Οι παρενέργειες περιλαμβάνουν:\n• Δεν υπάρχει η ποιότητα HDR στα βίντεο\n• Δεν λειτουργεί η αναπαραγωγή στα βίντεο για παιδιά\n• Βίντεο που έχετε θέσει σε παύση μπορεί να συνεχίσουν να παίζουν τυχαία\n• Χαμηλή ποιότητα μικρογραφιών γραμμής προόδου στα Shorts\n• Το κουμπί λήψης είναι πάντα κρυμμένο\n• Οι κάρτες τελικής οθόνης είναι πάντα κρυμμένες</string>
<string name="revanced_spoof_client_storyboard_timeout">Μικρογραφίες προεπισκόπησης μη διαθέσιμες (καθυστέρηση API)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Μικρογραφίες προεπισκόπησης προσωρινά μη διαθέσιμες: %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<string name="revanced_spoof_signature_in_feed_enabled_summary_off">Η εγκυρότητα της εφαρμογής δεν παραποιείται για βίντεο στη ροή\n\nΤα βίντεο στη ροή θα αναπαράγονται για λιγότερο από 1 λεπτό πριν αντιμετωπίσουν προβλήματα αναπαραγωγής</string>
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">Παραποίηση ροών βίντεο</string>
<string name="revanced_spoof_video_streams_screen_summary">Παραποίηση ροών βίντεο του προγράμματος πελάτη για την αποφυγή προβλημάτων αναπαραγωγής</string>
<string name="revanced_spoof_video_streams_title">Παραποίηση ροών βίντεο</string>
<string name="revanced_spoof_video_streams_summary_on">Οι ροές βίντεο παραποιούνται</string>
<string name="revanced_spoof_video_streams_summary_off">Οι ροές βίντεο δεν παραποιούνται\n\nΗ αναπαραγωγή βίντεο ενδέχεται να μην λειτουργεί</string>
<string name="revanced_spoof_video_streams_user_dialog_message">Η απενεργοποίηση αυτής της ρύθμισης ενδέχεται να προκαλέσει προβλήματα αναπαραγωγής βίντεο.</string>
<string name="revanced_spoof_video_streams_client_type_title">Προεπιλεγμένο πρόγραμμα πελάτη</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Εξαναγκασμός AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Ο κωδικοποιητής βίντεο είναι ο AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Ο κωδικοποιητής βίντεο είναι ο VP9 ή ο AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Η συσκευή σας δεν διαθέτει αποκωδικοποίηση υλικού VP9, και αυτή η ρύθμιση είναι πάντα ενεργή όταν είναι ενεργοποιημένη η παραποίηση προγράμματος πελάτη</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Ενεργοποιώντας αυτόν τον κωδικοποιητή ίσως να βελτιώσει κατανάλωση ενέργειας και ίσως διορθώσει κολλήματα αναπαραγωγής.\n\nΟ AVC έχει μέγιστη ανάλυση 1080p, και καταναλώνει περισσότερα δεδομένα internet από τον VP9 ή τον AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">Παρενέργειες παραποίησης σε iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">Οι ταινίες ή τα επί πληρωμή βίντεο ενδέχεται να μην αναπαράγονται\n• Οι ζωντανές μεταδόσεις ξεκινούν από την αρχή κατά την αναπαραγωγή</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Παρενέργειες παραποίησης σε Android VR</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">Το μενού «Κομμάτι ήχου» λείπει</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

File diff suppressed because it is too large Load Diff

View File

@@ -32,6 +32,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
<string name="revanced_check_environment_failed_title">Comprobaciones fallidas</string>
<string name="revanced_check_environment_dialog_open_official_source_button">Abrir sitio web oficial</string>
<string name="revanced_check_environment_dialog_ignore_button">Ignorar</string>
<string name="revanced_check_environment_not_same_patching_device">Parcheado en un dispositivo diferente</string>
<string name="revanced_check_environment_manager_not_expected_installer">No instalado por ReVanced Manager</string>
<string name="revanced_check_environment_not_near_patch_time">Parcheado hace más de 10 minutos</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">La fecha de compilación de APK está dañada</string>
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_confirm_user_dialog_title">¿Desea continuar?</string>
<string name="revanced_settings_reset">Restablecer</string>
@@ -39,9 +48,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_restart">Reiniciar</string>
<string name="revanced_settings_import">Importar</string>
<string name="revanced_settings_import_copy">Copiar</string>
<string name="revanced_settings_import_reset">Configuración revanzada restablecida por defecto</string>
<string name="revanced_settings_import_reset">Configuración ReVanced restablecida por defecto</string>
<string name="revanced_settings_import_success">Configuración importada de %d</string>
<string name="revanced_settings_import_failure_parse">Error de importación: %s</string>
<string name="revanced_pref_import_export_title">Importar / Exportar</string>
<string name="revanced_pref_import_export_summary">Importar / Exportar ajustes de ReVanced</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">Estás usando la versión de ReVanced Patches &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Nota</string>
<string name="revanced_settings_about_links_dev_body">Esta versión es un pre-lanzamiento y puede que experimentes problemas inesperados</string>
<string name="revanced_settings_about_links_header">Enlaces oficiales</string>
<string name="revanced_settings_about_links_donate">Donar</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -54,15 +71,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings">ReVanced</string>
<string name="revanced_settings_about_links_body">Estás usando la versión de ReVanced Patches &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Nota</string>
<string name="revanced_settings_about_links_dev_body">Esta versión es un pre-lanzamiento y puede que experimentes problemas inesperados</string>
<string name="revanced_settings_about_links_header">Enlaces oficiales</string>
<string name="revanced_pref_import_export_title">Importar / Exportar</string>
<string name="revanced_pref_import_export_summary">Importar / Exportar ajustes de ReVanced</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">Acerca de</string>
<string name="revanced_settings_screen_01_ads_title">Anuncios</string>
@@ -90,7 +98,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_debug_toast_on_error_title">Mostrar brindis en error ReVanced</string>
<string name="revanced_debug_toast_on_error_summary_on">Toast mostrado si ocurre un error</string>
<string name="revanced_debug_toast_on_error_summary_off">Toast no se muestra si ocurre un error</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">Desactivar los errores toasts oculta todas las notificaciones de error ReVanced\n\nNo se le notificará de ningún evento inesperado.</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">Desactivar los brindis de errores oculta todas las notificaciones de error ReVanced\n\nNo se le notificará de ningún evento inesperado.</string>
</patch>
<patch id="layout.hide.general.HideLayoutComponentsPatch">
<string name="revanced_disable_like_subscribe_glow_title">Desactivar el brillo del botón de like / suscripción</string>
@@ -102,8 +110,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_channel_watermark_title">Ocultar marca de agua del canal</string>
<string name="revanced_hide_channel_watermark_summary_on">Marca de agua oculta</string>
<string name="revanced_hide_channel_watermark_summary_off">Marca de agua mostrada</string>
<string name="revanced_hide_horizontal_shelves_title">Ocultar shelves horizontales</string>
<string name="revanced_hide_horizontal_shelves_summary_on">Los estantes están ocultos como:\n• Romper noticias\n• Continuar viendo\n• Explorar más canales\n• Comprar\n• Verlo de nuevo</string>
<string name="revanced_hide_horizontal_shelves_title">Ocultar estantes horizontales</string>
<string name="revanced_hide_horizontal_shelves_summary_on">Los estantes están ocultos como:\n• Noticias de último momento\n• Continuar viendo\n• Explorar más canales\n• Comprar\n• Verlo de nuevo</string>
<string name="revanced_hide_horizontal_shelves_summary_off">Se muestran las estanterías</string>
<!-- 'Join' should be translated using the same localized wording YouTube displays.
This appears in the video player for certain videos. -->
@@ -111,7 +119,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_join_membership_button_summary_on">Botón oculto</string>
<string name="revanced_hide_join_membership_button_summary_off">Se muestra el botón</string>
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
<string name="revanced_hide_for_you_shelf_title">Ocultar shelf \'Para ti\' en la página del canal</string>
<string name="revanced_hide_for_you_shelf_title">Ocultar estantería \'Para ti\' en la página del canal</string>
<string name="revanced_hide_for_you_shelf_summary_on">Estante oculto</string>
<string name="revanced_hide_for_you_shelf_summary_off">Estante mostrado</string>
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
@@ -120,7 +128,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_notify_me_button_summary_on">Botón oculto</string>
<string name="revanced_hide_notify_me_button_summary_off">Se muestra el botón</string>
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
<string name="revanced_hide_search_result_recommendations_title">Ocultar recomendaciones \"Personas también observadas\"</string>
<string name="revanced_hide_search_result_recommendations_title">Ocultar recomendaciones \"Las personas también vieron\"</string>
<string name="revanced_hide_search_result_recommendations_summary_on">Recomendaciones ocultas</string>
<string name="revanced_hide_search_result_recommendations_summary_off">Se muestran las recomendaciones</string>
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
@@ -137,7 +145,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_channel_guidelines_title">Ocultar pautas de canal</string>
<string name="revanced_hide_channel_guidelines_summary_on">Las pautas del canal están ocultas</string>
<string name="revanced_hide_channel_guidelines_summary_off">Se muestran las pautas del canal</string>
<string name="revanced_hide_expandable_chip_title">Ocultar chip expandible en videos</string>
<string name="revanced_hide_expandable_chip_title">Ocultar ficha expandible en videos</string>
<string name="revanced_hide_expandable_chip_summary_on">Las fichas expandibles están ocultas</string>
<string name="revanced_hide_expandable_chip_summary_off">Se muestran fichas expandibles</string>
<string name="revanced_hide_video_quality_menu_footer_title">Ocultar pie de página del menú de calidad de vídeo</string>
@@ -147,23 +155,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_community_posts_summary_on">Los mensajes de la comunidad están ocultos</string>
<string name="revanced_hide_community_posts_summary_off">Se muestran las publicaciones de la comunidad</string>
<string name="revanced_hide_compact_banner_title">Ocultar banners compactos</string>
<string name="revanced_hide_compact_banner_summary_on">Los banners de pacto están ocultos</string>
<string name="revanced_hide_compact_banner_summary_on">Los banners compactos están ocultos</string>
<string name="revanced_hide_compact_banner_summary_off">Se muestran los banners compactos</string>
<string name="revanced_hide_movies_section_title">Ocultar sección de películas</string>
<string name="revanced_hide_movies_section_summary_on">La sección de películas está oculta</string>
<string name="revanced_hide_movies_section_summary_off">Se muestra la sección de películas</string>
<string name="revanced_hide_feed_survey_title">Ocultar encuestas</string>
<string name="revanced_hide_feed_survey_summary_on">Las encuestas de la fuente están ocultas</string>
<string name="revanced_hide_feed_survey_summary_off">Se muestran encuestas de la fuente</string>
<string name="revanced_hide_community_guidelines_title">Ocultar directrices comunitarias</string>
<string name="revanced_hide_community_guidelines_summary_on">Las directrices comunitarias están ocultas</string>
<string name="revanced_hide_community_guidelines_summary_off">Se muestran las directrices comunitarias</string>
<string name="revanced_hide_subscribers_community_guidelines_title">Ocultar directrices de la comunidad de suscriptores</string>
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Las directrices comunitarias de los suscriptores están ocultas</string>
<string name="revanced_hide_feed_survey_summary_on">Las encuestas en el Inicio están ocultas</string>
<string name="revanced_hide_feed_survey_summary_off">Se muestran encuestas en ele Inicio</string>
<string name="revanced_hide_community_guidelines_title">Ocultar pautas comunitarias</string>
<string name="revanced_hide_community_guidelines_summary_on">Las pautas comunitarias están ocultas</string>
<string name="revanced_hide_community_guidelines_summary_off">Se muestran las pautas comunitarias</string>
<string name="revanced_hide_subscribers_community_guidelines_title">Ocultar pautas de la comunidad de suscriptores</string>
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Las pautas comunitarias de los suscriptores están ocultas</string>
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Se muestran las pautas de la comunidad de suscriptores</string>
<string name="revanced_hide_channel_member_shelf_title">Ocultar shelf del miembro del canal</string>
<string name="revanced_hide_channel_member_shelf_summary_on">La shelf del miembro del canal está oculta</string>
<string name="revanced_hide_channel_member_shelf_summary_off">Se muestra la shelf del miembro del canal</string>
<string name="revanced_hide_channel_member_shelf_title">Ocultar estante del miembro del canal</string>
<string name="revanced_hide_channel_member_shelf_summary_on">El estante del miembro del canal está oculta</string>
<string name="revanced_hide_channel_member_shelf_summary_off">Se muestra el estante del miembro del canal</string>
<string name="revanced_hide_emergency_box_title">Ocultar cajas de emergencia</string>
<string name="revanced_hide_emergency_box_summary_on">Las cajas de emergencia están ocultas</string>
<string name="revanced_hide_emergency_box_summary_off">Se muestran cajas de emergencia</string>
@@ -186,8 +194,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_related_videos_summary_on">Vídeos relacionados están ocultos</string>
<string name="revanced_hide_related_videos_summary_off">Vídeos relacionados se muestran</string>
<string name="revanced_hide_image_shelf_title">Ocultar la imagen en los resultados de búsqueda</string>
<string name="revanced_hide_image_shelf_summary_on">El shelf de la imagen está oculto</string>
<string name="revanced_hide_image_shelf_summary_off">Pantalla de imagen mostrada</string>
<string name="revanced_hide_image_shelf_summary_on">El estante de imágenes está oculto</string>
<string name="revanced_hide_image_shelf_summary_off">El estante de imágenes se muestra</string>
<string name="revanced_hide_latest_posts_ads_title">Ocultar últimos mensajes</string>
<string name="revanced_hide_latest_posts_ads_summary_on">Los últimos mensajes están ocultos</string>
<string name="revanced_hide_latest_posts_ads_summary_off">Se muestran los últimos mensajes</string>
@@ -197,9 +205,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_artist_cards_title">Ocultar tarjetas de artistas</string>
<string name="revanced_hide_artist_cards_summary_on">Las tarjetas de artistas están ocultas</string>
<string name="revanced_hide_artist_cards_summary_off">Se muestran las tarjetas del artista</string>
<string name="revanced_hide_chips_shelf_title">Ocultar shelf de fichas</string>
<string name="revanced_hide_chips_shelf_summary_on">La shelf de chips está oculta</string>
<string name="revanced_hide_chips_shelf_summary_off">Se muestra la shelf de chips</string>
<string name="revanced_hide_chips_shelf_title">Ocultar estante de fichas</string>
<string name="revanced_hide_chips_shelf_summary_on">El estante de fichas está oculto</string>
<string name="revanced_hide_chips_shelf_summary_off">Se muestra el estante de fichas</string>
<string name="revanced_hide_attributes_section_title">Ocultar sección de atributos</string>
<string name="revanced_hide_attributes_section_summary_on">\'Lugares destacados\', Las secciones de juegos y música están ocultas</string>
<string name="revanced_hide_attributes_section_summary_off">\'Lugares destacados\', Se muestran las secciones de juegos y música</string>
@@ -243,14 +251,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Palabras clave a ocultar</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">Palabras clave y frases para ocultar, separadas por nuevas líneas\n\nLas palabras con letras mayúsculas en el centro deben ser ingresadas con la caja (por ejemplo: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">Palabras clave y frases para ocultar, separadas por nuevas líneas\n\nLas palabras clave pueden ser nombres de canales o cualquier texto que se muestre en los títulos de vídeo\n\nLas palabras con letras mayúsculas en el medio deben ser ingresadas con la mayúscula (por ejemplo: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">Acerca del filtrado de palabras clave</string>
<string name="revanced_hide_keyword_content_about_summary">Los resultados de inicio/suscripción/búsqueda se filtran para ocultar contenido que coincide con las frases de palabras clave\n\nLimitaciones\n• Algunos cortos pueden no estar ocultos\n• Algunos componentes de la interfaz pueden no estar ocultos\n• Buscar una palabra clave no puede mostrar resultados</string>
<string name="revanced_hide_keyword_content_about_summary">Los resultados de inicio/suscripción/búsqueda se filtran para ocultar el contenido que coincide con las frases de palabras clave\n\nLimitaciones\n• Los cortos no se pueden ocultar con el nombre del canal\n• Algunos componentes de la interfaz pueden no estar ocultos\n• Buscar una palabra clave no puede mostrar resultados</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">Coincidir palabras completas</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">Palabra clave inválida. No se puede usar: \'%s\' como filtro</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">Palabra clave no válida. \'%1$s\' es menor de %2$d caracteres</string>
<string name="revanced_hide_keyword_toast_invalid_broad">La palabra clave \'%s\' oculta todos los vídeos</string>
<string name="revanced_hide_keyword_toast_invalid_common">No se puede usar la palabra clave: %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Añadir comillas para usar palabra clave: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">La palabra clave tiene declaraciones en conflicto: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">La palabra clave es demasiado corta y requiere comillas: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Palabra clave ocultará todos los vídeos: %s</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">Ocultar anuncios generales</string>
@@ -514,9 +525,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_comments_section_title">Ocultar sección de comentarios</string>
<string name="revanced_hide_comments_section_summary_on">La sección de comentarios está oculta</string>
<string name="revanced_hide_comments_section_summary_off">Sección de comentarios mostrada</string>
<string name="revanced_hide_comments_create_a_short_button_title">Ocultar botón \'Crear un corto\'</string>
<string name="revanced_hide_comments_create_a_short_button_summary_on">El botón \'Crear un corto\' está oculto</string>
<string name="revanced_hide_comments_create_a_short_button_summary_off">Se muestra el botón \'Crear un corto\'</string>
<string name="revanced_hide_comments_create_a_short_button_title">Ocultar botón \'Crear un Short\'</string>
<string name="revanced_hide_comments_create_a_short_button_summary_on">El botón \'Crear un Short\' está oculto</string>
<string name="revanced_hide_comments_create_a_short_button_summary_off">Se muestra el botón \'Crear un Short\'</string>
<string name="revanced_hide_comments_preview_comment_title">Ocultar comentario de vista previa</string>
<string name="revanced_hide_comments_preview_comment_summary_on">El comentario de la vista previa está oculto</string>
<string name="revanced_hide_comments_preview_comment_summary_off">Vista previa del comentario se muestra</string>
@@ -580,16 +591,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="layout.hide.shorts.HideShortsComponentsResourcePatch">
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
<string name="revanced_hide_shorts_home_title">Ocultar breves en el feed de inicio</string>
<string name="revanced_hide_shorts_home_summary_on">Los cortos en la alimentación de inicio están ocultos</string>
<string name="revanced_hide_shorts_home_summary_off">Se muestran los cortos en la alimentación de inicio</string>
<string name="revanced_hide_shorts_home_title">Ocultar Shorts en el Inicio</string>
<string name="revanced_hide_shorts_home_summary_on">Los Shorts en el Inicio están ocultos</string>
<string name="revanced_hide_shorts_home_summary_off">Se muestran los Shorts en el Inicio</string>
<!-- 'subscription' should be translated using the same localized wording YouTube displays for the subscription tab. -->
<string name="revanced_hide_shorts_subscriptions_title">Ocultar breves en el feed de suscripción</string>
<string name="revanced_hide_shorts_subscriptions_summary_on">Los cortos en el feed de suscripción están ocultos</string>
<string name="revanced_hide_shorts_subscriptions_summary_off">Se muestran los cortos en el feed de suscripción</string>
<string name="revanced_hide_shorts_search_title">Ocultar breves en los resultados de búsqueda</string>
<string name="revanced_hide_shorts_search_summary_on">Los breves resultados de búsqueda están ocultos</string>
<string name="revanced_hide_shorts_search_summary_off">Se muestran breves en los resultados de búsqueda</string>
<string name="revanced_hide_shorts_subscriptions_title">Ocultar Shorts en las suscripciones</string>
<string name="revanced_hide_shorts_subscriptions_summary_on">Los Shorts en las suscripciones están ocultos</string>
<string name="revanced_hide_shorts_subscriptions_summary_off">Se muestran los Shorts en las suscripciones</string>
<string name="revanced_hide_shorts_search_title">Ocultar Shorts en los resultados de búsqueda</string>
<string name="revanced_hide_shorts_search_summary_on">Los Shorts en resultados de búsqueda están ocultos</string>
<string name="revanced_hide_shorts_search_summary_off">Se muestran Shorts en los resultados de búsqueda</string>
<!-- 'join' should be translated using the same localized wording YouTube displays for the button. -->
<string name="revanced_hide_shorts_join_button_title">Ocultar botón de unirse</string>
<string name="revanced_hide_shorts_join_button_summary_on">Botón de unión oculto</string>
@@ -616,6 +627,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_save_sound_button_title">Ocultar sonido guardado al botón de lista de reproducción</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Guardar sonido en lista de reproducción está oculto</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Guardar sonido en la lista de reproducción se muestra</string>
<string name="revanced_hide_shorts_use_this_sound_button_title">Ocultar usar este botón de sonido</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_on">Usar este botón de sonido está oculto</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_off">Usar este botón de sonido se muestra</string>
<string name="revanced_hide_shorts_search_suggestions_title">Ocultar sugerencias de búsqueda</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">Las sugerencias de búsqueda están ocultas</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">Se muestran sugerencias de búsqueda</string>
@@ -679,7 +693,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">Opacidad del reproductor debe estar entre 0 y 100</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Oculto</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">No me gusta no disponible temporalmente</string>
<string name="revanced_ryd_failure_connection_status_code">Dislikes no disponibles (estado %d)</string>
@@ -691,8 +704,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_ryd_enable_summary_off">No se muestran Dislikes</string>
<string name="revanced_ryd_shorts_title">Mostrar no me gusta en Shorts</string>
<string name="revanced_ryd_shorts_summary_on">Dislikes mostrados en Shorts</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">Dislikes mostrados en Cortos\n\nLimitación: Las Dislikes no pueden aparecer en modo incógnito</string>
<string name="revanced_ryd_shorts_summary_off">Dislikes ocultos en Shorts</string>
<string name="revanced_ryd_shorts_summary_on_disclaimer">No me Gusta mostrados en Shorts\n\nLimitación: Los No me Gusta no pueden aparecer en modo incógnito</string>
<string name="revanced_ryd_shorts_summary_off">No me Gusta ocultos en Shorts</string>
<string name="revanced_ryd_dislike_percentage_title">Desliza como porcentaje</string>
<string name="revanced_ryd_dislike_percentage_summary_on">Dislikes mostrados como porcentaje</string>
<string name="revanced_ryd_dislike_percentage_summary_off">Dislikes mostrados como número</string>
@@ -761,9 +774,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_adjusting_sum">Número de milisegundos que los botones de ajuste de tiempo se mueven al crear nuevos segmentos</string>
<string name="revanced_sb_general_adjusting_invalid">El valor debe ser un número positivo</string>
<string name="revanced_sb_guidelines_preference_title">Ver normas</string>
<string name="revanced_sb_guidelines_preference_sum">Las directrices contienen reglas y consejos para crear nuevos segmentos</string>
<string name="revanced_sb_guidelines_preference_sum">Las pautas contienen reglas y consejos para crear nuevos segmentos</string>
<string name="revanced_sb_guidelines_popup_title">Siga las pautas</string>
<string name="revanced_sb_guidelines_popup_content">Lee las directrices de SponsorBlock antes de crear nuevos segmentos</string>
<string name="revanced_sb_guidelines_popup_content">Lee las pautas de SponsorBlock antes de crear nuevos segmentos</string>
<string name="revanced_sb_guidelines_popup_already_read">Ya leído</string>
<string name="revanced_sb_guidelines_popup_open">Múestrame</string>
<string name="revanced_sb_general">General</string>
@@ -775,6 +788,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_skipcount_sum_off">El rastreo del conteo de saltos no está habilitado</string>
<string name="revanced_sb_general_min_duration">Duración mínima del segmento</string>
<string name="revanced_sb_general_min_duration_sum">Los segmentos más cortos que este valor (en segundos) no se mostrarán o se omitirán</string>
<string name="revanced_sb_general_min_duration_invalid">Duración de tiempo no válida</string>
<string name="revanced_sb_general_uuid">Tu id de usuario privado</string>
<string name="revanced_sb_general_uuid_sum">Esto debería mantenerse privado. Es como una contraseña y no debe ser compartido con nadie. Si alguien obtiene esto, podran usarlo para suplantarte</string>
<string name="revanced_sb_general_uuid_invalid">El id de usuario privado debe tener al menos 30 caracteres</string>
@@ -875,8 +889,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Segundo en el que el segmento comienza</string>
<string name="revanced_sb_new_segment_time_end">Segundo en el que el segmento finaliza</string>
<string name="revanced_sb_new_segment_confirm_title">¿Los tiempos son correctos?</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">El segmento es desde\n\n%1$s\nhasta\n%2$s\n\n(%3$s)\n\n¿Listo para enviarlo?</string>
<string name="revanced_sb_new_segment_start_is_before_end">Inicio debe ser antes del final</string>
<string name="revanced_sb_new_segment_mark_locations_first">Primero, marca dos instantes en la barra de tiempo</string>
@@ -895,6 +907,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_stats_username_changed">Nombre de usuario cambiado con éxito</string>
<string name="revanced_sb_stats_reputation">Tu reputación es &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">Has creado segmentos &lt;b&gt;%s&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions_sum">Pulsa aquí para ver tus segmentos</string>
<string name="revanced_sb_stats_saved_zero">Tabla de clasificación de SponsorBlock</string>
<string name="revanced_sb_stats_saved">Has salvado personas de segmentos &lt;b&gt;%s&lt;/b&gt;</string>
<string name="revanced_sb_stats_saved_sum_zero">Pulsa aquí para ver las estadísticas globales y los mejores colaboradores</string>
@@ -923,10 +936,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
<string name="revanced_spoof_app_version_target_title">Destino de versión de la aplicación Spoof</string>
<!-- 'RYD' is 'Return YouTube Dislike' -->
<string name="revanced_spoof_app_version_target_entry_1">18.33.40 - Restaurar RYD en modo incógnito cortos</string>
<string name="revanced_spoof_app_version_target_entry_1">18.33.40 - Restaurar RYD en Shorts de modo incógnito</string>
<string name="revanced_spoof_app_version_target_entry_2">18.20.39 - Restaurar la velocidad de vídeo ancha &amp; menú de calidad</string>
<string name="revanced_spoof_app_version_target_entry_3">18.09.39 - Restaurar pestaña de biblioteca</string>
<string name="revanced_spoof_app_version_target_entry_4">17.41.37 - Restaurar la vieja lista de reproducción shelf</string>
<string name="revanced_spoof_app_version_target_entry_4">17.41.37 - Restaurar el estante viejo de lista de reproducción</string>
<string name="revanced_spoof_app_version_target_entry_5">17.33.42 - Restaurar la disposición antigua de la interfaz de usuario</string>
</patch>
<patch id="layout.startpage.ChangeStartPagePatch">
@@ -938,7 +951,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the subscriptions tab. -->
<string name="revanced_start_page_entry_3">Suscripciones</string>
<string name="revanced_start_page_entry_4">Explorar</string>
<string name="revanced_start_page_entry_5">Acortes</string>
<!-- 'You' should be translated using the same localized wording YouTube displays for the You (library) tab. -->
<string name="revanced_start_page_entry_6">Pestaña</string>
<string name="revanced_start_page_entry_7">Vídeos gustados</string>
@@ -948,8 +960,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="layout.startupshortsreset.DisableResumingShortsOnStartupPatch">
<string name="revanced_disable_resuming_shorts_player_title">Desactivar reanudación del reproductor</string>
<string name="revanced_disable_resuming_shorts_player_summary_on">El reproductor corto no se reanudará al iniciar la aplicación</string>
<string name="revanced_disable_resuming_shorts_player_summary_off">El reproductor corto se reanudará al iniciar la aplicación</string>
<string name="revanced_disable_resuming_shorts_player_summary_on">El reproductor de Shorts no se reanudará al iniciar la aplicación</string>
<string name="revanced_disable_resuming_shorts_player_summary_off">El reproductor de Shorts se reanudará al iniciar la aplicación</string>
</patch>
<patch id="layout.tablet.EnableTabletLayoutPatch">
<string name="revanced_tablet_layout_title">Habilitar diseño de tablet</string>
@@ -976,7 +988,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_hide_rewind_forward_title">Ocultar botones de omitir hacia adelante y atrás</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Saltar adelante y atrás están ocultos</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Saltar adelante y atrás se muestran</string>
<string name="revanced_miniplayer_opacity_title">Overlay opacity</string>
<string name="revanced_miniplayer_opacity_title">Opacidad de la capa superpuesta</string>
<string name="revanced_miniplayer_opacity_summary">Valor de potencia entre 0-100, donde 0 es transparente</string>
<string name="revanced_miniplayer_opacity_invalid_toast"> Opacidad de reproductor debe estar en 0 -100</string>
</patch>
@@ -994,7 +1006,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_seekbar_custom_color_invalid">Valor de color de la barra de búsqueda inválido. Usando el valor por defecto.</string>
</patch>
<patch id="layout.thumbnails.BypassImageRegionRestrictions">
<string name="revanced_bypass_image_region_restrictions_title">Restricciones de región de imagen bypass</string>
<string name="revanced_bypass_image_region_restrictions_title">Evitar restricción regional de imágenes</string>
<string name="revanced_bypass_image_region_restrictions_summary_on">Usando host de imagen yt4.ggpht.com</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">Utilizando el host de imágenes original\n\nHabilitar esto puede arreglar las imágenes faltantes que están bloqueadas en algunas regiones</string>
</patch>
@@ -1040,6 +1052,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="misc.dns.CheckWatchHistoryDomainNameResolutionPatch">
<string name="revanced_check_watch_history_domain_name_dialog_title">Advertencia</string>
<string name="revanced_check_watch_history_domain_name_dialog_message">Tu historial no está siendo guardado.&lt;br&gt;&lt;br&gt;Esto puede ser por un bloqueador de anuncios DNS o Proxy.&lt;br&gt;&lt;br&gt;Para arreglarlo, permita el dominio &lt;b&gt;s.youtube.com&lt;/b&gt; o desactive el bloqueador DNS o Proxy.</string>
<string name="revanced_check_watch_history_domain_name_dialog_ignore">No mostrar de nuevo</string>
</patch>
<patch id="misc.autorepeat.AutoRepeatPatch">
@@ -1116,35 +1129,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">Deslizar para buscar está activado</string>
<string name="revanced_slide_to_seek_summary_off">Slide to seek no está habilitado</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_title">Cliente Spoof</string>
<string name="revanced_spoof_client_screen_summary">Fusiona al cliente para evitar problemas de reproducción</string>
<string name="revanced_spoof_client_title">Cliente Spoof</string>
<string name="revanced_spoof_client_summary_on">Cliente falseado</string>
<string name="revanced_spoof_client_summary_off">El cliente no está falsificado\n\nEs posible que la reproducción de vídeo no funcione</string>
<string name="revanced_spoof_client_user_dialog_message">Desactivar esta configuración puede causar problemas de reproducción de vídeo.</string>
<string name="revanced_spoof_client_use_ios_title">Spoof cliente a iOS</string>
<string name="revanced_spoof_client_use_ios_summary_on">El cliente está actualmente falseado a iOS\n\nLos efectos laterales incluyen:\n• El vídeo HDR puede no estar disponible\n• El historial de visualización no funciona con una cuenta de marca</string>
<string name="revanced_spoof_client_use_ios_summary_off">El cliente está actualmente falseado a Android VR. Los efectos laterales incluyen:\n• No hay vídeo HDR\n• Los niños vídeos no se reproducirán\n• Los vídeos en pausa pueden reanudarse aleatoriamente\n• Las miniaturas de barras cortas de baja calidad\n• El botón de acción está oculto\n• Las tarjetas de pantalla final están ocultas</string>
<string name="revanced_spoof_client_storyboard_timeout">Las miniaturas del cliente de Spoof no están disponibles (API)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Las miniaturas del cliente Spoof temporalmente no están disponibles: %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<string name="revanced_spoof_signature_verification_screen_title">Firma de aplicación Spoof</string>
<string name="revanced_spoof_signature_verification_screen_summary">Espoya la firma de la aplicación para evitar problemas de reproducción</string>
<string name="revanced_spoof_signature_verification_enabled_title">Firma de aplicación Spoof</string>
<string name="revanced_spoof_signature_verification_enabled_summary_on">La firma de la aplicación falseada\n\nLos efectos laterales incluyen:\n• La tasa de bits mejorada no está disponible\n• Los vídeos no se pueden descargar\n• No hay miniaturas en la barra de búsqueda para vídeos pagados</string>
<string name="revanced_spoof_signature_verification_enabled_summary_off">La firma de la aplicación no está falseada\n\nLa reproducción de vídeo puede no funcionar</string>
<string name="revanced_spoof_signature_verification_enabled_user_dialog_message">Desactivar esta configuración causará problemas de reproducción de vídeo.</string>
<string name="revanced_spoof_signature_in_feed_enabled_title">Spoof firma de aplicación en el feed</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_on">La firma de la aplicación está falseada\n\nLos efectos laterales incluyen:\n• Los vídeos alimentarios no tienen subtítulos\n• Los vídeos reproducidos automáticamente se mostrarán en tu historial de relojes</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_off">Firma de la aplicación no simulada para videos de feed\n\nLos vídeos alimentarios se reproducirán durante menos de 1 minuto antes de encontrar problemas de reproducción</string>
<string name="revanced_spoof_storyboard_title">Cuadro de historias</string>
<string name="revanced_spoof_storyboard_summary_on">Cuadro de historias falseado</string>
<string name="revanced_spoof_storyboard_summary_off">El storyboard no está falseado\n\nLos efectos laterales incluyen:\n• Sin modo ambiente\n• Las miniaturas de la barra de búsqueda están ocultas</string>
<string name="revanced_spoof_storyboard_timeout">El storyboard espía no está disponible temporalmente (API)</string>
<string name="revanced_spoof_storyboard_io_exception">El storyboard espía no está disponible temporalmente: %s</string>
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">Flujos de video espía</string>
<string name="revanced_spoof_video_streams_screen_summary">Espoya los flujos de vídeo del cliente para evitar problemas de reproducción</string>
<string name="revanced_spoof_video_streams_title">Flujos de video espía</string>
<string name="revanced_spoof_video_streams_summary_on">Los flujos de vídeo están falsificados</string>
<string name="revanced_spoof_video_streams_summary_off">Los streams de vídeo no están falseados\n\nLa reproducción de vídeo puede no funcionar</string>
<string name="revanced_spoof_video_streams_user_dialog_message">Desactivar esta configuración puede causar problemas de reproducción de vídeo.</string>
<string name="revanced_spoof_video_streams_client_type_title">Cliente por defecto</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Forzar AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Codec de vídeo AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">El códec de vídeo es VP9 o AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Su dispositivo no tiene decodificación de hardware VP9, y esta configuración siempre está encendida cuando el cliente spoofing está habilitado</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Activar esto puede mejorar la vida de la batería y corregir el retraso en la reproducción.\n\nAVC tiene una resolución máxima de 1080p, y la reproducción de vídeo utilizará más datos de Internet que VP9 o AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">Efectos secundarios para falseo de iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Las películas o los vídeos de pago no pueden reproducir\n• Las imágenes comienzan desde el principio</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Efectos secundarios de falsear RV de Android</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Falta el menú de pista de audio</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

File diff suppressed because it is too large Load Diff

View File

@@ -32,15 +32,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<!-- Settings about dialog. -->
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
</patch>
<patch id="misc.settings.SettingsPatch">
</patch>
<patch id="misc.debugging.DebuggingPatch">
@@ -57,7 +58,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- '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. -->
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
<patch id="ad.general.HideAdsResourcePatch">
@@ -171,8 +172,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.sponsorblock.SponsorBlockResourcePatch">
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<!-- Shown in the settings preferences, and translations can be any text length. -->
</patch>
<patch id="layout.spoofappversion.SpoofAppVersionPatch">
@@ -235,10 +234,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.EnableSlideToSeekPatch">
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,15 +32,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<!-- Settings about dialog. -->
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
</patch>
<patch id="misc.settings.SettingsPatch">
</patch>
<patch id="misc.debugging.DebuggingPatch">
@@ -57,7 +58,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- '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. -->
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
<patch id="ad.general.HideAdsResourcePatch">
@@ -171,8 +172,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.sponsorblock.SponsorBlockResourcePatch">
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<!-- Shown in the settings preferences, and translations can be any text length. -->
</patch>
<patch id="layout.spoofappversion.SpoofAppVersionPatch">
@@ -234,10 +233,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.EnableSlideToSeekPatch">
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,15 +32,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<!-- Settings about dialog. -->
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
</patch>
<patch id="misc.settings.SettingsPatch">
</patch>
<patch id="misc.debugging.DebuggingPatch">
@@ -57,7 +58,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- '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. -->
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
<patch id="ad.general.HideAdsResourcePatch">
@@ -171,8 +172,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.sponsorblock.SponsorBlockResourcePatch">
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<!-- Shown in the settings preferences, and translations can be any text length. -->
</patch>
<patch id="layout.spoofappversion.SpoofAppVersionPatch">
@@ -235,10 +234,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.EnableSlideToSeekPatch">
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,6 +32,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
<string name="revanced_check_environment_failed_title">Tarkistukset epäonnistui</string>
<string name="revanced_check_environment_dialog_open_official_source_button">Avaa virallinen sivusto</string>
<string name="revanced_check_environment_dialog_ignore_button">Ohita</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;Tämä sovellus ei näytä olevan sinun korjaamasi.&lt;/h5&gt;&lt;br&gt;Tämä sovellus ei ehkä toimi oikein, &lt;b&gt;voi olla haitallista tai jopa vaarallista käyttää&lt;/b&gt;.&lt;br&gt;&lt;br&gt;Nämä tarkastukset merkitsevät, että tämä sovellus on esiasennettu tai saatu joltain muulta:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt;On erittäin suositeltavaa &lt;b&gt;poistaa tämä sovellus ja korjata se itse&lt;/b&gt; varmistaaksesi, että käytät validoitua ja turvallista sovellusta.&lt;p&gt;&lt;br&gt;Jos tämä varoitus jätetään huomiotta, se näytetään vain kahdesti.</string>
<string name="revanced_check_environment_not_same_patching_device">Paikattu eri laitteella</string>
<string name="revanced_check_environment_manager_not_expected_installer">Ei asennettu ReVanced Manager</string>
<string name="revanced_check_environment_not_near_patch_time">Paikattu yli 10 minuuttia sitten</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">APK käännöspäivä on vioittunut</string>
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_title">ReVanced</string>
<string name="revanced_settings_confirm_user_dialog_title">Haluatko jatkaa?</string>
@@ -43,6 +53,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_import_reset">Revanced asetukset palautettu oletukseksi</string>
<string name="revanced_settings_import_success">Tuotu %d asetukset</string>
<string name="revanced_settings_import_failure_parse">Tuonti epäonnistui: %s</string>
<string name="revanced_pref_import_export_title">Tuo / Vie</string>
<string name="revanced_pref_import_export_summary">Tuo / Vie ReVanced asetukset</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">Käytät ReVanced Patches versiota &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Huomautus</string>
<string name="revanced_settings_about_links_dev_body">Tämä versio on ennakkojulkaisuversio, joten voit kokea odottamattomia ongelmia</string>
<string name="revanced_settings_about_links_header">Viralliset linkit</string>
<string name="revanced_settings_about_links_donate">Lahjoita</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -55,15 +73,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings">ReVanced</string>
<string name="revanced_settings_about_links_body">Käytät ReVanced Patches versiota &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Huomautus</string>
<string name="revanced_settings_about_links_dev_body">Tämä versio on ennakkojulkaisuversio, joten voit kokea odottamattomia ongelmia</string>
<string name="revanced_settings_about_links_header">Viralliset linkit</string>
<string name="revanced_pref_import_export_title">Tuo / Vie</string>
<string name="revanced_pref_import_export_summary">Tuo / Vie ReVanced asetukset</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">Tietoja</string>
<string name="revanced_settings_screen_01_ads_title">Mainokset</string>
@@ -244,14 +253,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Piilotetut avainsanat</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">Piilotettavia avainsanoja ja lauseita, erotettuna uusilla riveillä\n\nKeskellä olevat isot kirjaimet on syötettävä niin kuin ne on sanassa (esim. iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">Piilotettavia avainsanoja ja lauseita, erotettuna uusilla riveillä\n\nAvainsanat voivat olla kanavien nimiä tai videon otsikoissa\n\nSuurilla kirjaimilla varustetut sanat täytyy syöttää kotelon kanssa (esim. iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">Tietoja avainsanan suodatuksesta</string>
<string name="revanced_hide_keyword_content_about_summary">Koti/Tilaukset/Hakutulokset suodatetaan ja piilotetaan avainsanalauseita käyttäen\n\nRajoitukset\n• Joitakin Shortteja ei välttämättä piiloteta\n• Joitakin käyttöliittymän komponentteja ei välttämättä piiloteta\n• Avainsanan haku ei välttämättä näytä tuloksia</string>
<string name="revanced_hide_keyword_content_about_summary">Etusivu/Tilaus / Hakutulokset suodatetaan piilottamaan sisältö, joka vastaa avainsanalauseita\n\nRajoitukset\n• Shortteja ei voi piilottaa kanavan nimellä\n• Joitakin UI-komponentteja ei välttämättä ole piilotettu\n• Haetaan hakusanalla ei ole tuloksia.</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">Täsmää koko sanaan</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<string name="revanced_hide_keyword_content_about_whole_words_summary">Hakusanan / lauseen ympäröiminen kaksoislainauksilla estää videon osittaisia vastaavuuksia ja kanavien nimiä&lt;br&gt;&lt;br&gt;Esimerkiksi,&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; piilottaa videon: &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;mutta ei piilota: &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">Virheellinen avainsana. Ei voida käyttää: \'%s\' suodattimena</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">Virheellinen avainsana. \'%1$s\' on pienempi kuin %2$d merkkiä</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Avainsana \'%s\' piilottaa kaikki videot</string>
<string name="revanced_hide_keyword_toast_invalid_common">Avainsanaa ei voi käyttää: %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Lisää lainauksia käyttämään avainsanaan: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">Avainsanalla on ristiriitaiset ilmoitukset: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">Avainsana on liian lyhyt ja vaatii lainausmerkkejä: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Avainsana piilottaa kaikki videot: %s</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">Piilota yleiset mainokset</string>
@@ -432,9 +445,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_home_button_summary_on">Kotinäppäin on piilotettu</string>
<string name="revanced_hide_home_button_summary_off">Kotinäppäin näytetään</string>
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_hide_shorts_button_title">Piilota Shortsit</string>
<string name="revanced_hide_shorts_button_summary_on">Shortsit painike on piilotettu</string>
<string name="revanced_hide_shorts_button_summary_off">Shortsit painike näytetään</string>
<string name="revanced_hide_shorts_button_title">Piilota Shorts</string>
<string name="revanced_hide_shorts_button_summary_on">Shorts painike on piilotettu</string>
<string name="revanced_hide_shorts_button_summary_off">Shorts painike näytetään</string>
<!-- The Create button has no display name. Translate normally. -->
<string name="revanced_hide_create_button_title">Piilota Luo</string>
<string name="revanced_hide_create_button_summary_on">Luo painike on piilotettu</string>
@@ -617,6 +630,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_save_sound_button_title">Piilota tallennettava ääni soittolistapainikkeeseen</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Tallenna ääni soittolistalle on piilotettu</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Tallenna ääni soittolistalle näytetään</string>
<string name="revanced_hide_shorts_use_this_sound_button_title">Piilota käytä tätä äänipainiketta</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_on">Käytä tätä äänipainiketta on piilotettu</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_off">Käytä tätä äänipainiketta näytetään</string>
<string name="revanced_hide_shorts_search_suggestions_title">Piilota hakuehdotukset</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">Hakuehdotukset on piilotettu</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">Hakuehdotukset näytetään</string>
@@ -680,7 +696,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">Soittimen peittoalueen läpinäkyvyyden on oltava välillä 0-100</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Hidden</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">Alapeukutus ei ole tilapäisesti käytettävissä</string>
<string name="revanced_ryd_failure_connection_status_code">Eivät tykkää ei saatavilla (tila %d)</string>
@@ -776,6 +791,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_skipcount_sum_off">Ohitusmäärän seuranta ei ole käytössä</string>
<string name="revanced_sb_general_min_duration">Osion vähimmäiskesto</string>
<string name="revanced_sb_general_min_duration_sum">Tätä arvoa (sekunteina) lyhyempiä osioita ei näytetä tai ohiteta</string>
<string name="revanced_sb_general_min_duration_invalid">Virheellinen kellonaika</string>
<string name="revanced_sb_general_uuid">Yksityinen käyttäjätunnuksesi</string>
<string name="revanced_sb_general_uuid_sum">Tämä pitäisi pitää yksityisenä. Tämä on kuin salasana, eikä sitä pitäisi jakaa kenenkään kanssa. Jos jollakulla on tämä, he voivat esiintyä sinuna</string>
<string name="revanced_sb_general_uuid_invalid">Yksityisen käyttäjätunnuksen on oltava vähintään 30 merkkiä pitkä</string>
@@ -876,8 +892,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Aika jolloin osio alkaa</string>
<string name="revanced_sb_new_segment_time_end">Aika jolloin osio päättyy</string>
<string name="revanced_sb_new_segment_confirm_title">Ovatko ajat oikein?</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">Osio alkaa\n\n%1$s\nja loppuu\n%2$s\n\n(%3$s)\n\nValmis lähettämään?</string>
<string name="revanced_sb_new_segment_start_is_before_end">Alku on oltava ennen loppua</string>
<string name="revanced_sb_new_segment_mark_locations_first">Merkitse ensin kaksi sijaintia aikapalkissa</string>
@@ -896,6 +910,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_stats_username_changed">Käyttäjänimen vaihto onnistui</string>
<string name="revanced_sb_stats_reputation">Maineesi on &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">Olet luonut &lt;b&gt;%s&lt;/b&gt; osiota</string>
<string name="revanced_sb_stats_submissions_sum">Napauta tästä nähdäksesi segmentit</string>
<string name="revanced_sb_stats_saved_zero">SponsorBlock tulostaulu</string>
<string name="revanced_sb_stats_saved">Olet pelastanut ihmisiä &lt;b&gt;%s&lt;/b&gt; segmentiltä</string>
<string name="revanced_sb_stats_saved_sum_zero">Napauta tästä nähdäksesi globaalit tilastot ja ylimmät avustajat</string>
@@ -977,7 +992,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_hide_rewind_forward_title">Piilota ohita etu- ja takapainikkeet</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Ohita eteenpäin ja takaisin on piilotettu</string>
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Ohita eteenpäin ja takaisin näytetään</string>
<string name="revanced_miniplayer_opacity_title">Overlay opacity</string>
<string name="revanced_miniplayer_opacity_title">Valikon peiton läpinäkyvyys</string>
<string name="revanced_miniplayer_opacity_summary">Läpinäkyvyysarvo välillä 0100, jossa 0 on läpinäkyvä</string>
<string name="revanced_miniplayer_opacity_invalid_toast">Miniplayer peittokuvan läpinäkyvyyden on oltava välillä 0-100</string>
</patch>
@@ -1117,35 +1132,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">Liu\'uta etsiäksesi on käytössä</string>
<string name="revanced_slide_to_seek_summary_off">Liu\'uta etsiäksesi ei ole käytössä</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_title">Naamioi pääte</string>
<string name="revanced_spoof_client_screen_summary">Naamioi pääte toisto-ongelmien estämiseksi</string>
<string name="revanced_spoof_client_title">Naamioi pääte</string>
<string name="revanced_spoof_client_summary_on">Pääte on naamioitu</string>
<string name="revanced_spoof_client_summary_off">Päätettä ei ole naamioitu\n\nVideon toisto ei ehkä toimi</string>
<string name="revanced_spoof_client_user_dialog_message">Tämän asetuksen poistaminen käytöstä voi aiheuttaa videon toiston ongelmia.</string>
<string name="revanced_spoof_client_use_ios_title">Naamioi pääte iOS:ksi</string>
<string name="revanced_spoof_client_use_ios_summary_on">Asiakas on tällä hetkellä pilkottu iOS\n\nSivuvaikutukset ovat:\n• HDR video ei ehkä ole saatavilla\n• Watch historia ei toimi tuotemerkin tilin</string>
<string name="revanced_spoof_client_use_ios_summary_off">Pääte on baamioitu Android VR:ksi. Sivuvaikutuksia ovat:\n• Ei HDR-videota\n• Lasten videot eivät toistu\n• Pysäytetyt videot voivat jatkaa toistoa satunnaisesti\n• Huonolaatuiset Shorts-liukusäätimen pikkukuvat\n• Lataa-toimintapainike on piilotettu\n• Loppunäytön kortit on piilotettu</string>
<string name="revanced_spoof_client_storyboard_timeout">Spoof asiakkaan pikkukuvat ei ole käytettävissä (API ajastettu)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Spoof asiakkaan pikkukuvat tilapäisesti ei käytettävissä: %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<string name="revanced_spoof_signature_verification_screen_title">Hämärä sovelluksen allekirjoitus</string>
<string name="revanced_spoof_signature_verification_screen_summary">Ota sovelluksen allekirjoitus haltuun estääksesi toiston ongelmia</string>
<string name="revanced_spoof_signature_verification_enabled_title">Hämärä sovelluksen allekirjoitus</string>
<string name="revanced_spoof_signature_verification_enabled_summary_on">Sovelluksen allekirjoitus pilaantunut\n\nSivutehosteita ovat:\n• Parannettu bitrate ei ole käytettävissä\n• Videoita ei voi ladata\n• Ei seekbar pikkukuvia maksullisille videoille</string>
<string name="revanced_spoof_signature_verification_enabled_summary_off">Sovelluksen allekirjoitus ei ole pilaantunut\n\nVideon toisto ei ehkä toimi</string>
<string name="revanced_spoof_signature_verification_enabled_user_dialog_message">Tämän asetuksen poistaminen käytöstä aiheuttaa videon toiston ongelmia.</string>
<string name="revanced_spoof_signature_in_feed_enabled_title">Hämärä sovelluksen allekirjoitus syötteessä</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_on">Sovelluksen allekirjoitus pilkottu\n\nSivutehosteet ovat:\n• Syötteen videot puuttuvat tekstitykset\n• Automaattisesti soitettu syöte videot näkyvät katsella historian</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_off">Sovelluksen allekirjoitus ei haju syötevideoille\n\nSyötevideot pelaavat alle 1 minuutin ennen toisto-ongelmien kohtaamista</string>
<string name="revanced_spoof_storyboard_title">Huijaus tarinalauta</string>
<string name="revanced_spoof_storyboard_summary_on">Storyboard spoofed</string>
<string name="revanced_spoof_storyboard_summary_off">Storyboard ei spoofed\n\nSivutehosteita ovat:\n• Ei ympäröivää tilaa\n• Seekbar pikkukuvat on piilotettu</string>
<string name="revanced_spoof_storyboard_timeout">Spoof storyboard tilapäisesti ei ole käytettävissä (API aikakatkaistu)</string>
<string name="revanced_spoof_storyboard_io_exception">Spoof storyboard väliaikaisesti ei käytettävissä: %s</string>
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">Spoof video streams</string>
<string name="revanced_spoof_video_streams_screen_summary">Spoof asiakkaan videovirrat estää toiston ongelmia</string>
<string name="revanced_spoof_video_streams_title">Spoof video streams</string>
<string name="revanced_spoof_video_streams_summary_on">Videon purot ovat puolattu</string>
<string name="revanced_spoof_video_streams_summary_off">Videon suoratoistot eivät ole spoofed\n\nVideon toisto ei ehkä toimi</string>
<string name="revanced_spoof_video_streams_user_dialog_message">Tämän asetuksen poistaminen käytöstä voi aiheuttaa videon toiston ongelmia.</string>
<string name="revanced_spoof_video_streams_client_type_title">Oletus asiakas</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Pakota AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Videokoodekki on AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Videokoodekki on VP9 tai AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Laitteessasi ei ole VP9-laitteiston dekoodausta, ja tämä asetus on aina päällä, kun asiakkaan spoofing on käytössä</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Tämän käyttöönotto voi parantaa akun kestoa ja korjata toistoa stuttering.\n\nAVC on suurin resoluutio 1080p, ja videon toisto käyttää enemmän internet-tietoja kuin VP9 tai AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">iOS:n havainnot haittavaikutuksista</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Elokuvat tai maksetut videot eivät välttämättä pelaa\n• Livestreams alkavat alusta</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR havaintoon sivuvaikutukset</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Ääniraidan valikko puuttuu</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,6 +32,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_confirm_user_dialog_title">Gusto mo bang magpatuloy?</string>
<string name="revanced_settings_reset">I-reset</string>
@@ -42,6 +44,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_import_reset">I-reset ang mga ReVanced na setting sa default</string>
<string name="revanced_settings_import_success">Na-import ang %d na mga setting</string>
<string name="revanced_settings_import_failure_parse">Nabigo ang pag-import: %s</string>
<string name="revanced_pref_import_export_title">Mag-import / Mag-export</string>
<string name="revanced_pref_import_export_summary">I-import / I-export ang mga setting ng ReVanced</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">Gumagamit ka ng bersyon ng ReVanced Patches &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Tandaan</string>
<string name="revanced_settings_about_links_dev_body">Ang bersyon na ito ay isang pre-release at maaari kang makaranas ng mga hindi inaasahang isyu</string>
<string name="revanced_settings_about_links_header">Mga opisyal na link</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -54,14 +63,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings_about_links_body">Gumagamit ka ng bersyon ng ReVanced Patches &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Tandaan</string>
<string name="revanced_settings_about_links_dev_body">Ang bersyon na ito ay isang pre-release at maaari kang makaranas ng mga hindi inaasahang isyu</string>
<string name="revanced_settings_about_links_header">Mga opisyal na link</string>
<string name="revanced_pref_import_export_title">Mag-import / Mag-export</string>
<string name="revanced_pref_import_export_summary">I-import / I-export ang mga setting ng ReVanced</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">Tungkol</string>
<string name="revanced_settings_screen_01_ads_title">Mga ad</string>
@@ -236,14 +237,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Mga keyword na itatago</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">Ang mga keyword at pariralang itatago, na pinaghihiwalay ng mga bagong linya\n\nAng mga salitang may malalaking letra sa gitna ay dapat ilagay kasama ng casing (ibig sabihin: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">Tungkol sa pag-filter ng keyword</string>
<string name="revanced_hide_keyword_content_about_summary">Home/Subscription/Ang mga resulta ng paghahanap ay sinasala upang itago ang nilalaman na tumutugma sa mga parirala ng keyword\n\nMga Limitasyon\n• Maaaring hindi maitago ang ilang Shorts\n• Maaaring hindi maitago ang ilang bahagi ng UI\n• Maaaring walang resulta ang paghahanap para sa isang keyword</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">Di-wastong keyword. Hindi magagamit ang: \"%s\" bilang filter</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">Di-wastong keyword. Ang \"%1$s\" ay mas mababa sa %2$d character</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Itatago ng keyword na \"%s\" ang lahat ng video</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">Itago ang mga pangkalahatang ad</string>
@@ -670,7 +666,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">Ang opacity ng overlay ng player ay dapat nasa pagitan ng 0-100</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Nakatago</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">Pansamantalang hindi available ang mga hindi gusto (nag-time out ang API)</string>
<string name="revanced_ryd_failure_connection_status_code">Hindi available ang mga hindi gusto (status %d)</string>
@@ -860,8 +855,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Oras na magsisimula ang segment sa</string>
<string name="revanced_sb_new_segment_time_end">Oras na nagtatapos ang segment sa</string>
<string name="revanced_sb_new_segment_confirm_title">Tama ba ang mga oras?</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">Ang segment ay mula sa\n\n%1$s\nto\n%2$s\n\n(%3$s)\n\nHanda nang isumite?</string>
<string name="revanced_sb_new_segment_start_is_before_end">Ang simula ay dapat bago ang katapusan</string>
<string name="revanced_sb_new_segment_mark_locations_first">Markahan muna ang dalawang lokasyon sa time bar</string>
@@ -1088,17 +1081,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">Naka-enable ang slide to seek</string>
<string name="revanced_slide_to_seek_summary_off">Hindi pinagana ang slide to seek</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_summary">Panggagaya ang kliyente upang maiwasan ang mga isyu sa pag-playback</string>
<string name="revanced_spoof_client_summary_on">Na-spoof ang kliyente</string>
<string name="revanced_spoof_client_summary_off">Hindi na-spoof ang kliyente\n\nMaaaring hindi gumana ang pag-playback ng video</string>
<string name="revanced_spoof_client_user_dialog_message">Ang pag-off sa setting na ito ay maaaring magdulot ng mga isyu sa pag-playback ng video.</string>
<string name="revanced_spoof_client_use_ios_title">Spoof client sa iOS</string>
<string name="revanced_spoof_client_storyboard_timeout">Hindi available ang mga thumbnail ng spoof client (nag-time out ang API)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Pansamantalang hindi available ang mga thumbnail ng spoof client: %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_user_dialog_message">Ang pag-off sa setting na ito ay maaaring magdulot ng mga isyu sa pag-playback ng video.</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,6 +32,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
<string name="revanced_check_environment_failed_title">Les vérifications ont échoué</string>
<string name="revanced_check_environment_dialog_open_official_source_button">Ouvrir le site web officiel</string>
<string name="revanced_check_environment_dialog_ignore_button">Ignorer</string>
<string name="revanced_check_environment_not_same_patching_device">Corrigé sur un autre appareil</string>
<string name="revanced_check_environment_manager_not_expected_installer">Non installé par ReVanced Manager</string>
<string name="revanced_check_environment_not_near_patch_time">Corrigé il y a plus de 10 minutes</string>
<string name="revanced_check_environment_not_near_patch_time_invalid">La date de compilation APK est corrompue</string>
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<string name="revanced_settings_title">ReVanced</string>
<string name="revanced_settings_confirm_user_dialog_title">Souhaitez-vous continuer ?</string>
@@ -43,6 +52,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_settings_import_reset">Réglages ReVanced réinitialisés aux valeurs par défaut</string>
<string name="revanced_settings_import_success">%d paramètres importés</string>
<string name="revanced_settings_import_failure_parse">Échec de l\'importation : %s</string>
<string name="revanced_pref_import_export_title">Importer / Exporter</string>
<string name="revanced_pref_import_export_summary">Importer / Exporter les paramètres ReVanced</string>
<!-- Settings about dialog. -->
<string name="revanced_settings_about_links_body">Vous utilisez la version de ReVanced Patches &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Note</string>
<string name="revanced_settings_about_links_dev_body">Cette version est une pré-version et vous pourriez rencontrer des problèmes inattendus</string>
<string name="revanced_settings_about_links_header">Liens officiels</string>
<string name="revanced_settings_about_links_donate">Faire un don</string>
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
@@ -55,15 +72,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
<string name="revanced_settings">ReVanced</string>
<string name="revanced_settings_about_links_body">Vous utilisez la version de ReVanced Patches &lt;i&gt;%s&lt;/i&gt;</string>
<string name="revanced_settings_about_links_dev_header">Note</string>
<string name="revanced_settings_about_links_dev_body">Cette version est une pré-version et vous pourriez rencontrer des problèmes inattendus</string>
<string name="revanced_settings_about_links_header">Liens officiels</string>
<string name="revanced_pref_import_export_title">Importer / Exporter</string>
<string name="revanced_pref_import_export_summary">Importer / Exporter les paramètres ReVanced</string>
</patch>
<patch id="misc.settings.SettingsPatch">
<string name="revanced_settings_screen_00_about_title">À propos</string>
<string name="revanced_settings_screen_01_ads_title">Publicités</string>
@@ -244,14 +252,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_keyword_content_phrases_title">Mots-clés à cacher</string>
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<string name="revanced_hide_keyword_content_phrases_summary">Mots-clés et phrases à cacher, séparés par de nouvelles lignes\n\nLes mots avec des lettres majuscules au milieu doivent être saisis en respectant la casse (ex : iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_phrases_summary">Mots-clés et phrases à cacher, séparés par les nouvelles lignes\n\nLes mots-clés peuvent être des noms de canaux ou tout texte affiché dans les titres vidéo\n\nLes mots avec des lettres majuscules au milieu doivent être saisis avec la casse (i: iPhone, TikTok, LeBlanc)</string>
<string name="revanced_hide_keyword_content_about_title">À propos du filtrage par mots-clés</string>
<string name="revanced_hide_keyword_content_about_summary">Les onglets \"Accueil\" et \"Abonnements\" ainsi que les résultats de la recherche sont filtrés pour masquer le contenu correspondant à des phrases clés\n\nLimitations\n• Il se peut que certains Shorts ne soient pas masqués\n• Il se peut que certains composants de l\'interface utilisateur ne soient pas masqués\n• Les recherches par mots-clés ne pourraient pas donner de résultats</string>
<string name="revanced_hide_keyword_content_about_summary">Les résultats d\'accueil/abonnement/recherche sont filtrés pour masquer le contenu qui correspond aux expressions clés\n\nLimitations\n• Les courts ne peuvent pas être cachés par le nom du canal\n• Certains composants de l\'interface utilisateur ne peuvent pas être cachés\n• La recherche d\'un mot clé peut n\'afficher aucun résultat</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">Correspond à des mots entiers</string>
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<string name="revanced_hide_keyword_content_about_whole_words_summary">Arrondir un mot-clé/phrase avec des guillemets doubles empêchera les correspondances partielles des titres vidéo et des noms de chaîne&lt;br&gt;&lt;br&gt;Par exemple,&lt;br&gt;&lt;b&gt;\"ai\"&lt;/b&gt; masquera la vidéo : &lt;b&gt;How does AI work?&lt;/b&gt;&lt;br&gt;mais ne se cachera pas : &lt;b&gt;What does fair use mean?&lt;/b&gt;</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_common">Mot-clé invalide. Impossible d\'utiliser : \'%s\' comme filtre</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_keyword_toast_invalid_length">Mot-clé invalide. \'%1$s\' contient moins de %2$d caractères</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Le mot-clé «%s» masquera toutes les vidéos</string>
<string name="revanced_hide_keyword_toast_invalid_common">Impossible d\'utiliser le mot clé : %s</string>
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Ajouter des guillemets pour utiliser le mot clé: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">Le mot clé a des déclarations conflictuelles : %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">Le mot clé est trop court et nécessite des guillemets : %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Le mot-clé masquera toutes les vidéos : %s</string>
</patch>
<patch id="ad.general.HideAdsResourcePatch">
<string name="revanced_hide_general_ads_title">Masquer les pubs générales</string>
@@ -432,7 +444,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_home_button_summary_on">Le bouton Accueil est caché</string>
<string name="revanced_hide_home_button_summary_off">Le bouton d\'accueil est affiché</string>
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_hide_shorts_button_title">Cacher les shorts</string>
<string name="revanced_hide_shorts_button_title">Cacher les Shorts</string>
<string name="revanced_hide_shorts_button_summary_on">Le bouton Shorts est masqué</string>
<string name="revanced_hide_shorts_button_summary_off">Le bouton Shorts est affiché</string>
<!-- The Create button has no display name. Translate normally. -->
@@ -617,6 +629,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_save_sound_button_title">Masquer le bouton Enregistrer le son dans la liste de lecture</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">Enregistrer le son dans la playlist est masqué</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Enregistrer le son dans la playlist est affiché</string>
<string name="revanced_hide_shorts_use_this_sound_button_title">Masquer le bouton \"Utiliser ce son\"</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_on">Utiliser ce bouton de son est caché</string>
<string name="revanced_hide_shorts_use_this_sound_button_summary_off">Le bouton \"Utiliser ce son\" est affiché</string>
<string name="revanced_hide_shorts_search_suggestions_title">Masquer les suggestions de recherche</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">Les suggestions de recherche sont masquées</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">Suggestions de recherche affichées</string>
@@ -680,7 +695,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_player_overlay_opacity_invalid_toast">L\'opacité de l\'overlay du joueur doit être comprise entre 0 et 100</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Masqué</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">API des dislikes temporairement indisponible</string>
<string name="revanced_ryd_failure_connection_status_code">N\'aime pas disponible (statut %d)</string>
@@ -776,6 +790,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_general_skipcount_sum_off">Le suivi du comptage des sauts n\'est pas activé</string>
<string name="revanced_sb_general_min_duration">Durée minimale du segment</string>
<string name="revanced_sb_general_min_duration_sum">Les segments plus courts que cette valeur (en secondes) ne seront pas affichés ou ignorés</string>
<string name="revanced_sb_general_min_duration_invalid">Durée non valide</string>
<string name="revanced_sb_general_uuid">Votre identifiant d\'utilisateur privé</string>
<string name="revanced_sb_general_uuid_sum">Cela doit rester confidentiel. Il a l\'équivalent un mot de passe et ne doit être partagé avec personne. Si quelqu\'un l\'obtient, il pourra se faire passer pour vous</string>
<string name="revanced_sb_general_uuid_invalid">L\'identifiant d\'utilisateur privé doit comporter au moins 30 caractères</string>
@@ -876,8 +891,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_time_start">Instant de début du segment</string>
<string name="revanced_sb_new_segment_time_end">Instant de fin du segment</string>
<string name="revanced_sb_new_segment_confirm_title">Est-ce que ces valeurs sont correctes?</string>
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<string name="revanced_sb_new_segment_confirm_content">Le segment est de\n\n%1$s\nà\n%2$s\n\n(%3$s)\n\nPrêt à soumettre ?</string>
<string name="revanced_sb_new_segment_start_is_before_end">Le début doit être avant la fin</string>
<string name="revanced_sb_new_segment_mark_locations_first">Marquez d\'abord deux emplacements sur la barre de temps</string>
@@ -896,6 +909,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_stats_username_changed">Changement de nom dutilisateur effectué</string>
<string name="revanced_sb_stats_reputation">Votre réputation est &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">Vous avez créé &lt;b&gt;%s&lt;/b&gt; segments</string>
<string name="revanced_sb_stats_submissions_sum">Appuyez ici pour voir vos segments</string>
<string name="revanced_sb_stats_saved_zero">Classement du SponsorBlock</string>
<string name="revanced_sb_stats_saved">Vous avez sauvé des personnes des segments &lt;b&gt;%s&lt;/b&gt;</string>
<string name="revanced_sb_stats_saved_sum_zero">Appuyez ici pour voir les statistiques globales et les meilleurs contributeurs</string>
@@ -1117,35 +1131,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_slide_to_seek_summary_on">Glisser pour chercher est activé</string>
<string name="revanced_slide_to_seek_summary_off">Glisser à chercher n\'est pas activé</string>
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
<string name="revanced_spoof_client_screen_title">Tromper le client</string>
<string name="revanced_spoof_client_screen_summary">Tromper le client pour empêcher les problèmes de lecture</string>
<string name="revanced_spoof_client_title">Tromper le client</string>
<string name="revanced_spoof_client_summary_on">Le client est trompé </string>
<string name="revanced_spoof_client_summary_off">Le client n\'est pas trompé\n\nLa lecture de la vidéo peut ne pas fonctionner</string>
<string name="revanced_spoof_client_user_dialog_message">Désactiver ce paramètre peut causer des problèmes de lecture vidéo.</string>
<string name="revanced_spoof_client_use_ios_title">Falsifier le client vers iOS</string>
<string name="revanced_spoof_client_use_ios_summary_on">Le client est actuellement falsifié vers iOS\n\nLes effets secondaires incluent :\n• La vidéo HDR peut ne pas être disponible\n• Regarder l\'historique ne fonctionne pas avec un compte de marque</string>
<string name="revanced_spoof_client_use_ios_summary_off">Le client est actuellement falsifié vers Android VR. Effets secondaires incluant:\n• Aucune vidéo HDR\n• Les vidéos des enfants ne lisent pas\n• Les vidéos en pause peuvent reprendre aléatoirement\n• Les Shorts de basse qualité sur les vignettes de la barre de recherche\n• Le bouton d\'action de téléchargement est caché\n• Les cartes d\'écran de fin sont cachées</string>
<string name="revanced_spoof_client_storyboard_timeout">Tromper les vignettes du client non disponibles (API expirée)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Tromper les vignettes du client temporairement indisponibles : %s</string>
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<string name="revanced_spoof_signature_verification_screen_title">Falsifier la signature de l\'application</string>
<string name="revanced_spoof_signature_verification_screen_summary">Falsifier la signature de l\'application pour empêcher les problèmes de lecture</string>
<string name="revanced_spoof_signature_verification_enabled_title">Falsifier la signature de l\'application</string>
<string name="revanced_spoof_signature_verification_enabled_summary_on">La signature de l\'application falsifiée\n\nLes effets secondaires comprennent :\n• Le débit amélioré n\'est pas disponible\n• Les vidéos ne peuvent pas être téléchargées\n• Aucune vignette de barre de recherche pour les vidéos payantes</string>
<string name="revanced_spoof_signature_verification_enabled_summary_off">La signature de l\'application n\'a pas été falsifiée\n\nLa lecture de la vidéo peut ne pas fonctionner</string>
<string name="revanced_spoof_signature_verification_enabled_user_dialog_message">Désactiver ce paramètre causera des problèmes de lecture vidéo.</string>
<string name="revanced_spoof_signature_in_feed_enabled_title">Falsifier la signature de l\'application dans le flux</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_on">La signature de l\'application falsifiée\n\nLes effets secondaires comprennent :\n• Les vidéos des flux manquent de sous-titres\n• Les vidéos des flux automatiquement jouées apparaîtront dans votre historique de montre</string>
<string name="revanced_spoof_signature_in_feed_enabled_summary_off">La signature de l\'application n\'a pas été falsifiée pour les flux de vidéos\n\nLes vidéos en flux seront lues pendant moins d\'une minute avant de rencontrer des problèmes de lecture</string>
<string name="revanced_spoof_storyboard_title">Falsifier le storyboard</string>
<string name="revanced_spoof_storyboard_summary_on">Feuille de contes</string>
<string name="revanced_spoof_storyboard_summary_off">Le storyboard n\'a pas falsifié\n\nLes effets secondaires incluent :\n• Aucun mode ambiant\n• Les vignettes de Seekbar sont cachées</string>
<string name="revanced_spoof_storyboard_timeout">Spoof storyboard temporairement indisponible (API expirée)</string>
<string name="revanced_spoof_storyboard_io_exception">Falsification de storyboard temporairement indisponible : %s</string>
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">Falsifier les flux vidéo</string>
<string name="revanced_spoof_video_streams_screen_summary">Falsifier les flux vidéo du client pour éviter les problèmes de lecture</string>
<string name="revanced_spoof_video_streams_title">Falsifier les flux vidéo</string>
<string name="revanced_spoof_video_streams_summary_on">Les flux vidéo sont falsifiés</string>
<string name="revanced_spoof_video_streams_summary_off">Les flux vidéo ne sont pas falsifiés\n\nLa lecture de la vidéo pourrait ne pas fonctionner</string>
<string name="revanced_spoof_video_streams_user_dialog_message">Désactiver ce paramètre peut causer des problèmes de lecture vidéo.</string>
<string name="revanced_spoof_video_streams_client_type_title">Client par défaut</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Forcer AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Le codec vidéo est AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Le codec vidéo est VP9 ou AV1</string>
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Votre appareil ne possède pas de décodage matériel VP9, et ce paramètre est toujours activé lorsque la falsification du client est activée</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Activer ceci peut améliorer la durée de vie de la batterie et corriger les erreurs de lecture.\n\nAVC a une résolution maximale de 1080p, et la lecture vidéo utilisera plus de données internet que VP9 ou AV1.</string>
<string name="revanced_spoof_video_streams_about_ios_title">Effets secondaires d\'usurpation iOS</string>
<string name="revanced_spoof_video_streams_about_ios_summary">• Les films ou les vidéos payantes pourraient ne pas être lus\n• Les diffusions en direct commencent au début</string>
<string name="revanced_spoof_video_streams_about_android_vr_title">Effets secondaires de l\'usurpation VR Android</string>
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Le menu de la piste audio est manquant</string>
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

File diff suppressed because it is too large Load Diff

View File

@@ -32,15 +32,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<!-- Settings about dialog. -->
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
</patch>
<patch id="misc.settings.SettingsPatch">
</patch>
<patch id="misc.debugging.DebuggingPatch">
@@ -57,7 +58,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- '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. -->
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
<patch id="ad.general.HideAdsResourcePatch">
@@ -171,8 +172,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.sponsorblock.SponsorBlockResourcePatch">
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<!-- Shown in the settings preferences, and translations can be any text length. -->
</patch>
<patch id="layout.spoofappversion.SpoofAppVersionPatch">
@@ -234,10 +233,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.EnableSlideToSeekPatch">
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

View File

@@ -32,15 +32,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
-->
<resources>
<app id="shared">
<patch id="misc.checks.BaseCheckEnvironmentPatch">
</patch>
<patch id="misc.settings.BaseSettingsResourcePatch">
<!-- Settings about dialog. -->
</patch>
<patch id="misc.gms.BaseGmsCoreSupportResourcePatch">
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
</app>
<app id="youtube">
<patch id="misc.settings.SettingsResourcePatch">
</patch>
<patch id="misc.settings.SettingsPatch">
</patch>
<patch id="misc.debugging.DebuggingPatch">
@@ -57,7 +58,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<!-- '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. -->
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
</patch>
<patch id="ad.general.HideAdsResourcePatch">
@@ -171,8 +172,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
<patch id="layout.sponsorblock.SponsorBlockResourcePatch">
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<!-- Do not rearrange the (hour):(minute):second) time format operators here.
YT shows the same seekbar time format for all languages, and this string is confirming the segment time as it appears in the seekbar. -->
<!-- Shown in the settings preferences, and translations can be any text length. -->
</patch>
<patch id="layout.spoofappversion.SpoofAppVersionPatch">
@@ -234,10 +233,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
</patch>
<patch id="interaction.seekbar.EnableSlideToSeekPatch">
</patch>
<patch id="misc.fix.playback.SpoofClientPatch">
</patch>
<!-- This patch is no longer used, these strings are not in use, and these strings will be deleted in the future. -->
<patch id="misc.fix.playback.SpoofSignaturePatch">
<patch id="misc.fix.playback.SpoofVideoStreamsPatch">
</patch>
<!-- This patch is no longer used and these strings will soon be deleted. -->
<patch id="video.hdrbrightness.HDRBrightnessPatch">

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