mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-07 18:03:55 +01:00
Compare commits
44 Commits
v5.42.0-de
...
v5.43.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4547ecb73c | ||
|
|
50f0b9c5ee | ||
|
|
a8c4bdb8a6 | ||
|
|
6555f6e6f8 | ||
|
|
a0e2c5c7b9 | ||
|
|
54846253d7 | ||
|
|
a98e8f7370 | ||
|
|
2d928e0cd6 | ||
|
|
be2b144cc9 | ||
|
|
52c0bb6aa2 | ||
|
|
38a49cc2a1 | ||
|
|
91044b3a50 | ||
|
|
fd4b2e1bb9 | ||
|
|
d0f20c8c7f | ||
|
|
d65dbc749c | ||
|
|
143dcef2b8 | ||
|
|
dbfc5be464 | ||
|
|
0fe545cad6 | ||
|
|
feca17be68 | ||
|
|
7afeaebb5c | ||
|
|
60a581a632 | ||
|
|
104d096ada | ||
|
|
19dcbd8efb | ||
|
|
a50f3b5177 | ||
|
|
64d22a9c31 | ||
|
|
bd4ba2dae8 | ||
|
|
f51b260d1d | ||
|
|
63be54dd09 | ||
|
|
bb222d7a26 | ||
|
|
f03256c471 | ||
|
|
fe16433f20 | ||
|
|
2154d89242 | ||
|
|
277a8b6b47 | ||
|
|
20c413120b | ||
|
|
5ed092bb7d | ||
|
|
19949e1695 | ||
|
|
ec0acc0f13 | ||
|
|
a30a849e6e | ||
|
|
603025a122 | ||
|
|
9441e7acb4 | ||
|
|
963a4ef43f | ||
|
|
0acba30245 | ||
|
|
6b26346914 | ||
|
|
b1511c732d |
176
CHANGELOG.md
176
CHANGELOG.md
@@ -1,3 +1,179 @@
|
||||
# [5.43.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.42.2-dev.3...v5.43.0-dev.1) (2025-10-11)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram:** Add `Hide suggested content` patch ([#6075](https://github.com/ReVanced/revanced-patches/issues/6075)) ([50f0b9c](https://github.com/ReVanced/revanced-patches/commit/50f0b9c5eee95ff5f9974e344802e1d2a4aab47b))
|
||||
|
||||
## [5.42.2-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.42.2-dev.2...v5.42.2-dev.3) (2025-10-11)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Custom branding:** Do not add a broken custom icon if the user provides an invalid custom icon path ([6555f6e](https://github.com/ReVanced/revanced-patches/commit/6555f6e6f8b52c2f1ddab1f52c6704cd2d8cfc12))
|
||||
|
||||
## [5.42.2-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.42.2-dev.1...v5.42.2-dev.2) (2025-10-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **X / Twitter - Change Link Sharing Domain:** Change link domain of share copy action ([#6091](https://github.com/ReVanced/revanced-patches/issues/6091)) ([5484625](https://github.com/ReVanced/revanced-patches/commit/54846253d748f4e7e30b2bba427c7d2fb9c341e2))
|
||||
|
||||
## [5.42.2-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.42.1...v5.42.2-dev.1) (2025-10-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Instagram - Change sharing domain:** Display patch option ([#6089](https://github.com/ReVanced/revanced-patches/issues/6089)) ([be2b144](https://github.com/ReVanced/revanced-patches/commit/be2b144cc9c4108ec37e16f3dd20573d88ffaa2b))
|
||||
|
||||
## [5.42.1](https://github.com/ReVanced/revanced-patches/compare/v5.42.0...v5.42.1) (2025-10-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Custom Branding:** Resolve startup crash with root installation ([fd4b2e1](https://github.com/ReVanced/revanced-patches/commit/fd4b2e1bb98c6e507178e5b46b896ef7d320bc3d))
|
||||
|
||||
## [5.42.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.42.0...v5.42.1-dev.1) (2025-10-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Custom Branding:** Resolve startup crash with root installation ([fd4b2e1](https://github.com/ReVanced/revanced-patches/commit/fd4b2e1bb98c6e507178e5b46b896ef7d320bc3d))
|
||||
|
||||
# [5.42.0](https://github.com/ReVanced/revanced-patches/compare/v5.41.0...v5.42.0) (2025-10-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Custom branding:** Update ReVanced logo ([#6049](https://github.com/ReVanced/revanced-patches/issues/6049)) ([9441e7a](https://github.com/ReVanced/revanced-patches/commit/9441e7acb4817e12d1443d438ef6c448518bd614))
|
||||
* **Custom branding:** Update ReVanced logo sizing ([#6029](https://github.com/ReVanced/revanced-patches/issues/6029)) ([ae4b947](https://github.com/ReVanced/revanced-patches/commit/ae4b9474d3fb62528fc21397c19954d31605e9da))
|
||||
* **Instagram - Hide navigation buttons:** Resolve app startup crash ([080a226](https://github.com/ReVanced/revanced-patches/commit/080a2266146798be71789c939deef2f289697523))
|
||||
* **Spotify:** Change `Hide Create button` patch to default off ([#6067](https://github.com/ReVanced/revanced-patches/issues/6067)) ([19949e1](https://github.com/ReVanced/revanced-patches/commit/19949e1695cc252ff0f94a33b6e3fb62e967d7fd))
|
||||
* **X / Twitter:** Remove non functional and obsolete patch `Open links with app chooser` ([#6033](https://github.com/ReVanced/revanced-patches/issues/6033)) ([673609c](https://github.com/ReVanced/revanced-patches/commit/673609c2aa87988cdc138eab101b9750fe6a7b62))
|
||||
* **YouTube - Force original audio:** Change patch to default on ([#6070](https://github.com/ReVanced/revanced-patches/issues/6070)) ([bd4ba2d](https://github.com/ReVanced/revanced-patches/commit/bd4ba2dae85ee6fd8d7e6078c3de775ca336e0b6))
|
||||
* **YouTube - Force original language:** Resolve some videos using Swedish audio track ([9d67316](https://github.com/ReVanced/revanced-patches/commit/9d6731660ba0e19b863d05d54aa04f74a879f69b))
|
||||
* **YouTube - Hide end screen cards:** Hide new type of end screen card ([#6027](https://github.com/ReVanced/revanced-patches/issues/6027)) ([76b0364](https://github.com/ReVanced/revanced-patches/commit/76b0364c5b5562c6a0d178d2bbe5b220f48aaca9))
|
||||
* **YouTube - Spoof video streams:** Add "Allow Android VR AV1" setting ([#6071](https://github.com/ReVanced/revanced-patches/issues/6071)) ([f03256c](https://github.com/ReVanced/revanced-patches/commit/f03256c471e1ee6a12267c1b56b531ca8f89278c))
|
||||
* **YouTube - Spoof video streams:** Do not allow VR AV1 if "Force AVC" is enabled ([7afeaeb](https://github.com/ReVanced/revanced-patches/commit/7afeaebb5cc22eb4f4512d8aa0cf4e835e7a2daf))
|
||||
* **YouTube - Spoof video streams:** Resolve playback dropping frames ([#6051](https://github.com/ReVanced/revanced-patches/issues/6051)) ([a62ee43](https://github.com/ReVanced/revanced-patches/commit/a62ee43441b197f5c8352ae373bb8919ad66f0bd))
|
||||
* **YouTube Music - GmsCore support:** Handle sharing links to certain apps such as Instagram ([#6026](https://github.com/ReVanced/revanced-patches/issues/6026)) ([328234f](https://github.com/ReVanced/revanced-patches/commit/328234f39ada81542e596f04e8ce410c787c15c8))
|
||||
* **YouTube Music - Hide cast button:** Fix patching error ([28799a5](https://github.com/ReVanced/revanced-patches/commit/28799a548a73651134ef304cb6cb542cf8e55abe))
|
||||
* **YouTube Music - Hide cast button:** Resolve button not hiding ([7817885](https://github.com/ReVanced/revanced-patches/commit/7817885cffed66608039ab45881537cbd3069c9d))
|
||||
* **YouTube:** Resolve UI components not hiding for some users ([#6054](https://github.com/ReVanced/revanced-patches/issues/6054)) ([6b26346](https://github.com/ReVanced/revanced-patches/commit/6b2634691423f5ce25a28b3f2fbc420977b81748))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Custom branding:** Add in-app settings to change icon and name ([#6059](https://github.com/ReVanced/revanced-patches/issues/6059)) ([a50f3b5](https://github.com/ReVanced/revanced-patches/commit/a50f3b5177808f07d84041c946caccb5a08ad387))
|
||||
* **Instagram:** Add `Custom share domain` patch ([#5998](https://github.com/ReVanced/revanced-patches/issues/5998)) ([20c4131](https://github.com/ReVanced/revanced-patches/commit/20c413120bad97af6121718e76b22a1b5540aa44))
|
||||
* **Instagram:** Add `Enable developer menu` patch ([#6043](https://github.com/ReVanced/revanced-patches/issues/6043)) ([2154d89](https://github.com/ReVanced/revanced-patches/commit/2154d89242fd8d7f7460145d5d35a4f1986944a3))
|
||||
* **Instagram:** Add `Open links externally` patch ([#6012](https://github.com/ReVanced/revanced-patches/issues/6012)) ([08e8ead](https://github.com/ReVanced/revanced-patches/commit/08e8ead04ffff47a4608a3db7aadc8d5feccd4ad))
|
||||
* **Instagram:** Add `Sanitize sharing links` patch ([#5986](https://github.com/ReVanced/revanced-patches/issues/5986)) ([963a4ef](https://github.com/ReVanced/revanced-patches/commit/963a4ef43fd513de7a2d7d019992f06b62fdcc10))
|
||||
* **Viber:** Add `Hide navigation buttons` patch ([#5991](https://github.com/ReVanced/revanced-patches/issues/5991)) ([5cb46c4](https://github.com/ReVanced/revanced-patches/commit/5cb46c4e9180ebc16eddb983dad73d137d8ec047))
|
||||
* **YouTube Music:** Add `Custom branding` patch ([#6007](https://github.com/ReVanced/revanced-patches/issues/6007)) ([4c8b56f](https://github.com/ReVanced/revanced-patches/commit/4c8b56f5466b244737f501654eb7c5d34b6b2f88))
|
||||
* **YouTube Music:** Add `Force original audio` patch ([#6036](https://github.com/ReVanced/revanced-patches/issues/6036)) ([d0d53d1](https://github.com/ReVanced/revanced-patches/commit/d0d53d109e451759a029326873adfa36fba12b23))
|
||||
|
||||
# [5.42.0](https://github.com/ReVanced/revanced-patches/compare/v5.41.0...v5.42.0) (2025-10-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Custom branding:** Update ReVanced logo ([#6049](https://github.com/ReVanced/revanced-patches/issues/6049)) ([9441e7a](https://github.com/ReVanced/revanced-patches/commit/9441e7acb4817e12d1443d438ef6c448518bd614))
|
||||
* **Custom branding:** Update ReVanced logo sizing ([#6029](https://github.com/ReVanced/revanced-patches/issues/6029)) ([ae4b947](https://github.com/ReVanced/revanced-patches/commit/ae4b9474d3fb62528fc21397c19954d31605e9da))
|
||||
* **Instagram - Hide navigation buttons:** Resolve app startup crash ([080a226](https://github.com/ReVanced/revanced-patches/commit/080a2266146798be71789c939deef2f289697523))
|
||||
* **Spotify:** Change `Hide Create button` patch to default off ([#6067](https://github.com/ReVanced/revanced-patches/issues/6067)) ([19949e1](https://github.com/ReVanced/revanced-patches/commit/19949e1695cc252ff0f94a33b6e3fb62e967d7fd))
|
||||
* **X / Twitter:** Remove non functional and obsolete patch `Open links with app chooser` ([#6033](https://github.com/ReVanced/revanced-patches/issues/6033)) ([673609c](https://github.com/ReVanced/revanced-patches/commit/673609c2aa87988cdc138eab101b9750fe6a7b62))
|
||||
* **YouTube - Force original audio:** Change patch to default on ([#6070](https://github.com/ReVanced/revanced-patches/issues/6070)) ([bd4ba2d](https://github.com/ReVanced/revanced-patches/commit/bd4ba2dae85ee6fd8d7e6078c3de775ca336e0b6))
|
||||
* **YouTube - Force original language:** Resolve some videos using Swedish audio track ([9d67316](https://github.com/ReVanced/revanced-patches/commit/9d6731660ba0e19b863d05d54aa04f74a879f69b))
|
||||
* **YouTube - Hide end screen cards:** Hide new type of end screen card ([#6027](https://github.com/ReVanced/revanced-patches/issues/6027)) ([76b0364](https://github.com/ReVanced/revanced-patches/commit/76b0364c5b5562c6a0d178d2bbe5b220f48aaca9))
|
||||
* **YouTube - Spoof video streams:** Add "Allow Android VR AV1" setting ([#6071](https://github.com/ReVanced/revanced-patches/issues/6071)) ([f03256c](https://github.com/ReVanced/revanced-patches/commit/f03256c471e1ee6a12267c1b56b531ca8f89278c))
|
||||
* **YouTube - Spoof video streams:** Do not allow VR AV1 if "Force AVC" is enabled ([7afeaeb](https://github.com/ReVanced/revanced-patches/commit/7afeaebb5cc22eb4f4512d8aa0cf4e835e7a2daf))
|
||||
* **YouTube - Spoof video streams:** Resolve playback dropping frames ([#6051](https://github.com/ReVanced/revanced-patches/issues/6051)) ([a62ee43](https://github.com/ReVanced/revanced-patches/commit/a62ee43441b197f5c8352ae373bb8919ad66f0bd))
|
||||
* **YouTube Music - GmsCore support:** Handle sharing links to certain apps such as Instagram ([#6026](https://github.com/ReVanced/revanced-patches/issues/6026)) ([328234f](https://github.com/ReVanced/revanced-patches/commit/328234f39ada81542e596f04e8ce410c787c15c8))
|
||||
* **YouTube Music - Hide cast button:** Fix patching error ([28799a5](https://github.com/ReVanced/revanced-patches/commit/28799a548a73651134ef304cb6cb542cf8e55abe))
|
||||
* **YouTube Music - Hide cast button:** Resolve button not hiding ([7817885](https://github.com/ReVanced/revanced-patches/commit/7817885cffed66608039ab45881537cbd3069c9d))
|
||||
* **YouTube:** Resolve UI components not hiding for some users ([#6054](https://github.com/ReVanced/revanced-patches/issues/6054)) ([6b26346](https://github.com/ReVanced/revanced-patches/commit/6b2634691423f5ce25a28b3f2fbc420977b81748))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Custom branding:** Add in-app settings to change icon and name ([#6059](https://github.com/ReVanced/revanced-patches/issues/6059)) ([a50f3b5](https://github.com/ReVanced/revanced-patches/commit/a50f3b5177808f07d84041c946caccb5a08ad387))
|
||||
* **Instagram:** Add `Custom share domain` patch ([#5998](https://github.com/ReVanced/revanced-patches/issues/5998)) ([20c4131](https://github.com/ReVanced/revanced-patches/commit/20c413120bad97af6121718e76b22a1b5540aa44))
|
||||
* **Instagram:** Add `Enable developer menu` patch ([#6043](https://github.com/ReVanced/revanced-patches/issues/6043)) ([2154d89](https://github.com/ReVanced/revanced-patches/commit/2154d89242fd8d7f7460145d5d35a4f1986944a3))
|
||||
* **Instagram:** Add `Open links externally` patch ([#6012](https://github.com/ReVanced/revanced-patches/issues/6012)) ([08e8ead](https://github.com/ReVanced/revanced-patches/commit/08e8ead04ffff47a4608a3db7aadc8d5feccd4ad))
|
||||
* **Instagram:** Add `Sanitize sharing links` patch ([#5986](https://github.com/ReVanced/revanced-patches/issues/5986)) ([963a4ef](https://github.com/ReVanced/revanced-patches/commit/963a4ef43fd513de7a2d7d019992f06b62fdcc10))
|
||||
* **Viber:** Add `Hide navigation buttons` patch ([#5991](https://github.com/ReVanced/revanced-patches/issues/5991)) ([5cb46c4](https://github.com/ReVanced/revanced-patches/commit/5cb46c4e9180ebc16eddb983dad73d137d8ec047))
|
||||
* **YouTube Music:** Add `Custom branding` patch ([#6007](https://github.com/ReVanced/revanced-patches/issues/6007)) ([4c8b56f](https://github.com/ReVanced/revanced-patches/commit/4c8b56f5466b244737f501654eb7c5d34b6b2f88))
|
||||
* **YouTube Music:** Add `Force original audio` patch ([#6036](https://github.com/ReVanced/revanced-patches/issues/6036)) ([d0d53d1](https://github.com/ReVanced/revanced-patches/commit/d0d53d109e451759a029326873adfa36fba12b23))
|
||||
|
||||
# [5.42.0-dev.19](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.18...v5.42.0-dev.19) (2025-10-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Do not allow VR AV1 if "Force AVC" is enabled ([7afeaeb](https://github.com/ReVanced/revanced-patches/commit/7afeaebb5cc22eb4f4512d8aa0cf4e835e7a2daf))
|
||||
|
||||
# [5.42.0-dev.18](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.17...v5.42.0-dev.18) (2025-10-07)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Custom branding:** Add in-app settings to change icon and name ([#6059](https://github.com/ReVanced/revanced-patches/issues/6059)) ([a50f3b5](https://github.com/ReVanced/revanced-patches/commit/a50f3b5177808f07d84041c946caccb5a08ad387))
|
||||
|
||||
# [5.42.0-dev.17](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.16...v5.42.0-dev.17) (2025-10-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Force original audio:** Change patch to default on ([#6070](https://github.com/ReVanced/revanced-patches/issues/6070)) ([bd4ba2d](https://github.com/ReVanced/revanced-patches/commit/bd4ba2dae85ee6fd8d7e6078c3de775ca336e0b6))
|
||||
|
||||
# [5.42.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.15...v5.42.0-dev.16) (2025-10-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Add "Allow Android VR AV1" setting ([#6071](https://github.com/ReVanced/revanced-patches/issues/6071)) ([f03256c](https://github.com/ReVanced/revanced-patches/commit/f03256c471e1ee6a12267c1b56b531ca8f89278c))
|
||||
|
||||
# [5.42.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.14...v5.42.0-dev.15) (2025-10-07)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram:** Add `Enable developer menu` patch ([#6043](https://github.com/ReVanced/revanced-patches/issues/6043)) ([2154d89](https://github.com/ReVanced/revanced-patches/commit/2154d89242fd8d7f7460145d5d35a4f1986944a3))
|
||||
|
||||
# [5.42.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.13...v5.42.0-dev.14) (2025-10-07)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram:** Add `Custom share domain` patch ([#5998](https://github.com/ReVanced/revanced-patches/issues/5998)) ([20c4131](https://github.com/ReVanced/revanced-patches/commit/20c413120bad97af6121718e76b22a1b5540aa44))
|
||||
|
||||
# [5.42.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.12...v5.42.0-dev.13) (2025-10-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Spotify:** Change `Hide Create button` patch to default off ([#6067](https://github.com/ReVanced/revanced-patches/issues/6067)) ([19949e1](https://github.com/ReVanced/revanced-patches/commit/19949e1695cc252ff0f94a33b6e3fb62e967d7fd))
|
||||
|
||||
# [5.42.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.11...v5.42.0-dev.12) (2025-10-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Custom branding:** Update ReVanced logo ([#6049](https://github.com/ReVanced/revanced-patches/issues/6049)) ([9441e7a](https://github.com/ReVanced/revanced-patches/commit/9441e7acb4817e12d1443d438ef6c448518bd614))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram:** Add `Sanitize sharing links` patch ([#5986](https://github.com/ReVanced/revanced-patches/issues/5986)) ([963a4ef](https://github.com/ReVanced/revanced-patches/commit/963a4ef43fd513de7a2d7d019992f06b62fdcc10))
|
||||
|
||||
# [5.42.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.10...v5.42.0-dev.11) (2025-10-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube:** Resolve UI components not hiding for some users ([#6054](https://github.com/ReVanced/revanced-patches/issues/6054)) ([6b26346](https://github.com/ReVanced/revanced-patches/commit/6b2634691423f5ce25a28b3f2fbc420977b81748))
|
||||
|
||||
# [5.42.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.9...v5.42.0-dev.10) (2025-10-02)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package app.revanced.extension.instagram.misc.privacy;
|
||||
|
||||
import app.revanced.extension.shared.privacy.LinkSanitizer;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class SanitizeSharingLinksPatch {
|
||||
private static final LinkSanitizer sanitizer = new LinkSanitizer("igsh");
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static String sanitizeSharingLink(String url) {
|
||||
return sanitizer.sanitizeUrlString(url);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package app.revanced.extension.instagram.misc.share.domain;
|
||||
|
||||
import android.net.Uri;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class ChangeLinkSharingDomainPatch {
|
||||
|
||||
private static String getCustomShareDomain() {
|
||||
// Method is modified during patching.
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static String setCustomShareDomain(String url) {
|
||||
try {
|
||||
Uri uri = Uri.parse(url);
|
||||
Uri.Builder builder = uri
|
||||
.buildUpon()
|
||||
.authority(getCustomShareDomain())
|
||||
.clearQuery();
|
||||
|
||||
String patchedUrl = builder.build().toString();
|
||||
Logger.printInfo(() -> "Domain change from : " + url + " to: " + patchedUrl);
|
||||
return patchedUrl;
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "setCustomShareDomain failure with " + url, ex);
|
||||
return url;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package app.revanced.extension.instagram.misc.share.privacy;
|
||||
|
||||
import app.revanced.extension.shared.privacy.LinkSanitizer;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class SanitizeSharingLinksPatch {
|
||||
private static final LinkSanitizer sanitizer = new LinkSanitizer("igsh");
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static String sanitizeSharingLink(String url) {
|
||||
return sanitizer.sanitizeUrlString(url);
|
||||
}
|
||||
}
|
||||
@@ -31,9 +31,6 @@ import app.revanced.extension.shared.ui.CustomDialog;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class GmsCoreSupport {
|
||||
private static final String PACKAGE_NAME_YOUTUBE = "com.google.android.youtube";
|
||||
private static final String PACKAGE_NAME_YOUTUBE_MUSIC = "com.google.android.apps.youtube.music";
|
||||
|
||||
private static final String GMS_CORE_PACKAGE_NAME
|
||||
= getGmsCoreVendorGroupId() + ".android.gms";
|
||||
private static final Uri GMS_CORE_PROVIDER
|
||||
@@ -53,6 +50,20 @@ public class GmsCoreSupport {
|
||||
@Nullable
|
||||
private static volatile Boolean DONT_KILL_MY_APP_MANUFACTURER_SUPPORTED;
|
||||
|
||||
private static String getOriginalPackageName() {
|
||||
return null; // Modified during patching.
|
||||
}
|
||||
|
||||
/**
|
||||
* @return If the current package name is the same as the original unpatched app.
|
||||
* If `GmsCore support` was not included during patching, this returns true;
|
||||
*/
|
||||
public static boolean isPackageNameOriginal() {
|
||||
String originalPackageName = getOriginalPackageName();
|
||||
return originalPackageName == null
|
||||
|| originalPackageName.equals(Utils.getContext().getPackageName());
|
||||
}
|
||||
|
||||
private static void open(String queryOrLink) {
|
||||
Logger.printInfo(() -> "Opening link: " + queryOrLink);
|
||||
|
||||
@@ -113,11 +124,10 @@ public class GmsCoreSupport {
|
||||
// Verify the user has not included GmsCore for a root installation.
|
||||
// GmsCore Support changes the package name, but with a mounted installation
|
||||
// all manifest changes are ignored and the original package name is used.
|
||||
String packageName = context.getPackageName();
|
||||
if (packageName.equals(PACKAGE_NAME_YOUTUBE) || packageName.equals(PACKAGE_NAME_YOUTUBE_MUSIC)) {
|
||||
if (isPackageNameOriginal()) {
|
||||
Logger.printInfo(() -> "App is mounted with root, but GmsCore patch was included");
|
||||
// Cannot use localize text here, since the app will load
|
||||
// resources from the unpatched app and all patch strings are missing.
|
||||
// Cannot use localize text here, since the app will load resources
|
||||
// from the unpatched app and all patch strings are missing.
|
||||
Utils.showToastLong("The 'GmsCore support' patch breaks mount installations");
|
||||
|
||||
// Do not exit. If the app exits before launch completes (and without
|
||||
@@ -250,8 +260,7 @@ public class GmsCoreSupport {
|
||||
};
|
||||
}
|
||||
|
||||
// Modified by a patch. Do not touch.
|
||||
private static String getGmsCoreVendorGroupId() {
|
||||
return "app.revanced";
|
||||
return "app.revanced"; // Modified during patching.
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
package app.revanced.extension.shared.patches;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import app.revanced.extension.shared.GmsCoreSupport;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
|
||||
/**
|
||||
* Patch shared by YouTube and YT Music.
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public class CustomBrandingPatch {
|
||||
|
||||
// Important: In the future, additional branding themes can be added but all existing and prior
|
||||
// themes cannot be removed or renamed.
|
||||
//
|
||||
// This is because if a user has a branding theme selected, then only that launch alias is enabled.
|
||||
// If a future update removes or renames that alias, then after updating the app is effectively
|
||||
// broken and it cannot be opened and not even clearing the app data will fix it.
|
||||
// In that situation the only fix is to completely uninstall and reinstall again.
|
||||
//
|
||||
// The most that can be done is to hide a theme from the UI and keep the alias with dummy data.
|
||||
public enum BrandingTheme {
|
||||
/**
|
||||
* Original unpatched icon. Must be first enum.
|
||||
*/
|
||||
ORIGINAL("revanced_original"),
|
||||
ROUNDED("revanced_rounded"),
|
||||
MINIMAL("revanced_minimal"),
|
||||
SCALED("revanced_scaled"),
|
||||
/**
|
||||
* User provided custom icon. Must be the last enum.
|
||||
*/
|
||||
CUSTOM("revanced_custom");
|
||||
|
||||
public final String themeAlias;
|
||||
|
||||
BrandingTheme(String themeAlias) {
|
||||
this.themeAlias = themeAlias;
|
||||
}
|
||||
|
||||
private String packageAndNameIndexToClassAlias(String packageName, int appIndex) {
|
||||
if (appIndex <= 0) {
|
||||
throw new IllegalArgumentException("App index starts at index 1");
|
||||
}
|
||||
return packageName + '.' + themeAlias + '_' + appIndex;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*
|
||||
* The total number of app name aliases, including dummy aliases.
|
||||
*/
|
||||
private static int numberOfPresetAppNames() {
|
||||
// Modified during patching.
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
public static void setBranding() {
|
||||
try {
|
||||
if (GmsCoreSupport.isPackageNameOriginal()) {
|
||||
Logger.printInfo(() -> "App is root mounted. Cannot dynamically change app icon");
|
||||
return;
|
||||
}
|
||||
|
||||
Context context = Utils.getContext();
|
||||
PackageManager pm = context.getPackageManager();
|
||||
String packageName = context.getPackageName();
|
||||
|
||||
BrandingTheme selectedBranding = BaseSettings.CUSTOM_BRANDING_ICON.get();
|
||||
final int selectedNameIndex = BaseSettings.CUSTOM_BRANDING_NAME.get();
|
||||
ComponentName componentToEnable = null;
|
||||
ComponentName defaultComponent = null;
|
||||
List<ComponentName> componentsToDisable = new ArrayList<>();
|
||||
|
||||
for (BrandingTheme theme : BrandingTheme.values()) {
|
||||
// Must always update all aliases including custom alias (last index).
|
||||
final int numberOfPresetAppNames = numberOfPresetAppNames();
|
||||
|
||||
// App name indices starts at 1.
|
||||
for (int index = 1; index <= numberOfPresetAppNames; index++) {
|
||||
String aliasClass = theme.packageAndNameIndexToClassAlias(packageName, index);
|
||||
ComponentName component = new ComponentName(packageName, aliasClass);
|
||||
if (defaultComponent == null) {
|
||||
// Default is always the first alias.
|
||||
defaultComponent = component;
|
||||
}
|
||||
|
||||
if (index == selectedNameIndex && theme == selectedBranding) {
|
||||
componentToEnable = component;
|
||||
} else {
|
||||
componentsToDisable.add(component);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (componentToEnable == null) {
|
||||
// User imported a bad app name index value. Either the imported data
|
||||
// was corrupted, or they previously had custom name enabled and the app
|
||||
// no longer has a custom name specified.
|
||||
Utils.showToastLong("Custom branding reset");
|
||||
BaseSettings.CUSTOM_BRANDING_ICON.resetToDefault();
|
||||
BaseSettings.CUSTOM_BRANDING_NAME.resetToDefault();
|
||||
|
||||
componentToEnable = defaultComponent;
|
||||
componentsToDisable.remove(defaultComponent);
|
||||
}
|
||||
|
||||
for (ComponentName disable : componentsToDisable) {
|
||||
// Use info logging because if the alias status become corrupt the app cannot launch.
|
||||
Logger.printInfo(() -> "Disabling: " + disable.getClassName());
|
||||
pm.setComponentEnabledSetting(disable,
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
|
||||
}
|
||||
|
||||
ComponentName componentToEnableFinal = componentToEnable;
|
||||
Logger.printInfo(() -> "Enabling: " + componentToEnableFinal.getClassName());
|
||||
pm.setComponentEnabledSetting(componentToEnable,
|
||||
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "setBranding failure", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package app.revanced.extension.shared.patches;
|
||||
|
||||
import app.revanced.extension.shared.privacy.LinkSanitizer;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
|
||||
/**
|
||||
@@ -7,17 +8,18 @@ import app.revanced.extension.shared.settings.BaseSettings;
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public final class SanitizeSharingLinksPatch {
|
||||
private static final String NEW_TRACKING_PARAMETER_REGEX = ".si=.+";
|
||||
private static final String OLD_TRACKING_PARAMETER_REGEX = ".feature=.+";
|
||||
|
||||
private static final LinkSanitizer sanitizer = new LinkSanitizer(
|
||||
"si",
|
||||
"feature" // Old tracking parameter name, and may be obsolete.
|
||||
);
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static String sanitize(String url) {
|
||||
if (BaseSettings.SANITIZE_SHARED_LINKS.get()) {
|
||||
url = url
|
||||
.replaceAll(NEW_TRACKING_PARAMETER_REGEX, "")
|
||||
.replaceAll(OLD_TRACKING_PARAMETER_REGEX, "");
|
||||
url = sanitizer.sanitizeUrlString(url);
|
||||
}
|
||||
|
||||
if (BaseSettings.REPLACE_MUSIC_LINKS_WITH_YOUTUBE.get()) {
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package app.revanced.extension.shared.privacy;
|
||||
|
||||
import android.net.Uri;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
|
||||
/**
|
||||
* Strips away specific parameters from URLs.
|
||||
*/
|
||||
public class LinkSanitizer {
|
||||
|
||||
private final Collection<String> parametersToRemove;
|
||||
|
||||
public LinkSanitizer(String ... parametersToRemove) {
|
||||
final int parameterCount = parametersToRemove.length;
|
||||
if (parameterCount == 0) {
|
||||
throw new IllegalArgumentException("No parameters specified");
|
||||
}
|
||||
|
||||
// List is faster if only checking a few parameters.
|
||||
this.parametersToRemove = parameterCount > 4
|
||||
? Set.of(parametersToRemove)
|
||||
: List.of(parametersToRemove);
|
||||
}
|
||||
|
||||
public String sanitizeUrlString(String url) {
|
||||
try {
|
||||
return sanitizeUri(Uri.parse(url)).toString();
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "sanitizeUrlString failure: " + url, ex);
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
public Uri sanitizeUri(Uri uri) {
|
||||
try {
|
||||
Uri.Builder builder = uri.buildUpon().clearQuery();
|
||||
|
||||
for (String paramName : uri.getQueryParameterNames()) {
|
||||
if (!parametersToRemove.contains(paramName)) {
|
||||
for (String value : uri.getQueryParameters(paramName)) {
|
||||
builder.appendQueryParameter(paramName, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Uri sanitizedUrl = builder.build();
|
||||
Logger.printInfo(() -> "Sanitized url: " + uri + " to: " + sanitizedUrl);
|
||||
|
||||
return sanitizedUrl;
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "sanitizeUri failure: " + uri, ex);
|
||||
return uri;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package app.revanced.extension.shared.settings;
|
||||
|
||||
import static java.lang.Boolean.FALSE;
|
||||
import static java.lang.Boolean.TRUE;
|
||||
import static app.revanced.extension.shared.patches.CustomBrandingPatch.BrandingTheme;
|
||||
import static app.revanced.extension.shared.settings.Setting.parent;
|
||||
import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.AudioStreamLanguageOverrideAvailability;
|
||||
|
||||
@@ -40,4 +41,7 @@ public class BaseSettings {
|
||||
public static final BooleanSetting REPLACE_MUSIC_LINKS_WITH_YOUTUBE = new BooleanSetting("revanced_replace_music_with_youtube", FALSE);
|
||||
|
||||
public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false);
|
||||
|
||||
public static final EnumSetting<BrandingTheme> CUSTOM_BRANDING_ICON = new EnumSetting<>("revanced_custom_branding_icon", BrandingTheme.ORIGINAL, true);
|
||||
public static final IntegerSetting CUSTOM_BRANDING_NAME = new IntegerSetting("revanced_custom_branding_name", 1, true);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
import static app.revanced.extension.shared.requests.Route.Method.GET;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
@@ -125,6 +126,8 @@ public class ReVancedAboutPreference extends Preference {
|
||||
|
||||
{
|
||||
setOnPreferenceClickListener(pref -> {
|
||||
Context context = pref.getContext();
|
||||
|
||||
// Show a progress spinner if the social links are not fetched yet.
|
||||
if (!AboutLinksRoutes.hasFetchedLinks() && Utils.isNetworkConnected()) {
|
||||
// Show a progress spinner, but only if the api fetch takes more than a half a second.
|
||||
@@ -137,17 +140,18 @@ public class ReVancedAboutPreference extends Preference {
|
||||
handler.postDelayed(showDialogRunnable, delayToShowProgressSpinner);
|
||||
|
||||
Utils.runOnBackgroundThread(() ->
|
||||
fetchLinksAndShowDialog(handler, showDialogRunnable, progress));
|
||||
fetchLinksAndShowDialog(context, handler, showDialogRunnable, progress));
|
||||
} else {
|
||||
// No network call required and can run now.
|
||||
fetchLinksAndShowDialog(null, null, null);
|
||||
fetchLinksAndShowDialog(context, null, null, null);
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
private void fetchLinksAndShowDialog(@Nullable Handler handler,
|
||||
private void fetchLinksAndShowDialog(Context context,
|
||||
@Nullable Handler handler,
|
||||
Runnable showDialogRunnable,
|
||||
@Nullable ProgressDialog progress) {
|
||||
WebLink[] links = AboutLinksRoutes.fetchAboutLinks();
|
||||
@@ -164,7 +168,17 @@ public class ReVancedAboutPreference extends Preference {
|
||||
if (handler != null) {
|
||||
handler.removeCallbacks(showDialogRunnable);
|
||||
}
|
||||
if (progress != null) {
|
||||
|
||||
// Don't continue if the activity is done. To test this tap the
|
||||
// about dialog and immediately press back before the dialog can show.
|
||||
if (context instanceof Activity activity) {
|
||||
if (activity.isFinishing() || activity.isDestroyed()) {
|
||||
Logger.printDebug(() -> "Not showing about dialog, activity is closed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (progress != null && progress.isShowing()) {
|
||||
progress.dismiss();
|
||||
}
|
||||
new WebViewDialog(getContext(), htmlDialog).show();
|
||||
|
||||
@@ -19,6 +19,14 @@ import app.revanced.extension.shared.spoof.requests.StreamingDataRequest;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class SpoofVideoStreamsPatch {
|
||||
|
||||
public static final class AudioStreamLanguageOverrideAvailability implements Setting.Availability {
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return BaseSettings.SPOOF_VIDEO_STREAMS.get() && !preferredClient.useAuth;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Domain used for internet connectivity verification.
|
||||
* It has an empty response body and is only used to check for a 204 response code.
|
||||
@@ -321,11 +329,4 @@ public class SpoofVideoStreamsPatch {
|
||||
|
||||
return videoFormat;
|
||||
}
|
||||
|
||||
public static final class AudioStreamLanguageOverrideAvailability implements Setting.Availability {
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return BaseSettings.SPOOF_VIDEO_STREAMS.get() && !preferredClient.useAuth;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,11 @@
|
||||
package app.revanced.extension.spotify.misc.privacy;
|
||||
|
||||
import android.net.Uri;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.privacy.LinkSanitizer;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class SanitizeSharingLinksPatch {
|
||||
|
||||
/**
|
||||
* Parameters that are considered undesirable and should be stripped away.
|
||||
*/
|
||||
private static final List<String> SHARE_PARAMETERS_TO_REMOVE = List.of(
|
||||
private static final LinkSanitizer sanitizer = new LinkSanitizer(
|
||||
"si", // Share tracking parameter.
|
||||
"utm_source" // Share source, such as "copy-link".
|
||||
);
|
||||
@@ -20,25 +13,7 @@ public final class SanitizeSharingLinksPatch {
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static String sanitizeUrl(String url) {
|
||||
try {
|
||||
Uri uri = Uri.parse(url);
|
||||
Uri.Builder builder = uri.buildUpon().clearQuery();
|
||||
|
||||
for (String paramName : uri.getQueryParameterNames()) {
|
||||
if (!SHARE_PARAMETERS_TO_REMOVE.contains(paramName)) {
|
||||
for (String value : uri.getQueryParameters(paramName)) {
|
||||
builder.appendQueryParameter(paramName, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String sanitizedUrl = builder.build().toString();
|
||||
Logger.printInfo(() -> "Sanitized url " + url + " to " + sanitizedUrl);
|
||||
return sanitizedUrl;
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "sanitizeUrl failure with " + url, ex);
|
||||
return url;
|
||||
}
|
||||
public static String sanitizeSharingLink(String url) {
|
||||
return sanitizer.sanitizeUrlString(url);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,22 +2,19 @@ package app.revanced.twitter.patches.links;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class ChangeLinkSharingDomainPatch {
|
||||
private static final String DOMAIN_NAME = "https://fxtwitter.com";
|
||||
private static final String LINK_FORMAT = "%s/%s/status/%s";
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
* Method is modified during patching. Do not change.
|
||||
*/
|
||||
public static String formatResourceLink(Object... formatArgs) {
|
||||
String username = (String) formatArgs[0];
|
||||
String tweetId = (String) formatArgs[1];
|
||||
return String.format(LINK_FORMAT, DOMAIN_NAME, username, tweetId);
|
||||
private static String getShareDomain() {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static String formatLink(long tweetId, String username) {
|
||||
return String.format(LINK_FORMAT, DOMAIN_NAME, username, tweetId);
|
||||
return String.format(LINK_FORMAT, getShareDomain(), username, tweetId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,11 +131,11 @@ public class ReturnYouTubeDislikePatch {
|
||||
|
||||
String conversionContextString = conversionContext.toString();
|
||||
|
||||
if (isRollingNumber && !conversionContextString.contains("video_action_bar.eml")) {
|
||||
if (isRollingNumber && !conversionContextString.contains("video_action_bar.e")) {
|
||||
return original;
|
||||
}
|
||||
|
||||
if (conversionContextString.contains("segmented_like_dislike_button.eml")) {
|
||||
if (conversionContextString.contains("segmented_like_dislike_button.e")) {
|
||||
// Regular video.
|
||||
ReturnYouTubeDislike videoData = currentVideoData;
|
||||
if (videoData == null) {
|
||||
@@ -153,12 +153,12 @@ public class ReturnYouTubeDislikePatch {
|
||||
}
|
||||
|
||||
if (Utils.containsAny(conversionContextString,
|
||||
"|shorts_dislike_button.eml", "|reel_dislike_button.eml")) {
|
||||
"|shorts_dislike_button.e", "|reel_dislike_button.e")) {
|
||||
return getShortsSpan(original, true);
|
||||
}
|
||||
|
||||
if (Utils.containsAny(conversionContextString,
|
||||
"|shorts_like_button.eml", "|reel_like_button.eml")) {
|
||||
"|shorts_like_button.e", "|reel_like_button.e")) {
|
||||
if (!Utils.containsNumber(original)) {
|
||||
Logger.printDebug(() -> "Replacing hidden likes count");
|
||||
return getShortsSpan(original, false);
|
||||
|
||||
@@ -105,17 +105,17 @@ public final class AdsFilter extends Filter {
|
||||
Settings.HIDE_VIEW_PRODUCTS_BANNER,
|
||||
"product_item",
|
||||
"products_in_video",
|
||||
"shopping_overlay.eml" // Video player overlay shopping links.
|
||||
"shopping_overlay.e" // Video player overlay shopping links.
|
||||
);
|
||||
|
||||
final var shoppingLinks = new StringFilterGroup(
|
||||
Settings.HIDE_SHOPPING_LINKS,
|
||||
"shopping_description_shelf.eml"
|
||||
"shopping_description_shelf.e"
|
||||
);
|
||||
|
||||
playerShoppingShelf = new StringFilterGroup(
|
||||
Settings.HIDE_CREATOR_STORE_SHELF,
|
||||
"horizontal_shelf.eml"
|
||||
"horizontal_shelf.e"
|
||||
);
|
||||
|
||||
playerShoppingShelfBuffer = new ByteArrayFilterGroup(
|
||||
@@ -131,7 +131,7 @@ public final class AdsFilter extends Filter {
|
||||
final var merchandise = new StringFilterGroup(
|
||||
Settings.HIDE_MERCHANDISE_BANNERS,
|
||||
"product_carousel",
|
||||
"shopping_carousel.eml" // Channel profile shopping shelf.
|
||||
"shopping_carousel.e" // Channel profile shopping shelf.
|
||||
);
|
||||
|
||||
final var selfSponsor = new StringFilterGroup(
|
||||
|
||||
@@ -14,7 +14,7 @@ public final class AdvancedVideoQualityMenuFilter extends Filter {
|
||||
public AdvancedVideoQualityMenuFilter() {
|
||||
addPathCallbacks(new StringFilterGroup(
|
||||
Settings.ADVANCED_VIDEO_QUALITY_MENU,
|
||||
"quick_quality_sheet_content.eml-js"
|
||||
"quick_quality_sheet_content.e"
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@ import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
final class ButtonsFilter extends Filter {
|
||||
private static final String COMPACT_CHANNEL_BAR_PATH_PREFIX = "compact_channel_bar.eml";
|
||||
private static final String VIDEO_ACTION_BAR_PATH_PREFIX = "video_action_bar.eml";
|
||||
private static final String VIDEO_ACTION_BAR_PATH = "video_action_bar.eml";
|
||||
private static final String COMPACT_CHANNEL_BAR_PATH_PREFIX = "compact_channel_bar.e";
|
||||
private static final String VIDEO_ACTION_BAR_PATH_PREFIX = "video_action_bar.e";
|
||||
private static final String VIDEO_ACTION_BAR_PATH = "video_action_bar.e";
|
||||
/**
|
||||
* Video bar path when the video information is collapsed. Seems to shown only with 20.14+
|
||||
*/
|
||||
private static final String COMPACTIFY_VIDEO_ACTION_BAR_PATH = "compactify_video_action_bar.eml";
|
||||
private static final String COMPACTIFY_VIDEO_ACTION_BAR_PATH = "compactify_video_action_bar.e";
|
||||
private static final String ANIMATED_VECTOR_TYPE_PATH = "AnimatedVectorType";
|
||||
|
||||
private final StringFilterGroup likeSubscribeGlow;
|
||||
@@ -28,12 +28,12 @@ final class ButtonsFilter extends Filter {
|
||||
|
||||
likeSubscribeGlow = new StringFilterGroup(
|
||||
Settings.DISABLE_LIKE_SUBSCRIBE_GLOW,
|
||||
"animated_button_border.eml"
|
||||
"animated_button_border.e"
|
||||
);
|
||||
|
||||
bufferFilterPathGroup = new StringFilterGroup(
|
||||
null,
|
||||
"|ContainerType|button.eml"
|
||||
"|ContainerType|button.e"
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
@@ -45,7 +45,7 @@ final class ButtonsFilter extends Filter {
|
||||
),
|
||||
new StringFilterGroup(
|
||||
Settings.HIDE_DOWNLOAD_BUTTON,
|
||||
"|download_button.eml"
|
||||
"|download_button.e"
|
||||
),
|
||||
new StringFilterGroup(
|
||||
Settings.HIDE_SAVE_BUTTON,
|
||||
@@ -53,7 +53,7 @@ final class ButtonsFilter extends Filter {
|
||||
),
|
||||
new StringFilterGroup(
|
||||
Settings.HIDE_CLIP_BUTTON,
|
||||
"|clip_button.eml"
|
||||
"|clip_button.e"
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import app.revanced.extension.youtube.shared.PlayerType;
|
||||
@SuppressWarnings("unused")
|
||||
final class CommentsFilter extends Filter {
|
||||
|
||||
private static final String COMMENT_COMPOSER_PATH = "comment_composer.eml";
|
||||
private static final String COMMENT_COMPOSER_PATH = "comment_composer.e";
|
||||
|
||||
private final StringFilterGroup chipBar;
|
||||
private final ByteArrayFilterGroup aiCommentsSummary;
|
||||
@@ -15,12 +15,12 @@ final class CommentsFilter extends Filter {
|
||||
public CommentsFilter() {
|
||||
var chatSummary = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_AI_CHAT_SUMMARY,
|
||||
"live_chat_summary_banner.eml"
|
||||
"live_chat_summary_banner.e"
|
||||
);
|
||||
|
||||
chipBar = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_AI_SUMMARY,
|
||||
"chip_bar.eml"
|
||||
"chip_bar.e"
|
||||
);
|
||||
|
||||
aiCommentsSummary = new ByteArrayFilterGroup(
|
||||
@@ -35,8 +35,8 @@ final class CommentsFilter extends Filter {
|
||||
|
||||
var commentsByMembers = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_BY_MEMBERS_HEADER,
|
||||
"sponsorships_comments_header.eml",
|
||||
"sponsorships_comments_footer.eml"
|
||||
"sponsorships_comments_header.e",
|
||||
"sponsorships_comments_footer.e"
|
||||
);
|
||||
|
||||
var comments = new StringFilterGroup(
|
||||
@@ -52,7 +52,7 @@ final class CommentsFilter extends Filter {
|
||||
|
||||
var createAShort = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_CREATE_A_SHORT_BUTTON,
|
||||
"composer_short_creation_button.eml"
|
||||
"composer_short_creation_button.e"
|
||||
);
|
||||
|
||||
emojiAndTimestampButtons = new StringFilterGroup(
|
||||
@@ -69,7 +69,7 @@ final class CommentsFilter extends Filter {
|
||||
|
||||
var thanksButton = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_THANKS_BUTTON,
|
||||
"super_thanks_button.eml"
|
||||
"super_thanks_button.e"
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
|
||||
@@ -29,12 +29,12 @@ final class DescriptionComponentsFilter extends Filter {
|
||||
|
||||
aiGeneratedVideoSummarySection = new StringFilterGroup(
|
||||
Settings.HIDE_AI_GENERATED_VIDEO_SUMMARY_SECTION,
|
||||
"cell_expandable_metadata.eml"
|
||||
"cell_expandable_metadata.e"
|
||||
);
|
||||
|
||||
final StringFilterGroup askSection = new StringFilterGroup(
|
||||
Settings.HIDE_ASK_SECTION,
|
||||
"youchat_entrypoint.eml"
|
||||
"youchat_entrypoint.e"
|
||||
);
|
||||
|
||||
final StringFilterGroup attributesSection = new StringFilterGroup(
|
||||
@@ -65,7 +65,7 @@ final class DescriptionComponentsFilter extends Filter {
|
||||
|
||||
macroMarkersCarousel = new StringFilterGroup(
|
||||
null,
|
||||
"macro_markers_carousel.eml"
|
||||
"macro_markers_carousel.e"
|
||||
);
|
||||
|
||||
macroMarkersCarouselGroupList.addAll(
|
||||
@@ -81,7 +81,7 @@ final class DescriptionComponentsFilter extends Filter {
|
||||
|
||||
horizontalShelf = new StringFilterGroup(
|
||||
Settings.HIDE_ATTRIBUTES_SECTION,
|
||||
"horizontal_shelf.eml"
|
||||
"horizontal_shelf.e"
|
||||
);
|
||||
|
||||
cellVideoAttribute = new ByteArrayFilterGroup(
|
||||
|
||||
@@ -9,7 +9,7 @@ public final class HideInfoCardsFilter extends Filter {
|
||||
addIdentifierCallbacks(
|
||||
new StringFilterGroup(
|
||||
Settings.HIDE_INFO_CARDS,
|
||||
"info_card_teaser_overlay.eml"
|
||||
"info_card_teaser_overlay.e"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -79,10 +79,10 @@ final class KeywordContentFilter extends Filter {
|
||||
"search_vwc_description_transition_key",
|
||||
"g-high-recZ",
|
||||
// Text and litho components found in the buffer that belong to path filters.
|
||||
"expandable_metadata.eml",
|
||||
"thumbnail.eml",
|
||||
"avatar.eml",
|
||||
"overflow_button.eml",
|
||||
"expandable_metadata.e",
|
||||
"thumbnail.e",
|
||||
"avatar.e",
|
||||
"overflow_button.e",
|
||||
"shorts-lockup-image",
|
||||
"shorts-lockup.overlay-metadata.secondary-text",
|
||||
"YouTubeSans-SemiBold",
|
||||
@@ -94,16 +94,16 @@ final class KeywordContentFilter extends Filter {
|
||||
*/
|
||||
private final StringFilterGroup startsWithFilter = new StringFilterGroup(
|
||||
null, // Multiple settings are used and must be individually checked if active.
|
||||
"home_video_with_context.eml",
|
||||
"search_video_with_context.eml",
|
||||
"video_with_context.eml", // Subscription tab videos.
|
||||
"related_video_with_context.eml",
|
||||
"home_video_with_context.e",
|
||||
"search_video_with_context.e",
|
||||
"video_with_context.e", // Subscription tab videos.
|
||||
"related_video_with_context.e",
|
||||
// A/B test for subscribed video, and sometimes when tablet layout is enabled.
|
||||
"video_lockup_with_attachment.eml",
|
||||
"compact_video.eml",
|
||||
"video_lockup_with_attachment.e",
|
||||
"compact_video.e",
|
||||
"inline_shorts",
|
||||
"shorts_video_cell",
|
||||
"shorts_pivot_item.eml"
|
||||
"shorts_pivot_item.e"
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -112,9 +112,9 @@ final class KeywordContentFilter extends Filter {
|
||||
@SuppressWarnings("FieldCanBeLocal")
|
||||
private final StringFilterGroup containsFilter = new StringFilterGroup(
|
||||
null,
|
||||
"modern_type_shelf_header_content.eml",
|
||||
"shorts_lockup_cell.eml", // Part of 'shorts_shelf_carousel.eml'
|
||||
"video_card.eml" // Shorts that appear in a horizontal shelf.
|
||||
"modern_type_shelf_header_content.e",
|
||||
"shorts_lockup_cell.e", // Part of 'shorts_shelf_carousel.e'
|
||||
"video_card.e" // Shorts that appear in a horizontal shelf.
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -125,10 +125,10 @@ final class KeywordContentFilter extends Filter {
|
||||
* the buffer of the parent component was already searched and passed.
|
||||
*/
|
||||
private final StringTrieSearch exceptions = new StringTrieSearch(
|
||||
"metadata.eml",
|
||||
"thumbnail.eml",
|
||||
"avatar.eml",
|
||||
"overflow_button.eml"
|
||||
"metadata.e",
|
||||
"thumbnail.e",
|
||||
"avatar.e",
|
||||
"overflow_button.e"
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@@ -76,18 +76,18 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
communityPosts = new StringFilterGroup(
|
||||
Settings.HIDE_COMMUNITY_POSTS,
|
||||
"post_base_wrapper", // may be obsolete and no longer needed.
|
||||
"text_post_root.eml",
|
||||
"images_post_root.eml",
|
||||
"images_post_slim.eml", // may be obsolete and no longer needed.
|
||||
"images_post_root_slim.eml",
|
||||
"text_post_root_slim.eml",
|
||||
"post_base_wrapper_slim.eml",
|
||||
"poll_post_root.eml",
|
||||
"videos_post_root.eml",
|
||||
"post_shelf_slim.eml",
|
||||
"videos_post_responsive_root.eml",
|
||||
"text_post_responsive_root.eml",
|
||||
"poll_post_responsive_root.eml"
|
||||
"text_post_root.e",
|
||||
"images_post_root.e",
|
||||
"images_post_slim.e", // may be obsolete and no longer needed.
|
||||
"images_post_root_slim.e",
|
||||
"text_post_root_slim.e",
|
||||
"post_base_wrapper_slim.e",
|
||||
"poll_post_root.e",
|
||||
"videos_post_root.e",
|
||||
"post_shelf_slim.e",
|
||||
"videos_post_responsive_root.e",
|
||||
"text_post_responsive_root.e",
|
||||
"poll_post_responsive_root.e"
|
||||
);
|
||||
|
||||
final var subscribersCommunityGuidelines = new StringFilterGroup(
|
||||
@@ -149,7 +149,7 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
|
||||
final var channelLinksPreview = new StringFilterGroup(
|
||||
Settings.HIDE_LINKS_PREVIEW,
|
||||
"attribution.eml"
|
||||
"attribution.e"
|
||||
);
|
||||
|
||||
final var emergencyBox = new StringFilterGroup(
|
||||
@@ -190,8 +190,8 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
|
||||
final var playables = new StringFilterGroup(
|
||||
Settings.HIDE_PLAYABLES,
|
||||
"horizontal_gaming_shelf.eml",
|
||||
"mini_game_card.eml"
|
||||
"horizontal_gaming_shelf.e",
|
||||
"mini_game_card.e"
|
||||
);
|
||||
|
||||
// Playable horizontal shelf header.
|
||||
@@ -228,7 +228,7 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
|
||||
compactChannelBarInnerButton = new StringFilterGroup(
|
||||
null,
|
||||
"|button.eml"
|
||||
"|button.e"
|
||||
);
|
||||
|
||||
joinMembershipButton = new ByteArrayFilterGroup(
|
||||
@@ -248,13 +248,13 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
|
||||
final var videoRecommendationLabels = new StringFilterGroup(
|
||||
Settings.HIDE_VIDEO_RECOMMENDATION_LABELS,
|
||||
"endorsement_header_footer.eml"
|
||||
"endorsement_header_footer.e"
|
||||
);
|
||||
|
||||
channelProfile = new StringFilterGroup(
|
||||
null,
|
||||
"channel_profile.eml",
|
||||
"page_header.eml"
|
||||
"channel_profile.e",
|
||||
"page_header.e"
|
||||
);
|
||||
channelProfileBuffer = new ByteArrayFilterGroupList();
|
||||
channelProfileBuffer.addAll(new ByteArrayFilterGroup(
|
||||
@@ -269,15 +269,15 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
|
||||
horizontalShelves = new StringFilterGroup(
|
||||
Settings.HIDE_HORIZONTAL_SHELVES,
|
||||
"horizontal_video_shelf.eml",
|
||||
"horizontal_shelf.eml",
|
||||
"horizontal_shelf_inline.eml",
|
||||
"horizontal_tile_shelf.eml"
|
||||
"horizontal_video_shelf.e",
|
||||
"horizontal_shelf.e",
|
||||
"horizontal_shelf_inline.e",
|
||||
"horizontal_tile_shelf.e"
|
||||
);
|
||||
|
||||
ticketShelf = new ByteArrayFilterGroup(
|
||||
Settings.HIDE_TICKET_SHELF,
|
||||
"ticket_item.eml"
|
||||
"ticket_item.e"
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
|
||||
@@ -24,13 +24,13 @@ public final class PlaybackSpeedMenuFilter extends Filter {
|
||||
// 0.05x litho speed menu.
|
||||
var playbackRateSelectorGroup = new StringFilterGroup(
|
||||
Settings.CUSTOM_SPEED_MENU,
|
||||
"playback_rate_selector_menu_sheet.eml-js"
|
||||
"playback_rate_selector_menu_sheet.e"
|
||||
);
|
||||
|
||||
// Old litho based speed menu.
|
||||
oldPlaybackMenuGroup = new StringFilterGroup(
|
||||
Settings.CUSTOM_SPEED_MENU,
|
||||
"playback_speed_sheet_content.eml-js");
|
||||
"playback_speed_sheet_content.e");
|
||||
|
||||
addPathCallbacks(playbackRateSelectorGroup, oldPlaybackMenuGroup);
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
|
||||
|
||||
addPathCallbacks(
|
||||
videoQualityMenuFooter,
|
||||
new StringFilterGroup(null, "overflow_menu_item.eml")
|
||||
new StringFilterGroup(null, "overflow_menu_item.e")
|
||||
);
|
||||
|
||||
flyoutFilterGroupList.addAll(
|
||||
|
||||
@@ -72,8 +72,8 @@ public final class ReturnYouTubeDislikeFilter extends Filter {
|
||||
// But if swiping back to a previous video and liking/disliking, then only that single button reloads.
|
||||
// So must check for both buttons.
|
||||
addPathCallbacks(
|
||||
new StringFilterGroup(null, "|shorts_like_button.eml"),
|
||||
new StringFilterGroup(null, "|shorts_dislike_button.eml")
|
||||
new StringFilterGroup(null, "|shorts_like_button.e"),
|
||||
new StringFilterGroup(null, "|shorts_dislike_button.e")
|
||||
);
|
||||
|
||||
// After the button identifiers is binary data and then the video id for that specific short.
|
||||
|
||||
@@ -18,12 +18,12 @@ import app.revanced.extension.youtube.shared.PlayerType;
|
||||
@SuppressWarnings("unused")
|
||||
public final class ShortsFilter extends Filter {
|
||||
private static final boolean HIDE_SHORTS_NAVIGATION_BAR = Settings.HIDE_SHORTS_NAVIGATION_BAR.get();
|
||||
private static final String REEL_CHANNEL_BAR_PATH = "reel_channel_bar.eml";
|
||||
private static final String REEL_CHANNEL_BAR_PATH = "reel_channel_bar.e";
|
||||
|
||||
/**
|
||||
* For paid promotion label and subscribe button that appears in the channel bar.
|
||||
*/
|
||||
private static final String REEL_METAPANEL_PATH = "reel_metapanel.eml";
|
||||
private static final String REEL_METAPANEL_PATH = "reel_metapanel.e";
|
||||
|
||||
/**
|
||||
* Tags that appears when opening the Shorts player.
|
||||
@@ -74,7 +74,7 @@ public final class ShortsFilter extends Filter {
|
||||
// Use a different filter group for this pattern, as it requires an additional check after matching.
|
||||
shelfHeader = new StringFilterGroup(
|
||||
null,
|
||||
"shelf_header.eml"
|
||||
"shelf_header.e"
|
||||
);
|
||||
|
||||
addIdentifierCallbacks(shortsIdentifiers, shelfHeader);
|
||||
@@ -85,11 +85,11 @@ public final class ShortsFilter extends Filter {
|
||||
|
||||
shortsCompactFeedVideo = new StringFilterGroup(null,
|
||||
// Shorts that appear in the feed/search when the device is using tablet layout.
|
||||
"compact_video.eml",
|
||||
// 'video_lockup_with_attachment.eml' is shown instead of 'compact_video.eml' for some users
|
||||
"video_lockup_with_attachment.eml",
|
||||
"compact_video.e",
|
||||
// 'video_lockup_with_attachment.e' is shown instead of 'compact_video.e' for some users
|
||||
"video_lockup_with_attachment.e",
|
||||
// Search results that appear in a horizontal shelf.
|
||||
"video_card.eml");
|
||||
"video_card.e");
|
||||
|
||||
// Filter out items that use the 'frame0' thumbnail.
|
||||
// This is a valid thumbnail for both regular videos and Shorts,
|
||||
@@ -134,31 +134,31 @@ public final class ShortsFilter extends Filter {
|
||||
|
||||
StringFilterGroup stickers = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_STICKERS,
|
||||
"stickers_layer.eml"
|
||||
"stickers_layer.e"
|
||||
);
|
||||
|
||||
StringFilterGroup likeFountain = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_LIKE_FOUNTAIN,
|
||||
"like_fountain.eml"
|
||||
"like_fountain.e"
|
||||
);
|
||||
|
||||
StringFilterGroup likeButton = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_LIKE_BUTTON,
|
||||
"shorts_like_button.eml",
|
||||
"reel_like_button.eml"
|
||||
"shorts_like_button.e",
|
||||
"reel_like_button.e"
|
||||
);
|
||||
|
||||
StringFilterGroup dislikeButton = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_DISLIKE_BUTTON,
|
||||
"shorts_dislike_button.eml",
|
||||
"reel_dislike_button.eml"
|
||||
"shorts_dislike_button.e",
|
||||
"reel_dislike_button.e"
|
||||
);
|
||||
|
||||
StringFilterGroup previewComment = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_PREVIEW_COMMENT,
|
||||
// Preview comment that can popup while a Short is playing.
|
||||
// Uses no bundled icons, and instead the users profile photo is shown.
|
||||
"participation_bar.eml"
|
||||
"participation_bar.e"
|
||||
);
|
||||
|
||||
joinButton = new StringFilterGroup(
|
||||
@@ -173,20 +173,20 @@ public final class ShortsFilter extends Filter {
|
||||
|
||||
paidPromotionButton = new StringFilterGroup(
|
||||
Settings.HIDE_PAID_PROMOTION_LABEL,
|
||||
"reel_player_disclosure.eml"
|
||||
"reel_player_disclosure.e"
|
||||
);
|
||||
|
||||
shortsActionBar = new StringFilterGroup(
|
||||
null,
|
||||
"shorts_action_bar.eml",
|
||||
"reel_action_bar.eml"
|
||||
"shorts_action_bar.e",
|
||||
"reel_action_bar.e"
|
||||
);
|
||||
|
||||
useSoundButton = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_USE_SOUND_BUTTON,
|
||||
// First filter needed for "Use this sound" that can appear when viewing Shorts
|
||||
// through the "Short remixing this video" section.
|
||||
"floating_action_button.eml",
|
||||
"floating_action_button.e",
|
||||
// Second filter needed for "Use this sound" that can appear below the video title.
|
||||
REEL_METAPANEL_PATH
|
||||
);
|
||||
@@ -209,13 +209,13 @@ public final class ShortsFilter extends Filter {
|
||||
|
||||
videoActionButton = new StringFilterGroup(
|
||||
null,
|
||||
// Can be simply 'button.eml', 'shorts_video_action_button.eml' or 'reel_action_button.eml'
|
||||
"button.eml"
|
||||
// Can be simply 'button.e', 'shorts_video_action_button.e' or 'reel_action_button.e'
|
||||
"button.e"
|
||||
);
|
||||
|
||||
suggestedAction = new StringFilterGroup(
|
||||
null,
|
||||
"suggested_action.eml"
|
||||
"suggested_action.e"
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
|
||||
@@ -8,29 +8,39 @@ import static app.revanced.extension.shared.spoof.ClientType.VISIONOS;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import app.revanced.extension.shared.settings.Setting;
|
||||
import app.revanced.extension.shared.spoof.ClientType;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class SpoofVideoStreamsPatch {
|
||||
|
||||
public static final class SpoofClientAv1Availability implements Setting.Availability {
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.isAvailable()
|
||||
&& Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ANDROID_VR_1_43_32;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void setClientOrderToUse() {
|
||||
ClientType client = Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
|
||||
|
||||
|
||||
if (Settings.FORCE_AVC_CODEC.get() && client == ANDROID_VR_1_61_48) {
|
||||
// VR 1.61 uses VP9/AV1, and cannot force AVC. Use 1.43 instead.
|
||||
client = ANDROID_VR_1_43_32;
|
||||
// Use VR 1.61 client that has AV1 if user settings allow it.
|
||||
// AVC cannot be forced with VR 1.61 because it uses VP9 and AV1.
|
||||
// If both settings are on, then force AVC takes priority and VR 1.43 is used.
|
||||
if (client == ANDROID_VR_1_43_32 && Settings.SPOOF_VIDEO_STREAMS_AV1.get()
|
||||
&& !Settings.FORCE_AVC_CODEC.get()) {
|
||||
client = ANDROID_VR_1_61_48;
|
||||
}
|
||||
|
||||
List<ClientType> availableClients = List.of(
|
||||
ANDROID_CREATOR,
|
||||
ANDROID_VR_1_43_32,
|
||||
VISIONOS,
|
||||
ANDROID_CREATOR,
|
||||
ANDROID_VR_1_61_48,
|
||||
IPADOS);
|
||||
|
||||
app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse(
|
||||
|
||||
@@ -21,6 +21,7 @@ import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerT
|
||||
import static app.revanced.extension.youtube.patches.OpenShortsInRegularPlayerPatch.ShortsPlayerType;
|
||||
import static app.revanced.extension.youtube.patches.SeekbarThumbnailsPatch.SeekbarThumbnailsHighQualityAvailability;
|
||||
import static app.revanced.extension.youtube.patches.components.PlayerFlyoutMenuItemsFilter.HideAudioFlyoutMenuAvailability;
|
||||
import static app.revanced.extension.youtube.patches.spoof.SpoofVideoStreamsPatch.SpoofClientAv1Availability;
|
||||
import static app.revanced.extension.youtube.patches.theme.ThemePatch.SplashScreenAnimationStyle;
|
||||
import static app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController.SponsorBlockDuration;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.IGNORE;
|
||||
@@ -55,7 +56,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting ADVANCED_VIDEO_QUALITY_MENU = new BooleanSetting("revanced_advanced_video_quality_menu", TRUE);
|
||||
public static final BooleanSetting DISABLE_HDR_VIDEO = new BooleanSetting("revanced_disable_hdr_video", FALSE);
|
||||
public static final BooleanSetting FORCE_AVC_CODEC = new BooleanSetting("revanced_force_avc_codec", FALSE, true, "revanced_force_avc_codec_user_dialog_message");
|
||||
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", FALSE, true);
|
||||
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", TRUE, true);
|
||||
public static final IntegerSetting VIDEO_QUALITY_DEFAULT_WIFI = new IntegerSetting("revanced_video_quality_default_wifi", -2);
|
||||
public static final IntegerSetting VIDEO_QUALITY_DEFAULT_MOBILE = new IntegerSetting("revanced_video_quality_default_mobile", -2);
|
||||
public static final BooleanSetting REMEMBER_VIDEO_QUALITY_LAST_SELECTED = new BooleanSetting("revanced_remember_video_quality_last_selected", FALSE);
|
||||
@@ -357,6 +358,8 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting SPOOF_DEVICE_DIMENSIONS = new BooleanSetting("revanced_spoof_device_dimensions", FALSE, true,
|
||||
"revanced_spoof_device_dimensions_user_dialog_message");
|
||||
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client_type", ClientType.ANDROID_VR_1_43_32, true, parent(SPOOF_VIDEO_STREAMS));
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS_AV1 = new BooleanSetting("revanced_spoof_video_streams_av1", FALSE, true,
|
||||
"revanced_spoof_video_streams_av1_user_dialog_message", new SpoofClientAv1Availability());
|
||||
public static final BooleanSetting DEBUG_PROTOBUFFER = new BooleanSetting("revanced_debug_protobuffer", FALSE, false,
|
||||
"revanced_debug_protobuffer_user_dialog_message", parent(BaseSettings.DEBUG));
|
||||
|
||||
@@ -524,6 +527,11 @@ public class Settings extends BaseSettings {
|
||||
SPOOF_APP_VERSION.resetToDefault();
|
||||
}
|
||||
|
||||
// VR 1.61 is not selectable in the settings, and it's selected by spoof stream patch if needed.
|
||||
if (SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.ANDROID_VR_1_61_48) {
|
||||
SPOOF_VIDEO_STREAMS_CLIENT_TYPE.resetToDefault();
|
||||
}
|
||||
|
||||
// RYD requires manually migrating old settings since the lack of
|
||||
// a "revanced_" on the old setting causes duplicate key exceptions during export.
|
||||
SharedPrefCategory revancedPrefs = Setting.preferences;
|
||||
|
||||
@@ -87,13 +87,9 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_stable_volume")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_force_original_audio");
|
||||
case ANDROID_VR_1_43_32 ->
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_stable_volume")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
||||
case ANDROID_VR_1_61_48 ->
|
||||
summary = str("revanced_spoof_video_streams_about_dropped_frames")
|
||||
+ '\n' + summary
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_stable_volume");
|
||||
// VR 1.61 is not exposed in the UI and should never be reached here.
|
||||
case ANDROID_VR_1_43_32, ANDROID_VR_1_61_48 ->
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_stable_volume");
|
||||
case IPADOS ->
|
||||
summary = str("revanced_spoof_video_streams_about_playback_failure")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
||||
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.42.0-dev.10
|
||||
version = 5.43.0-dev.1
|
||||
|
||||
@@ -269,7 +269,7 @@ public final class app/revanced/patches/instagram/feed/LimitFeedToFollowedProfil
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/hide/explore/HideExploreFeedKt {
|
||||
public static final fun getHideExportFeedPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
public static final fun getHideExploreFeedPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/hide/navigation/HideNavigationButtonsKt {
|
||||
@@ -280,6 +280,14 @@ public final class app/revanced/patches/instagram/hide/stories/HideStoriesKt {
|
||||
public static final fun getHideStoriesPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/hide/suggestions/HideSuggestedContentKt {
|
||||
public static final fun getHideSuggestedContent ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/misc/devmenu/EnableDeveloperMenuPatchKt {
|
||||
public static final fun getEnableDeveloperMenuPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/misc/extension/SharedExtensionPatchKt {
|
||||
public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -288,6 +296,14 @@ public final class app/revanced/patches/instagram/misc/links/OpenLinksExternally
|
||||
public static final fun getOpenLinksExternallyPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/misc/share/domain/ChangeLinkSharingDomainPatchKt {
|
||||
public static final fun getChangeLinkSharingDomainPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/misc/share/privacy/SanitizeSharingLinksPatchKt {
|
||||
public static final fun getSanitizeSharingLinksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/misc/signature/SignatureCheckPatchKt {
|
||||
public static final fun getSignatureCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -1010,11 +1026,6 @@ public final class app/revanced/patches/shared/misc/settings/preference/TextPref
|
||||
public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/shared/misc/spoof/SpoofVideoStreamsPatchKt {
|
||||
public static final fun spoofVideoStreamsPatch (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
public static synthetic fun spoofVideoStreamsPatch$default (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/shared/misc/spoof/UserAgentClientSpoofPatchKt {
|
||||
public static final fun userAgentClientSpoofPatch (Ljava/lang/String;)Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -1912,6 +1923,7 @@ public final class app/revanced/util/ResourceUtilsKt {
|
||||
public static final fun forEachChildElement (Lorg/w3c/dom/Node;Lkotlin/jvm/functions/Function1;)V
|
||||
public static final fun insertFirst (Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)V
|
||||
public static final fun iterateXmlNodeChildren (Lapp/revanced/patcher/patch/ResourcePatchContext;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
|
||||
public static final fun removeFromParent (Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;
|
||||
}
|
||||
|
||||
public final class app/revanced/util/resource/ArrayResource : app/revanced/util/resource/BaseResource {
|
||||
|
||||
@@ -2,11 +2,13 @@ package app.revanced.patches.finanzonline.detection.root
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
|
||||
import app.revanced.patches.shared.PATCH_NAME_REMOVE_ROOT_DETECTION
|
||||
|
||||
@Suppress("unused")
|
||||
val rootDetectionPatch = bytecodePatch(
|
||||
name = "Remove root detection",
|
||||
description = "Removes the check for root permissions.",
|
||||
name = PATCH_NAME_REMOVE_ROOT_DETECTION,
|
||||
description = PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION,
|
||||
) {
|
||||
compatibleWith("at.gv.bmf.bmf2go")
|
||||
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package app.revanced.patches.idaustria.detection.root
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
|
||||
import app.revanced.patches.shared.PATCH_NAME_REMOVE_ROOT_DETECTION
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val rootDetectionPatch = bytecodePatch(
|
||||
name = "Remove root detection",
|
||||
description = "Removes the check for root permissions and unlocked bootloader.",
|
||||
name = PATCH_NAME_REMOVE_ROOT_DETECTION,
|
||||
description = PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
|
||||
) {
|
||||
compatibleWith("at.gv.oe.app")
|
||||
|
||||
|
||||
@@ -3,7 +3,9 @@ package app.revanced.patches.instagram.hide.explore
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal const val EXPLORE_KEY_TO_BE_HIDDEN = "sectional_items"
|
||||
|
||||
internal val exploreResponseJsonParserFingerprint = fingerprint {
|
||||
strings("sectional_items", "ExploreTopicalFeedResponse")
|
||||
strings(EXPLORE_KEY_TO_BE_HIDDEN, "ExploreTopicalFeedResponse")
|
||||
custom { method, _ -> method.name == "parseFromJson" }
|
||||
}
|
||||
|
||||
@@ -1,33 +1,39 @@
|
||||
package app.revanced.patches.instagram.hide.explore
|
||||
|
||||
import app.revanced.patcher.Fingerprint
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.BytecodePatchContext
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
context(BytecodePatchContext)
|
||||
internal fun Fingerprint.replaceJsonFieldWithBogus(
|
||||
key: String,
|
||||
) {
|
||||
val targetStringIndex = stringMatches!!.first { match -> match.string == key }.index
|
||||
val targetStringRegister = method.getInstruction<OneRegisterInstruction>(targetStringIndex).registerA
|
||||
|
||||
/**
|
||||
* Replacing the JSON key we want to skip with a random string that is not a valid JSON key.
|
||||
* This way the feeds array will never be populated.
|
||||
* Received JSON keys that are not handled are simply ignored, so there are no side effects.
|
||||
*/
|
||||
method.replaceInstruction(
|
||||
targetStringIndex,
|
||||
"const-string v$targetStringRegister, \"BOGUS\"",
|
||||
)
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
val hideExportFeedPatch = bytecodePatch(
|
||||
val hideExploreFeedPatch = bytecodePatch(
|
||||
name = "Hide explore feed",
|
||||
description = "Hides posts and reels from the explore/search page.",
|
||||
use = false
|
||||
use = false,
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
execute {
|
||||
exploreResponseJsonParserFingerprint.method.apply {
|
||||
val sectionalItemStringIndex = exploreResponseJsonParserFingerprint.stringMatches!!.first().index
|
||||
val sectionalItemStringRegister = getInstruction<OneRegisterInstruction>(sectionalItemStringIndex).registerA
|
||||
|
||||
/**
|
||||
* Replacing the JSON key we want to skip with a random string that is not a valid JSON key.
|
||||
* This way the feeds array will never be populated.
|
||||
* Received JSON keys that are not handled are simply ignored, so there are no side effects.
|
||||
*/
|
||||
replaceInstruction(
|
||||
sectionalItemStringIndex,
|
||||
"const-string v$sectionalItemStringRegister, \"BOGUS\""
|
||||
)
|
||||
}
|
||||
exploreResponseJsonParserFingerprint.replaceJsonFieldWithBogus(EXPLORE_KEY_TO_BE_HIDDEN)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package app.revanced.patches.instagram.hide.suggestions
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val FEED_ITEM_KEYS_TO_BE_HIDDEN = arrayOf(
|
||||
"clips_netego",
|
||||
"stories_netego",
|
||||
"in_feed_survey",
|
||||
"bloks_netego",
|
||||
"suggested_igd_channels",
|
||||
"suggested_top_accounts",
|
||||
"suggested_users",
|
||||
)
|
||||
|
||||
internal val feedItemParseFromJsonFingerprint = fingerprint {
|
||||
strings(*FEED_ITEM_KEYS_TO_BE_HIDDEN, "FeedItem")
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package app.revanced.patches.instagram.hide.suggestions
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.instagram.hide.explore.replaceJsonFieldWithBogus
|
||||
|
||||
@Suppress("unused")
|
||||
val hideSuggestedContent = bytecodePatch(
|
||||
name = "Hide suggested content",
|
||||
description = "Hides suggested stories, reels, threads and survey from feed (Suggested posts will still be shown).",
|
||||
use = false,
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
execute {
|
||||
FEED_ITEM_KEYS_TO_BE_HIDDEN.forEach { key ->
|
||||
feedItemParseFromJsonFingerprint.replaceJsonFieldWithBogus(key)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package app.revanced.patches.instagram.misc.devmenu
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.Utils.trimIndentMultiline
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
|
||||
import app.revanced.util.returnEarly
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
@Suppress("unused")
|
||||
val enableDeveloperMenuPatch = bytecodePatch(
|
||||
name = "Enable developer menu",
|
||||
description = """
|
||||
Enables the developer menu, which can be found at the bottom of settings menu with name 'Internal Settings'.
|
||||
|
||||
It is recommended to use this patch with an alpha/beta Instagram release. Patching a stable release works, but the developer menu shows the developer flags as numbers and does not show a human readable description.
|
||||
""".trimIndentMultiline(),
|
||||
use = false
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
execute {
|
||||
with(clearNotificationReceiverFingerprint.method) {
|
||||
indexOfFirstInstructionReversedOrThrow(clearNotificationReceiverFingerprint.stringMatches!!.first().index) {
|
||||
val reference = getReference<MethodReference>()
|
||||
Opcode.INVOKE_STATIC == opcode &&
|
||||
reference?.parameterTypes?.size == 1 &&
|
||||
reference.parameterTypes.first() == "Lcom/instagram/common/session/UserSession;" &&
|
||||
reference.returnType == "Z"
|
||||
}.let { index ->
|
||||
navigate(this).to(index).stop().returnEarly(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
package app.revanced.patches.instagram.misc.devmenu
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val clearNotificationReceiverFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "onReceive" &&
|
||||
classDef.type == "Lcom/instagram/notifications/push/ClearNotificationReceiver;"
|
||||
}
|
||||
strings("NOTIFICATION_DISMISSED")
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package app.revanced.patches.instagram.misc.share
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.BytecodePatchContext
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
|
||||
context(BytecodePatchContext)
|
||||
internal fun editShareLinksPatch(block: MutableMethod.(index: Int, register: Int) -> Unit) {
|
||||
val fingerprintsToPatch = arrayOf(
|
||||
permalinkResponseJsonParserFingerprint,
|
||||
storyUrlResponseJsonParserFingerprint,
|
||||
profileUrlResponseJsonParserFingerprint,
|
||||
liveUrlResponseJsonParserFingerprint
|
||||
)
|
||||
|
||||
for (fingerprint in fingerprintsToPatch) {
|
||||
fingerprint.method.apply {
|
||||
val putSharingUrlIndex = indexOfFirstInstruction(
|
||||
permalinkResponseJsonParserFingerprint.stringMatches!!.first().index,
|
||||
Opcode.IPUT_OBJECT
|
||||
)
|
||||
|
||||
val sharingUrlRegister = getInstruction<TwoRegisterInstruction>(putSharingUrlIndex).registerA
|
||||
|
||||
block(putSharingUrlIndex, sharingUrlRegister)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package app.revanced.patches.instagram.misc.share
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val permalinkResponseJsonParserFingerprint = fingerprint {
|
||||
strings("permalink", "PermalinkResponse")
|
||||
custom { method, _ -> method.name == "parseFromJson" }
|
||||
}
|
||||
|
||||
internal val storyUrlResponseJsonParserFingerprint = fingerprint {
|
||||
strings("story_item_to_share_url", "StoryItemUrlResponse")
|
||||
custom { method, _ -> method.name == "parseFromJson" }
|
||||
}
|
||||
|
||||
internal val profileUrlResponseJsonParserFingerprint = fingerprint {
|
||||
strings("profile_to_share_url", "ProfileUrlResponse")
|
||||
custom { method, _ -> method.name == "parseFromJson" }
|
||||
}
|
||||
|
||||
internal val liveUrlResponseJsonParserFingerprint = fingerprint {
|
||||
strings("live_to_share_url", "LiveItemLinkUrlResponse")
|
||||
custom { method, _ -> method.name == "parseFromJson" }
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package app.revanced.patches.instagram.misc.share.domain
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patches.instagram.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.instagram.misc.share.editShareLinksPatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_CHANGE_LINK_SHARING_DOMAIN
|
||||
import app.revanced.patches.shared.PATCH_NAME_CHANGE_LINK_SHARING_DOMAIN
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val changeLinkSharingDomainPatch = bytecodePatch(
|
||||
name = PATCH_NAME_CHANGE_LINK_SHARING_DOMAIN,
|
||||
description = PATCH_DESCRIPTION_CHANGE_LINK_SHARING_DOMAIN,
|
||||
use = false
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
dependsOn(sharedExtensionPatch)
|
||||
|
||||
val customDomainHost by stringOption(
|
||||
key = "domainName",
|
||||
default = "imginn.com",
|
||||
title = "Domain name",
|
||||
description = "The domain name to use when sharing links."
|
||||
)
|
||||
|
||||
execute {
|
||||
getCustomShareDomainFingerprint.method.returnEarly(customDomainHost!!)
|
||||
|
||||
editShareLinksPatch { index, register ->
|
||||
addInstructions(
|
||||
index,
|
||||
"""
|
||||
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->setCustomShareDomain(Ljava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package app.revanced.patches.instagram.misc.share.domain
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/instagram/misc/share/domain/ChangeLinkSharingDomainPatch;"
|
||||
|
||||
internal val getCustomShareDomainFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC)
|
||||
returns("Ljava/lang/String;")
|
||||
parameters()
|
||||
custom { method, classDef ->
|
||||
method.name == "getCustomShareDomain" && classDef.type == EXTENSION_CLASS_DESCRIPTOR
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package app.revanced.patches.instagram.misc.share.privacy
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.instagram.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.instagram.misc.share.editShareLinksPatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS
|
||||
import app.revanced.patches.shared.PATCH_NAME_SANITIZE_SHARING_LINKS
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/instagram/misc/share/privacy/SanitizeSharingLinksPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val sanitizeSharingLinksPatch = bytecodePatch(
|
||||
name = PATCH_NAME_SANITIZE_SHARING_LINKS,
|
||||
description = PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS,
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
dependsOn(sharedExtensionPatch)
|
||||
|
||||
execute {
|
||||
editShareLinksPatch { index, register ->
|
||||
addInstructions(
|
||||
index,
|
||||
"""
|
||||
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->sanitizeSharingLink(Ljava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,11 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWith
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.music.misc.gms.Constants.MUSIC_MAIN_ACTIVITY_NAME
|
||||
import app.revanced.patches.music.misc.gms.Constants.MUSIC_PACKAGE_NAME
|
||||
import app.revanced.patches.music.misc.gms.musicActivityOnCreateFingerprint
|
||||
import app.revanced.patches.music.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch
|
||||
import app.revanced.patches.shared.misc.mapping.get
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
@@ -50,27 +55,21 @@ private val disableSplashAnimationPatch = bytecodePatch {
|
||||
}
|
||||
}
|
||||
|
||||
private const val APP_NAME = "YT Music ReVanced"
|
||||
|
||||
@Suppress("unused")
|
||||
val customBrandingPatch = baseCustomBrandingPatch(
|
||||
defaultAppName = APP_NAME,
|
||||
appNameValues = mapOf(
|
||||
"YT Music ReVanced" to APP_NAME,
|
||||
"Music ReVanced" to "Music ReVanced",
|
||||
"Music" to "Music",
|
||||
"YT Music" to "YT Music",
|
||||
),
|
||||
resourceFolder = "custom-branding/music",
|
||||
iconResourceFileNames = arrayOf(
|
||||
"adaptiveproduct_youtube_music_2024_q4_background_color_108",
|
||||
"adaptiveproduct_youtube_music_2024_q4_foreground_color_108",
|
||||
"ic_launcher_release",
|
||||
),
|
||||
monochromeIconFileNames = arrayOf("ic_app_icons_themed_youtube_music.xml"),
|
||||
addResourcePatchName = "music",
|
||||
originalLauncherIconName = "ic_launcher_release",
|
||||
originalAppName = "@string/app_launcher_name",
|
||||
originalAppPackageName = MUSIC_PACKAGE_NAME,
|
||||
copyExistingIntentsToAliases = false,
|
||||
numberOfPresetAppNames = 5,
|
||||
mainActivityOnCreateFingerprint = musicActivityOnCreateFingerprint,
|
||||
mainActivityName = MUSIC_MAIN_ACTIVITY_NAME,
|
||||
activityAliasNameWithIntents = MUSIC_MAIN_ACTIVITY_NAME,
|
||||
preferenceScreen = PreferenceScreen.GENERAL,
|
||||
|
||||
block = {
|
||||
dependsOn(disableSplashAnimationPatch)
|
||||
dependsOn(sharedExtensionPatch, disableSplashAnimationPatch)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package app.revanced.patches.music.misc.gms
|
||||
|
||||
object Constants {
|
||||
internal const val MUSIC_MAIN_ACTIVITY_NAME = "com.google.android.apps.youtube.music.activities.MusicActivity"
|
||||
|
||||
internal const val REVANCED_MUSIC_PACKAGE_NAME = "app.revanced.android.apps.youtube.music"
|
||||
internal const val MUSIC_PACKAGE_NAME = "com.google.android.apps.youtube.music"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package app.revanced.patches.music.misc.spoof
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
@@ -16,12 +15,13 @@ import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPref
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.shared.misc.spoof.spoofVideoStreamsPatch
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch;"
|
||||
|
||||
val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
|
||||
fixMediaFetchHotConfigChanges = { true },
|
||||
fixMediaFetchHotConfigAlternativeChanges = { is_8_11_or_greater && !is_8_15_or_greater },
|
||||
extensionClassDescriptor = "Lapp/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch;",
|
||||
mainActivityOnCreateFingerprint = musicActivityOnCreateFingerprint,
|
||||
fixMediaFetchHotConfig = { true },
|
||||
fixMediaFetchHotConfigAlternative = { is_8_11_or_greater && !is_8_15_or_greater },
|
||||
fixParsePlaybackResponseFeatureFlag = { is_7_33_or_greater },
|
||||
|
||||
block = {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
@@ -38,6 +38,7 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
|
||||
)
|
||||
)
|
||||
},
|
||||
|
||||
executeBlock = {
|
||||
addResources("music", "misc.fix.playback.spoofVideoStreamsPatch")
|
||||
|
||||
@@ -51,10 +52,5 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
musicActivityOnCreateFingerprint.method.addInstruction(
|
||||
0,
|
||||
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->setClientOrderToUse()V"
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -1,12 +1,14 @@
|
||||
package app.revanced.patches.orfon.detection.root
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
|
||||
import app.revanced.patches.shared.PATCH_NAME_REMOVE_ROOT_DETECTION
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val removeRootDetectionPatch = bytecodePatch(
|
||||
name = "Remove root detection",
|
||||
description = "Removes the check for root permissions.",
|
||||
name = PATCH_NAME_REMOVE_ROOT_DETECTION,
|
||||
description = PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
|
||||
) {
|
||||
compatibleWith("com.nousguide.android.orftvthek")
|
||||
|
||||
|
||||
@@ -2,11 +2,13 @@ package app.revanced.patches.reddit.misc.tracking.url
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS
|
||||
import app.revanced.patches.shared.PATCH_NAME_SANITIZE_SHARING_LINKS
|
||||
|
||||
@Suppress("unused")
|
||||
val sanitizeUrlQueryPatch = bytecodePatch(
|
||||
name = "Sanitize sharing links",
|
||||
description = "Removes (tracking) query parameters from the URLs when sharing links.",
|
||||
name = PATCH_NAME_SANITIZE_SHARING_LINKS,
|
||||
description = PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS,
|
||||
) {
|
||||
compatibleWith("com.reddit.frontpage")
|
||||
|
||||
|
||||
@@ -2,11 +2,13 @@ package app.revanced.patches.serviceportalbund.detection.root
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
|
||||
import app.revanced.patches.shared.PATCH_NAME_REMOVE_ROOT_DETECTION
|
||||
|
||||
@Suppress("unused")
|
||||
val rootDetectionPatch = bytecodePatch(
|
||||
name = "Remove root detection",
|
||||
description = "Removes the check for root permissions and unlocked bootloader.",
|
||||
name = PATCH_NAME_REMOVE_ROOT_DETECTION,
|
||||
description = PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
|
||||
) {
|
||||
compatibleWith("at.gv.bka.serviceportal")
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package app.revanced.patches.shared
|
||||
|
||||
//
|
||||
// Names and descriptions used by different patches implementing the same feature.
|
||||
//
|
||||
|
||||
internal const val PATCH_NAME_REMOVE_ROOT_DETECTION = "Remove root detection"
|
||||
internal const val PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION = "Removes the check for root permissions and unlocked bootloader."
|
||||
|
||||
internal const val PATCH_NAME_SANITIZE_SHARING_LINKS = "Sanitize sharing links"
|
||||
internal const val PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS = "Removes the tracking query parameters from shared links."
|
||||
|
||||
internal const val PATCH_NAME_CHANGE_LINK_SHARING_DOMAIN = "Change link sharing domain"
|
||||
internal const val PATCH_DESCRIPTION_CHANGE_LINK_SHARING_DOMAIN = "Replaces the domain name of shared links."
|
||||
@@ -1,173 +1,397 @@
|
||||
package app.revanced.patches.shared.layout.branding
|
||||
|
||||
import app.revanced.patcher.Fingerprint
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.patch.ResourcePatch
|
||||
import app.revanced.patcher.patch.ResourcePatchBuilder
|
||||
import app.revanced.patcher.patch.ResourcePatchContext
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patches.all.misc.packagename.setOrGetFallbackPackageName
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen
|
||||
import app.revanced.patches.shared.misc.settings.preference.ListPreference
|
||||
import app.revanced.util.ResourceGroup
|
||||
import app.revanced.util.Utils.trimIndentMultiline
|
||||
import app.revanced.util.copyResources
|
||||
import app.revanced.util.findElementByAttributeValueOrThrow
|
||||
import app.revanced.util.removeFromParent
|
||||
import app.revanced.util.returnEarly
|
||||
import org.w3c.dom.Element
|
||||
import org.w3c.dom.NodeList
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
import java.util.logging.Logger
|
||||
|
||||
private const val REVANCED_ICON = "ReVanced*Logo" // Can never be a valid path.
|
||||
|
||||
internal val mipmapDirectories = arrayOf(
|
||||
private val mipmapDirectories = arrayOf(
|
||||
// Target app does not have ldpi icons.
|
||||
"mdpi",
|
||||
"hdpi",
|
||||
"xhdpi",
|
||||
"xxhdpi",
|
||||
"xxxhdpi",
|
||||
).map { "mipmap-$it" }.toTypedArray()
|
||||
"mipmap-mdpi",
|
||||
"mipmap-hdpi",
|
||||
"mipmap-xhdpi",
|
||||
"mipmap-xxhdpi",
|
||||
"mipmap-xxxhdpi"
|
||||
)
|
||||
|
||||
private fun formatResourceFileList(resourceNames: Array<String>) = resourceNames.joinToString("\n") { "- $it" }
|
||||
private val iconStyleNames = arrayOf(
|
||||
"rounded",
|
||||
"minimal",
|
||||
"scaled"
|
||||
)
|
||||
|
||||
/**
|
||||
* Attempts to fix unescaped and invalid characters not allowed for an Android app name.
|
||||
*/
|
||||
private fun escapeAppName(name: String): String? {
|
||||
// Remove ASCII control characters.
|
||||
val cleanedName = name.filter { it.code >= 32 }
|
||||
private const val ORIGINAL_USER_ICON_STYLE_NAME = "original"
|
||||
private const val CUSTOM_USER_ICON_STYLE_NAME = "custom"
|
||||
|
||||
// Replace invalid XML characters with escaped equivalents.
|
||||
val escapedName = cleanedName
|
||||
.replace("&", "&") // Must be first to avoid double-escaping.
|
||||
.replace("<", "<")
|
||||
.replace(">", ">")
|
||||
.replace(Regex("(?<!&)\""), """)
|
||||
private const val LAUNCHER_RESOURCE_NAME_PREFIX = "revanced_launcher_"
|
||||
private const val LAUNCHER_ADAPTIVE_BACKGROUND_PREFIX = "revanced_adaptive_background_"
|
||||
private const val LAUNCHER_ADAPTIVE_FOREGROUND_PREFIX = "revanced_adaptive_foreground_"
|
||||
private const val LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX = "revanced_adaptive_monochrome_"
|
||||
|
||||
// Trim empty spacing.
|
||||
val trimmed = escapedName.trim()
|
||||
private val USER_CUSTOM_ADAPTIVE_FILE_NAMES = arrayOf(
|
||||
"$LAUNCHER_ADAPTIVE_BACKGROUND_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.png",
|
||||
"$LAUNCHER_ADAPTIVE_FOREGROUND_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.png"
|
||||
)
|
||||
|
||||
return trimmed.ifBlank { null }
|
||||
}
|
||||
private const val USER_CUSTOM_MONOCHROME_NAME = "$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.xml"
|
||||
|
||||
internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/shared/patches/CustomBrandingPatch;"
|
||||
|
||||
/**
|
||||
* Shared custom branding patch for YouTube and YT Music.
|
||||
*/
|
||||
internal fun baseCustomBrandingPatch(
|
||||
defaultAppName: String,
|
||||
appNameValues: Map<String, String>,
|
||||
resourceFolder: String,
|
||||
iconResourceFileNames: Array<String>,
|
||||
monochromeIconFileNames: Array<String>,
|
||||
block: ResourcePatchBuilder.() -> Unit = {},
|
||||
addResourcePatchName: String,
|
||||
originalLauncherIconName: String,
|
||||
originalAppName: String,
|
||||
originalAppPackageName: String,
|
||||
copyExistingIntentsToAliases: Boolean,
|
||||
numberOfPresetAppNames: Int,
|
||||
mainActivityOnCreateFingerprint: Fingerprint,
|
||||
mainActivityName: String,
|
||||
activityAliasNameWithIntents: String,
|
||||
preferenceScreen: BasePreferenceScreen.Screen,
|
||||
block: ResourcePatchBuilder.() -> Unit,
|
||||
executeBlock: ResourcePatchContext.() -> Unit = {}
|
||||
): ResourcePatch = resourcePatch(
|
||||
name = "Custom branding",
|
||||
description = "Applies a custom app name and icon. Defaults to \"$defaultAppName\" and the ReVanced logo.",
|
||||
use = false,
|
||||
description = "Adds options to change the app icon and app name. " +
|
||||
"Branding cannot be changed for mounted (root) installations."
|
||||
) {
|
||||
val iconResourceFileNamesPng = iconResourceFileNames.map { "$it.png" }.toTypedArray<String>()
|
||||
|
||||
val appName by stringOption(
|
||||
key = "appName",
|
||||
default = defaultAppName,
|
||||
values = appNameValues,
|
||||
val customName by stringOption(
|
||||
key = "customName",
|
||||
title = "App name",
|
||||
description = "The name of the app.",
|
||||
description = "Custom app name."
|
||||
)
|
||||
|
||||
val iconPath by stringOption(
|
||||
key = "iconPath",
|
||||
default = REVANCED_ICON,
|
||||
values = mapOf("ReVanced Logo" to REVANCED_ICON),
|
||||
title = "App icon",
|
||||
val customIcon by stringOption(
|
||||
key = "customIcon",
|
||||
title = "Custom icon",
|
||||
description = """
|
||||
The icon to apply to the app.
|
||||
Folder with images to use as a custom icon.
|
||||
|
||||
If a path to a folder is provided, the folder must contain the following folders:
|
||||
The folder must contain one or more of the following folders, depending on the DPI of the device:
|
||||
${mipmapDirectories.joinToString("\n") { "- $it" }}
|
||||
|
||||
${formatResourceFileList(mipmapDirectories)}
|
||||
Each of the folders must contain all of the following files:
|
||||
${USER_CUSTOM_ADAPTIVE_FILE_NAMES.joinToString("\n")}
|
||||
|
||||
Each of these folders must contain the following files:
|
||||
|
||||
${formatResourceFileList(iconResourceFileNamesPng)}
|
||||
|
||||
Optionally, a 'drawable' folder with the monochrome icon files:
|
||||
|
||||
${formatResourceFileList(monochromeIconFileNames)}
|
||||
""".trimIndentMultiline(),
|
||||
Optionally, the path can contain a 'drawable' folder with the monochrome icon file:
|
||||
$USER_CUSTOM_MONOCHROME_NAME
|
||||
""".trimIndentMultiline()
|
||||
)
|
||||
|
||||
block()
|
||||
|
||||
dependsOn(
|
||||
addResourcesPatch,
|
||||
|
||||
bytecodePatch {
|
||||
execute {
|
||||
mainActivityOnCreateFingerprint.method.addInstruction(
|
||||
0,
|
||||
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->setBranding()V"
|
||||
)
|
||||
|
||||
numberOfPresetAppNamesExtensionFingerprint.method.returnEarly(numberOfPresetAppNames)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
finalize {
|
||||
val useCustomName = customName != null
|
||||
val useCustomIcon = customIcon != null
|
||||
|
||||
if (setOrGetFallbackPackageName(originalAppPackageName) == originalAppPackageName) {
|
||||
if (useCustomName || useCustomIcon) {
|
||||
Logger.getLogger(this::class.java.name).warning(
|
||||
"Custom branding does not work with root installation. No changes applied."
|
||||
)
|
||||
}
|
||||
return@finalize
|
||||
}
|
||||
|
||||
preferenceScreen.addPreferences(
|
||||
if (useCustomName) {
|
||||
ListPreference(
|
||||
key = "revanced_custom_branding_name",
|
||||
entriesKey = "revanced_custom_branding_name_custom_entries",
|
||||
entryValuesKey = "revanced_custom_branding_name_custom_entry_values"
|
||||
)
|
||||
} else {
|
||||
ListPreference("revanced_custom_branding_name")
|
||||
},
|
||||
if (useCustomIcon) {
|
||||
ListPreference(
|
||||
key = "revanced_custom_branding_icon",
|
||||
entriesKey = "revanced_custom_branding_icon_custom_entries",
|
||||
entryValuesKey = "revanced_custom_branding_icon_custom_entry_values"
|
||||
)
|
||||
} else {
|
||||
ListPreference("revanced_custom_branding_icon")
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
execute {
|
||||
val mipmapIconResourceGroups = mipmapDirectories.map { directory ->
|
||||
ResourceGroup(
|
||||
directory,
|
||||
*iconResourceFileNamesPng,
|
||||
addResources("shared", "layout.branding.baseCustomBrandingPatch")
|
||||
addResources(addResourcePatchName, "layout.branding.customBrandingPatch")
|
||||
|
||||
val useCustomName = customName != null
|
||||
val useCustomIcon = customIcon != null
|
||||
|
||||
iconStyleNames.forEach { style ->
|
||||
copyResources(
|
||||
"custom-branding",
|
||||
ResourceGroup(
|
||||
"drawable",
|
||||
"$LAUNCHER_ADAPTIVE_BACKGROUND_PREFIX$style.xml",
|
||||
"$LAUNCHER_ADAPTIVE_FOREGROUND_PREFIX$style.xml",
|
||||
"$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$style.xml"
|
||||
),
|
||||
ResourceGroup(
|
||||
"mipmap-anydpi",
|
||||
"$LAUNCHER_RESOURCE_NAME_PREFIX$style.xml"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
val iconPathTrimmed = iconPath!!.trim()
|
||||
if (iconPathTrimmed == REVANCED_ICON) {
|
||||
// Replace mipmap icons with preset patch icons.
|
||||
mipmapIconResourceGroups.forEach { groupResources ->
|
||||
copyResources(resourceFolder, groupResources)
|
||||
// Copy template user icon, because the aliases must be added even if no user icon is provided.
|
||||
copyResources(
|
||||
"custom-branding",
|
||||
ResourceGroup(
|
||||
"mipmap-anydpi",
|
||||
"$LAUNCHER_RESOURCE_NAME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.xml",
|
||||
),
|
||||
ResourceGroup(
|
||||
"drawable",
|
||||
"$LAUNCHER_ADAPTIVE_MONOCHROME_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.xml",
|
||||
)
|
||||
)
|
||||
|
||||
// Copy template icon png files.
|
||||
mipmapDirectories.forEach { dpi ->
|
||||
copyResources(
|
||||
"custom-branding",
|
||||
ResourceGroup(
|
||||
dpi,
|
||||
"$LAUNCHER_ADAPTIVE_BACKGROUND_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.png",
|
||||
"$LAUNCHER_ADAPTIVE_FOREGROUND_PREFIX$CUSTOM_USER_ICON_STYLE_NAME.png",
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
document("AndroidManifest.xml").use { document ->
|
||||
// Create launch aliases that can be programmatically selected in app.
|
||||
fun createAlias(
|
||||
aliasName: String,
|
||||
iconMipmapName: String,
|
||||
appNameIndex: Int,
|
||||
useCustomName: Boolean,
|
||||
enabled: Boolean,
|
||||
intents: NodeList
|
||||
): Element {
|
||||
val label = if (useCustomName) {
|
||||
if (customName == null) {
|
||||
"Custom" // Dummy text, and normally cannot be seen.
|
||||
} else {
|
||||
customName!!
|
||||
}
|
||||
} else if (appNameIndex == 1) {
|
||||
// Indexing starts at 1.
|
||||
originalAppName
|
||||
} else {
|
||||
"@string/revanced_custom_branding_name_entry_$appNameIndex"
|
||||
}
|
||||
val alias = document.createElement("activity-alias")
|
||||
alias.setAttribute("android:name", aliasName)
|
||||
alias.setAttribute("android:enabled", enabled.toString())
|
||||
alias.setAttribute("android:exported", "true")
|
||||
alias.setAttribute("android:icon", "@mipmap/$iconMipmapName")
|
||||
alias.setAttribute("android:label", label)
|
||||
alias.setAttribute("android:targetActivity", mainActivityName)
|
||||
|
||||
// Copy all intents from the original alias so long press actions still work.
|
||||
if (copyExistingIntentsToAliases) {
|
||||
for (i in 0 until intents.length) {
|
||||
alias.appendChild(
|
||||
intents.item(i).cloneNode(true)
|
||||
)
|
||||
}
|
||||
} else {
|
||||
val intentFilter = document.createElement("intent-filter").apply {
|
||||
val action = document.createElement("action")
|
||||
action.setAttribute("android:name", "android.intent.action.MAIN")
|
||||
appendChild(action)
|
||||
|
||||
val category = document.createElement("category")
|
||||
category.setAttribute("android:name", "android.intent.category.LAUNCHER")
|
||||
appendChild(category)
|
||||
}
|
||||
alias.appendChild(intentFilter)
|
||||
}
|
||||
|
||||
return alias
|
||||
}
|
||||
|
||||
// Replace monochrome icons.
|
||||
monochromeIconFileNames.forEach { fileName ->
|
||||
copyResources(
|
||||
resourceFolder,
|
||||
ResourceGroup("drawable", fileName)
|
||||
val application = document.getElementsByTagName("application").item(0) as Element
|
||||
val intentFilters = document.childNodes.findElementByAttributeValueOrThrow(
|
||||
"android:name",
|
||||
activityAliasNameWithIntents
|
||||
).childNodes
|
||||
|
||||
// The YT application name can appear in some places along side the system
|
||||
// YouTube app, such as the settings app list and in the "open with" file picker.
|
||||
// Because the YouTube app cannot be completely uninstalled and only disabled,
|
||||
// use a custom name for this situation to disambiguate which app is which.
|
||||
application.setAttribute(
|
||||
"android:label",
|
||||
"@string/revanced_custom_branding_name_entry_2"
|
||||
)
|
||||
|
||||
for (appNameIndex in 1 .. numberOfPresetAppNames) {
|
||||
fun aliasName(name: String): String = ".revanced_" + name + '_' + appNameIndex
|
||||
|
||||
val useCustomNameLabel = (useCustomName && appNameIndex == numberOfPresetAppNames)
|
||||
|
||||
// Original icon.
|
||||
application.appendChild(
|
||||
createAlias(
|
||||
aliasName = aliasName(ORIGINAL_USER_ICON_STYLE_NAME),
|
||||
iconMipmapName = originalLauncherIconName,
|
||||
appNameIndex = appNameIndex,
|
||||
useCustomName = useCustomNameLabel,
|
||||
enabled = (appNameIndex == 1),
|
||||
intentFilters
|
||||
)
|
||||
)
|
||||
|
||||
// Bundled icons.
|
||||
iconStyleNames.forEachIndexed { index, style ->
|
||||
application.appendChild(
|
||||
createAlias(
|
||||
aliasName = aliasName(style),
|
||||
iconMipmapName = LAUNCHER_RESOURCE_NAME_PREFIX + style,
|
||||
appNameIndex = appNameIndex,
|
||||
useCustomName = useCustomNameLabel,
|
||||
enabled = false,
|
||||
intentFilters
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// User provided custom icon.
|
||||
//
|
||||
// Must add all aliases even if the user did not provide a custom icon of their own.
|
||||
// This is because if the user installs with an option, then repatches without the option,
|
||||
// the alias must still exist because if it was previously enabled and then it's removed
|
||||
// the app will become broken and cannot launch. Even if the app data is cleared
|
||||
// it still cannot be launched and the only fix is to uninstall the app.
|
||||
// To prevent this, always include all aliases and use dummy data if needed.
|
||||
application.appendChild(
|
||||
createAlias(
|
||||
aliasName = aliasName(CUSTOM_USER_ICON_STYLE_NAME),
|
||||
iconMipmapName = LAUNCHER_RESOURCE_NAME_PREFIX + CUSTOM_USER_ICON_STYLE_NAME,
|
||||
appNameIndex = appNameIndex,
|
||||
useCustomName = useCustomNameLabel,
|
||||
enabled = false,
|
||||
intentFilters
|
||||
)
|
||||
)
|
||||
}
|
||||
} else {
|
||||
val filePath = File(iconPathTrimmed)
|
||||
|
||||
// Remove the main action from the original alias, otherwise two apps icons
|
||||
// can be shown in the launcher. Can only be done after adding the new aliases.
|
||||
intentFilters.findElementByAttributeValueOrThrow(
|
||||
"android:name",
|
||||
"android.intent.action.MAIN"
|
||||
).removeFromParent()
|
||||
}
|
||||
|
||||
// Copy custom icons last, so if the user enters an invalid icon path
|
||||
// and an exception is thrown then the critical manifest changes are still made.
|
||||
if (useCustomIcon) {
|
||||
// Copy user provided files
|
||||
val iconPathFile = File(customIcon!!.trim())
|
||||
|
||||
if (!iconPathFile.exists()) {
|
||||
throw PatchException(
|
||||
"The custom icon path cannot be found: " + iconPathFile.absolutePath
|
||||
)
|
||||
}
|
||||
|
||||
if (!iconPathFile.isDirectory) {
|
||||
throw PatchException(
|
||||
"The custom icon path must be a folder: " + iconPathFile.absolutePath
|
||||
)
|
||||
}
|
||||
|
||||
val sourceFolders = iconPathFile.listFiles { file -> file.isDirectory }
|
||||
?: throw PatchException("The custom icon path contains no subfolders: " +
|
||||
iconPathFile.absolutePath)
|
||||
|
||||
val resourceDirectory = get("res")
|
||||
var copiedFiles = false
|
||||
|
||||
// Replace
|
||||
mipmapIconResourceGroups.forEach { groupResources ->
|
||||
val groupResourceDirectoryName = groupResources.resourceDirectoryName
|
||||
val fromDirectory = filePath.resolve(groupResourceDirectoryName)
|
||||
val toDirectory = resourceDirectory.resolve(groupResourceDirectoryName)
|
||||
// For each source folder, copy the files to the target resource directories.
|
||||
sourceFolders.forEach { dpiSourceFolder ->
|
||||
val targetDpiFolder = resourceDirectory.resolve(dpiSourceFolder.name)
|
||||
if (!targetDpiFolder.exists()) return@forEach
|
||||
|
||||
groupResources.resources.forEach { iconFileName ->
|
||||
Files.write(
|
||||
toDirectory.resolve(iconFileName).toPath(),
|
||||
fromDirectory.resolve(iconFileName).readBytes(),
|
||||
)
|
||||
val customFiles = dpiSourceFolder.listFiles { file ->
|
||||
file.isFile && file.name in USER_CUSTOM_ADAPTIVE_FILE_NAMES
|
||||
}!!
|
||||
|
||||
if (customFiles.size > 0 && customFiles.size != USER_CUSTOM_ADAPTIVE_FILE_NAMES.size) {
|
||||
throw PatchException("Must include all required icon files " +
|
||||
"but only found " + customFiles.map { it.name })
|
||||
}
|
||||
|
||||
customFiles.forEach { imgSourceFile ->
|
||||
val imgTargetFile = targetDpiFolder.resolve(imgSourceFile.name)
|
||||
imgSourceFile.copyTo(target = imgTargetFile, overwrite = true)
|
||||
|
||||
copiedFiles = true
|
||||
}
|
||||
}
|
||||
|
||||
// Copy all monochrome icons if provided.
|
||||
monochromeIconFileNames.forEach { fileName ->
|
||||
val replacementMonochrome = filePath.resolve("drawable").resolve(fileName)
|
||||
if (replacementMonochrome.exists()) {
|
||||
Files.write(
|
||||
resourceDirectory.resolve("drawable").resolve(fileName).toPath(),
|
||||
replacementMonochrome.readBytes(),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Change the app name.
|
||||
escapeAppName(appName!!)?.let { escapedAppName ->
|
||||
val newValue = "android:label=\"$escapedAppName\""
|
||||
|
||||
val manifest = get("AndroidManifest.xml")
|
||||
val original = manifest.readText()
|
||||
val replacement = original
|
||||
// YouTube
|
||||
.replace("android:label=\"@string/application_name\"", newValue)
|
||||
// YT Music
|
||||
.replace("android:label=\"@string/app_launcher_name\"", newValue)
|
||||
|
||||
if (original == replacement) {
|
||||
Logger.getLogger(this::class.java.name).warning(
|
||||
"Could not replace manifest app name"
|
||||
// Copy monochrome if it provided.
|
||||
val monochromeRelativePath = "drawable/$USER_CUSTOM_MONOCHROME_NAME"
|
||||
val monochromeFile = iconPathFile.resolve(monochromeRelativePath)
|
||||
if (monochromeFile.exists()) {
|
||||
monochromeFile.copyTo(
|
||||
target = resourceDirectory.resolve(monochromeRelativePath),
|
||||
overwrite = true
|
||||
)
|
||||
copiedFiles = true
|
||||
}
|
||||
|
||||
manifest.writeText(replacement)
|
||||
if (!copiedFiles) {
|
||||
throw PatchException("Could not find any replacement images in " +
|
||||
"patch option path: " + iconPathFile.absolutePath)
|
||||
}
|
||||
}
|
||||
|
||||
executeBlock() // Must be after the main code to rename the new icons for YouTube 19.34+.
|
||||
executeBlock()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package app.revanced.patches.shared.layout.branding
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val numberOfPresetAppNamesExtensionFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC)
|
||||
returns("I")
|
||||
parameters()
|
||||
custom { method, classDef ->
|
||||
method.name == "numberOfPresetAppNames" && classDef.type == EXTENSION_CLASS_DESCRIPTOR
|
||||
}
|
||||
}
|
||||
@@ -79,7 +79,7 @@ internal val darkThemeBackgroundColorOption = stringOption(
|
||||
*/
|
||||
internal fun baseThemePatch(
|
||||
extensionClassDescriptor: String,
|
||||
block: BytecodePatchBuilder.() -> Unit = {},
|
||||
block: BytecodePatchBuilder.() -> Unit,
|
||||
executeBlock: BytecodePatchContext.() -> Unit = {}
|
||||
) = bytecodePatch(
|
||||
name = "Theme",
|
||||
|
||||
@@ -1,16 +1,11 @@
|
||||
package app.revanced.patches.shared.misc.gms
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.patches.shared.misc.gms.EXTENSION_CLASS_DESCRIPTOR
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
const val GET_GMS_CORE_VENDOR_GROUP_ID_METHOD_NAME = "getGmsCoreVendorGroupId"
|
||||
|
||||
internal val gmsCoreSupportFingerprint = fingerprint {
|
||||
custom { _, classDef ->
|
||||
classDef.endsWith("GmsCoreSupport;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val googlePlayUtilityFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
returns("I")
|
||||
@@ -28,3 +23,21 @@ internal val serviceCheckFingerprint = fingerprint {
|
||||
parameters("L", "I")
|
||||
strings("Google Play Services not available")
|
||||
}
|
||||
|
||||
internal val gmsCoreSupportFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC)
|
||||
returns("Ljava/lang/String;")
|
||||
parameters()
|
||||
custom { method, classDef ->
|
||||
method.name == "getGmsCoreVendorGroupId" && classDef.type == EXTENSION_CLASS_DESCRIPTOR
|
||||
}
|
||||
}
|
||||
|
||||
internal val originalPackageNameExtensionFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC)
|
||||
returns("Ljava/lang/String;")
|
||||
parameters()
|
||||
custom { methodDef, classDef ->
|
||||
methodDef.name == "getOriginalPackageName" && classDef.type == EXTENSION_CLASS_DESCRIPTOR
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,18 @@
|
||||
package app.revanced.patches.shared.misc.gms
|
||||
|
||||
import app.revanced.patcher.Fingerprint
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.instructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.*
|
||||
import app.revanced.patcher.patch.BytecodePatchBuilder
|
||||
import app.revanced.patcher.patch.BytecodePatchContext
|
||||
import app.revanced.patcher.patch.Option
|
||||
import app.revanced.patcher.patch.Patch
|
||||
import app.revanced.patcher.patch.ResourcePatchBuilder
|
||||
import app.revanced.patcher.patch.ResourcePatchContext
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patches.all.misc.packagename.changePackageNamePatch
|
||||
import app.revanced.patches.all.misc.packagename.setOrGetFallbackPackageName
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
@@ -12,7 +20,8 @@ import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.gms.Constants.ACTIONS
|
||||
import app.revanced.patches.shared.misc.gms.Constants.AUTHORITIES
|
||||
import app.revanced.patches.shared.misc.gms.Constants.PERMISSIONS
|
||||
import app.revanced.util.*
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.returnEarly
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21c
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
@@ -23,6 +32,8 @@ import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||
import org.w3c.dom.Element
|
||||
import org.w3c.dom.Node
|
||||
|
||||
internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/shared/GmsCoreSupport;"
|
||||
|
||||
private const val PACKAGE_NAME_REGEX_PATTERN = "^[a-z]\\w*(\\.[a-z]\\w*)+\$"
|
||||
|
||||
/**
|
||||
@@ -201,19 +212,18 @@ fun gmsCoreSupportPatch(
|
||||
googlePlayUtilityFingerprint.method.returnEarly(0)
|
||||
}
|
||||
|
||||
// Set original and patched package names for extension to use.
|
||||
originalPackageNameExtensionFingerprint.method.returnEarly(fromPackageName)
|
||||
|
||||
// Verify GmsCore is installed and whitelisted for power optimizations and background usage.
|
||||
mainActivityOnCreateFingerprint.method.apply {
|
||||
addInstructions(
|
||||
0,
|
||||
"invoke-static/range { p0 .. p0 }, Lapp/revanced/extension/shared/GmsCoreSupport;->" +
|
||||
"checkGmsCore(Landroid/app/Activity;)V",
|
||||
)
|
||||
}
|
||||
mainActivityOnCreateFingerprint.method.addInstruction(
|
||||
0,
|
||||
"invoke-static/range { p0 .. p0 }, $EXTENSION_CLASS_DESCRIPTOR->" +
|
||||
"checkGmsCore(Landroid/app/Activity;)V"
|
||||
)
|
||||
|
||||
// Change the vendor of GmsCore in the extension.
|
||||
gmsCoreSupportFingerprint.classDef.methods
|
||||
.single { it.name == GET_GMS_CORE_VENDOR_GROUP_ID_METHOD_NAME }
|
||||
.replaceInstruction(0, "const-string v0, \"$gmsCoreVendorGroupId\"")
|
||||
gmsCoreSupportFingerprint.method.returnEarly(gmsCoreVendorGroupId!!)
|
||||
|
||||
executeBlock()
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS
|
||||
import app.revanced.patches.shared.PATCH_NAME_SANITIZE_SHARING_LINKS
|
||||
import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen
|
||||
import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory
|
||||
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference.Sorting
|
||||
@@ -20,14 +22,17 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/shared/patches/SanitizeSharingLinksPatch;"
|
||||
|
||||
/**
|
||||
* Patch shared by YouTube and YT Music.
|
||||
*/
|
||||
internal fun sanitizeSharingLinksPatch(
|
||||
block: BytecodePatchBuilder.() -> Unit = {},
|
||||
executeBlock: BytecodePatchContext.() -> Unit = {},
|
||||
preferenceScreen: BasePreferenceScreen.Screen,
|
||||
replaceMusicLinksWithYouTube: Boolean = false
|
||||
) = bytecodePatch(
|
||||
name = "Sanitize sharing links",
|
||||
description = "Adds an option to remove the tracking query parameter from shared links.",
|
||||
name = PATCH_NAME_SANITIZE_SHARING_LINKS,
|
||||
description = PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS,
|
||||
) {
|
||||
block()
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package app.revanced.patches.shared.misc.spoof
|
||||
|
||||
import app.revanced.patcher.Fingerprint
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
@@ -36,11 +37,13 @@ internal const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
private lateinit var buildRequestMethod: MutableMethod
|
||||
private var buildRequestMethodUrlRegister = -1
|
||||
|
||||
fun spoofVideoStreamsPatch(
|
||||
block: BytecodePatchBuilder.() -> Unit = {},
|
||||
fixMediaFetchHotConfigChanges: BytecodePatchBuilder.() -> Boolean = { false },
|
||||
fixMediaFetchHotConfigAlternativeChanges: BytecodePatchBuilder.() -> Boolean = { false },
|
||||
internal fun spoofVideoStreamsPatch(
|
||||
extensionClassDescriptor: String,
|
||||
mainActivityOnCreateFingerprint: Fingerprint,
|
||||
fixMediaFetchHotConfig: BytecodePatchBuilder.() -> Boolean = { false },
|
||||
fixMediaFetchHotConfigAlternative: BytecodePatchBuilder.() -> Boolean = { false },
|
||||
fixParsePlaybackResponseFeatureFlag: BytecodePatchBuilder.() -> Boolean = { false },
|
||||
block: BytecodePatchBuilder.() -> Unit,
|
||||
executeBlock: BytecodePatchContext.() -> Unit = {},
|
||||
) = bytecodePatch(
|
||||
name = "Spoof video streams",
|
||||
@@ -53,6 +56,11 @@ fun spoofVideoStreamsPatch(
|
||||
execute {
|
||||
addResources("shared", "misc.fix.playback.spoofVideoStreamsPatch")
|
||||
|
||||
mainActivityOnCreateFingerprint.method.addInstruction(
|
||||
0,
|
||||
"invoke-static { }, $extensionClassDescriptor->setClientOrderToUse()V"
|
||||
)
|
||||
|
||||
// region Enable extension helper method used by other patches
|
||||
|
||||
patchIncludedExtensionMethodFingerprint.method.returnEarly(true)
|
||||
@@ -308,14 +316,14 @@ fun spoofVideoStreamsPatch(
|
||||
|
||||
// region turn off stream config replacement feature flag.
|
||||
|
||||
if (fixMediaFetchHotConfigChanges()) {
|
||||
if (fixMediaFetchHotConfig()) {
|
||||
mediaFetchHotConfigFingerprint.method.insertLiteralOverride(
|
||||
MEDIA_FETCH_HOT_CONFIG_FEATURE_FLAG,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->useMediaFetchHotConfigReplacement(Z)Z"
|
||||
)
|
||||
}
|
||||
|
||||
if (fixMediaFetchHotConfigAlternativeChanges()) {
|
||||
if (fixMediaFetchHotConfigAlternative()) {
|
||||
mediaFetchHotConfigAlternativeFingerprint.method.insertLiteralOverride(
|
||||
MEDIA_FETCH_HOT_CONFIG_ALTERNATIVE_FEATURE_FLAG,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->useMediaFetchHotConfigReplacement(Z)Z"
|
||||
|
||||
@@ -17,7 +17,8 @@ private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
@Suppress("unused")
|
||||
val hideCreateButtonPatch = bytecodePatch(
|
||||
name = "Hide Create button",
|
||||
description = "Hides the \"Create\" button in the navigation bar."
|
||||
description = "Hides the \"Create\" button in the navigation bar. The latest app targets do not need this patch.",
|
||||
use = false
|
||||
) {
|
||||
compatibleWith("com.spotify.music")
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@ package app.revanced.patches.spotify.misc.privacy
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS
|
||||
import app.revanced.patches.shared.PATCH_NAME_SANITIZE_SHARING_LINKS
|
||||
import app.revanced.patches.spotify.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
@@ -15,8 +17,8 @@ private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
|
||||
@Suppress("unused")
|
||||
val sanitizeSharingLinksPatch = bytecodePatch(
|
||||
name = "Sanitize sharing links",
|
||||
description = "Removes the tracking query parameters from links before they are shared.",
|
||||
name = PATCH_NAME_SANITIZE_SHARING_LINKS,
|
||||
description = PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS,
|
||||
) {
|
||||
compatibleWith("com.spotify.music")
|
||||
|
||||
@@ -24,7 +26,7 @@ val sanitizeSharingLinksPatch = bytecodePatch(
|
||||
|
||||
execute {
|
||||
val extensionMethodDescriptor = "$EXTENSION_CLASS_DESCRIPTOR->" +
|
||||
"sanitizeUrl(Ljava/lang/String;)Ljava/lang/String;"
|
||||
"sanitizeSharingLink(Ljava/lang/String;)Ljava/lang/String;"
|
||||
|
||||
val copyFingerprint = if (shareCopyUrlFingerprint.originalMethodOrNull != null) {
|
||||
shareCopyUrlFingerprint
|
||||
|
||||
@@ -1,36 +1,64 @@
|
||||
package app.revanced.patches.twitter.misc.links
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patches.shared.misc.mapping.get
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_CHANGE_LINK_SHARING_DOMAIN
|
||||
import app.revanced.patches.shared.PATCH_NAME_CHANGE_LINK_SHARING_DOMAIN
|
||||
import app.revanced.patches.twitter.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import app.revanced.util.findElementByAttributeValueOrThrow
|
||||
import app.revanced.util.returnEarly
|
||||
import java.net.InetAddress
|
||||
import java.net.UnknownHostException
|
||||
import java.util.logging.Logger
|
||||
|
||||
internal var tweetShareLinkTemplateId = -1L
|
||||
private set
|
||||
internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/twitter/patches/links/ChangeLinkSharingDomainPatch;"
|
||||
|
||||
internal val domainNameOption by stringOption(
|
||||
key = "domainName",
|
||||
default = "https://fxtwitter.com",
|
||||
title = "Domain name",
|
||||
description = "The domain name to use when sharing links.",
|
||||
required = true,
|
||||
) {
|
||||
// Do a courtesy check if the host can be resolved.
|
||||
// If it does not resolve, then print a warning but use the host anyway.
|
||||
// Unresolvable hosts should not be rejected, since the patching environment
|
||||
// may not allow network connections or the network may be down.
|
||||
try {
|
||||
InetAddress.getByName(it)
|
||||
} catch (e: UnknownHostException) {
|
||||
Logger.getLogger(this::class.java.name).warning(
|
||||
"Host \"$it\" did not resolve to any domain."
|
||||
)
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
internal val changeLinkSharingDomainResourcePatch = resourcePatch {
|
||||
dependsOn(resourceMappingPatch)
|
||||
|
||||
execute {
|
||||
tweetShareLinkTemplateId = resourceMappings["string", "tweet_share_link"]
|
||||
val domainName = domainNameOption!!
|
||||
|
||||
val shareLinkTemplate = if (domainName.endsWith("/")) {
|
||||
"$domainName%1\$s/status/%2\$s"
|
||||
} else {
|
||||
"$domainName/%1\$s/status/%2\$s"
|
||||
}
|
||||
|
||||
document("res/values/strings.xml").use { document ->
|
||||
document.documentElement.childNodes.findElementByAttributeValueOrThrow(
|
||||
"name",
|
||||
"tweet_share_link"
|
||||
).textContent = shareLinkTemplate
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/twitter/patches/links/ChangeLinkSharingDomainPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val changeLinkSharingDomainPatch = bytecodePatch(
|
||||
name = "Change link sharing domain",
|
||||
description = "Replaces the domain name of Twitter links when sharing them.",
|
||||
name = PATCH_NAME_CHANGE_LINK_SHARING_DOMAIN,
|
||||
description = PATCH_DESCRIPTION_CHANGE_LINK_SHARING_DOMAIN
|
||||
) {
|
||||
dependsOn(
|
||||
changeLinkSharingDomainResourcePatch,
|
||||
@@ -44,26 +72,11 @@ val changeLinkSharingDomainPatch = bytecodePatch(
|
||||
)
|
||||
)
|
||||
|
||||
val domainName by stringOption(
|
||||
key = "domainName",
|
||||
default = "fxtwitter.com",
|
||||
title = "Domain name",
|
||||
description = "The domain name to use when sharing links.",
|
||||
required = true,
|
||||
)
|
||||
|
||||
execute {
|
||||
linkSharingDomainFingerprint.let {
|
||||
val replacementIndex = it.stringMatches!!.first().index
|
||||
val domainRegister = it.method.getInstruction<OneRegisterInstruction>(
|
||||
replacementIndex
|
||||
).registerA
|
||||
val domainName = domainNameOption!!
|
||||
|
||||
it.method.replaceInstruction(
|
||||
replacementIndex,
|
||||
"const-string v$domainRegister, \"https://$domainName\"",
|
||||
)
|
||||
}
|
||||
// Replace the domain name in the link sharing extension methods.
|
||||
linkSharingDomainHelperFingerprint.method.returnEarly(domainName)
|
||||
|
||||
// Replace the domain name when copying a link with "Copy link" button.
|
||||
linkBuilderFingerprint.method.addInstructions(
|
||||
@@ -74,20 +87,5 @@ val changeLinkSharingDomainPatch = bytecodePatch(
|
||||
return-object p0
|
||||
"""
|
||||
)
|
||||
|
||||
// Used in the Share via... dialog.
|
||||
linkResourceGetterFingerprint.method.apply {
|
||||
val templateIdConstIndex = indexOfFirstLiteralInstructionOrThrow(tweetShareLinkTemplateId)
|
||||
|
||||
// Format the link with the new domain name register (1 instruction below the const).
|
||||
val formatLinkCallIndex = templateIdConstIndex + 1
|
||||
val register = getInstruction<FiveRegisterInstruction>(formatLinkCallIndex).registerE
|
||||
|
||||
// Replace the original method call with the new method call.
|
||||
replaceInstruction(
|
||||
formatLinkCallIndex,
|
||||
"invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->formatResourceLink([Ljava/lang/Object;)Ljava/lang/String;",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package app.revanced.patches.twitter.misc.links
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.literal
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val openLinkFingerprint = fingerprint {
|
||||
returns("V")
|
||||
@@ -19,13 +17,8 @@ internal val linkBuilderFingerprint = fingerprint {
|
||||
strings("/%1\$s/status/%2\$d")
|
||||
}
|
||||
|
||||
// Gets Resource string for share link view available by pressing "Share via" button.
|
||||
internal val linkResourceGetterFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
parameters("Landroid/content/res/Resources;")
|
||||
literal { tweetShareLinkTemplateId }
|
||||
}
|
||||
|
||||
internal val linkSharingDomainFingerprint = fingerprint {
|
||||
strings("https://fxtwitter.com")
|
||||
internal val linkSharingDomainHelperFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "getShareDomain" && classDef.type == EXTENSION_CLASS_DESCRIPTOR
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,11 +2,13 @@ package app.revanced.patches.twitter.misc.links
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS
|
||||
import app.revanced.patches.shared.PATCH_NAME_SANITIZE_SHARING_LINKS
|
||||
|
||||
@Suppress("unused")
|
||||
val sanitizeSharingLinksPatch = bytecodePatch(
|
||||
name = "Sanitize sharing links",
|
||||
description = "Removes the tracking query parameters from links before they are shared.",
|
||||
name = PATCH_NAME_SANITIZE_SHARING_LINKS,
|
||||
description = PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS,
|
||||
) {
|
||||
compatibleWith(
|
||||
"com.twitter.android"(
|
||||
|
||||
@@ -1,38 +1,28 @@
|
||||
package app.revanced.patches.youtube.layout.branding
|
||||
|
||||
import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch
|
||||
import app.revanced.patches.shared.layout.branding.mipmapDirectories
|
||||
import java.nio.file.Files
|
||||
|
||||
private const val APP_NAME = "YouTube ReVanced"
|
||||
|
||||
private val youtubeIconResourceFileNames_19_34 = mapOf(
|
||||
"adaptiveproduct_youtube_foreground_color_108" to "adaptiveproduct_youtube_2024_q4_foreground_color_108",
|
||||
"adaptiveproduct_youtube_background_color_108" to "adaptiveproduct_youtube_2024_q4_background_color_108",
|
||||
)
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.gms.Constants.YOUTUBE_MAIN_ACTIVITY_NAME
|
||||
import app.revanced.patches.youtube.misc.gms.Constants.YOUTUBE_PACKAGE_NAME
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
|
||||
|
||||
@Suppress("unused")
|
||||
val customBrandingPatch = baseCustomBrandingPatch(
|
||||
defaultAppName = APP_NAME,
|
||||
appNameValues = mapOf(
|
||||
"YouTube ReVanced" to APP_NAME,
|
||||
"YT ReVanced" to "YT ReVanced",
|
||||
"YT" to "YT",
|
||||
"YouTube" to "YouTube",
|
||||
),
|
||||
resourceFolder = "custom-branding/youtube",
|
||||
iconResourceFileNames = arrayOf(
|
||||
"adaptiveproduct_youtube_background_color_108",
|
||||
"adaptiveproduct_youtube_foreground_color_108",
|
||||
"ic_launcher",
|
||||
"ic_launcher_round",
|
||||
),
|
||||
monochromeIconFileNames = arrayOf(
|
||||
"adaptive_monochrome_ic_youtube_launcher.xml",
|
||||
"ringo2_adaptive_monochrome_ic_youtube_launcher.xml"
|
||||
),
|
||||
addResourcePatchName = "youtube",
|
||||
originalLauncherIconName = "ic_launcher",
|
||||
originalAppName = "@string/application_name",
|
||||
originalAppPackageName = YOUTUBE_PACKAGE_NAME,
|
||||
copyExistingIntentsToAliases = true,
|
||||
numberOfPresetAppNames = 5,
|
||||
mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint,
|
||||
mainActivityName = YOUTUBE_MAIN_ACTIVITY_NAME,
|
||||
activityAliasNameWithIntents = "com.google.android.youtube.app.honeycomb.Shell\$HomeActivity",
|
||||
preferenceScreen = PreferenceScreen.GENERAL_LAYOUT,
|
||||
|
||||
block = {
|
||||
dependsOn(sharedExtensionPatch)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
@@ -41,20 +31,5 @@ val customBrandingPatch = baseCustomBrandingPatch(
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
},
|
||||
|
||||
executeBlock = {
|
||||
val resourceDirectory = get("res")
|
||||
|
||||
mipmapDirectories.forEach { directory ->
|
||||
val targetDirectory = resourceDirectory.resolve(directory)
|
||||
|
||||
youtubeIconResourceFileNames_19_34.forEach { (old, new) ->
|
||||
val oldFile = targetDirectory.resolve("$old.png")
|
||||
val newFile = targetDirectory.resolve("$new.png")
|
||||
|
||||
Files.write(newFile.toPath(), oldFile.readBytes())
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@@ -136,8 +136,21 @@ val changeHeaderPatch = resourcePatch(
|
||||
)
|
||||
|
||||
if (custom != null) {
|
||||
val sourceFolders = File(custom!!).listFiles { file -> file.isDirectory }
|
||||
?: throw PatchException("The provided path is not a directory: $custom")
|
||||
val customFile = File(custom!!)
|
||||
if (!customFile.exists()) {
|
||||
throw PatchException("The custom icon path cannot be found: " +
|
||||
customFile.absolutePath
|
||||
)
|
||||
}
|
||||
|
||||
if (!customFile.isDirectory) {
|
||||
throw PatchException("The custom icon path must be a folder: "
|
||||
+ customFile.absolutePath)
|
||||
}
|
||||
|
||||
val sourceFolders = customFile.listFiles { file -> file.isDirectory }
|
||||
?: throw PatchException("The custom icon path contains no subfolders: " +
|
||||
customFile.absolutePath)
|
||||
|
||||
val customResourceFileNames = getLightDarkFileNames(CUSTOM_HEADER_RESOURCE_NAME)
|
||||
|
||||
@@ -166,7 +179,8 @@ val changeHeaderPatch = resourcePatch(
|
||||
}
|
||||
|
||||
if (!copiedFiles) {
|
||||
throw PatchException("No custom header images found in the provided path: $custom")
|
||||
throw PatchException("No custom header images found in " +
|
||||
"the provided path: " + customFile.absolutePath)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import app.revanced.util.forEachLiteralValueInstruction
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstLiteralInstruction
|
||||
import app.revanced.util.removeFromParent
|
||||
import app.revanced.util.returnLate
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
@@ -127,7 +128,7 @@ private val hideShortsComponentsResourcePatch = resourcePatch {
|
||||
)
|
||||
|
||||
if (hideShortsAppShortcut == true) {
|
||||
shortsItem.parentNode.removeChild(shortsItem)
|
||||
shortsItem.removeFromParent()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,7 +139,7 @@ private val hideShortsComponentsResourcePatch = resourcePatch {
|
||||
)
|
||||
|
||||
if (hideShortsWidget == true) {
|
||||
shortsItem.parentNode.removeChild(shortsItem)
|
||||
shortsItem.removeFromParent()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package app.revanced.patches.youtube.misc.gms
|
||||
|
||||
internal object Constants {
|
||||
internal const val YOUTUBE_MAIN_ACTIVITY_NAME = "com.google.android.apps.youtube.app.watchwhile.MainActivity"
|
||||
|
||||
const val YOUTUBE_PACKAGE_NAME = "com.google.android.youtube"
|
||||
const val REVANCED_YOUTUBE_PACKAGE_NAME = "app.revanced.android.youtube"
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package app.revanced.patches.youtube.misc.spoof
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.shared.misc.settings.preference.ListPreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
|
||||
@@ -16,9 +15,20 @@ import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch;"
|
||||
|
||||
val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
|
||||
extensionClassDescriptor = "Lapp/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch;",
|
||||
mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint,
|
||||
fixMediaFetchHotConfig = {
|
||||
is_19_34_or_greater
|
||||
},
|
||||
fixMediaFetchHotConfigAlternative = {
|
||||
// In 20.14 the flag was merged with 20.03 start playback flag.
|
||||
is_20_10_or_greater && !is_20_14_or_greater
|
||||
},
|
||||
fixParsePlaybackResponseFeatureFlag = {
|
||||
is_20_03_or_greater
|
||||
},
|
||||
|
||||
block = {
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
@@ -35,16 +45,7 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
|
||||
versionCheckPatch
|
||||
)
|
||||
},
|
||||
fixMediaFetchHotConfigChanges = {
|
||||
is_19_34_or_greater
|
||||
},
|
||||
fixMediaFetchHotConfigAlternativeChanges = {
|
||||
// In 20.14 the flag was merged with 20.03 start playback flag.
|
||||
is_20_10_or_greater && !is_20_14_or_greater
|
||||
},
|
||||
fixParsePlaybackResponseFeatureFlag = {
|
||||
is_20_03_or_greater
|
||||
},
|
||||
|
||||
executeBlock = {
|
||||
addResources("youtube", "misc.fix.playback.spoofVideoStreamsPatch")
|
||||
|
||||
@@ -61,6 +62,7 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
|
||||
summaryKey = null,
|
||||
tag = "app.revanced.extension.youtube.settings.preference.SpoofStreamingDataSideEffectsPreference"
|
||||
),
|
||||
SwitchPreference("revanced_spoof_video_streams_av1"),
|
||||
ListPreference(
|
||||
key = "revanced_spoof_video_streams_language",
|
||||
// Language strings are declared in Setting patch.
|
||||
@@ -72,10 +74,5 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
mainActivityOnCreateFingerprint.method.addInstruction(
|
||||
0,
|
||||
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->setClientOrderToUse()V"
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -14,6 +14,13 @@ import java.nio.file.StandardCopyOption
|
||||
|
||||
private val classLoader = object {}.javaClass.classLoader
|
||||
|
||||
/**
|
||||
* Removes a node from its parent.
|
||||
*
|
||||
* @return The node that was removed (object this method was called on).
|
||||
*/
|
||||
fun Node.removeFromParent() : Node = parentNode.removeChild(this)
|
||||
|
||||
/**
|
||||
* Returns a sequence for all child nodes.
|
||||
*/
|
||||
@@ -70,8 +77,13 @@ fun ResourcePatchContext.copyResources(
|
||||
for (resourceGroup in resources) {
|
||||
resourceGroup.resources.forEach { resource ->
|
||||
val resourceFile = "${resourceGroup.resourceDirectoryName}/$resource"
|
||||
val stream = inputStreamFromBundledResource(sourceResourceDirectory, resourceFile)
|
||||
if (stream == null) {
|
||||
throw IllegalArgumentException("Could not find resource: $resourceFile " +
|
||||
"in directory: $sourceResourceDirectory")
|
||||
}
|
||||
Files.copy(
|
||||
inputStreamFromBundledResource(sourceResourceDirectory, resourceFile)!!,
|
||||
stream,
|
||||
targetResourceDirectory.resolve(resourceFile).toPath(),
|
||||
StandardCopyOption.REPLACE_EXISTING,
|
||||
)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
@@ -203,8 +209,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -253,6 +261,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
@@ -203,8 +209,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -253,6 +261,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">اسم التطبيق</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">مخصص</string>
|
||||
<string name="revanced_custom_branding_icon_title">أيقونة التطبيق</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">الأصلية</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced minimal</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced scaled</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">مخصص</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">فشلت عمليات التحقق</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">فتح الموقع الرسمي</string>
|
||||
@@ -125,7 +138,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_force_original_audio_summary_on">استخدام لغة الصوت الأصلية</string>
|
||||
<string name="revanced_force_original_audio_summary_off">استخدام الصوت الافتراضي</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<string name="revanced_force_original_audio_not_available">لاستخدام هذه الميزة، غيّر \"تزوير تدفقات الفيديو\" إلى أي عميل باستثناء Android Studio</string>
|
||||
<string name="revanced_force_original_audio_not_available">لاستخدام هذه الميزة، غيّر \'Spoof Video Streams إلى أي عميل باستثناء Android Studio</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_screen_title">تصحيح الأخطاء</string>
|
||||
@@ -637,9 +650,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_comments_button_summary_off">يتم عرض زر التعليقات</string>
|
||||
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually only shows on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">إخفاء الإبلاغ</string>
|
||||
<string name="revanced_hide_report_button_summary_on">تم إخفاء زر الإبلاغ</string>
|
||||
<string name="revanced_hide_report_button_summary_off">يتم عرض زر الإبلاغ</string>
|
||||
<string name="revanced_hide_report_button_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>
|
||||
@@ -728,17 +741,17 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_flyout_title">القائمة المنبثقة</string>
|
||||
<string name="revanced_hide_player_flyout_summary">إخفاء أو عرض عناصر قائمة المشغل المنبثقة</string>
|
||||
<!-- 'Captions' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_captions_title">اخفاء التَرْجَمَة</string>
|
||||
<string name="revanced_hide_player_flyout_captions_summary_on">تم إخفاء قائمة التَرْجَمَة</string>
|
||||
<string name="revanced_hide_player_flyout_captions_summary_off">يتم عرض قائمة التَرْجَمَة</string>
|
||||
<string name="revanced_hide_player_flyout_captions_title">إخفاء الترجمة</string>
|
||||
<string name="revanced_hide_player_flyout_captions_summary_on">تم إخفاء قائمة الترجمة</string>
|
||||
<string name="revanced_hide_player_flyout_captions_summary_off">يتم عرض قائمة الترجمة</string>
|
||||
<!-- 'Additional settings' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_additional_settings_title">إخفاء الإعدادات الإضافية</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_on">تم إخفاء قائمة الإعدادات الإضافية</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_off">يتم عرض قائمة الإعدادات الإضافية</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_title">إخفاء إعدادات إضافية</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_on">تم إخفاء قائمة إعدادات إضافية</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_off">يتم عرض قائمة إعدادات إضافية</string>
|
||||
<!-- 'Sleep timer' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_title">إخفاء مؤقت النوم</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">تم إخفاء قائمة مؤقت النوم</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">يتم عرض قائمة مؤقت النوم</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_title">إخفاء مؤقِّت إيقاف التشغيل</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">تم إخفاء قائمة مؤقِّت إيقاف التشغيل</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">يتم عرض قائمة مؤقِّت إيقاف التشغيل</string>
|
||||
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_loop_video_title">إخفاء تكرار الفيديو</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_on">تم إخفاء قائمة تكرار الفيديو</string>
|
||||
@@ -765,23 +778,23 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_flyout_more_info_summary_off">يتم عرض قائمة المزيد من المعلومات</string>
|
||||
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_lock_screen_title">إخفاء شاشة القفل</string>
|
||||
<string name="revanced_hide_player_flyout_lock_screen_summary_on">تم إخفاء قائمة قفل الشاشة</string>
|
||||
<string name="revanced_hide_player_flyout_lock_screen_summary_off">يتم عرض قائمة قفل الشاشة</string>
|
||||
<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>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"قائمة المسارات الصوتية مخفية
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"تم إخفاء قائمة المقطع الصوتي
|
||||
|
||||
لعرض قائمة المسارات الصوتية، غيّر 'تزييف تدفقات الفيديو' إلى iPadOS"</string>
|
||||
لعرض قائمة المقطع الصوتي، غيّر 'Spoof video streams' إلى iPadOS"</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">تم إخفاء قائمة المشاهدة في الوضع الافتراضي</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">يتم عرض قائمة المشاهدة في الوضع الافتراضي</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_title">إخفاء قائمة جودة الفيديو</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_summary_on">قائمة جودة الفيديو مخفية</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_summary_off">قائمة جودة الفيديو معروضة</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_summary_on">تم إخفاء قائمة جودة الفيديو</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_summary_off">يتم عرض قائمة جودة الفيديو</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_title">إخفاء تذييل قائمة جودة الفيديو</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">تم إخفاء تذييل قائمة جودة الفيديو</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">يتم عرض تذييل قائمة جودة الفيديو</string>
|
||||
@@ -791,18 +804,18 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_on">تم إخفاء زر التشغيل التلقائي</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_off">يتم عرض زر التشغيل التلقائي</string>
|
||||
<!-- This button does not display any text, but 'Captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title'. -->
|
||||
<string name="revanced_hide_captions_button_title">إخفاء زر التَرْجَمَة</string>
|
||||
<string name="revanced_hide_captions_button_summary_on">تم إخفاء زر التَرْجَمَة</string>
|
||||
<string name="revanced_hide_captions_button_summary_off">يتم عرض زر التَرْجَمَة</string>
|
||||
<string name="revanced_hide_captions_button_title">إخفاء زر الترجمة</string>
|
||||
<string name="revanced_hide_captions_button_summary_on">تم إخفاء زر الترجمة</string>
|
||||
<string name="revanced_hide_captions_button_summary_off">يتم عرض زر الترجمة</string>
|
||||
<string name="revanced_hide_cast_button_title">إخفاء زر البث</string>
|
||||
<string name="revanced_hide_cast_button_summary_on">تم إخفاء زر البث</string>
|
||||
<string name="revanced_hide_cast_button_summary_off">يتم عرض زر البث</string>
|
||||
<string name="revanced_hide_player_control_buttons_background_title">إخفاء خلفية عناصر التحكم بالمشغل</string>
|
||||
<string name="revanced_hide_player_control_buttons_background_summary_on">خلفية عناصر تحكم المشغل مخفية</string>
|
||||
<string name="revanced_hide_player_control_buttons_background_summary_off">يتم عرض خلفية عناصر التحكم بالمشغل</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_title">إخفاء زري \"السابق\" و \"التالي\"</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">تم إخفاء الأزرار</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">يتم عرض الأزرار</string>
|
||||
<string name="revanced_hide_player_control_buttons_background_summary_on">تم إخفاء خلفية عناصر تحكم المشغل</string>
|
||||
<string name="revanced_hide_player_control_buttons_background_summary_off">يتم عرض خلفية عناصر تحكم المشغل</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_title">إخفاء أزرار السابق & التالي</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">تم إخفاء أزرار السابق & التالي</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">يتم عرض أزرار السابق & التالي</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">إخفاء بطاقات شاشة النهاية</string>
|
||||
@@ -829,37 +842,37 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_seekbar_summary_on">تم إخفاء شريط تقدم الفيديو</string>
|
||||
<string name="revanced_hide_seekbar_summary_off">يتم عرض شريط تقدم الفيديو</string>
|
||||
<!-- Seekbar shown inside video thumbnails found the home/feed/search/history. The seekbar shows the prior watch progress when the video was last open. -->
|
||||
<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>
|
||||
<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">
|
||||
<string name="revanced_shorts_player_screen_title">مشغل Shorts</string>
|
||||
<string name="revanced_shorts_player_screen_summary">إخفاء أو إظهار مكونات مشغل Shorts</string>
|
||||
<string name="revanced_shorts_player_screen_summary">إخفاء أو عرض مكونات مشغل Shorts</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
|
||||
<string name="revanced_hide_shorts_home_title">إخفاء Shorts في الصفحة الرئيسية</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">مخفية في الصفحة الرئيسية ومقاطع الفيديو ذات الصلة</string>
|
||||
<string name="revanced_hide_shorts_home_summary_off">معروضة في الصفحة الرئيسية ومقاطع الفيديو ذات الصلة</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">مخفي في موجز الصفحة الرئيسية والفيديوهات ذات الصلة</string>
|
||||
<string name="revanced_hide_shorts_home_summary_off">يُعرض في موجز الصفحة الرئيسية والفيديوهات ذات الصلة</string>
|
||||
<string name="revanced_hide_shorts_search_title">إخفاء Shorts في نتائج البحث</string>
|
||||
<string name="revanced_hide_shorts_search_summary_on">مخفية في نتائج البحث</string>
|
||||
<string name="revanced_hide_shorts_search_summary_off">تُعرض في نتائج البحث</string>
|
||||
<string name="revanced_hide_shorts_search_summary_on">مخفي في نتائج البحث</string>
|
||||
<string name="revanced_hide_shorts_search_summary_off">يُعرض في نتائج البحث</string>
|
||||
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the Subscriptions tab. -->
|
||||
<string name="revanced_hide_shorts_subscriptions_title">إخفاء Shorts في خلاصة الاشتراكات</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_on">مخفية في خلاصة الاشتراكات</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_off">معروضة في خلاصة الاشتراكات</string>
|
||||
<string name="revanced_hide_shorts_history_title">إخفاء Shorts في سجل المشاهدة</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">مخفية في سجل المشاهدة</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">تُعرض في سجل المشاهدة</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">إخفاء زر Super Thanks</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">زر شراء Super Thanks مخفي</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">زر شراء Super Thanks معروض</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_title">إخفاء Shorts في موجز الاشتراكات</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_on">مخفي في موجز الاشتراكات</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_off">يُعرض في موجز الاشتراكات</string>
|
||||
<string name="revanced_hide_shorts_history_title">إخفاء Shorts في السجلّ</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">مخفي في السجلّ</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">يُعرض في السجلّ</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">إخفاء زر شراء Super Thanks</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">تم إخفاء زر شراء Super Thanks</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">يتم عرض زر شراء Super Thanks</string>
|
||||
<string name="revanced_hide_shorts_effect_button_title">إخفاء زر التأثير</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">زر التأثير مخفي</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">زر التأثير معروض</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">تم إخفاء زر التأثير</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">يتم عرض زر التأثير</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">إخفاء زر الشاشة الخضراء</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">تم إخفاء زر الشاشة الخضراء</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">يتم عرض زر الشاشة الخضراء</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">إخفاء زر الهاشتاج</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">إخفاء زر هاشتاج</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_on">تم إخفاء زر الهاشتاج</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_off">يتم عرض زر الهاشتاج</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
@@ -869,9 +882,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">إخفاء تسمية الموقع</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">تم إخفاء تسمية الموقع</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">يتم عرض تسمية الموقع</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">إخفاء زر \"مشاركات جديدة\"</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">تم إخفاء زر \"مشاركات جديدة\"</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">يتم عرض زر \"مشاركات جديدة\"</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">إخفاء زر المنشورات الجديدة</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">تم إخفاء زر المنشورات الجديدة</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">يتم عرض زر المنشورات الجديدة</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">إخفاء أزرار واجهة التوقف</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">تم إخفاء أزرار واجهة التوقف</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">يتم عرض أزرار واجهة التوقف</string>
|
||||
@@ -900,11 +913,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">تم إخفاء زر القادم</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">يتم عرض زر القادم</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">إخفاء زر استخدام هذا الصوت</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">زر استخدام هذا الصوت مخفي</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">زر استخدام هذا الصوت معروض</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">إخفاء زر استخدام هذا القالب</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">زر استخدام هذا القالب مخفي</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">زر استخدام هذا القالب ظاهر</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">تم إخفاء زر استخدام هذا الصوت</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">يتم عرض زر استخدام هذا الصوت</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">إخفاء زر استخدام النموذج</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">تم إخفاء زر استخدم هذا النموذج</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">يتم عرض زر استخدم هذا النموذج</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">إخفاء التأثير الفوّار لـزر أعجبني</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_on">تم إخفاء التأثير الفوّار لـزر أعجبني</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_off">يتم عرض التأثير الفوّار لـزر أعجبني</string>
|
||||
@@ -935,11 +948,11 @@ Second \"item\" text"</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_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_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>
|
||||
@@ -956,9 +969,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_end_screen_suggested_video_summary_off">يتم عرض الفيديو المقترح في شاشة النهاية</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||
<string name="revanced_hide_related_videos_overlay_title">إخفاء تراكب مقاطع الفيديو ذات الصلة</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_on">تراكب مقاطع الفيديو ذات الصلة في وضع ملء الشاشة مخفي</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_off">تراكب مقاطع الفيديو ذات الصلة في وضع ملء الشاشة معروض</string>
|
||||
<string name="revanced_hide_related_videos_overlay_title">إخفاء واجهة الفيديوهات ذات الصلة</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_on">تم إخفاء واجهة الفيديوهات ذات الصلة في ملء الشاشة</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_off">يتم عرض واجهة الفيديوهات ذات الصلة في ملء الشاشة</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">إخفاء الطابع الزمني للفيديو</string>
|
||||
@@ -991,7 +1004,7 @@ Second \"item\" text"</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>
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">مرات عدم الإعجاب غير متوفرة (حد واجهة برمجة تطبيقات العميل)</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">أعد تحميل الفيديو للتصويت بـ Return YouTube Dislike</string>
|
||||
@@ -1000,31 +1013,31 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_ryd_enabled_summary_on">يتم عرض لم يعجبني</string>
|
||||
<string name="revanced_ryd_enabled_summary_off">لا يتم عرض لم يعجبني</string>
|
||||
<string name="revanced_ryd_shorts_title">عرض لم يعجني في فيديوهات Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">"يتم عرض مرات عدم الإعجاب في فيديوهات Shorts
|
||||
<string name="revanced_ryd_shorts_summary_on">"يتم عرض عدد مرات لم يعجبني في فيديوهات Shorts
|
||||
|
||||
التقييد: قد لا تظهر مرات عدم الإعجاب في وضع التصفح المتخفي"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">لا يتم عرض مرات عدم الإعجاب في فيديوهات Shorts</string>
|
||||
التقييد: قد لا تظهر مرات لم يعجبني في وضع التصفح المتخفي"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">لا يتم عرض مرات لم يعجبني على فيديوهات Shorts</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">لم يعجبني كــ نسبة مئوية</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">يتم عرض مرات عدم الإعجاب كنسبة مئوية</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">يتم عرض مرات عدم الإعجاب كرقم</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_estimated_like_title">عرض الإعجابات المقدرة</string>
|
||||
<string name="revanced_ryd_estimated_like_summary_on">يتم عرض عدد تقديري للإعجابات في مقاطع الفيديو التي تم تعطيل الإعجابات فيها</string>
|
||||
<string name="revanced_ryd_estimated_like_summary_on">يتم عرض عدد تقديري للإعجابات في الفيديوهات التي تم تعطيل الإعجابات فيها</string>
|
||||
<string name="revanced_ryd_estimated_like_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">لا يتم عرض الملاحظة في حالة عدم توفر Return YouTube Dislike</string>
|
||||
<string name="revanced_ryd_attribution_summary">يتم توفير البيانات بواسطة the 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">ReturnYouTubeDislike API إحصائيات هذا الجهاز</string>
|
||||
<string name="revanced_ryd_statistics_category_title">إحصائيات واجهة برمجيات ReturnYouTubeDislike لهذا الجهاز</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_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>
|
||||
@@ -1056,7 +1069,7 @@ Second \"item\" text"</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_enable_sb_sum">مانع الرُعَاة هو نظام جماعي لتخطي الأجزاء المزعجة من فيديوهات 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>
|
||||
@@ -1072,12 +1085,12 @@ Second \"item\" text"</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_auto_hide_skip_button_duration">مدة زر التخطي</string>
|
||||
<string name="revanced_sb_auto_hide_skip_button_duration_sum">كم المدة لعرض أزرار التخطي والتخطي إلى التمييز قبل الإخفاء التلقائي</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_toast_on_skip_duration">مدة توست التخطي</string>
|
||||
<string name="revanced_sb_toast_on_skip_duration_sum">كم المدة لعرض رسالة التراجع عن التخطي المنبثقة</string>
|
||||
<string name="revanced_sb_auto_hide_skip_button_duration_sum">كم من الوقت يجب إظهار أزرار التخطي والتخطي للأبرز قبل إخفائها تلقائيًا</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_toast_on_skip_duration">مدة ملاحظة التخطي</string>
|
||||
<string name="revanced_sb_toast_on_skip_duration_sum">المدة اللازمة لإظهار التراجع عن التخطي</string>
|
||||
<string name="revanced_sb_duration_1s">ثانية واحدة</string>
|
||||
<string name="revanced_sb_duration_2s">ثانيتان</string>
|
||||
<string name="revanced_sb_duration_3s">3 ثوانٍ</string>
|
||||
@@ -1089,19 +1102,19 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_duration_9s">9 ثوانٍ</string>
|
||||
<string name="revanced_sb_duration_10s">10 ثوانٍ</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_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_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">من المستحسن قراءة الإرشادات لمانع الرعاة قبل تقديم أي مقطع</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>
|
||||
@@ -1110,11 +1123,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_toast_on_connection_error_sum_off">لا يتم عرض ملاحظة في حالة عدم توفر SponsorBlock</string>
|
||||
<string name="revanced_sb_general_skipcount">تمكين تتبع مرات التخطي</string>
|
||||
<string name="revanced_sb_general_skipcount_sum_on">يُتيح لـ SponsorBlock Leaderboard معرفة مقدار الوقت الذي وفره المشاهدين، يتم إعلام الخادم في كل مرة تتخطى فيها مقطعًا</string>
|
||||
<string name="revanced_sb_general_skipcount_sum_off">تم تعطيل تتبع مرات التخطي</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">معرف المستخدم الفريد الخاص بك</string>
|
||||
<string name="revanced_sb_general_uuid">معرف المستخدم User ID الفريد الخاص بك</string>
|
||||
<string name="revanced_sb_general_uuid_sum">يجب أن يبقى هذا خاصًا. انه مثل كلمة المرور ولا ينبغي مشاركته مع أي شخص. إذا كان شخص ما يملك هذا، فيمكنه انتحال شخصيتك</string>
|
||||
<string name="revanced_sb_general_uuid_invalid">يجب أن يكون معرف المستخدم الخاص 30 حرفًا على الأقل</string>
|
||||
<string name="revanced_sb_general_api_url">تغيير عنوان API</string>
|
||||
@@ -1147,11 +1160,11 @@ Second \"item\" text"</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_hook">مقدمة / تحيات</string>
|
||||
<string name="revanced_sb_segments_hook">تحية / وداع</string>
|
||||
<string name="revanced_sb_segments_hook_sum">مقاطع دعائية مروية للفيديو القادم، تحيات ووداعات. لا تشمل الأقسام التي تضيف محتوى إضافيًا</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">خارج الموضوع / نكات</string>
|
||||
<string name="revanced_sb_segments_filler_sum">مشاهد أو نكات جانبية غير ضرورية لفهم المحتوى الرئيسي للفيديو. لا تشمل الأقسام التي توفر سياقًا أو تفاصيل خلفية</string>
|
||||
<string name="revanced_sb_segments_nomusic">الموسيقى: مقطع غير موسيقي</string>
|
||||
<string name="revanced_sb_segments_nomusic_sum">فقط للاستخدام في المقاطع الموسيقية. أقسام المقاطع الموسيقية بدون موسيقى، والتي لم يتم تغطيتها بالفعل من قبل فئة أخرى</string>
|
||||
@@ -1169,7 +1182,7 @@ Second \"item\" text"</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_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>
|
||||
@@ -1184,13 +1197,13 @@ Second \"item\" text"</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_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_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>
|
||||
@@ -1241,14 +1254,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">الوقت المحدد غير صحيح</string>
|
||||
<string name="revanced_sb_stats_title">إحصائيات</string>
|
||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||
<string name="revanced_sb_stats_connection_failure">الإحصائيات غير متوفرة مؤقتًا (الواجهة غير متوفرة)</string>
|
||||
<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">اسم المستخدم الخاص بك: <b>%s</b></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">سمعتك هي <b>%.2f</b></string>
|
||||
<string name="revanced_sb_stats_reputation">سمعتك <b>%.2f</b></string>
|
||||
<string name="revanced_sb_stats_submissions">لقد أنشأت <b>%s</b> مقطع</string>
|
||||
<string name="revanced_sb_stats_submissions_sum">اضغط هنا لعرض المقاطع الخاصة بك</string>
|
||||
<string name="revanced_sb_stats_saved_zero">متصدرين SponsorBlock</string>
|
||||
@@ -1264,14 +1277,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_sb_color_opacity_label">الشفافية:</string>
|
||||
<string name="revanced_sb_color_dot_label">اللون:</string>
|
||||
<string name="revanced_sb_about_title">لمحة</string>
|
||||
<string name="revanced_sb_about_api_summary">يتم توفير البيانات بواسطة SponsorBlock API. انقر هنا لمعرفة المزيد ومشاهدة التنزيلات لمنصات أخرى</string>
|
||||
<string name="revanced_sb_about_api_summary">يتم توفير البيانات بواسطة SponsorBlock API. انقر هنا لمعرفة المزيد والتنزيل لمنصات أخرى</string>
|
||||
</patch>
|
||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||
<string name="revanced_change_form_factor_title">شكل نموذج التخطيط</string>
|
||||
<string name="revanced_change_form_factor_entry_1">الافتراضي</string>
|
||||
<string name="revanced_change_form_factor_entry_2">الجوّال</string>
|
||||
<string name="revanced_change_form_factor_entry_3">الجهاز اللوحي</string>
|
||||
<string name="revanced_change_form_factor_entry_4">السيارات</string>
|
||||
<string name="revanced_change_form_factor_entry_4">Automotive</string>
|
||||
<string name="revanced_change_form_factor_user_dialog_message">"التغييرات تشمل:
|
||||
|
||||
تصميم الجهاز اللوحي
|
||||
@@ -1282,7 +1295,7 @@ Second \"item\" text"</string>
|
||||
• يتم تنظيم الموجز حسب المواضيع والقنوات"</string>
|
||||
</patch>
|
||||
<patch id="layout.spoofappversion.spoofAppVersionPatch">
|
||||
<string name="revanced_spoof_app_version_title">خِداع إصدار التطبيق</string>
|
||||
<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.
|
||||
@@ -1305,7 +1318,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_change_start_page_entry_explore">استكشف</string>
|
||||
<string name="revanced_change_start_page_entry_fashion">الموضة & التجميل</string>
|
||||
<string name="revanced_change_start_page_entry_gaming">ألعاب</string>
|
||||
<string name="revanced_change_start_page_entry_history">السّجل</string>
|
||||
<string name="revanced_change_start_page_entry_history">السجلّ</string>
|
||||
<string name="revanced_change_start_page_entry_library">المكتبة</string>
|
||||
<string name="revanced_change_start_page_entry_liked_videos">الفيديوهات التي أعجبتني</string>
|
||||
<string name="revanced_change_start_page_entry_live">مباشر</string>
|
||||
@@ -1325,7 +1338,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_change_start_page_always_title">تغيير صفحة البداية دائمًا</string>
|
||||
<string name="revanced_change_start_page_always_summary_on">"يتم تغيير صفحة البداية دائمًا
|
||||
|
||||
القيد: قد لا يعمل استخدام زر الرجوع على شريط الأدوات"</string>
|
||||
التقييد: قد لا يعمل استخدام زر الرجوع على شريط الأدوات"</string>
|
||||
<string name="revanced_change_start_page_always_summary_off">يتم تغيير صفحة البداية فقط عند بدء تشغيل التطبيق</string>
|
||||
</patch>
|
||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||
@@ -1387,8 +1400,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_title">إخفاء أزرار التخطي للأمام والخلف</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">تم إخفاء تخطي للأمام والخلف</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">يتم عرض تخطي للأمام والخلف</string>
|
||||
<string name="revanced_miniplayer_width_dip_title">الحجم الأولي</string>
|
||||
<string name="revanced_miniplayer_width_dip_summary">الحجم الأولي على الشاشة، بالبكسل</string>
|
||||
<string name="revanced_miniplayer_width_dip_title">تهيئة الحجم</string>
|
||||
<string name="revanced_miniplayer_width_dip_summary">تهيئة الحجم على الشاشة، بالبكسل</string>
|
||||
<string name="revanced_miniplayer_width_dip_invalid_toast">حجم البكسل يجب أن يكون بين %1$s و %2$s</string>
|
||||
<string name="revanced_miniplayer_opacity_title">شفافية الواجهة</string>
|
||||
<string name="revanced_miniplayer_opacity_summary">قيمة الشفافية بين 0-100، حيث يكون 0 شفاف</string>
|
||||
@@ -1406,16 +1419,18 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_seekbar_custom_color_summary_off">يتم عرض لون شريط تقدم الفيديو الاصلي</string>
|
||||
<string name="revanced_seekbar_custom_color_primary_title">لون شريط تقدم الفيديو المخصص</string>
|
||||
<string name="revanced_seekbar_custom_color_primary_summary">لون شريط التقدم</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_title">لون مميز لشريط التقدم المخصص</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">اللون المميز لشريط التقدم</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_title">لون تمييز شريط التقدم المخصص</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">لون تمييز شريط التقدم</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">لون شريط التقدم غير صالح</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">شعار الرأس</string>
|
||||
<string name="revanced_header_logo_entry_1">افتراضي</string>
|
||||
<string name="revanced_header_logo_entry_2">عادي</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<string name="revanced_header_logo_entry_5">ريـفانسد بسيط</string>
|
||||
<string name="revanced_header_logo_title">علامة الشعار</string>
|
||||
<string name="revanced_header_logo_entry_1">الافتراضي</string>
|
||||
<string name="revanced_header_logo_entry_2">القياسي</string>
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced minimal</string>
|
||||
<string name="revanced_header_logo_entry_6">مخصص</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
@@ -1434,8 +1449,8 @@ Second \"item\" text"</string>
|
||||
<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 & المصّغرات الأصلية</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_1">المصغرات الأصلية</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & المصغرات الأصلية</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow & اللقطات الثابتة</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">اللقطات الثابتة</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"يوفر DeArrow مصغرات فيديو من مصادر جماعية لفيديوهات YouTube. هذه المصغرات غالبًا ما تكون أكثر صلة من تلك المقدمة من YouTube
|
||||
@@ -1444,14 +1459,14 @@ Second \"item\" text"</string>
|
||||
|
||||
اضغط هنا لمعرفة المزيد عن 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">نقطة نهاية واجهة برمجة تطبيقات DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">عنوان URL لنقطة نهاية ذاكرة التخزين المؤقت للصور المصغرة لـ DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">يتم عرض ملاحظة إذا كان DeArrow غير متاح</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">لا يتم عرض ملاحظة إذا كان DeArrow غير متاح</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_title">DeArrow API Endpoint</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">عنوان URL لنقطة نهاية ذاكرة التخزين المؤقت لمصغرات DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_title">لقطات الفيديو الثابتة</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_summary">يتم التقاط اللقطات الثابتة من بداية/وسط/نهاية كل فيديو. هذه الصور مدمجة في YouTube ولا يتم استخدام أي واجهة برمجة تطبيقات خارجية</string>
|
||||
<string name="revanced_alt_thumbnail_stills_fast_title">استخدم اللقطات الثابتة السريعة</string>
|
||||
<string name="revanced_alt_thumbnail_stills_fast_summary_on">استخدام اللقطات متوسطة الجودة. سيتم تحميل المُصغَّرات بشكل أسرع، ولكن البث المباشر و الفيديوهات التي لم يتم إصدارها أو القديمة جدًا قد تعرض مُصغَّرات فارغة</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>
|
||||
@@ -1470,25 +1485,25 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">تجاهل</string>
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.loopVideoPatch">
|
||||
<string name="revanced_loop_video_title">تفعيل تكرار الفيديو</string>
|
||||
<string name="revanced_loop_video_title">تمكين تكرار الفيديو</string>
|
||||
<string name="revanced_loop_video_summary_on">سيتم تكرار الفيديو</string>
|
||||
<string name="revanced_loop_video_summary_off">لن يتم تكرار الفيديو</string>
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
|
||||
<string name="revanced_loop_video_button_title">إظهار زر تكرار الفيديو</string>
|
||||
<string name="revanced_loop_video_button_summary_on">الزر ظاهر</string>
|
||||
<string name="revanced_loop_video_button_summary_off">الزر غير ظاهر</string>
|
||||
<string name="revanced_loop_video_button_title">عرض زر تكرار الفيديو</string>
|
||||
<string name="revanced_loop_video_button_summary_on">يتم عرض الزر</string>
|
||||
<string name="revanced_loop_video_button_summary_off">لا يتم عرض الزر</string>
|
||||
<string name="revanced_loop_video_button_toast_on">تكرار الفيديو قيد التشغيل</string>
|
||||
<string name="revanced_loop_video_button_toast_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">"تم محاكاة أبعاد الجهاز
|
||||
<string name="revanced_spoof_device_dimensions_title">تزوير أبعاد الجهاز</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"تم تزييف أبعاد الجهاز
|
||||
|
||||
قد يتم فتح قفل جودة الفيديو العالية ولكن قد تواجه تقطعًا في تشغيل الفيديو وعمر بطارية أسوأ وتأثيرات جانبية غير معروفة"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"أبعاد الجهاز غير محاكاة
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"أبعاد الجهاز غير مزيفة
|
||||
|
||||
يمكن أن يؤدي تفعيل هذا إلى فتح جودة أعلى للفيديو"</string>
|
||||
تفعيل هذا يمكن أن يفتح جودات فيديو أعلى"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">قد يؤدي تمكين هذا إلى تباطؤ تشغيل الفيديو وتدهور عمر البطارية وآثار جانبية غير معروفة.</string>
|
||||
</patch>
|
||||
<patch id="misc.hapticfeedback.disableHapticFeedbackPatch">
|
||||
@@ -1496,19 +1511,19 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_disable_haptic_feedback_summary">تغيير الاهتزاز عند الضغط</string>
|
||||
<string name="revanced_disable_haptic_feedback_chapters_title">تعطيل الاهتزاز للفصول</string>
|
||||
<string name="revanced_disable_haptic_feedback_chapters_summary_on">تم تعطيل الاهتزاز للفصول</string>
|
||||
<string name="revanced_disable_haptic_feedback_chapters_summary_off">تم تفعيل الاهتزاز للفصول</string>
|
||||
<string name="revanced_disable_haptic_feedback_chapters_summary_off">تم تمكين الاهتزاز للفصول</string>
|
||||
<string name="revanced_disable_haptic_feedback_precise_seeking_title">تعطيل الاهتزاز عند التمرير الدقيق</string>
|
||||
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_on">تم تعطيل الاهتزاز الدقيق عند البحث</string>
|
||||
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_off">تم تفعيل الاهتزاز عند التمرير الدقيق</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_title">تعطيل الاهتزاز عند التراجع عن البحث</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_summary_on">تم تعطيل الاهتزاز عند التراجع عن البحث</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_summary_off">تم تمكين الاهتزاز عند التراجع عن البحث</string>
|
||||
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_on">تم تعطيل الاهتزاز الدقيق عند التمرير</string>
|
||||
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_off">تم تمكين الاهتزاز عند التمرير الدقيق</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_title">تعطيل اهتزاز التراجع عن التمرير</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_summary_on">تم تعطيل اهتزاز التراجع عن التمرير</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_summary_off">تم تمكين اهتزاز التراجع عن التمرير</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_title">تعطيل الاهتزاز عند التكبير</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_summary_on">تم تعطيل الاهتزاز عند التكبير</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_summary_off">تم تمكين الاهتزاز عند التكبير</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">إذا قمت مؤخرًا بتغيير تفاصيل تسجيل الدخول إلى حسابك، فأزل تثبيت MicroG ثم أعد تثبيته.</string>
|
||||
<string name="microg_offline_account_login_error">إذا قمت مؤخرًا بتغيير تفاصيل تسجيل الدخول إلى حسابك، فقم بإلغاء تثبيت MicroG وإعادة تثبيته.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">تجاوز إعادة توجيه URL</string>
|
||||
@@ -1526,9 +1541,9 @@ Second \"item\" text"</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_remember_video_quality_last_selected_toast_title">إظهار إشعار عند تغيير جودة الفيديو</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">يتم إظهار إشعار عند تغيير جودة الفيديو الافتراضية</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">لا يتم إظهار إشعار عند تغيير جودة الفيديو الافتراضية</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_toast_title">عرض ملاحظة عند تغيير جودة الفيديو</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">يتم عرض ملاحظة عند تغيير جودة الفيديو الافتراضية</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_toast_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_shorts_quality_last_selected_title">تذكر تغييرات جودة Shorts</string>
|
||||
@@ -1543,36 +1558,36 @@ Second \"item\" text"</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_on">يتم عرض الزر. انقر مع الاستمرار لإعادة ضبط سرعة التشغيل إلى الوضع الافتراضي</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">لا يتم عرض الزر</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">عرض زر جودة الفيديو</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">الزر معروض. انقر مع الاستمرار لإعادة تعيين الجودة إلى الافتراضي</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">الزر غير معروض</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">يتم عرض الزر. انقر مع الاستمرار لإعادة تعيين الجودة إلى الوضع الافتراضي</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">لا يتم عرض الزر</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">قائمة سرعة التشغيل المخصصة</string>
|
||||
<string name="revanced_custom_speed_menu_summary_on">يتم عرض قائمة سرعة التشغيل المخصصة</string>
|
||||
<string name="revanced_custom_speed_menu_summary_off">لا يتم عرض قائمة سرعة التشغيل المخصصة</string>
|
||||
<string name="revanced_restore_old_speed_menu_title">استعادة قائمة سرعة التشغيل القديمة</string>
|
||||
<string name="revanced_restore_old_speed_menu_summary_on">قائمة السرعة القديمة معروضة</string>
|
||||
<string name="revanced_restore_old_speed_menu_summary_off">قائمة السرعة الحديثة معروضة</string>
|
||||
<string name="revanced_restore_old_speed_menu_summary_on">يتم عرض قائمة سرعة التشغيل القديمة</string>
|
||||
<string name="revanced_restore_old_speed_menu_summary_off">يتم عرض قائمة سرعة التشغيل الحديثة</string>
|
||||
<string name="revanced_custom_playback_speeds_title">سرعة التشغيل المخصصة</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">إضافة أو تغيير سرعة التشغيل المخصصة</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">إضافة أو تغيير سرعات التشغيل المخصصة</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">يجب أن تكون سرعات التشغيل المخصصة أقل من %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">سرعة التشغيل المخصصة غير صالحة</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">سرعات التشغيل المخصصة غير صالحة</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">تلقائي</string>
|
||||
<string name="revanced_speed_tap_and_hold_title">سرعة النقر مع الاستمرار المخصصة</string>
|
||||
<string name="revanced_speed_tap_and_hold_summary">سرعة التشغيل بين 0-8</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_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_remember_playback_speed_last_selected_toast_title">إظهار إشعار عند تغيير سرعة التشغيل</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">يتم إظهار إشعار عند تغيير سرعة التشغيل الافتراضية</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">لا يتم عرض إشعار عند تغيير سرعة التشغيل الافتراضية.</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_toast_title">عرض ملاحظة عند تغيير سرعة التشغيل</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">يتم عرض ملاحظة عند تغيير سرعة التشغيل الافتراضية</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">لا يتم عرض ملاحظة عند تغيير سرعة التشغيل الافتراضية</string>
|
||||
<string name="revanced_playback_speed_default_title">سرعة التشغيل الافتراضية</string>
|
||||
<string name="revanced_remember_playback_speed_toast">تغيير السرعة الافتراضية إلى: %s</string>
|
||||
</patch>
|
||||
@@ -1604,10 +1619,18 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">تم تعطيل التمرير للتقديم أو الترجيع</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_about_title">الآثار الجانبية للتزوير</string>
|
||||
<string name="revanced_spoof_video_streams_av1_title">السماح بـ Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"برنامج ترميز الفيديو هو AVC (H.264) أو VP9 أو AV1
|
||||
|
||||
قد يحدث تقطيع أو فقدان للإطارات أثناء التشغيل"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">برنامج ترميز الفيديو هو AVC (H.264) أو VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"قد يؤدي تمكين هذا الإعداد إلى استخدام فك تشفير AV1 البرمجي.
|
||||
|
||||
قد يتسبب تشغيل الفيديو باستخدام AV1 في التقطيع أو إسقاط الإطارات."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">التأثيرات الجانبية للتزييف</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• عميل تجريبي وقد يتوقف عن العمل في أي وقت</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• قد يتوقف الفيديو عند 1:00، أو قد لا يكون متاحًا في بعض المناطق</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_audio_tracks">• قائمة المسارات الصوتية مفقودة</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_audio_tracks">• قائمة المقطع الصوتي مفقودة</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• لا يوجد ترميز الفيديو AV1</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_stable_volume">• مستوى الصوت الثابت غير متاح</string>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• قد لا يتم تشغيل الفيديوهات المخصصة للأطفال عند تسجيل الخروج أو عند استخدام وضع التصفح المتخفي</string>
|
||||
@@ -1618,14 +1641,16 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">تم إخفاء نوع العميل في إحصاءات تقنية</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">لغة بث الصوت</string>
|
||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_language_not_available">لتحديد لغة صوتية معينة، قم بإيقاف تشغيل \"فرض لغة الصوت الأصلية\"</string>
|
||||
<string name="revanced_spoof_video_streams_language_not_available">لتحديد لغة صوتية معينة، قم بإيقاف تشغيل \'فرض لغة الصوت الأصلية\'</string>
|
||||
<string name="revanced_spoof_video_streams_language_android_studio">اختيار لغة البث غير متاح مع Android Studio</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">حول</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">إعلانات</string>
|
||||
<string name="revanced_settings_music_screen_0_about_title">لمحة</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">الإعلانات</string>
|
||||
<string name="revanced_settings_music_screen_2_general_title">عام</string>
|
||||
<string name="revanced_settings_music_screen_3_player_title">المشغل</string>
|
||||
<string name="revanced_settings_music_screen_4_misc_title">متنوعة</string>
|
||||
@@ -1633,7 +1658,7 @@ Second \"item\" text"</string>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
<string name="revanced_music_hide_video_ads_title">إخفاء إعلانات الفيديو</string>
|
||||
<string name="revanced_music_hide_video_ads_summary_on">تم إخفاء إعلانات الفيديو</string>
|
||||
<string name="revanced_music_hide_video_ads_summary_off">تم عرض إعلانات الفيديو</string>
|
||||
<string name="revanced_music_hide_video_ads_summary_off">يتم عرض إعلانات الفيديو</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
<string name="revanced_music_play_permanent_repeat_title">تمكين التكرار الدائم</string>
|
||||
@@ -1641,22 +1666,22 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">تم تعطيل التكرار الدائم</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<string name="revanced_music_hide_cast_button_title">إخفاء زر الإرسال</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">زر الإرسال مخفي</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">زر الإرسال ظاهر</string>
|
||||
<string name="revanced_music_hide_cast_button_title">إخفاء زر البث</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">تم إخفاء زر البث</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">يتم عرض زر البث</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">إخفاء شريط الفئات</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">شريط الفئات مخفي</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">شريط الفئات معروض</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">تم إخفاء شريط الفئات</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">يتم عرض شريط الفئات</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">شريط التنقل</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">إخفاء أزرار شريط التنقل أو تغييرها</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_title">إخفاء الرئيسية</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_on">زر \"الرئيسية\" مخفي</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_off">زر \"الرئيسية\" ظاهر</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_title">إخفاء الصفحة الرئيسية</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_on">تم إخفاء زر الصفحة الرئيسية</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_off">يتم عرض زر الصفحة الرئيسية</string>
|
||||
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_title">إخفاء المقاطع</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_on">زر \"المقتطفات\" مخفي</string>
|
||||
@@ -1693,22 +1718,22 @@ Second \"item\" text"</string>
|
||||
</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>
|
||||
<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_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 Proxy</string>
|
||||
<string name="revanced_block_embedded_ads_entry_3">PurpleAdBlock Proxy</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>
|
||||
<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>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
@@ -204,8 +210,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -255,6 +263,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Tətbiq adı</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Fərdi</string>
|
||||
<string name="revanced_custom_branding_icon_title">Tətbiq simvolu</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Orijinal</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced ən kiçik</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced ölçüləndirilmiş</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Fərdi</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<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ı aç</string>
|
||||
@@ -368,7 +381,7 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Sİ söhbət xülasəsini gizlət</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_summary_on">Sİ söhbət xülasəsi gizlidir</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_summary_off">Sİ söhbət xülasəsi görünür</string>
|
||||
<string name="revanced_hide_comments_ai_summary_title">AI Ṣərhlər Xülasəsini Gizlət</string>
|
||||
<string name="revanced_hide_comments_ai_summary_title">AI şərhlər xülasəsini gizlət</string>
|
||||
<string name="revanced_hide_comments_ai_summary_summary_on">Sİ şərhlər xülasəsi gizlidir</string>
|
||||
<string name="revanced_hide_comments_ai_summary_summary_off">Sİ şərhlər xülasəsi görünür</string>
|
||||
<string name="revanced_hide_comments_channel_guidelines_title">Kanal təlimatlarını gizlət</string>
|
||||
@@ -405,19 +418,19 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
|
||||
<string name="revanced_custom_filter_strings_summary">Yeni sətirlə ayrılmış filtr üçün element yol qurucusu sətirlərinin siyahısı</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Etibarsız fərdi filtr: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Baxış sayını gizlət</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Baxış sayı lentdə və axtarış nəticələrində gizlədilib</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Baxış sayı lentdə və axtarış nəticələrində göstərilib</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Baxış sayı axın və axtarış nəticələrində gizlidir</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Baxış sayı axın və axtarış nəticələrində görünür</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Məhdudiyyətlər:
|
||||
• Shorts rəfləri, kanal səhifələri və axtarış nəticələri hələ də baxış saylarını göstərə bilər
|
||||
• Bu funksiya avtomobil form faktoru ilə işləmir"</string>
|
||||
<string name="revanced_hide_upload_time_title">Yükləmə vaxtını gizlət</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Yükləmə vaxtı lentdə və axtarış nəticələrində gizlədilib</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Yükləmə vaxtı lentdə və axtarış nəticələrində göstərilir</string>
|
||||
• Shorts bölmələri, kanal səhifələri və axtarış nəticələri yenə də baxış sayını göstərə bilər
|
||||
• Bu xüsusiyyət avtomobil forma göstərici ilə işləmir"</string>
|
||||
<string name="revanced_hide_upload_time_title">Yüklənilmə vaxtını gizlət</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Yüklənilmə vaxtı axın və axtarış nəticələrində gizlidir</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Yüklənilmə vaxtı axın və axtarış nəticələrində göstərilir</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Məhdudiyyətlər:
|
||||
• Shorts rəflərində, kanal səhifələrində və axtarış nəticələrində yükləmə vaxtları hələ də göstərilə bilər
|
||||
• Bu funksiya avtomobil form faktoru ilə işləmir"</string>
|
||||
• Shorts bölmələri, kanal səhifələri və axtarış nəticələri yüklənilən vaxtı yenə də göstərə bilər
|
||||
• Bu xüsusiyyət avtomobil forma göstərici ilə işləmir"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Açar söz məzmununu gizlət</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Açar söz filtrləri ilə axtarış və axın videolarını gizlət</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Ev videolarını açar sözlərə görə gizlət</string>
|
||||
@@ -869,7 +882,7 @@ Səs treki menyusunu göstərmək üçün \"Video yayımları saxtalaşdır\"ı
|
||||
<string name="revanced_hide_shorts_location_label_title">Məkan etiketini gizlət</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Məkan etiketi gizlidir</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Məkan etiketi göstərilir</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Yeni elanları gizlət düyməsi</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Yeni elanlar düyməsini gizlət</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">Yeni elanlar düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">Yeni elanlar düyməsi göstərilir</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Dayandırma örtük düymələrini gizlət</string>
|
||||
@@ -1409,11 +1422,13 @@ Kiçik oynadıcı ekrandan sola və ya sağa sürüklənə bilər"</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">İrəliləyiş cizgisi vurğu rəngi</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Etibarsız irəliləmə cizgisi rəng dəyəri</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Başlıq simvolu</string>
|
||||
<string name="revanced_header_logo_entry_1">İlkin</string>
|
||||
<string name="revanced_header_logo_entry_2">Müntəzəm</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">Ən kiçik ReVanced</string>
|
||||
<string name="revanced_header_logo_entry_6">Fərdi</string>
|
||||
</patch>
|
||||
@@ -1603,6 +1618,14 @@ Məhdudiyyətlər:
|
||||
<string name="revanced_slide_to_seek_summary_off">Axtarmaq üçün sürüşdürmə aktiv deyil</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Android VR AV1-ə icazə ver</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Video kodlayıcı AVC (H.264), VP9 və ya AV1-dir
|
||||
|
||||
Oynatma ilişə bilər və ya kadrlar buraxıla bilər"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Video kodlayıcı AVC (H.264) və ya VP9-dur</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Bu tənzimləməni aktivləşdirmə proqram təminatlı AV1 kodlayıcı istifadə edə bilər.
|
||||
|
||||
Video oynatma AV1 ilə ilişə bilər və ya kadrlar buraxıla bilər."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Saxtakarlıq yan təsirləri</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Təcrübi qəbuledici və hər vaxt işləməyi dayandıra bilər</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Video 01:00-da dayana bilər və ya bəzi bölgələrdə mövcud olmaya bilər</string>
|
||||
@@ -1622,6 +1645,8 @@ Məhdudiyyətlər:
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Haqqında</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Reklamlar</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Назва праграмы</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Карыстальніцкая</string>
|
||||
<string name="revanced_custom_branding_icon_title">Значок праграмы</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Арыгінал</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced мінімальны</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced маштабаваны</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Карыстальніцкі</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Праверкі не пройдзены</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Адкрыць афіцыйны вэб-сайт</string>
|
||||
@@ -1411,11 +1424,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Акцэнтны колер пошуку</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Неверное значение цвета ползунка прогресса</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Лагатып загалоўка</string>
|
||||
<string name="revanced_header_logo_entry_1">Па змаўчанні</string>
|
||||
<string name="revanced_header_logo_entry_2">Звычайны</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced мінімальны</string>
|
||||
<string name="revanced_header_logo_entry_6">Карыстальніцкі</string>
|
||||
</patch>
|
||||
@@ -1605,6 +1620,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">Слайд для пошуку не ўключаны</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Дазволіць Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Відэакодэк — AVC (H.264), VP9 або AV1
|
||||
|
||||
Праграмаванне можа заікацца або прапускаць кадры"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Відэакодэк — AVC (H.264) або VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Уключэнне гэтай налады можа выкарыстоўваць праграмнае дэкадаванне AV1.
|
||||
|
||||
Прайграванне відэа з AV1 можа заікацца або прапускаць кадры."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Пабочныя эфекты падробкі</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Эксперыментальны кліент і можа спыніць працу ў любы час</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Відэа можа спыніцца на 1:00, ці можа быць недаступным у некаторых рэгіёнах</string>
|
||||
@@ -1624,6 +1647,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Пра</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Рэклама</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Име на приложението</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Персонализиран</string>
|
||||
<string name="revanced_custom_branding_icon_title">Икона на приложението</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Оригинален</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced минимален</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced мащабиран</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Персонализиран</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Проверката е неуспешна</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Отворете официалния уебсайт</string>
|
||||
@@ -1410,11 +1423,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Цветът на лентата за търсене</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Невалидна стойност за цвят на лентата на прогреса</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Лого в заглавката</string>
|
||||
<string name="revanced_header_logo_entry_1">По подразбиране</string>
|
||||
<string name="revanced_header_logo_entry_2">Обикновено</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced минимално</string>
|
||||
<string name="revanced_header_logo_entry_6">По избор</string>
|
||||
</patch>
|
||||
@@ -1604,6 +1619,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">Слайд за превъртане е деактивиран</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Разрешаване на Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Видеокодекът е AVC (H.264), VP9 или AV1
|
||||
|
||||
Възпроизвеждането може да заеква или да пропуска кадри"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Видеокодекът е AVC (H.264) или VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Разрешаването на тази настройка може да използва софтуерно AV1 декодиране.
|
||||
|
||||
Възпроизвеждането на видео с AV1 може да заеква или да пропуска кадри."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Странични ефекти от подменянето</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Експериментален клиент и може да спре да работи по всяко време</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Видеото може да спре на 1:00 или може да не е налично в някои региони</string>
|
||||
@@ -1623,6 +1646,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Относно</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Реклами</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">অ্যাপের নাম</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">কাস্টম</string>
|
||||
<string name="revanced_custom_branding_icon_title">অ্যাপ আইকন</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">মূল</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">রিভ্যান্সড মিনিমাল</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">রিভ্যান্সড স্কেলড</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">কাস্টম</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">চেক ফেইল করেছে</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">অফিশ্যাল ওয়েবসাইট খুলুন</string>
|
||||
@@ -1406,11 +1419,13 @@ Miniplayer স্ক্রিন থেকে বামে বা ডানে
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">সিকবারের এক্সেন্ট রঙ</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">অবৈধ সিকবার রঙ মান</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">হেডার লোগো</string>
|
||||
<string name="revanced_header_logo_entry_1">ডিফল্ট</string>
|
||||
<string name="revanced_header_logo_entry_2">সাধারণ</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">রিভ্যান্সড মিনিমাল</string>
|
||||
<string name="revanced_header_logo_entry_6">কাস্টম</string>
|
||||
</patch>
|
||||
@@ -1600,6 +1615,14 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
||||
<string name="revanced_slide_to_seek_summary_off">ভিডিওর নির্দিষ্ট অংশে যেতে টানুন সক্রিয় করা হয়নি</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">অ্যান্ড্রয়েড VR AV1 অনুমতি দিন</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"ভিডিও কোডেক হল AVC (H.264), VP9, অথবা AV1
|
||||
|
||||
প্লেব্যাক আটকে যেতে পারে বা ফ্রেম বাদ দিতে পারে"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">ভিডিও কোডেক হল AVC (H.264) অথবা VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"এই সেটিংটি চালু করলে সফটওয়্যার AV1 ডিকোডিং ব্যবহার হতে পারে।
|
||||
|
||||
AV1 সহ ভিডিও প্লেব্যাক আটকে যেতে পারে বা ফ্রেম বাদ দিতে পারে।"</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">স্পুফিংয়ের পার্শ্বপ্রতিক্রিয়া</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• পরীক্ষামূলক ক্লায়েন্ট এবং যেকোনো সময় কাজ করা বন্ধ করতে পারে</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• ভিডিও ১:০০ মিনিটে বন্ধ হতে পারে, অথবা কিছু অঞ্চলে উপলব্ধ নাও হতে পারে</string>
|
||||
@@ -1619,6 +1642,8 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">সম্পর্কে</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">বিজ্ঞাপন</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
@@ -203,8 +209,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -253,6 +261,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
@@ -203,8 +209,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -253,6 +261,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Název aplikace</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Vlastní</string>
|
||||
<string name="revanced_custom_branding_icon_title">Ikona aplikace</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Původní</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced minimální</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced škálované</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Vlastní</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Kontrola proběhla neúspěšně</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Otevřít oficiální webovou stránku</string>
|
||||
@@ -1410,11 +1423,13 @@ Omezení: Použití tlačítka zpět na panelu nástrojů nemusí fungovat"</str
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Zvýrazněná barva posuvníku</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Neplatná hodnota barvy posuvníku</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Logo záhlaví</string>
|
||||
<string name="revanced_header_logo_entry_1">Výchozí</string>
|
||||
<string name="revanced_header_logo_entry_2">Běžné</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced minimální</string>
|
||||
<string name="revanced_header_logo_entry_6">Vlastní</string>
|
||||
</patch>
|
||||
@@ -1604,6 +1619,14 @@ Omezení:
|
||||
<string name="revanced_slide_to_seek_summary_off">Posun pro hledání není povolen</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Povolit Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Video kodek je AVC (H.264), VP9 nebo AV1
|
||||
|
||||
Přehrávání se může zasekávat nebo přeskakovat snímky"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Video kodek je AVC (H.264) nebo VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Povolení tohoto nastavení může využívat softwarové dekódování AV1.
|
||||
|
||||
Přehrávání videa s AV1 se může sekat nebo vypadávat snímky."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Vedlejší účinky maskování</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Experimentální klient a může kdykoli přestat fungovat</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Video se může zastavit v 1:00 nebo nemusí být dostupné v některých oblastech</string>
|
||||
@@ -1623,6 +1646,8 @@ Omezení:
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">O aplikaci</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Reklamy</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Appnavn</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Tilpasset</string>
|
||||
<string name="revanced_custom_branding_icon_title">Appikon</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Original</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced minimal</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced skaleret</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Tilpasset</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Kontrol mislykkedes</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Åbn officiel hjemmeside</string>
|
||||
@@ -1412,11 +1425,13 @@ Miniafspiller kan trækkes ud over skærmen til venstre eller højre"</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Søgelinjens accentfarve</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Ugyldig søgelinje farveværdi</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Sidehovedlogo</string>
|
||||
<string name="revanced_header_logo_entry_1">Standard</string>
|
||||
<string name="revanced_header_logo_entry_2">Normal</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced minimal</string>
|
||||
<string name="revanced_header_logo_entry_6">Brugerdefineret</string>
|
||||
</patch>
|
||||
@@ -1606,6 +1621,14 @@ Begrænsninger:
|
||||
<string name="revanced_slide_to_seek_summary_off">Dias til søgning er ikke aktiveret</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Tillad Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Videocodec er AVC (H.264), VP9 eller AV1
|
||||
|
||||
Afspilning kan hakke eller miste billeder"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Videocodec er AVC (H.264) eller VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Aktivering af denne indstilling kan bruge software AV1-afkodning.
|
||||
|
||||
Videoafspilning med AV1 kan hakke eller tabe billeder."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Bivirkninger ved spoofing</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Eksperimentel klient og kan stoppe med at fungere når som helst</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Videoen kan stoppe ved 1:00, eller er muligvis ikke tilgængelig i visse regioner</string>
|
||||
@@ -1625,6 +1648,8 @@ Begrænsninger:
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Om</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Annoncer</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">App-Name</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Benutzerdefiniert</string>
|
||||
<string name="revanced_custom_branding_icon_title">App-Symbol</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Original</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced minimal</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced skaliert</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Benutzerdefiniert</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Prüfungen fehlgeschlagen</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Offizielle Website öffnen</string>
|
||||
@@ -1407,11 +1420,13 @@ Der Mini-Player kann mit einer Wischgeste vom Bildschirm nach links oder rechts
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Die Akzentfarbe der Fortschrittsanzeige</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Ungültiger Suchleisten-Farbwert</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Header-Logo</string>
|
||||
<string name="revanced_header_logo_entry_1">Standard</string>
|
||||
<string name="revanced_header_logo_entry_2">Regulär</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced Minimal</string>
|
||||
<string name="revanced_header_logo_entry_6">Benutzerdefiniert</string>
|
||||
</patch>
|
||||
@@ -1601,6 +1616,14 @@ Einschränkungen:
|
||||
<string name="revanced_slide_to_seek_summary_off">Slide zum Suchen ist nicht aktiviert</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Android VR AV1 zulassen</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Video-Codec ist AVC (H.264), VP9 oder AV1
|
||||
|
||||
Die Wiedergabe kann stottern oder Frames verlieren"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Video-Codec ist AVC (H.264) oder VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Durch Aktivierung dieser Einstellung kann Software-AV1-Decodierung verwendet werden.
|
||||
|
||||
Die Videowiedergabe mit AV1 kann stottern oder Bilder überspringen."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Nebenwirkungen des Spoofings</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Experimenteller Client und kann jederzeit aufhören zu funktionieren</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Video kann um 1:00 Uhr stoppen oder ist möglicherweise in einigen Regionen nicht verfügbar</string>
|
||||
@@ -1620,6 +1643,8 @@ Einschränkungen:
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Über</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Werbung</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Όνομα εφαρμογής</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Προσαρμοσμένο</string>
|
||||
<string name="revanced_custom_branding_icon_title">Εικονίδιο εφαρμογής</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Αρχικό</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced απλό</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced κλιμακωμένο</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Προσαρμοσμένο</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Αποτυχία ελέγχων</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Άνοιγμα επίσημης ιστοσελίδας</string>
|
||||
@@ -959,8 +972,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||
<string name="revanced_hide_related_videos_overlay_title">Σχετικά βίντεο στην πλήρη οθόνη</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_on">Κρυμμένα\n\nΑφορά τα σχετικά βίντεο της τελικής οθόνης στη λειτουργία πλήρους οθόνης</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_off">Εμφανίζονται\n\nΑφορά τα σχετικά βίντεο της τελικής οθόνης στη λειτουργία πλήρους οθόνης</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_on">Κρυμμένα</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_off">Εμφανίζονται</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">Χρονική πρόοδος βίντεο</string>
|
||||
@@ -1411,11 +1424,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Το χρώμα έμφασης της γραμμής προόδου</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Μη έγκυρη τιμή χρώματος γραμμής προόδου</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Λογότυπο επικεφαλίδας</string>
|
||||
<string name="revanced_header_logo_entry_1">Προεπιλογή</string>
|
||||
<string name="revanced_header_logo_entry_2">Κανονικό</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced απλό</string>
|
||||
<string name="revanced_header_logo_entry_6">Προσαρμοσμένο</string>
|
||||
</patch>
|
||||
@@ -1603,6 +1618,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">Η χειρονομία συρσίματος για αναζήτηση στη γραμμή προόδου είναι απενεργοποιημένη</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Να επιτρέπεται ο κωδικοποιητής Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Ο κωδικοποιητής βίντεο είναι ο AVC (H.264), ο VP9 ή ο AV1
|
||||
|
||||
Η αναπαραγωγή μπορεί να κομπιάζει ή να χάνει καρέ"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Ο κωδικοποιητής βίντεο είναι ο AVC (H.264) ή ο VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Η ενεργοποίηση αυτής της ρύθμισης ενδέχεται να χρησιμοποιήσει αποκωδικοποίηση λογισμικού AV1.
|
||||
|
||||
Η αναπαραγωγή βίντεο μπορεί να κομπιάζει ή να χάνει καρέ."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Παρενέργειες παραποίησης</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Πειραματικός πελάτης και μπορεί να σταματήσει να λειτουργεί ανά πάσα στιγμή</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Το βίντεο μπορεί να σταματήσει στο 1:00 ή να μην είναι διαθέσιμο σε ορισμένες περιοχές</string>
|
||||
@@ -1622,6 +1645,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Σχετικά με</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Διαφημίσεις</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Nombre de la aplicación</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Personalizado</string>
|
||||
<string name="revanced_custom_branding_icon_title">Icono de la aplicación</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Original</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced mínimo</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced escalado</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Personalizado</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Comprobaciones fallidas</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Ir al sitio web oficial</string>
|
||||
@@ -1401,11 +1414,13 @@ El minireproductor se puede arrastrar fuera de la pantalla hacia la izquierda o
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">El color de acento de la barra de búsqueda</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Valor de color de la barra de búsqueda inválido</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Logotipo del encabezado</string>
|
||||
<string name="revanced_header_logo_entry_1">Predeterminado</string>
|
||||
<string name="revanced_header_logo_entry_2">Normal</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced mínimo</string>
|
||||
<string name="revanced_header_logo_entry_6">Personalizado</string>
|
||||
</patch>
|
||||
@@ -1595,6 +1610,12 @@ Limitaciones:
|
||||
<string name="revanced_slide_to_seek_summary_off">Slide to seek no está activado</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Permitir Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"El códec de video es AVC (H.264), VP9 o AV1
|
||||
|
||||
La reproducción puede tartamudear o perder fotogramas"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">El códec de video es AVC (H.264) o VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Habilitar esta configuración puede usar la decodificación de software AV1.\n\nLa reproducción de video con AV1 puede tartamudear o perder fotogramas."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Efectos secundarios de la falsificación</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• El cliente es experimental y puede dejar de funcionar en cualquier momento</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• El video puede detenerse en 1:00, o puede no estar disponible en algunas regiones</string>
|
||||
@@ -1614,6 +1635,8 @@ Limitaciones:
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Acerca de</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Anuncios</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Rakenduse nimi</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Kohandatud</string>
|
||||
<string name="revanced_custom_branding_icon_title">Rakenduse ikoon</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Algne</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced minimaalne</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced skaleeritud</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Kohandatud</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Kontrollid ebaõnnestusid</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Ava oficial veebileht</string>
|
||||
@@ -1410,11 +1423,13 @@ Minimaalset mängijat saab lohistada ekraanilt vasakule või paremale"</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Otsinguriba esiletõiduv värv</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Vigane edastusriba värvi väärtus</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Päise logo</string>
|
||||
<string name="revanced_header_logo_entry_1">Vaikimisi</string>
|
||||
<string name="revanced_header_logo_entry_2">Tavaline</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced minimaalne</string>
|
||||
<string name="revanced_header_logo_entry_6">Kohandatud</string>
|
||||
</patch>
|
||||
@@ -1604,6 +1619,14 @@ Piirangud:
|
||||
<string name="revanced_slide_to_seek_summary_off">Libistamine otsimiseks on keelatud</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Luba Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Videokodek on AVC (H.264), VP9 või AV1
|
||||
|
||||
Taasesitus võib hakata kokutama või kaotada kaadreid"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Videokodek on AVC (H.264) või VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Selle seade lubamine võib kasutada tarkvara AV1 dekodeerimist.
|
||||
|
||||
AV1-ga videotaasesitus võib hakitud olla või kaadreid vahele jätta."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Võltsimise kõrvalmõjud</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Eksperimentaalne klient ja võib igal ajal töötamast lakata</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Video võib peatuda kell 1:00 või ei pruugi olla teatud piirkondades saadaval</string>
|
||||
@@ -1623,6 +1646,8 @@ Piirangud:
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Teave</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Reklaamid</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
@@ -203,8 +209,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -253,6 +261,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">بررسی ناموفق بود</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">رفتن به وبسایت رسمی</string>
|
||||
@@ -253,8 +259,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -303,6 +311,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Sovelluksen nimi</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Mukautettu</string>
|
||||
<string name="revanced_custom_branding_icon_title">Sovelluskuvake</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Alkuperäinen</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced, minimaalinen</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced, skaalattu</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Mukautettu</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Tarkastuksia epäonnistui</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Avaa virallinen sivusto</string>
|
||||
@@ -109,7 +122,7 @@ Napauta jatka-painiketta ja salli optimoinnin muutokset."</string>
|
||||
<string name="revanced_spoof_video_streams_screen_title">Naamioi videovirrat</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Naamioi asiakasohjelman videovirrat toisto-ongelmien estämiseksi</string>
|
||||
<string name="revanced_spoof_video_streams_screen_title">Naamioi videovirrat</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Naamioi asiakkaan videovirrat estääksesi toisto-ongelmat</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Naamioi asiakasohjelman videovirrat toisto-ongelmien estämiseksi</string>
|
||||
<string name="revanced_spoof_video_streams_title">Naamioi videovirrat</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">"Videovirrat on naamioitu
|
||||
|
||||
@@ -1410,12 +1423,14 @@ Minisoitin voidaan vetää pois näytöltä vasemmalle tai oikealle"</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Etenemispalkin korostusväri</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Virheellinen etenemispalkin väriarvo</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Ylätunnisteen logo</string>
|
||||
<string name="revanced_header_logo_entry_1">Oletus</string>
|
||||
<string name="revanced_header_logo_entry_2">Tavallinen</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced-minimaalinen</string>
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced, minimaalinen</string>
|
||||
<string name="revanced_header_logo_entry_6">Mukautettu</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
@@ -1604,6 +1619,14 @@ Rajoitukset:
|
||||
<string name="revanced_slide_to_seek_summary_off">Kelaus liu\'uttamalla ei ole käytössä</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Salli Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Videokoodekki on AVC (H.264), VP9 tai AV1
|
||||
|
||||
Toisto saattaa pätkiä"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Videokoodekki on AVC (H.264) tai VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Tämän asetuksen käyttöönotto saattaa käyttää ohjelmistopohjaista AV1-dekoodausta.
|
||||
|
||||
AV1-videon toisto saattaa pätkiä."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Naamioimisen sivuvaikutukset</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Kokeellinen asiakasohjelma, joka saattaa lakata toimimasta milloin tahansa</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Video saattaa pysähtyä aikaan 1:00, tai ei välttämättä ole saatavilla joillakin alueilla</string>
|
||||
@@ -1623,6 +1646,8 @@ Rajoitukset:
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Tietoja</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Mainokset</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Pangalan ng app</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Pasadyang</string>
|
||||
<string name="revanced_custom_branding_icon_title">Icon ng app</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Orihinal</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced minimal</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced naka-scale</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Pasadyang</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Nabigo ang mga pagsusuri</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Buksan ang Opisyal na Website</string>
|
||||
@@ -1408,11 +1421,13 @@ Ang \"miniplayer\" ay maaaring i-drag palabas ng screen sa kaliwa o kanan"</stri
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Ang accent na kulay ng seekbar</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Hindi wastong halaga ng kulay ng seekbar</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Logo ng Header</string>
|
||||
<string name="revanced_header_logo_entry_1">Default</string>
|
||||
<string name="revanced_header_logo_entry_2">Regular</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced minimal</string>
|
||||
<string name="revanced_header_logo_entry_6">Pasadyang</string>
|
||||
</patch>
|
||||
@@ -1602,6 +1617,14 @@ Mga Limitasyon:
|
||||
<string name="revanced_slide_to_seek_summary_off">Hindi pinagana ang slide to seek</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Payagan ang Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Ang video codec ay AVC (H.264), VP9, o AV1
|
||||
|
||||
Maaaring mag-stutter o mag-drop ng frames ang playback"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Ang video codec ay AVC (H.264) o VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Ang pagpapagana sa setting na ito ay maaaring gumamit ng software AV1 decoding.
|
||||
|
||||
Maaaring mag-stutter o mag-drop ng frames ang pag-playback ng video na may AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Mga epekto ng pagpapanggap</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Pang-eksperimentong kliyente at maaaring huminto sa paggana anumang oras</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Maaaring huminto ang video sa 1:00, o maaaring hindi available sa ilang rehiyon</string>
|
||||
@@ -1621,6 +1644,8 @@ Mga Limitasyon:
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Tungkol</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Mga Ad</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Nom de l\'application</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Personnalisé</string>
|
||||
<string name="revanced_custom_branding_icon_title">Icône de l\'application</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Original</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced minimaliste</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced mis à l\'échelle</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Personnalisé</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<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 officiel</string>
|
||||
@@ -1411,11 +1424,13 @@ Le lecteur réduit peut être glissé hors de l'écran, à gauche comme à droit
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">La couleur d\'accentuation de la barre de progression</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Valeur invalide pour la couleur de la barre de progression</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Logo d\'en-tête</string>
|
||||
<string name="revanced_header_logo_entry_1">Par défaut</string>
|
||||
<string name="revanced_header_logo_entry_2">Standard</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced minimaliste</string>
|
||||
<string name="revanced_header_logo_entry_6">Personnalisé</string>
|
||||
</patch>
|
||||
@@ -1605,6 +1620,14 @@ Limitations :
|
||||
<string name="revanced_slide_to_seek_summary_off">Glisser pour rechercher est désactivé</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Autoriser Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Le codec vidéo est AVC (H.264), VP9 ou AV1
|
||||
|
||||
La lecture peut saccader ou perdre des images"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Le codec vidéo est AVC (H.264) ou VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"L'activation de ce paramètre peut utiliser le décodage AV1 logiciel.
|
||||
|
||||
La lecture vidéo avec AV1 peut saccader ou perdre des images."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Effets secondaires de la falsification</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Client expérimental, peut cesser de fonctionner à tout moment</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Les vidéos sont susceptibles de s\'arrêter à 1:00, ou de ne pas être disponibles dans certaines régions</string>
|
||||
@@ -1624,6 +1647,8 @@ Limitations :
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">À propos</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Annonces</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Ainm an aip</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Saincheaptha</string>
|
||||
<string name="revanced_custom_branding_icon_title">Deilbhín aip</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Bunaidh</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced Íosmhéid</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced scálaithe</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Saincheaptha</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Theip ar sheiceálacha</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Oscailt láithreán gréasáin oifigiúil</string>
|
||||
@@ -55,7 +68,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_search_no_results_summary">Bain triail as eochairfhocal eile</string>
|
||||
<string name="revanced_settings_search_recent_searches">Cuardaigh le déanaí</string>
|
||||
<string name="revanced_settings_search_remove_message">Bain as stair an chuardaigh?</string>
|
||||
<string name="revanced_settings_search_clear_history">Glan stair an chuardaigh</string>
|
||||
<string name="revanced_settings_search_clear_history">Glan stair chuardaigh</string>
|
||||
<string name="revanced_settings_search_clear_history_message">An bhfuil tú cinnte gur mhaith leat stair chuardaigh go léir a ghlanadh?</string>
|
||||
<string name="revanced_settings_search_tips_title">Leideanna Cuardaigh</string>
|
||||
<string name="revanced_settings_search_tips_summary">"• Tapáil cosán chun dul chuige
|
||||
@@ -106,14 +119,14 @@ Brúigh an cnaipe leanúnaí agus ligean athruithe optúimíochta."</string>
|
||||
<string name="gms_core_dialog_continue_text">Lean ar aghaidh</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_screen_title">Sruthanna físeán spoof</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Spoof na sruthanna físeáin cliant chun saincheisteanna athsheinm a chosc</string>
|
||||
<string name="revanced_spoof_video_streams_screen_title">Sruthanna físeáin bréige</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Déan bréagú ar shruthanna físeáin an chliaint chun saincheisteanna athsheinm a chosc</string>
|
||||
<string name="revanced_spoof_video_streams_title">Sruthanna físeán spoof</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">"Tá sruthanna físeáin bréagaithe
|
||||
<string name="revanced_spoof_video_streams_screen_title">Sruthanna físe bréige</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Déan sruthanna físe an chliaint a fhalsú chun fadhbanna athsheinm a chosc</string>
|
||||
<string name="revanced_spoof_video_streams_screen_title">Sruthanna físe bréige</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Déan sruthanna físe an chliaint a fhalsú chun fadhbanna athsheinm a chosc</string>
|
||||
<string name="revanced_spoof_video_streams_title">Sruthanna físe bréige</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">"Déantar sruthanna físe a bhréagnú
|
||||
|
||||
Má tá tú i do úsáideoir YouTube Premium, seans nach mbeidh an socrú seo ag teastáil"</string>
|
||||
Mura bhfuil tú i d’úsáideoir YouTube Premium, b’fhéidir nach mbeidh an socrú seo ag teastáil"</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"Ní dhéantar sruthanna físeáin a bhréagnú
|
||||
|
||||
Seans nach n-oibreoidh an t-athsheinm"</string>
|
||||
@@ -230,8 +243,8 @@ Mar sin féin, logálfaidh sé seo roinnt sonraí úsáideora freisin, mar shamp
|
||||
<string name="revanced_hide_image_shelf_summary_on">Tá seilf íomhá i dtorthaí cuardaigh i bhfolach</string>
|
||||
<string name="revanced_hide_image_shelf_summary_off">Taispeántar seilf íomhánna i dtorthaí cuardaigh</string>
|
||||
<string name="revanced_hide_latest_posts_title">Folaigh na poist is déanaí</string>
|
||||
<string name="revanced_hide_latest_posts_summary_on">Tá postanna is déanaí i bhfolach</string>
|
||||
<string name="revanced_hide_latest_posts_summary_off">Taispeántar na postálacha is déanaí</string>
|
||||
<string name="revanced_hide_latest_posts_summary_on">Tá na poist is déanaí i bhfolach</string>
|
||||
<string name="revanced_hide_latest_posts_summary_off">Taispeántar na poist is déanaí</string>
|
||||
<string name="revanced_hide_mix_playlists_title">Folaigh seinmliostaí meascán</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_on">Tá seinmliostaí measctha i bhfolach</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_off">Taispeántar seinmliostaí measctha</string>
|
||||
@@ -248,23 +261,23 @@ Mar sin féin, logálfaidh sé seo roinnt sonraí úsáideora freisin, mar shamp
|
||||
<string name="revanced_hide_playables_summary_off">Taispeántar na heilimintí inseinnte</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">Folaigh cnaipe \'Taispeáin tuilleadh\'</string>
|
||||
<string name="revanced_hide_show_more_button_title">Folaigh an cnaipe \'Taispeáin níos mó\'</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">Cnaipe \'Taispeáin níos mó\' sna torthaí cuardaigh i bhfolach</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Cnaipe \'Taispeáin níos mó\' sna torthaí cuardaigh taispeánta</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Cnaipe \'Taispeáin níos mó\' sna torthaí cuardaigh thaispeánta</string>
|
||||
<string name="revanced_hide_surveys_title">Folaigh suirbhéanna</string>
|
||||
<string name="revanced_hide_surveys_summary_on">Tá suirbhéanna i bhfolach</string>
|
||||
<string name="revanced_hide_surveys_summary_off">Tá suirbhéanna taispeánta</string>
|
||||
<string name="revanced_hide_surveys_summary_off">Taispeántar suirbhéanna</string>
|
||||
<string name="revanced_hide_ticket_shelf_title">Folaigh an seilf ticéad</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_on">Tá an seilf ticéad i bhfolach</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_off">Taispeántar an seilf ticéad</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_off">Taispeántar seilf ticéad</string>
|
||||
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Folaigh lipéid mholtaí físeáin</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">Tá lipéid \'D\'fhéach daoine freisin ar\' agus \'B\'fhéidir gur mhaith leat freisin\' sna torthaí cuardaigh i bhfolach</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">Tá lipéid \'D\'fhéach daoine freisin ar\' agus \'B\'fhéidir gur mhaith leat freisin\' sna torthaí cuardaigh taispeánta</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">Taispeántar lipéid ‘Daoine a d’fhéach freisin’ agus ‘B’fhéidir gur mhaith leat freisin’ i dtorthaí cuardaigh</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Folaigh YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Beochan Doodles YouTube ar an lógó i bhfolach</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Tá beochán YouTube Doodles ar an lógó ar taispeáint</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Tá beochan YouTube Doodles ar an lógó i bhfolach</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Taispeántar beochan YouTube Doodles ar an lógó</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"Taispeántar Doodles ó YouTube cúpla lá gach bliain.
|
||||
|
||||
Má tá Doodle á thaispeáint faoi láthair i do réigiún agus má tá an tsuíomh seo a chumasc, ansin cuirfear an barra scagaire faoin bharra cuardaigh i bhfolach freisin."</string>
|
||||
@@ -283,29 +296,29 @@ Má tá Doodle á thaispeáint faoi láthair i do réigiún agus má tá an tsu
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">Folaigh cnaipe Ballraíochta</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Cnaipe \'Glac páirt\' i bhfolach</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Cnaipe \'Glac páirt\' taispeánta</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Tá an cnaipe Glac páirt i bhfolach</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Taispeántar an cnaipe Glac páirt</string>
|
||||
<string name="revanced_hide_medical_panels_title">Folaigh painéil leighis</string>
|
||||
<string name="revanced_hide_medical_panels_summary_on">Tá painéil leighis i bhfolach</string>
|
||||
<string name="revanced_hide_medical_panels_summary_off">Taispeántar painéil leighis</string>
|
||||
<string name="revanced_hide_quick_actions_title">Folaigh gníomhartha tapa</string>
|
||||
<string name="revanced_hide_quick_actions_summary_on">Tá gníomhartha tapa sa scáileán iomlán i bhfolach</string>
|
||||
<string name="revanced_hide_quick_actions_summary_off">Tá gníomhartha tapa sa scáileán iomlán le feiceáil</string>
|
||||
<string name="revanced_hide_quick_actions_summary_off">Taispeántar gníomhartha tapa i lánscáileán</string>
|
||||
<string name="revanced_hide_related_videos_title">Folaigh físeáin ghaolmhara</string>
|
||||
<string name="revanced_hide_related_videos_summary_on">Tá físeáin ghaolmhara i ngníomhartha tapa i bhfolach</string>
|
||||
<string name="revanced_hide_related_videos_summary_off">Tá físeáin ghaolmhara i ngníomhartha tapa le feiceáil</string>
|
||||
<string name="revanced_hide_related_videos_summary_off">Taispeántar físeáin ghaolmhara i ngníomhartha tapa</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Folaigh treoirlínte síntiúsóirí</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Tá treoirlínte pobail síntiúsóirí i bhfolach</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Taispeántar treoirlínte pobail do shíntiúsóirí</string>
|
||||
<string name="revanced_hide_timed_reactions_title">Folaigh frithghníomhartha ama</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">Tá frithghníomhartha ama i bhfolach</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">Taispeántar frithghníomhartha ama</string>
|
||||
<string name="revanced_hide_timed_reactions_title">Folaigh imoibrithe uainithe</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">Tá imoibrithe uainithe i bhfolach</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">Taispeántar imoibrithe uainithe</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Folaigh \'Achoimre físeáin arna giniúint ag AI\'</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Tá an chuid achoimre físe IS-ghinte i bhfolach</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Tá an rannán achoimre físeán ginte ag AI taispeánta</string>
|
||||
<string name="revanced_hide_ask_section_title">Folaigh Fiafraigh</string>
|
||||
<string name="revanced_hide_ask_section_summary_on">Tá rannóg na Fiafraí i bhfolach</string>
|
||||
<string name="revanced_hide_ask_section_summary_off">Taispeántar rannóg na Fiafraí</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Taispeántar an chuid achoimre físe a ghintear ag AI</string>
|
||||
<string name="revanced_hide_ask_section_title">Folaigh Iarr</string>
|
||||
<string name="revanced_hide_ask_section_summary_on">Tá an rannán Iarratas i bhfolach</string>
|
||||
<string name="revanced_hide_ask_section_summary_off">Taispeántar an rannán Iarratas</string>
|
||||
<string name="revanced_hide_attributes_section_title">Folaigh Tréithe</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Tá ailt d\'áiteanna sonracha, Cluichí, Ceol agus Daoine a luaitear i bhfolach</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Taispeántar ailt d\'áiteanna sonracha, Cluichí, Ceol agus Daoine a luaitear</string>
|
||||
@@ -323,54 +336,54 @@ Má tá Doodle á thaispeáint faoi láthair i do réigiún agus má tá an tsu
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Taispeántar rannán cártaí faisnéise</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Folaigh \'Príomhchoincheapa\'</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Tá an chuid Príomhchoincheapa i bhfolach</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Taispeántar an chuid Príomhchoincheapa</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Taispeántar an chuid coincheapa lárnacha</string>
|
||||
<string name="revanced_hide_transcript_section_title">Folaigh Tras-scríbhinn</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Tá alt an tras-scríbhinn i bhfolach</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Taispeántar alt an tras-scríbhinn</string>
|
||||
<string name="revanced_hide_description_components_screen_title">Cur síos físeán</string>
|
||||
<string name="revanced_hide_description_components_screen_summary">Folaigh nó taispeáint comhpháirteanna tuairisc</string>
|
||||
<string name="revanced_hide_description_components_screen_summary">Folaigh nó taispeáin comhpháirteanna cur síos físe</string>
|
||||
<string name="revanced_hide_filter_bar_screen_title">Barra scagaire</string>
|
||||
<string name="revanced_hide_filter_bar_screen_summary">Folaigh nó taispeáin an barra scagaire i bhfothaí, físeáin ghaolmhara, torthaí cuardaigh, agus stair féachana</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_feed_title">Folaigh i bhfothaí</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">I bhfolach i bhfothaí</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Taispeánta i bhfothaí</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Taispeántar i bhfothaí</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Folaigh i bhfíseáin gaolmhara</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">I bhfolach i bhfíseáin ghaolmhara</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Taispeántar i bhfíseáin ghaolmhara</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_title">Folaigh i dtorthaí cuardaigh</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Folaigh i dtorthaí cuardaigh</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Taispeáin i dtorthaí cuardaigh</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Taispeántar i dtorthaí cuardaigh</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_title">Folaigh i stair faire</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">I bhfolach i stair féachana</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Taispeánta i stair faire</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Taispeántar i stair faire</string>
|
||||
<string name="revanced_channel_screen_title">Leathanach cainéil</string>
|
||||
<string name="revanced_channel_screen_summary">Folaigh nó taispeáin comhpháirteanna leathanach cainéil</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Folaigh seilf \'Duit\'</string>
|
||||
<string name="revanced_hide_for_you_shelf_title">Folaigh seilf \'Duitse\'</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Tá seilf \'Maidir Leat\' i bhfolach</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Tá seilf \'Maidir Leat\' le feiceáil</string>
|
||||
<string name="revanced_hide_links_preview_title">Folaigh réamhamharc ar naisc</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Tá réamhamharc ar naisc i bhfolach</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Tá réamhamharc ar naisc le feiceáil</string>
|
||||
<string name="revanced_hide_links_preview_title">Folaigh réamhamharc naisc</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Tá réamhamharc naisc i bhfolach</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Taispeántar réamhamharc naisc</string>
|
||||
<string name="revanced_hide_members_shelf_title">Folaigh seilf na mball</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Tá seilf na mball i bhfolach</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Taispeántar seilf na gcomhaltaí</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">Folaigh cnaipe \"Tabhair cuairt ar an gComhphobal\"</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">Tá cnaipe \"Tabhair cuairt ar an gComhphobal\" i bhfolach</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">Tá cnaipe \'Tabhair Cuairt ar an bPobal\' le feiceáil</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">Taispeántar an cnaipe Tabhair Cuairt ar an bPobal</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Folaigh an cnaipe \'Tabhair cuairt ar an siopa\' ar leathanaigh chainéil</string>
|
||||
<string name="revanced_hide_visit_store_button_title">Folaigh an cnaipe \'Tabhair cuairt ar an siopa\'</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Tá cnaipe \'Tabhair Cuairt ar an Siopa\' i bhfolach</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Tá cnaipe \'Tabhair Cuairt ar an Siopa\' le feiceáil</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Taispeántar an cnaipe Tabhair cuairt ar an siopa</string>
|
||||
<string name="revanced_comments_screen_title">Tráchtanna</string>
|
||||
<string name="revanced_comments_screen_summary">Folaigh nó taispeáin comhpháirteanna na rannóige tráchtanna</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Folaigh achoimre comhrá IS</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_summary_on">Tá achoimre comhrá IS i bhfolach</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_summary_off">Tá achoimre comhrá IS taispeánta</string>
|
||||
<string name="revanced_hide_comments_ai_summary_title">Folaigh achoimre Tuairimí AI</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_summary_off">Taispeántar achoimre ar chomhrá AI</string>
|
||||
<string name="revanced_hide_comments_ai_summary_title">Folaigh achoimre ar thráchtanna AI</string>
|
||||
<string name="revanced_hide_comments_ai_summary_summary_on">Tá achoimre tráchtanna IS i bhfolach</string>
|
||||
<string name="revanced_hide_comments_ai_summary_summary_off">Tá achoimre tráchtanna IS taispeánta</string>
|
||||
<string name="revanced_hide_comments_ai_summary_summary_off">Taispeántar achoimre ar thráchtanna IS</string>
|
||||
<string name="revanced_hide_comments_channel_guidelines_title">Folaigh treoirlínte an chainéil</string>
|
||||
<string name="revanced_hide_comments_channel_guidelines_summary_on">Tá treoirlínte an chainéil i bhfolach</string>
|
||||
<string name="revanced_hide_comments_channel_guidelines_summary_off">Taispeántar treoirlínte an chainéil</string>
|
||||
@@ -382,13 +395,13 @@ Má tá Doodle á thaispeáint faoi láthair i do réigiún agus má tá an tsu
|
||||
<string name="revanced_hide_comments_section_summary_off">Taispeántar an chuid tuairimí</string>
|
||||
<string name="revanced_hide_comments_community_guidelines_title">Folaigh treoirlínte an chomhphobail</string>
|
||||
<string name="revanced_hide_comments_community_guidelines_summary_on">Tá treoirlínte an phobail i bhfolach</string>
|
||||
<string name="revanced_hide_comments_community_guidelines_summary_off">Tá treoirlínte an phobail le feiceáil</string>
|
||||
<string name="revanced_hide_comments_community_guidelines_summary_off">Taispeántar treoirlínte an phobail</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">Folaigh an cnaipe \'Cruthaigh Short\'</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Tá cnaipe Cruthaigh gearrscéal i bhfolach</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Taispeántar cnaipe Cruthaigh gearrscéal</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_title">Folaigh cnaipí Emoji agus Amscála</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_summary_on">Tá cnaipí Emoji agus Amscála i bhfolach</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_summary_off">Tá cnaipí Emoji agus Amscála taispeánta</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_title">Folaigh cnaipí Emoji agus Stampa Ama</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_summary_on">Tá cnaipí Emoji agus Stampa Ama i bhfolach</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_summary_off">Taispeántar cnaipí Emoji agus Stampa Ama</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">Folaigh trácht réamhamharc</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">Tá trácht réamhamhar i bhfolach</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">Taispeántar trácht réamhamharc</string>
|
||||
@@ -396,7 +409,7 @@ Má tá Doodle á thaispeáint faoi láthair i do réigiún agus má tá an tsu
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">Tá cnaipe buíochas i bhfolach</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_off">Taispeántar cnaipe buíochas</string>
|
||||
<string name="revanced_custom_filter_screen_title">Scagaire saincheaptha</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Folaigh comhpháirteanna ag baint úsáide as</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Folaigh comhpháirteanna ag baint úsáide as scagairí saincheaptha</string>
|
||||
<string name="revanced_custom_filter_title">Cumasaigh scagaire saincheaptha</string>
|
||||
<string name="revanced_custom_filter_summary_on">Tá scagaire saincheaptha cumasaithe</string>
|
||||
<string name="revanced_custom_filter_summary_off">Tá scagaire saincheaptha míchumasaithe</string>
|
||||
@@ -1410,11 +1423,13 @@ Is féidir an mhion-imreoir a tharraingt as an scáileán ar chlé nó ar dheis"
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Dath accent an bhar taispillte</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Luach datha barra cuardaigh neamhbhailí</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Lógó Ceanntáisc</string>
|
||||
<string name="revanced_header_logo_entry_1">Réamhshocrú</string>
|
||||
<string name="revanced_header_logo_entry_2">Rialta</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced íosta</string>
|
||||
<string name="revanced_header_logo_entry_6">Saincheaptha</string>
|
||||
</patch>
|
||||
@@ -1467,7 +1482,7 @@ Brúigh anseo chun tuilleadh eolais a fháil faoi DeArrow"</string>
|
||||
<string name="revanced_announcements_summary_off">Ní thaispeántar fógraí ar thosú</string>
|
||||
<string name="revanced_announcements_enabled_summary">Taispeáin fógraí ar thosú</string>
|
||||
<string name="revanced_announcements_connection_failed">Theip ar nascadh le soláthraí fógraí</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">Díbhunaigh</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">Díbhe</string>
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.loopVideoPatch">
|
||||
<string name="revanced_loop_video_title">Cumasaigh físeán lúbtha</string>
|
||||
@@ -1476,44 +1491,44 @@ Brúigh anseo chun tuilleadh eolais a fháil faoi DeArrow"</string>
|
||||
</patch>
|
||||
<patch id="misc.loopvideo.button.loopVideoButtonPatch">
|
||||
<string name="revanced_loop_video_button_title">Taispeáin an cnaipe físeáin lúbtha</string>
|
||||
<string name="revanced_loop_video_button_summary_on">Tá an cnaipe ar taispeáint</string>
|
||||
<string name="revanced_loop_video_button_summary_on">Taispeántar an cnaipe</string>
|
||||
<string name="revanced_loop_video_button_summary_off">Níl an cnaipe ar taispeáint</string>
|
||||
<string name="revanced_loop_video_button_toast_on">Tá físeán lúbtha ar siúl</string>
|
||||
<string name="revanced_loop_video_button_toast_off">Tá físeán lúbtha as siúl</string>
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Toisí feiste spoof</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Toisí gléise spoofed
|
||||
<string name="revanced_spoof_device_dimensions_title">Toisí gléas a fhalsú</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Toisí na ngléasanna falsaithe
|
||||
|
||||
D'fhéadfadh go gcuirfí caighdeáin físeáin níos airde ar fáil ach d'fhéadfá stuttering athsheinm físeáin, saol ceallraí níos measa, agus fo-iarsmaí anaithnid a fháil"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"Níl toisí gléise spoofed
|
||||
D’fhéadfadh cáilíochtaí físe níos airde a bheith díghlasáilte ach d’fhéadfadh go mbeadh stad ar athsheinm físe, saol ceallraí níos measa, agus fo-iarsmaí anaithnide agat"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"Toisí na ngléasanna gan falsaithe
|
||||
|
||||
Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">D\'fhéadfadh sé seo a bheith ina chúis le stuttering athsheinm físe, saol ceallraí níos measa, agus fo-iarmhairtí anaithnid.</string>
|
||||
D’fhéadfadh cáilíochtaí físe níos airde a bheith díghlasáilte ach d’fhéadfadh go mbeadh stad ar athsheinm físe, saol ceallraí níos measa, agus fo-iarsmaí anaithnide agat"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Is féidir go mbeidh stad ar athsheinm físe, saolré na ceallraí níos measa, agus fo-iarsmaí anaithnide mar thoradh air seo.</string>
|
||||
</patch>
|
||||
<patch id="misc.hapticfeedback.disableHapticFeedbackPatch">
|
||||
<string name="revanced_disable_haptic_feedback_title">Aiseolas haptach</string>
|
||||
<string name="revanced_disable_haptic_feedback_summary">Athraigh aiseolas haptach</string>
|
||||
<string name="revanced_disable_haptic_feedback_chapters_title">Díchumasaigh haptics caibidlí</string>
|
||||
<string name="revanced_disable_haptic_feedback_chapters_summary_on">Tá haptics caibidlí díchumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_chapters_summary_off">Tá haptics caibidlí cumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_precise_seeking_title">Díchumasaigh haptics beacht cuardaigh</string>
|
||||
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_on">Tá haptics beachtais díchumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_off">Tá haptics beacht cuardaigh cumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_title">Díchumasaigh haptics díthurais</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_summary_on">Tá haptics díthurais díchumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_summary_off">Tá haptics díthurais cumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_title">Díchumasaigh súmáil haptics</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_summary_on">Tá súmáil haptics díchumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_summary_off">Tá súmáil haptics cumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_title">Aiseolas haiptice</string>
|
||||
<string name="revanced_disable_haptic_feedback_summary">Athraigh aiseolas haiptice</string>
|
||||
<string name="revanced_disable_haptic_feedback_chapters_title">Díchumasaigh haiptice caibidlí</string>
|
||||
<string name="revanced_disable_haptic_feedback_chapters_summary_on">Tá haiptice caibidlí díchumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_chapters_summary_off">Tá haiptice caibidlí cumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_precise_seeking_title">Díchumasaigh haiptice beacht cuardaigh</string>
|
||||
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_on">Tá haiptice cuardaigh chruinne díchumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_off">Tá haiptice cuardaigh chruinn cumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_title">Díchumasaigh haiptice cuardaigh agus cealaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_summary_on">Tá haiptice cuardaigh cealaithe díchumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_seek_undo_summary_off">Tá haiptice cuardaigh cealaithe cumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_title">Díchumasaigh haiptice súmála</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_summary_on">Tá haiptice súmála díchumasaithe</string>
|
||||
<string name="revanced_disable_haptic_feedback_zoom_summary_off">Tá haiptice súmála cumasaithe</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">Má d’athraigh tú sonraí logála isteach do chuntais le déanaí, ansin díshuiteáil agus athshuiteáil MicroG.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Atreoracha seachbhóthar URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Seachnaítear atreoruithe URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_off">Ní chuirtear athsheoltaí URL</string>
|
||||
<string name="revanced_bypass_url_redirects_title">Seachain atreoruithe URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Déantar atreoruithe URL a sheachaint</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_off">Ní dhéantar seachaint ar atreoruithe URL</string>
|
||||
</patch>
|
||||
<patch id="misc.links.openLinksExternallyPatch">
|
||||
<string name="revanced_external_browser_title">Oscail naisc sa bhrabhsála</string>
|
||||
@@ -1523,14 +1538,14 @@ Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil"</string>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as 'revanced_custom_playback_speeds_auto'. -->
|
||||
<string name="revanced_video_quality_default_entry_1">Uathoibríoch</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Cuimhnigh athruithe ar cháilíocht</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Cuimhnigh athruithe ar cháilíocht físe</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Baineann athruithe cáilíochta le gach físeán</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Ní bhaineann athruithe cáilíochta ach leis an bhfíseán reatha</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_toast_title">Taispeáin fógra beag ar athruithe cáilíochta físe</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_toast_title">Taispeáin tósta ar athruithe cáilíochta físe</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">Taispeántar fógra beag nuair a athraítear cáilíocht réamhshocraithe an fhíseáin</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">Ní thaispeántar fógra beag nuair a athraítear cáilíocht réamhshocraithe an fhíseáin</string>
|
||||
<string name="revanced_video_quality_default_wifi_title">Cáilíocht físe réamhshocraithe ar líonra</string>
|
||||
<string name="revanced_video_quality_default_mobile_title">Cáilíocht físe réamhshocraithe ar líonra</string>
|
||||
<string name="revanced_video_quality_default_wifi_title">Cáilíocht físe réamhshocraithe ar líonra Wi-Fi</string>
|
||||
<string name="revanced_video_quality_default_mobile_title">Cáilíocht físe réamhshocraithe ar líonra soghluaiste</string>
|
||||
<string name="revanced_remember_shorts_quality_last_selected_title">Cuimhnigh ar athruithe cáilíochta Shorts</string>
|
||||
<string name="revanced_remember_shorts_quality_last_selected_summary_on">Baineann athruithe ar an gcáilíocht le gach Shorts</string>
|
||||
<string name="revanced_remember_shorts_quality_last_selected_summary_off">Ní bhaineann athruithe ar an gcáilíocht ach leis an Short reatha</string>
|
||||
@@ -1538,7 +1553,7 @@ Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil"</string>
|
||||
<string name="revanced_shorts_quality_default_mobile_title">Cáilíocht réamhshocraithe Shorts ar líonra soghluaiste</string>
|
||||
<string name="revanced_remember_video_quality_mobile">soghluaiste</string>
|
||||
<string name="revanced_remember_video_quality_wifi">Wi-Fi</string>
|
||||
<string name="revanced_remember_video_quality_toast">Athraigh cáilíocht réamhshocraithe %1$s go dtí: %2$s</string>
|
||||
<string name="revanced_remember_video_quality_toast">Athraíodh cáilíocht réamhshocraithe %1$s go: %2$s</string>
|
||||
<string name="revanced_remember_video_quality_toast_shorts">Athraíodh cáilíocht Shorts %1$s go: %2$s</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
@@ -1548,22 +1563,22 @@ Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil"</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Taispeáin cnaipe cáilíochta físeáin</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Tá cnaipe le feiceáil. Tapáil agus coinnigh chun cáilíocht a athshocrú mar réamhshocrú</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Níl cnaipe le feiceáil</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Taispeántar an cnaipe. Tapáil agus coinnigh síos chun an caighdeán a athshocrú go dtí an caighdeán réamhshocraithe</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Ní thaispeántar an cnaipe</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Roghchlár luas athsheinm saincheaptha</string>
|
||||
<string name="revanced_custom_speed_menu_summary_on">Taispeántar roghchlár luais saincheaptha</string>
|
||||
<string name="revanced_custom_speed_menu_summary_off">Ní thaispeántar roghchlár luais saincheaptha</string>
|
||||
<string name="revanced_restore_old_speed_menu_title">Athchóirigh an seanchalafort luais athsheinm</string>
|
||||
<string name="revanced_restore_old_speed_menu_summary_on">Tá an seanchalafort luais taispeánta</string>
|
||||
<string name="revanced_restore_old_speed_menu_summary_off">Tá an calafort luais nua-aimseartha taispeánta</string>
|
||||
<string name="revanced_restore_old_speed_menu_title">Athchóirigh an sean-roghchlár luas athsheinm</string>
|
||||
<string name="revanced_restore_old_speed_menu_summary_on">Taispeántar an sean-roghchlár luais</string>
|
||||
<string name="revanced_restore_old_speed_menu_summary_off">Taispeántar roghchlár luais nua-aimseartha</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Luas athsheinm saincheaptha</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Cuir leis nó athraigh na luasanna athsheinm saincheaptha</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Ní mór luas saincheaptha a bheith níos lú ná %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Luasanna athsheinm saincheaptha neamhbhailí</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Uathoibríoch</string>
|
||||
<string name="revanced_speed_tap_and_hold_title">Luas tap is agus greim</string>
|
||||
<string name="revanced_speed_tap_and_hold_title">Luas saincheaptha tapála agus coinnigh</string>
|
||||
<string name="revanced_speed_tap_and_hold_summary">Luas athsheinm eatarthu 0-8</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1577,12 +1592,12 @@ Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil"</string>
|
||||
<string name="revanced_remember_playback_speed_toast">Athraigh luas réamhshocraithe go: %s</string>
|
||||
</patch>
|
||||
<patch id="video.codecs.disableVideoCodecsPatch">
|
||||
<string name="revanced_disable_hdr_video_title"><p style="margin-left: 60px;">Díchumasú físeán HDR</p></string>
|
||||
<string name="revanced_disable_hdr_video_summary_on"><p style="margin-left: 60px;">Tá físeán HDR díchumasaithe</p></string>
|
||||
<string name="revanced_disable_hdr_video_summary_off"><p style="margin-left: 60px;">Tá físeán HDR arna chumhachtú</p></string>
|
||||
<string name="revanced_disable_hdr_video_title">Díchumasaigh físeán HDR</string>
|
||||
<string name="revanced_disable_hdr_video_summary_on">Tá físeán HDR díchumasaithe</string>
|
||||
<string name="revanced_disable_hdr_video_summary_off">Tá físeán HDR cumasaithe</string>
|
||||
<string name="revanced_force_avc_codec_title">Fórsa AVC (H.264)</string>
|
||||
<string name="revanced_force_avc_codec_summary_on">Éigeantar an códóir físeáin go AVC (H.264)</string>
|
||||
<string name="revanced_force_avc_codec_summary_off">Cinntear an códóir físeáin go huathoibríoch</string>
|
||||
<string name="revanced_force_avc_codec_summary_off">Cinntear an cóideac físe go huathoibríoch</string>
|
||||
<string name="revanced_force_avc_codec_user_dialog_message">"Sochair:
|
||||
• Féadfaidh sé saolré na ceallraí a fheabhsú
|
||||
• Féadfaidh sé réitigh físeáin atá in easnamh a chur ar ais ar ghléasanna níos sine
|
||||
@@ -1604,25 +1619,35 @@ Teorainneacha:
|
||||
<string name="revanced_slide_to_seek_summary_off">Níl sleamhnán le lorg cumasaithe</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_about_title">Fo-iarsmaí bréagaíochta</string>
|
||||
<string name="revanced_spoof_video_streams_av1_title">Ceadaigh Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Is é an códac físeáin AVC (H.264), VP9, nó AV1
|
||||
|
||||
D'fhéadfadh go mbeadh fadhbanna le hathsheinm nó go gcaillfí frámaí"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Is é an códac físeáin AVC (H.264) nó VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"D’fhéadfadh sé go n-úsáidfí díchódú bogearraí AV1 agus an socrú seo á chumasú.
|
||||
|
||||
D’fhéadfadh sé go mbeadh stad nó go gcaillfí frámaí ag athsheinm físe le AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Fo-éifeachtaí a fhalsúa</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Cliant turgnamhach é seo agus féadfaidh sé stop a chur ag obair ag am ar bith</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Is féidir go stopfaidh an físeán ag 1:00, nó b\'fhéidir nach mbeidh sé ar fáil i réigiúin áirithe</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_audio_tracks">• Tá an roghchlár rian fuaime in easnamh</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• Níl aon chóidéir físe AV1</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• Níl aon cóideac físe AV1</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_stable_volume">• Níl toirt chobhsaí ar fáil</string>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• Videos faoi phaistí uaireanta nach imreoidh nuair a bhíonn tú logáilte amach nó i mod incognito</string>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• Seans nach seinnfear físeáin do pháistí nuair a bhíonn siad logáilte amach nó i mód go hanaithnid</string>
|
||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_about_no_force_original_audio">• Níl Éigean fuaime bunaidh ar fáil</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_force_original_audio">• Níl an fuaim bhunaidh iallach ar fáil</string>
|
||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Taispeáin i Staitisticí do nerds</string>
|
||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Taispeántar cineál an chliaint i Staitisticí do nerds</string>
|
||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Tá an cliant curtha i bhfolach i Staitisticí do nerds</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">Teanga an tsrutha fuaime</string>
|
||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
||||
<string name="revanced_spoof_video_streams_language_not_available">Chun teanga fuaime shonrach a roghnú, múch \'Cuir iallach ar bhunteanga fuaime\'</string>
|
||||
<string name="revanced_spoof_video_streams_language_not_available">Chun teanga fuaime ar leith a roghnú, múch \'Fórsaigh teanga fuaime bhunaidh\'</string>
|
||||
<string name="revanced_spoof_video_streams_language_android_studio">Níl roghnú theanga an tsrutha ar fáil le Android Studio</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Maidir</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Fógraí</string>
|
||||
@@ -1637,13 +1662,13 @@ Teorainneacha:
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
<string name="revanced_music_play_permanent_repeat_title">Cumasaigh athdhéanamh buan</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">Tá athdhéanamh buan cumasaithe</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">Tá athdhéanamh buan díchumasaithe</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">Tá athrá buan cumasaithe</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">Tá athrá buan díchumasaithe</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<string name="revanced_music_hide_cast_button_title">Folaigh an cnaipe teilgthe</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Tá an cnaipe teilgthe i bhfolach</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Tá an cnaipe teilgthe ar taispeáint</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Taispeántar an cnaipe teilgthe</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Folaigh an barra catagóirí</string>
|
||||
@@ -1656,29 +1681,29 @@ Teorainneacha:
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_title">Folaigh Baile</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_on">Tá cnaipe Baile folaithe</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_off">Tá cnaipe Baile taispeánta</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_off">Taispeántar an cnaipe baile</string>
|
||||
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_title">Folaigh Samplaí</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_on">Tá cnaipe Samplaí folaithe</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_off">Tá cnaipe Samplaí taispeánta</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_on">Tá cnaipe na samplaí i bhfolach</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_off">Taispeántar cnaipe na samplaí</string>
|
||||
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_title">Folaigh Scrúdaigh</string>
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_summary_on">Tá cnaipe Fionnachtana folaithe</string>
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_summary_off">Tá cnaipe Fionnachtana taispeánta</string>
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_title">Folaigh Iniúchadh</string>
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_summary_on">Tá an cnaipe iniúchadh i bhfolach</string>
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_summary_off">Taispeántar an cnaipe iniúchadh</string>
|
||||
<!-- 'Library' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_library_button_title">Folaigh Leabharlann</string>
|
||||
<string name="revanced_music_hide_navigation_bar_library_button_summary_on">Tá cnaipe Leabharlann folaithe</string>
|
||||
<string name="revanced_music_hide_navigation_bar_library_button_summary_off">Tá cnaipe Leabharlann taispeánta</string>
|
||||
<string name="revanced_music_hide_navigation_bar_library_button_summary_on">Tá cnaipe na leabharlainne i bhfolach</string>
|
||||
<string name="revanced_music_hide_navigation_bar_library_button_summary_off">Taispeántar cnaipe na leabharlainne</string>
|
||||
<!-- 'Upgrade' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_upgrade_button_title">Folaigh Uasghrádaigh</string>
|
||||
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_on">Tá cnaipe Uasghrádú folaithe</string>
|
||||
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_off">Tá cnaipe Uasghrádú taispeánta</string>
|
||||
<string name="revanced_music_hide_navigation_bar_upgrade_button_title">Folaigh an tUasghrádú</string>
|
||||
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_on">Tá an cnaipe uasghrádaithe i bhfolach</string>
|
||||
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_off">Taispeántar an cnaipe uasghrádaithe</string>
|
||||
<string name="revanced_music_hide_navigation_bar_title">Folaigh barra nascleanúna</string>
|
||||
<string name="revanced_music_hide_navigation_bar_summary_on">Tá barra nascleanúna folaithe</string>
|
||||
<string name="revanced_music_hide_navigation_bar_summary_off">Tá barra nascleanúna taispeánta</string>
|
||||
<string name="revanced_music_hide_navigation_bar_summary_on">Tá an barra nascleanúna i bhfolach</string>
|
||||
<string name="revanced_music_hide_navigation_bar_summary_off">Taispeántar barra nascleanúna</string>
|
||||
<string name="revanced_music_hide_navigation_bar_labels_title">Folaigh lipéid cnaipí nascleanúna</string>
|
||||
<string name="revanced_music_hide_navigation_bar_labels_summary_on">Tá lipéid folaithe</string>
|
||||
<string name="revanced_music_hide_navigation_bar_labels_summary_off">Tá lipéid taispeánta</string>
|
||||
<string name="revanced_music_hide_navigation_bar_labels_summary_on">Tá lipéid i bhfolach</string>
|
||||
<string name="revanced_music_hide_navigation_bar_labels_summary_off">Taispeántar lipéid</string>
|
||||
</patch>
|
||||
<patch id="layout.premium.hideGetPremiumPatch">
|
||||
<string name="revanced_music_hide_get_premium_label_title">Folaigh an lipéad \'Faigh Music Premium\'</string>
|
||||
@@ -1695,7 +1720,7 @@ Teorainneacha:
|
||||
<patch id="ad.audio.audioAdsPatch">
|
||||
<string name="revanced_block_audio_ads_title">Cuir bac ar fógraí fuaime</string>
|
||||
<string name="revanced_block_audio_ads_summary_on">Cuirtear bac ar fhógraí fuaime</string>
|
||||
<string name="revanced_block_audio_ads_summary_off">Déantar fógraí fuaime díbhocáilte</string>
|
||||
<string name="revanced_block_audio_ads_summary_off">Tá fógraí fuaime díbhlocáilte</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s neamh-infheidhme, d\'fhéadfadh go dtaispeánfadh fógraí. Bain triail as seirbhís blocála fógraí a athrú sna socruithe.</string>
|
||||
@@ -1714,11 +1739,11 @@ Teorainneacha:
|
||||
<string name="revanced_deleted_msg">Teachtaireacht scriosta</string>
|
||||
<string name="revanced_show_deleted_messages_title">Taispeáin teachtaireachtaí scriosta</string>
|
||||
<string name="revanced_show_deleted_messages_entry_1">Ná taispeáin teachtaireachtaí scriosta</string>
|
||||
<string name="revanced_show_deleted_messages_entry_2">Folaigh teachtaireachtaí scriosta taobh thiar de spoiler</string>
|
||||
<string name="revanced_show_deleted_messages_entry_3">Taispeáin teachtaireachtaí scriosta mar théacs trasnaithe</string>
|
||||
<string name="revanced_show_deleted_messages_entry_2">Folaigh teachtaireachtaí scriosta taobh thiar a fhalsúa</string>
|
||||
<string name="revanced_show_deleted_messages_entry_3">Taispeáin teachtaireachtaí scriosta mar théacs trasnaithe amach</string>
|
||||
</patch>
|
||||
<patch id="chat.autoclaim.autoClaimChannelPointsPatch">
|
||||
<string name="revanced_auto_claim_channel_points_title">Tóg Pointí Cainte go huathoibríoch</string>
|
||||
<string name="revanced_auto_claim_channel_points_title">Éiligh Pointí Cainéil go huathoibríoch</string>
|
||||
<string name="revanced_auto_claim_channel_points_summary_on">Éilítear Pointí Cainéal go huathoibríoch</string>
|
||||
<string name="revanced_auto_claim_channel_points_summary_off">Ní éilítear Pointí Cainéal go huathoibríoch</string>
|
||||
</patch>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
@@ -203,8 +209,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -253,6 +261,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
@@ -203,8 +209,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -253,6 +261,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
@@ -205,8 +211,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -255,6 +263,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Provjere nisu uspjele</string>
|
||||
</patch>
|
||||
@@ -204,8 +210,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -254,6 +262,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Alkalmazás neve</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Egyéni</string>
|
||||
<string name="revanced_custom_branding_icon_title">Alkalmazás ikonja</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Eredeti</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced minimális</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced méretezett</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Egyéni</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Az ellenőrzések sikertelenek</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Hivatalos weboldal megnyitása</string>
|
||||
@@ -1407,11 +1420,13 @@ A miniatűr képernyőt a képernyő bal vagy jobb szélére húzhatja"</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">A keresősáv kiemelõ színe</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Érvénytelen keresősáv színértéke</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Fejléc logó</string>
|
||||
<string name="revanced_header_logo_entry_1">Alapértelmezett</string>
|
||||
<string name="revanced_header_logo_entry_2">Normál</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced minimál</string>
|
||||
<string name="revanced_header_logo_entry_6">Egyéni</string>
|
||||
</patch>
|
||||
@@ -1601,6 +1616,14 @@ Korlátozások:
|
||||
<string name="revanced_slide_to_seek_summary_off">A csúsztatás a kereséshez nincs engedélyezve</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Android VR AV1 engedélyezése</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"A videó kodek AVC (H.264), VP9 vagy AV1
|
||||
|
||||
A lejátszás akadozhat vagy képkockákat ejthet"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">A videokodek AVC (H.264) vagy VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Ennek a beállításnak az engedélyezése szoftveres AV1 dekódolást használhat.
|
||||
|
||||
Az AV1-es videólejátszás akadozhat vagy képkockákat ejthet."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Hamisítás mellékhatásai</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Kísérleti kliens, és bármikor leállhat</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• A videó megállhat 1:00-nál, vagy előfordulhat, hogy egyes régiókban nem elérhető</string>
|
||||
@@ -1620,6 +1643,8 @@ Korlátozások:
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Névjegy</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Hirdetések</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Հավելվածի անվանումը</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Մաքսային</string>
|
||||
<string name="revanced_custom_branding_icon_title">Հավելվածի պատկերակը</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Բնօրինակ</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced մինիմալ</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced սանդղակավորված</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Անհատականացված</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Վերահսկումները ձախողվել են</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Բացել պաշտոնական կայքը</string>
|
||||
@@ -1411,11 +1424,13 @@ Mini-player-ը կարող է գրավվել էկրանից դուրս՝ դեպի
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Մարզումից դուրս ողորկության նշման գույնը</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Սխալ seekbar-ի գույնի արժեք</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Գլխագրի լոգո</string>
|
||||
<string name="revanced_header_logo_entry_1">Լռակյաց</string>
|
||||
<string name="revanced_header_logo_entry_2">Սովորական</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced մինիմալ</string>
|
||||
<string name="revanced_header_logo_entry_6">Անհատական</string>
|
||||
</patch>
|
||||
@@ -1605,6 +1620,14 @@ Mini-player-ը կարող է գրավվել էկրանից դուրս՝ դեպի
|
||||
<string name="revanced_slide_to_seek_summary_off">Սահելը համար ընտրելը անջատված է</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Թույլատրել Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Տեսակոդեկը AVC (H.264), VP9 կամ AV1 է
|
||||
|
||||
Նվագարկումը կարող է կանգ առնել կամ կորցնել կադրեր"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Տեսակոդեկը AVC (H.264) կամ VP9 է</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Այս կարգավորումը միացնելը կարող է օգտագործել AV1 ծրագրային ապակոդավորում:
|
||||
|
||||
AV1-ով տեսանյութի նվագարկումը կարող է ընդհատվել կամ կորցնել կադրեր:"</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Կեղծելու կողմնակի ազդեցություններ</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Փորձնական հաճախորդ է և կարող է ցանկացած պահի դադարել աշխատել</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Տեսանյութը կարող է դադարել 1:00-ին կամ հասանելի չլինել որոշ տարածաշրջաններում</string>
|
||||
@@ -1624,6 +1647,8 @@ Mini-player-ը կարող է գրավվել էկրանից դուրս՝ դեպի
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Մասին</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Գովազդներ</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,20 +21,32 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Nama aplikasi</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Khusus</string>
|
||||
<string name="revanced_custom_branding_icon_title">Ikon aplikasi</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Asli</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced minimal</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced berskala</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Khusus</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Pemeriksaan gagal</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Buka situs resminya</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Buka situs resmi</string>
|
||||
<string name="revanced_check_environment_dialog_ignore_button">Abaikan</string>
|
||||
<string name="revanced_check_environment_failed_message"><h5>Aplikasi ini tampaknya tidak dipatch oleh Anda.</h5><br>Aplikasi ini mungkin tidak berfungsi dengan baik, <b>bisa berbahaya atau bahkan membahayakan untuk digunakan</b>.<br><br>Pemeriksaan ini berarti bahwa aplikasi ini telah dipatch sebelumnya atau diperoleh dari orang lain:<br><br><small>%1$s</small><br>Sangat disarankan untuk <b>mencopot pemasangan aplikasi ini dan mempatchnya sendiri</b> guna memastikan Anda menggunakan aplikasi yang tervalidasi dan aman.<p><br>Jika diabaikan, peringatan ini hanya akan ditampilkan dua kali.</string>
|
||||
<string name="revanced_check_environment_not_same_patching_device">Dipatch pada perangkat yang berbeda</string>
|
||||
<string name="revanced_check_environment_manager_not_expected_installer">Tidak dipasang oleh ReVanced Manager</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time">Dipatch lebih dari 10 menit yang lalu</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_days">Dipatch %s hari yang lalu</string>
|
||||
<string name="revanced_check_environment_failed_message"><h5>Aplikasi ini tampaknya tidak ditambal oleh Anda.</h5><br>Aplikasi ini mungkin tidak bisa berfungsi dengan baik, <b>bisa berbahaya atau bahkan membahayakan untuk digunakan</b>.<br><br>Pemeriksaan ini berarti bahwa aplikasi ini telah ditambal sebelumnya atau diperoleh dari orang lain:<br><br><small>%1$s</small><br>Sangat disarankan untuk <b>mencopot pemasangan aplikasi ini dan menambalnya sendiri</b> guna memastikan Anda menggunakan aplikasi yang tervalidasi dan aman.<p><br>Jika diabaikan, peringatan ini hanya akan ditampilkan dua kali.</string>
|
||||
<string name="revanced_check_environment_not_same_patching_device">Ditambal pada perangkat yang berbeda</string>
|
||||
<string name="revanced_check_environment_manager_not_expected_installer">Tidak terpasang oleh ReVanced Manager</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time">Ditambal lebih dari 10 menit yang lalu</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_days">Ditambal %s hari yang lalu</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">Tanggal pembuatan APK rusak</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Peringatan </string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Riwayat tontonan Anda tidak disimpan.<br><br>Hal ini kemungkinan besar disebabkan oleh pemblokir iklan DNS atau proksi jaringan.<br><br>Untuk memperbaikinya, masukkan daftar putih <b>s.youtube.com</b> atau matikan semua pemblokir DNS dan proksi.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Riwayat tontonan Anda tidak sedang disimpan.<br><br>Hal ini kemungkinan besar disebabkan oleh pemblokir iklan DNS atau proksi jaringan.<br><br>Untuk memperbaikinya, masukkan daftar putih <b>s.youtube.com</b> atau matikan semua pemblokir DNS dan proksi.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Jangan tampilkan lagi</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
@@ -48,7 +61,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_import">Impor</string>
|
||||
<string name="revanced_settings_import_copy">Salin</string>
|
||||
<string name="revanced_settings_import_reset">Pengaturan ReVanced diatur ke bawaan</string>
|
||||
<string name="revanced_settings_import_success">Mengimpor setelan %d</string>
|
||||
<string name="revanced_settings_import_success">Setelan %d terimpor</string>
|
||||
<string name="revanced_settings_import_failure_parse">Impor gagal: %s</string>
|
||||
<string name="revanced_settings_search_hint">Pengaturan pencarian</string>
|
||||
<string name="revanced_settings_search_no_results_title">Tidak ada hasil yang ditemukan untuk \'%s\'</string>
|
||||
@@ -62,12 +75,12 @@ Second \"item\" text"</string>
|
||||
• Tekan lama pada pengaturan untuk menelusuri ke jalur tersebut
|
||||
• Tekan Enter untuk menyimpan kueri pencarian ke riwayat
|
||||
• Pencarian mengabaikan huruf besar/kecil dan tanda baca
|
||||
• Pengaturan orang tua muncul di atas pengaturan anak yang dinonaktifkan"</string>
|
||||
• Pengaturan utama muncul di atas pengaturan sampingan yang dinonaktifkan"</string>
|
||||
<string name="revanced_settings_search_empty_history_title">Riwayat pencarian kosong</string>
|
||||
<string name="revanced_settings_search_empty_history_summary">Untuk menyimpan riwayat pencarian, ketik kueri pencarian dan tekan Enter</string>
|
||||
<string name="revanced_settings_search_history_title">Tampilkan pengaturan riwayat pencarian</string>
|
||||
<string name="revanced_settings_search_history_summary_on">Pengaturan riwayat pencarian ditampilkan</string>
|
||||
<string name="revanced_settings_search_history_summary_off">Pengaturan riwayat pencarian tidak ditampilkan</string>
|
||||
<string name="revanced_settings_search_history_title">Tampilkan riwayat pencarian setelan</string>
|
||||
<string name="revanced_settings_search_history_summary_on">Riwayat pencarian setelan ditampilkan</string>
|
||||
<string name="revanced_settings_search_history_summary_off">Riwayat pencarian setelan tidak ditampilkan</string>
|
||||
<string name="revanced_show_menu_icons_title">Tampilkan ikon pengaturan ReVanced</string>
|
||||
<string name="revanced_show_menu_icons_summary_on">Ikon pengaturan ditampilkan</string>
|
||||
<string name="revanced_show_menu_icons_summary_off">Ikon pengaturan tidak ditampilkan</string>
|
||||
@@ -1409,11 +1422,13 @@ Miniplayer dapat diseret keluar layar ke kiri atau kanan"</string>
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Warna aksen seekbar</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Nilai warna seekbar tidak sah</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Logo Header</string>
|
||||
<string name="revanced_header_logo_entry_1">Bawaan</string>
|
||||
<string name="revanced_header_logo_entry_2">Reguler</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced minimal</string>
|
||||
<string name="revanced_header_logo_entry_6">Khusus</string>
|
||||
</patch>
|
||||
@@ -1603,10 +1618,18 @@ Batasan:
|
||||
<string name="revanced_slide_to_seek_summary_off">Geser untuk mencari tidak diaktifkan</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Izinkan Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Codec video adalah AVC (H.264), VP9, atau AV1
|
||||
|
||||
Pemutaran mungkin tersendat atau kehilangan bingkai"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Codec video adalah AVC (H.264) atau VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Mengaktifkan pengaturan ini mungkin menggunakan perangkat lunak decoding AV1.
|
||||
|
||||
Pemutaran video dengan AV1 mungkin tersendat atau kehilangan bingkai."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Efek samping pemalsuan</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Klien eksperimental dan dapat berhenti berfungsi kapan saja</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Video mungkin berhenti pada 1:00, atau mungkin tidak tersedia di beberapa wilayah</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_audio_tracks">• Menu trek audio tidak ada</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_audio_tracks">• Menu trek audio hilang</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_av1">• Tidak ada codec video AV1</string>
|
||||
<string name="revanced_spoof_video_streams_about_no_stable_volume">• Volume stabil tidak tersedia</string>
|
||||
<string name="revanced_spoof_video_streams_about_kids_videos">• Video anak-anak mungkin tidak dapat diputar saat keluar atau dalam mode penyamaran</string>
|
||||
@@ -1622,6 +1645,8 @@ Batasan:
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Tentang</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Iklan</string>
|
||||
@@ -1657,9 +1682,9 @@ Batasan:
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_on">Tombol Beranda disembunyikan</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_off">Tombol Beranda ditampilkan</string>
|
||||
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_title">Sembunyikan Cuplikan</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_on">Tombol Cuplikan disembunyikan</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_off">Tombol Cuplikan ditampilkan</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_title">Sembunyikan Sampel</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_on">Tombol Sampel disembunyikan</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_off">Tombol Sampel ditampilkan</string>
|
||||
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_title">Sembunyikan Jelajahi</string>
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_summary_on">Tombol Jelajahi disembunyikan</string>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,11 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
@@ -203,8 +209,10 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
</patch>
|
||||
@@ -253,6 +261,8 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -20,6 +21,18 @@ Second \"item\" text"</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="layout.branding.baseCustomBrandingPatch">
|
||||
<string name="revanced_custom_branding_name_title">Nome dell\'app</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_icon_entry_5 -->
|
||||
<string name="revanced_custom_branding_name_entry_5">Personalizzato</string>
|
||||
<string name="revanced_custom_branding_icon_title">Icona dell\'app</string>
|
||||
<string name="revanced_custom_branding_icon_entry_1">Originale</string>
|
||||
<!-- Translation of this should be identical to revanced_header_logo_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_3">ReVanced minimale</string>
|
||||
<string name="revanced_custom_branding_icon_entry_4">ReVanced ridimensionato</string>
|
||||
<!-- Translations of this should be identical to revanced_custom_branding_name_entry_5 -->
|
||||
<string name="revanced_custom_branding_icon_entry_5">Personalizzato</string>
|
||||
</patch>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Controlli non riusciti</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Apri sito ufficiale</string>
|
||||
@@ -27,13 +40,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_failed_message"><h5>Quest\'app non sembra essere stata patchata da te.</h5><br>Quest\'app potrebbe non funzionare correttamente, <b>potrebbe essere dannosa o addirittura pericolosa</b>.<br><br>Questi controlli implicano che quest\'app sia pre-patchata o ottenuta da qualcun altro:<br><br><small>%1$s</small><br>Si consiglia vivamente di <b>disinstallare quest\'app</b> per assicurarsi di utilizzare un\'app valida e sicura.<p><br>Se ignorato, questo avviso verrà visualizzato solo due volte.</string>
|
||||
<string name="revanced_check_environment_not_same_patching_device">Patchato su un altro dispositivo</string>
|
||||
<string name="revanced_check_environment_manager_not_expected_installer">Non installato da ReVanced Manager</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time">Patchato da più di 10 minuti fa</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time">Patchato più di 10 minuti fa</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_days">Patchato %s giorni fa</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">La data di compilazione dell\'APK è corrotta</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Attenzione</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">La tua cronologia di visualizzazione non è stata salvata.<br><br>Questo è molto probabilmente dovuto da un blocco annunci DNS o da un proxy di rete.<br><br>Per risolvere questo problema, inserisci nella whitelist <b>s.youtube.com</b> o disattiva tutti i DNS bloccanti e proxy.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">La tua cronologia di visualizzazione non sta venendo salvata.<br><br>Questo è molto probabilmente causato da un blocco annunci DNS o da un proxy di rete.<br><br>Per risolvere, inserisci nella whitelist <b>s.youtube.com</b> o disattiva tutti i blocchi DNS e proxy.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Non mostrare più</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
@@ -1409,11 +1422,13 @@ Il riproduttore minimizzato può essere trascinato fuori dallo schermo a sinistr
|
||||
<string name="revanced_seekbar_custom_color_accent_summary">Il colore primario della barra di avanzamento</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Valore colore barra di avanzamento non valido</string>
|
||||
</patch>
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="layout.branding.changeHeaderPatch">
|
||||
<string name="revanced_header_logo_title">Logo dell\'intestazione</string>
|
||||
<string name="revanced_header_logo_entry_1">Predefinito</string>
|
||||
<string name="revanced_header_logo_entry_2">Regolare</string>
|
||||
<!-- For this situation "Minimal" means minimalistic. It does not mean small or tiny. -->
|
||||
<!-- Translation of this should be identical to revanced_custom_branding_icon_entry_3 -->
|
||||
<string name="revanced_header_logo_entry_5">ReVanced minimale</string>
|
||||
<string name="revanced_header_logo_entry_6">Personalizzato</string>
|
||||
</patch>
|
||||
@@ -1603,6 +1618,14 @@ Limitazioni:
|
||||
<string name="revanced_slide_to_seek_summary_off">Scorri per avanzare non è abilitato</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_av1_title">Consenti Android VR AV1</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_on">"Il codec video è AVC (H.264), VP9 o AV1
|
||||
|
||||
La riproduzione potrebbe subire interruzioni o perdere fotogrammi"</string>
|
||||
<string name="revanced_spoof_video_streams_av1_summary_off">Il codec video è AVC (H.264) o VP9</string>
|
||||
<string name="revanced_spoof_video_streams_av1_user_dialog_message">"Abilitando questa impostazione potrebbe essere utilizzata la decodifica AV1 via software.
|
||||
|
||||
La riproduzione video con AV1 potrebbe rallentare o perdere fotogrammi."</string>
|
||||
<string name="revanced_spoof_video_streams_about_title">Effetti collaterali della falsificazione</string>
|
||||
<string name="revanced_spoof_video_streams_about_experimental">• Client sperimentale e potrebbe smettere di funzionare in qualsiasi momento</string>
|
||||
<string name="revanced_spoof_video_streams_about_playback_failure">• Il video potrebbe interrompersi all\'1:00, o potrebbe non essere disponibile in alcune regioni</string>
|
||||
@@ -1622,6 +1645,8 @@ Limitazioni:
|
||||
</patch>
|
||||
</app>
|
||||
<app id="music">
|
||||
<patch id="layout.branding.customBrandingPatch">
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_music_screen_0_about_title">Informazioni</string>
|
||||
<string name="revanced_settings_music_screen_1_ads_title">Annunci</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user