mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-07 09:53:55 +01:00
Compare commits
81 Commits
v5.2.2-dev
...
v5.5.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c81d01cc8 | ||
|
|
59654788fc | ||
|
|
4c44982cde | ||
|
|
a7aab9aeca | ||
|
|
7a8486f562 | ||
|
|
ccb6a7f161 | ||
|
|
c792edfb77 | ||
|
|
339cd6cc70 | ||
|
|
68304fd96a | ||
|
|
4033048c9b | ||
|
|
9525137800 | ||
|
|
0cf05fa2b0 | ||
|
|
a9bfaf44e2 | ||
|
|
7b08051371 | ||
|
|
b217ca9f9d | ||
|
|
9482092579 | ||
|
|
134c2e52bd | ||
|
|
c348b10a35 | ||
|
|
9a9ec7ef18 | ||
|
|
e746507339 | ||
|
|
862ca077db | ||
|
|
138d43b34b | ||
|
|
8d06a4a8ad | ||
|
|
d7ca7c1733 | ||
|
|
8e0b7db82a | ||
|
|
b9d7867cee | ||
|
|
11216cd942 | ||
|
|
b163e5f64d | ||
|
|
5c2bbd0671 | ||
|
|
2062660d60 | ||
|
|
2d9f08a08e | ||
|
|
78c51182f2 | ||
|
|
feac2ab439 | ||
|
|
32be03c28d | ||
|
|
6a345eee37 | ||
|
|
61be7731e3 | ||
|
|
8295356f88 | ||
|
|
3ec25778eb | ||
|
|
3faf0ac160 | ||
|
|
3ff559878b | ||
|
|
ed9c78da1e | ||
|
|
eefb59020e | ||
|
|
18f18849f3 | ||
|
|
b172c38284 | ||
|
|
5b15602896 | ||
|
|
89c45afcc6 | ||
|
|
3c47bfff1a | ||
|
|
6af8e1b625 | ||
|
|
c44a4af406 | ||
|
|
cb857b0fce | ||
|
|
e0322afbf0 | ||
|
|
5f02f583be | ||
|
|
6462fb8cba | ||
|
|
f9dcce927e | ||
|
|
69f9ab8345 | ||
|
|
dd400ac2a0 | ||
|
|
538ed6d876 | ||
|
|
5ff94dc34a | ||
|
|
b04a11a885 | ||
|
|
4983e021f9 | ||
|
|
bee917f4ed | ||
|
|
c94376bc4c | ||
|
|
87fe83aacf | ||
|
|
92d282e963 | ||
|
|
4a88f650c2 | ||
|
|
8b67716506 | ||
|
|
95d56b1529 | ||
|
|
b1f3b12fa1 | ||
|
|
cf4456c2ba | ||
|
|
d509a3f397 | ||
|
|
d1ae1f1da7 | ||
|
|
9c1c90864c | ||
|
|
5ae76f4df8 | ||
|
|
87eaf61ef1 | ||
|
|
35594d0a20 | ||
|
|
e3c54d8a64 | ||
|
|
06202c8807 | ||
|
|
53efe10222 | ||
|
|
decd3fcb47 | ||
|
|
c7692d7561 | ||
|
|
73c7c8c93a |
8
.github/workflows/build_pull_request.yml
vendored
8
.github/workflows/build_pull_request.yml
vendored
@@ -28,4 +28,10 @@ jobs:
|
||||
- name: Build
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: ./gradlew build --no-daemon
|
||||
run: ./gradlew :patches:buildAndroid --no-daemon
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: revanced-patches
|
||||
path: patches/build/libs
|
||||
|
||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
||||
- name: Build
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: ./gradlew build clean
|
||||
run: ./gradlew :patches:buildAndroid clean
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
|
||||
258
CHANGELOG.md
258
CHANGELOG.md
@@ -1,3 +1,261 @@
|
||||
# [5.5.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.3...v5.5.0-dev.4) (2024-12-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Make livestreams start at the current time when using iOS client ([#4137](https://github.com/ReVanced/revanced-patches/issues/4137)) ([140f484](https://github.com/ReVanced/revanced-patches/commit/140f484b4b251b0dfa94163a63f61f45f5302052))
|
||||
|
||||
# [5.5.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.2...v5.5.0-dev.3) (2024-12-16)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Hide feed components:** Remove obsolete `Hide search result shelf header` option ([#4134](https://github.com/ReVanced/revanced-patches/issues/4134)) ([c71443a](https://github.com/ReVanced/revanced-patches/commit/c71443a08883ab10ef2553213c03b00e7c580a43))
|
||||
|
||||
# [5.5.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.1...v5.5.0-dev.2) (2024-12-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube Music:** Add `Spoof client patch` to fix playback ([#4132](https://github.com/ReVanced/revanced-patches/issues/4132)) ([b092508](https://github.com/ReVanced/revanced-patches/commit/b0925088e8b41636e285cb234593d545604ce461))
|
||||
|
||||
# [5.5.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.4.1-dev.1...v5.5.0-dev.1) (2024-12-15)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube:** Add `Force original audio` patch ([#4122](https://github.com/ReVanced/revanced-patches/issues/4122)) ([f4aa440](https://github.com/ReVanced/revanced-patches/commit/f4aa4406080b91f01d623e54b11b99ea849ddcdf))
|
||||
|
||||
## [5.4.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.4.0...v5.4.1-dev.1) (2024-12-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Twitch:** Change recommended target to the latest app version ([fb32972](https://github.com/ReVanced/revanced-patches/commit/fb32972f4de92dac1fc5d73f56a392a671c4e94b))
|
||||
|
||||
# [5.4.0](https://github.com/ReVanced/revanced-patches/compare/v5.3.0...v5.4.0) (2024-12-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **GmsCore support:** Adjust presentation of battery optimization dialog ([#4091](https://github.com/ReVanced/revanced-patches/issues/4091)) ([5d8fc1b](https://github.com/ReVanced/revanced-patches/commit/5d8fc1bcd4e453298cfac086cdbdf279612bfb63))
|
||||
* **TikTok - Settings:** Use correct colors for dark mode ([#4087](https://github.com/ReVanced/revanced-patches/issues/4087)) ([6bd22ff](https://github.com/ReVanced/revanced-patches/commit/6bd22ffa7e8af4d8f5d2d3b1711bd92c44b4e4aa))
|
||||
* **TikTok - SIM Spoof:** Change patch to default off to fix login ([#4084](https://github.com/ReVanced/revanced-patches/issues/4084)) ([f4659a3](https://github.com/ReVanced/revanced-patches/commit/f4659a328eaf600e1e5f02a66fa2af4b6d8dc7c1))
|
||||
* **YouTube - Hide ads:** Hide new type of featured promotions ([#4113](https://github.com/ReVanced/revanced-patches/issues/4113)) ([13c7592](https://github.com/ReVanced/revanced-patches/commit/13c7592b21defd27e3a7aa9b219ffc0247bb5914))
|
||||
* **YouTube - Spoof video streams:** Fix error toast that is sometimes shown ([#4090](https://github.com/ReVanced/revanced-patches/issues/4090)) ([4c46cb2](https://github.com/ReVanced/revanced-patches/commit/4c46cb27a02c6f29626cd769b6a8e825645d5b16))
|
||||
* **YouTube - Spoof video streams:** Resolve playback of age restricted videos ([#4096](https://github.com/ReVanced/revanced-patches/issues/4096)) ([839a404](https://github.com/ReVanced/revanced-patches/commit/839a4045f1bb1759d89047834e0b7695781e82a3))
|
||||
* **YouTube Music - Bypass certificate checks:** Add a recommended target version ([#4104](https://github.com/ReVanced/revanced-patches/issues/4104)) ([17a5a6c](https://github.com/ReVanced/revanced-patches/commit/17a5a6c1691b0c23f601d3355b72f122c2bd5dcb))
|
||||
* **YouTube Music - Spoof video streams:** Disable stable volume ([#4097](https://github.com/ReVanced/revanced-patches/issues/4097)) ([16bb9df](https://github.com/ReVanced/revanced-patches/commit/16bb9dfc299612f3922724c136878606987ab132))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Add Internal data documents provider patch ([#3830](https://github.com/ReVanced/revanced-patches/issues/3830)) ([cb22f65](https://github.com/ReVanced/revanced-patches/commit/cb22f652ed678d81ffda9ece659b3971225d6931))
|
||||
* **Change package name:** Add options to change provider and permission package names to handle installation conflicts ([75c740c](https://github.com/ReVanced/revanced-patches/commit/75c740c6ba2e0c62e567f7dc90cdad368fc4f372))
|
||||
* **Twitch:** Make patches compatible with latest versions ([#4099](https://github.com/ReVanced/revanced-patches/issues/4099)) ([eecfbb7](https://github.com/ReVanced/revanced-patches/commit/eecfbb7122a9072e55e687f2c003f63108654888))
|
||||
* **YouTube - Comments:** Add `Hide 'Chat summary'` ([#4110](https://github.com/ReVanced/revanced-patches/issues/4110)) ([269493c](https://github.com/ReVanced/revanced-patches/commit/269493cd198604f1438ea2850fb68fe900d0e56f))
|
||||
|
||||
# [5.4.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.10...v5.4.0-dev.11) (2024-12-14)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Twitch:** Make patches compatible with latest versions ([#4099](https://github.com/ReVanced/revanced-patches/issues/4099)) ([eecfbb7](https://github.com/ReVanced/revanced-patches/commit/eecfbb7122a9072e55e687f2c003f63108654888))
|
||||
|
||||
# [5.4.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.9...v5.4.0-dev.10) (2024-12-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide ads:** Hide new type of featured promotions ([#4113](https://github.com/ReVanced/revanced-patches/issues/4113)) ([13c7592](https://github.com/ReVanced/revanced-patches/commit/13c7592b21defd27e3a7aa9b219ffc0247bb5914))
|
||||
|
||||
# [5.4.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.8...v5.4.0-dev.9) (2024-12-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Comments:** Add `Hide 'Chat summary'` ([#4110](https://github.com/ReVanced/revanced-patches/issues/4110)) ([269493c](https://github.com/ReVanced/revanced-patches/commit/269493cd198604f1438ea2850fb68fe900d0e56f))
|
||||
|
||||
# [5.4.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.7...v5.4.0-dev.8) (2024-12-11)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube Music - Bypass certificate checks:** Add a recommended target version ([#4104](https://github.com/ReVanced/revanced-patches/issues/4104)) ([17a5a6c](https://github.com/ReVanced/revanced-patches/commit/17a5a6c1691b0c23f601d3355b72f122c2bd5dcb))
|
||||
|
||||
# [5.4.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.6...v5.4.0-dev.7) (2024-12-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **GmsCore support:** Adjust presentation of battery optimization dialog ([#4091](https://github.com/ReVanced/revanced-patches/issues/4091)) ([5d8fc1b](https://github.com/ReVanced/revanced-patches/commit/5d8fc1bcd4e453298cfac086cdbdf279612bfb63))
|
||||
|
||||
# [5.4.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.5...v5.4.0-dev.6) (2024-12-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube Music - Spoof video streams:** Disable stable volume ([#4097](https://github.com/ReVanced/revanced-patches/issues/4097)) ([16bb9df](https://github.com/ReVanced/revanced-patches/commit/16bb9dfc299612f3922724c136878606987ab132))
|
||||
|
||||
# [5.4.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.4...v5.4.0-dev.5) (2024-12-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Resolve playback of age restricted videos ([#4096](https://github.com/ReVanced/revanced-patches/issues/4096)) ([839a404](https://github.com/ReVanced/revanced-patches/commit/839a4045f1bb1759d89047834e0b7695781e82a3))
|
||||
|
||||
# [5.4.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.3...v5.4.0-dev.4) (2024-12-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Fix error toast that is sometimes shown ([#4090](https://github.com/ReVanced/revanced-patches/issues/4090)) ([4c46cb2](https://github.com/ReVanced/revanced-patches/commit/4c46cb27a02c6f29626cd769b6a8e825645d5b16))
|
||||
|
||||
# [5.4.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.2...v5.4.0-dev.3) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **TikTok - Settings:** Use correct colors for dark mode ([#4087](https://github.com/ReVanced/revanced-patches/issues/4087)) ([6bd22ff](https://github.com/ReVanced/revanced-patches/commit/6bd22ffa7e8af4d8f5d2d3b1711bd92c44b4e4aa))
|
||||
|
||||
# [5.4.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.1...v5.4.0-dev.2) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **TikTok - SIM Spoof:** Change patch to default off to fix login ([#4084](https://github.com/ReVanced/revanced-patches/issues/4084)) ([f4659a3](https://github.com/ReVanced/revanced-patches/commit/f4659a328eaf600e1e5f02a66fa2af4b6d8dc7c1))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Add Internal data documents provider patch ([#3830](https://github.com/ReVanced/revanced-patches/issues/3830)) ([cb22f65](https://github.com/ReVanced/revanced-patches/commit/cb22f652ed678d81ffda9ece659b3971225d6931))
|
||||
|
||||
# [5.4.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.3.0...v5.4.0-dev.1) (2024-12-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Change package name:** Add options to change provider and permission package names to handle installation conflicts ([75c740c](https://github.com/ReVanced/revanced-patches/commit/75c740c6ba2e0c62e567f7dc90cdad368fc4f372))
|
||||
|
||||
# [5.3.0](https://github.com/ReVanced/revanced-patches/compare/v5.2.3...v5.3.0) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Change package name:** Prevent applying the patch to known incompatible apps ([#3943](https://github.com/ReVanced/revanced-patches/issues/3943)) ([44936e7](https://github.com/ReVanced/revanced-patches/commit/44936e71e846f72f7279950232a5dba37765ceb3))
|
||||
* **Reddit:** Fix patches by using correct extension class ([70bdc68](https://github.com/ReVanced/revanced-patches/commit/70bdc6840d465399625aa1ae0259f49e72711955))
|
||||
* **Sync for Reddit:** Fix patches by using correct extension name ([030093e](https://github.com/ReVanced/revanced-patches/commit/030093e913aab3fab43935eedbaeba0f6c0491bb))
|
||||
* **Twitter:** Merge correct extension by depending on correct extension patch ([8281cf6](https://github.com/ReVanced/revanced-patches/commit/8281cf6a3eead8cc25a277371e0b0ab2be982497))
|
||||
* **YouTube - Spoof video streams:** Add missing preferred language preference to the settings ([630633c](https://github.com/ReVanced/revanced-patches/commit/630633cf57c65c65e5578046413e17670ae336e8))
|
||||
* **YouTube - Spoof video streams:** Enable opus codec by updating iOS client version ([#4063](https://github.com/ReVanced/revanced-patches/issues/4063)) ([0af156f](https://github.com/ReVanced/revanced-patches/commit/0af156f18972c5f089af4bb69824968d2a47d18f))
|
||||
* **YouTube - Spoof video streams:** Update `Force AVC` client data ([#4064](https://github.com/ReVanced/revanced-patches/issues/4064)) ([7d537dd](https://github.com/ReVanced/revanced-patches/commit/7d537ddff4bb5421fa320741275131a66ef5c7bb))
|
||||
* **YouTube Music - Permanent shuffle:** Remove obsolete and non functional patch ([#4073](https://github.com/ReVanced/revanced-patches/issues/4073)) ([fbc6ab6](https://github.com/ReVanced/revanced-patches/commit/fbc6ab6a357b351f02d4d486ddc2072cf53199c3))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Nyx:** Remove broken `Unlock pro` patch ([1fe8b16](https://github.com/ReVanced/revanced-patches/commit/1fe8b164eab0c4fa80ab2da2581977f5111a2858))
|
||||
* **YouTube - Spoof video streams:** Allow picking a default audio language track ([#4050](https://github.com/ReVanced/revanced-patches/issues/4050)) ([ede666b](https://github.com/ReVanced/revanced-patches/commit/ede666b5cb64fcbaa1334ad8bef79e2634ced113))
|
||||
* **YouTube Music:** Add `Spoof video streams` patch to fix playback ([#4065](https://github.com/ReVanced/revanced-patches/issues/4065)) ([cf3116a](https://github.com/ReVanced/revanced-patches/commit/cf3116a7583d09c25c798a85687a056f143656f0))
|
||||
* **YouTube:** Add `Open videos fullscreen` patch ([#4069](https://github.com/ReVanced/revanced-patches/issues/4069)) ([296d63b](https://github.com/ReVanced/revanced-patches/commit/296d63bd42c338a01efbcb2df702e5822d05a5f1))
|
||||
|
||||
# [5.3.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.6...v5.3.0-dev.7) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Add missing preferred language preference to the settings ([630633c](https://github.com/ReVanced/revanced-patches/commit/630633cf57c65c65e5578046413e17670ae336e8))
|
||||
|
||||
# [5.3.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.5...v5.3.0-dev.6) (2024-12-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Spoof video streams:** Allow picking a default audio language track ([#4050](https://github.com/ReVanced/revanced-patches/issues/4050)) ([ede666b](https://github.com/ReVanced/revanced-patches/commit/ede666b5cb64fcbaa1334ad8bef79e2634ced113))
|
||||
|
||||
# [5.3.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.4...v5.3.0-dev.5) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Change package name:** Prevent applying the patch to known incompatible apps ([#3943](https://github.com/ReVanced/revanced-patches/issues/3943)) ([44936e7](https://github.com/ReVanced/revanced-patches/commit/44936e71e846f72f7279950232a5dba37765ceb3))
|
||||
* **YouTube Music - Permanent shuffle:** Remove obsolete and non functional patch ([#4073](https://github.com/ReVanced/revanced-patches/issues/4073)) ([fbc6ab6](https://github.com/ReVanced/revanced-patches/commit/fbc6ab6a357b351f02d4d486ddc2072cf53199c3))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube:** Add `Open videos fullscreen` patch ([#4069](https://github.com/ReVanced/revanced-patches/issues/4069)) ([296d63b](https://github.com/ReVanced/revanced-patches/commit/296d63bd42c338a01efbcb2df702e5822d05a5f1))
|
||||
|
||||
# [5.3.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.3...v5.3.0-dev.4) (2024-12-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Nyx:** Remove broken `Unlock pro` patch ([1fe8b16](https://github.com/ReVanced/revanced-patches/commit/1fe8b164eab0c4fa80ab2da2581977f5111a2858))
|
||||
|
||||
# [5.3.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.2...v5.3.0-dev.3) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Update `Force AVC` client data ([#4064](https://github.com/ReVanced/revanced-patches/issues/4064)) ([7d537dd](https://github.com/ReVanced/revanced-patches/commit/7d537ddff4bb5421fa320741275131a66ef5c7bb))
|
||||
|
||||
# [5.3.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.1...v5.3.0-dev.2) (2024-12-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Reddit:** Fix patches by using correct extension class ([70bdc68](https://github.com/ReVanced/revanced-patches/commit/70bdc6840d465399625aa1ae0259f49e72711955))
|
||||
|
||||
# [5.3.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.3...v5.3.0-dev.1) (2024-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube Music:** Add `Spoof video streams` patch to fix playback ([#4065](https://github.com/ReVanced/revanced-patches/issues/4065)) ([cf3116a](https://github.com/ReVanced/revanced-patches/commit/cf3116a7583d09c25c798a85687a056f143656f0))
|
||||
|
||||
## [5.2.4-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.2...v5.2.4-dev.3) (2024-12-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Enable opus codec by updating iOS client version ([#4063](https://github.com/ReVanced/revanced-patches/issues/4063)) ([0af156f](https://github.com/ReVanced/revanced-patches/commit/0af156f18972c5f089af4bb69824968d2a47d18f))
|
||||
|
||||
## [5.2.4-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.1...v5.2.4-dev.2) (2024-12-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Sync for Reddit:** Fix patches by using correct extension name ([030093e](https://github.com/ReVanced/revanced-patches/commit/030093e913aab3fab43935eedbaeba0f6c0491bb))
|
||||
|
||||
## [5.2.4-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.2.3...v5.2.4-dev.1) (2024-12-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Twitter:** Merge correct extension by depending on correct extension patch ([8281cf6](https://github.com/ReVanced/revanced-patches/commit/8281cf6a3eead8cc25a277371e0b0ab2be982497))
|
||||
|
||||
## [5.2.3](https://github.com/ReVanced/revanced-patches/compare/v5.2.2...v5.2.3) (2024-12-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube Music - GmsCore support:** Resolve patching errors ([#4056](https://github.com/ReVanced/revanced-patches/issues/4056)) ([38a4bad](https://github.com/ReVanced/revanced-patches/commit/38a4bad5b890e3906d77d22efeabd8f38653508b))
|
||||
|
||||
## [5.2.3-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.2.2...v5.2.3-dev.1) (2024-12-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube Music - GmsCore support:** Resolve patching errors ([#4056](https://github.com/ReVanced/revanced-patches/issues/4056)) ([38a4bad](https://github.com/ReVanced/revanced-patches/commit/38a4bad5b890e3906d77d22efeabd8f38653508b))
|
||||
|
||||
## [5.2.2](https://github.com/ReVanced/revanced-patches/compare/v5.2.1...v5.2.2) (2024-12-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Use system language as default iOS audio stream ([#4042](https://github.com/ReVanced/revanced-patches/issues/4042)) ([4017185](https://github.com/ReVanced/revanced-patches/commit/4017185e760c0569e6644b94bbe66a84fa245b4b))
|
||||
|
||||
## [5.2.2-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.2.1...v5.2.2-dev.1) (2024-12-05)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
dependencies {
|
||||
compileOnly(libs.annotation)
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<manifest/>
|
||||
@@ -0,0 +1,334 @@
|
||||
package app.revanced.extension.all.misc.directory.documentsprovider;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.ProviderInfo;
|
||||
import android.database.Cursor;
|
||||
import android.database.MatrixCursor;
|
||||
import android.os.CancellationSignal;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.provider.DocumentsContract;
|
||||
import android.provider.DocumentsProvider;
|
||||
import android.system.ErrnoException;
|
||||
import android.system.Os;
|
||||
import android.system.StructStat;
|
||||
import android.util.Log;
|
||||
import android.webkit.MimeTypeMap;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* A DocumentsProvider that allows access to the app's internal data directory.
|
||||
*/
|
||||
public class InternalDataDocumentsProvider extends DocumentsProvider {
|
||||
private static final String[] rootColumns =
|
||||
{"root_id", "mime_types", "flags", "icon", "title", "summary", "document_id"};
|
||||
private static final String[] directoryColumns =
|
||||
{"document_id", "mime_type", "_display_name", "last_modified", "flags",
|
||||
"_size", "full_path", "lstat_info"};
|
||||
private static final int S_IFLNK = 0x8000;
|
||||
|
||||
private String packageName;
|
||||
private File dataDirectory;
|
||||
|
||||
/**
|
||||
* Recursively delete a file or directory and all its children.
|
||||
*
|
||||
* @param root The file or directory to delete.
|
||||
* @return True if the file or directory and all its children were successfully deleted.
|
||||
*/
|
||||
private static boolean deleteRecursively(File root) {
|
||||
// If root is a directory, delete all children first
|
||||
if (root.isDirectory()) {
|
||||
try {
|
||||
// Only delete recursively if the directory is not a symlink
|
||||
if ((Os.lstat(root.getPath()).st_mode & S_IFLNK) != S_IFLNK) {
|
||||
File[] files = root.listFiles();
|
||||
if (files != null) {
|
||||
for (File file : files) {
|
||||
if (!deleteRecursively(file)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (ErrnoException e) {
|
||||
Log.e("InternalDocumentsProvider", "Failed to lstat " + root.getPath(), e);
|
||||
}
|
||||
}
|
||||
|
||||
// Delete file or empty directory
|
||||
return root.delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve the MIME type of a file based on its extension.
|
||||
*
|
||||
* @param file The file to resolve the MIME type for.
|
||||
* @return The MIME type of the file.
|
||||
*/
|
||||
private static String resolveMimeType(File file) {
|
||||
if (file.isDirectory()) {
|
||||
return DocumentsContract.Document.MIME_TYPE_DIR;
|
||||
}
|
||||
|
||||
String name = file.getName();
|
||||
int indexOfExtDot = name.lastIndexOf('.');
|
||||
if (indexOfExtDot < 0) {
|
||||
// No extension
|
||||
return "application/octet-stream";
|
||||
}
|
||||
|
||||
String extension = name.substring(indexOfExtDot + 1).toLowerCase();
|
||||
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
|
||||
return mimeType != null ? mimeType : "application/octet-stream";
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean onCreate() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void attachInfo(Context context, ProviderInfo providerInfo) {
|
||||
super.attachInfo(context, providerInfo);
|
||||
|
||||
this.packageName = context.getPackageName();
|
||||
this.dataDirectory = context.getFilesDir().getParentFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String createDocument(String parentDocumentId, String mimeType, String displayName) throws FileNotFoundException {
|
||||
File directory = resolveDocumentId(parentDocumentId);
|
||||
File file = new File(directory, displayName);
|
||||
|
||||
// If file already exists, append a number to the name
|
||||
int i = 2;
|
||||
while (file.exists()) {
|
||||
file = new File(directory, displayName + " (" + i + ")");
|
||||
i++;
|
||||
}
|
||||
|
||||
try {
|
||||
// Create the file or directory
|
||||
if (mimeType.equals(DocumentsContract.Document.MIME_TYPE_DIR) ? file.mkdir() : file.createNewFile()) {
|
||||
// Return the document ID of the new entity
|
||||
if (!parentDocumentId.endsWith("/")) {
|
||||
parentDocumentId = parentDocumentId + "/";
|
||||
}
|
||||
return parentDocumentId + file.getName();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// Do nothing. We are throwing a FileNotFoundException later if the file could not be created.
|
||||
}
|
||||
throw new FileNotFoundException("Failed to create document in " + parentDocumentId + " with name " + displayName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void deleteDocument(String documentId) throws FileNotFoundException {
|
||||
File file = resolveDocumentId(documentId);
|
||||
if (!deleteRecursively(file)) {
|
||||
throw new FileNotFoundException("Failed to delete document " + documentId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String getDocumentType(String documentId) throws FileNotFoundException {
|
||||
return resolveMimeType(resolveDocumentId(documentId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isChildDocument(String parentDocumentId, String documentId) {
|
||||
return documentId.startsWith(parentDocumentId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String moveDocument(String sourceDocumentId, String sourceParentDocumentId, String targetParentDocumentId) throws FileNotFoundException {
|
||||
File source = resolveDocumentId(sourceDocumentId);
|
||||
File dest = resolveDocumentId(targetParentDocumentId);
|
||||
|
||||
File file = new File(dest, source.getName());
|
||||
if (!file.exists() && source.renameTo(file)) {
|
||||
// Return the new document ID
|
||||
if (targetParentDocumentId.endsWith("/")) {
|
||||
return targetParentDocumentId + file.getName();
|
||||
}
|
||||
return targetParentDocumentId + "/" + file.getName();
|
||||
}
|
||||
|
||||
throw new FileNotFoundException("Failed to move document from " + sourceDocumentId + " to " + targetParentDocumentId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final ParcelFileDescriptor openDocument(String documentId, String mode, CancellationSignal signal) throws FileNotFoundException {
|
||||
File file = resolveDocumentId(documentId);
|
||||
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.parseMode(mode));
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder) throws FileNotFoundException {
|
||||
if (parentDocumentId.endsWith("/")) {
|
||||
parentDocumentId = parentDocumentId.substring(0, parentDocumentId.length() - 1);
|
||||
}
|
||||
|
||||
if (projection == null) {
|
||||
projection = directoryColumns;
|
||||
}
|
||||
|
||||
MatrixCursor cursor = new MatrixCursor(projection);
|
||||
File children = resolveDocumentId(parentDocumentId);
|
||||
|
||||
// Collect all children
|
||||
File[] files = children.listFiles();
|
||||
if (files != null) {
|
||||
for (File file : files) {
|
||||
addRowForDocument(cursor, parentDocumentId + "/" + file.getName(), file);
|
||||
}
|
||||
}
|
||||
return cursor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Cursor queryDocument(String documentId, String[] projection) throws FileNotFoundException {
|
||||
if (projection == null) {
|
||||
projection = directoryColumns;
|
||||
}
|
||||
|
||||
MatrixCursor cursor = new MatrixCursor(projection);
|
||||
addRowForDocument(cursor, documentId, null);
|
||||
return cursor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Cursor queryRoots(String[] projection) {
|
||||
ApplicationInfo info = Objects.requireNonNull(getContext()).getApplicationInfo();
|
||||
String appName = info.loadLabel(getContext().getPackageManager()).toString();
|
||||
|
||||
if (projection == null) {
|
||||
projection = rootColumns;
|
||||
}
|
||||
|
||||
MatrixCursor cursor = new MatrixCursor(projection);
|
||||
MatrixCursor.RowBuilder row = cursor.newRow();
|
||||
row.add(DocumentsContract.Root.COLUMN_ROOT_ID, this.packageName);
|
||||
row.add(DocumentsContract.Root.COLUMN_DOCUMENT_ID, this.packageName);
|
||||
row.add(DocumentsContract.Root.COLUMN_SUMMARY, this.packageName);
|
||||
row.add(DocumentsContract.Root.COLUMN_FLAGS,
|
||||
DocumentsContract.Root.FLAG_LOCAL_ONLY |
|
||||
DocumentsContract.Root.FLAG_SUPPORTS_IS_CHILD);
|
||||
row.add(DocumentsContract.Root.COLUMN_TITLE, appName);
|
||||
row.add(DocumentsContract.Root.COLUMN_MIME_TYPES, "*/*");
|
||||
row.add(DocumentsContract.Root.COLUMN_ICON, info.icon);
|
||||
return cursor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void removeDocument(String documentId, String parentDocumentId) throws FileNotFoundException {
|
||||
deleteDocument(documentId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String renameDocument(String documentId, String displayName) throws FileNotFoundException {
|
||||
File file = resolveDocumentId(documentId);
|
||||
if (!file.renameTo(new File(file.getParentFile(), displayName))) {
|
||||
throw new FileNotFoundException("Failed to rename document from " + documentId + " to " + displayName);
|
||||
}
|
||||
|
||||
// Return the new document ID
|
||||
return documentId.substring(0, documentId.lastIndexOf('/', documentId.length() - 2)) + "/" + displayName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve a file instance for a given document ID.
|
||||
*
|
||||
* @param fullContentPath The document ID to resolve.
|
||||
* @return File object for the given document ID.
|
||||
* @throws FileNotFoundException If the document ID is invalid or the file does not exist.
|
||||
*/
|
||||
private File resolveDocumentId(String fullContentPath) throws FileNotFoundException {
|
||||
if (!fullContentPath.startsWith(this.packageName)) {
|
||||
throw new FileNotFoundException(fullContentPath + " not found");
|
||||
}
|
||||
String path = fullContentPath.substring(this.packageName.length());
|
||||
|
||||
// Resolve the relative path within /data/data/{PKG}
|
||||
File file;
|
||||
if (path.equals("/") || path.isEmpty()) {
|
||||
file = this.dataDirectory;
|
||||
} else {
|
||||
// Remove leading slash
|
||||
String relativePath = path.substring(1);
|
||||
file = new File(this.dataDirectory, relativePath);
|
||||
}
|
||||
|
||||
if (!file.exists()) {
|
||||
throw new FileNotFoundException(fullContentPath + " not found");
|
||||
}
|
||||
return file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a row containing all file properties to a MatrixCursor for a given document ID.
|
||||
*
|
||||
* @param cursor The cursor to add the row to.
|
||||
* @param documentId The document ID to add the row for.
|
||||
* @param file The file to add the row for. If null, the file will be resolved from the document ID.
|
||||
* @throws FileNotFoundException If the file does not exist.
|
||||
*/
|
||||
private void addRowForDocument(MatrixCursor cursor, String documentId, File file) throws FileNotFoundException {
|
||||
if (file == null) {
|
||||
file = resolveDocumentId(documentId);
|
||||
}
|
||||
|
||||
int flags = 0;
|
||||
if (file.isDirectory()) {
|
||||
// Prefer list view for directories
|
||||
flags = flags | DocumentsContract.Document.FLAG_DIR_PREFERS_LAST_MODIFIED;
|
||||
}
|
||||
|
||||
if (file.canWrite()) {
|
||||
if (file.isDirectory()) {
|
||||
flags = flags | DocumentsContract.Document.FLAG_DIR_SUPPORTS_CREATE;
|
||||
}
|
||||
|
||||
flags = flags | DocumentsContract.Document.FLAG_SUPPORTS_WRITE |
|
||||
DocumentsContract.Document.FLAG_SUPPORTS_DELETE |
|
||||
DocumentsContract.Document.FLAG_SUPPORTS_RENAME |
|
||||
DocumentsContract.Document.FLAG_SUPPORTS_MOVE;
|
||||
}
|
||||
|
||||
MatrixCursor.RowBuilder row = cursor.newRow();
|
||||
row.add(DocumentsContract.Document.COLUMN_DOCUMENT_ID, documentId);
|
||||
row.add(DocumentsContract.Document.COLUMN_DISPLAY_NAME, file.getName());
|
||||
row.add(DocumentsContract.Document.COLUMN_SIZE, file.length());
|
||||
row.add(DocumentsContract.Document.COLUMN_MIME_TYPE, resolveMimeType(file));
|
||||
row.add(DocumentsContract.Document.COLUMN_LAST_MODIFIED, file.lastModified());
|
||||
row.add(DocumentsContract.Document.COLUMN_FLAGS, flags);
|
||||
|
||||
// Custom columns
|
||||
row.add("full_path", file.getAbsolutePath());
|
||||
|
||||
// Add lstat column
|
||||
String path = file.getPath();
|
||||
try {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
StructStat lstat = Os.lstat(path);
|
||||
sb.append(lstat.st_mode);
|
||||
sb.append(";");
|
||||
sb.append(lstat.st_uid);
|
||||
sb.append(";");
|
||||
sb.append(lstat.st_gid);
|
||||
// Append symlink target if it is a symlink
|
||||
if ((lstat.st_mode & S_IFLNK) == S_IFLNK) {
|
||||
sb.append(";");
|
||||
sb.append(Os.readlink(path));
|
||||
}
|
||||
row.add("lstat_info", sb.toString());
|
||||
} catch (Exception ex) {
|
||||
Log.e("InternalDocumentsProvider", "Failed to get lstat info for " + path, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
1
extensions/music/build.gradle.kts
Normal file
1
extensions/music/build.gradle.kts
Normal file
@@ -0,0 +1 @@
|
||||
// Do not remove. Necessary for the extension plugin to be applied to the project.
|
||||
1
extensions/music/src/main/AndroidManifest.xml
Normal file
1
extensions/music/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1 @@
|
||||
<manifest/>
|
||||
@@ -0,0 +1,27 @@
|
||||
package app.revanced.extension.music.spoof;
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public class SpoofClientPatch {
|
||||
private static final int CLIENT_TYPE_ID = 26;
|
||||
private static final String CLIENT_VERSION = "6.21";
|
||||
private static final String DEVICE_MODEL = "iPhone16,2";
|
||||
private static final String OS_VERSION = "17.7.2.21H221";
|
||||
|
||||
public static int getClientId() {
|
||||
return CLIENT_TYPE_ID;
|
||||
}
|
||||
|
||||
public static String getClientVersion() {
|
||||
return CLIENT_VERSION;
|
||||
}
|
||||
|
||||
public static String getClientModel() {
|
||||
return DEVICE_MODEL;
|
||||
}
|
||||
|
||||
public static String getOsVersion() {
|
||||
return OS_VERSION;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,16 @@
|
||||
package app.revanced.extension.patches;
|
||||
package app.revanced.extension.reddit.patches;
|
||||
|
||||
import com.reddit.domain.model.ILink;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class FilterPromotedLinksPatch {
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*
|
||||
* Filters list from promoted links.
|
||||
**/
|
||||
public static List<?> filterChildren(final Iterable<?> links) {
|
||||
@@ -24,7 +24,9 @@ import java.net.URL;
|
||||
* @noinspection unused
|
||||
*/
|
||||
public class GmsCoreSupport {
|
||||
public static final String ORIGINAL_UNPATCHED_PACKAGE_NAME = "com.google.android.youtube";
|
||||
private static final String PACKAGE_NAME_YOUTUBE = "com.google.android.youtube";
|
||||
private static final String PACKAGE_NAME_YOUTUBE_MUSIC = "com.google.android.apps.youtube.music";
|
||||
|
||||
private static final String GMS_CORE_PACKAGE_NAME
|
||||
= getGmsCoreVendorGroupId() + ".android.gms";
|
||||
private static final Uri GMS_CORE_PROVIDER
|
||||
@@ -52,17 +54,20 @@ public class GmsCoreSupport {
|
||||
|
||||
private static void showBatteryOptimizationDialog(Activity context,
|
||||
String dialogMessageRef,
|
||||
String positiveButtonStringRef,
|
||||
String positiveButtonTextRef,
|
||||
DialogInterface.OnClickListener onPositiveClickListener) {
|
||||
// Do not set cancelable to false, to allow using back button to skip the action,
|
||||
// just in case the check can never be satisfied.
|
||||
var dialog = new AlertDialog.Builder(context)
|
||||
.setIconAttribute(android.R.attr.alertDialogIcon)
|
||||
.setTitle(str("gms_core_dialog_title"))
|
||||
.setMessage(str(dialogMessageRef))
|
||||
.setPositiveButton(str(positiveButtonStringRef), onPositiveClickListener)
|
||||
.create();
|
||||
Utils.showDialog(context, dialog);
|
||||
// Use a delay to allow the activity to finish initializing.
|
||||
// Otherwise, if device is in dark mode the dialog is shown with wrong color scheme.
|
||||
Utils.runOnMainThreadDelayed(() -> {
|
||||
// Do not set cancelable to false, to allow using back button to skip the action,
|
||||
// just in case the battery change can never be satisfied.
|
||||
var dialog = new AlertDialog.Builder(context)
|
||||
.setTitle(str("gms_core_dialog_title"))
|
||||
.setMessage(str(dialogMessageRef))
|
||||
.setPositiveButton(str(positiveButtonTextRef), onPositiveClickListener)
|
||||
.create();
|
||||
Utils.showDialog(context, dialog);
|
||||
}, 100);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -74,7 +79,8 @@ public class GmsCoreSupport {
|
||||
// Verify the user has not included GmsCore for a root installation.
|
||||
// GmsCore Support changes the package name, but with a mounted installation
|
||||
// all manifest changes are ignored and the original package name is used.
|
||||
if (context.getPackageName().equals(ORIGINAL_UNPATCHED_PACKAGE_NAME)) {
|
||||
String packageName = context.getPackageName();
|
||||
if (packageName.equals(PACKAGE_NAME_YOUTUBE) || packageName.equals(PACKAGE_NAME_YOUTUBE_MUSIC)) {
|
||||
Logger.printInfo(() -> "App is mounted with root, but GmsCore patch was included");
|
||||
// Cannot use localize text here, since the app will load
|
||||
// resources from the unpatched app and all patch strings are missing.
|
||||
@@ -99,7 +105,18 @@ public class GmsCoreSupport {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if GmsCore is running in the background.
|
||||
// Check if GmsCore is whitelisted from battery optimizations.
|
||||
if (batteryOptimizationsEnabled(context)) {
|
||||
Logger.printInfo(() -> "GmsCore is not whitelisted from battery optimizations");
|
||||
|
||||
showBatteryOptimizationDialog(context,
|
||||
"gms_core_dialog_not_whitelisted_using_battery_optimizations_message",
|
||||
"gms_core_dialog_continue_text",
|
||||
(dialog, id) -> openGmsCoreDisableBatteryOptimizationsIntent(context));
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if GmsCore is currently running in the background.
|
||||
try (var client = context.getContentResolver().acquireContentProviderClient(GMS_CORE_PROVIDER)) {
|
||||
if (client == null) {
|
||||
Logger.printInfo(() -> "GmsCore is not running in the background");
|
||||
@@ -108,18 +125,8 @@ public class GmsCoreSupport {
|
||||
"gms_core_dialog_not_whitelisted_not_allowed_in_background_message",
|
||||
"gms_core_dialog_open_website_text",
|
||||
(dialog, id) -> open(DONT_KILL_MY_APP_LINK));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if GmsCore is whitelisted from battery optimizations.
|
||||
if (batteryOptimizationsEnabled(context)) {
|
||||
Logger.printInfo(() -> "GmsCore is not whitelisted from battery optimizations");
|
||||
showBatteryOptimizationDialog(context,
|
||||
"gms_core_dialog_not_whitelisted_using_battery_optimizations_message",
|
||||
"gms_core_dialog_continue_text",
|
||||
(dialog, id) -> openGmsCoreDisableBatteryOptimizationsIntent(context));
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "checkGmsCore failure", ex);
|
||||
}
|
||||
@@ -143,12 +150,10 @@ public class GmsCoreSupport {
|
||||
private static String getGmsCoreDownload() {
|
||||
final var vendorGroupId = getGmsCoreVendorGroupId();
|
||||
//noinspection SwitchStatementWithTooFewBranches
|
||||
switch (vendorGroupId) {
|
||||
case "app.revanced":
|
||||
return "https://github.com/revanced/gmscore/releases/latest";
|
||||
default:
|
||||
return vendorGroupId + ".android.gms";
|
||||
}
|
||||
return switch (vendorGroupId) {
|
||||
case "app.revanced" -> "https://github.com/revanced/gmscore/releases/latest";
|
||||
default -> vendorGroupId + ".android.gms";
|
||||
};
|
||||
}
|
||||
|
||||
// Modified by a patch. Do not touch.
|
||||
|
||||
@@ -4,8 +4,10 @@ import android.annotation.SuppressLint;
|
||||
import android.app.*;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.os.Build;
|
||||
@@ -47,6 +49,7 @@ public class Utils {
|
||||
private static Context context;
|
||||
|
||||
private static String versionName;
|
||||
private static String applicationLabel;
|
||||
|
||||
private Utils() {
|
||||
} // utility class
|
||||
@@ -61,28 +64,30 @@ public class Utils {
|
||||
return ""; // Value is replaced during patching.
|
||||
}
|
||||
|
||||
private static PackageInfo getPackageInfo() throws PackageManager.NameNotFoundException {
|
||||
final var packageName = Objects.requireNonNull(getContext()).getPackageName();
|
||||
|
||||
PackageManager packageManager = context.getPackageManager();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
return packageManager.getPackageInfo(
|
||||
packageName,
|
||||
PackageManager.PackageInfoFlags.of(0)
|
||||
);
|
||||
}
|
||||
|
||||
return packageManager.getPackageInfo(
|
||||
packageName,
|
||||
0
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The version name of the app, such as 19.11.43
|
||||
*/
|
||||
public static String getAppVersionName() {
|
||||
if (versionName == null) {
|
||||
try {
|
||||
final var packageName = Objects.requireNonNull(getContext()).getPackageName();
|
||||
|
||||
PackageManager packageManager = context.getPackageManager();
|
||||
PackageInfo packageInfo;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
packageInfo = packageManager.getPackageInfo(
|
||||
packageName,
|
||||
PackageManager.PackageInfoFlags.of(0)
|
||||
);
|
||||
} else {
|
||||
packageInfo = packageManager.getPackageInfo(
|
||||
packageName,
|
||||
0
|
||||
);
|
||||
}
|
||||
versionName = packageInfo.versionName;
|
||||
versionName = getPackageInfo().versionName;
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "Failed to get package info", ex);
|
||||
versionName = "Unknown";
|
||||
@@ -92,6 +97,19 @@ public class Utils {
|
||||
return versionName;
|
||||
}
|
||||
|
||||
public static String getApplicationName() {
|
||||
if (applicationLabel == null) {
|
||||
try {
|
||||
ApplicationInfo applicationInfo = getPackageInfo().applicationInfo;
|
||||
applicationLabel = (String) applicationInfo.loadLabel(context.getPackageManager());
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "Failed to get application name", ex);
|
||||
applicationLabel = "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
return applicationLabel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide a view by setting its layout height and width to 1dp.
|
||||
@@ -325,7 +343,7 @@ public class Utils {
|
||||
|
||||
public static void restartApp(@NonNull Context context) {
|
||||
String packageName = context.getPackageName();
|
||||
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
|
||||
Intent intent = Objects.requireNonNull(context.getPackageManager().getLaunchIntentForPackage(packageName));
|
||||
Intent mainIntent = Intent.makeRestartActivityTask(intent.getComponent());
|
||||
// Required for API 34 and later
|
||||
// Ref: https://developer.android.com/about/versions/14/behavior-changes-14#safer-intents
|
||||
@@ -499,6 +517,12 @@ public class Utils {
|
||||
);
|
||||
}
|
||||
|
||||
public static boolean isDarkModeEnabled(Context context) {
|
||||
Configuration config = context.getResources().getConfiguration();
|
||||
final int currentNightMode = config.uiMode & Configuration.UI_MODE_NIGHT_MASK;
|
||||
return currentNightMode == Configuration.UI_MODE_NIGHT_YES;
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatically logs any exceptions the runnable throws.
|
||||
*
|
||||
|
||||
@@ -3,10 +3,14 @@ package app.revanced.extension.shared.settings;
|
||||
import static java.lang.Boolean.FALSE;
|
||||
import static java.lang.Boolean.TRUE;
|
||||
import static app.revanced.extension.shared.settings.Setting.parent;
|
||||
import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.SpoofiOSAvailability;
|
||||
|
||||
import app.revanced.extension.shared.spoof.AudioStreamLanguage;
|
||||
import app.revanced.extension.shared.spoof.ClientType;
|
||||
|
||||
/**
|
||||
* Settings shared across multiple apps.
|
||||
*
|
||||
* <p>
|
||||
* To ensure this class is loaded when the UI is created, app specific setting bundles should extend
|
||||
* or reference this class.
|
||||
*/
|
||||
@@ -16,4 +20,11 @@ public class BaseSettings {
|
||||
public static final BooleanSetting DEBUG_TOAST_ON_ERROR = new BooleanSetting("revanced_debug_toast_on_error", TRUE, "revanced_debug_toast_on_error_user_dialog_message");
|
||||
|
||||
public static final IntegerSetting CHECK_ENVIRONMENT_WARNINGS_ISSUED = new IntegerSetting("revanced_check_environment_warnings_issued", 0, true, false);
|
||||
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true, "revanced_spoof_video_streams_user_dialog_message");
|
||||
public static final EnumSetting<AudioStreamLanguage> SPOOF_VIDEO_STREAMS_LANGUAGE = new EnumSetting<>("revanced_spoof_video_streams_language", AudioStreamLanguage.DEFAULT, new SpoofiOSAvailability());
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC = new BooleanSetting("revanced_spoof_video_streams_ios_force_avc", FALSE, true,
|
||||
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofiOSAvailability());
|
||||
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client", ClientType.ANDROID_VR, true, parent(SPOOF_VIDEO_STREAMS));
|
||||
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.StringRef;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.preference.SharedPrefCategory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
@@ -330,7 +329,7 @@ public abstract class Setting<T> {
|
||||
return value.equals(defaultValue);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
return key + "=" + get();
|
||||
|
||||
@@ -54,9 +54,7 @@ public class ReVancedAboutPreference extends Preference {
|
||||
}
|
||||
|
||||
protected boolean isDarkModeEnabled() {
|
||||
Configuration config = getContext().getResources().getConfiguration();
|
||||
final int currentNightMode = config.uiMode & Configuration.UI_MODE_NIGHT_MASK;
|
||||
return currentNightMode == Configuration.UI_MODE_NIGHT_YES;
|
||||
return Utils.isDarkModeEnabled(getContext());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
package app.revanced.extension.shared.spoof;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public enum AudioStreamLanguage {
|
||||
/**
|
||||
* YouTube default.
|
||||
* Can be the original language or can be app language,
|
||||
* depending on what YouTube decides to pick as the default.
|
||||
*/
|
||||
DEFAULT,
|
||||
|
||||
// Language codes found in locale_config.xml
|
||||
// Region specific variants of Chinese/English/Spanish/French have been removed.
|
||||
AF,
|
||||
AM,
|
||||
AR,
|
||||
AS,
|
||||
AZ,
|
||||
BE,
|
||||
BG,
|
||||
BN,
|
||||
BS,
|
||||
CA,
|
||||
CS,
|
||||
DA,
|
||||
DE,
|
||||
EL,
|
||||
EN,
|
||||
ES,
|
||||
ET,
|
||||
EU,
|
||||
FA,
|
||||
FI,
|
||||
FR,
|
||||
GL,
|
||||
GU,
|
||||
HI,
|
||||
HE, // App uses obsolete 'IW' and 'HE' is modern ISO code.
|
||||
HR,
|
||||
HU,
|
||||
HY,
|
||||
ID,
|
||||
IS,
|
||||
IT,
|
||||
JA,
|
||||
KA,
|
||||
KK,
|
||||
KM,
|
||||
KN,
|
||||
KO,
|
||||
KY,
|
||||
LO,
|
||||
LT,
|
||||
LV,
|
||||
MK,
|
||||
ML,
|
||||
MN,
|
||||
MR,
|
||||
MS,
|
||||
MY,
|
||||
NE,
|
||||
NL,
|
||||
NB,
|
||||
OR,
|
||||
PA,
|
||||
PL,
|
||||
PT_BR,
|
||||
PT_PT,
|
||||
RO,
|
||||
RU,
|
||||
SI,
|
||||
SK,
|
||||
SL,
|
||||
SQ,
|
||||
SR,
|
||||
SV,
|
||||
SW,
|
||||
TA,
|
||||
TE,
|
||||
TH,
|
||||
TL,
|
||||
TR,
|
||||
UK,
|
||||
UR,
|
||||
UZ,
|
||||
VI,
|
||||
ZH,
|
||||
ZU;
|
||||
|
||||
private final String iso639_1;
|
||||
|
||||
AudioStreamLanguage() {
|
||||
String name = name();
|
||||
final int regionSeparatorIndex = name.indexOf('_');
|
||||
if (regionSeparatorIndex >= 0) {
|
||||
iso639_1 = name.substring(0, regionSeparatorIndex).toLowerCase(Locale.US)
|
||||
+ name.substring(regionSeparatorIndex);
|
||||
} else {
|
||||
iso639_1 = name().toLowerCase(Locale.US);
|
||||
}
|
||||
}
|
||||
|
||||
public String getIso639_1() {
|
||||
// Changing the app language does not force the app to completely restart,
|
||||
// so the default needs to be the current language and not a static field.
|
||||
if (this == DEFAULT) {
|
||||
return Locale.getDefault().toLanguageTag();
|
||||
}
|
||||
|
||||
return iso639_1;
|
||||
}
|
||||
}
|
||||
@@ -1,52 +1,60 @@
|
||||
package app.revanced.extension.youtube.patches.spoof;
|
||||
|
||||
import static app.revanced.extension.youtube.patches.spoof.DeviceHardwareSupport.allowAV1;
|
||||
import static app.revanced.extension.youtube.patches.spoof.DeviceHardwareSupport.allowVP9;
|
||||
package app.revanced.extension.shared.spoof;
|
||||
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
|
||||
public enum ClientType {
|
||||
// Specific purpose for age restricted, or private videos, because the iOS client is not logged in.
|
||||
// https://dumps.tadiphone.dev/dumps/oculus/eureka
|
||||
ANDROID_VR(28,
|
||||
"ANDROID_VR",
|
||||
"Quest 3",
|
||||
"12",
|
||||
"com.google.android.apps.youtube.vr.oculus/1.56.21 (Linux; U; Android 12; GB) gzip",
|
||||
"32", // Android 12.1
|
||||
"1.56.21",
|
||||
"ANDROID_VR",
|
||||
true
|
||||
),
|
||||
true,
|
||||
false),
|
||||
// Specific for kids videos.
|
||||
// https://dumps.tadiphone.dev/dumps/oculus/eureka
|
||||
IOS(5,
|
||||
// iPhone 15 supports AV1 hardware decoding.
|
||||
// Only use if this Android device also has hardware decoding.
|
||||
allowAV1()
|
||||
? "iPhone16,2" // 15 Pro Max
|
||||
: "iPhone11,4", // XS Max
|
||||
// iOS 14+ forces VP9.
|
||||
allowVP9()
|
||||
? "17.5.1.21F90"
|
||||
: "13.7.17H35",
|
||||
allowVP9()
|
||||
? "com.google.ios.youtube/19.10.7 (iPhone; U; CPU iOS 17_5_1 like Mac OS X)"
|
||||
: "com.google.ios.youtube/19.10.7 (iPhone; U; CPU iOS 13_7 like Mac OS X)",
|
||||
"IOS",
|
||||
forceAVC()
|
||||
? "iPhone12,5" // 11 Pro Max (last device with iOS 13)
|
||||
: "iPhone16,2", // 15 Pro Max
|
||||
// iOS 13 and earlier uses only AVC. 14+ adds VP9 and AV1.
|
||||
forceAVC()
|
||||
? "13.7.17H35" // Last release of iOS 13.
|
||||
: "17.5.1.21F90",
|
||||
forceAVC()
|
||||
? "com.google.ios.youtube/17.40.5 (iPhone; U; CPU iOS 13_7 like Mac OS X)"
|
||||
: "com.google.ios.youtube/19.47.7 (iPhone; U; CPU iOS 17_5_1 like Mac OS X)",
|
||||
null,
|
||||
// Version number should be a valid iOS release.
|
||||
// https://www.ipa4fun.com/history/185230
|
||||
"19.10.7",
|
||||
"IOS",
|
||||
false
|
||||
forceAVC()
|
||||
// Some newer versions can also force AVC,
|
||||
// but 17.40 is the last version that supports iOS 13.
|
||||
? "17.40.5"
|
||||
: "19.47.7",
|
||||
false,
|
||||
true
|
||||
);
|
||||
|
||||
private static boolean forceAVC() {
|
||||
return BaseSettings.SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* YouTube
|
||||
* <a href="https://github.com/zerodytrash/YouTube-Internal-Clients?tab=readme-ov-file#clients">client type</a>
|
||||
*/
|
||||
public final int id;
|
||||
|
||||
public final String clientName;
|
||||
|
||||
/**
|
||||
* Device model, equivalent to {@link Build#MODEL} (System property: ro.product.model)
|
||||
*/
|
||||
@@ -69,11 +77,6 @@ public enum ClientType {
|
||||
@Nullable
|
||||
public final String androidSdkVersion;
|
||||
|
||||
/**
|
||||
* Client name.
|
||||
*/
|
||||
public final String clientName;
|
||||
|
||||
/**
|
||||
* App version.
|
||||
*/
|
||||
@@ -84,22 +87,28 @@ public enum ClientType {
|
||||
*/
|
||||
public final boolean canLogin;
|
||||
|
||||
/**
|
||||
* If a language code should be used.
|
||||
*/
|
||||
public final boolean useLanguageCode;
|
||||
|
||||
ClientType(int id,
|
||||
String clientName,
|
||||
String deviceModel,
|
||||
String osVersion,
|
||||
String userAgent,
|
||||
@Nullable String androidSdkVersion,
|
||||
String clientVersion,
|
||||
String clientName,
|
||||
boolean canLogin
|
||||
) {
|
||||
boolean canLogin,
|
||||
boolean useLanguageCode) {
|
||||
this.id = id;
|
||||
this.clientName = clientName;
|
||||
this.deviceModel = deviceModel;
|
||||
this.osVersion = osVersion;
|
||||
this.userAgent = userAgent;
|
||||
this.androidSdkVersion = androidSdkVersion;
|
||||
this.clientVersion = clientVersion;
|
||||
this.clientName = clientName;
|
||||
this.canLogin = canLogin;
|
||||
this.useLanguageCode = useLanguageCode;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package app.revanced.extension.youtube.patches.spoof;
|
||||
package app.revanced.extension.shared.spoof;
|
||||
|
||||
import android.net.Uri;
|
||||
|
||||
@@ -6,25 +6,19 @@ import androidx.annotation.Nullable;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.shared.settings.Setting;
|
||||
import app.revanced.extension.youtube.patches.spoof.requests.StreamingDataRequest;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.shared.spoof.requests.StreamingDataRequest;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class SpoofVideoStreamsPatch {
|
||||
public static final class ForceiOSAVCAvailability implements Setting.Availability {
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return Settings.SPOOF_VIDEO_STREAMS.get() && Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS;
|
||||
}
|
||||
}
|
||||
private static final boolean SPOOF_STREAMING_DATA = BaseSettings.SPOOF_VIDEO_STREAMS.get();
|
||||
|
||||
private static final boolean SPOOF_STREAMING_DATA = Settings.SPOOF_VIDEO_STREAMS.get();
|
||||
private static final boolean FIX_HLS_CURRENT_TIME = SPOOF_STREAMING_DATA
|
||||
&& BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS;
|
||||
|
||||
/**
|
||||
* Any unreachable ip address. Used to intentionally fail requests.
|
||||
@@ -96,10 +90,19 @@ public class SpoofVideoStreamsPatch {
|
||||
try {
|
||||
Uri uri = Uri.parse(url);
|
||||
String path = uri.getPath();
|
||||
|
||||
// 'heartbeat' has no video id and appears to be only after playback has started.
|
||||
if (path != null && path.contains("player") && !path.contains("heartbeat")) {
|
||||
String videoId = Objects.requireNonNull(uri.getQueryParameter("id"));
|
||||
StreamingDataRequest.fetchRequest(videoId, requestHeaders);
|
||||
// 'refresh' has no video id and appears to happen when waiting for a livestream to start.
|
||||
if (path != null && path.contains("player") && !path.contains("heartbeat")
|
||||
&& !path.contains("refresh")) {
|
||||
String id = uri.getQueryParameter("id");
|
||||
if (id == null) {
|
||||
Logger.printException(() -> "Ignoring request that has no video id." +
|
||||
" Url: " + url + " headers: " + requestHeaders);
|
||||
return;
|
||||
}
|
||||
|
||||
StreamingDataRequest.fetchRequest(id, requestHeaders);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "buildRequest failure", ex);
|
||||
@@ -165,4 +168,25 @@ public class SpoofVideoStreamsPatch {
|
||||
|
||||
return postData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*
|
||||
* Fixes iOS livestreams starting from the beginning.
|
||||
*/
|
||||
public static boolean fixHLSCurrentTime(boolean original) {
|
||||
if (FIX_HLS_CURRENT_TIME) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return original;
|
||||
}
|
||||
|
||||
public static final class SpoofiOSAvailability implements Setting.Availability {
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return BaseSettings.SPOOF_VIDEO_STREAMS.get()
|
||||
&& BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package app.revanced.extension.youtube.patches.spoof.requests;
|
||||
package app.revanced.extension.shared.spoof.requests;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
@@ -7,10 +7,10 @@ import java.io.IOException;
|
||||
import java.net.HttpURLConnection;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.requests.Requester;
|
||||
import app.revanced.extension.shared.requests.Route;
|
||||
import app.revanced.extension.youtube.patches.spoof.ClientType;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.shared.spoof.ClientType;
|
||||
|
||||
final class PlayerRoutes {
|
||||
static final Route.CompiledRoute GET_STREAMING_DATA = new Route(
|
||||
@@ -19,15 +19,14 @@ final class PlayerRoutes {
|
||||
"?fields=streamingData" +
|
||||
"&alt=proto"
|
||||
).compile();
|
||||
|
||||
private static final String YT_API_URL = "https://youtubei.googleapis.com/youtubei/v1/";
|
||||
|
||||
/**
|
||||
* TCP connection and HTTP read timeout
|
||||
*/
|
||||
private static final int CONNECTION_TIMEOUT_MILLISECONDS = 10 * 1000; // 10 Seconds.
|
||||
|
||||
private static final String LOCALE_LANGUAGE = Utils.getContext().getResources()
|
||||
.getConfiguration().locale.getLanguage();
|
||||
|
||||
private PlayerRoutes() {
|
||||
}
|
||||
|
||||
@@ -38,9 +37,10 @@ final class PlayerRoutes {
|
||||
JSONObject context = new JSONObject();
|
||||
|
||||
JSONObject client = new JSONObject();
|
||||
// Required to use correct default audio channel with iOS.
|
||||
client.put("hl", LOCALE_LANGUAGE);
|
||||
client.put("clientName", clientType.name());
|
||||
if (clientType.useLanguageCode) {
|
||||
client.put("hl", BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get().getIso639_1());
|
||||
}
|
||||
client.put("clientName", clientType.clientName);
|
||||
client.put("clientVersion", clientType.clientVersion);
|
||||
client.put("deviceModel", clientType.deviceModel);
|
||||
client.put("osVersion", clientType.osVersion);
|
||||
@@ -1,6 +1,6 @@
|
||||
package app.revanced.extension.youtube.patches.spoof.requests;
|
||||
package app.revanced.extension.shared.spoof.requests;
|
||||
|
||||
import static app.revanced.extension.youtube.patches.spoof.requests.PlayerRoutes.GET_STREAMING_DATA;
|
||||
import static app.revanced.extension.shared.spoof.requests.PlayerRoutes.GET_STREAMING_DATA;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -22,8 +22,7 @@ import java.util.concurrent.TimeoutException;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.youtube.patches.spoof.ClientType;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.shared.spoof.ClientType;
|
||||
|
||||
/**
|
||||
* Video streaming data. Fetching is tied to the behavior YT uses,
|
||||
@@ -70,7 +69,7 @@ public class StreamingDataRequest {
|
||||
|
||||
static {
|
||||
ClientType[] allClientTypes = ClientType.values();
|
||||
ClientType preferredClient = Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
|
||||
ClientType preferredClient = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
|
||||
|
||||
CLIENT_ORDER_TO_USE = new ClientType[allClientTypes.length];
|
||||
CLIENT_ORDER_TO_USE[0] = preferredClient;
|
||||
@@ -116,8 +115,7 @@ public class StreamingDataRequest {
|
||||
Objects.requireNonNull(playerHeaders);
|
||||
|
||||
final long startTime = System.currentTimeMillis();
|
||||
String clientTypeName = clientType.name();
|
||||
Logger.printDebug(() -> "Fetching video streams for: " + videoId + " using client: " + clientType.name());
|
||||
Logger.printDebug(() -> "Fetching video streams for: " + videoId + " using client: " + clientType);
|
||||
|
||||
try {
|
||||
HttpURLConnection connection = PlayerRoutes.getPlayerResponseConnectionFromRoute(GET_STREAMING_DATA, clientType);
|
||||
@@ -125,12 +123,16 @@ public class StreamingDataRequest {
|
||||
connection.setReadTimeout(HTTP_TIMEOUT_MILLISECONDS);
|
||||
|
||||
for (String key : REQUEST_HEADER_KEYS) {
|
||||
if (!clientType.canLogin && key.equals(AUTHORIZATION_HEADER)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String value = playerHeaders.get(key);
|
||||
if (value != null) {
|
||||
if (key.equals(AUTHORIZATION_HEADER)) {
|
||||
if (!clientType.canLogin) {
|
||||
Logger.printDebug(() -> "Not including request header: " + key);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
Logger.printDebug(() -> "Including request header: " + key);
|
||||
connection.setRequestProperty(key, value);
|
||||
}
|
||||
}
|
||||
@@ -143,8 +145,10 @@ public class StreamingDataRequest {
|
||||
final int responseCode = connection.getResponseCode();
|
||||
if (responseCode == 200) return connection;
|
||||
|
||||
handleConnectionError(clientTypeName + " not available with response code: "
|
||||
+ responseCode + " message: " + connection.getResponseMessage(),
|
||||
// This situation likely means the patches are outdated.
|
||||
// Use a toast message that suggests updating.
|
||||
handleConnectionError("Playback error (App is outdated?) " + clientType + ": "
|
||||
+ responseCode + " response: " + connection.getResponseMessage(),
|
||||
null, showErrorToasts);
|
||||
} catch (SocketTimeoutException ex) {
|
||||
handleConnectionError("Connection timeout", ex, showErrorToasts);
|
||||
@@ -173,17 +177,19 @@ public class StreamingDataRequest {
|
||||
try {
|
||||
// gzip encoding doesn't response with content length (-1),
|
||||
// but empty response body does.
|
||||
if (connection.getContentLength() != 0) {
|
||||
try (InputStream inputStream = new BufferedInputStream(connection.getInputStream())) {
|
||||
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
|
||||
byte[] buffer = new byte[2048];
|
||||
int bytesRead;
|
||||
while ((bytesRead = inputStream.read(buffer)) >= 0) {
|
||||
baos.write(buffer, 0, bytesRead);
|
||||
}
|
||||
if (connection.getContentLength() == 0) {
|
||||
Logger.printDebug(() -> "Received empty response for video: " + videoId);
|
||||
} else {
|
||||
try (InputStream inputStream = new BufferedInputStream(connection.getInputStream());
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
|
||||
|
||||
return ByteBuffer.wrap(baos.toByteArray());
|
||||
byte[] buffer = new byte[2048];
|
||||
int bytesRead;
|
||||
while ((bytesRead = inputStream.read(buffer)) >= 0) {
|
||||
baos.write(buffer, 0, bytesRead);
|
||||
}
|
||||
|
||||
return ByteBuffer.wrap(baos.toByteArray());
|
||||
}
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
@@ -1,9 +1,20 @@
|
||||
package app.revanced.extension.tiktok;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.isDarkModeEnabled;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.ColorInt;
|
||||
|
||||
import app.revanced.extension.shared.settings.StringSetting;
|
||||
|
||||
public class Utils {
|
||||
|
||||
private static final long[] DEFAULT_MIN_MAX_VALUES = {0L, Long.MAX_VALUE};
|
||||
|
||||
// Edit: This could be handled using a custom Setting<Long[]> class
|
||||
// that saves its value to preferences and JSON using the formatted String created here.
|
||||
public static long[] parseMinMax(StringSetting setting) {
|
||||
@@ -20,6 +31,29 @@ public class Utils {
|
||||
}
|
||||
|
||||
setting.save("0-" + Long.MAX_VALUE);
|
||||
return new long[]{0L, Long.MAX_VALUE};
|
||||
return DEFAULT_MIN_MAX_VALUES;
|
||||
}
|
||||
|
||||
// Colors picked by hand. These should be replaced with the styled resources TikTok uses.
|
||||
private static final @ColorInt int TEXT_DARK_MODE_TITLE = Color.WHITE;
|
||||
private static final @ColorInt int TEXT_DARK_MODE_SUMMARY
|
||||
= Color.argb(255, 170, 170, 170);
|
||||
|
||||
private static final @ColorInt int TEXT_LIGHT_MODE_TITLE = Color.BLACK;
|
||||
private static final @ColorInt int TEXT_LIGHT_MODE_SUMMARY
|
||||
= Color.argb(255, 80, 80, 80);
|
||||
|
||||
public static void setTitleAndSummaryColor(Context context, View view) {
|
||||
final boolean darkModeEnabled = isDarkModeEnabled(context);
|
||||
|
||||
TextView title = view.findViewById(android.R.id.title);
|
||||
title.setTextColor(darkModeEnabled
|
||||
? TEXT_DARK_MODE_TITLE
|
||||
: TEXT_LIGHT_MODE_TITLE);
|
||||
|
||||
TextView summary = view.findViewById(android.R.id.summary);
|
||||
summary.setTextColor(darkModeEnabled
|
||||
? TEXT_DARK_MODE_SUMMARY
|
||||
: TEXT_LIGHT_MODE_SUMMARY);
|
||||
}
|
||||
}
|
||||
@@ -1,17 +1,18 @@
|
||||
package app.revanced.extension.tiktok.feedfilter;
|
||||
|
||||
import app.revanced.extension.tiktok.settings.Settings;
|
||||
import com.ss.android.ugc.aweme.feed.model.Aweme;
|
||||
import com.ss.android.ugc.aweme.feed.model.AwemeStatistics;
|
||||
|
||||
import static app.revanced.extension.tiktok.Utils.parseMinMax;
|
||||
import app.revanced.extension.tiktok.Utils;
|
||||
import app.revanced.extension.tiktok.settings.Settings;
|
||||
|
||||
public final class LikeCountFilter implements IFilter {
|
||||
|
||||
final long minLike;
|
||||
final long maxLike;
|
||||
|
||||
LikeCountFilter() {
|
||||
long[] minMax = parseMinMax(Settings.MIN_MAX_LIKES);
|
||||
long[] minMax = Utils.parseMinMax(Settings.MIN_MAX_LIKES);
|
||||
minLike = minMax[0];
|
||||
maxLike = minMax[1];
|
||||
}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package app.revanced.extension.tiktok.feedfilter;
|
||||
|
||||
import app.revanced.extension.tiktok.Utils;
|
||||
import app.revanced.extension.tiktok.settings.Settings;
|
||||
import com.ss.android.ugc.aweme.feed.model.Aweme;
|
||||
import com.ss.android.ugc.aweme.feed.model.AwemeStatistics;
|
||||
|
||||
import static app.revanced.extension.tiktok.Utils.parseMinMax;
|
||||
|
||||
public class ViewCountFilter implements IFilter {
|
||||
final long minView;
|
||||
final long maxView;
|
||||
|
||||
ViewCountFilter() {
|
||||
long[] minMax = parseMinMax(Settings.MIN_MAX_VIEWS);
|
||||
long[] minMax = Utils.parseMinMax(Settings.MIN_MAX_VIEWS);
|
||||
minView = minMax[0];
|
||||
maxView = minMax[1];
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting DOWNLOAD_WATERMARK = new BooleanSetting("down_watermark", TRUE);
|
||||
public static final BooleanSetting CLEAR_DISPLAY = new BooleanSetting("clear_display", FALSE);
|
||||
public static final FloatSetting REMEMBERED_SPEED = new FloatSetting("REMEMBERED_SPEED", 1.0f);
|
||||
public static final BooleanSetting SIM_SPOOF = new BooleanSetting("simspoof", TRUE, true);
|
||||
public static final BooleanSetting SIM_SPOOF = new BooleanSetting("simspoof", FALSE, true);
|
||||
public static final StringSetting SIM_SPOOF_ISO = new StringSetting("simspoof_iso", "us");
|
||||
public static final StringSetting SIMSPOOF_MCCMNC = new StringSetting("simspoof_mccmnc", "310160");
|
||||
public static final StringSetting SIMSPOOF_OP_NAME = new StringSetting("simspoof_op_name", "T-Mobile");
|
||||
|
||||
@@ -16,10 +16,10 @@ import android.widget.RadioButton;
|
||||
import android.widget.RadioGroup;
|
||||
|
||||
import app.revanced.extension.shared.settings.StringSetting;
|
||||
import app.revanced.extension.tiktok.Utils;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class DownloadPathPreference extends DialogPreference {
|
||||
private final Context context;
|
||||
private final String[] entryValues = {"DCIM", "Movies", "Pictures"};
|
||||
private String mValue;
|
||||
|
||||
@@ -29,11 +29,10 @@ public class DownloadPathPreference extends DialogPreference {
|
||||
|
||||
public DownloadPathPreference(Context context, String title, StringSetting setting) {
|
||||
super(context);
|
||||
this.context = context;
|
||||
this.setTitle(title);
|
||||
this.setSummary(Environment.getExternalStorageDirectory().getPath() + "/" + setting.get());
|
||||
this.setKey(setting.key);
|
||||
this.setValue(setting.get());
|
||||
setTitle(title);
|
||||
setSummary(Environment.getExternalStorageDirectory().getPath() + "/" + setting.get());
|
||||
setKey(setting.key);
|
||||
setValue(setting.get());
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
@@ -59,6 +58,7 @@ public class DownloadPathPreference extends DialogPreference {
|
||||
childDownloadPath = getValue().substring(getValue().indexOf("/") + 1);
|
||||
mediaPathIndex = findIndexOf(currentMedia);
|
||||
|
||||
Context context = getContext();
|
||||
LinearLayout dialogView = new LinearLayout(context);
|
||||
RadioGroup mediaPath = new RadioGroup(context);
|
||||
mediaPath.setLayoutParams(new RadioGroup.LayoutParams(-1, -2));
|
||||
@@ -79,12 +79,10 @@ public class DownloadPathPreference extends DialogPreference {
|
||||
downloadPath.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -99,6 +97,13 @@ public class DownloadPathPreference extends DialogPreference {
|
||||
return dialogView;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBindView(View view) {
|
||||
super.onBindView(view);
|
||||
|
||||
Utils.setTitleAndSummaryColor(getContext(), view);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
|
||||
builder.setTitle("Download Path");
|
||||
|
||||
@@ -2,16 +2,26 @@ package app.revanced.extension.tiktok.settings.preference;
|
||||
|
||||
import android.content.Context;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.view.View;
|
||||
|
||||
import app.revanced.extension.shared.settings.StringSetting;
|
||||
import app.revanced.extension.tiktok.Utils;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class InputTextPreference extends EditTextPreference {
|
||||
|
||||
public InputTextPreference(Context context, String title, String summary, StringSetting setting) {
|
||||
super(context);
|
||||
this.setTitle(title);
|
||||
this.setSummary(summary);
|
||||
this.setKey(setting.key);
|
||||
this.setText(setting.get());
|
||||
setTitle(title);
|
||||
setSummary(summary);
|
||||
setKey(setting.key);
|
||||
setText(setting.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBindView(View view) {
|
||||
super.onBindView(view);
|
||||
|
||||
Utils.setTitleAndSummaryColor(getContext(), view);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package app.revanced.extension.tiktok.settings.preference;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
@@ -14,11 +15,10 @@ import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import app.revanced.extension.shared.settings.StringSetting;
|
||||
import app.revanced.extension.tiktok.Utils;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class RangeValuePreference extends DialogPreference {
|
||||
private final Context context;
|
||||
|
||||
private String minValue;
|
||||
|
||||
private String maxValue;
|
||||
@@ -29,7 +29,6 @@ public class RangeValuePreference extends DialogPreference {
|
||||
|
||||
public RangeValuePreference(Context context, String title, String summary, StringSetting setting) {
|
||||
super(context);
|
||||
this.context = context;
|
||||
setTitle(title);
|
||||
setSummary(summary);
|
||||
setKey(setting.key);
|
||||
@@ -53,41 +52,52 @@ public class RangeValuePreference extends DialogPreference {
|
||||
return mValue;
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
@Override
|
||||
protected View onCreateDialogView() {
|
||||
minValue = getValue().split("-")[0];
|
||||
maxValue = getValue().split("-")[1];
|
||||
|
||||
Context context = getContext();
|
||||
|
||||
LinearLayout dialogView = new LinearLayout(context);
|
||||
dialogView.setOrientation(LinearLayout.VERTICAL);
|
||||
|
||||
// Min view
|
||||
LinearLayout minView = new LinearLayout(context);
|
||||
minView.setOrientation(LinearLayout.HORIZONTAL);
|
||||
dialogView.addView(minView);
|
||||
|
||||
TextView min = new TextView(context);
|
||||
min.setText("Min: ");
|
||||
minView.addView(min);
|
||||
|
||||
EditText minEditText = new EditText(context);
|
||||
minEditText.setInputType(InputType.TYPE_CLASS_NUMBER);
|
||||
minEditText.setText(minValue);
|
||||
minView.addView(minEditText);
|
||||
dialogView.addView(minView);
|
||||
|
||||
// Max view
|
||||
LinearLayout maxView = new LinearLayout(context);
|
||||
maxView.setOrientation(LinearLayout.HORIZONTAL);
|
||||
dialogView.addView(maxView);
|
||||
|
||||
TextView max = new TextView(context);
|
||||
max.setText("Max: ");
|
||||
maxView.addView(max);
|
||||
|
||||
EditText maxEditText = new EditText(context);
|
||||
maxEditText.setInputType(InputType.TYPE_CLASS_NUMBER);
|
||||
maxEditText.setText(maxValue);
|
||||
maxView.addView(maxEditText);
|
||||
dialogView.addView(maxView);
|
||||
|
||||
minEditText.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -98,12 +108,10 @@ public class RangeValuePreference extends DialogPreference {
|
||||
maxEditText.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -111,12 +119,21 @@ public class RangeValuePreference extends DialogPreference {
|
||||
maxValue = editable.toString();
|
||||
}
|
||||
});
|
||||
|
||||
return dialogView;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBindView(View view) {
|
||||
super.onBindView(view);
|
||||
|
||||
Utils.setTitleAndSummaryColor(getContext(), view);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
|
||||
builder.setPositiveButton(android.R.string.ok, (dialog, which) -> this.onClick(dialog, DialogInterface.BUTTON_POSITIVE));
|
||||
builder.setPositiveButton(android.R.string.ok, (dialog, which)
|
||||
-> this.onClick(dialog, DialogInterface.BUTTON_POSITIVE));
|
||||
builder.setNegativeButton(android.R.string.cancel, null);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,14 +18,12 @@ import org.jetbrains.annotations.NotNull;
|
||||
public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
||||
|
||||
@Override
|
||||
protected void syncSettingWithPreference(@NonNull @NotNull Preference pref,
|
||||
@NonNull @NotNull Setting<?> setting,
|
||||
protected void syncSettingWithPreference(@NonNull Preference pref,
|
||||
@NonNull Setting<?> setting,
|
||||
boolean applySettingToPreference) {
|
||||
if (pref instanceof RangeValuePreference) {
|
||||
RangeValuePreference rangeValuePref = (RangeValuePreference) pref;
|
||||
if (pref instanceof RangeValuePreference rangeValuePref) {
|
||||
Setting.privateSetValueFromString(setting, rangeValuePref.getValue());
|
||||
} else if (pref instanceof DownloadPathPreference) {
|
||||
DownloadPathPreference downloadPathPref = (DownloadPathPreference) pref;
|
||||
} else if (pref instanceof DownloadPathPreference downloadPathPref) {
|
||||
Setting.privateSetValueFromString(setting, downloadPathPref.getValue());
|
||||
} else {
|
||||
super.syncSettingWithPreference(pref, setting, applySettingToPreference);
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
package app.revanced.extension.tiktok.settings.preference;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.settings.preference.ReVancedAboutPreference;
|
||||
import app.revanced.extension.tiktok.Utils;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class ReVancedTikTokAboutPreference extends ReVancedAboutPreference {
|
||||
|
||||
/**
|
||||
@@ -23,22 +25,11 @@ public class ReVancedTikTokAboutPreference extends ReVancedAboutPreference {
|
||||
"revanced_settings_about_links_header", "Official links"
|
||||
);
|
||||
|
||||
{
|
||||
//noinspection deprecation
|
||||
setTitle("About");
|
||||
}
|
||||
|
||||
public ReVancedTikTokAboutPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
}
|
||||
public ReVancedTikTokAboutPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
public ReVancedTikTokAboutPreference(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
public ReVancedTikTokAboutPreference(Context context) {
|
||||
super(context);
|
||||
|
||||
setTitle("About");
|
||||
setSummary("About ReVanced");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -52,4 +43,11 @@ public class ReVancedTikTokAboutPreference extends ReVancedAboutPreference {
|
||||
|
||||
return String.format(format, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBindView(View view) {
|
||||
super.onBindView(view);
|
||||
|
||||
Utils.setTitleAndSummaryColor(getContext(), view);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,16 +2,26 @@ package app.revanced.extension.tiktok.settings.preference;
|
||||
|
||||
import android.content.Context;
|
||||
import android.preference.SwitchPreference;
|
||||
import android.view.View;
|
||||
|
||||
import app.revanced.extension.shared.settings.BooleanSetting;
|
||||
import app.revanced.extension.tiktok.Utils;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class TogglePreference extends SwitchPreference {
|
||||
|
||||
public TogglePreference(Context context, String title, String summary, BooleanSetting setting) {
|
||||
super(context);
|
||||
this.setTitle(title);
|
||||
this.setSummary(summary);
|
||||
this.setKey(setting.key);
|
||||
this.setChecked(setting.get());
|
||||
setTitle(title);
|
||||
setSummary(summary);
|
||||
setKey(setting.key);
|
||||
setChecked(setting.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBindView(View view) {
|
||||
super.onBindView(view);
|
||||
|
||||
Utils.setTitleAndSummaryColor(getContext(), view);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ public final class ChangeStartPagePatch {
|
||||
/**
|
||||
* Unmodified type, and same as un-patched.
|
||||
*/
|
||||
ORIGINAL("", null),
|
||||
DEFAULT("", null),
|
||||
|
||||
/**
|
||||
* Browse id.
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ForceOriginalAudioPatch {
|
||||
|
||||
private static final String DEFAULT_AUDIO_TRACKS_IDENTIFIER = "original";
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean isDefaultAudioStream(boolean isDefault, String audioTrackId, String audioTrackDisplayName) {
|
||||
try {
|
||||
if (!Settings.FORCE_ORIGINAL_AUDIO.get()) {
|
||||
return isDefault;
|
||||
}
|
||||
|
||||
if (audioTrackDisplayName.isEmpty()) {
|
||||
// Older app targets can have empty audio tracks and these might be placeholders.
|
||||
// The real audio tracks are called after these.
|
||||
return isDefault;
|
||||
}
|
||||
|
||||
Logger.printDebug(() -> "default: " + String.format("%-5s", isDefault) + " id: "
|
||||
+ String.format("%-8s", audioTrackId) + " name:" + audioTrackDisplayName);
|
||||
|
||||
final boolean isOriginal = audioTrackDisplayName.contains(DEFAULT_AUDIO_TRACKS_IDENTIFIER);
|
||||
if (isOriginal) {
|
||||
Logger.printDebug(() -> "Using audio: " + audioTrackId);
|
||||
}
|
||||
|
||||
return isOriginal;
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "isDefaultAudioStream failure", ex);
|
||||
}
|
||||
|
||||
return isDefault;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class FullscreenPanelsRemoverPatch {
|
||||
public static int getFullscreenPanelsVisibility() {
|
||||
return Settings.HIDE_FULLSCREEN_PANELS.get() ? View.GONE : View.VISIBLE;
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,7 @@ public final class MiniplayerPatch {
|
||||
*/
|
||||
DISABLED(false, null),
|
||||
/** Unmodified type, and same as un-patched. */
|
||||
ORIGINAL(null, null),
|
||||
DEFAULT(null, null),
|
||||
/**
|
||||
* Exactly the same as MINIMAL and only here for migration of user settings.
|
||||
* Eventually this should be deleted.
|
||||
@@ -182,7 +182,7 @@ public final class MiniplayerPatch {
|
||||
* effectively disabling the miniplayer.
|
||||
*/
|
||||
public static boolean getMiniplayerOnCloseHandler(boolean original) {
|
||||
return CURRENT_TYPE == ORIGINAL
|
||||
return CURRENT_TYPE == DEFAULT
|
||||
? original
|
||||
: CURRENT_TYPE == DISABLED;
|
||||
}
|
||||
@@ -201,7 +201,7 @@ public final class MiniplayerPatch {
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean getModernMiniplayerOverride(boolean original) {
|
||||
return CURRENT_TYPE == ORIGINAL
|
||||
return CURRENT_TYPE == DEFAULT
|
||||
? original
|
||||
: CURRENT_TYPE.isModern();
|
||||
}
|
||||
@@ -229,7 +229,7 @@ public final class MiniplayerPatch {
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean getModernFeatureFlagsActiveOverride(boolean original) {
|
||||
if (CURRENT_TYPE == ORIGINAL) {
|
||||
if (CURRENT_TYPE == DEFAULT) {
|
||||
return original;
|
||||
}
|
||||
|
||||
@@ -240,7 +240,7 @@ public final class MiniplayerPatch {
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean enableMiniplayerDoubleTapAction(boolean original) {
|
||||
if (CURRENT_TYPE == ORIGINAL) {
|
||||
if (CURRENT_TYPE == DEFAULT) {
|
||||
return original;
|
||||
}
|
||||
|
||||
@@ -251,7 +251,7 @@ public final class MiniplayerPatch {
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean enableMiniplayerDragAndDrop(boolean original) {
|
||||
if (CURRENT_TYPE == ORIGINAL) {
|
||||
if (CURRENT_TYPE == DEFAULT) {
|
||||
return original;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class OpenVideosFullscreen {
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean openVideoFullscreenPortrait(boolean original) {
|
||||
return Settings.OPEN_VIDEOS_FULLSCREEN_PORTRAIT.get();
|
||||
}
|
||||
}
|
||||
@@ -85,7 +85,8 @@ public final class AdsFilter extends Filter {
|
||||
"composite_concurrent_carousel_layout",
|
||||
"carousel_headered_layout",
|
||||
"full_width_portrait_image_layout",
|
||||
"brand_video_shelf"
|
||||
"brand_video_shelf",
|
||||
"brand_video_singleton"
|
||||
);
|
||||
|
||||
final var movieAds = new StringFilterGroup(
|
||||
|
||||
@@ -14,6 +14,11 @@ final class CommentsFilter extends Filter {
|
||||
private final ByteArrayFilterGroup emojiPickerBufferGroup;
|
||||
|
||||
public CommentsFilter() {
|
||||
var chatSummary = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_CHAT_SUMMARY,
|
||||
"live_chat_summary_banner.eml"
|
||||
);
|
||||
|
||||
var commentsByMembers = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_BY_MEMBERS_HEADER,
|
||||
"sponsorships_comments_header.eml",
|
||||
@@ -54,6 +59,7 @@ final class CommentsFilter extends Filter {
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
chatSummary,
|
||||
commentsByMembers,
|
||||
comments,
|
||||
createAShort,
|
||||
|
||||
@@ -36,7 +36,6 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
);
|
||||
|
||||
private final StringTrieSearch exceptions = new StringTrieSearch();
|
||||
private final StringFilterGroup searchResultShelfHeader;
|
||||
private final StringFilterGroup inFeedSurvey;
|
||||
private final StringFilterGroup notifyMe;
|
||||
private final StringFilterGroup expandableMetadata;
|
||||
@@ -194,11 +193,6 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
"timed_reaction"
|
||||
);
|
||||
|
||||
searchResultShelfHeader = new StringFilterGroup(
|
||||
Settings.HIDE_SEARCH_RESULT_SHELF_HEADER,
|
||||
"shelf_header.eml"
|
||||
);
|
||||
|
||||
notifyMe = new StringFilterGroup(
|
||||
Settings.HIDE_NOTIFY_ME_BUTTON,
|
||||
"set_reminder_button"
|
||||
@@ -324,9 +318,6 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO: This also hides the feed Shorts shelf header
|
||||
if (matchedGroup == searchResultShelfHeader && contentIndex != 0) return false;
|
||||
|
||||
if (matchedGroup == horizontalShelves) {
|
||||
if (contentIndex == 0 && hideShelves()) {
|
||||
return super.isFiltered(path, identifier, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
package app.revanced.extension.youtube.patches.spoof;
|
||||
|
||||
import android.media.MediaCodecInfo;
|
||||
import android.media.MediaCodecList;
|
||||
import android.os.Build;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
public class DeviceHardwareSupport {
|
||||
public static final boolean DEVICE_HAS_HARDWARE_DECODING_VP9;
|
||||
public static final boolean DEVICE_HAS_HARDWARE_DECODING_AV1;
|
||||
|
||||
static {
|
||||
boolean vp9found = false;
|
||||
boolean av1found = false;
|
||||
MediaCodecList codecList = new MediaCodecList(MediaCodecList.ALL_CODECS);
|
||||
final boolean deviceIsAndroidTenOrLater = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
|
||||
|
||||
for (MediaCodecInfo codecInfo : codecList.getCodecInfos()) {
|
||||
final boolean isHardwareAccelerated = deviceIsAndroidTenOrLater
|
||||
? codecInfo.isHardwareAccelerated()
|
||||
: !codecInfo.getName().startsWith("OMX.google"); // Software decoder.
|
||||
if (isHardwareAccelerated && !codecInfo.isEncoder()) {
|
||||
for (String type : codecInfo.getSupportedTypes()) {
|
||||
if (type.equalsIgnoreCase("video/x-vnd.on2.vp9")) {
|
||||
vp9found = true;
|
||||
} else if (type.equalsIgnoreCase("video/av01")) {
|
||||
av1found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DEVICE_HAS_HARDWARE_DECODING_VP9 = vp9found;
|
||||
DEVICE_HAS_HARDWARE_DECODING_AV1 = av1found;
|
||||
|
||||
Logger.printDebug(() -> DEVICE_HAS_HARDWARE_DECODING_AV1
|
||||
? "Device supports AV1 hardware decoding\n"
|
||||
: "Device does not support AV1 hardware decoding\n"
|
||||
+ (DEVICE_HAS_HARDWARE_DECODING_VP9
|
||||
? "Device supports VP9 hardware decoding"
|
||||
: "Device does not support VP9 hardware decoding"));
|
||||
}
|
||||
|
||||
public static boolean allowVP9() {
|
||||
return DEVICE_HAS_HARDWARE_DECODING_VP9 && !Settings.SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC.get();
|
||||
}
|
||||
|
||||
public static boolean allowAV1() {
|
||||
return allowVP9() && DEVICE_HAS_HARDWARE_DECODING_AV1;
|
||||
}
|
||||
}
|
||||
@@ -55,7 +55,7 @@ public class ThemePatch {
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean gradientLoadingScreenEnabled() {
|
||||
public static boolean gradientLoadingScreenEnabled(boolean original) {
|
||||
return GRADIENT_LOADING_SCREEN_ENABLED;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,25 +2,42 @@ package app.revanced.extension.youtube.settings;
|
||||
|
||||
import static java.lang.Boolean.FALSE;
|
||||
import static java.lang.Boolean.TRUE;
|
||||
import static app.revanced.extension.shared.settings.Setting.*;
|
||||
import static app.revanced.extension.shared.settings.Setting.Availability;
|
||||
import static app.revanced.extension.shared.settings.Setting.migrateFromOldPreferences;
|
||||
import static app.revanced.extension.shared.settings.Setting.migrateOldSettingToNew;
|
||||
import static app.revanced.extension.shared.settings.Setting.parent;
|
||||
import static app.revanced.extension.shared.settings.Setting.parentsAny;
|
||||
import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.StartPage;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideExpandCloseAvailability;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHorizontalDragAvailability;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.*;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MINIMAL;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_1;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_2;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_3;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_4;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.PHONE;
|
||||
import static app.revanced.extension.youtube.patches.SeekbarThumbnailsPatch.SeekbarThumbnailsHighQualityAvailability;
|
||||
import static app.revanced.extension.youtube.patches.VersionCheckPatch.IS_19_17_OR_GREATER;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.*;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.IGNORE;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.MANUAL_SKIP;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY_ONCE;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.settings.*;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.shared.settings.BooleanSetting;
|
||||
import app.revanced.extension.shared.settings.EnumSetting;
|
||||
import app.revanced.extension.shared.settings.FloatSetting;
|
||||
import app.revanced.extension.shared.settings.IntegerSetting;
|
||||
import app.revanced.extension.shared.settings.LongSetting;
|
||||
import app.revanced.extension.shared.settings.Setting;
|
||||
import app.revanced.extension.shared.settings.StringSetting;
|
||||
import app.revanced.extension.shared.settings.preference.SharedPrefCategory;
|
||||
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.DeArrowAvailability;
|
||||
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.StillImagesAvailability;
|
||||
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.ThumbnailOption;
|
||||
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.ThumbnailStillTime;
|
||||
import app.revanced.extension.youtube.patches.spoof.ClientType;
|
||||
import app.revanced.extension.youtube.patches.spoof.SpoofVideoStreamsPatch;
|
||||
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
|
||||
|
||||
public class Settings extends BaseSettings {
|
||||
@@ -35,19 +52,21 @@ public class Settings extends BaseSettings {
|
||||
public static final FloatSetting PLAYBACK_SPEED_DEFAULT = new FloatSetting("revanced_playback_speed_default", -2.0f);
|
||||
public static final StringSetting CUSTOM_PLAYBACK_SPEEDS = new StringSetting("revanced_custom_playback_speeds",
|
||||
"0.25\n0.5\n0.75\n0.9\n0.95\n1.0\n1.05\n1.1\n1.25\n1.5\n1.75\n2.0\n3.0\n4.0\n5.0", true);
|
||||
// Audio
|
||||
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", FALSE);
|
||||
|
||||
// Ads
|
||||
public static final BooleanSetting HIDE_FULLSCREEN_ADS = new BooleanSetting("revanced_hide_fullscreen_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_BUTTONED_ADS = new BooleanSetting("revanced_hide_buttoned_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_FULLSCREEN_ADS = new BooleanSetting("revanced_hide_fullscreen_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_GENERAL_ADS = new BooleanSetting("revanced_hide_general_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_GET_PREMIUM = new BooleanSetting("revanced_hide_get_premium", TRUE);
|
||||
public static final BooleanSetting HIDE_HIDE_LATEST_POSTS = new BooleanSetting("revanced_hide_latest_posts_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_MERCHANDISE_BANNERS = new BooleanSetting("revanced_hide_merchandise_banners", TRUE);
|
||||
public static final BooleanSetting HIDE_PAID_PROMOTION_LABEL = new BooleanSetting("revanced_hide_paid_promotion_label", TRUE);
|
||||
public static final BooleanSetting HIDE_PRODUCTS_BANNER = new BooleanSetting("revanced_hide_products_banner", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_STORE_SHELF = new BooleanSetting("revanced_hide_player_store_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_SHOPPING_LINKS = new BooleanSetting("revanced_hide_shopping_links", TRUE);
|
||||
public static final BooleanSetting HIDE_PRODUCTS_BANNER = new BooleanSetting("revanced_hide_products_banner", TRUE);
|
||||
public static final BooleanSetting HIDE_SELF_SPONSOR = new BooleanSetting("revanced_hide_self_sponsor_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_SHOPPING_LINKS = new BooleanSetting("revanced_hide_shopping_links", TRUE);
|
||||
public static final BooleanSetting HIDE_VIDEO_ADS = new BooleanSetting("revanced_hide_video_ads", TRUE, true);
|
||||
public static final BooleanSetting HIDE_VISIT_STORE_BUTTON = new BooleanSetting("revanced_hide_visit_store_button", TRUE);
|
||||
public static final BooleanSetting HIDE_WEB_SEARCH_RESULTS = new BooleanSetting("revanced_hide_web_search_results", TRUE);
|
||||
@@ -55,9 +74,26 @@ public class Settings extends BaseSettings {
|
||||
// Feed
|
||||
public static final BooleanSetting HIDE_ALBUM_CARDS = new BooleanSetting("revanced_hide_album_cards", FALSE, true);
|
||||
public static final BooleanSetting HIDE_ARTIST_CARDS = new BooleanSetting("revanced_hide_artist_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_EXPANDABLE_CHIP = new BooleanSetting("revanced_hide_expandable_chip", TRUE);
|
||||
public static final BooleanSetting HIDE_CHIPS_SHELF = new BooleanSetting("revanced_hide_chips_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMUNITY_POSTS = new BooleanSetting("revanced_hide_community_posts", FALSE);
|
||||
public static final BooleanSetting HIDE_COMPACT_BANNER = new BooleanSetting("revanced_hide_compact_banner", TRUE);
|
||||
public static final BooleanSetting HIDE_CROWDFUNDING_BOX = new BooleanSetting("revanced_hide_crowdfunding_box", FALSE, true);
|
||||
public static final BooleanSetting HIDE_DOODLES = new BooleanSetting("revanced_hide_doodles", FALSE, true, "revanced_hide_doodles_user_dialog_message");
|
||||
|
||||
public static final BooleanSetting HIDE_EXPANDABLE_CHIP = new BooleanSetting("revanced_hide_expandable_chip", TRUE);
|
||||
public static final BooleanSetting HIDE_FEED_SURVEY = new BooleanSetting("revanced_hide_feed_survey", TRUE);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_FEED = new BooleanSetting("revanced_hide_filter_bar_feed_in_feed", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_RELATED_VIDEOS = new BooleanSetting("revanced_hide_filter_bar_feed_in_related_videos", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_SEARCH = new BooleanSetting("revanced_hide_filter_bar_feed_in_search", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FLOATING_MICROPHONE_BUTTON = new BooleanSetting("revanced_hide_floating_microphone_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_HORIZONTAL_SHELVES = new BooleanSetting("revanced_hide_horizontal_shelves", TRUE);
|
||||
public static final BooleanSetting HIDE_IMAGE_SHELF = new BooleanSetting("revanced_hide_image_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_MIX_PLAYLISTS = new BooleanSetting("revanced_hide_mix_playlists", TRUE);
|
||||
public static final BooleanSetting HIDE_MOVIES_SECTION = new BooleanSetting("revanced_hide_movies_section", TRUE);
|
||||
public static final BooleanSetting HIDE_NOTIFY_ME_BUTTON = new BooleanSetting("revanced_hide_notify_me_button", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYABLES = new BooleanSetting("revanced_hide_playables", TRUE);
|
||||
public static final BooleanSetting HIDE_SEARCH_RESULT_RECOMMENDATIONS = new BooleanSetting("revanced_hide_search_result_recommendations", TRUE);
|
||||
public static final BooleanSetting HIDE_SHOW_MORE_BUTTON = new BooleanSetting("revanced_hide_show_more_button", TRUE, true);
|
||||
// Alternative thumbnails
|
||||
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_HOME = new EnumSetting<>("revanced_alt_thumbnail_home", ThumbnailOption.ORIGINAL);
|
||||
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_SUBSCRIPTIONS = new EnumSetting<>("revanced_alt_thumbnail_subscription", ThumbnailOption.ORIGINAL);
|
||||
@@ -69,7 +105,6 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting ALT_THUMBNAIL_DEARROW_CONNECTION_TOAST = new BooleanSetting("revanced_alt_thumbnail_dearrow_connection_toast", TRUE, new DeArrowAvailability());
|
||||
public static final EnumSetting<ThumbnailStillTime> ALT_THUMBNAIL_STILLS_TIME = new EnumSetting<>("revanced_alt_thumbnail_stills_time", ThumbnailStillTime.MIDDLE, new StillImagesAvailability());
|
||||
public static final BooleanSetting ALT_THUMBNAIL_STILLS_FAST = new BooleanSetting("revanced_alt_thumbnail_stills_fast", FALSE, new StillImagesAvailability());
|
||||
|
||||
// Hide keyword content
|
||||
public static final BooleanSetting HIDE_KEYWORD_CONTENT_HOME = new BooleanSetting("revanced_hide_keyword_content_home", FALSE);
|
||||
public static final BooleanSetting HIDE_KEYWORD_CONTENT_SUBSCRIPTIONS = new BooleanSetting("revanced_hide_keyword_content_subscriptions", FALSE);
|
||||
@@ -77,63 +112,38 @@ public class Settings extends BaseSettings {
|
||||
public static final StringSetting HIDE_KEYWORD_CONTENT_PHRASES = new StringSetting("revanced_hide_keyword_content_phrases", "",
|
||||
parentsAny(HIDE_KEYWORD_CONTENT_HOME, HIDE_KEYWORD_CONTENT_SUBSCRIPTIONS, HIDE_KEYWORD_CONTENT_SEARCH));
|
||||
|
||||
// Uncategorized layout related settings. Do not add to this section, and instead move these out and categorize them.
|
||||
public static final BooleanSetting DISABLE_SUGGESTED_VIDEO_END_SCREEN = new BooleanSetting("revanced_disable_suggested_video_end_screen", FALSE, true);
|
||||
public static final BooleanSetting GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_gradient_loading_screen", FALSE, true);
|
||||
public static final BooleanSetting HIDE_HORIZONTAL_SHELVES = new BooleanSetting("revanced_hide_horizontal_shelves", TRUE);
|
||||
public static final BooleanSetting HIDE_CAPTIONS_BUTTON = new BooleanSetting("revanced_hide_captions_button", FALSE);
|
||||
public static final BooleanSetting HIDE_CHANNEL_BAR = new BooleanSetting("revanced_hide_channel_bar", FALSE);
|
||||
public static final BooleanSetting HIDE_CHANNEL_MEMBER_SHELF = new BooleanSetting("revanced_hide_channel_member_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_CHIPS_SHELF = new BooleanSetting("revanced_hide_chips_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_community_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMUNITY_POSTS = new BooleanSetting("revanced_hide_community_posts", FALSE);
|
||||
public static final BooleanSetting HIDE_COMPACT_BANNER = new BooleanSetting("revanced_hide_compact_banner", TRUE);
|
||||
public static final BooleanSetting HIDE_CROWDFUNDING_BOX = new BooleanSetting("revanced_hide_crowdfunding_box", FALSE, true);
|
||||
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
|
||||
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_FEED_SURVEY = new BooleanSetting("revanced_hide_feed_survey", TRUE);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_FEED = new BooleanSetting("revanced_hide_filter_bar_feed_in_feed", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_RELATED_VIDEOS = new BooleanSetting("revanced_hide_filter_bar_feed_in_related_videos", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_SEARCH = new BooleanSetting("revanced_hide_filter_bar_feed_in_search", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FLOATING_MICROPHONE_BUTTON = new BooleanSetting("revanced_hide_floating_microphone_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_FULLSCREEN_PANELS = new BooleanSetting("revanced_hide_fullscreen_panels", TRUE, true);
|
||||
public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
|
||||
public static final BooleanSetting HIDE_IMAGE_SHELF = new BooleanSetting("revanced_hide_image_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_JOIN_MEMBERSHIP_BUTTON = new BooleanSetting("revanced_hide_join_membership_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHOW_MORE_BUTTON = new BooleanSetting("revanced_hide_show_more_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_MEDICAL_PANELS = new BooleanSetting("revanced_hide_medical_panels", TRUE);
|
||||
public static final BooleanSetting HIDE_MIX_PLAYLISTS = new BooleanSetting("revanced_hide_mix_playlists", TRUE);
|
||||
public static final BooleanSetting HIDE_MOVIES_SECTION = new BooleanSetting("revanced_hide_movies_section", TRUE);
|
||||
public static final BooleanSetting HIDE_NOTIFY_ME_BUTTON = new BooleanSetting("revanced_hide_notify_me_button", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYABLES = new BooleanSetting("revanced_hide_playables", TRUE);
|
||||
public static final BooleanSetting HIDE_QUICK_ACTIONS = new BooleanSetting("revanced_hide_quick_actions", FALSE);
|
||||
public static final BooleanSetting HIDE_RELATED_VIDEOS = new BooleanSetting("revanced_hide_related_videos", FALSE);
|
||||
public static final BooleanSetting HIDE_SEARCH_RESULT_SHELF_HEADER = new BooleanSetting("revanced_hide_search_result_shelf_header", FALSE);
|
||||
public static final BooleanSetting HIDE_SUBSCRIBERS_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_subscribers_community_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_TIMED_REACTIONS = new BooleanSetting("revanced_hide_timed_reactions", TRUE);
|
||||
public static final BooleanSetting HIDE_TIMESTAMP = new BooleanSetting("revanced_hide_timestamp", FALSE);
|
||||
public static final BooleanSetting HIDE_VIDEO_CHANNEL_WATERMARK = new BooleanSetting("revanced_hide_channel_watermark", TRUE);
|
||||
public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_SEARCH_RESULT_RECOMMENDATIONS = new BooleanSetting("revanced_hide_search_result_recommendations", TRUE);
|
||||
public static final IntegerSetting PLAYER_OVERLAY_OPACITY = new IntegerSetting("revanced_player_overlay_opacity",100, true);
|
||||
public static final BooleanSetting PLAYER_POPUP_PANELS = new BooleanSetting("revanced_hide_player_popup_panels", FALSE);
|
||||
|
||||
// Player
|
||||
public static final BooleanSetting DISABLE_FULLSCREEN_AMBIENT_MODE = new BooleanSetting("revanced_disable_fullscreen_ambient_mode", TRUE, true);
|
||||
public static final BooleanSetting DISABLE_ROLLING_NUMBER_ANIMATIONS = new BooleanSetting("revanced_disable_rolling_number_animations", FALSE);
|
||||
public static final BooleanSetting DISABLE_LIKE_SUBSCRIBE_GLOW = new BooleanSetting("revanced_disable_like_subscribe_glow", FALSE);
|
||||
public static final BooleanSetting HIDE_AUTOPLAY_BUTTON = new BooleanSetting("revanced_hide_autoplay_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_hide_cast_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS = new BooleanSetting("revanced_hide_player_previous_next_buttons", FALSE, true);
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_BUTTONS = new BooleanSetting("revanced_hide_player_buttons", FALSE, true);
|
||||
public static final BooleanSetting COPY_VIDEO_URL = new BooleanSetting("revanced_copy_video_url", FALSE);
|
||||
public static final BooleanSetting COPY_VIDEO_URL_TIMESTAMP = new BooleanSetting("revanced_copy_video_url_timestamp", TRUE);
|
||||
public static final BooleanSetting DISABLE_FULLSCREEN_AMBIENT_MODE = new BooleanSetting("revanced_disable_fullscreen_ambient_mode", TRUE, true);
|
||||
public static final BooleanSetting DISABLE_LIKE_SUBSCRIBE_GLOW = new BooleanSetting("revanced_disable_like_subscribe_glow", FALSE);
|
||||
public static final BooleanSetting DISABLE_ROLLING_NUMBER_ANIMATIONS = new BooleanSetting("revanced_disable_rolling_number_animations", FALSE);
|
||||
public static final BooleanSetting DISABLE_SUGGESTED_VIDEO_END_SCREEN = new BooleanSetting("revanced_disable_suggested_video_end_screen", FALSE, true);
|
||||
public static final BooleanSetting HIDE_AUTOPLAY_BUTTON = new BooleanSetting("revanced_hide_autoplay_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_CAPTIONS_BUTTON = new BooleanSetting("revanced_hide_captions_button", FALSE);
|
||||
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_hide_cast_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_CHANNEL_BAR = new BooleanSetting("revanced_hide_channel_bar", FALSE);
|
||||
public static final BooleanSetting HIDE_CHANNEL_MEMBER_SHELF = new BooleanSetting("revanced_hide_channel_member_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_community_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
|
||||
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
|
||||
public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_JOIN_MEMBERSHIP_BUTTON = new BooleanSetting("revanced_hide_join_membership_button", TRUE);
|
||||
public static final BooleanSetting HIDE_MEDICAL_PANELS = new BooleanSetting("revanced_hide_medical_panels", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS = new BooleanSetting("revanced_hide_player_previous_next_buttons", FALSE, true);
|
||||
public static final BooleanSetting HIDE_QUICK_ACTIONS = new BooleanSetting("revanced_hide_quick_actions", FALSE);
|
||||
public static final BooleanSetting HIDE_RELATED_VIDEOS = new BooleanSetting("revanced_hide_related_videos", FALSE);
|
||||
public static final BooleanSetting HIDE_SUBSCRIBERS_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_subscribers_community_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_TIMED_REACTIONS = new BooleanSetting("revanced_hide_timed_reactions", TRUE);
|
||||
public static final BooleanSetting HIDE_VIDEO_CHANNEL_WATERMARK = new BooleanSetting("revanced_hide_channel_watermark", TRUE);
|
||||
public static final BooleanSetting PLAYBACK_SPEED_DIALOG_BUTTON = new BooleanSetting("revanced_playback_speed_dialog_button", FALSE);
|
||||
|
||||
public static final BooleanSetting PLAYER_POPUP_PANELS = new BooleanSetting("revanced_hide_player_popup_panels", FALSE);
|
||||
public static final IntegerSetting PLAYER_OVERLAY_OPACITY = new IntegerSetting("revanced_player_overlay_opacity", 100, true);
|
||||
public static final BooleanSetting OPEN_VIDEOS_FULLSCREEN_PORTRAIT = new BooleanSetting("revanced_open_videos_fullscreen_portrait", FALSE);
|
||||
// Miniplayer
|
||||
public static final EnumSetting<MiniplayerType> MINIPLAYER_TYPE = new EnumSetting<>("revanced_miniplayer_type", MiniplayerType.ORIGINAL, true);
|
||||
public static final EnumSetting<MiniplayerType> MINIPLAYER_TYPE = new EnumSetting<>("revanced_miniplayer_type", MiniplayerType.DEFAULT, true);
|
||||
private static final Availability MINIPLAYER_ANY_MODERN = MINIPLAYER_TYPE.availability(MODERN_1, MODERN_2, MODERN_3, MODERN_4);
|
||||
public static final BooleanSetting MINIPLAYER_DOUBLE_TAP_ACTION = new BooleanSetting("revanced_miniplayer_double_tap_action", TRUE, true, MINIPLAYER_ANY_MODERN);
|
||||
public static final BooleanSetting MINIPLAYER_DRAG_AND_DROP = new BooleanSetting("revanced_miniplayer_drag_and_drop", TRUE, true, MINIPLAYER_ANY_MODERN);
|
||||
@@ -144,21 +154,19 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting MINIPLAYER_ROUNDED_CORNERS = new BooleanSetting("revanced_miniplayer_rounded_corners", TRUE, true, MINIPLAYER_ANY_MODERN);
|
||||
public static final IntegerSetting MINIPLAYER_WIDTH_DIP = new IntegerSetting("revanced_miniplayer_width_dip", 192, true, MINIPLAYER_ANY_MODERN);
|
||||
public static final IntegerSetting MINIPLAYER_OPACITY = new IntegerSetting("revanced_miniplayer_opacity", 100, true, MINIPLAYER_TYPE.availability(MODERN_1));
|
||||
|
||||
// External downloader
|
||||
public static final BooleanSetting EXTERNAL_DOWNLOADER = new BooleanSetting("revanced_external_downloader", FALSE);
|
||||
public static final BooleanSetting EXTERNAL_DOWNLOADER_ACTION_BUTTON = new BooleanSetting("revanced_external_downloader_action_button", FALSE);
|
||||
public static final StringSetting EXTERNAL_DOWNLOADER_PACKAGE_NAME = new StringSetting("revanced_external_downloader_name",
|
||||
"org.schabi.newpipe" /* NewPipe */, parentsAny(EXTERNAL_DOWNLOADER, EXTERNAL_DOWNLOADER_ACTION_BUTTON));
|
||||
|
||||
// Comments
|
||||
public static final BooleanSetting HIDE_COMMENTS_CHAT_SUMMARY = new BooleanSetting("revanced_hide_comments_chat_summary", FALSE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_BY_MEMBERS_HEADER = new BooleanSetting("revanced_hide_comments_by_members_header", FALSE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_SECTION = new BooleanSetting("revanced_hide_comments_section", FALSE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_CREATE_A_SHORT_BUTTON = new BooleanSetting("revanced_hide_comments_create_a_short_button", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_PREVIEW_COMMENT = new BooleanSetting("revanced_hide_comments_preview_comment", FALSE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_SECTION = new BooleanSetting("revanced_hide_comments_section", FALSE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_THANKS_BUTTON = new BooleanSetting("revanced_hide_comments_thanks_button", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_TIMESTAMP_AND_EMOJI_BUTTONS = new BooleanSetting("revanced_hide_comments_timestamp_and_emoji_buttons", TRUE);
|
||||
|
||||
// Description
|
||||
public static final BooleanSetting HIDE_ATTRIBUTES_SECTION = new BooleanSetting("revanced_hide_attributes_section", FALSE);
|
||||
public static final BooleanSetting HIDE_CHAPTERS_SECTION = new BooleanSetting("revanced_hide_chapters_section", TRUE);
|
||||
@@ -166,47 +174,43 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_KEY_CONCEPTS_SECTION = new BooleanSetting("revanced_hide_key_concepts_section", FALSE);
|
||||
public static final BooleanSetting HIDE_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);
|
||||
public static final BooleanSetting HIDE_TRANSCRIPT_SECTION = new BooleanSetting("revanced_hide_transcript_section", TRUE);
|
||||
|
||||
// Action buttons
|
||||
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHARE_BUTTON = new BooleanSetting("revanced_hide_share_button", FALSE);
|
||||
public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE);
|
||||
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_DOWNLOAD_BUTTON = new BooleanSetting("revanced_hide_download_button", FALSE);
|
||||
public static final BooleanSetting HIDE_THANKS_BUTTON = new BooleanSetting("revanced_hide_thanks_button", TRUE);
|
||||
public static final BooleanSetting HIDE_CLIP_BUTTON = new BooleanSetting("revanced_hide_clip_button", TRUE);
|
||||
public static final BooleanSetting HIDE_DOWNLOAD_BUTTON = new BooleanSetting("revanced_hide_download_button", FALSE);
|
||||
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYLIST_BUTTON = new BooleanSetting("revanced_hide_playlist_button", FALSE);
|
||||
|
||||
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHARE_BUTTON = new BooleanSetting("revanced_hide_share_button", FALSE);
|
||||
public static final BooleanSetting HIDE_THANKS_BUTTON = new BooleanSetting("revanced_hide_thanks_button", TRUE);
|
||||
// Player flyout menu items
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_CAPTIONS = new BooleanSetting("revanced_hide_player_flyout_captions", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_ADDITIONAL_SETTINGS = new BooleanSetting("revanced_hide_player_flyout_additional_settings", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOOP_VIDEO = new BooleanSetting("revanced_hide_player_flyout_loop_video", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_AMBIENT_MODE = new BooleanSetting("revanced_hide_player_flyout_ambient_mode", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_HELP = new BooleanSetting("revanced_hide_player_flyout_help", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SPEED = new BooleanSetting("revanced_hide_player_flyout_speed", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MORE_INFO = new BooleanSetting("revanced_hide_player_flyout_more_info", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOCK_SCREEN = new BooleanSetting("revanced_hide_player_flyout_lock_screen", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_AUDIO_TRACK = new BooleanSetting("revanced_hide_player_flyout_audio_track", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_CAPTIONS = new BooleanSetting("revanced_hide_player_flyout_captions", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_HELP = new BooleanSetting("revanced_hide_player_flyout_help", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOCK_SCREEN = new BooleanSetting("revanced_hide_player_flyout_lock_screen", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOOP_VIDEO = new BooleanSetting("revanced_hide_player_flyout_loop_video", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MORE_INFO = new BooleanSetting("revanced_hide_player_flyout_more_info", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SLEEP_TIMER = new BooleanSetting("revanced_hide_player_flyout_sleep_timer", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SPEED = new BooleanSetting("revanced_hide_player_flyout_speed", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_STABLE_VOLUME = new BooleanSetting("revanced_hide_player_flyout_stable_volume", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_WATCH_IN_VR = new BooleanSetting("revanced_hide_player_flyout_watch_in_vr", TRUE);
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_video_quality_menu_footer", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_player_flyout_video_quality_footer", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_WATCH_IN_VR = new BooleanSetting("revanced_hide_player_flyout_watch_in_vr", TRUE);
|
||||
|
||||
// General layout
|
||||
public static final EnumSetting<StartPage> CHANGE_START_PAGE = new EnumSetting<>("revanced_change_start_page", StartPage.ORIGINAL, true);
|
||||
public static final BooleanSetting SPOOF_APP_VERSION = new BooleanSetting("revanced_spoof_app_version", FALSE, true, "revanced_spoof_app_version_user_dialog_message");
|
||||
public static final StringSetting SPOOF_APP_VERSION_TARGET = new StringSetting("revanced_spoof_app_version_target", IS_19_17_OR_GREATER ? "19.35.36" : "17.33.42", true, parent(SPOOF_APP_VERSION));
|
||||
public static final BooleanSetting TABLET_LAYOUT = new BooleanSetting("revanced_tablet_layout", FALSE, true, "revanced_tablet_layout_user_dialog_message");
|
||||
public static final BooleanSetting WIDE_SEARCHBAR = new BooleanSetting("revanced_wide_searchbar", FALSE, true);
|
||||
public static final BooleanSetting BYPASS_IMAGE_REGION_RESTRICTIONS = new BooleanSetting("revanced_bypass_image_region_restrictions", FALSE, true);
|
||||
public static final BooleanSetting GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_gradient_loading_screen", FALSE, true);
|
||||
public static final BooleanSetting REMOVE_VIEWER_DISCRETION_DIALOG = new BooleanSetting("revanced_remove_viewer_discretion_dialog", FALSE,
|
||||
"revanced_remove_viewer_discretion_dialog_user_dialog_message");
|
||||
|
||||
public static final BooleanSetting SPOOF_APP_VERSION = new BooleanSetting("revanced_spoof_app_version", FALSE, true, "revanced_spoof_app_version_user_dialog_message");
|
||||
public static final BooleanSetting TABLET_LAYOUT = new BooleanSetting("revanced_tablet_layout", FALSE, true, "revanced_tablet_layout_user_dialog_message");
|
||||
public static final BooleanSetting WIDE_SEARCHBAR = new BooleanSetting("revanced_wide_searchbar", FALSE, true);
|
||||
public static final EnumSetting<StartPage> CHANGE_START_PAGE = new EnumSetting<>("revanced_change_start_page", StartPage.DEFAULT, true);
|
||||
public static final StringSetting SPOOF_APP_VERSION_TARGET = new StringSetting("revanced_spoof_app_version_target", IS_19_17_OR_GREATER ? "19.35.36" : "17.33.42", true, parent(SPOOF_APP_VERSION));
|
||||
// Custom filter
|
||||
public static final BooleanSetting CUSTOM_FILTER = new BooleanSetting("revanced_custom_filter", FALSE);
|
||||
public static final StringSetting CUSTOM_FILTER_STRINGS = new StringSetting("revanced_custom_filter_strings", "", true, parent(CUSTOM_FILTER));
|
||||
|
||||
// Navigation buttons
|
||||
public static final BooleanSetting HIDE_HOME_BUTTON = new BooleanSetting("revanced_hide_home_button", FALSE, true);
|
||||
public static final BooleanSetting HIDE_CREATE_BUTTON = new BooleanSetting("revanced_hide_create_button", TRUE, true);
|
||||
@@ -216,71 +220,67 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting SWITCH_CREATE_WITH_NOTIFICATIONS_BUTTON = new BooleanSetting("revanced_switch_create_with_notifications_button", TRUE, true);
|
||||
|
||||
// Shorts
|
||||
public static final BooleanSetting DISABLE_SHORTS_BACKGROUND_PLAYBACK = new BooleanSetting("revanced_shorts_disable_background_playback", FALSE);
|
||||
public static final BooleanSetting DISABLE_RESUMING_SHORTS_PLAYER = new BooleanSetting("revanced_disable_resuming_shorts_player", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_HOME = new BooleanSetting("revanced_hide_shorts_home", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUBSCRIPTIONS = new BooleanSetting("revanced_hide_shorts_subscriptions", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH = new BooleanSetting("revanced_hide_shorts_search", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_JOIN_BUTTON = new BooleanSetting("revanced_hide_shorts_join_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_shorts_subscribe_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_PAUSED_OVERLAY_BUTTONS = new BooleanSetting("revanced_hide_shorts_paused_overlay_buttons", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SHOP_BUTTON = new BooleanSetting("revanced_hide_shorts_shop_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_TAGGED_PRODUCTS = new BooleanSetting("revanced_hide_shorts_tagged_products", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LOCATION_LABEL = new BooleanSetting("revanced_hide_shorts_location_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SAVE_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_save_sound_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_USE_TEMPLATE_BUTTON = new BooleanSetting("revanced_hide_shorts_use_template_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_UPCOMING_BUTTON = new BooleanSetting("revanced_hide_shorts_upcoming_button", TRUE);
|
||||
public static final BooleanSetting DISABLE_SHORTS_BACKGROUND_PLAYBACK = new BooleanSetting("revanced_shorts_disable_background_playback", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_CHANNEL_BAR = new BooleanSetting("revanced_hide_shorts_channel_bar", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_COMMENTS_BUTTON = new BooleanSetting("revanced_hide_shorts_comments_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_dislike_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_FULL_VIDEO_LINK_LABEL = new BooleanSetting("revanced_hide_shorts_full_video_link_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_GREEN_SCREEN_BUTTON = new BooleanSetting("revanced_hide_shorts_green_screen_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_HASHTAG_BUTTON = new BooleanSetting("revanced_hide_shorts_hashtag_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH_SUGGESTIONS = new BooleanSetting("revanced_hide_shorts_search_suggestions", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_STICKERS = new BooleanSetting("revanced_hide_shorts_stickers", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUPER_THANKS_BUTTON = new BooleanSetting("revanced_hide_shorts_super_thanks_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_FOUNTAIN = new BooleanSetting("revanced_hide_shorts_like_fountain", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_like_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_dislike_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_COMMENTS_BUTTON = new BooleanSetting("revanced_hide_shorts_comments_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SHARE_BUTTON = new BooleanSetting("revanced_hide_shorts_share_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_HOME = new BooleanSetting("revanced_hide_shorts_home", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_INFO_PANEL = new BooleanSetting("revanced_hide_shorts_info_panel", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_sound_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_CHANNEL_BAR = new BooleanSetting("revanced_hide_shorts_channel_bar", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_VIDEO_TITLE = new BooleanSetting("revanced_hide_shorts_video_title", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SOUND_METADATA_LABEL = new BooleanSetting("revanced_hide_shorts_sound_metadata_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_FULL_VIDEO_LINK_LABEL = new BooleanSetting("revanced_hide_shorts_full_video_link_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_JOIN_BUTTON = new BooleanSetting("revanced_hide_shorts_join_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_like_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_FOUNTAIN = new BooleanSetting("revanced_hide_shorts_like_fountain", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LOCATION_LABEL = new BooleanSetting("revanced_hide_shorts_location_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_NAVIGATION_BAR = new BooleanSetting("revanced_hide_shorts_navigation_bar", FALSE, true);
|
||||
public static final BooleanSetting HIDE_SHORTS_PAUSED_OVERLAY_BUTTONS = new BooleanSetting("revanced_hide_shorts_paused_overlay_buttons", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SAVE_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_save_sound_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH = new BooleanSetting("revanced_hide_shorts_search", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH_SUGGESTIONS = new BooleanSetting("revanced_hide_shorts_search_suggestions", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SHARE_BUTTON = new BooleanSetting("revanced_hide_shorts_share_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SHOP_BUTTON = new BooleanSetting("revanced_hide_shorts_shop_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_sound_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SOUND_METADATA_LABEL = new BooleanSetting("revanced_hide_shorts_sound_metadata_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_STICKERS = new BooleanSetting("revanced_hide_shorts_stickers", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_shorts_subscribe_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUBSCRIPTIONS = new BooleanSetting("revanced_hide_shorts_subscriptions", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUPER_THANKS_BUTTON = new BooleanSetting("revanced_hide_shorts_super_thanks_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_TAGGED_PRODUCTS = new BooleanSetting("revanced_hide_shorts_tagged_products", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_UPCOMING_BUTTON = new BooleanSetting("revanced_hide_shorts_upcoming_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_USE_TEMPLATE_BUTTON = new BooleanSetting("revanced_hide_shorts_use_template_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_VIDEO_TITLE = new BooleanSetting("revanced_hide_shorts_video_title", FALSE);
|
||||
public static final BooleanSetting SHORTS_AUTOPLAY = new BooleanSetting("revanced_shorts_autoplay", FALSE);
|
||||
public static final BooleanSetting SHORTS_AUTOPLAY_BACKGROUND = new BooleanSetting("revanced_shorts_autoplay_background", TRUE);
|
||||
|
||||
// Seekbar
|
||||
|
||||
public static final BooleanSetting DISABLE_PRECISE_SEEKING_GESTURE = new BooleanSetting("revanced_disable_precise_seeking_gesture", TRUE);
|
||||
public static final BooleanSetting SEEKBAR_TAPPING = new BooleanSetting("revanced_seekbar_tapping", TRUE);
|
||||
public static final BooleanSetting SLIDE_TO_SEEK = new BooleanSetting("revanced_slide_to_seek", FALSE, true);
|
||||
public static final BooleanSetting RESTORE_OLD_SEEKBAR_THUMBNAILS = new BooleanSetting("revanced_restore_old_seekbar_thumbnails", TRUE);
|
||||
public static final BooleanSetting SEEKBAR_THUMBNAILS_HIGH_QUALITY = new BooleanSetting("revanced_seekbar_thumbnails_high_quality", FALSE, true,
|
||||
"revanced_seekbar_thumbnails_high_quality_dialog_message", new SeekbarThumbnailsHighQualityAvailability());
|
||||
public static final BooleanSetting HIDE_SEEKBAR = new BooleanSetting("revanced_hide_seekbar", FALSE, true);
|
||||
public static final BooleanSetting HIDE_SEEKBAR_THUMBNAIL = new BooleanSetting("revanced_hide_seekbar_thumbnail", FALSE);
|
||||
public static final BooleanSetting HIDE_TIMESTAMP = new BooleanSetting("revanced_hide_timestamp", FALSE);
|
||||
public static final BooleanSetting RESTORE_OLD_SEEKBAR_THUMBNAILS = new BooleanSetting("revanced_restore_old_seekbar_thumbnails", TRUE);
|
||||
public static final BooleanSetting SEEKBAR_CUSTOM_COLOR = new BooleanSetting("revanced_seekbar_custom_color", FALSE, true);
|
||||
public static final BooleanSetting SEEKBAR_TAPPING = new BooleanSetting("revanced_seekbar_tapping", TRUE);
|
||||
public static final BooleanSetting SEEKBAR_THUMBNAILS_HIGH_QUALITY = new BooleanSetting("revanced_seekbar_thumbnails_high_quality", FALSE, true,
|
||||
"revanced_seekbar_thumbnails_high_quality_dialog_message", new SeekbarThumbnailsHighQualityAvailability());
|
||||
public static final BooleanSetting SLIDE_TO_SEEK = new BooleanSetting("revanced_slide_to_seek", FALSE, true);
|
||||
public static final StringSetting SEEKBAR_CUSTOM_COLOR_VALUE = new StringSetting("revanced_seekbar_custom_color_value", "#FF0033", true, parent(SEEKBAR_CUSTOM_COLOR));
|
||||
|
||||
// Misc
|
||||
public static final BooleanSetting ANNOUNCEMENTS = new BooleanSetting("revanced_announcements", TRUE);
|
||||
public static final IntegerSetting ANNOUNCEMENT_LAST_ID = new IntegerSetting("revanced_announcement_last_id", -1, false, false);
|
||||
public static final BooleanSetting AUTO_CAPTIONS = new BooleanSetting("revanced_auto_captions", FALSE);
|
||||
public static final BooleanSetting AUTO_REPEAT = new BooleanSetting("revanced_auto_repeat", FALSE);
|
||||
public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE);
|
||||
public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false);
|
||||
public static final BooleanSetting DISABLE_ZOOM_HAPTICS = new BooleanSetting("revanced_disable_zoom_haptics", TRUE);
|
||||
public static final BooleanSetting EXTERNAL_BROWSER = new BooleanSetting("revanced_external_browser", TRUE, true);
|
||||
public static final BooleanSetting AUTO_REPEAT = new BooleanSetting("revanced_auto_repeat", FALSE);
|
||||
public static final BooleanSetting REMOVE_TRACKING_QUERY_PARAMETER = new BooleanSetting("revanced_remove_tracking_query_parameter", TRUE);
|
||||
public static final BooleanSetting SPOOF_DEVICE_DIMENSIONS = new BooleanSetting("revanced_spoof_device_dimensions", FALSE, true,
|
||||
"revanced_spoof_device_dimensions_user_dialog_message");
|
||||
public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE);
|
||||
public static final BooleanSetting ANNOUNCEMENTS = new BooleanSetting("revanced_announcements", TRUE);
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true,"revanced_spoof_video_streams_user_dialog_message");
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC = new BooleanSetting("revanced_spoof_video_streams_ios_force_avc", FALSE, true,
|
||||
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofVideoStreamsPatch.ForceiOSAVCAvailability());
|
||||
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client", ClientType.ANDROID_VR, true, parent(SPOOF_VIDEO_STREAMS));
|
||||
public static final IntegerSetting ANNOUNCEMENT_LAST_ID = new IntegerSetting("revanced_announcement_last_id", -1, false, false);
|
||||
public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false);
|
||||
public static final BooleanSetting REMOVE_TRACKING_QUERY_PARAMETER = new BooleanSetting("revanced_remove_tracking_query_parameter", TRUE);
|
||||
|
||||
// Debugging
|
||||
/**
|
||||
* When enabled, share the debug logs with care.
|
||||
* The buffer contains select user data, including the client ip address and information that could identify the end user.
|
||||
@@ -298,6 +298,8 @@ public class Settings extends BaseSettings {
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
public static final IntegerSetting SWIPE_OVERLAY_BACKGROUND_ALPHA = new IntegerSetting("revanced_swipe_overlay_background_alpha", 127, true,
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
|
||||
// Debugging
|
||||
public static final IntegerSetting SWIPE_OVERLAY_TEXT_SIZE = new IntegerSetting("revanced_swipe_text_overlay_size", 22, true,
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
public static final LongSetting SWIPE_OVERLAY_TIMEOUT = new LongSetting("revanced_swipe_overlay_timeout", 500L, true,
|
||||
@@ -320,7 +322,6 @@ public class Settings extends BaseSettings {
|
||||
* Do not use directly, instead use {@link SponsorBlockSettings}
|
||||
*/
|
||||
public static final StringSetting SB_PRIVATE_USER_ID = new StringSetting("sb_private_user_id_Do_Not_Share", "");
|
||||
public static final StringSetting DEPRECATED_SB_UUID_OLD_MIGRATION_SETTING = new StringSetting("uuid", ""); // Delete sometime in 2024
|
||||
public static final IntegerSetting SB_CREATE_NEW_SEGMENT_STEP = new IntegerSetting("sb_create_new_segment_step", 150, parent(SB_ENABLED));
|
||||
public static final BooleanSetting SB_VOTING_BUTTON = new BooleanSetting("sb_voting_button", FALSE, parent(SB_ENABLED));
|
||||
public static final BooleanSetting SB_CREATE_NEW_SEGMENT = new BooleanSetting("sb_create_new_segment", FALSE, parent(SB_ENABLED));
|
||||
@@ -331,34 +332,38 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting SB_TRACK_SKIP_COUNT = new BooleanSetting("sb_track_skip_count", TRUE, parent(SB_ENABLED));
|
||||
public static final FloatSetting SB_SEGMENT_MIN_DURATION = new FloatSetting("sb_min_segment_duration", 0F, parent(SB_ENABLED));
|
||||
public static final BooleanSetting SB_VIDEO_LENGTH_WITHOUT_SEGMENTS = new BooleanSetting("sb_video_length_without_segments", TRUE, parent(SB_ENABLED));
|
||||
public static final StringSetting SB_API_URL = new StringSetting("sb_api_url","https://sponsor.ajay.app");
|
||||
public static final StringSetting SB_API_URL = new StringSetting("sb_api_url", "https://sponsor.ajay.app");
|
||||
public static final BooleanSetting SB_USER_IS_VIP = new BooleanSetting("sb_user_is_vip", FALSE);
|
||||
public static final IntegerSetting SB_LOCAL_TIME_SAVED_NUMBER_SEGMENTS = new IntegerSetting("sb_local_time_saved_number_segments", 0);
|
||||
public static final LongSetting SB_LOCAL_TIME_SAVED_MILLISECONDS = new LongSetting("sb_local_time_saved_milliseconds", 0L);
|
||||
public static final LongSetting SB_LAST_VIP_CHECK = new LongSetting("sb_last_vip_check", 0L, false, false);
|
||||
public static final BooleanSetting SB_HIDE_EXPORT_WARNING = new BooleanSetting("sb_hide_export_warning", FALSE, false, false);
|
||||
public static final BooleanSetting SB_SEEN_GUIDELINES = new BooleanSetting("sb_seen_guidelines", FALSE, false, false);
|
||||
|
||||
public static final StringSetting SB_CATEGORY_SPONSOR = new StringSetting("sb_sponsor", SKIP_AUTOMATICALLY_ONCE.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_SPONSOR_COLOR = new StringSetting("sb_sponsor_color","#00D400");
|
||||
public static final StringSetting SB_CATEGORY_SPONSOR_COLOR = new StringSetting("sb_sponsor_color", "#00D400");
|
||||
public static final StringSetting SB_CATEGORY_SELF_PROMO = new StringSetting("sb_selfpromo", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_SELF_PROMO_COLOR = new StringSetting("sb_selfpromo_color","#FFFF00");
|
||||
public static final StringSetting SB_CATEGORY_SELF_PROMO_COLOR = new StringSetting("sb_selfpromo_color", "#FFFF00");
|
||||
public static final StringSetting SB_CATEGORY_INTERACTION = new StringSetting("sb_interaction", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_INTERACTION_COLOR = new StringSetting("sb_interaction_color","#CC00FF");
|
||||
public static final StringSetting SB_CATEGORY_INTERACTION_COLOR = new StringSetting("sb_interaction_color", "#CC00FF");
|
||||
public static final StringSetting SB_CATEGORY_HIGHLIGHT = new StringSetting("sb_highlight", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_HIGHLIGHT_COLOR = new StringSetting("sb_highlight_color","#FF1684");
|
||||
public static final StringSetting SB_CATEGORY_HIGHLIGHT_COLOR = new StringSetting("sb_highlight_color", "#FF1684");
|
||||
public static final StringSetting SB_CATEGORY_INTRO = new StringSetting("sb_intro", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_INTRO_COLOR = new StringSetting("sb_intro_color","#00FFFF");
|
||||
public static final StringSetting SB_CATEGORY_INTRO_COLOR = new StringSetting("sb_intro_color", "#00FFFF");
|
||||
public static final StringSetting SB_CATEGORY_OUTRO = new StringSetting("sb_outro", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_OUTRO_COLOR = new StringSetting("sb_outro_color","#0202ED");
|
||||
public static final StringSetting SB_CATEGORY_OUTRO_COLOR = new StringSetting("sb_outro_color", "#0202ED");
|
||||
public static final StringSetting SB_CATEGORY_PREVIEW = new StringSetting("sb_preview", IGNORE.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_PREVIEW_COLOR = new StringSetting("sb_preview_color","#008FD6");
|
||||
public static final StringSetting SB_CATEGORY_PREVIEW_COLOR = new StringSetting("sb_preview_color", "#008FD6");
|
||||
public static final StringSetting SB_CATEGORY_FILLER = new StringSetting("sb_filler", IGNORE.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_FILLER_COLOR = new StringSetting("sb_filler_color","#7300FF");
|
||||
public static final StringSetting SB_CATEGORY_FILLER_COLOR = new StringSetting("sb_filler_color", "#7300FF");
|
||||
public static final StringSetting SB_CATEGORY_MUSIC_OFFTOPIC = new StringSetting("sb_music_offtopic", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_MUSIC_OFFTOPIC_COLOR = new StringSetting("sb_music_offtopic_color","#FF9900");
|
||||
public static final StringSetting SB_CATEGORY_MUSIC_OFFTOPIC_COLOR = new StringSetting("sb_music_offtopic_color", "#FF9900");
|
||||
public static final StringSetting SB_CATEGORY_UNSUBMITTED = new StringSetting("sb_unsubmitted", SKIP_AUTOMATICALLY.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color","#FFFFFF");
|
||||
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color", "#FFFFFF");
|
||||
|
||||
// Deprecated migrations
|
||||
public static final StringSetting DEPRECATED_SB_UUID_OLD_MIGRATION_SETTING = new StringSetting("uuid", ""); // Delete sometime in 2024
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_BUTTONS = new BooleanSetting("revanced_hide_player_buttons", FALSE, true);
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_video_quality_menu_footer", FALSE);
|
||||
|
||||
static {
|
||||
// region Migration
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
package app.revanced.extension.youtube.settings.preference;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
import static app.revanced.extension.youtube.patches.spoof.DeviceHardwareSupport.DEVICE_HAS_HARDWARE_DECODING_VP9;
|
||||
|
||||
import android.content.Context;
|
||||
import android.preference.SwitchPreference;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
@SuppressWarnings({"unused", "deprecation"})
|
||||
public class ForceAVCSpoofingPreference extends SwitchPreference {
|
||||
{
|
||||
if (!DEVICE_HAS_HARDWARE_DECODING_VP9) {
|
||||
setSummaryOn(str("revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on"));
|
||||
}
|
||||
}
|
||||
|
||||
public ForceAVCSpoofingPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
}
|
||||
public ForceAVCSpoofingPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
public ForceAVCSpoofingPreference(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
public ForceAVCSpoofingPreference(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
private void updateUI() {
|
||||
if (DEVICE_HAS_HARDWARE_DECODING_VP9) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Temporarily remove the preference key to allow changing this preference without
|
||||
// causing the settings UI listeners from showing reboot dialogs by the changes made here.
|
||||
String key = getKey();
|
||||
setKey(null);
|
||||
|
||||
// This setting cannot be changed by the user.
|
||||
super.setEnabled(false);
|
||||
super.setChecked(true);
|
||||
|
||||
setKey(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEnabled(boolean enabled) {
|
||||
super.setEnabled(enabled);
|
||||
|
||||
updateUI();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChecked(boolean checked) {
|
||||
super.setChecked(checked);
|
||||
|
||||
updateUI();
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import android.os.Build;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.util.Pair;
|
||||
import android.util.TypedValue;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowInsets;
|
||||
@@ -18,6 +19,10 @@ import android.widget.Toolbar;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.preference.AbstractPreferenceFragment;
|
||||
@@ -41,6 +46,55 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
||||
return Utils.getContext().getResources().getDrawable(backButtonResource);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorts a preference list by menu entries, but preserves the first value as the first entry.
|
||||
*
|
||||
* @noinspection SameParameterValue
|
||||
*/
|
||||
private static void sortListPreferenceByValues(ListPreference listPreference, int firstEntriesToPreserve) {
|
||||
CharSequence[] entries = listPreference.getEntries();
|
||||
CharSequence[] entryValues = listPreference.getEntryValues();
|
||||
final int entrySize = entries.length;
|
||||
|
||||
if (entrySize != entryValues.length) {
|
||||
// Xml array declaration has a missing/extra entry.
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
List<Pair<String, String>> firstPairs = new ArrayList<>(firstEntriesToPreserve);
|
||||
List<Pair<String, String>> pairsToSort = new ArrayList<>(entrySize);
|
||||
|
||||
for (int i = 0; i < entrySize; i++) {
|
||||
Pair<String, String> pair = new Pair<>(entries[i].toString(), entryValues[i].toString());
|
||||
if (i < firstEntriesToPreserve) {
|
||||
firstPairs.add(pair);
|
||||
} else {
|
||||
pairsToSort.add(pair);
|
||||
}
|
||||
}
|
||||
|
||||
Collections.sort(pairsToSort, (pair1, pair2) -> pair1.first.compareToIgnoreCase(pair2.first));
|
||||
|
||||
CharSequence[] sortedEntries = new CharSequence[entrySize];
|
||||
CharSequence[] sortedEntryValues = new CharSequence[entrySize];
|
||||
|
||||
int i = 0;
|
||||
for (Pair<String, String> pair : firstPairs) {
|
||||
sortedEntries[i] = pair.first;
|
||||
sortedEntryValues[i] = pair.second;
|
||||
i++;
|
||||
}
|
||||
|
||||
for (Pair<String, String> pair : pairsToSort) {
|
||||
sortedEntries[i] = pair.first;
|
||||
sortedEntryValues[i] = pair.second;
|
||||
i++;
|
||||
}
|
||||
|
||||
listPreference.setEntries(sortedEntries);
|
||||
listPreference.setEntryValues(sortedEntryValues);
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
@Override
|
||||
protected void initialize() {
|
||||
@@ -50,9 +104,14 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
||||
setPreferenceScreenToolbar(getPreferenceScreen());
|
||||
|
||||
// If the preference was included, then initialize it based on the available playback speed.
|
||||
Preference defaultSpeedPreference = findPreference(Settings.PLAYBACK_SPEED_DEFAULT.key);
|
||||
if (defaultSpeedPreference instanceof ListPreference) {
|
||||
CustomPlaybackSpeedPatch.initializeListPreference((ListPreference) defaultSpeedPreference);
|
||||
Preference preference = findPreference(Settings.PLAYBACK_SPEED_DEFAULT.key);
|
||||
if (preference instanceof ListPreference playbackPreference) {
|
||||
CustomPlaybackSpeedPatch.initializeListPreference(playbackPreference);
|
||||
}
|
||||
|
||||
preference = findPreference(Settings.SPOOF_VIDEO_STREAMS_LANGUAGE.key);
|
||||
if (preference instanceof ListPreference languagePreference) {
|
||||
sortListPreferenceByValues(languagePreference, 1);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "initialize failure", ex);
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
package app.revanced.extension.youtube.settings.preference;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.shared.settings.Setting;
|
||||
import app.revanced.extension.shared.spoof.ClientType;
|
||||
|
||||
@SuppressWarnings({"deprecation", "unused"})
|
||||
public class SpoofStreamingDataSideEffectsPreference extends Preference {
|
||||
|
||||
@Nullable
|
||||
private ClientType currentClientType;
|
||||
|
||||
private final SharedPreferences.OnSharedPreferenceChangeListener listener = (sharedPreferences, str) -> {
|
||||
// Because this listener may run before the ReVanced settings fragment updates Settings,
|
||||
// this could show the prior config and not the current.
|
||||
//
|
||||
// Push this call to the end of the main run queue,
|
||||
// so all other listeners are done and Settings is up to date.
|
||||
Utils.runOnMainThread(this::updateUI);
|
||||
};
|
||||
|
||||
public SpoofStreamingDataSideEffectsPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
}
|
||||
|
||||
public SpoofStreamingDataSideEffectsPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
public SpoofStreamingDataSideEffectsPreference(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public SpoofStreamingDataSideEffectsPreference(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
private void addChangeListener() {
|
||||
Setting.preferences.preferences.registerOnSharedPreferenceChangeListener(listener);
|
||||
}
|
||||
|
||||
private void removeChangeListener() {
|
||||
Setting.preferences.preferences.unregisterOnSharedPreferenceChangeListener(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToHierarchy(PreferenceManager preferenceManager) {
|
||||
super.onAttachedToHierarchy(preferenceManager);
|
||||
updateUI();
|
||||
addChangeListener();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPrepareForRemoval() {
|
||||
super.onPrepareForRemoval();
|
||||
removeChangeListener();
|
||||
}
|
||||
|
||||
private void updateUI() {
|
||||
ClientType clientType = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
|
||||
if (currentClientType == clientType) {
|
||||
return;
|
||||
}
|
||||
|
||||
Logger.printDebug(() -> "Updating spoof stream side effects preference");
|
||||
setEnabled(BaseSettings.SPOOF_VIDEO_STREAMS.get());
|
||||
|
||||
String key = "revanced_spoof_video_streams_about_"
|
||||
+ clientType.name().toLowerCase();
|
||||
setTitle(str(key + "_title"));
|
||||
setSummary(str(key + "_summary"));
|
||||
}
|
||||
}
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.2.2-dev.1
|
||||
version = 5.5.0-dev.4
|
||||
|
||||
@@ -60,6 +60,10 @@ public final class app/revanced/patches/all/misc/directory/ChangeDataDirectoryLo
|
||||
public static final fun getChangeDataDirectoryLocationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/all/misc/directory/documentsprovider/ExportInternalDataDocumentsProviderPatchKt {
|
||||
public static final fun getExportInternalDataDocumentsProviderPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/all/misc/hex/HexPatchKt {
|
||||
public static final fun getHexPatch ()Lapp/revanced/patcher/patch/RawResourcePatch;
|
||||
}
|
||||
@@ -320,6 +324,14 @@ public final class app/revanced/patches/music/misc/gms/GmsCoreSupportPatchKt {
|
||||
public static final fun getGmsCoreSupportPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/misc/spoof/SpoofClientPatchKt {
|
||||
public static final fun getSpoofClientPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/misc/spoof/UserAgentClientSpoofPatchKt {
|
||||
public static final fun getUserAgentClientSpoofPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/myexpenses/misc/pro/UnlockProPatchKt {
|
||||
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -753,6 +765,15 @@ public final class app/revanced/patches/shared/misc/settings/preference/TextPref
|
||||
public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/shared/misc/spoof/SpoofVideoStreamsPatchKt {
|
||||
public static final fun spoofVideoStreamsPatch (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
public static synthetic fun spoofVideoStreamsPatch$default (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/shared/misc/spoof/UserAgentClientSpoofPatchKt {
|
||||
public static final fun userAgentClientSpoofPatch (Ljava/lang/String;)Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/solidexplorer2/functionality/filesize/RemoveFileSizeLimitPatchKt {
|
||||
public static final fun getRemoveFileSizeLimitPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -1155,6 +1176,10 @@ public final class app/revanced/patches/youtube/layout/player/background/PlayerC
|
||||
public static final fun getPlayerControlsBackgroundPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/layout/player/fullscreen/OpenVideosFullscreenKt {
|
||||
public static final fun getOpenVideosFullscreenPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityPatchKt {
|
||||
public static final fun getCustomPlayerOverlayOpacityPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -1359,6 +1384,14 @@ public final class app/revanced/patches/youtube/misc/settings/SettingsPatchKt {
|
||||
public static final fun newIntent (Ljava/lang/String;)Lapp/revanced/patches/shared/misc/settings/preference/IntentPreference$Intent;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/misc/spoof/SpoofVideoStreamsPatchKt {
|
||||
public static final fun getSpoofVideoStreamsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/misc/spoof/UserAgentClientSpoofPatchKt {
|
||||
public static final fun getUserAgentClientSpoofPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/misc/zoomhaptics/ZoomHapticsPatchKt {
|
||||
public static final fun getZoomHapticsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -1367,6 +1400,10 @@ public final class app/revanced/patches/youtube/shared/FingerprintsKt {
|
||||
public static final fun getRollingNumberTextViewAnimationUpdateFingerprint ()Lapp/revanced/patcher/Fingerprint;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/video/audio/ForceOriginalAudioPatchKt {
|
||||
public static final fun getForceOriginalAudioPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/video/information/VideoInformationPatchKt {
|
||||
public static final fun getVideoInformationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
public static final fun userSelectedPlaybackSpeedHook (Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
@@ -1,58 +1,19 @@
|
||||
package app.revanced.patches.all.misc.directory
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
|
||||
import app.revanced.util.getReference
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableMethodReference
|
||||
import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||
import app.revanced.patches.all.misc.directory.documentsprovider.exportInternalDataDocumentsProviderPatch
|
||||
|
||||
@Suppress("unused")
|
||||
@Deprecated(
|
||||
"Superseded by internalDataDocumentsProviderPatch",
|
||||
ReplaceWith("internalDataDocumentsProviderPatch"),
|
||||
)
|
||||
val changeDataDirectoryLocationPatch = bytecodePatch(
|
||||
name = "Change data directory location",
|
||||
// name = "Change data directory location",
|
||||
description = "Changes the data directory in the application from " +
|
||||
"the app internal storage directory to /sdcard/android/data accessible by root-less devices." +
|
||||
"Using this patch can cause unexpected issues with some apps.",
|
||||
use = false,
|
||||
) {
|
||||
dependsOn(
|
||||
transformInstructionsPatch(
|
||||
filterMap = filter@{ _, _, instruction, instructionIndex ->
|
||||
val reference = instruction.getReference<MethodReference>() ?: return@filter null
|
||||
|
||||
if (!MethodUtil.methodSignaturesMatch(reference, MethodCall.GetDir.reference)) {
|
||||
return@filter null
|
||||
}
|
||||
|
||||
return@filter instructionIndex
|
||||
},
|
||||
transform = { method, index ->
|
||||
val getDirInstruction = method.getInstruction<Instruction35c>(index)
|
||||
val contextRegister = getDirInstruction.registerC
|
||||
val dataRegister = getDirInstruction.registerD
|
||||
|
||||
method.replaceInstruction(
|
||||
index,
|
||||
"invoke-virtual { v$contextRegister, v$dataRegister }, " +
|
||||
"Landroid/content/Context;->getExternalFilesDir(Ljava/lang/String;)Ljava/io/File;",
|
||||
)
|
||||
},
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private enum class MethodCall(
|
||||
val reference: MethodReference,
|
||||
) {
|
||||
GetDir(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/content/Context;",
|
||||
"getDir",
|
||||
listOf("Ljava/lang/String;", "I"),
|
||||
"Ljava/io/File;",
|
||||
),
|
||||
),
|
||||
dependsOn(exportInternalDataDocumentsProviderPatch)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
package app.revanced.patches.all.misc.directory.documentsprovider
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.util.asSequence
|
||||
import app.revanced.util.getNode
|
||||
|
||||
@Suppress("unused")
|
||||
val exportInternalDataDocumentsProviderPatch = resourcePatch(
|
||||
name = "Export internal data documents provider",
|
||||
description = "Exports a documents provider that grants access to the internal data directory of this app " +
|
||||
"to file managers and other apps that support the Storage Access Framework.",
|
||||
use = false,
|
||||
) {
|
||||
dependsOn(
|
||||
bytecodePatch {
|
||||
extendWith("extensions/all/misc/directory/export-internal-data-documents-provider.rve")
|
||||
},
|
||||
)
|
||||
|
||||
execute {
|
||||
val documentsProviderClass =
|
||||
"app.revanced.extension.all.misc.directory.documentsprovider.InternalDataDocumentsProvider"
|
||||
|
||||
document("AndroidManifest.xml").use { document ->
|
||||
// Check if the provider is already declared
|
||||
if (document.getElementsByTagName("provider")
|
||||
.asSequence()
|
||||
.any { it.attributes.getNamedItem("android:name")?.nodeValue == documentsProviderClass }
|
||||
) {
|
||||
return@execute
|
||||
}
|
||||
|
||||
val authority =
|
||||
document.getNode("manifest").attributes.getNamedItem("package").let {
|
||||
// Select a URI authority name that is unique to the current app
|
||||
"${it.nodeValue}.$documentsProviderClass"
|
||||
}
|
||||
|
||||
// Register the documents provider
|
||||
with(document.getNode("application")) {
|
||||
document.createElement("provider").apply {
|
||||
setAttribute("android:name", documentsProviderClass)
|
||||
setAttribute("android:authorities", authority)
|
||||
setAttribute("android:exported", "true")
|
||||
setAttribute("android:grantUriPermissions", "true")
|
||||
setAttribute("android:permission", "android.permission.MANAGE_DOCUMENTS")
|
||||
|
||||
document.createElement("intent-filter").apply {
|
||||
document.createElement("action").apply {
|
||||
setAttribute("android:name", "android.content.action.DOCUMENTS_PROVIDER")
|
||||
}.let(this::appendChild)
|
||||
}.let(this::appendChild)
|
||||
}.let(this::appendChild)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
package app.revanced.patches.all.misc.packagename
|
||||
|
||||
import app.revanced.patcher.patch.Option
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patcher.patch.*
|
||||
import app.revanced.util.asSequence
|
||||
import app.revanced.util.getNode
|
||||
import org.w3c.dom.Element
|
||||
import java.util.logging.Logger
|
||||
|
||||
lateinit var packageNameOption: Option<String>
|
||||
|
||||
@@ -27,7 +28,8 @@ fun setOrGetFallbackPackageName(fallbackPackageName: String): String {
|
||||
|
||||
val changePackageNamePatch = resourcePatch(
|
||||
name = "Change package name",
|
||||
description = "Appends \".revanced\" to the package name by default. Changing the package name of the app can lead to unexpected issues.",
|
||||
description = "Appends \".revanced\" to the package name by default. " +
|
||||
"Changing the package name of the app can lead to unexpected issues.",
|
||||
use = false,
|
||||
) {
|
||||
packageNameOption = stringOption(
|
||||
@@ -41,20 +43,81 @@ val changePackageNamePatch = resourcePatch(
|
||||
it == "Default" || it!!.matches(Regex("^[a-z]\\w*(\\.[a-z]\\w*)+\$"))
|
||||
}
|
||||
|
||||
val updatePermissions by booleanOption(
|
||||
key = "updatePermissions",
|
||||
default = false,
|
||||
title = "Update permissions",
|
||||
description = "Update compatibility receiver permissions. " +
|
||||
"Enabling this can fix installation errors, but this can also break features in certain apps.",
|
||||
)
|
||||
|
||||
val updateProviders by booleanOption(
|
||||
key = "updateProviders",
|
||||
default = false,
|
||||
title = "Update providers",
|
||||
description = "Update provider names declared by the app. " +
|
||||
"Enabling this can fix installation errors, but this can also break features in certain apps.",
|
||||
)
|
||||
|
||||
finalize {
|
||||
/**
|
||||
* Apps that are confirmed to not work correctly with this patch.
|
||||
* This is not an exhaustive list, and is only the apps with
|
||||
* ReVanced specific patches and are confirmed incompatible with this patch.
|
||||
*/
|
||||
val incompatibleAppPackages = setOf(
|
||||
// Cannot log in, settings menu is broken.
|
||||
"com.reddit.frontpage",
|
||||
|
||||
// Patches and installs but crashes on launch.
|
||||
"com.duolingo",
|
||||
"com.twitter.android",
|
||||
"tv.twitch.android.app",
|
||||
)
|
||||
|
||||
document("AndroidManifest.xml").use { document ->
|
||||
val manifest = document.getNode("manifest") as Element
|
||||
val packageName = manifest.getAttribute("package")
|
||||
|
||||
if (incompatibleAppPackages.contains(packageName)) {
|
||||
return@finalize Logger.getLogger(this::class.java.name).severe(
|
||||
"'$packageName' does not work correctly with \"Change package name\"",
|
||||
)
|
||||
}
|
||||
|
||||
val replacementPackageName = packageNameOption.value
|
||||
val newPackageName = if (replacementPackageName != packageNameOption.default) {
|
||||
replacementPackageName!!
|
||||
} else {
|
||||
"$packageName.revanced"
|
||||
}
|
||||
|
||||
val manifest = document.getElementsByTagName("manifest").item(0) as Element
|
||||
manifest.setAttribute(
|
||||
"package",
|
||||
if (replacementPackageName != packageNameOption.default) {
|
||||
replacementPackageName
|
||||
} else {
|
||||
"${manifest.getAttribute("package")}.revanced"
|
||||
},
|
||||
)
|
||||
manifest.setAttribute("package", newPackageName)
|
||||
|
||||
if (updatePermissions == true) {
|
||||
val permissions = manifest.getElementsByTagName("permission").asSequence()
|
||||
val usesPermissions = manifest.getElementsByTagName("uses-permission").asSequence()
|
||||
|
||||
val receiverNotExported = "DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
|
||||
|
||||
(permissions + usesPermissions)
|
||||
.map { it as Element }
|
||||
.filter { it.getAttribute("android:name") == "$packageName.$receiverNotExported" }
|
||||
.forEach { it.setAttribute("android:name", "$newPackageName.$receiverNotExported") }
|
||||
}
|
||||
|
||||
if (updateProviders == true) {
|
||||
val providers = manifest.getElementsByTagName("provider").asSequence()
|
||||
|
||||
for (node in providers) {
|
||||
val provider = node as Element
|
||||
|
||||
val authorities = provider.getAttribute("android:authorities")
|
||||
if (!authorities.startsWith("$packageName.")) continue
|
||||
|
||||
provider.setAttribute("android:authorities", authorities.replace(packageName, newPackageName))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,9 +3,9 @@ package app.revanced.patches.music.interaction.permanentshuffle
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Deprecated("This patch no longer works and will be removed in the future.")
|
||||
@Suppress("unused")
|
||||
val permanentShufflePatch = bytecodePatch(
|
||||
name = "Permanent shuffle",
|
||||
description = "Permanently remember your shuffle preference " +
|
||||
"even if the playlist ends or another track is played.",
|
||||
use = false,
|
||||
|
||||
@@ -1,22 +1,16 @@
|
||||
package app.revanced.patches.music.misc.androidauto
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val bypassCertificateChecksPatch = bytecodePatch(
|
||||
name = "Bypass certificate checks",
|
||||
description = "Bypasses certificate checks which prevent YouTube Music from working on Android Auto.",
|
||||
) {
|
||||
compatibleWith("com.google.android.apps.youtube.music")
|
||||
compatibleWith("com.google.android.apps.youtube.music"("7.29.52"))
|
||||
|
||||
execute {
|
||||
checkCertificateFingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
const/4 v0, 0x1
|
||||
return v0
|
||||
""",
|
||||
)
|
||||
checkCertificateFingerprint.method.returnEarly(true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import app.revanced.patcher.patch.Option
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.music.misc.gms.Constants.MUSIC_PACKAGE_NAME
|
||||
import app.revanced.patches.music.misc.gms.Constants.REVANCED_MUSIC_PACKAGE_NAME
|
||||
import app.revanced.patches.music.misc.spoof.spoofClientPatch
|
||||
import app.revanced.patches.shared.castContextFetchFingerprint
|
||||
import app.revanced.patches.shared.misc.gms.gmsCoreSupportPatch
|
||||
import app.revanced.patches.shared.primeMethodFingerprint
|
||||
@@ -20,6 +21,8 @@ val gmsCoreSupportPatch = gmsCoreSupportPatch(
|
||||
extensionPatch = sharedExtensionPatch,
|
||||
gmsCoreSupportResourcePatchFactory = ::gmsCoreSupportResourcePatch,
|
||||
) {
|
||||
dependsOn(spoofClientPatch)
|
||||
|
||||
compatibleWith(MUSIC_PACKAGE_NAME)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package app.revanced.patches.music.misc.spoof
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val playerRequestConstructorFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
strings("player")
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches using the class found in [playerRequestConstructorFingerprint].
|
||||
*/
|
||||
internal val createPlayerRequestBodyFingerprint = fingerprint {
|
||||
parameters("L")
|
||||
returns("V")
|
||||
opcodes(
|
||||
Opcode.CHECK_CAST,
|
||||
Opcode.IGET,
|
||||
Opcode.AND_INT_LIT16,
|
||||
)
|
||||
strings("ms")
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to get a reference to other clientInfo fields.
|
||||
*/
|
||||
internal val setClientInfoFieldsFingerprint = fingerprint {
|
||||
returns("L")
|
||||
strings("Google Inc.")
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to get a reference to the clientInfo and clientInfo.clientVersion field.
|
||||
*/
|
||||
internal val setClientInfoClientVersionFingerprint = fingerprint {
|
||||
strings("10.29")
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
package app.revanced.patches.music.misc.spoof
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.instructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.util.getReference
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
import com.android.tools.smali.dexlib2.iface.reference.TypeReference
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
||||
|
||||
internal const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/music/spoof/SpoofClientPatch;"
|
||||
|
||||
// TODO: Replace this patch with spoofVideoStreamsPatch once possible.
|
||||
val spoofClientPatch = bytecodePatch(
|
||||
name = "Spoof client",
|
||||
description = "Spoofs the client to fix playback.",
|
||||
) {
|
||||
compatibleWith("com.google.android.apps.youtube.music")
|
||||
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
// TODO: Add settingsPatch
|
||||
userAgentClientSpoofPatch,
|
||||
)
|
||||
|
||||
execute {
|
||||
val playerRequestClass = playerRequestConstructorFingerprint.classDef
|
||||
|
||||
val createPlayerRequestBodyMatch = createPlayerRequestBodyFingerprint.match(playerRequestClass)
|
||||
|
||||
val clientInfoContainerClass = createPlayerRequestBodyMatch.method
|
||||
.getInstruction(createPlayerRequestBodyMatch.patternMatch!!.startIndex)
|
||||
.getReference<TypeReference>()!!.type
|
||||
|
||||
val clientInfoField = setClientInfoClientVersionFingerprint.method.instructions.first {
|
||||
it.opcode == Opcode.IPUT_OBJECT && it.getReference<FieldReference>()!!.definingClass == clientInfoContainerClass
|
||||
}.getReference<FieldReference>()!!
|
||||
|
||||
val setClientInfoFieldInstructions = setClientInfoFieldsFingerprint.method.instructions.filter {
|
||||
(it.opcode == Opcode.IPUT_OBJECT || it.opcode == Opcode.IPUT) &&
|
||||
it.getReference<FieldReference>()!!.definingClass == clientInfoField.type
|
||||
}.map { it.getReference<FieldReference>()!! }
|
||||
|
||||
// Offsets are known for the fields in the clientInfo object.
|
||||
val clientIdField = setClientInfoFieldInstructions[0]
|
||||
val clientModelField = setClientInfoFieldInstructions[5]
|
||||
val osVersionField = setClientInfoFieldInstructions[7]
|
||||
val clientVersionField = setClientInfoClientVersionFingerprint.method
|
||||
.getInstruction(setClientInfoClientVersionFingerprint.stringMatches!!.first().index + 1)
|
||||
.getReference<FieldReference>()
|
||||
|
||||
// Helper method to spoof the client info.
|
||||
val spoofClientInfoMethod = ImmutableMethod(
|
||||
playerRequestClass.type,
|
||||
"spoofClientInfo",
|
||||
listOf(ImmutableMethodParameter(clientInfoContainerClass, null, null)),
|
||||
"V",
|
||||
AccessFlags.PRIVATE.value or AccessFlags.STATIC.value,
|
||||
null,
|
||||
null,
|
||||
MutableMethodImplementation(3),
|
||||
).toMutable().also(playerRequestClass.methods::add).apply {
|
||||
addInstructions(
|
||||
"""
|
||||
iget-object v0, p0, $clientInfoField
|
||||
|
||||
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->getClientId()I
|
||||
move-result v1
|
||||
iput v1, v0, $clientIdField
|
||||
|
||||
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->getClientModel()Ljava/lang/String;
|
||||
move-result-object v1
|
||||
iput-object v1, v0, $clientModelField
|
||||
|
||||
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->getClientVersion()Ljava/lang/String;
|
||||
move-result-object v1
|
||||
iput-object v1, v0, $clientVersionField
|
||||
|
||||
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->getOsVersion()Ljava/lang/String;
|
||||
move-result-object v1
|
||||
iput-object v1, v0, $osVersionField
|
||||
|
||||
return-void
|
||||
""",
|
||||
)
|
||||
}
|
||||
|
||||
createPlayerRequestBodyMatch.method.apply {
|
||||
val checkCastIndex = createPlayerRequestBodyMatch.patternMatch!!.startIndex
|
||||
val clientInfoContainerRegister = getInstruction<OneRegisterInstruction>(checkCastIndex).registerA
|
||||
|
||||
addInstruction(checkCastIndex + 1, "invoke-static {v$clientInfoContainerRegister}, $spoofClientInfoMethod")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package app.revanced.patches.music.misc.spoof
|
||||
|
||||
import app.revanced.patches.shared.misc.spoof.userAgentClientSpoofPatch
|
||||
|
||||
val userAgentClientSpoofPatch = userAgentClientSpoofPatch("com.google.android.apps.youtube.music")
|
||||
@@ -3,10 +3,9 @@ package app.revanced.patches.nyx.misc.pro
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Deprecated("This patch will be removed in the future.")
|
||||
@Suppress("unused")
|
||||
val unlockProPatch = bytecodePatch(
|
||||
name = "Unlock pro",
|
||||
) {
|
||||
val unlockProPatch = bytecodePatch {
|
||||
compatibleWith("com.awedea.nyx")
|
||||
|
||||
execute {
|
||||
|
||||
@@ -3,4 +3,4 @@ package app.revanced.patches.reddit.customclients.sync.syncforreddit.extension
|
||||
import app.revanced.patches.reddit.customclients.sync.syncforreddit.extension.hooks.initHook
|
||||
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
|
||||
|
||||
val sharedExtensionPatch = sharedExtensionPatch("sync", initHook)
|
||||
val sharedExtensionPatch = sharedExtensionPatch("syncforreddit", initHook)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package app.revanced.patches.youtube.misc.fix.playback
|
||||
package app.revanced.patches.shared.misc.spoof
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.literal
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
@@ -27,7 +28,6 @@ internal val buildPlayerRequestURIFingerprint = fingerprint {
|
||||
Opcode.RETURN_OBJECT,
|
||||
)
|
||||
strings(
|
||||
"youtubei/v1",
|
||||
"key",
|
||||
"asig",
|
||||
)
|
||||
@@ -111,3 +111,13 @@ internal val buildMediaDataSourceFingerprint = fingerprint {
|
||||
"Ljava/lang/Object;",
|
||||
)
|
||||
}
|
||||
|
||||
internal const val HLS_CURRENT_TIME_FEATURE_FLAG = 45355374L
|
||||
|
||||
internal val hlsCurrentTimeFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
parameters("Z", "L")
|
||||
literal {
|
||||
HLS_CURRENT_TIME_FEATURE_FLAG
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,216 @@
|
||||
package app.revanced.patches.shared.misc.spoof
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.instructions
|
||||
import app.revanced.patcher.patch.BytecodePatchBuilder
|
||||
import app.revanced.patcher.patch.BytecodePatchContext
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.insertFeatureFlagBooleanOverride
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
||||
|
||||
internal const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/shared/spoof/SpoofVideoStreamsPatch;"
|
||||
|
||||
fun spoofVideoStreamsPatch(
|
||||
block: BytecodePatchBuilder.() -> Unit = {},
|
||||
executeBlock: BytecodePatchContext.() -> Unit = {},
|
||||
) = bytecodePatch(
|
||||
name = "Spoof video streams",
|
||||
description = "Spoofs the client video streams to fix playback.",
|
||||
) {
|
||||
block()
|
||||
|
||||
dependsOn(addResourcesPatch)
|
||||
|
||||
execute {
|
||||
// region Block /initplayback requests to fall back to /get_watch requests.
|
||||
|
||||
val moveUriStringIndex = buildInitPlaybackRequestFingerprint.patternMatch!!.startIndex
|
||||
|
||||
buildInitPlaybackRequestFingerprint.method.apply {
|
||||
val targetRegister = getInstruction<OneRegisterInstruction>(moveUriStringIndex).registerA
|
||||
|
||||
addInstructions(
|
||||
moveUriStringIndex + 1,
|
||||
"""
|
||||
invoke-static { v$targetRegister }, $EXTENSION_CLASS_DESCRIPTOR->blockInitPlaybackRequest(Ljava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v$targetRegister
|
||||
""",
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Block /get_watch requests to fall back to /player requests.
|
||||
|
||||
val invokeToStringIndex = buildPlayerRequestURIFingerprint.patternMatch!!.startIndex
|
||||
|
||||
buildPlayerRequestURIFingerprint.method.apply {
|
||||
val uriRegister = getInstruction<FiveRegisterInstruction>(invokeToStringIndex).registerC
|
||||
|
||||
addInstructions(
|
||||
invokeToStringIndex,
|
||||
"""
|
||||
invoke-static { v$uriRegister }, $EXTENSION_CLASS_DESCRIPTOR->blockGetWatchRequest(Landroid/net/Uri;)Landroid/net/Uri;
|
||||
move-result-object v$uriRegister
|
||||
""",
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Get replacement streams at player requests.
|
||||
|
||||
buildRequestFingerprint.method.apply {
|
||||
val newRequestBuilderIndex = indexOfFirstInstructionOrThrow {
|
||||
opcode == Opcode.INVOKE_VIRTUAL &&
|
||||
getReference<MethodReference>()?.name == "newUrlRequestBuilder"
|
||||
}
|
||||
val urlRegister = getInstruction<FiveRegisterInstruction>(newRequestBuilderIndex).registerD
|
||||
val freeRegister = getInstruction<OneRegisterInstruction>(newRequestBuilderIndex + 1).registerA
|
||||
|
||||
addInstructions(
|
||||
newRequestBuilderIndex,
|
||||
"""
|
||||
move-object v$freeRegister, p1
|
||||
invoke-static { v$urlRegister, v$freeRegister }, $EXTENSION_CLASS_DESCRIPTOR->fetchStreams(Ljava/lang/String;Ljava/util/Map;)V
|
||||
""",
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Replace the streaming data with the replacement streams.
|
||||
|
||||
createStreamingDataFingerprint.method.apply {
|
||||
val setStreamDataMethodName = "patch_setStreamingData"
|
||||
val resultMethodType = createStreamingDataFingerprint.classDef.type
|
||||
val videoDetailsIndex = createStreamingDataFingerprint.patternMatch!!.endIndex
|
||||
val videoDetailsRegister = getInstruction<TwoRegisterInstruction>(videoDetailsIndex).registerA
|
||||
val videoDetailsClass = getInstruction(videoDetailsIndex).getReference<FieldReference>()!!.type
|
||||
|
||||
addInstruction(
|
||||
videoDetailsIndex + 1,
|
||||
"invoke-direct { p0, v$videoDetailsRegister }, " +
|
||||
"$resultMethodType->$setStreamDataMethodName($videoDetailsClass)V",
|
||||
)
|
||||
|
||||
val protobufClass = protobufClassParseByteBufferFingerprint.method.definingClass
|
||||
val setStreamingDataIndex = createStreamingDataFingerprint.patternMatch!!.startIndex
|
||||
|
||||
val playerProtoClass = getInstruction(setStreamingDataIndex + 1)
|
||||
.getReference<FieldReference>()!!.definingClass
|
||||
|
||||
val setStreamingDataField = getInstruction(setStreamingDataIndex).getReference<FieldReference>()
|
||||
|
||||
val getStreamingDataField = getInstruction(
|
||||
indexOfFirstInstructionOrThrow {
|
||||
opcode == Opcode.IGET_OBJECT && getReference<FieldReference>()?.definingClass == playerProtoClass
|
||||
},
|
||||
).getReference<FieldReference>()
|
||||
|
||||
// Use a helper method to avoid the need of picking out multiple free registers from the hooked code.
|
||||
createStreamingDataFingerprint.classDef.methods.add(
|
||||
ImmutableMethod(
|
||||
resultMethodType,
|
||||
setStreamDataMethodName,
|
||||
listOf(ImmutableMethodParameter(videoDetailsClass, null, "videoDetails")),
|
||||
"V",
|
||||
AccessFlags.PRIVATE.value or AccessFlags.FINAL.value,
|
||||
null,
|
||||
null,
|
||||
MutableMethodImplementation(9),
|
||||
).toMutable().apply {
|
||||
addInstructionsWithLabels(
|
||||
0,
|
||||
"""
|
||||
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->isSpoofingEnabled()Z
|
||||
move-result v0
|
||||
if-eqz v0, :disabled
|
||||
|
||||
# Get video id.
|
||||
iget-object v2, p1, $videoDetailsClass->c:Ljava/lang/String;
|
||||
if-eqz v2, :disabled
|
||||
|
||||
# Get streaming data.
|
||||
invoke-static { v2 }, $EXTENSION_CLASS_DESCRIPTOR->getStreamingData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
|
||||
move-result-object v3
|
||||
if-eqz v3, :disabled
|
||||
|
||||
# Parse streaming data.
|
||||
sget-object v4, $playerProtoClass->a:$playerProtoClass
|
||||
invoke-static { v4, v3 }, $protobufClass->parseFrom(${protobufClass}Ljava/nio/ByteBuffer;)$protobufClass
|
||||
move-result-object v5
|
||||
check-cast v5, $playerProtoClass
|
||||
|
||||
# Set streaming data.
|
||||
iget-object v6, v5, $getStreamingDataField
|
||||
if-eqz v6, :disabled
|
||||
iput-object v6, p0, $setStreamingDataField
|
||||
|
||||
:disabled
|
||||
return-void
|
||||
""",
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Remove /videoplayback request body to fix playback.
|
||||
// It is assumed, YouTube makes a request with a body tuned for Android.
|
||||
// Requesting streams intended for other platforms with a body tuned for Android could be the cause of 400 errors.
|
||||
// A proper fix may include modifying the request body to match the platforms expected body.
|
||||
|
||||
buildMediaDataSourceFingerprint.method.apply {
|
||||
val targetIndex = instructions.lastIndex
|
||||
|
||||
// Instructions are added just before the method returns,
|
||||
// so there's no concern of clobbering in-use registers.
|
||||
addInstructions(
|
||||
targetIndex,
|
||||
"""
|
||||
# Field a: Stream uri.
|
||||
# Field c: Http method.
|
||||
# Field d: Post data.
|
||||
move-object v0, p0 # method has over 15 registers and must copy p0 to a lower register.
|
||||
iget-object v1, v0, $definingClass->a:Landroid/net/Uri;
|
||||
iget v2, v0, $definingClass->c:I
|
||||
iget-object v3, v0, $definingClass->d:[B
|
||||
invoke-static { v1, v2, v3 }, $EXTENSION_CLASS_DESCRIPTOR->removeVideoPlaybackPostBody(Landroid/net/Uri;I[B)[B
|
||||
move-result-object v1
|
||||
iput-object v1, v0, $definingClass->d:[B
|
||||
""",
|
||||
)
|
||||
}
|
||||
// endregion
|
||||
|
||||
// region Fix iOS livestream current time.
|
||||
|
||||
hlsCurrentTimeFingerprint.method.insertFeatureFlagBooleanOverride(
|
||||
HLS_CURRENT_TIME_FEATURE_FLAG,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->fixHLSCurrentTime(Z)Z"
|
||||
)
|
||||
|
||||
// endregion
|
||||
|
||||
executeBlock()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package app.revanced.patches.shared.misc.spoof
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patches.all.misc.transformation.IMethodCall
|
||||
import app.revanced.patches.all.misc.transformation.filterMapInstruction35c
|
||||
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||
|
||||
private const val USER_AGENT_STRING_BUILDER_APPEND_METHOD_REFERENCE =
|
||||
"Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;"
|
||||
|
||||
fun userAgentClientSpoofPatch(originalPackageName: String) = transformInstructionsPatch(
|
||||
filterMap = { classDef, _, instruction, instructionIndex ->
|
||||
filterMapInstruction35c<MethodCall>(
|
||||
"Lapp/revanced/extension",
|
||||
classDef,
|
||||
instruction,
|
||||
instructionIndex,
|
||||
)
|
||||
},
|
||||
transform = transform@{ mutableMethod, entry ->
|
||||
val (_, _, instructionIndex) = entry
|
||||
|
||||
// Replace the result of context.getPackageName(), if it is used in a user agent string.
|
||||
mutableMethod.apply {
|
||||
// After context.getPackageName() the result is moved to a register.
|
||||
val targetRegister = (
|
||||
getInstruction(instructionIndex + 1)
|
||||
as? OneRegisterInstruction ?: return@transform
|
||||
).registerA
|
||||
|
||||
// IndexOutOfBoundsException is technically possible here,
|
||||
// but no such occurrences are present in the app.
|
||||
val referee = getInstruction(instructionIndex + 2).getReference<MethodReference>()?.toString()
|
||||
|
||||
// Only replace string builder usage.
|
||||
if (referee != USER_AGENT_STRING_BUILDER_APPEND_METHOD_REFERENCE) {
|
||||
return@transform
|
||||
}
|
||||
|
||||
// Do not change the package name in methods that use resources, or for methods that use GmsCore.
|
||||
// Changing these package names will result in playback limitations,
|
||||
// particularly Android VR background audio only playback.
|
||||
val resourceOrGmsStringInstructionIndex = indexOfFirstInstruction {
|
||||
val reference = getReference<StringReference>()
|
||||
opcode == Opcode.CONST_STRING &&
|
||||
(reference?.string == "android.resource://" || reference?.string == "gcore_")
|
||||
}
|
||||
if (resourceOrGmsStringInstructionIndex >= 0) {
|
||||
return@transform
|
||||
}
|
||||
|
||||
// Overwrite the result of context.getPackageName() with the original package name.
|
||||
replaceInstruction(
|
||||
instructionIndex + 1,
|
||||
"const-string v$targetRegister, \"$originalPackageName\"",
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
@Suppress("unused")
|
||||
private enum class MethodCall(
|
||||
override val definedClassName: String,
|
||||
override val methodName: String,
|
||||
override val methodParams: Array<String>,
|
||||
override val returnType: String,
|
||||
) : IMethodCall {
|
||||
GetPackageName(
|
||||
"Landroid/content/Context;",
|
||||
"getPackageName",
|
||||
emptyArray(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
}
|
||||
@@ -21,7 +21,7 @@ val audioAdsPatch = bytecodePatch(
|
||||
addResourcesPatch,
|
||||
)
|
||||
|
||||
compatibleWith("tv.twitch.android.app"("15.4.1", "16.1.0", "16.9.1"))
|
||||
compatibleWith("tv.twitch.android.app")
|
||||
|
||||
execute {
|
||||
addResources("twitch", "ad.audio.audioAdsPatch")
|
||||
|
||||
@@ -19,7 +19,7 @@ val embeddedAdsPatch = bytecodePatch(
|
||||
settingsPatch,
|
||||
)
|
||||
|
||||
compatibleWith("tv.twitch.android.app"("15.4.1", "16.1.0", "16.9.1"))
|
||||
compatibleWith("tv.twitch.android.app")
|
||||
|
||||
execute {
|
||||
addResources("twitch", "ad.embedded.embeddedAdsPatch")
|
||||
|
||||
@@ -4,6 +4,6 @@ import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val createsUsherClientFingerprint = fingerprint {
|
||||
custom { method, _ ->
|
||||
method.definingClass.endsWith("Ltv/twitch/android/network/OkHttpClientFactory;") && method.name == "buildOkHttpClient"
|
||||
method.name == "buildOkHttpClient" && method.definingClass.endsWith("Ltv/twitch/android/network/OkHttpClientFactory;")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,24 +141,21 @@ val videoAdsPatch = bytecodePatch(
|
||||
)
|
||||
|
||||
// Spoof showAds JSON field.
|
||||
contentConfigShowAdsFingerprint.method.addInstructions(
|
||||
// Late versions of the app don't have the method anymore.
|
||||
contentConfigShowAdsFingerprint.methodOrNull?.addInstructions(
|
||||
0,
|
||||
"""
|
||||
${createConditionInstructions("v0")}
|
||||
const/4 v0, 0
|
||||
:$skipLabelName
|
||||
return v0
|
||||
""",
|
||||
${createConditionInstructions("v0")}
|
||||
const/4 v0, 0
|
||||
:$skipLabelName
|
||||
return v0
|
||||
""",
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"tv.twitch.android.app"(
|
||||
"15.4.1",
|
||||
"16.1.0",
|
||||
"16.9.1",
|
||||
),
|
||||
"tv.twitch.android.app",
|
||||
)
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ val showDeletedMessagesPatch = bytecodePatch(
|
||||
addResourcesPatch,
|
||||
)
|
||||
|
||||
compatibleWith("tv.twitch.android.app"("15.4.1", "16.1.0", "16.9.1"))
|
||||
compatibleWith("tv.twitch.android.app")
|
||||
|
||||
fun createSpoilerConditionInstructions(register: String = "v0") = """
|
||||
invoke-static {}, Lapp/revanced/extension/twitch/patches/ShowDeletedMessagesPatch;->shouldUseSpoiler()Z
|
||||
|
||||
@@ -20,7 +20,7 @@ val autoClaimChannelPointsPatch = bytecodePatch(
|
||||
addResourcesPatch,
|
||||
)
|
||||
|
||||
compatibleWith("tv.twitch.android.app"("15.4.1", "16.1.0", "16.9.1"))
|
||||
compatibleWith("tv.twitch.android.app")
|
||||
|
||||
execute {
|
||||
addResources("twitch", "chat.autoclaim.autoClaimChannelPointsPatch")
|
||||
|
||||
@@ -48,13 +48,7 @@ val settingsPatch = bytecodePatch(
|
||||
settingsPatch(preferences = preferences),
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"tv.twitch.android.app"(
|
||||
"15.4.1",
|
||||
"16.1.0",
|
||||
"16.9.1",
|
||||
),
|
||||
)
|
||||
compatibleWith("tv.twitch.android.app")
|
||||
|
||||
execute {
|
||||
addResources("twitch", "misc.settings.settingsPatch")
|
||||
|
||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.removeInstructions
|
||||
import app.revanced.patcher.patch.BytecodePatchContext
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.reddit.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.twitter.misc.extension.sharedExtensionPatch
|
||||
import java.io.InvalidClassException
|
||||
|
||||
/**
|
||||
|
||||
@@ -154,6 +154,7 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
PreferenceScreenPreference(
|
||||
"revanced_comments_screen",
|
||||
preferences = setOf(
|
||||
SwitchPreference("revanced_hide_comments_chat_summary"),
|
||||
SwitchPreference("revanced_hide_comments_by_members_header"),
|
||||
SwitchPreference("revanced_hide_comments_section"),
|
||||
SwitchPreference("revanced_hide_comments_create_a_short_button"),
|
||||
@@ -221,7 +222,6 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
SwitchPreference("revanced_hide_notify_me_button"),
|
||||
SwitchPreference("revanced_hide_playables"),
|
||||
SwitchPreference("revanced_hide_search_result_recommendations"),
|
||||
SwitchPreference("revanced_hide_search_result_shelf_header"),
|
||||
SwitchPreference("revanced_hide_show_more_button"),
|
||||
SwitchPreference("revanced_hide_doodles"),
|
||||
)
|
||||
|
||||
@@ -240,14 +240,14 @@ val miniplayerPatch = bytecodePatch(
|
||||
),
|
||||
)
|
||||
|
||||
fun MutableMethod.insertBooleanOverride(index: Int, methodName: String) {
|
||||
fun MutableMethod.insertMiniplayerBooleanOverride(index: Int, methodName: String) {
|
||||
val register = getInstruction<OneRegisterInstruction>(index).registerA
|
||||
addInstructions(
|
||||
index,
|
||||
"""
|
||||
invoke-static {v$register}, $EXTENSION_CLASS_DESCRIPTOR->$methodName(Z)Z
|
||||
move-result v$register
|
||||
""",
|
||||
invoke-static {v$register}, $EXTENSION_CLASS_DESCRIPTOR->$methodName(Z)Z
|
||||
move-result v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
|
||||
@@ -257,29 +257,25 @@ val miniplayerPatch = bytecodePatch(
|
||||
* Adds an override to force legacy tablet miniplayer to be used or not used.
|
||||
*/
|
||||
fun MutableMethod.insertLegacyTabletMiniplayerOverride(index: Int) {
|
||||
insertBooleanOverride(index, "getLegacyTabletMiniplayerOverride")
|
||||
insertMiniplayerBooleanOverride(index, "getLegacyTabletMiniplayerOverride")
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an override to force modern miniplayer to be used or not used.
|
||||
*/
|
||||
fun MutableMethod.insertModernMiniplayerOverride(index: Int) {
|
||||
insertBooleanOverride(index, "getModernMiniplayerOverride")
|
||||
insertMiniplayerBooleanOverride(index, "getModernMiniplayerOverride")
|
||||
}
|
||||
|
||||
fun Fingerprint.insertLiteralValueBooleanOverride(
|
||||
fun Fingerprint.insertMiniplayerFeatureFlagBooleanOverride(
|
||||
literal: Long,
|
||||
extensionMethod: String,
|
||||
) {
|
||||
method.apply {
|
||||
val literalIndex = indexOfFirstLiteralInstructionOrThrow(literal)
|
||||
val targetIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
|
||||
) = method.insertFeatureFlagBooleanOverride(
|
||||
literal,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->$extensionMethod(Z)Z"
|
||||
)
|
||||
|
||||
insertBooleanOverride(targetIndex + 1, extensionMethod)
|
||||
}
|
||||
}
|
||||
|
||||
fun Fingerprint.insertLiteralValueFloatOverride(
|
||||
fun Fingerprint.insertMiniplayerFeatureFlagFloatOverride(
|
||||
literal: Long,
|
||||
extensionMethod: String,
|
||||
) {
|
||||
@@ -370,24 +366,24 @@ val miniplayerPatch = bytecodePatch(
|
||||
}
|
||||
|
||||
if (is_19_23_or_greater) {
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
|
||||
MINIPLAYER_DRAG_DROP_FEATURE_KEY,
|
||||
"enableMiniplayerDragAndDrop",
|
||||
)
|
||||
}
|
||||
|
||||
if (is_19_25_or_greater) {
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
|
||||
MINIPLAYER_MODERN_FEATURE_LEGACY_KEY,
|
||||
"getModernMiniplayerOverride",
|
||||
)
|
||||
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
|
||||
MINIPLAYER_MODERN_FEATURE_KEY,
|
||||
"getModernFeatureFlagsActiveOverride",
|
||||
)
|
||||
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
|
||||
MINIPLAYER_DOUBLE_TAP_FEATURE_KEY,
|
||||
"enableMiniplayerDoubleTapAction",
|
||||
)
|
||||
@@ -426,19 +422,19 @@ val miniplayerPatch = bytecodePatch(
|
||||
}
|
||||
|
||||
if (is_19_36_or_greater) {
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
|
||||
MINIPLAYER_ROUNDED_CORNERS_FEATURE_KEY,
|
||||
"setRoundedCorners",
|
||||
)
|
||||
}
|
||||
|
||||
if (is_19_43_or_greater) {
|
||||
miniplayerOnCloseHandlerFingerprint.insertLiteralValueBooleanOverride(
|
||||
miniplayerOnCloseHandlerFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
|
||||
MINIPLAYER_DISABLED_FEATURE_KEY,
|
||||
"getMiniplayerOnCloseHandler"
|
||||
)
|
||||
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
miniplayerModernConstructorFingerprint.insertMiniplayerFeatureFlagBooleanOverride(
|
||||
MINIPLAYER_HORIZONTAL_DRAG_FEATURE_KEY,
|
||||
"setHorizontalDrag",
|
||||
)
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package app.revanced.patches.youtube.layout.player.fullscreen
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.literal
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal const val OPEN_VIDEOS_FULLSCREEN_PORTRAIT_FEATURE_FLAG = 45666112L
|
||||
|
||||
internal val openVideosFullscreenPortraitFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters("L", "Lj\$/util/Optional;")
|
||||
literal {
|
||||
OPEN_VIDEOS_FULLSCREEN_PORTRAIT_FEATURE_FLAG
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package app.revanced.patches.youtube.layout.player.fullscreen
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.util.insertFeatureFlagBooleanOverride
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/OpenVideosFullscreen;"
|
||||
|
||||
@Suppress("unused")
|
||||
val openVideosFullscreenPatch = bytecodePatch(
|
||||
name = "Open videos fullscreen",
|
||||
description = "Adds an option to open videos in full screen portrait mode.",
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.46.42",
|
||||
)
|
||||
)
|
||||
|
||||
execute {
|
||||
openVideosFullscreenPortraitFingerprint.method.insertFeatureFlagBooleanOverride(
|
||||
OPEN_VIDEOS_FULLSCREEN_PORTRAIT_FEATURE_FLAG,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->openVideoFullscreenPortrait(Z)Z"
|
||||
)
|
||||
|
||||
// Add resources and setting last, in case the user force patches an old incompatible version.
|
||||
|
||||
addResources("youtube", "layout.player.fullscreen.openVideosFullscreen")
|
||||
|
||||
PreferenceScreen.PLAYER.addPreferences(
|
||||
SwitchPreference("revanced_open_videos_fullscreen_portrait")
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,7 @@ import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
|
||||
import app.revanced.util.inputStreamFromBundledResource
|
||||
import app.revanced.util.insertFeatureFlagBooleanOverride
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
@@ -228,19 +229,10 @@ val seekbarColorPatch = bytecodePatch(
|
||||
|
||||
// 19.25+ changes
|
||||
|
||||
playerSeekbarGradientConfigFingerprint.method.apply {
|
||||
val literalIndex = indexOfFirstLiteralInstructionOrThrow(PLAYER_SEEKBAR_GRADIENT_FEATURE_FLAG)
|
||||
val resultIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
|
||||
val register = getInstruction<OneRegisterInstruction>(resultIndex).registerA
|
||||
|
||||
addInstructions(
|
||||
resultIndex + 1,
|
||||
"""
|
||||
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->playerSeekbarGradientEnabled(Z)Z
|
||||
move-result v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
playerSeekbarGradientConfigFingerprint.method.insertFeatureFlagBooleanOverride(
|
||||
PLAYER_SEEKBAR_GRADIENT_FEATURE_FLAG,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->playerSeekbarGradientEnabled(Z)Z"
|
||||
)
|
||||
|
||||
lithoLinearGradientFingerprint.method.addInstruction(
|
||||
0,
|
||||
@@ -255,19 +247,10 @@ val seekbarColorPatch = bytecodePatch(
|
||||
launchScreenLayoutTypeFingerprint,
|
||||
mainActivityOnCreateFingerprint
|
||||
).forEach { fingerprint ->
|
||||
fingerprint.method.apply {
|
||||
val literalIndex = indexOfFirstLiteralInstructionOrThrow(launchScreenLayoutTypeLotteFeatureFlag)
|
||||
val resultIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
|
||||
val register = getInstruction<OneRegisterInstruction>(resultIndex).registerA
|
||||
|
||||
addInstructions(
|
||||
resultIndex + 1,
|
||||
"""
|
||||
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->useLotteLaunchSplashScreen(Z)Z
|
||||
move-result v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
fingerprint.method.insertFeatureFlagBooleanOverride(
|
||||
launchScreenLayoutTypeLotteFeatureFlag,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->useLotteLaunchSplashScreen(Z)Z"
|
||||
)
|
||||
}
|
||||
|
||||
// Hook the splash animation drawable to set the a seekbar color theme.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.revanced.patches.youtube.layout.theme
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
@@ -17,10 +16,7 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.util.forEachChildElement
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import app.revanced.util.insertFeatureFlagBooleanOverride
|
||||
import org.w3c.dom.Element
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
@@ -212,19 +208,10 @@ val themePatch = bytecodePatch(
|
||||
SwitchPreference("revanced_gradient_loading_screen"),
|
||||
)
|
||||
|
||||
useGradientLoadingScreenFingerprint.method.apply {
|
||||
val literalIndex = indexOfFirstLiteralInstructionOrThrow(GRADIENT_LOADING_SCREEN_AB_CONSTANT)
|
||||
val isEnabledIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
|
||||
val isEnabledRegister = getInstruction<OneRegisterInstruction>(isEnabledIndex).registerA
|
||||
|
||||
addInstructions(
|
||||
isEnabledIndex + 1,
|
||||
"""
|
||||
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->gradientLoadingScreenEnabled()Z
|
||||
move-result v$isEnabledRegister
|
||||
""",
|
||||
)
|
||||
}
|
||||
useGradientLoadingScreenFingerprint.method.insertFeatureFlagBooleanOverride(
|
||||
GRADIENT_LOADING_SCREEN_AB_CONSTANT,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->gradientLoadingScreenEnabled(Z)Z"
|
||||
)
|
||||
|
||||
mapOf(
|
||||
themeHelperLightColorFingerprint to lightThemeBackgroundColor,
|
||||
|
||||
@@ -110,22 +110,22 @@ val enableDebuggingPatch = bytecodePatch(
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
experimentalStringFeatureFlagFingerprint.match(
|
||||
experimentalFeatureFlagParentFingerprint.originalClassDef
|
||||
).method.apply {
|
||||
val insertIndex = indexOfFirstInstructionReversedOrThrow(Opcode.MOVE_RESULT_OBJECT)
|
||||
experimentalStringFeatureFlagFingerprint.match(
|
||||
experimentalFeatureFlagParentFingerprint.originalClassDef
|
||||
).method.apply {
|
||||
val insertIndex = indexOfFirstInstructionReversedOrThrow(Opcode.MOVE_RESULT_OBJECT)
|
||||
|
||||
addInstructions(
|
||||
insertIndex,
|
||||
"""
|
||||
move-result-object v0
|
||||
invoke-static { v0, p1, p2, p3 }, $EXTENSION_CLASS_DESCRIPTOR->isStringFeatureFlagEnabled(Ljava/lang/String;JLjava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v0
|
||||
return-object v0
|
||||
"""
|
||||
)
|
||||
addInstructions(
|
||||
insertIndex,
|
||||
"""
|
||||
move-result-object v0
|
||||
invoke-static { v0, p1, p2, p3 }, $EXTENSION_CLASS_DESCRIPTOR->isStringFeatureFlagEnabled(Ljava/lang/String;JLjava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v0
|
||||
return-object v0
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// There exists other experimental accessor methods for byte[]
|
||||
|
||||
@@ -34,10 +34,7 @@ internal val disableCairoSettingsPatch = bytecodePatch(
|
||||
* <a href="https://github.com/qnblackcat/uYouPlus/issues/1468">uYouPlus#1468</a>.
|
||||
*/
|
||||
cairoFragmentConfigFingerprint.method.apply {
|
||||
val literalIndex = indexOfFirstLiteralInstructionOrThrow(
|
||||
CAIRO_CONFIG_LITERAL_VALUE,
|
||||
)
|
||||
|
||||
val literalIndex = indexOfFirstLiteralInstructionOrThrow(CAIRO_CONFIG_LITERAL_VALUE)
|
||||
val resultIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
|
||||
val register = getInstruction<OneRegisterInstruction>(resultIndex).registerA
|
||||
|
||||
|
||||
@@ -1,243 +1,9 @@
|
||||
package app.revanced.patches.youtube.misc.fix.playback
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.instructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.ListPreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch;"
|
||||
|
||||
val spoofVideoStreamsPatch = bytecodePatch(
|
||||
name = "Spoof video streams",
|
||||
description = "Spoofs the client video streams to allow video playback.",
|
||||
) {
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"18.38.44",
|
||||
"18.49.37",
|
||||
"19.16.39",
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
"19.46.42",
|
||||
),
|
||||
)
|
||||
|
||||
dependsOn(
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
userAgentClientSpoofPatch,
|
||||
)
|
||||
|
||||
execute {
|
||||
addResources("youtube", "misc.fix.playback.spoofVideoStreamsPatch")
|
||||
|
||||
PreferenceScreen.MISC.addPreferences(
|
||||
PreferenceScreenPreference(
|
||||
key = "revanced_spoof_video_streams_screen",
|
||||
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
|
||||
preferences = setOf(
|
||||
SwitchPreference("revanced_spoof_video_streams"),
|
||||
ListPreference(
|
||||
"revanced_spoof_video_streams_client",
|
||||
summaryKey = null,
|
||||
),
|
||||
SwitchPreference(
|
||||
"revanced_spoof_video_streams_ios_force_avc",
|
||||
tag = "app.revanced.extension.youtube.settings.preference.ForceAVCSpoofingPreference",
|
||||
),
|
||||
NonInteractivePreference("revanced_spoof_video_streams_about_android_vr"),
|
||||
NonInteractivePreference("revanced_spoof_video_streams_about_ios"),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
// region Block /initplayback requests to fall back to /get_watch requests.
|
||||
|
||||
val moveUriStringIndex = buildInitPlaybackRequestFingerprint.patternMatch!!.startIndex
|
||||
|
||||
buildInitPlaybackRequestFingerprint.method.apply {
|
||||
val targetRegister = getInstruction<OneRegisterInstruction>(moveUriStringIndex).registerA
|
||||
|
||||
addInstructions(
|
||||
moveUriStringIndex + 1,
|
||||
"""
|
||||
invoke-static { v$targetRegister }, $EXTENSION_CLASS_DESCRIPTOR->blockInitPlaybackRequest(Ljava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v$targetRegister
|
||||
""",
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Block /get_watch requests to fall back to /player requests.
|
||||
|
||||
val invokeToStringIndex = buildPlayerRequestURIFingerprint.patternMatch!!.startIndex
|
||||
|
||||
buildPlayerRequestURIFingerprint.method.apply {
|
||||
val uriRegister = getInstruction<FiveRegisterInstruction>(invokeToStringIndex).registerC
|
||||
|
||||
addInstructions(
|
||||
invokeToStringIndex,
|
||||
"""
|
||||
invoke-static { v$uriRegister }, $EXTENSION_CLASS_DESCRIPTOR->blockGetWatchRequest(Landroid/net/Uri;)Landroid/net/Uri;
|
||||
move-result-object v$uriRegister
|
||||
""",
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Get replacement streams at player requests.
|
||||
|
||||
buildRequestFingerprint.method.apply {
|
||||
val newRequestBuilderIndex = indexOfFirstInstructionOrThrow {
|
||||
opcode == Opcode.INVOKE_VIRTUAL &&
|
||||
getReference<MethodReference>()?.name == "newUrlRequestBuilder"
|
||||
}
|
||||
val urlRegister = getInstruction<FiveRegisterInstruction>(newRequestBuilderIndex).registerD
|
||||
val freeRegister = getInstruction<OneRegisterInstruction>(newRequestBuilderIndex + 1).registerA
|
||||
|
||||
addInstructions(
|
||||
newRequestBuilderIndex,
|
||||
"""
|
||||
move-object v$freeRegister, p1
|
||||
invoke-static { v$urlRegister, v$freeRegister }, $EXTENSION_CLASS_DESCRIPTOR->fetchStreams(Ljava/lang/String;Ljava/util/Map;)V
|
||||
""",
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Replace the streaming data with the replacement streams.
|
||||
|
||||
createStreamingDataFingerprint.method.apply {
|
||||
val setStreamDataMethodName = "patch_setStreamingData"
|
||||
val resultMethodType = createStreamingDataFingerprint.classDef.type
|
||||
val videoDetailsIndex = createStreamingDataFingerprint.patternMatch!!.endIndex
|
||||
val videoDetailsRegister = getInstruction<TwoRegisterInstruction>(videoDetailsIndex).registerA
|
||||
val videoDetailsClass = getInstruction(videoDetailsIndex).getReference<FieldReference>()!!.type
|
||||
|
||||
addInstruction(
|
||||
videoDetailsIndex + 1,
|
||||
"invoke-direct { p0, v$videoDetailsRegister }, " +
|
||||
"$resultMethodType->$setStreamDataMethodName($videoDetailsClass)V",
|
||||
)
|
||||
|
||||
val protobufClass = protobufClassParseByteBufferFingerprint.method.definingClass
|
||||
val setStreamingDataIndex = createStreamingDataFingerprint.patternMatch!!.startIndex
|
||||
|
||||
val playerProtoClass = getInstruction(setStreamingDataIndex + 1)
|
||||
.getReference<FieldReference>()!!.definingClass
|
||||
|
||||
val setStreamingDataField = getInstruction(setStreamingDataIndex).getReference<FieldReference>()
|
||||
|
||||
val getStreamingDataField = getInstruction(
|
||||
indexOfFirstInstructionOrThrow {
|
||||
opcode == Opcode.IGET_OBJECT && getReference<FieldReference>()?.definingClass == playerProtoClass
|
||||
},
|
||||
).getReference<FieldReference>()
|
||||
|
||||
// Use a helper method to avoid the need of picking out multiple free registers from the hooked code.
|
||||
createStreamingDataFingerprint.classDef.methods.add(
|
||||
ImmutableMethod(
|
||||
resultMethodType,
|
||||
setStreamDataMethodName,
|
||||
listOf(ImmutableMethodParameter(videoDetailsClass, null, "videoDetails")),
|
||||
"V",
|
||||
AccessFlags.PRIVATE.value or AccessFlags.FINAL.value,
|
||||
null,
|
||||
null,
|
||||
MutableMethodImplementation(9),
|
||||
).toMutable().apply {
|
||||
addInstructionsWithLabels(
|
||||
0,
|
||||
"""
|
||||
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->isSpoofingEnabled()Z
|
||||
move-result v0
|
||||
if-eqz v0, :disabled
|
||||
|
||||
# Get video id.
|
||||
iget-object v2, p1, $videoDetailsClass->c:Ljava/lang/String;
|
||||
if-eqz v2, :disabled
|
||||
|
||||
# Get streaming data.
|
||||
invoke-static { v2 }, $EXTENSION_CLASS_DESCRIPTOR->getStreamingData(Ljava/lang/String;)Ljava/nio/ByteBuffer;
|
||||
move-result-object v3
|
||||
if-eqz v3, :disabled
|
||||
|
||||
# Parse streaming data.
|
||||
sget-object v4, $playerProtoClass->a:$playerProtoClass
|
||||
invoke-static { v4, v3 }, $protobufClass->parseFrom(${protobufClass}Ljava/nio/ByteBuffer;)$protobufClass
|
||||
move-result-object v5
|
||||
check-cast v5, $playerProtoClass
|
||||
|
||||
# Set streaming data.
|
||||
iget-object v6, v5, $getStreamingDataField
|
||||
if-eqz v6, :disabled
|
||||
iput-object v6, p0, $setStreamingDataField
|
||||
|
||||
:disabled
|
||||
return-void
|
||||
""",
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Remove /videoplayback request body to fix playback.
|
||||
// It is assumed, YouTube makes a request with a body tuned for Android.
|
||||
// Requesting streams intended for other platforms with a body tuned for Android could be the cause of 400 errors.
|
||||
// A proper fix may include modifying the request body to match the platforms expected body.
|
||||
|
||||
buildMediaDataSourceFingerprint.method.apply {
|
||||
val targetIndex = instructions.lastIndex
|
||||
|
||||
// Instructions are added just before the method returns,
|
||||
// so there's no concern of clobbering in-use registers.
|
||||
addInstructions(
|
||||
targetIndex,
|
||||
"""
|
||||
# Field a: Stream uri.
|
||||
# Field c: Http method.
|
||||
# Field d: Post data.
|
||||
move-object v0, p0 # method has over 15 registers and must copy p0 to a lower register.
|
||||
iget-object v1, v0, $definingClass->a:Landroid/net/Uri;
|
||||
iget v2, v0, $definingClass->c:I
|
||||
iget-object v3, v0, $definingClass->d:[B
|
||||
invoke-static { v1, v2, v3 }, $EXTENSION_CLASS_DESCRIPTOR->removeVideoPlaybackPostBody(Landroid/net/Uri;I[B)[B
|
||||
move-result-object v1
|
||||
iput-object v1, v0, $definingClass->d:[B
|
||||
""",
|
||||
)
|
||||
}
|
||||
// endregion
|
||||
}
|
||||
@Deprecated("Use app.revanced.patches.youtube.misc.spoof.spoofVideoStreamsPatch instead.")
|
||||
@Suppress("unused")
|
||||
val spoofVideoStreamsPatch = bytecodePatch {
|
||||
dependsOn(app.revanced.patches.youtube.misc.spoof.spoofVideoStreamsPatch)
|
||||
}
|
||||
|
||||
@@ -1,82 +1,9 @@
|
||||
package app.revanced.patches.youtube.misc.fix.playback
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patches.all.misc.transformation.IMethodCall
|
||||
import app.revanced.patches.all.misc.transformation.filterMapInstruction35c
|
||||
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||
|
||||
private const val ORIGINAL_PACKAGE_NAME = "com.google.android.youtube"
|
||||
private const val USER_AGENT_STRING_BUILDER_APPEND_METHOD_REFERENCE =
|
||||
"Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;"
|
||||
|
||||
val userAgentClientSpoofPatch = transformInstructionsPatch(
|
||||
filterMap = { classDef, _, instruction, instructionIndex ->
|
||||
filterMapInstruction35c<MethodCall>(
|
||||
"Lapp/revanced/extension",
|
||||
classDef,
|
||||
instruction,
|
||||
instructionIndex,
|
||||
)
|
||||
},
|
||||
transform = transform@{ mutableMethod, entry ->
|
||||
val (_, _, instructionIndex) = entry
|
||||
|
||||
// Replace the result of context.getPackageName(), if it is used in a user agent string.
|
||||
mutableMethod.apply {
|
||||
// After context.getPackageName() the result is moved to a register.
|
||||
val targetRegister = (
|
||||
getInstruction(instructionIndex + 1)
|
||||
as? OneRegisterInstruction ?: return@transform
|
||||
).registerA
|
||||
|
||||
// IndexOutOfBoundsException is technically possible here,
|
||||
// but no such occurrences are present in the app.
|
||||
val referee = getInstruction(instructionIndex + 2).getReference<MethodReference>()?.toString()
|
||||
|
||||
// Only replace string builder usage.
|
||||
if (referee != USER_AGENT_STRING_BUILDER_APPEND_METHOD_REFERENCE) {
|
||||
return@transform
|
||||
}
|
||||
|
||||
// Do not change the package name in methods that use resources, or for methods that use GmsCore.
|
||||
// Changing these package names will result in playback limitations,
|
||||
// particularly Android VR background audio only playback.
|
||||
val resourceOrGmsStringInstructionIndex = indexOfFirstInstruction {
|
||||
val reference = getReference<StringReference>()
|
||||
opcode == Opcode.CONST_STRING &&
|
||||
(reference?.string == "android.resource://" || reference?.string == "gcore_")
|
||||
}
|
||||
if (resourceOrGmsStringInstructionIndex >= 0) {
|
||||
return@transform
|
||||
}
|
||||
|
||||
// Overwrite the result of context.getPackageName() with the original package name.
|
||||
replaceInstruction(
|
||||
instructionIndex + 1,
|
||||
"const-string v$targetRegister, \"$ORIGINAL_PACKAGE_NAME\"",
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Deprecated("Use app.revanced.patches.youtube.misc.spoof.userAgentClientSpoofPatch instead.")
|
||||
@Suppress("unused")
|
||||
private enum class MethodCall(
|
||||
override val definedClassName: String,
|
||||
override val methodName: String,
|
||||
override val methodParams: Array<String>,
|
||||
override val returnType: String,
|
||||
) : IMethodCall {
|
||||
GetPackageName(
|
||||
"Landroid/content/Context;",
|
||||
"getPackageName",
|
||||
emptyArray(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
val userAgentClientSpoofPatch = bytecodePatch {
|
||||
dependsOn(app.revanced.patches.youtube.misc.spoof.userAgentClientSpoofPatch)
|
||||
}
|
||||
|
||||
@@ -9,11 +9,11 @@ import app.revanced.patches.shared.misc.settings.preference.IntentPreference
|
||||
import app.revanced.patches.shared.primeMethodFingerprint
|
||||
import app.revanced.patches.youtube.layout.buttons.overlay.hidePlayerOverlayButtonsPatch
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.fix.playback.spoofVideoStreamsPatch
|
||||
import app.revanced.patches.youtube.misc.gms.Constants.REVANCED_YOUTUBE_PACKAGE_NAME
|
||||
import app.revanced.patches.youtube.misc.gms.Constants.YOUTUBE_PACKAGE_NAME
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.patches.youtube.misc.spoof.spoofVideoStreamsPatch
|
||||
import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
|
||||
|
||||
@Suppress("unused")
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package app.revanced.patches.youtube.misc.spoof
|
||||
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.shared.misc.settings.preference.ListPreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.shared.misc.spoof.spoofVideoStreamsPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
|
||||
val spoofVideoStreamsPatch = spoofVideoStreamsPatch({
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"18.38.44",
|
||||
"18.49.37",
|
||||
"19.16.39",
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
"19.46.42",
|
||||
),
|
||||
)
|
||||
|
||||
dependsOn(
|
||||
userAgentClientSpoofPatch,
|
||||
settingsPatch,
|
||||
)
|
||||
}, {
|
||||
addResources("youtube", "misc.fix.playback.spoofVideoStreamsPatch")
|
||||
|
||||
PreferenceScreen.MISC.addPreferences(
|
||||
PreferenceScreenPreference(
|
||||
key = "revanced_spoof_video_streams_screen",
|
||||
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
|
||||
preferences = setOf(
|
||||
SwitchPreference("revanced_spoof_video_streams"),
|
||||
ListPreference(
|
||||
"revanced_spoof_video_streams_client",
|
||||
summaryKey = null,
|
||||
),
|
||||
ListPreference(
|
||||
"revanced_spoof_video_streams_language",
|
||||
summaryKey = null
|
||||
),
|
||||
SwitchPreference("revanced_spoof_video_streams_ios_force_avc"),
|
||||
// Preference requires a title but the actual text is chosen at runtime.
|
||||
NonInteractivePreference(
|
||||
key = "revanced_spoof_video_streams_about_android_vr",
|
||||
tag = "app.revanced.extension.youtube.settings.preference.SpoofStreamingDataSideEffectsPreference"
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
})
|
||||
@@ -0,0 +1,5 @@
|
||||
package app.revanced.patches.youtube.misc.spoof
|
||||
|
||||
import app.revanced.patches.shared.misc.spoof.userAgentClientSpoofPatch
|
||||
|
||||
val userAgentClientSpoofPatch = userAgentClientSpoofPatch("com.google.android.youtube")
|
||||
@@ -0,0 +1,23 @@
|
||||
package app.revanced.patches.youtube.video.audio
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val streamingModelBuilderFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("L")
|
||||
strings("vprng")
|
||||
}
|
||||
|
||||
internal val menuItemAudioTrackFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
parameters("L")
|
||||
returns("V")
|
||||
strings("menu_item_audio_track")
|
||||
}
|
||||
|
||||
internal val audioStreamingTypeSelector = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
|
||||
returns("L")
|
||||
strings("raw") // String is not unique
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
package app.revanced.patches.youtube.video.audio
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
||||
import com.android.tools.smali.dexlib2.iface.Method
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableField
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/ForceOriginalAudioPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val forceOriginalAudioPatch = bytecodePatch(
|
||||
name = "Force original audio",
|
||||
description = "Adds an option to always use the original audio track.",
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"18.38.44",
|
||||
"18.49.37",
|
||||
"19.16.39",
|
||||
"19.25.37",
|
||||
"19.34.42",
|
||||
"19.43.41",
|
||||
"19.45.38",
|
||||
"19.46.42",
|
||||
),
|
||||
)
|
||||
|
||||
execute {
|
||||
addResources("youtube", "video.audio.forceOriginalAudioPatch")
|
||||
|
||||
PreferenceScreen.VIDEO.addPreferences(
|
||||
SwitchPreference("revanced_force_original_audio")
|
||||
)
|
||||
|
||||
fun Method.firstFormatStreamingModelCall(
|
||||
returnType: String = "Ljava/lang/String;"
|
||||
): MutableMethod {
|
||||
val audioTrackIdIndex = indexOfFirstInstructionOrThrow {
|
||||
val reference = getReference<MethodReference>()
|
||||
reference?.definingClass == "Lcom/google/android/libraries/youtube/innertube/model/media/FormatStreamModel;"
|
||||
&& reference.returnType == returnType
|
||||
}
|
||||
|
||||
return navigate(this).to(audioTrackIdIndex).stop()
|
||||
}
|
||||
|
||||
// Accessor methods of FormatStreamModel have no string constants and
|
||||
// opcodes are identical to other methods in the same class,
|
||||
// so must walk from another class that use the methods.
|
||||
val isDefaultMethod = streamingModelBuilderFingerprint.originalMethod.firstFormatStreamingModelCall("Z")
|
||||
val audioTrackIdMethod = menuItemAudioTrackFingerprint.originalMethod.firstFormatStreamingModelCall()
|
||||
val audioTrackDisplayNameMethod = audioStreamingTypeSelector.originalMethod.firstFormatStreamingModelCall()
|
||||
val formatStreamModelClass = proxy(classes.first {
|
||||
it.type == audioTrackIdMethod.definingClass
|
||||
}).mutableClass
|
||||
|
||||
formatStreamModelClass.apply {
|
||||
// Add a new field to store the override.
|
||||
val helperFieldName = "isDefaultAudioTrackOverride"
|
||||
fields.add(
|
||||
ImmutableField(
|
||||
type,
|
||||
helperFieldName,
|
||||
"Ljava/lang/Boolean;",
|
||||
// Boolean is a 100% immutable class (all fields are final)
|
||||
// and safe to write to a shared field without volatile/synchronization,
|
||||
// but without volatile the field can show stale data
|
||||
// and the same field is calculated more than once by different threads.
|
||||
AccessFlags.PRIVATE.value or AccessFlags.VOLATILE.value,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
).toMutable()
|
||||
)
|
||||
|
||||
// Add a helper method because the isDefaultAudioTrack() has only 2 registers and 3 are needed.
|
||||
val helperMethodClass = type
|
||||
val helperMethodName = "extension_isDefaultAudioTrack"
|
||||
val helperMethod = ImmutableMethod(
|
||||
helperMethodClass,
|
||||
helperMethodName,
|
||||
listOf(ImmutableMethodParameter("Z", null, null)),
|
||||
"Z",
|
||||
AccessFlags.PRIVATE.value,
|
||||
null,
|
||||
null,
|
||||
MutableMethodImplementation(6),
|
||||
).toMutable().apply {
|
||||
addInstructionsWithLabels(
|
||||
0,
|
||||
"""
|
||||
iget-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
|
||||
if-eqz v0, :call_extension
|
||||
invoke-virtual { v0 }, Ljava/lang/Boolean;->booleanValue()Z
|
||||
move-result v3
|
||||
return v3
|
||||
|
||||
:call_extension
|
||||
invoke-virtual { p0 }, $audioTrackIdMethod
|
||||
move-result-object v1
|
||||
|
||||
invoke-virtual { p0 }, $audioTrackDisplayNameMethod
|
||||
move-result-object v2
|
||||
|
||||
invoke-static { p1, v1, v2 }, $EXTENSION_CLASS_DESCRIPTOR->isDefaultAudioStream(ZLjava/lang/String;Ljava/lang/String;)Z
|
||||
move-result v3
|
||||
|
||||
invoke-static { v3 }, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
|
||||
move-result-object v0
|
||||
iput-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
|
||||
return v3
|
||||
"""
|
||||
)
|
||||
}
|
||||
methods.add(helperMethod)
|
||||
|
||||
// Modify isDefaultAudioTrack() to call extension helper method.
|
||||
isDefaultMethod.apply {
|
||||
val index = indexOfFirstInstructionOrThrow(Opcode.RETURN)
|
||||
val register = getInstruction<OneRegisterInstruction>(index).registerA
|
||||
|
||||
addInstructions(
|
||||
index,
|
||||
"""
|
||||
invoke-direct { p0, v$register }, $helperMethodClass->$helperMethodName(Z)Z
|
||||
move-result v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@ import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.Method
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.Instruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.WideLiteralInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.Reference
|
||||
@@ -402,6 +403,20 @@ fun Method.findInstructionIndicesReversedOrThrow(opcode: Opcode): List<Int> {
|
||||
return instructions
|
||||
}
|
||||
|
||||
internal fun MutableMethod.insertFeatureFlagBooleanOverride(literal: Long, extensionsMethod: String) {
|
||||
val literalIndex = indexOfFirstLiteralInstructionOrThrow(literal)
|
||||
val index = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
|
||||
val register = getInstruction<OneRegisterInstruction>(index).registerA
|
||||
|
||||
addInstructions(
|
||||
index + 1,
|
||||
"""
|
||||
invoke-static { v$register }, $extensionsMethod
|
||||
move-result v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Called for _all_ instructions with the given literal value.
|
||||
*/
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package app.revanced.util.resource
|
||||
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import org.w3c.dom.Document
|
||||
import org.w3c.dom.Node
|
||||
import java.util.logging.Logger
|
||||
|
||||
/**
|
||||
* A string value.
|
||||
@@ -19,13 +19,36 @@ class StringResource(
|
||||
) : BaseResource(name, "string") {
|
||||
override fun serialize(ownerDocument: Document, resourceCallback: (BaseResource) -> Unit) =
|
||||
super.serialize(ownerDocument, resourceCallback).apply {
|
||||
|
||||
fun String.validateAndroidStringEscaping() : String {
|
||||
if (value.startsWith('"') && value.endsWith('"')) {
|
||||
// Raw strings allow unescaped single quote but not double quote.
|
||||
if (!value.substring(1, value.length - 1).contains(Regex("(?<!\\\\)[\"]"))) {
|
||||
return this;
|
||||
}
|
||||
} else {
|
||||
if (value.contains('\n')) {
|
||||
// Don't throw an exception, otherwise unnoticed mistakes
|
||||
// in Crowdin can cause patching failures.
|
||||
// Incorrectly escaped strings still work but do not display as intended.
|
||||
Logger.getLogger(StringResource.javaClass.name).severe(
|
||||
"String $name is not raw but contains encoded new line characters: $value")
|
||||
}
|
||||
if (!value.contains(Regex("(?<!\\\\)['\"]"))) {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
Logger.getLogger(StringResource.javaClass.name).severe(
|
||||
"String $name cannot contain unescaped quotes in value: $value")
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
// if the string is un-formatted, explicitly add the formatted attribute
|
||||
if (!formatted) setAttribute("formatted", "false")
|
||||
|
||||
if (value.contains(Regex("(?<!\\\\)['\"]")))
|
||||
throw PatchException("String $name cannot contain unescaped quotes in value \"$value\".")
|
||||
|
||||
textContent = value
|
||||
textContent = value.validateAndroidStringEscaping();
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -147,6 +136,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -147,6 +136,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -58,18 +47,26 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Settings about dialog. -->
|
||||
<string name="revanced_settings_about_links_body">أنت تستخدم إصدار ReVanced Patches <i>%s</i></string>
|
||||
<string name="revanced_settings_about_links_dev_header">ملاحظة</string>
|
||||
<string name="revanced_settings_about_links_dev_body">هذا الإصدار هو إصدار مسبق، وقد تواجه مشاكل غير متوقعة</string>
|
||||
<string name="revanced_settings_about_links_dev_body">هذه النسخة هي إصدار مسبق وقد تواجه مشكلات غير متوقعة</string>
|
||||
<string name="revanced_settings_about_links_header">الروابط الرسمية</string>
|
||||
<!-- NOTE: the about strings above are duplicated in the TikTok about screen code,
|
||||
and changes made here must also be made there. -->
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">لم يتم تثبيت MicroG GmsCore . قم بتثبيته.</string>
|
||||
<string name="gms_core_toast_not_installed_message">لم يتم تثبيت MicroG GmsCore. قم بتثبيته.</string>
|
||||
<string name="gms_core_dialog_title">الإجراء مطلوب</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">لا يملك MicroG GmsCore الصلاحية للتشغيل في الخلفية.\n\nاتبع دليل \"لا تقتل تطبيقي\" للهاتف الخاص بك، وقم بتطبيق الإرشادات على تثبيت المايكروج.\n\nهذا مطلوب لكي يعمل التطبيق.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"لا يملك MicroG GmsCore صلاحية التشغيل في الخلفية.
|
||||
|
||||
اتبع دليل \"لا تقتل تطبيقي\" لهاتفك، وطبّق التعليمات لتثبيت MicroG.
|
||||
|
||||
هذا مطلوب لعمل التطبيق."</string>
|
||||
<string name="gms_core_dialog_open_website_text">فتح الموقع</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">يجب تعطيل تحسينات بطارية MicroG GmsCore لمنع حدوث مشكلات.\n\nاضغط على زر المتابعة وقم بتعطيل تحسينات البطارية.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"يجب تعطيل تحسينات بطارية MicroG GmsCore لمنع حدوث مشكلات.
|
||||
|
||||
لن يؤثر تعطيل تحسينات البطارية لـ MicroG سلبًا على استخدام البطارية.
|
||||
|
||||
انقر فوق زر الاستمرار واسمح بتغييرات التحسين."</string>
|
||||
<string name="gms_core_dialog_continue_text">متابعة</string>
|
||||
</patch>
|
||||
</app>
|
||||
@@ -106,7 +103,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">عرض ملاحظة عند وجود خطأ في ReVanced</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">يتم عرض ملاحظة في حالة حدوث خطأ</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">لا يتم عرض ملاحظة في حالة حدوث خطأ</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">يؤدي إيقاف تشغيل ملاحظات الأخطاء إلى إخفاء كافة إشعارات خطأ ReVanced.\n\nلن يتم إعلامك بأي أخطاء غير متوقعة.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"يؤدي إيقاف تشغيل ملاحظات الأخطاء إلى إخفاء كافة إشعارات أخطاء ReVanced.
|
||||
|
||||
لن يتم إعلامك بأي أخطاء غير متوقعة."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">تعطيل توهج زر أعجبني / اشتراك</string>
|
||||
@@ -125,7 +124,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">تم إخفاء علامة الفيديو المائية</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">يتم عرض علامة الفيديو المائية</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">إخفاء الرفوف الأفقية</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">تكون الرفوف مخفية مثل:\n• الأخبار العاجلة\n• متابعة المشاهدة\n• استكشاف المزيد من القنوات\n• التسوق\n• مشاهدة مرة أخرى</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"تكون الرفوف مخفية مثل:
|
||||
• الأخبار العاجلة
|
||||
• متابعة المشاهدة
|
||||
• استكشاف المزيد من القنوات
|
||||
• التسوق
|
||||
• مشاهدة مرة أخرى"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">يتم عرض الرفوف</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -226,8 +230,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_chapters_section_summary_on">تم إخفاء قسم الفصول</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">يتم عرض قسم الفصول</string>
|
||||
<string name="revanced_hide_podcast_section_title">إخفاء قسم \'استكشاف البودكاست\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">يتم عرض قسم \'استكشاف البودكاست\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">يتم عرض قسم \'استكشاف البودكاست\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">تم إخفاء قسم \"استكشاف البودكاست\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">يتم عرض قسم \"استكشاف البودكاست\"</string>
|
||||
<string name="revanced_hide_info_cards_section_title">إخفاء قسم بطاقات المعلومات</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">تم إخفاء قسم بطاقات المعلومات</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">يتم عرض قسم بطاقات المعلومات</string>
|
||||
@@ -252,6 +256,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">يعرض في الفيديوهات ذات الصلة</string>
|
||||
<string name="revanced_comments_screen_title">التعليقات</string>
|
||||
<string name="revanced_comments_screen_summary">إخفاء أو عرض مكونات قسم التعليقات</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">إخفاء \"ملخص الدردشة\" </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">تم إخفاء “ملخص الدردشة”</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">يتم عرض “ملخص الدردشة”</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">إخفاء رأس \'تعليقات الأعضاء\'</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">تم إخفاء رأس \'تعليقات الأعضاء\'</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">يتم عرض رأس \'تعليقات الأعضاء\'</string>
|
||||
@@ -274,7 +281,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_doodles_title">إخفاء رسومات YouTube</string>
|
||||
<string name="revanced_hide_doodles_summary_on">تم إخفاء رسومات شريط البحث</string>
|
||||
<string name="revanced_hide_doodles_summary_off">يتم عرض رسومات شريط البحث</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">تظهر رسومات YouTube Doodles لعدة أيام كل عام.\n\nإذا كانت الرسومات تظهر حاليًا في منطقتك وإعداد الإخفاء هذا قيد التشغيل، سيتم أيضًا إخفاء شريط الفلتر أسفل شريط البحث.</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"تظهر \"\"Doodles\"\" على YouTube بضعة أيام كل عام.
|
||||
|
||||
إذا كان يتم عرض \"Doodle\" حاليًا في منطقتك وإذا كان إعداد الإخفاء هذا قيد التشغيل، فسيتم أيضًا إخفاء شريط التصفية أسفل شريط البحث."</string>
|
||||
<string name="revanced_custom_filter_screen_title">فلتر مخصص</string>
|
||||
<string name="revanced_custom_filter_screen_summary">إخفاء المكونات باستخدام فلاتر مخصصة</string>
|
||||
<string name="revanced_custom_filter_title">تمكين الفلتر المخصص</string>
|
||||
@@ -298,9 +307,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">الكلمات المفتاحية المراد إخفاؤها</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">الكلمات والعبارات الرئيسية التي يجب إخفاؤها، مفصولة بسطر جديد\n\nالكلمات الرئيسية يمكن أن تكون أسماء قنوات أو أي نص يظهر في عناوين الفيديو\n\nيجب إدخال الكلمات التي تحتوي على أحرف كبيرة في الوسط بإستخدام الأحرف الكبيرة (مثال: iPhone، TikTok، LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"الكلمات والعبارات التي تريد إخفاءها، مفصولة بسطور جديدة
|
||||
|
||||
يمكن أن تكون الكلمات عبارة عن أسماء قنوات أو أي نص يظهر في عناوين الفيديوهات
|
||||
|
||||
يجب إدخال الكلمات التي تحتوي على أحرف كبيرة في المنتصف بنفس الحالة (على سبيل المثال: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">حول تصفية الكلمات المفتاحية</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">الصفحة الرئيسية/الاشتراكات/نتائج الإشتراك/يتم تصفية نتائج البحث لإخفاء المحتوى الذي يتطابق مع عبارات الكلمات الرئيسية\n\nالقيود\n• لا يمكن إخفاء فيديوهات Shorts بواسطة اسم القناة\n• قد لا تكون بعض مكونات واجهة المستخدم مخفية\n• قد لا تظهر نتائج بحث عن كلمة رئيسية</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"الصفحة الرئيسية/الاشتراكات/نتائج البحث يتم تصفيتها لإخفاء المحتوى الذي يتطابق مع كلمات البحث
|
||||
|
||||
القيود
|
||||
• فيديوهات Shorts لا يمكن إخفاؤها بواسطة اسم القناة
|
||||
• قد لا يتم إخفاء بعض مكونات واجهة المستخدم
|
||||
• البحث عن كلمة ما قد لا يعطي نتائج"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">مطابقة الكلمات بأكملها</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">سيؤدي وضع علامة اقتباس مزدوجة حول كلمة رئيسية/عبارة إلى منع التطابقات الجزئية لعناوين الفيديو وأسماء القنوات.<br><br>على سبيل المثال،<br><b>\"ai\"</b> سيخفي الفيديو: <b>How does AI work?</b><br>ولكن لن يخفي: <b>What does fair use mean?</b></string>
|
||||
@@ -316,7 +334,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_general_ads_summary_on">تم إخفاء الإعلانات بشكل عام</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">يتم عرض الإعلانات العامة</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">إخفاء إعلانات ملء الشاشة</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">يتم إخفاء إعلانات ملء الشاشة\n\nهذه الميزة متوفرة فقط للأجهزة القديمة</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"يتم إخفاء إعلانات ملء الشاشة
|
||||
|
||||
هذه الميزة متاحة فقط للأجهزة القديمة"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">يتم عرض إعلانات ملء الشاشة</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">إخفاء الإعلانات الزرية</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">تم إخفاء الإعلانات الزرية</string>
|
||||
@@ -416,7 +436,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_on">حفظ واستعادة السطوع عند الخروج أو الدخول إلى وضع ملء الشاشة</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_off">لا تقم بحفظ السطوع واستعادته عند الخروج أو الدخول إلى وضع ملء الشاشة</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">تمكين إيماءة السطوع التلقائي</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">يؤدي التمرير لأسفل إلى أدنى قيمة لإيماءة السطوع إلى تمكين السطوع التلقائي</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">التمرير لأسفل إلى أدنى قيمة للسطوع يمكّن السطوع التلقائي</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">لا يؤدي التمرير لأسفل إلى أدنى قيمة إلى تمكين السطوع التلقائي</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">تلقائي</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">مهلة واجهة التمرير</string>
|
||||
@@ -435,7 +455,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">أزرار الإجراء</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">إخفاء أو عرض الأزرار تحت مقاطع الفيديو</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">إخفاء أو عرض الأزرار تحت الفيديوهات</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">إخفاء أعجبني ولم يعجبني</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">تم إخفاء أزرار أعجبني ولم يعجبني</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">يتم عرض أزرار أعجبني ولم يعجبني</string>
|
||||
@@ -490,7 +510,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">يتم عرض زر الاشتراكات</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">تبديل الإنشاء مع الإشعارات</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">تم تبديل زر الإنشاء بـزر الإشعارات\n\nملاحظة: يؤدي تمكين هذا أيضًا إلى إخفاء إعلانات الفيديو بالقوة</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"تم تبديل زر الإنشاء بـزر الإشعارات
|
||||
|
||||
ملاحظة: يؤدي تمكين هذا أيضًا إلى إخفاء إعلانات الفيديو بالقوة"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">لا يتم تبديل زر الإنشاء بزر الإشعارات</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">إخفاء تسميات زر التنقل</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">تم إخفاء التسميات</string>
|
||||
@@ -617,8 +639,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_on">تم إخفاء زر الاشتراك</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_off">يتم عرض زر الاشتراك</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">إخفاء أزرار واجهة التوقف</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">تم إخفاء أزرار تراكب التوقف</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">يتم عرض أزرار تراكب التوقف</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">تم إخفاء أزرار واجهة التوقف</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">يتم عرض أزرار واجهة التوقف</string>
|
||||
<string name="revanced_hide_shorts_shop_button_title">إخفاء زر المتجر</string>
|
||||
<string name="revanced_hide_shorts_shop_button_summary_on">تم إخفاء زر المتجر</string>
|
||||
<string name="revanced_hide_shorts_shop_button_summary_off">يتم عرض زر المتجر</string>
|
||||
@@ -652,9 +674,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_stickers_title">إخفاء الملصقات</string>
|
||||
<string name="revanced_hide_shorts_stickers_summary_on">تم إخفاء الملصقات</string>
|
||||
<string name="revanced_hide_shorts_stickers_summary_off">يتم عرض الملصقات</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">إخفاء نافورة أعجبني</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_on">تم إخفاء تأثير النافورة لـزر أعجبني</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_off">يتم عرض تأثير النافورة لـزر أعجبني</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">إخفاء فوران أعجبني</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_on">تم إخفاء التأثير الفوّار لـزر أعجبني</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_off">يتم عرض التأثير الفوّار لـزر أعجبني</string>
|
||||
<string name="revanced_hide_shorts_like_button_title">إخفاء زر أعجبني</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_on">تم إخفاء زر أعجبني</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_off">يتم عرض زر أعجبني</string>
|
||||
@@ -683,7 +705,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_video_title_summary_off">يتم عرض العنوان</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_title">إخفاء تسمية بيانات التعريف الصوتية</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_on">تم إخفاء تسمية بيانات التعريف</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">يتم عرض تسمية البيانات الوصفية</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">يتم عرض تسمية بيانات التعريف</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_title">إخفاء تسمية رابط الفيديو الكامل</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_on">تم إخفاء تسمية رابط الفيديو</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_off">يتم عرض تسمية رابط الفيديو</string>
|
||||
@@ -709,8 +731,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">تم إخفاء لوحات المشغل المنبثقة</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">يتم عرض لوحات المشغل المنبثقة</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">فتح مقاطع الفيديو في ملء الشاشة</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">يتم فتح الفيديوهات في وضع ملء الشاشة</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">لا يتم فتح الفيديوهات في وضع ملء الشاشة</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">شفافية تراكب المشغل</string>
|
||||
<string name="revanced_player_overlay_opacity_title">شفافية واجهة المشغل</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">قيمة الشفافية بين 0-100، حيث يكون 0 شفاف</string>
|
||||
<string name="revanced_player_overlay_opacity_invalid_toast">شفافية واجهة المشغل يجب أن تكون بين 0-100</string>
|
||||
</patch>
|
||||
@@ -726,7 +753,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">لا يتم عرض لم يعجبني</string>
|
||||
<string name="revanced_ryd_shorts_title">عرض لم يعجني في مقاطع Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">يتم عرض لم يعجني في مقاطع Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">إبداءات لم يعجبني التي تظهر على فيديوهات Shorts\n\nالتقييد: قد لا تظهر إبداءات لم يعجبني في وضع التصفح المتخفي</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"إبداءات لم يعجبني التي تظهر على فيديوهات Shorts
|
||||
|
||||
التقييد: قد لا تظهر إبداءات لم يعجبني في وضع التصفح المتخفي"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">تم إخفاء لم يعجني في مقاطع Shorts</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">لم يعجبني كــ نسبة مئوية</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">يعرض عدد لم يعجبني كـ نسبة مئوية</string>
|
||||
@@ -751,7 +780,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_statistics_getFetchCallCount_zero_summary">لم يتم إجراء اتصالات الشبكة</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallCount_non_zero_summary">%d اتصالات شبكية أجريت</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_title">API جلب الأصوات، عدد المهلات</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary">لم تنتهي مهلة المكالمات الشبكية</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary">لم تنتهي مهلة الاتصالات الشبكية</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_non_zero_summary">اتصالات شبكية انتهت مهلتها %d</string>
|
||||
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_title">حدود معدل عميل API</string>
|
||||
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_zero_summary">لا توجد حدود لمعدل العميل</string>
|
||||
@@ -769,13 +798,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">مصغرات شريط التقدم متوسطة الجودة</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">مصغرات شريط التقدم بملء الشاشة عالية الجودة</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">مصغرات شريط التقدم بملء الشاشة متوسطة الجودة</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">سيؤدي هذا أيضا إلى استعادة المصغرات على البث المباشر الذي لا يحتوي على مصغرات شريط التقدم.\n\nمصغرات شريط التقدم سوف تستخدم نفس جودة الفيديو الحالي.\n\nتعمل هذه الميزة بشكل أفضل مع جودة فيديو 720p أو أقل وعند استخدام اتصال إنترنت سريع جداً.</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">استعادة مصغرات شريط التقدم القديم</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"سيؤدي هذا أيضا إلى استعادة المصغرات على البث المباشر الذي لا يحتوي على مصغرات شريط التقدم.
|
||||
|
||||
مصغرات شريط التقدم سوف تستخدم نفس جودة الفيديو الحالي.
|
||||
|
||||
تعمل هذه الميزة بشكل أفضل مع جودة فيديو 720p أو أقل وعند استخدام اتصال إنترنت سريع جداً."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">استعادة مصغرات شريط التقدم القديمة</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">مصغرات شريط التقدم ستظهر فوق شريط تقدم الفيديو</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">مصغرات شريط التقدم ستظهر في ملء الشاشة</string>
|
||||
</patch>
|
||||
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
|
||||
<string name="revanced_sb_enable_sb">تمكين مانِع الرُعَاة SponsorBlock</string>
|
||||
<string name="revanced_sb_enable_sb">تمكين SponsorBlock</string>
|
||||
<string name="revanced_sb_enable_sb_sum">مانِع الرُعَاة هو نظام جماعي لتخطي الأجزاء المُمِلَّة في مقاطع YouTube</string>
|
||||
<string name="revanced_sb_appearance_category">المظهر</string>
|
||||
<string name="revanced_sb_enable_voting">عرض زر التصويت</string>
|
||||
@@ -832,12 +865,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">تم استيراد الإعدادات بنجاح</string>
|
||||
<string name="revanced_sb_settings_import_failed">فشل استيراد: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">فشل تصدير: %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">تحتوي إعداداتك على معرف مستخدم خاص لـ SponsorBlock.\n\n معرف المستخدم الخاص بك يشبه كلمة المرور ويجب عدم مشاركته أبدًا.\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"تحتوي إعداداتك على معرف مستخدم خاص لـ SponsorBlock.
|
||||
|
||||
معرف المستخدم الخاص بك يشبه كلمة المرور ويجب عدم مشاركته أبدًا.
|
||||
"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">لا تعرض مرة أخرى</string>
|
||||
<string name="revanced_sb_diff_segments">تغيير سلوك المقطع</string>
|
||||
<string name="revanced_sb_segments_sponsor">الراعي</string>
|
||||
<string name="revanced_sb_segments_sponsor_sum">الترويج المدفوع الأجر، والإحالات المدفوعة الأجر والإعلانات المباشرة. ليس للترويج الذاتي أو لصراعات مجانية للقضايا/المبدعين/المواقع الإلكترونية/المنتجات التي يحبون الحصول عليها</string>
|
||||
<string name="revanced_sb_segments_selfpromo">ترويج شخصي / غير مدفوع الأجر</string>
|
||||
<string name="revanced_sb_segments_selfpromo">ترويج شخصي/غير مدفوع الأجر</string>
|
||||
<string name="revanced_sb_segments_selfpromo_sum">شبيهة بـ \"الراعي\" باستثناء ما يتعلق بالإعلانات غير المدفوعة الأجر أو الذاتية. ويشمل ذلك أقسام عن السلع أو التبرعات أو المعلومات المتعلقة بمن تعاونوا مع ناشر المحتوى</string>
|
||||
<string name="revanced_sb_segments_interaction">تذكير بالتفاعل (اشتراك)</string>
|
||||
<string name="revanced_sb_segments_interaction_sum">تذكير قصير للإعجاب أو الاشتراك أو المتابعة في منتصف المحتوى. إذا كانت طويلة أو تتعلق بشيء محدد، فيجب أن تكون خاضعة للترويج الشخصي بدلاً من ذلك</string>
|
||||
@@ -892,9 +928,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">غير قادر على إرسال المقطع: الحالة: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock متوقف مؤقتًا</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">غير قادر على إرسال المقطع (الحالة: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">لا يمكن إرسال المقطع.\n جارٍ الحد من معدل إرسالك (عدد كبير جدا من نفس المستخدم أو IP)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">لا يمكن إرسال المقطع. جارٍ الحد من معدل إرسالك (عدد كبير جدًا من نفس المستخدم أو IP)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">لا يمكن إرسال المقطع: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">لا يمكن إرسال هذا المقطع.\nموجود بالفعل</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"لا يمكن إرسال هذا المقطع.
|
||||
موجود بالفعل"</string>
|
||||
<string name="revanced_sb_submit_succeeded">تم إرسال المقطع بنجاح</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock غير متاح مؤقتًا (انتهت مهلة API)</string>
|
||||
@@ -909,7 +946,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_vote_no_segments">لا توجد مقاطع للتصويت عليها</string>
|
||||
<string name="revanced_sb_new_segment_choose_category">اختيار فئة المقطع</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">الفئة معطلة في الإعدادات. تمكين الفئة للإرسال.</string>
|
||||
<string name="revanced_sb_new_segment_title">مقطع مانِع رُعَاة جديد</string>
|
||||
<string name="revanced_sb_new_segment_title">مقطع SponsorBlock جديد</string>
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question">تعيين %s كبداية أو نهاية لمقطع جديد؟</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">البداية</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">النهاية</string>
|
||||
@@ -917,7 +954,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">الوقت الذي يبدأ عنده المقطع</string>
|
||||
<string name="revanced_sb_new_segment_time_end">الوقت الذي ينتهي عنده المقطع</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">هل الأوقات صحيحة؟</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">المقطع من\n\n%1$s\nto\n%2$s\n\n(%3$s)\n\nReady to جاهز للإرسال؟</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"المقطع من
|
||||
|
||||
%1$s
|
||||
إلى
|
||||
%2$s
|
||||
|
||||
(%3$s)
|
||||
|
||||
هل أنت مستعد للإرسال؟"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">يجب أن تكون البداية قبل النهاية</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">ضع علامة على موقعين في شريط الوقت أولًا</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">معاينة المقطع، والتأكد من تخطيه بسلاسة</string>
|
||||
@@ -959,7 +1004,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">خِداع إصدار التطبيق</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">تم تغيير اصدار التطبيق</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">لم يتم تغيير اصدار التطبيق</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">سيتم تغيير إصدار التطبيق إلى إصدار قديم من YouTube.\n\nسيؤدي هذا إلى تغيير مظهر ومميزات التطبيق، ولكن قد تحدث تأثيرات جانبية غير معروفة.\n\nإذا تم إيقاف تشغيله لاحقا، من المستحسن مسح بيانات التطبيق لمنع حدوث أخطاء في واجهة المستخدم.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"سيتم تغيير إصدار التطبيق إلى إصدار قديم من YouTube.
|
||||
|
||||
سيؤدي هذا إلى تغيير مظهر ومميزات التطبيق، ولكن قد تحدث تأثيرات جانبية غير معروفة.
|
||||
|
||||
إذا تم إيقاف تشغيله لاحقًا، من المستحسن مسح بيانات التطبيق لمنع حدوث أخطاء في واجهة المستخدم."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">الهدف من تغيير إصدار التطبيق</string>
|
||||
@@ -1012,7 +1061,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">تغيير نمط المشغل المصغر داخل التطبيق</string>
|
||||
<string name="revanced_miniplayer_type_title">نوع المشغل المصغر</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">معطّل</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">الأصلي</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">إفتراضي</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">الحد الأدنى</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">الجهاز اللوحي</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">حديث 1</string>
|
||||
@@ -1022,19 +1071,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">الزوايا مستديرة</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">الزوايا مربعة</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">تمكين النقر المزدوج والضغط لتغيير الحجم</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">تم تمكين إجراء الضغط المزدوج والضغط لتغيير الحجم\n\n• النقر المزدوج لزيادة حجم المشغل المصغر\n• النقر المزدوج مرة أخرى لاستعادة الحجم الأصلي</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"تم تمكين إجراء الضغط المزدوج والضغط لتغيير الحجم
|
||||
|
||||
• النقر المزدوج لزيادة حجم المشغل المصغر
|
||||
• النقر المزدوج مرة أخرى لاستعادة الحجم الأصلي"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">إجراء النقر المزدوج والضغط لتغيير الحجم معطل</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">تمكين السحب والإفلات</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">السحب والإفلات مفعلان\n\nيمكن سحب المشغل المصغر إلى أي زاوية من الشاشة</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"السحب والإفلات مفعلان
|
||||
|
||||
يمكن سحب المشغل المصغر إلى أي زاوية من الشاشة"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">تم تعطيل السحب والإفلات</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">تمكين إيماءة السحب الأفقية</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">تم تمكين إيماءة السحب الأفقية\n\nيمكن سحب المشغل المصغر خارج الشاشة إلى اليسار أو اليمين</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"تم تمكين إيماءة السحب الأفقية
|
||||
|
||||
يمكن سحب المشغل المصغر خارج الشاشة إلى اليسار أو اليمين"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">تم تعطيل إيماءة السحب الأفقية</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">إخفاء زر الإغلاق</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">تم إخفاء زر الإغلاق</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">يتم عرض زر الإغلاق</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">إخفاء أزرار التوسيع والإغلاق</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">تم إخفاء الأزرار\n\nمرر للتوسيع أو الإغلاق</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"تم إخفاء الأزرار
|
||||
|
||||
مرر للتوسيع أو الإغلاق"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">يتم عرض أزرار التوسيع والإغلاق</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">إخفاء النصوص الفرعية</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">تم إخفاء النصوص الفرعية</string>
|
||||
@@ -1065,7 +1123,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">تجاوز قيود منطقة الصورة</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">استخدام مضيف الصورة yt4.ggpht.com</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">استخدام مضيف الصور الأصلي\n\nتمكين هذا يمكن إصلاح الصور المفقودة التي يتم حظرها في بعض المناطق</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"استخدام مضيف الصور الأصلي
|
||||
|
||||
تمكين هذا يمكن إصلاح الصور المفقودة التي يتم حظرها في بعض المناطق"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -1080,12 +1140,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & المصّغرات الأصلية</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow & اللقطات الثابتة</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">اللقطات الثابتة</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">يوف DeArrow مصغرات فيديو من مصادر جماعية لفيديوهات YouTube. هذه المصغرات غالبا ما تكون أكثر صلة من تلك المقدمة من YouTube\n\nإذا تم تفعيلها، سيتم إرسال روابط الفيديو إلى خادم API ولن يتم إرسال أي بيانات أخرى. إذا كان الفيديو لا يحتوي على مصغرات DArrow ، سيتم عرض المقاطع الأصلية أو اللقطات الثابتة\n\nاضغط هنا لمعرفة المزيد عن DArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"يوفر DeArrow مصغرات فيديو من مصادر جماعية لفيديوهات YouTube. هذه المصغرات غالبا ما تكون أكثر صلة من تلك المقدمة من YouTube
|
||||
|
||||
إذا تم تفعيلها، سيتم إرسال روابط الفيديو إلى خادم API ولن يتم إرسال أي بيانات أخرى. إذا كان الفيديو لا يحتوي على مصغرات DArrow، سيتم عرض المقاطع الأصلية أو اللقطات الثابتة
|
||||
|
||||
اضغط هنا لمعرفة المزيد عن DArrow"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">عرض ملاحظة إذا كان API غير متاح</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">يتم عرض ملاحظة إذا كان DeArrow غير متوفر</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">لا يتم عرض ملاحظة إذا كان DeArrow غير متوفر</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_title">DeArrow API endpoint</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">The URL of the DeArrow thumbnail cache endpointThe URL of the DeArrow thumbnail cache endpoint</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">The URL of the DeArrow thumbnail cache endpoint</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_title">لقطات الفيديو الثابتة</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_summary">يتم التقاط اللقطات الثابتة من بداية/وسط/نهاية كل فيديو. هذه الصور مدمجة في YouTube ولا يتم استخدام أي واجهة برمجة تطبيقات خارجية</string>
|
||||
<string name="revanced_alt_thumbnail_stills_fast_title">استخدم اللقطات الثابتة السريعة</string>
|
||||
@@ -1119,8 +1183,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">محاكاة أبعاد الجهاز</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">تم محاكاة أبعاد الجهاز\n\nقد يتم فتح قفل جودة الفيديو العالية ولكن قد تواجه تقطعًا في تشغيل الفيديو وعمر بطارية أسوأ وتأثيرات جانبية غير معروفة</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">أبعاد الجهاز غير محاكاة\n\nيمكن أن يؤدي تفعيل هذا إلى فتح جودة أعلى للفيديو</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"تم محاكاة أبعاد الجهاز
|
||||
|
||||
قد يتم فتح قفل جودة الفيديو العالية ولكن قد تواجه تقطعًا في تشغيل الفيديو وعمر بطارية أسوأ وتأثيرات جانبية غير معروفة"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"أبعاد الجهاز غير محاكاة
|
||||
|
||||
يمكن أن يؤدي تفعيل هذا إلى فتح جودة أعلى للفيديو"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">قد يؤدي تمكين هذا إلى تباطؤ تشغيل الفيديو وتدهور عمر البطارية وآثار جانبية غير معروفة.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1170,13 +1238,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_speed_menu_summary_off">لا يتم عرض قائمة سرعة التشغيل المخصصة</string>
|
||||
<string name="revanced_custom_playback_speeds_title">سرعة التشغيل المخصصة</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">إضافة أو تغيير سرعة التشغيل المخصصة</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">يجب أن تكون السرعة المخصصة أقل من %s. باستخدام القيم الافتراضية.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">سرعة تشغيل مخصصة غير صالحة. استخدام القيم الافتراضية.</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">يجب أن تكون سرعات التشغيل المخصصة أقل من %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">سرعة التشغيل المخصصة غير صالحة</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">تلقائي</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
<string name="revanced_remember_playback_speed_last_selected_title">تذكر التغيرات في سرعة التشغيل</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_on">تطبيق تغييرات سرعة التشغيل على جميع مقاطع الفيديو</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_on">تطبيق تغييرات سرعة التشغيل على جميع الفيديوهات</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_off">تطبيق تغييرات سرعة التشغيل فقط على الفيديو الحالي</string>
|
||||
<string name="revanced_playback_speed_default_title">سرعة التشغيل الافتراضية</string>
|
||||
<string name="revanced_remember_playback_speed_toast">تغيير السرعة الافتراضية إلى: %s</string>
|
||||
@@ -1187,27 +1255,88 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_restore_old_video_quality_menu_summary_off">لا يتم عرض قائمة جودة الفيديو القديمة</string>
|
||||
</patch>
|
||||
<patch id="interaction.seekbar.enableSlideToSeekPatch">
|
||||
<string name="revanced_slide_to_seek_title">تمكين Slide to Seek</string>
|
||||
<string name="revanced_slide_to_seek_summary_on">تم تمكين Slide to Seek</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">تم تعطيل Slide to Seek</string>
|
||||
<string name="revanced_slide_to_seek_title">تمكين التمرير للتقديم أو الترجيع</string>
|
||||
<string name="revanced_slide_to_seek_summary_on">تم تمكين التمرير للتقديم أو الترجيع</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">تم تعطيل التمرير للتقديم أو الترجيع</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_screen_title">Spoof Video Streams</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">تزييف تدفقات الفيديو الخاصة بالعميل لمنع حدوث مشكلات أثناء التشغيل</string>
|
||||
<string name="revanced_spoof_video_streams_title">Spoof Video Streams</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">يتم تزييف تدفقات الفيديو</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">لا يتم تزييف تدفقات الفيديو\n\nقد لا يعمل تشغيل الفيديو</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"لا يتم تزييف تدفقات الفيديو
|
||||
|
||||
قد لا يعمل تشغيل الفيديو"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">إيقاف تشغيل هذا الإعداد قد يسبب مشاكل في تشغيل الفيديو.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">العميل الافتراضي</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">فرض AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ترميز الفيديو هو AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ترميز الفيديو هو VP9 أو AV1</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">لا يحتوي جهازك على فك تشفير الأجهزة VP9، وهذا الإعداد يعمل دائما عند تمكين تزييف العميل</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">قد يؤدي تمكين هذا إلى تحسين عمر البطارية وإصلاح مشكلة تقطيع التشغيل.\n\nيتمتع تنسيق AVC بدقة قصوى تبلغ 1080P، وسيستخدم تشغيل الفيديو المزيد من بيانات الإنترنت مقارنةً بتنسيق VP9 أو AV1.</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">تم فرض ترميز الفيديو على AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">يتم تحديد ترميز الفيديو تلقائيًا</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"قد يؤدي تمكين هذا إلى تحسين عمر البطارية وإصلاح مشكلة تقطيع التشغيل.
|
||||
|
||||
يتمتع تنسيق AVC بدقة قصوى تبلغ 1080P، برنامج ترميز الصوت Opus غير متوفر، وسيستخدم تشغيل الفيديو المزيد من بيانات الإنترنت مقارنةً بتنسيق VP9 أو AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">التأثيرات الجانبية لمحاكاة iOS</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">• قد لا يتم تشغيل فيديوهات الأطفال الخاصة\n• تبدأ البثوث المباشر من البداية\n• قد تنتهي الفيديوهات قبل النهاية بثانية واحدة\n• لا يوجد ترميز الصوت opus</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• قد لا يتم تشغيل فيديوهات الأطفال الخاصة
|
||||
• تبدأ البثوث المباشرة من البداية
|
||||
• قد تنتهي الفيديوهات قبل النهاية بثانية واحدة"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">التأثيرات الجانبية لمحاكاة Android VR</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">• قد لا يتم تشغيل فيديوهات الأطفال\n• قائمة المقطع الصوتي مفقودة\n• مستوى الصوت الثابت غير متوفر</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• قد لا يتم تشغيل فيديوهات الأطفال
|
||||
• تبدأ البثوث المباشرة من البداية
|
||||
• قد تنتهي الفيديوهات قبل النهاية بثانية واحدة"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">لغة البث الصوتي الافتراضية</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">لغة التطبيق</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">العربية</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">Azerbaijani</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">Bulgarian</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">Bengali</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">Catalan</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">Czech</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">Danish</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">German</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">Greek</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">English</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">Spanish</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">Estonian</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">فارسى</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">Finnish</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">French</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">Gujarati</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">Hindi</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">Croatian</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">Hungarian</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID"> Indonesian</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">Italian</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Japanese</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">Kazakh</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">Korean</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">Lithuanian</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">Latvian</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">Macedonian</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">Mongolian</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">Marathi</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">Malay</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">Burmese</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">Dutch</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">Odia</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">Punjabi</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">Polish</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">Portuguese (Brazil)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">Portuguese (Portugal)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Romanian</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Russian</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">Slovak</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">Slovene</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">Serbian</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">Swedish</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">Swahili</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">Tamil</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">Telugu</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">Thai</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">Turkish</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">Ukrainian</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">Urdu</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">Vietnamese</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">Chinese</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -147,6 +136,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -67,9 +56,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore quraşdırılmayıb. Bunu quraşdır.</string>
|
||||
<string name="gms_core_dialog_title">Fəaliyyət lazımdır</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore arxa planda işləməyə icazə almayıb.\n\nTelefonunuz üçün \"Tətbiqim bağlanılmasın\" bələdçisin izləyin və təlimatları MicroG quraşdırmasına tətbiq edin.\n\nBu tətbiq işləyən müddətdə tələb olunur.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore-un arxaplanda işləməsi üçün icazəsi yoxdur.
|
||||
|
||||
Telefonunuz üçün \"Tətbiqimi öldürmə\" bələdçisinə əməl edin və təlimatları MicroG quraşdırmanıza tətbiq edin.
|
||||
|
||||
Bu, tətbiqin işləməsi üçün tələb olunur."</string>
|
||||
<string name="gms_core_dialog_open_website_text">Veb saytı aç</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">Problemlərin olmaması üçün MicroG GmsCore batareya optimallaşdırması qeyri-aktiv edilməlidir.\n\nDavam düyməsinə toxun və batareya optimallaşdırmasını qeyri-aktiv et.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"Problemsiz işləməsi üçün MicroG GmsCore batareya optimallaşdırmaları sıradan çıxarılmalıdır.
|
||||
|
||||
MicroG üçün batareya optimallaşdırmasını sıradan çıxartmaq, batareya istifadəsinə mənfi təsir etməyəcək.
|
||||
|
||||
Davam düyməsinə toxunun və optimallaşdırma dəyişikliklərinə icazə verin."</string>
|
||||
<string name="gms_core_dialog_continue_text">Davam et</string>
|
||||
</patch>
|
||||
</app>
|
||||
@@ -106,7 +103,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">ReVanced xətasında ani bildiriş göstər</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Xəta baş verərsə bildiriş göstər</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Xəta baş verərsə bildiriş göstərmə</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">Ani bildirişləri söndürəndə, bütün ReVanced xəta bildirişləri gizlənir.\n\nGözlənilməz hallardan xəbərdar olmayacaqsınız.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Xəta bildirişlərini söndürmək, bütün ReVanced xəta bildirişlərini gizlədir.
|
||||
|
||||
Gözlənilməz tədbirlər barədə bildiriş almayacaqsınız."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Bəyən/abunə ol düymə parıltısın söndür</string>
|
||||
@@ -125,7 +124,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Su nişanı gizlidir</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Su nişanı göstərilir</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">Üfüqi hissələri gizlət</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">Belə hissələr gizlidir:\n• Son xəbərlər\n• Baxmağa davam et\n• Daha çox kanal kəşf et\n• Bazarlıq\n• Təkrar izlə</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"Rəflər gizlidir, məsələn:
|
||||
• Son xəbərlər
|
||||
• İzləməyə davam et
|
||||
• Daha çox kanallar kəşf edin
|
||||
• Alış-veriş
|
||||
• Yenidən izlə"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Hissələr göstərilir</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -252,6 +256,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Əlaqəli videolarda görünür</string>
|
||||
<string name="revanced_comments_screen_title">Şərhlər</string>
|
||||
<string name="revanced_comments_screen_summary">Şərhlər bölməsi elementlərin gizlət və ya göstər</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">\'Söhbət yekunun\' gizlət </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">\"Söhbət yekunu\" gizlədilir</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">\'Söhbət yekunu\' göstərilir</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">\'Üzvlərin şərhləri\' başlığını gizlət</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">\"Üzvlərin şərhləri\" başlığı gizlədilib</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">\"Üzvlərin şərhləri\" başlığı göstərilir</string>
|
||||
@@ -274,7 +281,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodle-ları gizlət</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Axtarış çubuğu Doodle-ları gizlidir</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Axtarış çubuğu Doodle-ları göstərilir</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">YouTube Doodle-lar hər il bir neçə gün göstərilir.\n\nDoodle hazırda bölgənizdə görünür və bu gizlətmə seçimi aktivdirsə, axtarış çubuğu altındakı filtr paneli də gizlədiləcək.</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodles ilinin bir neçə günü göstərilir.
|
||||
|
||||
Əgər Doodle hazırda sizin bölgənizdə göstərilirsə və bu gizlətmə parametr açıqdırsa, axtarış çubuğunun altındakı filtr çubuğu da gizlənəcək."</string>
|
||||
<string name="revanced_custom_filter_screen_title">Şəxsi filtr</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Fərdi filtrlər ilə elementləri gizlət</string>
|
||||
<string name="revanced_custom_filter_title">Fərdi filtri aktivləşdir</string>
|
||||
@@ -298,9 +307,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">Gizlədiləcək açar sözlər</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">Yeni sətirlərlə ayrılmış gizlədiləcək açar sözlər və frazalar\n\nAçar sözlər kanal adları və ya video adlarında göstərilən istənilən mətn ola bilər\n\nOrtada böyük hərf olan sözlər korpusla birlikdə qeyd edilməlidir (yəni: iPhone, TikTok, LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"Kənarda qoyulacaq açar sözlər və cümlələr, yeni sətirlərlə ayrılmışdır
|
||||
|
||||
Açar sözlər kanal adları və ya video başlıqlarında göstərilən hər hansı mətn ola bilər.
|
||||
|
||||
Orta hərfləri böyük hərflərlə olan sözlər böyük hərflərlə yazılmalıdır (məsələn: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">Açar söz filtrləməsi haqqında</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">Əsas səhifə/Abunəlik/Axtarış nəticələri açar söz ifadələrinə uyğunlaşan məzmunu gizlətmək üçün filtrlənir\n\nMəhdudiyyətlər\n• Shorts-lar kanal adına görə gizlənə bilməz\n• Bəzi UI hissəcikləri gizlədilə bilməz\n• Açar söz axtarışında nəticə olmaya bilər</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"Ana səhifə/Abunəlik/Axtarış nəticələri açar söz ifadələrinə uyğun olan məzmunu gizlətmək üçün süzülür
|
||||
|
||||
Məhdudiyyətlər
|
||||
• Şortlar kanal adı ilə gizlənə bilməz
|
||||
• Bəzi UI komponentləri gizlənə bilməz
|
||||
• Açar söz axtarmaq heç bir nəticə verməyə bilər"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Bütün sözləri uyğunlaşdır</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">Açar söz/frazanın qoşa dırnaqlarla əhatə olunması video adları və kanal adlarının qismən uyğunlaşmasına mane olacaq <br><br>Məsələn,<br><b>\"ai\"</b> videonu gizlədəcək:<b>How does AI work?</b><br> lakin gizlətməyəcək: Düzgün;<b>What does fair use mean?</b></string>
|
||||
@@ -316,7 +334,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_general_ads_summary_on">Ümumi reklamlar gizlidir</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">Ümumi reklamlar göstərilir</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Tam ekran reklamlarını gizlət</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Tam ekran reklamları gizlidir\n\nBu funksiya yalnız köhnə cihazlar üçün əlçatandır</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Tam ekran reklam gizlidir
|
||||
|
||||
Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Tam ekran reklamları göstərilir</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">Düyməli reklamları gizlət</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">Düyməli reklamlar gizlədilir</string>
|
||||
@@ -490,7 +510,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Abunəliklər düyməsi göstərilir</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">\"Yarat\"ı \"Bildirişlər\" ilə dəyişdir</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">Yarat düyməsi Bildirişlər düyməsi ilə dəyişdirilir\n\nQeyd: Bunu aktivləşdirmə video reklamları da məcburən gizlədir</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Yarat düyməsi Bildirişlər düyməsi ilə dəyişdirilir
|
||||
|
||||
Qeyd: Bunu aktivləşdirmək video reklamları da məcburi olaraq gizlədir"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">\"Yarat\" düyməsi, \"Bildirişlər\" düyməsi ilə dəyişdirilmir</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Fəaliyyət düymə etiketlərini gizlət</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Etiketlər gizlidir</string>
|
||||
@@ -709,6 +731,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">Oynadıcı açılan pəncərə panelləri gizlidir</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">Oynadıcı açılan pəncərə panelləri göstərilir</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">Videoları tam ekran təsvirində aç</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Videolar tam ekranda açılır</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Videolar tam ekranda açılmır</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">Oynadıcı örtüyünün qeyri-şəffaflığı</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">0-100 arasında qeyri-şəffaflıq dəyəri, burada 0 şəffafdır</string>
|
||||
@@ -726,7 +753,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">Bəyənməmələr göstərilmir</string>
|
||||
<string name="revanced_ryd_shorts_title">\"Shorts\"da bəyənməmə sayını göstər</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Bəyənməmə sayı \"Shorts\"da göstərilir</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">\"Bəyənməmə\"lər \"Shorts\"da göstərilir\n\nMəhdudiyyət: \"Bəyənməmə\"lər gizli rejimdə görünməyə bilər</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Şortlarda görünən bəyənməmələr
|
||||
|
||||
Məhdudiyyət: Bəyənməmələr gizli rejimdə görünə bilməz"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">\"Bəyənməmə\"lər \"Shorts\"da gizlidir</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">\"Bəyənməmə\"lər faiz olaraq</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">\"Bəyənməmə\"lər faiz olaraq göstərilir</string>
|
||||
@@ -769,7 +798,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Axtarış çubuğu miniatürləri orta keyfiyyətlidir</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Tam ekran axtarış çubuğu miniatürləri yüksək keyfiyyətlidir</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Tam ekran axtarış çubuğu miniatürləri orta keyfiyyətlidir</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">Bu, həm də axtarış cizgisi üzrə miniatürləri olmayan canlı yayımlarda miniatürləri qaytaracaq.\n\nAxtarış cizgisi miniatürləri, cari video kimi eyni keyfiyyəti işlədəcək.\n\nBu xüsusiyyət, 720p və ya daha aşağı video keyfiyyəti və çox sürətli internet bağlantısı istifadə edərkən daha yaxşı işləyir.</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Bu, həmçinin axtarış çubuğu kiçik görüntüləri olmayan canlı yayımlarda kiçik şəkilləri bərpa edəcək.
|
||||
|
||||
Axtarış çubuğu kiçik şəkilləri cari videonun keyfiyyəti ilə eyni keyfiyyətdən istifadə edəcək.
|
||||
|
||||
Bu xüsusiyyət ən yaxşı 720p və ya daha aşağı video keyfiyyəti və çox sürətli internet bağlantısından istifadə edərkən işləyir."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Köhnə axtarış çubuğu miniatürlərin al</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Axtarış çubuğu miniatürləri axtarış çubuğu üstündə görünəcək</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Axtarış çubuğu miniatürləri tam ekranda görünəcək</string>
|
||||
@@ -832,7 +865,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">Tənzimləmələr uğurla idxal edildi</string>
|
||||
<string name="revanced_sb_settings_import_failed">%s idxal uğursuz</string>
|
||||
<string name="revanced_sb_settings_export_failed">%s ixrac uğursuz</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">Tənzimləmələr şəxsi SponsorBlock istifadəçi kimliyi ehtiva edir.\n\nİstifadəçi kimliyiniz parol kimidir və bu paylaşılmamalıdır.\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Parametrlərdə özəl SponsorBlock istifadəçi IDniz var.
|
||||
|
||||
Sizə istifadəçi IDniz parol kimidir və heç vaxt başqasına verilməməlidir.
|
||||
"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Təkrar göstərmə</string>
|
||||
<string name="revanced_sb_diff_segments">Bölüm davranışını dəyişdir</string>
|
||||
<string name="revanced_sb_segments_sponsor">Sponsor</string>
|
||||
@@ -892,9 +928,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">Bölüm göndərilmir: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock müvəqqəti olaraq cavab vermir</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">Bölüm göndərilmir (status: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Bölüm göndərilmir.\nSürət məhdudlaşıb (eyni istifadəçi və ya IP-dən pik sayda)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Segment təqdim edə bilmədiniz. Həddən artıq istifadə (eyni istifadəçi və ya IP ünvanından çox)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">Bölüm göndərilmir: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">Bölüm göndərilmir.\nArtıq var</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"Segment təqdim edə bilmirsiniz.
|
||||
Artıq mövcuddur"</string>
|
||||
<string name="revanced_sb_submit_succeeded">Bölüm uğurla göndərildi</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock müvəqqəti əlçatmazdır (API vaxtı bitdi)</string>
|
||||
@@ -917,7 +954,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">Bölüm başladığı vaxt</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Bölümün bitmə vaxtı</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Vaxtlar düzgündür?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">Bölüm \n\n%1$s\n\n%2$s\n\n(%3$s)\n\nTəqdim etməyə hazırsınız?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"Bölüm
|
||||
|
||||
%1$s
|
||||
ilə
|
||||
%2$s arasıdır
|
||||
|
||||
(%3$s)
|
||||
|
||||
Təqdim etməyə hazırdır?"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">Başlanğıc sondan əvvəl olmalıdır</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">Əvvəlcə vaxt çubuğunda iki yeri doldur</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">Bölümü izləyin, rahatlıqla ötürdüyünə əmin olun</string>
|
||||
@@ -959,7 +1004,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">Tətbiq versiyasını saxtalaşdır</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">Versiya saxtalaşdırıldı</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">Versiya saxtalaşdırılmadı</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">Tətbiq versiyası, YouTube-un daha köhnə versiyası şəklində saxtalaşdırılacaq.\n\nBu, tətbiqin görünüşünü və funksiyalarını dəyişdirəcək, ancaq bilinməyən yan təsirlər ola bilər.\n\nDaha sonra söndürsəniz, UI səhvlərini önləmək üçün tətbiq məlumatını təmizləmək tövsiyə olunur.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"Tətbiq versiyası köhnə bir YouTube versiyasına oxşayacaq.
|
||||
|
||||
Bu tətbiqin görünüşünü və xüsusiyyətlərini dəyişdirəcək, lakin bilinməyən yan təsirlər yarana bilər.
|
||||
|
||||
Sonradan söndürülərsə, UI səhvlərini qarşısını almaq üçün tətbiqin məlumatlarını silmək tövsiyə olunur."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Saxta tətbiq versiyası hədəfi</string>
|
||||
@@ -1012,7 +1061,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">Tətbiqdə kiçildilən oynadıcı üslubunu dəyişdir</string>
|
||||
<string name="revanced_miniplayer_type_title">Kiçik oynadıcı növü</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Qeyri-aktivdir</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Orijinal</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">İlkin</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Ən kiçik</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Planşet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Müasir 1</string>
|
||||
@@ -1022,19 +1071,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Künclər dairəvidir</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Künclər kvadratdır</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Ölçüsünü dəyişmək üçün cüt toxunmanı və çimdikləməni aktivləşdir</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">Ölçüsünü dəyişdirmək üçün cüt toxunma fəaliyyəti və çimdikləmə aktivləşdirildi\n\n• Mini oynadıcı ölçüsün artırmaq üçün cüt toxunun\n• Orijinal ölçünü bərpa etmək üçün təkrar cüt toxun</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"İkiqat vuruş hərəkəti və çimdikleyərək yenidən ölçmək aktivdir
|
||||
|
||||
• Miniplayer ölçüsünü artırmaq üçün iki dəfə vurun
|
||||
• Orijinal ölçüsünə qayıtmaq üçün yenidən iki dəfə vurun"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Ölçüsünü dəyişdirmək üçün cüt toxunma fəaliyyəti və çimdikləmə yoxdur</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">\"Sürüklə və burax\"ı aktivləşdir</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">\"Sürüklə və burax\" aktivdir\n\nMini oynadıcı, ekranın istənilən küncünə sürüklənə bilər</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Sürüklə və burax aktivdir
|
||||
|
||||
Miniplayer ekranın istənilən küncünə sürüklənə bilər"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">\"Sürüklə və burax\" aktiv deyil</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Üfüqi sürükləmə jestini aktivləşdir</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">Üfüqi sürükləmə jesti aktivdir\n\nKiçik Oynadıcı ekranın soluna və ya sağına sürüklənə bilər</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Üfüqi sürükləmə jesti aktivdir
|
||||
|
||||
Miniplayer ekrandan sola və ya sağa sürüklənə bilər"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Üfüqi sürükləmə jesti qapatıldı</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">\"Bağla\" düyməsini gizlət</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">\"Bağla\" düyməsi gizlidir</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">\"Bağla\" düyməsi göstərilir</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Genişləndir və bağla düymələrini gizlət</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">Düymələr gizlədilib\n\nGenişləndirmək və ya bağlamaq üçün sürüşdür</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"Düymələr gizlidir
|
||||
|
||||
Açmaq və ya bağlamaq barmaqla sürüşdürün"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Genişləndir və bağla düymələri göstərilir</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Alt mətnləri gizlət</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Alt mətnlər gizlədilir</string>
|
||||
@@ -1065,7 +1123,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">Təsvir bölgə məhdudiyyətlərini ötür</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">yt4.ggpht.com təsvir host-u istifadə edilir</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">Orijinal təsvir host-u istifadə edilir\n\nBunu aktivləşdirmə, bəzi bölgələrdə əngəllənən, ağ təsvirləri düzəldə bilər</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"Orijinal şəkil hostundan istifadə
|
||||
|
||||
Bunu aktivləşdirmək, bəzi regionlarda bloklanmışdırılmış itkin şəkilləri düzəldə bilər"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -1080,7 +1140,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & Orijinal miniatürlər</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow & Kadr çəkilişlər</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">Kadr çəkilişləri</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow YouTube videoları üçün bölük mənbəli miniatürlər təchiz edir. Bu miniatürlər hər zaman YouTube tərəfindən təmin edilənlərdən daha uyğun olur\n\nƏgər aktivləşdirilərsə, video URL-lər API serverinə göndəriləcək və başqa heç bir məlumat göndərilməyəcək. Videoda DeArrow miniatürləri yoxdursa, orijinal və ya hələ də kadr çəkilişləri göstərilir\n\nDeArrow haqqında ətraflı öyrənmək üçün bura toxun</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow, YouTube videoları üçün kütlədən alınan kiçik görüntülər təqdim edir. Bu kiçik görüntülər YouTube tərəfindən təqdim edilənlərdən daha uyğun ola bilər
|
||||
|
||||
Aktivləşdirilərsə, video URLləri API serverinə göndəriləcək və başqa heç bir məlumat göndərilməyəcək. Bir videoda DeArrow kiçik şəkilləri yoxdursa, onda orijinal və ya hərəkətsiz çəkilişlər göstərilir
|
||||
|
||||
DeArrow haqqında ətraflı məlumat üçün buraya vurun"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">API əlçatan deyilsə ani bildiriş göstər</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">DeArrow əlçatan deyilsə bildiriş göstərilir</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">DeArrow əlçatan deyilsə bildiriş göstərilmir</string>
|
||||
@@ -1119,8 +1183,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Cihaz ölçülərini saxtalaşdır</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">Cihaz ölçüləri saxtalaşdı\n\nDaha yüksək video keyfiyyətləri göstərilə bilər, ancaq video oynatma donmaları, daha pis batareya istismarı və bilinməyən yan təsirləri görə bilərsiniz</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Cihaz ölçüləri saxtalaşmır\n\nBunu aktivləşdirmə, daha yüksək video keyfiyyətlərinin olmasın təmin edə bilir</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Cihaz ölçüləri saxtalaşdırıldı
|
||||
|
||||
Yüksək video keyfiyyətlər görünə bilər, ancaq videonun oynadılmasında qırılma, daha pis batareya ömrü və bilinməyən yan təsirləri sezə bilərsiniz"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"Cihaz ölçüləri saxtalaşdırılmayıb
|
||||
|
||||
Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Bunu aktivləşdirmə, video oynatma donmalarına, daha pis batareya istismarına və bilinməyən yan təsirlərə səbəb ola bilər.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1170,8 +1238,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_speed_menu_summary_off">Fərdi sürət menyusu göstərilmir</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Fərdi oynatma sürəti</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Fərdi oynatma sürətlərini əlavə et və ya dəyiş</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Fərdi sürətlər %s-dən az olmalıdır. Standart dəyərlər istifadəsi.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Etibarsız oynatma sürətləri. Standartlar istifadədədir.</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Fərdi sürətlər %s dəyərindən az olmalıdır</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Fərdi oynatma sürətləri etibarsızdır</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Avtomatik</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1196,18 +1264,79 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Oynatma problemlərin önləmək üçün qəbuledici video yayımların saxtalaşdır</string>
|
||||
<string name="revanced_spoof_video_streams_title">Video yayımları saxtalaşdır</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">Video yayımları saxtalaşdırılır</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">Video yayımları saxtalaşmır\n\nVideo oynatma işləməyə bilər</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"Video yayımlar saxtalaşdırılmır
|
||||
|
||||
Video oynatma işləməyə bilər"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Bu seçimi bağlamaq, video oynatma problemlərinə səbəb olar.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">İlkin qəbuledici</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Məcburi AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodlaşdırma: AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodlaşdırma / VP9 və ya AV1</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Cihazınızın VP9 hardware decoding\'i yoxdur və bu seçim, \"Qəbuledicini saxtalaşdırma\" aktivləşdikdə həmişəlikdir</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Bunu aktivləşdirmə batareya ömrünü yaxşılaşdıra və oynatma donmasını düzəldə bilər.\n\nAVC maksimum 1080p görüntü imkanına malikdir və video oynadılması VP9 və ya AV1-dən daha çox internet məlumatı istifadə edəcək.</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodlama AVC (H.264) -yə məcbur edilir</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodlama birbaşa yoxlanılır</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Bunu fəallaşdırma, batareya ömrünü yaxşılaşdıra və oxutma ilişmələrini düzəldə bilər.
|
||||
|
||||
AVC-nin maksimum dəqiqliyi 1080p-dir, Opus səs kodek əlçatan deyil və video oxutma, VP9 və ya AV1-dən daha çox internet datası istifadə edəcək."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS saxtakarlığı yan təsirləri</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">• Şəxsi uşaq videoları oynadılmaya bilər\n• Canlı yayımlar başdan başlayır\n• Videolar 1 saniyə tez bitə bilər\n• Opus səs kodlama yoxdur</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Şəxsi uşaq videoları oxudulmaya bilər
|
||||
• Canlı yayımlar başdan başlayır
|
||||
• Videolar 1 saniyə tez bitir"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR saxtakarlığı yan təsirləri</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Uşaq videoları oynadılmaya bilər\n• Səs treki menyusu əskikdir\n• Sabit səs həcmi əlçatan deyil</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Uşaq videoları oxudulmaya bilər
|
||||
• Canlı yayımlar başdan başlayır
|
||||
• Videolar 1 saniyə tez bitir"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">İlkin səs yayımı dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Tətbiq dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">Ərəbcə</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">Azərbaycanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">Bolqarca</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">Benqalca</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">Katalanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">Çexcə</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">Danimarka dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">Almanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">Yunanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">İngiliscə</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">İspanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">Estonca</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">Farsca</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">Fincə</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">Fransızca</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">Qücərat dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">Hindcə</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">Xorvatca</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">Macarca</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">İndoneziya dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">İtalyanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Yaponca</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">Qazaxca</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">Koreyaca</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">Litvaca</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">Letonca</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">Makedon Dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">Monqolca</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">Marathi dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">Malay dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">Birman dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">Hollandca</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">Oriya dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">Pəncabca</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">Polyak dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">Portuqalca (Braziliya)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">Portuqalca (Portəgiz)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Rumınca</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Rusca</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">Slovak dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">Sloven dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">Serbcə</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">İsveçcə</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">Suahili dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">Tamilcə</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">Teluquca</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">Tay dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">Türkcə</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">Ukrayna dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">Urduca</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">Vyetnamca</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">Çincə</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1217,8 +1346,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">Səsli reklamlar bloklanmayıb</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s əlçatmazdır. Reklamlar görünə bilər. Seçimlərdə başqa reklam bloku xidmətinə keçirməyə cəhd et.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s serveri xəta sorğusu verdi. Reklam görünə bilər. Seçimlərdə başqa reklam bloku xidmətinə keçir.</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s əlçatmazdır, reklamlar göstərilə bilər. Ayarlarda reklam əngəlləmə xidmətini dəyişdirməyə çalışın.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s bir xəta qaytardı, reklamlar göstərilə bilər. Ayarlarda reklam əngəlləmə xidmətini dəyişdirməyə çalışın.</string>
|
||||
<string name="revanced_block_embedded_ads_title">Yerləşdirilən video reklamlarını əngəllə</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">Qeyri-aktiv edildi</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Dəqiq proksi</string>
|
||||
|
||||
@@ -1,38 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">\"Правядзенне праверкі асяроддзя не ўдалося\"</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">\"Адкрыць афіцыйны вэб-сайт\"</string>
|
||||
<string name="revanced_check_environment_dialog_ignore_button">Ігнараваць</string>
|
||||
<string name="revanced_check_environment_failed_message"><h5>Гэта дадатак відавочна не з\'яўляецца патчам.</h5><br>Гэта дадатак можа працаваць няправільна, а таксама можа быць <b>небяспечным або нават небяспечным у выкарыстанні</b>.<br><br>Гэтыя праверкі азначаюць, што гэта дадатак было загаддзя перароблена або атрымана ад кагосьці іншага:<br><br><small>%1$s</small><br>Настойліва рэкамендуецца <b>выдаліць гэты дадатак і перарабіць яго самастойна</b>, каб пераканацца, што вы выкарыстоўваеце правераны і бяспечны дадатак.<p><br>Калі ігнараваць, гэта папярэджанне будзе паказана толькі два разы.</string>
|
||||
<string name="revanced_check_environment_not_same_patching_device">Адкарэктавана на іншай прыладзе</string>
|
||||
<string name="revanced_check_environment_manager_not_expected_installer">Не ўстаноўлена ReVanced Manager</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time">Адкарэктавана больш чым 10 хвілін таму</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_days">Адкарэктавана %s дзён таму</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">Дата стварэння APK пашкоджана</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Вы хочаце працягнуць?</string>
|
||||
@@ -58,9 +56,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore не ўсталяваны. Усталюйце яго.</string>
|
||||
<string name="gms_core_dialog_title">Патрабуецца дзеянне</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore не мае дазволу на працу ў фонавым рэжыме.\n\nВыконвайце інструкцыі \"Не забівайце маю праграму\" для вашага тэлефона і прымяніце інструкцыі да ўстаноўкі MicroG.\n\nГэта патрабуецца для прыкладанне для працы.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore не мае дазволу на працу ў фонавым рэжыме.
|
||||
|
||||
Выконвайце інструкцыі \"Не забівай маё прыкладанне\" для вашага тэлефона і прымяніце іх да вашай ўстаноўкі MicroG.
|
||||
|
||||
Гэта неабходна для працы прыкладання."</string>
|
||||
<string name="gms_core_dialog_open_website_text">Адкрыць сайт</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">Аптымізацыя батарэі MicroG GmsCore павінна быць адключана, каб прадухіліць праблемы.\n\nНацісніце кнопку \"Працягнуць\" і адключыце аптымізацыю батарэі.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"Неабходна адключыць аптымізацыю батарэі для MicroG GmsCore, каб пазбегнуць праблем.
|
||||
|
||||
Адключэнне аптымізацыі батарэі для MicroG не паўплывае на выкарыстанне батарэі.
|
||||
|
||||
Націсніце кнопку \"Працягнуць\" і дазвольце змяніць аптымізацыю."</string>
|
||||
<string name="gms_core_dialog_continue_text">Працягнуць</string>
|
||||
</patch>
|
||||
</app>
|
||||
@@ -78,6 +84,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_settings_screen_12_video_title">Відэа</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">Адключыць прайграванне Shorts у фонавым</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_on">Прайграванне Shorts у фонавым адключана</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_off">Фоновый плейлист Shorts включен</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_screen_title">Адладка</string>
|
||||
@@ -94,10 +103,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">Паказаць тост пры памылцы ReVanced</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Тост паказваецца, калі ўзнікае памылка</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Тост не паказваецца, калі ўзнікае памылка</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">Адключэнне апавяшчэнняў пра памылкі схавае ўсе апавяшчэнні аб памылках ReVanced.\n\nВы не будзеце атрымліваць апавяшчэнні аб непрадбачаных падзеях.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Адключэнне паведамленняў пра памылкі схавае ўсе апавяшчэнні ReVanced пра памылкі.
|
||||
|
||||
Вы не будзеце атрымліваць апавяшчэнні пра нечаканыя падзеі."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Адключыць свячэнне кнопкі \"Падабаецца\" / \"Падпісацца\".</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Адключыць свячэнне кнопкі \"Падабаецца\" / \"Падпісацца\"</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Кнопка \"Падабаецца\" і \"Падпісацца\" не будуць свяціцца пры згадванні</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Кнопка \"Падабаецца\" і \"Падпісацца\" будуць свяціцца пры згадванні</string>
|
||||
<string name="revanced_hide_album_cards_title">Схаваць карты альбома</string>
|
||||
@@ -113,7 +124,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Вадзяны знак схаваны</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Паказаны вадзяны знак</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">Схавайце гарызантальныя паліцы</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">Паліцы схаваны, напрыклад:\n• Апошнія навіны\n• Працягвайце прагляд\n• Даследуйце іншыя каналы\n• Пакупкі\n• Глядзіце яшчэ раз</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"Схаваны паліцы, такія як:
|
||||
• Навіны
|
||||
• Працяг прагляду
|
||||
• Даведайцеся больш пра каналы
|
||||
• Пакупкі
|
||||
• Паглядзець яшчэ раз"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Паказаны паліцы</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -210,7 +226,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_attributes_section_title">Схаваць раздзел атрыбутаў</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Раздзелы \"Выбраныя месцы\", гульні і музыка схаваны</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Паказваюцца раздзелы \"Выбраныя месцы\", Гульні і Музыка</string>
|
||||
<string name="revanced_hide_chapters_section_title">Схаваць раздзел \"Раздзелы\".</string>
|
||||
<string name="revanced_hide_chapters_section_title">Схаваць раздзел \"Раздзелы\"</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">Раздзел раздзелаў схаваны</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">Паказваецца раздзел раздзелаў</string>
|
||||
<string name="revanced_hide_podcast_section_title">Схаваць раздзел \"Даследаваць падкаст\"</string>
|
||||
@@ -240,12 +256,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Паказана ў звязаных відэа</string>
|
||||
<string name="revanced_comments_screen_title">Каментарыі</string>
|
||||
<string name="revanced_comments_screen_summary">Схаваць або паказаць кампаненты раздзела каментарыяў</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">Схаваць \"Зводка чата\" </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">«Агляд чата» схаваны</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">«Агляд чата» паказаны</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Схаваць загаловак \"Каментарыі ўдзельнікаў\"</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Загаловак \"Каментарыі ўдзельнікаў\" схаваны</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Паказаны загаловак \"Каментарыі ўдзельнікаў\"</string>
|
||||
<string name="revanced_hide_comments_section_title">Схаваць раздзел каментарыяў</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">Раздзел каментарыяў схаваны</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">Паказваецца раздзел каментарыяў</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">Схаваць кнопку \"Створиць Short\"</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Кнопка \"Створиць Short\" схавана</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Кнопка \"Створиць Short\" паказана</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">Схаваць каментарый для папярэдняга прагляду</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">Каментарый перад праглядам схаваны</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">Паказваецца папярэдні прагляд каментарыя</string>
|
||||
@@ -256,6 +278,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Кнопкі меткі часу і эмодзі схаваны</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Паказваюцца кнопкі меткі часу і эмодзі</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Схаваць YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Doodles у панэлі пошуку схаваны</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Doodles у панэлі пошуку паказаны</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"Doodles па YouTube паказваюцца некалькі дзён у год.
|
||||
|
||||
Калі Doodle зараз паказваецца ў вашым рэгіёне і гэты параметр схаваны, панэль фільтраў ніжэй радка пошуку таксама будзе схавана."</string>
|
||||
<string name="revanced_custom_filter_screen_title">Карыстальніцкі фільтр</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Схавайце кампаненты з дапамогай карыстацкіх фільтраў</string>
|
||||
<string name="revanced_custom_filter_title">Уключыць карыстальніцкі фільтр</string>
|
||||
@@ -279,16 +307,36 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">Ключавыя словы, якія трэба схаваць</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"Ключавыя словы і фразы для схавання, падзеленыя пераходамі на новую радок
|
||||
|
||||
Ключавыя словы могуць быць назвамі каналаў або любым тэкстам, які паказаны ў назвах відэа
|
||||
|
||||
Словы з вялікімі літарамі пасярэдзіне павінны ўводзіцца з вялікай літары (напрыклад: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">Аб фільтрацыі ключавых слоў</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"Вынікі дома/падпіскі/пошуку фільтруюцца, каб схаваць змест, які адпавядае ключавым словам і фразам
|
||||
|
||||
Абмежаванні
|
||||
• Shorts нельга схаваць па назве канала
|
||||
• Некаторыя элементы інтэрфейсу могуць не быць схаваны
|
||||
• Пошук па ключавым слове можа не паказаць вынікі"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Супадзенне цэлых слоў</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">Калі вы ахінеце ключавое слова або фразу ў двухразовыя лапкі, гэта перашкодзіць частковаму супадзенню назваў відэа і каналаў<br><br>Напрыклад,<br><b>\"ai\"</b> схавае відэа: <b>How does AI work?</b><br>але не схавае: <b>What does fair use mean?</b></string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_hide_keyword_toast_invalid_common">Нельга выкарыстоўваць ключавое слова: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Дадайце цытаты да ключавога слова: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_conflicting">Ключавое слова мае супярэчлівыя дэкларацыі: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_length">Ключавое слова занадта кароткае і патрабуе цытат: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_broad">Ключавое слова схавае ўсе відэа: %s</string>
|
||||
</patch>
|
||||
<patch id="ad.general.hideAdsResourcePatch">
|
||||
<string name="revanced_hide_general_ads_title">Схаваць агульную рэкламу</string>
|
||||
<string name="revanced_hide_general_ads_summary_on">Агульныя аб\"явы схаваныя</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">Паказваюцца агульныя аб\"явы</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Схаваць поўнаэкранную рэкламу</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Поўнаэкранная рэклама схавана\n\nГэта функцыя даступная толькі для старых прылад</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Схаваны поўнаэкранныя рэкламныя ролікі
|
||||
|
||||
Гэтая функцыя даступная толькі для старых прылад"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Адлюстроўваецца поўнаэкранная рэклама</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">Схаваць рэкламу на кнопках</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">Аб\"явы на кнопках схаваныя</string>
|
||||
@@ -302,6 +350,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_products_banner_title">Схаваць банер для прагляду прадуктаў</string>
|
||||
<string name="revanced_hide_products_banner_summary_on">Банэр схаваны</string>
|
||||
<string name="revanced_hide_products_banner_summary_off">Паказваецца банэр</string>
|
||||
<string name="revanced_hide_player_store_shelf_title">Схаваць полку крамы прайгравальніка</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">Паліца крамы схавана</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">Паліца крамы паказана</string>
|
||||
<string name="revanced_hide_shopping_links_title">Схаваць спасылкі на пакупкі ў апісанні відэа</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Спасылкі на пакупкі схаваныя</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Паказваюцца спасылкі на пакупкі</string>
|
||||
@@ -375,7 +426,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_swipe_volume_title">Уключыць жэст гучнасці</string>
|
||||
<string name="revanced_swipe_volume_summary_on">Правядзенне пальцам па гучнасці ўключана</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Правядзенне пальцам па гучнасці адключана</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">Уключыць жэст \"націсканне для правядзення пальцам\".</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">Уключыць жэст \"націсканне для правядзення пальцам\"</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">Правядзенне пальцам уключана</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Правядзенне пальцам адключана</string>
|
||||
<string name="revanced_swipe_haptic_feedback_title">Уключыць тактыльную зваротную сувязь</string>
|
||||
@@ -405,22 +456,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">Кнопкі дзеянняў</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">Схаваць або паказаць кнопкі пад відэа</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Схаваць \"Падабаецца\" і \"Не падабаецца\".</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Схаваць \"Падабаецца\" і \"Не падабаецца\"</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Кнопкі \"Падабаецца\" і \"Не падабаецца\" схаваны</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Паказваюцца кнопкі \"Падабаецца\" і \"Не падабаецца\".</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Паказваюцца кнопкі \"Падабаецца\" і \"Не падабаецца\"</string>
|
||||
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_share_button_title">Схаваць Share</string>
|
||||
<string name="revanced_hide_share_button_summary_on">Кнопка \"Падзяліцца\" схавана</string>
|
||||
<string name="revanced_hide_share_button_summary_off">Паказана кнопка \"Падзяліцца\".</string>
|
||||
<string name="revanced_hide_share_button_summary_off">Паказана кнопка \"Падзяліцца\"</string>
|
||||
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears only on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">Схаваць справаздачу</string>
|
||||
<string name="revanced_hide_report_button_summary_on">Кнопка \"Паведаміць\" схавана</string>
|
||||
<string name="revanced_hide_report_button_summary_off">Паказана кнопка \"Паведаміць\".</string>
|
||||
<string name="revanced_hide_report_button_summary_off">Паказана кнопка \"Паведаміць\"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_remix_button_title">Схаваць рэмікс</string>
|
||||
<string name="revanced_hide_remix_button_summary_on">Кнопка \"Рэмікс\" схавана</string>
|
||||
<string name="revanced_hide_remix_button_summary_off">Паказана кнопка \"Рэмікс\".</string>
|
||||
<string name="revanced_hide_remix_button_summary_off">Паказана кнопка \"Рэмікс\"</string>
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_download_button_title">Схаваць загрузку</string>
|
||||
<string name="revanced_hide_download_button_summary_on">Кнопка загрузкі схавана</string>
|
||||
@@ -436,7 +487,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_playlist_button_title">Схаваць Захаваць у плэйліст</string>
|
||||
<string name="revanced_hide_playlist_button_summary_on">Кнопка \"Захаваць у спіс прайгравання\" схавана</string>
|
||||
<string name="revanced_hide_playlist_button_summary_off">Паказана кнопка \"Захаваць у спіс прайгравання\".</string>
|
||||
<string name="revanced_hide_playlist_button_summary_off">Паказана кнопка \"Захаваць у спіс прайгравання\"</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.navigation.navigationButtonsPatch">
|
||||
<string name="revanced_navigation_buttons_screen_title">Кнопкі навігацыі</string>
|
||||
@@ -444,20 +495,25 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the tab. -->
|
||||
<string name="revanced_hide_home_button_title">Схаваць галоўную</string>
|
||||
<string name="revanced_hide_home_button_summary_on">Кнопка \"Дадому\" схавана</string>
|
||||
<string name="revanced_hide_home_button_summary_off">Паказана кнопка \"Дадому\".</string>
|
||||
<string name="revanced_hide_home_button_summary_off">Паказана кнопка \"Дадому\"</string>
|
||||
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_hide_shorts_button_title">Схаваць Shorts</string>
|
||||
<string name="revanced_hide_shorts_button_summary_on">Кнопка Shorts схавана</string>
|
||||
<string name="revanced_hide_shorts_button_summary_off">Кнопка shorts паказваецца</string>
|
||||
<!-- The Create button has no display name. Translate normally. -->
|
||||
<string name="revanced_hide_create_button_title">Схаваць Стварыць</string>
|
||||
<string name="revanced_hide_create_button_summary_on">Кнопка \"Стварыць\" схавана</string>
|
||||
<string name="revanced_hide_create_button_summary_off">Паказана кнопка \"Стварыць\".</string>
|
||||
<string name="revanced_hide_create_button_summary_off">Паказана кнопка \"Стварыць\"</string>
|
||||
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_hide_subscriptions_button_title">Схаваць падпіскі</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">Кнопка \"Падпіскі\" схавана</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Паказана кнопка \"Падпіскі\".</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Паказана кнопка \"Падпіскі\"</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Пераключальнік \"Стварыць з апавяшчэннямі\".</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">Кнопка \"Стварыць\" замяняецца кнопкай \"Апавяшчэнні\"\n\nЗаўвага: пры ўключэнні гэтага таксама прымусова хаваецца відэарэклама</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Кнопка \"Стварыць\" не ўзаемадзейнічае з кнопкай \"Апавяшчэнні\".</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Пераключальнік \"Стварыць з апавяшчэннямі\"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Кнопка «Стварыць» заменена кнопкай «Апавяшчэнні»
|
||||
|
||||
Заўвага: Уключэнне гэтага таксама прымусова схавае відэарэкламу"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Кнопка \"Стварыць\" не ўзаемадзейнічае з кнопкай \"Апавяшчэнні\"</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Схаваць меткі кнопак навігацыі</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Цэтлікі схаваныя</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">Этыкеткі паказаны</string>
|
||||
@@ -474,6 +530,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_on">Меню дадатковых налад схавана</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_off">Адлюструецца меню дадатковых налад</string>
|
||||
<!-- 'Sleep timer' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_title">Схаваць таймер сну</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">Меню таймера сну схавана</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">Меню таймера сну паказана</string>
|
||||
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_loop_video_title">Схаваць цыкл відэа</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_on">Меню цыклічнага відэа схавана</string>
|
||||
@@ -482,6 +541,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_title">Схаваць неактыўны рэжым</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">Меню неактыўнага рэжыму схавана</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">Адлюстроўваецца меню рэжыму навакольнага асяроддзя</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_title">Схаваць стабільны гук</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_off">Меню стабільнага гуку паказана</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_on">Меню стабільнага гуку схавана</string>
|
||||
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_help_title">Схаваць Даведку & зваротная сувязь</string>
|
||||
<string name="revanced_hide_player_flyout_help_summary_on">Дапамога & меню зваротнай сувязі схавана</string>
|
||||
@@ -506,7 +568,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_title">Схаваць гадзіннік у VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Меню прагляду ў VR схавана</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Паказана меню \"Глядзець у VR\".</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Паказана меню \"Глядзець у VR\"</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_title">Схаваць калонтытул меню якасці відэа</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Ніжні калонтытул меню якасці відэа схаваны</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Паказваецца ніжні калонтытул меню якасці відэа</string>
|
||||
@@ -519,7 +581,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_cast_button_summary_on">Кнопка Cast схавана</string>
|
||||
<string name="revanced_hide_cast_button_summary_off">Паказана кнопка Cast</string>
|
||||
<!-- This button does not display any text, but 'captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title' -->
|
||||
<string name="revanced_hide_captions_button_title">Кнопка «Схаваць цітры».</string>
|
||||
<string name="revanced_hide_captions_button_title">Кнопка «Схаваць цітры»</string>
|
||||
<string name="revanced_hide_captions_button_summary_on">Кнопка субцітраў схавана</string>
|
||||
<string name="revanced_hide_captions_button_summary_off">Паказана кнопка субцітраў</string>
|
||||
<string name="revanced_hide_autoplay_button_title">Схаваць кнопку аўтазапуску</string>
|
||||
@@ -555,16 +617,27 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_off">Адлюстроўваецца панэль пошуку эскізаў</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
|
||||
<string name="revanced_shorts_player_screen_title">Прайгравальнік Shorts</string>
|
||||
<string name="revanced_shorts_player_screen_summary">Схаваць або паказаць кампаненты ў прайгравальніку Shorts</string>
|
||||
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
<string name="revanced_hide_shorts_home_title">Схаваць шорты ў хатняй стужцы</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">Shorts у стужцы хатняй старонкі схаваны</string>
|
||||
<string name="revanced_hide_shorts_home_summary_off">Shorts у стужцы хатняй старонкі паказаны</string>
|
||||
<!-- 'subscription' should be translated using the same localized wording YouTube displays for the subscription tab. -->
|
||||
<string name="revanced_hide_shorts_subscriptions_title">Схаваць Shorts у стужцы падпіскі</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_on">Shorts у стужцы падпіскі схаваны</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_off">Shorts у стужцы падпіскі паказаны</string>
|
||||
<string name="revanced_hide_shorts_search_title">Схаваць Shorts у выніках пошуку</string>
|
||||
<string name="revanced_hide_shorts_search_summary_on">Shorts у выніках пошуку схаваны</string>
|
||||
<string name="revanced_hide_shorts_search_summary_off">Shorts у выніках пошуку паказаны</string>
|
||||
<!-- 'join' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_join_button_title">Схаваць кнопку далучыцца</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Кнопка «Далучыцца» схавана</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Паказана кнопка «Далучыцца».</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Паказана кнопка «Далучыцца»</string>
|
||||
<!-- 'subscribe' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_subscribe_button_title">Схаваць кнопку падпісацца</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_on">Кнопка \"Падпісацца\" схавана</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_off">Паказана кнопка «Падпісацца».</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_off">Паказана кнопка «Падпісацца»</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Схаваць прыпыненыя кнопкі накладання</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">Прыпыненыя кнопкі накладання схаваны</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">Паказваюцца прыпыненыя кнопкі накладання</string>
|
||||
@@ -573,33 +646,54 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_shop_button_summary_off">Паказваецца кнопка крамы</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Схаваць кнопку супердзякуй</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Кнопка супердзякуй схавана</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Паказана кнопка \"Супер дзякуй\".</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Паказана кнопка \"Супер дзякуй\"</string>
|
||||
<string name="revanced_hide_shorts_tagged_products_title">Схаваць пазначаныя прадукты</string>
|
||||
<string name="revanced_hide_shorts_tagged_products_summary_on">Пазначаныя прадукты схаваны</string>
|
||||
<string name="revanced_hide_shorts_tagged_products_summary_off">Прадукты з тэгамі паказаны</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Схаваць метку месцазнаходжання</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Метка месцазнаходжання схавана</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Паказана метка месцазнаходжання</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Схаваць кнопку захавання музыкі</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Кнопка захавання музыкі схавана</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Кнопка захавання музыкі паказана</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Схаваць кнопку выкарыстання шаблону</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Кнопка выкарыстання шаблону схавана</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">Кнопка выкарыстання шаблону паказана</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">Схаваць кнопку будучых</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">Кнопка ⬆️Будущие ролики⬆️ скрыта</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">Кнопка ⬆️Будущие ролики⬆️ отображается</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Скрыть кнопку с зелёным экраном Shorts</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Кнопка с зелёным экраном Shorts скрыта</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Кнопка с зелёным экраном Shorts отображается</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">Скрыть хештег-кнопку Shorts</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_on">Хештег-кнопка Shorts скрыта</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_off">Хештег-кнопка Shorts отображается</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">Схаваць прапановы пошуку</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_summary_on">Пошукавыя прапановы схаваны</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_summary_off">Паказваюцца прапановы пошуку</string>
|
||||
<string name="revanced_hide_shorts_like_button_title">Схаваць кнопку \"Падабаецца\".</string>
|
||||
<string name="revanced_hide_shorts_stickers_title">Скрыть стикеры</string>
|
||||
<string name="revanced_hide_shorts_stickers_summary_on">Стикеры Shorts скрыты</string>
|
||||
<string name="revanced_hide_shorts_stickers_summary_off">Стикеры Shorts отображаются</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">Скрыть всплывающее окно с лайками Shorts</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_on">Анимация всплывающего окна с лайками Shorts скрыта</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_off">Анимация всплывающего окна с лайками Shorts отображается</string>
|
||||
<string name="revanced_hide_shorts_like_button_title">Схаваць кнопку \"Падабаецца\"</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_on">Кнопка \"Падабаецца\" схавана</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_off">Паказана кнопка \"Падабаецца\".</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_title">Схаваць кнопку \"не падабаецца\".</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_off">Паказана кнопка \"Падабаецца\"</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_title">Схаваць кнопку \"не падабаецца\"</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_summary_on">Кнопка \"Не падабаецца\" схавана</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_summary_off">Паказана кнопка \"Не падабаецца\".</string>
|
||||
<string name="revanced_hide_shorts_comments_button_title">Кнопка \"Схаваць каментарыі\".</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_summary_off">Паказана кнопка \"Не падабаецца\"</string>
|
||||
<string name="revanced_hide_shorts_comments_button_title">Кнопка \"Схаваць каментарыі\"</string>
|
||||
<string name="revanced_hide_shorts_comments_button_summary_on">Кнопка каментарыяў схавана</string>
|
||||
<string name="revanced_hide_shorts_comments_button_summary_off">Паказана кнопка каментарыяў</string>
|
||||
<!-- 'remix' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_remix_button_title">Схаваць кнопку рэмікса</string>
|
||||
<string name="revanced_hide_shorts_remix_button_summary_on">Кнопка \"Рэмікс\" схавана</string>
|
||||
<string name="revanced_hide_shorts_remix_button_summary_off">Паказана кнопка \"Рэмікс\".</string>
|
||||
<string name="revanced_hide_shorts_remix_button_summary_off">Паказана кнопка \"Рэмікс\"</string>
|
||||
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_share_button_title">Схаваць кнопку абагульвання</string>
|
||||
<string name="revanced_hide_shorts_share_button_summary_on">Кнопка \"Падзяліцца\" схавана</string>
|
||||
<string name="revanced_hide_shorts_share_button_summary_off">Паказана кнопка \"Падзяліцца\".</string>
|
||||
<string name="revanced_hide_shorts_share_button_summary_off">Паказана кнопка \"Падзяліцца\"</string>
|
||||
<string name="revanced_hide_shorts_info_panel_title">Схаваць інфармацыйную панэль</string>
|
||||
<string name="revanced_hide_shorts_info_panel_summary_on">Інфармацыйная панэль схавана</string>
|
||||
<string name="revanced_hide_shorts_info_panel_summary_off">Паказана інфармацыйная панэль</string>
|
||||
@@ -615,7 +709,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_full_video_link_label_title">Схаваць поўную метку спасылкі на відэа</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_on">Метка спасылкі на відэа схавана</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_off">Адлюструецца метка спасылкі на відэа</string>
|
||||
<string name="revanced_hide_shorts_sound_button_title">Кнопка \"Схаваць гук\".</string>
|
||||
<string name="revanced_hide_shorts_sound_button_title">Кнопка \"Схаваць гук\"</string>
|
||||
<string name="revanced_hide_shorts_sound_button_summary_on">Кнопка гуку схавана</string>
|
||||
<string name="revanced_hide_shorts_sound_button_summary_off">Паказана кнопка гуку</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_title">Схаваць панэль навігацыі</string>
|
||||
@@ -637,6 +731,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">Усплывальныя панэлі прайгравальніка схаваныя</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">Паказваюцца ўсплывальныя панэлі прайгравальніка</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">Открывать видео на весь экран в портретном режиме</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Видео открываются на весь экран</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Видео не открываются на весь экран</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">Непразрыстасць накладання прайгравальніка</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">Значэнне непразрыстасці паміж 0-100, дзе 0 - празрысты</string>
|
||||
@@ -649,12 +748,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Дызлайкі недаступныя (дасягнуты ліміт кліенцкага API)</string>
|
||||
<string name="revanced_ryd_failure_generic">Не падабаецца (%s)</string>
|
||||
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Перазагрузіце відэа, каб прагаласаваць з дапамогай функцыі \"Вярнуць не падабаецца YouTube\".</string>
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Перазагрузіце відэа, каб прагаласаваць з дапамогай функцыі \"Вярнуць не падабаецца YouTube\"</string>
|
||||
<string name="revanced_ryd_enable_summary_on">Дызлайкі паказаны</string>
|
||||
<string name="revanced_ryd_enable_summary_off">Дызлайкі не паказваюцца</string>
|
||||
<string name="revanced_ryd_shorts_title">Паказвайце \"не падабаецца\" на Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Адзнакі \"не падабаецца\" ў Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">Адзнакі \"Не падабаецца\" ў Shorts\n\nАбмежаванне: адзнакі \"Не падабаецца\" могуць не з\"яўляцца ў рэжыме інкогніта</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Непападання паказаны на Shorts
|
||||
|
||||
Абмежаванне: Непападання могуць не з'яўляцца ў рэжыме інкогніта"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Дызлакі схаваныя ў Shorts</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Дызлайкі ў працэнтах</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Неўпадабанні паказаны ў працэнтах</string>
|
||||
@@ -692,6 +793,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_wide_searchbar_summary_off">Шырокая панэль пошуку адключана</string>
|
||||
</patch>
|
||||
<patch id="layout.seekbar.seekbarThumbnailsPatch">
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_title">Включить миниатюры высокого качества</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">Миниатюры ползунка прогресса — высокого качества</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Миниатюры ползунка прогресса — среднего качества</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Миниатюры ползунка прогресса в полноэкранном режиме — высокого качества</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Миниатюры ползунка прогресса в полноэкранном режиме — среднего качества</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Гэта таксама аднавіць мініатюры на трансляцыях у прамым эфіры, якія не маюць мініатюр з магчымасцю перамоткі.
|
||||
|
||||
Мініатюры з магчымасцю перамоткі будуць выкарыстоўваць тую ж якасць, што і бягучае відэа.
|
||||
|
||||
Гэтая функцыя лепш за ўсё працуе з якасцю відэа 720p або ніжэй і пры выкарыстанні вельмі хуткага Інтэрнэт-злучэння."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Аднавіць старыя мініяцюры панэлі пошуку</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Эскізы панэлі пошуку з\"явяцца над панэллю пошуку</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Мініяцюры панэлі пошуку з\"явяцца ў поўнаэкранным рэжыме</string>
|
||||
@@ -718,7 +829,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_time_without_sum_off">Паказана поўная даўжыня відэа</string>
|
||||
<string name="revanced_sb_create_segment_category">Стварэнне новых сегментаў</string>
|
||||
<string name="revanced_sb_enable_create_segment">Паказаць кнопку стварэння новага сегмента</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">Паказана кнопка \"Стварыць новы сегмент\".</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">Паказана кнопка \"Стварыць новы сегмент\"</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_off">Кнопка \"Стварыць новы сегмент\" не паказваецца</string>
|
||||
<string name="revanced_sb_general_adjusting">Адрэгулюйце новы крок сегмента</string>
|
||||
<string name="revanced_sb_general_adjusting_sum">Колькасць мілісекунд, на якую перамяшчаюцца кнопкі рэгулявання часу пры стварэнні новых сегментаў</string>
|
||||
@@ -738,6 +849,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_skipcount_sum_off">Адсочванне колькасці пропускаў не ўключана</string>
|
||||
<string name="revanced_sb_general_min_duration">Мінімальная працягласць сегмента</string>
|
||||
<string name="revanced_sb_general_min_duration_sum">Сегменты, карацейшыя за гэта значэнне (у секундах), не будуць паказвацца або прапускацца</string>
|
||||
<string name="revanced_sb_general_min_duration_invalid">Неверная продолжительность</string>
|
||||
<string name="revanced_sb_general_uuid">Ваш асабісты ідэнтыфікатар карыстальніка</string>
|
||||
<string name="revanced_sb_general_uuid_sum">Гэта павінна быць прыватным. Гэта як пароль, і яго нельга нікому паведамляць. Калі ў кагосьці гэта ёсць, ён можа выдаваць сябе за вас</string>
|
||||
<string name="revanced_sb_general_uuid_invalid">Прыватны ідэнтыфікатар карыстальніка павінен быць не менш за 30 сімвалаў</string>
|
||||
@@ -753,7 +865,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">Налады паспяхова імпартаваны</string>
|
||||
<string name="revanced_sb_settings_import_failed">Не ўдалося імпартаваць: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">Не ўдалося экспартаваць: %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">Вашы налады ўтрымліваюць прыватны ідэнтыфікатар карыстальніка SponsorBlock.\n\nВаш ідэнтыфікатар карыстальніка падобны на пароль, і яго ніколі не трэба раскрываць.\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Вашы налады ўтрымліваюць асабісты ідэнтыфікатар SponsorBlock.
|
||||
|
||||
Ваш ідэнтыфікатар карыстальніка падобны да пароля, і яго ніколі не варта дзяліцца.
|
||||
|
||||
"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Больш не паказваць</string>
|
||||
<string name="revanced_sb_diff_segments">Змяніць паводзіны сегмента</string>
|
||||
<string name="revanced_sb_segments_sponsor">Спонсар</string>
|
||||
@@ -813,9 +929,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">Немагчыма адправіць сегмент: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock часова не працуе</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">Немагчыма адправіць сегмент (статус: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Немагчыма адправіць сегмент.\nАцэнка абмежаваная (занадта шмат ад аднаго карыстальніка або IP)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Немагчыма адправіць сегмент. Абмежаванне па хуткасці (занадта шмат ад аднаго і таго ж карыстальніка або IP-адраса)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">Немагчыма адправіць сегмент: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">Немагчыма адправіць сегмент.\nУжо існуе</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"Немагчыма адправіць сегмент.
|
||||
Ужо існуе"</string>
|
||||
<string name="revanced_sb_submit_succeeded">Сегмент паспяхова адпраўлены</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock часова недаступны (час чакання API скончыўся)</string>
|
||||
@@ -838,7 +955,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">Час пачатку сегмента</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Час заканчэння сегмента</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Ці правільны час?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">Сегмент ад\n\n%1$s\nда\n%2$s\n\n(%3$s)\n\nГатовы адправіць?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"Сэгмэнт знаходзіцца паміж
|
||||
|
||||
%1$s
|
||||
да
|
||||
%2$s
|
||||
|
||||
(%3$s)
|
||||
|
||||
Гатовыя адправіць?"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">Пачынаць трэба раней за канец</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">Спачатку адзначце два месцы на панэлі часу</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">Папярэдні прагляд сегмента і пераканайцеся, што ён праходзіць плаўна</string>
|
||||
@@ -856,6 +981,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_stats_username_changed">Імя карыстальніка паспяхова зменена</string>
|
||||
<string name="revanced_sb_stats_reputation">Ваша рэпутацыя <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>
|
||||
<string name="revanced_sb_stats_saved">Вы выратавалі людзей з <b>%s</b> сегменты</string>
|
||||
<string name="revanced_sb_stats_saved_sum_zero">Націсніце тут, каб убачыць глабальную статыстыку і вядучых удзельнікаў</string>
|
||||
@@ -879,10 +1005,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">Версія праграмы Spoof</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">Версія падробленая</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">Версія не падробленая</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">Версія праграмы будзе падменена на старую версію YouTube.\n\nГэта зменіць знешні выгляд і функцыі праграмы, але могуць узнікнуць невядомыя пабочныя эфекты.\n\nКалі пазней выключыць, рэкамендуецца ачысціць даныя праграмы, каб прадухіліць памылкі карыстацкага інтэрфейсу.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"Версія прыкладання будзе падроблены да старэйшай версіі YouTube.
|
||||
|
||||
Гэта зменіць знешні выгляд і функцыі прыкладання, але могуць узнікнуць невядомыя пабочныя эфекты.
|
||||
|
||||
Калі пазней будзе адключана, рэкамендуецца ачысціць даныя прыкладання, каб пазбегнуць памылак у інтэрфейсе."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Падробка мэтавай версіі праграмы</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 — Восстановить старые значки плеера Shorts</string>
|
||||
<!-- 'RYD' is 'Return YouTube Dislike' -->
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_1">18.33.40 - Аднаўленне RYD на Shorts у рэжыме інкогніта</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_2">18.20.39 - Аднавіць хуткасць шырокага відэа & якаснае меню</string>
|
||||
@@ -892,12 +1023,20 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">Усталяваць стартавую старонку</string>
|
||||
<string name="revanced_change_start_page_entry_default">Па змаўчанні</string>
|
||||
<string name="revanced_change_start_page_entry_browse">Обзор каналов</string>
|
||||
<string name="revanced_change_start_page_entry_explore">Дасьледуйце</string>
|
||||
<string name="revanced_change_start_page_entry_gaming">Игры</string>
|
||||
<string name="revanced_change_start_page_entry_history">Гісторыя</string>
|
||||
<string name="revanced_change_start_page_entry_library">Библиотека</string>
|
||||
<string name="revanced_change_start_page_entry_liked_videos">Спадабаліся відэа</string>
|
||||
<string name="revanced_change_start_page_entry_live">В прямом эфире</string>
|
||||
<string name="revanced_change_start_page_entry_movies">Фильмы</string>
|
||||
<string name="revanced_change_start_page_entry_music">Музыка</string>
|
||||
<string name="revanced_change_start_page_entry_search">Пошук</string>
|
||||
<string name="revanced_change_start_page_entry_sports">Спорт</string>
|
||||
<string name="revanced_change_start_page_entry_subscriptions">Падпіскі</string>
|
||||
<string name="revanced_change_start_page_entry_trending">У трэндзе</string>
|
||||
<string name="revanced_change_start_page_entry_watch_later">Посмотреть позже</string>
|
||||
</patch>
|
||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||
<string name="revanced_disable_resuming_shorts_player_title">Адключыць аднаўленне прайгравання Shorts</string>
|
||||
@@ -905,6 +1044,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Прайгравальнік Shorts адновіцца пры запуску праграмы</string>
|
||||
</patch>
|
||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||
<string name="revanced_shorts_autoplay_title">Автовоспроизведение Shorts</string>
|
||||
<string name="revanced_shorts_autoplay_summary_on">Shorts будут воспроизводиться автоматически</string>
|
||||
<string name="revanced_shorts_autoplay_summary_off">Shorts будут повторяться</string>
|
||||
<string name="revanced_shorts_autoplay_background_title">Автовоспроизведение Shorts в фоновом режиме</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_on">Shorts в фоновом режиме будут воспроизводиться автоматически</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_off">Shorts в фоновом режиме будут повторяться</string>
|
||||
</patch>
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
<string name="revanced_tablet_layout_title">Уключыць макет планшэта</string>
|
||||
@@ -917,12 +1062,38 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">Змяніце стыль мінімізаванага плэера ў праграме</string>
|
||||
<string name="revanced_miniplayer_type_title">Тып мініплэера</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Інваліды</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Арыгінал</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Па змаўчанні</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Минимальный</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Планшэт</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Сучасны 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Сучасны 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Сучасны 3</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Включить закругленные углы</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Углы закруглены</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Углы квадратные</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Включить двойное нажатие и масштабирование с помощьющипка</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Уключана дзеянне «подвойнае націсканне» і «шчыпкі для змены памеру»
|
||||
|
||||
• Подвойнае націсканне, каб павялічыць памер міні-прайгравальніка
|
||||
• Подвойнае націсканне яшчэ раз, каб аднавіць першапачатковы памер"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Двойное нажатие и scalewithpinch отключены</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Включить перетаскивание</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Уключана перацягванне і кіданне
|
||||
|
||||
Міні-прайгравальнік можна перацягнуць у любы куток экрана"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Перетаскивание отключено</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Включить горизонтальный жест перетаскивания</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Уключаны жэст гарызантальнага перацягвання
|
||||
|
||||
Міні-прайгравальнік можна перацягнуць за межы экрана ўлева ці ўправа"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Горизонтальный жест перетаскивания отключен</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">Скрыть кнопку закрытия</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">Кнопка закрытия скрыта</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">Кнопка закрытия отображается</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Схаваць кнопкі разгортвання і закрыцця</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"Кнопкі схаваны
|
||||
|
||||
Працягвайце пальцам, каб разгарнуць або закрыць"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Паказваюцца кнопкі разгарнуць і закрыць</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Схаваць падтэксты</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Падтэксты схаваныя</string>
|
||||
@@ -930,6 +1101,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_title">Схаваць кнопкі пераходу наперад і назад</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Пераход наперад і назад схаваны</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Паказваецца пераход наперад і назад</string>
|
||||
<string name="revanced_miniplayer_width_dip_title">Размер по умолчанию</string>
|
||||
<string name="revanced_miniplayer_width_dip_summary">Начальная размер на экране в пикселях</string>
|
||||
<string name="revanced_miniplayer_width_dip_invalid_toast">Размер пикселя должен быть в пределах %1$s и %2$s</string>
|
||||
<string name="revanced_miniplayer_opacity_title">Непразрыстасць накладання</string>
|
||||
<string name="revanced_miniplayer_opacity_summary">Значэнне непразрыстасці паміж 0-100, дзе 0 - празрысты</string>
|
||||
<string name="revanced_miniplayer_opacity_invalid_toast">Непразрыстасць накладання міні-плэера павінна быць ад 0 да 100</string>
|
||||
@@ -945,11 +1119,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_custom_color_summary_off">Паказаны зыходны колер панэлі пошуку</string>
|
||||
<string name="revanced_seekbar_custom_color_value_title">Карыстальніцкі колер панэлі пошуку</string>
|
||||
<string name="revanced_seekbar_custom_color_value_summary">Колер панэлі пошуку</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">Неверное значение цвета ползунка прогресса</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">Абыход абмежаванняў рэгіёну</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">Выкарыстанне хаста відарысаў yt4.ggpht.com</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">Выкарыстанне арыгінальнага хаста відарысаў\n\nУключэнне гэтай опцыі можа выправіць адсутнічаючыя відарысы, якія заблакіраваныя ў некаторых рэгіёнах</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"Выкарыстоўваецца арыгінальны хост малюнкаў
|
||||
|
||||
Уключэнне гэтага можа выправіць праблему з адсутнасцю малюнкаў, якія заблакаваны ў некаторых рэгіёнах"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -964,7 +1141,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & Арыгінальныя мініяцюры</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow & Усё ж захоплівае</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">Усё ж захоплівае</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow прадастаўляе краўдсорсінгавыя мініяцюры для відэа YouTube. Гэтыя мініяцюры часта больш рэлевантныя, чым тыя, якія прадастаўляе YouTube\n\nКалі яны ўключаны, URL-адрасы відэа будуць адпраўляцца на сервер API, а іншыя даныя не адпраўляюцца. Калі відэа не мае мініяцюр DeArrow, то паказваюцца арыгінальныя або фотаздымкі\n\nНацісніце тут, каб даведацца больш пра DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow забяспечвае мініатюры для відэа YouTube, якія збіраюцца ад карыстальнікаў. Гэтыя мініатюры часта больш актуальныя, чым тыя, якія прадастаўляецца YouTube.
|
||||
|
||||
Калі ўключана, URL відэа будуць адпраўлены на сервер API, і ніякія іншыя даныя не адпраўляюцца. Калі відэа не мае мініатюр DeArrow, то паказваюцца арыгінальныя або здымкі.
|
||||
|
||||
Націсніце тут, каб даведацца больш пра DeArrow"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Паказаць тост, калі API недаступны</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Тост паказваецца, калі DeArrow недаступны</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Тост не паказваецца, калі DeArrow недаступны</string>
|
||||
@@ -993,6 +1174,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Увага</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Ваша гісторыя прагляду не захоўваецца.<br><br>Гэта, хутчэй за ўсё, выклікана DNS-блакіроўшчыкам рэкламы або сеткавым праксі.<br><br>Каб выправіць гэта, дадайце <b>s.youtube.com</b> у белы спіс або адключыце ўсе DNS-блакіроўшчыкі і праксі.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Больш не паказваць</string>
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
@@ -1002,8 +1184,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Памеры падманнага прылады</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">Памеры прылады падробленыя\n\nМожа быць разблакіравана больш высокая якасць відэа, але вы можаце сутыкнуцца з затрымкамі пры прайграванні, пагаршэннем часу аўтаномнай працы і невядомымі пабочнымі эфектамі</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Памеры прылады не падробленыя\n\nУключэнне гэтага можа разблакіраваць больш высокую якасць відэа</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Памеры прылады падроблены
|
||||
|
||||
Магчыма, будуць разблакаваны больш высокія якасці відэа, але вы можаце сутыкнуцца з заіканнем відэа, горшым тэрмінам службы батарэі і невядомымі пабочнымі эфектамі"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"Памеры прылады не падроблены
|
||||
|
||||
Уключэнне гэтага можа разблакаваць больш высокія якасці відэа"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Уключэнне гэтага можа прывесці да прыпынкаў прайгравання відэа, пагаршэння тэрміну службы батарэі і невядомых пабочных эфектаў.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1039,7 +1225,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_video_quality_default_wifi_title">Стандартная якасць відэа ў сетцы Wi-Fi</string>
|
||||
<string name="revanced_video_quality_default_mobile_title">Стандартная якасць відэа ў мабільнай сетцы</string>
|
||||
<string name="revanced_remember_video_quality_mobile">мабільны</string>
|
||||
<string name="revanced_remember_video_quality_wifi">Wi-Fi</string>
|
||||
<string name="revanced_remember_video_quality_toast">Стандартная якасць %1$s зменена на: %2$s</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
@@ -1048,9 +1233,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Кнопка не паказваецца</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Меню пользовательской скорости воспроизведения</string>
|
||||
<string name="revanced_custom_speed_menu_summary_on">Меню пользовательской скорости отображается</string>
|
||||
<string name="revanced_custom_speed_menu_summary_off">Меню пользовательской скорости не отображается</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Карыстальніцкія хуткасці прайгравання</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Карыстальніцкія хуткасці павінны быць менш за %s. Выкарыстанне значэнняў па змаўчанні.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Няправільныя карыстальніцкія хуткасці прайгравання. Выкарыстанне значэнняў па змаўчанні.</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Добавьте или измените пользовательскую скорость воспроизведения</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Нестандартныя хуткасці павінны быць менш за %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Несапраўдныя нестандартныя хуткасці прайгравання</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Аўто</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1071,7 +1260,83 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_slide_to_seek_summary_off">Слайд для пошуку не ўключаны</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_screen_title">Подделывать потоки видео</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Имитируйте потоки видео клиентов, чтобы предотвратить проблемы с воспроизведением</string>
|
||||
<string name="revanced_spoof_video_streams_title">Подделывать потоки видео</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">Потоки видео подделаны</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"Відэаструм не падроблены
|
||||
|
||||
Прайграванне відэа можа не працаваць"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Адключэнне гэтай налады можа выклікаць праблемы з прайграваннем відэа.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">Клиент по умолчанию</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Принудительно AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Видеокодек принудительно установлен в AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Видеокодек определяется автоматически</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Уключэнне гэтага можа палепшыць тэрмін службы батарэі і выправіць заіканне відэа.
|
||||
|
||||
AVC мае максімальную раздзяляльнасць 1080p, аўдыякадэкар Opus недаступны, і відэа будзе выкарыстоўваць больш Інтэрнэт-даных, чым VP9 або AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">Пабочныя эфекты падмены iOS</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Прыватныя дзіцячыя відэа могуць не прайгравацца
|
||||
• Трансляцыі ў прамым эфіры пачынаюцца з пачатку
|
||||
• Відэа заканчваюцца на 1 секунду раней"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Побочные эффекты подмены Android VR</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Дзіцячыя відэа могуць не прайгравацца
|
||||
• Трансляцыі ў прамым эфіры пачынаюцца з пачатку
|
||||
• Відэа заканчваюцца на 1 секунду раней"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">Язык потока аудио по умолчанию</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Язык приложения</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">Арабский</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">Азербайджанский</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">Болгарский</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">Бенгальский</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">Каталонский</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">Чешский</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">Датский</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">Немецкий</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">Греческий</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">Англійская</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">Іспанская</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">Эстонская</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">Фарсі</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">Фінская</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">Французская</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">Гуяраті</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">Хянді</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">Хорватская</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">Венгерская</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">Инданезійская</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">Итальянская</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Японская</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">Казахская</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">Корэйская</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">Літоуская</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">Латышская</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">Македонская</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">Монгольская</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">Маратхі</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">Малайская</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">Брыманская</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">Нідрландский</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">Орія</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">Панджабский</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">Польская</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">Партугальская (Бразілія)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">Партугальская (Партугалія)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Румынская</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Русская</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">Словацкия</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">Словенская</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">Сербская</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">Швецкая</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">Суахілі</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">Тамільская</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">Тэлугу</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">Тайская</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">Турэцкая</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">Украёнская</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">Урду</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">Віетнамская</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">Кітайская</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1081,8 +1346,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">Аўдыёрэклама разблакіравана</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s недаступны. Рэклама можа паказвацца. Паспрабуйце пераключыцца на іншую службу блакіроўкі рэкламы ў наладах.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">Сервер %s вярнуў памылку. Рэклама можа паказвацца. Паспрабуйце пераключыцца на іншую службу блакіроўкі рэкламы ў наладах.</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s недаступны, рэклама можа паказвацца. Паспрабуйце змяніць службу блакавання рэкламы ў наладах.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s выдаў памылку, рэклама можа паказвацца. Паспрабуйце змяніць службу блакавання рэкламы ў наладах.</string>
|
||||
<string name="revanced_block_embedded_ads_title">Блакіраваць убудаваную відэарэкламу</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">Інваліды</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Светлавы проксі</string>
|
||||
@@ -1114,6 +1379,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings">Налады ReVanced</string>
|
||||
<string name="revanced_about_title">Пра нас</string>
|
||||
<string name="revanced_about_summary">Раскажыць “ReVanced”</string>
|
||||
<string name="revanced_ads_screen_title">Аб\"явы</string>
|
||||
<string name="revanced_ads_screen_summary">Налады блакіроўкі рэкламы</string>
|
||||
<string name="revanced_chat_screen_title">Чат</string>
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -45,11 +34,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Искате ли да продължите?</string>
|
||||
<string name="revanced_settings_reset">Нулиране</string>
|
||||
<string name="revanced_settings_reset">Възстанови</string>
|
||||
<string name="revanced_settings_restart_title">Рестартирай и опресни</string>
|
||||
<string name="revanced_settings_restart">Рестартиране</string>
|
||||
<string name="revanced_settings_import">Импортиране</string>
|
||||
<string name="revanced_settings_import_copy">Копиране</string>
|
||||
<string name="revanced_settings_import_copy">Копирай</string>
|
||||
<string name="revanced_settings_import_reset">Настройките на ReVanced бяха нулирани</string>
|
||||
<string name="revanced_settings_import_success">Следните настройки бяха импортирани успешно: %d</string>
|
||||
<string name="revanced_settings_import_failure_parse">Импортирането беше неуспешно: %s</string>
|
||||
@@ -67,15 +56,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">GmsCore не е инсталиран. Инсталирайте го.</string>
|
||||
<string name="gms_core_dialog_title">Нужно е действие</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore не може да работи във фонов режим.\n\nМоля, следвайте ръководството \"Don\'t kill my app“ за вашия телефон и приложете инструкциите на MicroG.\n\nТова е необходимо, за да работи приложението.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore няма разрешение да работи във фонов режим.
|
||||
|
||||
Следвайте ръководството \"Не убивай моето приложение\" за вашия телефон и приложете инструкциите към вашата инсталация на MicroG.
|
||||
|
||||
Това е необходимо, за да работи приложението."</string>
|
||||
<string name="gms_core_dialog_open_website_text">Отвори сайта</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">За да избегнете проблеми е необходимо да изключите оптимизацията на батерията за GmsCore.\n\nНатиснете \"Продолжи\" и изкючере оптимизацията на батерията.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"Оптимизациите на батерията за MicroG GmsCore трябва да бъдат деактивирани, за да се избегнат проблеми.
|
||||
|
||||
Деактивирането на оптимизациите на батерията за MicroG няма да повлияе отрицателно на използването на батерията.
|
||||
|
||||
Докоснете бутона за продължаване и разрешете промени в оптимизацията."</string>
|
||||
<string name="gms_core_dialog_continue_text">Продължи</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_screen_00_about_title">Относно</string>
|
||||
<string name="revanced_settings_screen_00_about_title">За програмата</string>
|
||||
<string name="revanced_settings_screen_01_ads_title">Реклами</string>
|
||||
<string name="revanced_settings_screen_02_alt_thumbnails_title">Алтернативни миниатюри</string>
|
||||
<string name="revanced_settings_screen_03_feed_title">Поток</string>
|
||||
@@ -106,7 +103,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">Покажи системно съобщение при ReVanced грешка</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Системно съобщение ще бъде показано, ако се появи грешка</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Системно съобщение няма да бъде показано, ако се появи грешка</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">Ако изключите системните съобщения, ще скриете всички уведомления за ReVanced грешки. \n\nНяма да бъдете уведомени, ако настъпят неочаквани събития.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Изключването на изскачащи съобщения за грешки крие всички известия за грешки на ReVanced.
|
||||
|
||||
Няма да бъдете уведомени за неочаквани събития."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Деактивирайте подсветката на бутона Харесвам /Абонамент</string>
|
||||
@@ -121,74 +120,79 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_floating_microphone_button_title">Плаващ бутон за микрофона</string>
|
||||
<string name="revanced_hide_floating_microphone_button_summary_on">Бутонът на микрофона е скрит</string>
|
||||
<string name="revanced_hide_floating_microphone_button_summary_off">Показан е бутон на микрофона</string>
|
||||
<string name="revanced_hide_channel_watermark_title">Скриване на водния знак на канала</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Водният знак е скрит</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Водният знак е показан</string>
|
||||
<string name="revanced_hide_channel_watermark_title">Воден знак на канала</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Водният знак на канала е скрит</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Водният знак на канала се показва</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">Хоризонтални секции</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">Хоризонталните секции са скрити:\n• Извънредни новини\n• Продължете да гледате\n• Разгледайте още канали\n• Пазаруване\n• Гледайте отново</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"Рафтовете са скрити, такива като:
|
||||
• Актуални новини
|
||||
• Продължавай да гледаш
|
||||
• Разгледай още канали
|
||||
• Пазаруване
|
||||
• Гледай отново"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Хоризонтални секции се показват</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">Скриване на бутона \'Присъедини се\'</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Бутонът е скрит</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Бутонът е показан</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Бутона Покажи още е скрит</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Скриване на секцията \'За вас\' в страницата на канала</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Рафтът е скрит</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Рафтът е показан</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Секцията \'За Вас\' е скрита</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Секцията \'За Вас\' се показва</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">Скриване на бутона \"Уведоми ме\"</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Бутонът е скрит</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Бутонът е показан</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Бутона \"Уведоми ме\" е скрит</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">Скриване на препоръките \'Други харесват също\'</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Препоръките са скрити</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Препоръките са показани</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Препоръките се показват</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">Скриване на бутона \"Покажи още\"</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">Бутонът е скрит</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Бутонът е показан</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">Бутона Покажи още е скрит</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Бутона Покажи още се показва</string>
|
||||
<string name="revanced_hide_timed_reactions_title">Скриване на времевите реакции</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">Времевите реакции са скрити</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">Времевите реакции са показани</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">Времевите реакции се показват</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_title">Скриване на заглавието на рафта с резултатите от търсенето</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_on">Заглавието на рафта е скрито</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_off">Заглавието е показано</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_on">Заглавката на рафта е скрита</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_off">Заглавката на рафта е показана</string>
|
||||
<string name="revanced_hide_channel_guidelines_title">Скриване на насоките на канала</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_on">Насоките на канала са скрити</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_off">Насоките на канала са показани</string>
|
||||
<string name="revanced_hide_chips_shelf_title">Скриване на рафта за чипове</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">Рафтът за чипове е скрит</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">Рафтът за чипове е показан</string>
|
||||
<string name="revanced_hide_expandable_chip_title">Скриване на разширяемия чип под видеоклиповете</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Разширяващите се чипове са скрити</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Разширяващите се чипове са показани</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_off">Насоките на канала се показват</string>
|
||||
<string name="revanced_hide_chips_shelf_title">Скриване на филмовите рафтове</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">Рафтът \"Chip\" е скрит</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">Рафтовете със снимки се показват</string>
|
||||
<string name="revanced_hide_expandable_chip_title">Скриване на показващи се раздели под видеоклипове</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Падащите менюта са скрити</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Показват се</string>
|
||||
<string name="revanced_hide_community_posts_title">Скриване на публикациите от общността</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">Публикациите от общността са скрити</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">Публикациите от общността са показани</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">Насоките на общността са скрити</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">Последните публикации са показани</string>
|
||||
<string name="revanced_hide_compact_banner_title">Скриване на компактните банери</string>
|
||||
<string name="revanced_hide_compact_banner_summary_on">Компактните банери са скрити</string>
|
||||
<string name="revanced_hide_compact_banner_summary_off">Компактните банери са показани</string>
|
||||
<string name="revanced_hide_compact_banner_summary_on">Информационните панели са скрити</string>
|
||||
<string name="revanced_hide_compact_banner_summary_off">Информационните панели се показват</string>
|
||||
<string name="revanced_hide_movies_section_title">Скриване на раздела за филми</string>
|
||||
<string name="revanced_hide_movies_section_summary_on">Разделът за филми е скрит</string>
|
||||
<string name="revanced_hide_movies_section_summary_on">Секцията с коментари е скрита</string>
|
||||
<string name="revanced_hide_movies_section_summary_off">Разделът за филми е показан</string>
|
||||
<string name="revanced_hide_feed_survey_title">Скриване на анкетите в новинарския поток</string>
|
||||
<string name="revanced_hide_feed_survey_summary_on">Aнкетите в новинарския поток са скрити</string>
|
||||
<string name="revanced_hide_feed_survey_summary_off">Aнкетите в новинарския поток са показани</string>
|
||||
<string name="revanced_hide_feed_survey_title">Скриване на анкети в емисиите</string>
|
||||
<string name="revanced_hide_feed_survey_summary_on">Анкетите за емисии са скрити</string>
|
||||
<string name="revanced_hide_feed_survey_summary_off">Анкетите за емисии се показват</string>
|
||||
<string name="revanced_hide_community_guidelines_title">Скриване на насоките на общността</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_on">Насоките на общността са скрити</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_off">Насоките на общността са показани</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_off">Скриване на насоките за общността на абонатите</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Скриване на насоките за общността на абонатите</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Насоките за общността на абонатите са скрити</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Насоките за общността на абонатите са показани</string>
|
||||
<string name="revanced_hide_channel_member_shelf_title">Скриване на рафта на канала</string>
|
||||
<string name="revanced_hide_channel_member_shelf_summary_on">Рафтът на канала е скрит</string>
|
||||
<string name="revanced_hide_channel_member_shelf_summary_off">Рафтът на канала е показан</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Насоките за общността са скрити</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Насоките за общността са показани</string>
|
||||
<string name="revanced_hide_channel_member_shelf_title">Скриване на секцията с членуващи</string>
|
||||
<string name="revanced_hide_channel_member_shelf_summary_on">Рафта с членуващи е скрит</string>
|
||||
<string name="revanced_hide_channel_member_shelf_summary_off">Рафта с членуващи се показва</string>
|
||||
<string name="revanced_hide_emergency_box_title">Скриване аварийните кутии</string>
|
||||
<string name="revanced_hide_emergency_box_summary_on">Аварийните кутии са скрити</string>
|
||||
<string name="revanced_hide_emergency_box_summary_off">Аварийните кутии са показани</string>
|
||||
<string name="revanced_hide_emergency_box_summary_on">Спешни кутии са скрити</string>
|
||||
<string name="revanced_hide_emergency_box_summary_off">Спешни кутии са показани</string>
|
||||
<string name="revanced_hide_info_panels_title">Скриване на информационните панели</string>
|
||||
<string name="revanced_hide_info_panels_summary_on">Информационните панели са скрити</string>
|
||||
<string name="revanced_hide_info_panels_summary_off">Информационните панели са показани</string>
|
||||
@@ -201,24 +205,24 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_playables_title">Игри в YouTube</string>
|
||||
<string name="revanced_hide_playables_summary_on">Игри в YouTube са скрити</string>
|
||||
<string name="revanced_hide_playables_summary_off">Игрите в YouTube се показват</string>
|
||||
<string name="revanced_hide_quick_actions_title">Скриване на бързите действия в режим на цял екран</string>
|
||||
<string name="revanced_hide_quick_actions_summary_on">Бързите действия в режим на цял екран са скрити</string>
|
||||
<string name="revanced_hide_quick_actions_summary_off">Бързите действия в режим на цял екран са показани</string>
|
||||
<string name="revanced_hide_quick_actions_title">Скриване на меню с Бързи действия</string>
|
||||
<string name="revanced_hide_quick_actions_summary_on">Бързи действия са скрити</string>
|
||||
<string name="revanced_hide_quick_actions_summary_off">Бързи действия се показват</string>
|
||||
<string name="revanced_hide_related_videos_title">Скриване на свързаните видеоклипове в бързите действия</string>
|
||||
<string name="revanced_hide_related_videos_summary_on">Свързаните видеоклипове в бързите действия са скирти</string>
|
||||
<string name="revanced_hide_related_videos_summary_off">Свързаните видеоклипове в бързите действия са показани</string>
|
||||
<string name="revanced_hide_image_shelf_title">Скриване на рафта с изображения в резултатите от търсенето</string>
|
||||
<string name="revanced_hide_image_shelf_summary_on">Рафтът с изображения в резултатите от търсенето е скрит</string>
|
||||
<string name="revanced_hide_image_shelf_summary_off">Рафтът с изображения в резултатите от търсенето е показан</string>
|
||||
<string name="revanced_hide_related_videos_summary_on">Сродни видео са скрити</string>
|
||||
<string name="revanced_hide_related_videos_summary_off">Сродни видео са показани</string>
|
||||
<string name="revanced_hide_image_shelf_title">Скриване на рафтовете със снимки</string>
|
||||
<string name="revanced_hide_image_shelf_summary_on">Рафтовете със снимки са скрити</string>
|
||||
<string name="revanced_hide_image_shelf_summary_off">Рафтовете със снимки се показват</string>
|
||||
<string name="revanced_hide_latest_posts_ads_title">Скриване на последните публикации</string>
|
||||
<string name="revanced_hide_latest_posts_ads_summary_on">Последните публикации са скрити</string>
|
||||
<string name="revanced_hide_latest_posts_ads_summary_on">Най-новите публикации са скрити</string>
|
||||
<string name="revanced_hide_latest_posts_ads_summary_off">Последните публикации са показани</string>
|
||||
<string name="revanced_hide_mix_playlists_title">Скриване на разбърканите плейлисти</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_on">Разбърканите плейлисти са скрити</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_off">Разбърканите плейлисти са показани</string>
|
||||
<string name="revanced_hide_mix_playlists_title">Скриване на микс плейлист</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_on">Плейлист микса е скрит</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_off">Плейлист микса се показва</string>
|
||||
<string name="revanced_hide_artist_cards_title">Скриване на картите на артистите</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">Картите на артистите са скрити</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">Картите на артистите са показани</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">Картите на изпълнителите са скрити</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">Показват се карти на артисти</string>
|
||||
<string name="revanced_hide_attributes_section_title">Скриване на секцията с атрибути</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">„Популярни места“, „Игри“ и „Музика“ под описанието са скрити</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">„Популярни места“, „Игри“ и „Музика“ под описанието се показват</string>
|
||||
@@ -252,6 +256,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Показано в сродни видеоклипове</string>
|
||||
<string name="revanced_comments_screen_title">Коментари</string>
|
||||
<string name="revanced_comments_screen_summary">Скриване или показване на секцията за коментари</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">\'Резюме на чата\' е скрито</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">\'Резюме на чата\' е показано</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Скриване на „Коментари, направени от членове“</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">„Коментари от членове“ са скрити</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">„Коментари от членове“ се показват</string>
|
||||
@@ -274,7 +280,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Doodles в лентата за търсене са скрити</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Doodles в лентата за търсене се показват</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">YouTube Doodles се появяват няколко дни в годината.\n\nАко Doodle в момента се показва във вашия регион и тази опция за скриване е активирана, филтърната лента под лентата за търсене също ще бъде скрита.</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"Doodles в YouTube се показват няколко дни в годината.
|
||||
|
||||
Ако в момента се показва Doodle във вашия регион и тази настройка за скриване е включена, тогава лентата за филтриране под лентата за търсене също ще бъде скрита."</string>
|
||||
<string name="revanced_custom_filter_screen_title">Потребителски филтър</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Скриване на компоненти с помощта на потребителски филтри</string>
|
||||
<string name="revanced_custom_filter_title">Активиране на потребителските филтри</string>
|
||||
@@ -286,21 +294,30 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Невалиден потребителски филтър: %s</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Скриване на съдържанието с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Скриване на видеоклипове в резултатите от търсенуя и в новинарския поток с помощта на филтри с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Скриване на видеоклипове на началната страница с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_on">Видеоклиповете на началния екран са филтрирани с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_off">Видеоклиповете на началния екран не са филтрирани с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Скриване на видеоклипове в началната страница с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_on">Видеоклиповете в раздела Начало се филтрират с помощта на ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_off">Видеоклиповете в раздела Начало не се филтрират по ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_title">Скриване на видеоклипове от абонаменти с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_on">Видеоклиповете в раздела за абонаменти са са филтрирани с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_off">Видеоклиповете в раздела за абонаменти са са филтрирани с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_off">Видеоклиповете в емисията за абонаменти не се филтрират</string>
|
||||
<string name="revanced_hide_keyword_content_search_title">Скриване на резултати от търсения с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_on">Резултатите от търсения са филтрирани с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_off">Резултатите от търсения не са филтрирани с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_on">Резултатите от търсенето се филтрират с помощта на ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_off">Резултатите от търсенето не се филтрират по ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_title">Ключови думи, които да бъдат скрити</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">Ключови думи и фрази за скриване, разделени с нови редове\n\nКлючовите думи могат да бъдат имена на канали или всеки текст, показан в заглавията на видеоклиповете\n\nДумите с главни букви в средата трябва да бъдат въведени с малки букви (напр.: iPhone, TikTok, LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"Ключови думи и фрази за скриване, разделени от нов ред
|
||||
|
||||
Ключовите думи могат да бъдат имена на канали или всякакъв текст, показан в заглавията на видеоклиповете
|
||||
|
||||
Думите с главни букви в средата трябва да бъдат въведени с главни букви (напр.: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">За филтриране с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">Начало/Абонамент/Резултатите от търсенето се филтрират, за да се скрие съдържание, което съответства на ключови фрази\n\nОграничения\n• Shorts не могат да бъдат скрити от името на канала\n• Някои компоненти на потребителския интерфейс може да не са скрити\n• Търсенето по ключова дума може да не покаже резултати</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"Резултатите от търсенето в Начало/Абонамент/Търсене се филтрират, за да се скрие съдържанието, което съвпада с фрази с ключови думи
|
||||
|
||||
Ограничения
|
||||
• Шорти не могат да бъдат скрити по име на канала
|
||||
• Някои UI компоненти може да не са скрити
|
||||
• Търсенето на ключова дума може да не покаже резултати"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Съвпадение на всички думи</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">Ограждането на ключова дума/фраза с двойни кавички ще предотврати частични съвпадения на заглавия на видеоклипове и имена на канали<br><br>Например,<br><b>\"ai\"</b> ще скрие видеоклипа: <b>How does AI work?</b><br>но няма да скрие: <b>What does fair use mean?</b></string>
|
||||
@@ -314,13 +331,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="ad.general.hideAdsResourcePatch">
|
||||
<string name="revanced_hide_general_ads_title">Скриване на общите реклами</string>
|
||||
<string name="revanced_hide_general_ads_summary_on">Общите реклами са скрити</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">Общите реклами са показани</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">Общите реклами се показват</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Скриване на рекламите в режим на цял екран</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Рекламите на цял екран са скрити\n\in Тази функция е достъпна само за по-стари устройства</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Всички реклами на цял екран са скрити
|
||||
|
||||
Тази функция е налична само за по-стари устройства"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Рекламите в режим на цял екран са показани</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">Скриване на рекламни бутони</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">Рекламите като бутон са скрити</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_off">Рекламите като бутон са показани</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">Бутонираните реклами са скрити</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_off">Бутонираните реклами са показани</string>
|
||||
<string name="revanced_hide_paid_promotion_label_title">Скриване на платените промоции</string>
|
||||
<string name="revanced_hide_paid_promotion_label_summary_on">Промоционалните етикети са скрити</string>
|
||||
<string name="revanced_hide_paid_promotion_label_summary_off">Промоционалните етикети се показват</string>
|
||||
@@ -333,35 +352,35 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_store_shelf_title">Скриване на рафта за пазаруване</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">Рафта за пазаруване е скрит</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">Рафта за пазаруване се показва</string>
|
||||
<string name="revanced_hide_shopping_links_title">Скриване на връзките за пазаруване в описанието на видеоклипа</string>
|
||||
<string name="revanced_hide_shopping_links_title">Скриване на връзки за пазаруване</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Връзките за пазаруване са скрити</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Връзките за пазаруване са показани</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Връзките за пазаруване се показват</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Скрийте бутона „Посетете магазина“ на страниците на каналите</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Бутонът е скрит</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Бутонът е показан</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Бутона Покажи още е скрит</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
||||
<string name="revanced_hide_web_search_results_title">Скриване на резултатите от уеб търсенето</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">Резултатите от уеб търсенето са скрити</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">Резултатите от уеб търсенето са показани</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">Резултатите от уеб търсенето са показани.</string>
|
||||
<string name="revanced_hide_merchandise_banners_title">Скриване на банерите за стоки</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_on">Банерите за стоки са скрити</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_off">Банерите за стоки са показани</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_on">Рекламните банери за стоки са скрити</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_off">Банерите за стоки се показват</string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Скр. на реклами на цял екран, за по-стари устройства</string>
|
||||
</patch>
|
||||
<patch id="ad.getpremium.hideGetPremiumPatch">
|
||||
<string name="revanced_hide_get_premium_title">Скриване на YouTube Premium промоции</string>
|
||||
<string name="revanced_hide_get_premium_summary_on">YouTube Premium промоциите под видео плейъра са скрити</string>
|
||||
<string name="revanced_hide_get_premium_summary_off">YouTube Premium промоциите под видео плейъра са показани</string>
|
||||
<string name="revanced_hide_get_premium_title">Скриване на YouTube Premium промоциите</string>
|
||||
<string name="revanced_hide_get_premium_summary_on">YouTube Premium промоциите са скрити.</string>
|
||||
<string name="revanced_hide_get_premium_summary_off">YouTube Premium промоциите се показват.</string>
|
||||
</patch>
|
||||
<patch id="ad.video.videoAdsPatch">
|
||||
<string name="revanced_hide_video_ads_title">Скриване на видео рекламите</string>
|
||||
<string name="revanced_hide_video_ads_summary_on">Видео рекламите са скрити</string>
|
||||
<string name="revanced_hide_video_ads_summary_off">Видео рекламите са показани</string>
|
||||
<string name="revanced_hide_video_ads_summary_on">Видео рекламите са скрити.</string>
|
||||
<string name="revanced_hide_video_ads_summary_off">Видео рекламите се показват.</string>
|
||||
</patch>
|
||||
<patch id="interaction.copyvideourl.copyVideoUrlResourcePatch">
|
||||
<string name="revanced_share_copy_url_success">URL адресът е копиран в клипборда</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL адресът с времеви отпечатък е копиран</string>
|
||||
<string name="revanced_share_copy_url_success">Връзката е копирана в клипборда.</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL адрес с отметка за време, копиран в клипборда.</string>
|
||||
<string name="revanced_copy_video_url_title">Показване на бутона за копиране на URL адреса на видеоклипа</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Показан е бутон. Докоснете, за да копирате URL на видеото. Докоснете и задръжте, за да копирате URL адреса на видеоклипа с клеймо за време</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Бутонът не е показан</string>
|
||||
@@ -370,7 +389,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Бутонът не е показан</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Скриване на прозореца за възрастово ограничение</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Прозорец за възрастово ограничение</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_on">Диалоговият прозорец ще бъде премахнат</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Диалоговият прозорец ще бъде показан</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Тази функция не заобикаля възрастовото ограничение. Тя просто приема възрастовата граница автоматично.</string>
|
||||
@@ -391,27 +410,27 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="interaction.seekbar.disablePreciseSeekingGesturePatch">
|
||||
<string name="revanced_disable_precise_seeking_gesture_title">Деактивиране на жеста за точно търсене</string>
|
||||
<string name="revanced_disable_precise_seeking_gesture_summary_on">Жестът е деактивиран</string>
|
||||
<string name="revanced_disable_precise_seeking_gesture_summary_off">Жестът е активиран</string>
|
||||
<string name="revanced_disable_precise_seeking_gesture_summary_on">Жест отключен</string>
|
||||
<string name="revanced_disable_precise_seeking_gesture_summary_off">Жест включен</string>
|
||||
</patch>
|
||||
<patch id="interaction.seekbar.enableSeekbarTappingPatch">
|
||||
<string name="revanced_seekbar_tapping_title">Активиране на докосването на лентата за време</string>
|
||||
<string name="revanced_seekbar_tapping_summary_on">Докосването на лентата за време е включено</string>
|
||||
<string name="revanced_seekbar_tapping_summary_off">Докосването на лентата за време е изключено</string>
|
||||
<string name="revanced_seekbar_tapping_summary_on">Функцията „Докосване до лентата за търсене“ е активирана</string>
|
||||
<string name="revanced_seekbar_tapping_summary_off">Функцията „Докосване до лентата за търсене“ е деактивирана</string>
|
||||
</patch>
|
||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||
<string name="revanced_swipe_brightness_title">Задаване на яркост чрез плъзгане</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">Задаването на яркост чрез плъзгане е включено</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">Задаването на яркост чрез плъзгане е изключено</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">Опцията за превъртане с плъзгане за промяна на яркостта е активирана</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">Опцията за превъртане с плъзгане за промяна на яркостта е деактивирана</string>
|
||||
<string name="revanced_swipe_volume_title">Настройване на звука чрез плъзгане</string>
|
||||
<string name="revanced_swipe_volume_summary_on">Настройването на звука чрез плъзгане е включено</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Настройването на звука чрез плъзгане е изключено</string>
|
||||
<string name="revanced_swipe_volume_summary_on">Обемът чрез плъзване е активен</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Обемът чрез плъзване е деактивиран</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">Активиране на жеста натискане за преместване</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">Натискането при плъзгане е включено</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Натискането при плъзгане е изключено</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">Плъзгането чрез натискане е активирано</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Плъзгането чрез натискане е деактивирано</string>
|
||||
<string name="revanced_swipe_haptic_feedback_title">Активиране на хептичната обратна връзка</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_on">Хептичната обратна връзка е активирана</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_off">Хептичната обратна връзка е деактивирана</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_on">Тактилната обратна връзка е активирана</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_off">Тактилната обратна връзка е деактивирана</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_title">Запазване и възстановяване на яркостта</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_on">Запазване и възстаовяване яркостта при включване или изключване на цял екран</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_off">Не се запазва или възстаовява яркостта при включване или изключване на цял екран</string>
|
||||
@@ -419,12 +438,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Плъзгането надолу до най-ниската стойност на жеста за яркост, за да се активира автоматичната яркост</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Плъзгането надолу до най-ниската стойност на жеста за яркост, без дасе активира автоматичната яркост</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Авто</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Задръжка на плъзгащата контрола</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">Време за което плъзгащата контрола е видима</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Задръжка на плъзгащата контрола за показване</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">Време за което плъзгащата контрола е видима.</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">Размер на текста при плъзгане</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">Размера на текста на плъзгащите контроли</string>
|
||||
<string name="revanced_swipe_overlay_background_alpha_title">Видимост на фона на плъзгащите контроли</string>
|
||||
<string name="revanced_swipe_overlay_background_alpha_summary">Видимостта на фона на плъзгащите контроли</string>
|
||||
<string name="revanced_swipe_overlay_background_alpha_summary">Видимостта на фона на плъзгащите контроли.</string>
|
||||
<string name="revanced_swipe_threshold_title">Праг на величината на плъзгане</string>
|
||||
<string name="revanced_swipe_threshold_summary">Праг преди да се осъществи плъзгането</string>
|
||||
</patch>
|
||||
@@ -490,7 +509,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Бутона за абонаменти се показва</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Заменете бутона „Създаване“ с бутона „Известия“</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">Бутонът за създаване се заменя с бутона за известия\n\nЗабележка: Активирането на тази опция също скрива видеореклами</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Бутонът за създаване е сменен с бутона Известия
|
||||
|
||||
Забележка: Активирането на това също принудително скрива видео рекламите"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Бутоните \"Създаване\" и \"Известия\" не са разменени</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Имена на бутоните на лентата за навигация</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Етикетите са скрити</string>
|
||||
@@ -676,8 +697,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_info_panel_summary_on">Информационните панели са скрити</string>
|
||||
<string name="revanced_hide_shorts_info_panel_summary_off">Информационните панели се показват</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_title">Скриване на лентата на канала</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_summary_on">Лентата на канала е скрита</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_summary_off">Лентата на канала е показана</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_summary_on">Лентата на канала е скрита.</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_summary_off">Лентата на канала е показана.</string>
|
||||
<string name="revanced_hide_shorts_video_title_title">Заглавие на видеото</string>
|
||||
<string name="revanced_hide_shorts_video_title_summary_on">Заглавието е скрито</string>
|
||||
<string name="revanced_hide_shorts_video_title_summary_off">Заглавието се показва</string>
|
||||
@@ -709,6 +730,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">Изскачащите панели на плейъра са скрити</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">Изскачащите панели на плейъра се показват</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">Отваряне на видеоклипове в портретен режим на цял екран</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Видеоклиповете се отварят на цял екран</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Видеоклиповете Не се отварят на цял екран</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">Прозрачност на настройките в Плеара</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">Стойност на прозрачност между 0-100, където 0 е прозрачно</string>
|
||||
@@ -726,7 +752,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">Нехаресванията не се показват</string>
|
||||
<string name="revanced_ryd_shorts_title">Пок. нехаресвания в кратките клипове</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Нехаресванията се показват в кратките клипове</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">Нехаресвания, показани в Shorts\n\nОграничение: Нехаресванията може да не се показват в режим „инкогнито“</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Нехаресванията се показват на шорти
|
||||
|
||||
Ограничение: Нехаресванията може да не се появят в режим инкогнито"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Нехаресванията са скрити в кратките клипове</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Нехаресвания като процент</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Нехаресванията се показват като процент</string>
|
||||
@@ -738,7 +766,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_toast_on_connection_error_title">Показване на известие, ако API не е наличен</string>
|
||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Показва известие, ако Return YouTube Dislike не е наличен</string>
|
||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Не се показва известие, ако ReturnYouTube Dislike не е наличен</string>
|
||||
<string name="revanced_ryd_about">Относно</string>
|
||||
<string name="revanced_ryd_about">За програмата</string>
|
||||
<string name="revanced_ryd_attribution_summary">Данните за нехаресване са от Return YouTube Dislike API. Докоснете за да научите повече</string>
|
||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||
<string name="revanced_ryd_statistics_category_title">Статистика Return YouTube Dislike API на това устройство</string>
|
||||
@@ -769,7 +797,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Миниатюри с средно качество в лентата на възпроизвеждане</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Миниатюри с високо качество в лентата на прогреса на цял екран</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Миниатюри със средно качество в лентата на прогреса на цял екран</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">Това също така ще възстанови миниатюри на потоци на живо, които нямат миниатюри на лентата на прогреса.\n\nМиниизображенията на лентата на прогреса ще използват същото качество като текущия видеоклип.\n\nТази функция работи най-добре с качество на видеото 720p или по-ниско и когато използвате много бързо интернет връзка.</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Това също ще възстанови миниатюрите на предавания на живо, които нямат миниатюри на плъзгача.
|
||||
|
||||
Миниатюрите на плъзгача ще използват същото качество като текущото видео.
|
||||
|
||||
Тази функция работи най-добре с видео качество от 720p или по-ниско и при използване на много бърза интернет връзка."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Стари миниатюри на времевата линия</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Над лентата за възпроизвеждане се появяват миниатюри</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Миниатюрите се показват в режим на цял екран</string>
|
||||
@@ -777,7 +809,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
|
||||
<string name="revanced_sb_enable_sb">Включване на SponsorBlock</string>
|
||||
<string name="revanced_sb_enable_sb_sum">SponsorBlock е система за прескачане на досадни части и реклами от видеоклиповете в YouTube</string>
|
||||
<string name="revanced_sb_appearance_category">Облик</string>
|
||||
<string name="revanced_sb_appearance_category">Външен вид</string>
|
||||
<string name="revanced_sb_enable_voting">Бутона за гласуване</string>
|
||||
<string name="revanced_sb_enable_voting_sum_on">Бутона за гласуване на част се показва</string>
|
||||
<string name="revanced_sb_enable_voting_sum_off">Бутона за гласуване на част е скрит</string>
|
||||
@@ -801,13 +833,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_adjusting">Настройване стъпка на новата част</string>
|
||||
<string name="revanced_sb_general_adjusting_sum">Милисекундите с който се преместват бутоните за настройка при създаване на част</string>
|
||||
<string name="revanced_sb_general_adjusting_invalid">Стойността трябва да е положително число</string>
|
||||
<string name="revanced_sb_guidelines_preference_title">Преглед на ръководните линии</string>
|
||||
<string name="revanced_sb_guidelines_preference_title">Вижте указанията</string>
|
||||
<string name="revanced_sb_guidelines_preference_sum">Указанията съдържат правила и съвети за създаване на нови части</string>
|
||||
<string name="revanced_sb_guidelines_popup_title">Следвайте указанията</string>
|
||||
<string name="revanced_sb_guidelines_popup_content">Прочетете указанията на SponsorBlock преди да създадете нови части</string>
|
||||
<string name="revanced_sb_guidelines_popup_already_read">Вече прочетох</string>
|
||||
<string name="revanced_sb_guidelines_popup_already_read">Вече ги прочетох</string>
|
||||
<string name="revanced_sb_guidelines_popup_open">Покажи ми</string>
|
||||
<string name="revanced_sb_general">Общи</string>
|
||||
<string name="revanced_sb_general">Основен</string>
|
||||
<string name="revanced_sb_toast_on_connection_error_title">Показване на известие, ако API не е наличен</string>
|
||||
<string name="revanced_sb_toast_on_connection_error_summary_on">Показва се известие, ако SponsorBlock не е наличен</string>
|
||||
<string name="revanced_sb_toast_on_connection_error_summary_off">Показва се известие, ако SponsorBlock не е наличен</string>
|
||||
@@ -818,24 +850,27 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_min_duration_sum">Части, по-кратки от тази стойност (в секунди) няма да бъдат пропускани или показвани</string>
|
||||
<string name="revanced_sb_general_min_duration_invalid">Невалидна времетраене</string>
|
||||
<string name="revanced_sb_general_uuid">Вашият уникален потребителски id</string>
|
||||
<string name="revanced_sb_general_uuid_sum">Това трябва да се държи тайно. То е като парола и не трябва да се споделя с никого. Ако някой го има, то той може да се представи вместо вас</string>
|
||||
<string name="revanced_sb_general_uuid_sum">Това трябва да се пази тайно. То е като парола и не трябва да се споделя с никого. Ако някой го притежава, той може да се представи вместо вас.</string>
|
||||
<string name="revanced_sb_general_uuid_invalid">Личният Id трябва да е с дължина поне 30 знака</string>
|
||||
<string name="revanced_sb_general_api_url">Промяна URL на API</string>
|
||||
<string name="revanced_sb_general_api_url_sum">Адресът, който SponsorBlock използва за свързване към сървъра</string>
|
||||
<string name="revanced_sb_api_url_reset">Нулиране URL адреса на API</string>
|
||||
<string name="revanced_sb_api_url_reset">Нулиране URL адреса, на API.</string>
|
||||
<string name="revanced_sb_api_url_invalid">URL адресът е невалиден</string>
|
||||
<string name="revanced_sb_api_url_changed">URL адресът на API е променен</string>
|
||||
<string name="revanced_sb_settings_ie">Настройки за внасяне и изнасяне</string>
|
||||
<string name="revanced_sb_settings_copy">Копиране</string>
|
||||
<string name="revanced_sb_api_url_changed">URL API е променен.</string>
|
||||
<string name="revanced_sb_settings_ie">Импортиране / Експортиране на настройките</string>
|
||||
<string name="revanced_sb_settings_copy">Копирай</string>
|
||||
<string name="revanced_sb_settings_ie_sum">Вашата JSON конфигурация на SponsorBlock може да бъде импортирана/експортирана в ReVanced и други платформи на SponsorBlock</string>
|
||||
<string name="revanced_sb_settings_ie_sum_warning">Вашата SponsorBlock JSON конфигурация която може да се импортира/експортира до ReVanced или други платформи ползващи SponsorBlock. Това включва вашия потребителски id. Споделяйте това разумно</string>
|
||||
<string name="revanced_sb_settings_import_successful">Настройките са успешно въстановени</string>
|
||||
<string name="revanced_sb_settings_import_failed">Неуспешно импортиране: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">Неуспешно експортиране на %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">Вашите настройки на SponsorBlock съдържат лично Id.\n\nВашето Id е като парола и не трябва да се споделя с никого\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Вашите настройки съдържат поверителен идентификатор на потребител на SponsorBlock.
|
||||
|
||||
Идентификаторът на потребителя е като парола и никога не трябва да се споделя.
|
||||
"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Не показвай отново</string>
|
||||
<string name="revanced_sb_diff_segments">Промени поведението на сигмента</string>
|
||||
<string name="revanced_sb_segments_sponsor">Спонсор</string>
|
||||
<string name="revanced_sb_segments_sponsor">Спонсори</string>
|
||||
<string name="revanced_sb_segments_sponsor_sum">Платена промоция, платени препоръки и директни реклами. Не за самореклама или безплатни препоръки за каузи/създатели/уебсайтове/продукти, които се харесват на автора</string>
|
||||
<string name="revanced_sb_segments_selfpromo">Неплатена/Самореклама</string>
|
||||
<string name="revanced_sb_segments_selfpromo_sum">Подобно на „Спонсор“, с изключение на неплатено или самореклама. Включва раздели за стоки, дарения или информация за това с кого са си сътрудничили</string>
|
||||
@@ -884,17 +919,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_skipped_nomusic">Пропусната част без музика</string>
|
||||
<string name="revanced_sb_skipped_unsubmitted">Пропуснат неизпратен сегмент</string>
|
||||
<string name="revanced_sb_skipped_multiple_segments">Пропуснати множество части</string>
|
||||
<string name="revanced_sb_skip_automatically">Да се прескача от само себе си</string>
|
||||
<string name="revanced_sb_skip_automatically">Автоматично пропускане</string>
|
||||
<string name="revanced_sb_skip_automatically_once">Авт. пропускане веднъж</string>
|
||||
<string name="revanced_sb_skip_showbutton">Показвай бутон за пропускане</string>
|
||||
<string name="revanced_sb_skip_seekbaronly">Показв. в лентата за време</string>
|
||||
<string name="revanced_sb_skip_ignore">Изключване</string>
|
||||
<string name="revanced_sb_skip_ignore">Деактивиране</string>
|
||||
<string name="revanced_sb_submit_failed_invalid">Не може да се изпрати сегмент: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock временно не работи</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">Не могат да се изпратят сигменти: (статус:%1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Не може да се изпрати частта.\nБроят е ограничен (Твърде много от един и същ потребител, IP)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Неуспешно изпращане на сегмент. Ограничена скорост (твърде много от един и същ потребител или IP)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">Не може да се изпрати частта: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">Не може да се изпрати частта.\nВече съществува</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"Не може да се изпрати сегментът.
|
||||
Вече съществува"</string>
|
||||
<string name="revanced_sb_submit_succeeded">Частта е изпратена успешно</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock временно не е наличен (API timed out)</string>
|
||||
@@ -917,7 +953,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">Частта започва от</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Частта свършва до</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Времената точни ли са?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">Сегментът продължава от\n\n%1$s\nдо\n%2$s\n\n(%3$s)\n\nГотов ли е за изпращане?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"Сегментът е от
|
||||
|
||||
\"%1$s\"
|
||||
до
|
||||
\"%2$s\"
|
||||
|
||||
(\"%3$s\")
|
||||
|
||||
Готови ли сте да го изпратите?"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">Началото трябва да бъде преди края</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">Първо маркирайте две места в лентата за времето</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">Преглед и проверка на частта за нормално пропускане</string>
|
||||
@@ -928,11 +972,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||
<string name="revanced_sb_stats_connection_failure">Статистиката е враменно недостъпна (API не работи)</string>
|
||||
<string name="revanced_sb_stats_loading">Зареждане...</string>
|
||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock е изключено</string>
|
||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock е деактивиран.</string>
|
||||
<string name="revanced_sb_stats_username">Вашето потреб. име: <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_username_changed">Потребителското име е успешно променено.</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>
|
||||
@@ -951,15 +995,19 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_color_reset">Възстанови цвета</string>
|
||||
<string name="revanced_sb_color_invalid">Невалидна стойност за цвета</string>
|
||||
<string name="revanced_sb_reset_color">Възстановяване на цвят</string>
|
||||
<string name="revanced_sb_reset">Нулиране</string>
|
||||
<string name="revanced_sb_about">Относно</string>
|
||||
<string name="revanced_sb_reset">Възстанови</string>
|
||||
<string name="revanced_sb_about">За програмата</string>
|
||||
<string name="revanced_sb_about_api_sum">Данните са предоставени от SponsorBlock API. Докоснете тук за повече информация и изтеглияния</string>
|
||||
</patch>
|
||||
<patch id="layout.spoofappversion.spoofAppVersionPatch">
|
||||
<string name="revanced_spoof_app_version_title">Подлъгване за версията на приложението</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">Подправена версия</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">Не подправена версия</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">Версията на приложението YouTube ще бъде променена на по-стара.\n\nТова ще промени външния вид и функциите на приложението.\n\nно ако по-късно се деактивира, се препоръчва да изчистите данните на приложението, за да избегнете грешки в потребителския интерфейс.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"Версията на приложението ще бъде фалшифицирана по-стара версия на YouTube.
|
||||
|
||||
Това ще промени външния вид и функциите на приложението, но може да възникнат неизвестни странични ефекти.
|
||||
|
||||
Ако по-късно бъде изключено, препоръчително е да изчистите данните на приложението, за да предотвратите грешки в потребителския интерфейс."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Подлъгване за версията на</string>
|
||||
@@ -1012,7 +1060,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">Променете стила на минимизирания екран за възпроизвеждане</string>
|
||||
<string name="revanced_miniplayer_type_title">Минимизиран тип екран за гледане</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Деактивирано</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Оригинал</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">По подразбиране</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Минимално</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Таблет</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Модерен 1</string>
|
||||
@@ -1022,19 +1070,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Ъглите са заоблени</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Ъглите са нормални</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Активирайте двойното докосване и щипване за преоразмеряване</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">Действието с двойно докосване и щипване за преоразмеряване е активирано\n\n• Докоснете двукратно, за да увеличите размера на миниплейъра\n• Докоснете два пъти отново, за да възстановите оригиналния размер</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Активирано е двойно докосване и щипка за преоразмеряване
|
||||
|
||||
• Двойно докосване за увеличаване на размера на мини плейъра
|
||||
• Двойно докосване отново, за да възстановите оригиналния размер"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Двойно докосване и щипване за преоразмеряване е деактивирано</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Разрешете плъзгане и местене</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">Плъзгане и местенето е активирано\n\nМиниплейърът може да се плъзга до всеки ъгъл на екрана</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Включено е плъзгане и пускане
|
||||
|
||||
Мини плейърът може да бъде плъзган до всеки ъгъл на екрана"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Плъзгането и преместването е деактивирано</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Активиране на хоризонтално плъзгане</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">Жестът за хоризонтално плъзгане е активиран\n\nМиниплейърът може да се плъзга извън екрана наляво или надясно</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Активиран е хоризонтален жест за плъзгане
|
||||
|
||||
Мини плейърът може да бъде плъзган извън екрана наляво или надясно"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Жестът за хоризонтално плъзгане е деактивиран</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">Скриване на бутона за затваряне</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">Бутонът за затваряне е скрит</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">Показан е бутон за затваряне</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Бутони за разширяване и свиване на екрана</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">Бутоните са скрити\n\nПлъзнете за разгъване или затваряне</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"Бутоните са скрити
|
||||
|
||||
Плъзнете, за да разгънете или затворите"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Бутони за разширяване и свиване на екрана са видими</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Екранни текстове, етикети</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Скрити</string>
|
||||
@@ -1065,7 +1122,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">Прескочете забраната за зареждане на изображение</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">Домейнът yt4.ggpht.com се използва за зареждане на изображения</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">Оригиналният домейн се използва за зареждане на изображения\n\nАктивирането на тази настройка може да коригира зареждането на изображения, които са блокирани в някои региони</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"Използва се оригинален хост на изображения
|
||||
|
||||
Активирането на това може да поправи липсващите изображения, които са блокирани в някои региони"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -1080,7 +1139,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & оригинални миниатюри</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow & Неподвижни кадри</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">Неподвижни кадри</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow предоставя миниатюри на публиката за видеоклипове. Тези миниатюри често са по-подходящи от тези, предоставени от самия YouTube. Ако е активирано, URL адресите на видео ще бъдат изпратени до API сървъра, без да се изпращат други данни. Ако видеоклипът няма миниатюри на DeArrow, ще се покажат или неговите оригинални миниатюри, или заснети кадри. Щракнете, за да научите повече за DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow предоставя миниатюри от краудсорсинг за видеоклипове в YouTube. Тези миниатюри често са по-подходящи от тези, предоставени от YouTube
|
||||
|
||||
Ако е разрешено, URL адресите на видеоклиповете ще бъдат изпратени до API сървъра и няма да бъдат изпращани други данни. Ако един видеоклип няма миниатюри на DeArrow, тогава се показват оригиналните или заснемащите кадри
|
||||
|
||||
Докоснете тук, за да научите повече за DeArrow"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Показване на известие, ако API не е наличен</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Показва се известие, ако DeArrow не е наличен</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Показва се известие, ако DeArrow не е наличен</string>
|
||||
@@ -1119,8 +1182,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Лъжливи параметри на устройството</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">Подправената резолюция на устройството\n\nМоже да се отключи по-високо качество на видеото, но може да изпитате засичане при възпроизвеждане на видео, по-лош живот на батерията и неизвестни странични ефекти</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Резолюцията на устройството не е подправена\n\nАктивирането на това не може да отключи по-високо качество на видеото</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Размерите на устройството са фалшифицирани
|
||||
|
||||
По-високите видео качества може да бъдат отключени, но може да изпитате заекване на видеовъзпроизвеждане, по-лоша издръжливост на батерията и неизвестни странични ефекти"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"Размерите на устройството не са фалшифицирани
|
||||
|
||||
Активирането на това може да отключи по-високи видео качества"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Разрешаването на това може да причини прекъсване на възпроизвеждането на видео, влошен живот на батерията и неизвестни странични ефекти.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1161,7 +1228,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Показване бутон за скорост</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Бутонът е показан</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Бутона \"Уведоми ме\" се показва.</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Бутонът не е показан</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
@@ -1170,8 +1237,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_speed_menu_summary_off">Менюто за потребителска скорост не се показва</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Персонализирани скорости на възпроизвеждане</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Добавете или променете скоростa на възпроизвеждане</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Персоналната скорост трябва да е по-малка от %s. Използване на стойности по подразбиране.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Невалидни персонализирани скорости на възпроизвеждане. Използване на стойности по подразбиране.</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Персонализираните скорости трябва да са по-малки от %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Невалидни персонализирани скорости на възпроизвеждане</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Авто</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1196,18 +1263,79 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Подправете клиентските видео потоци, за да предотвратите проблеми с възпроизвеждането</string>
|
||||
<string name="revanced_spoof_video_streams_title">Подправяне на видео потоци</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">Видео потоците са подправени</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">Видео потоците не са подправени\n\nВъзпроизвеждането на видео може да не работи</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"Потоците на видеоклипове не са фалшифицирани
|
||||
|
||||
Възпроизвеждането на видеоклипове може да не работи"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Деактивирането на тази настройка ще доведе до проблеми с възпроизвеждането на видео.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">Клиент по подразбиране</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Принудително AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Видеокодека е AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Видеокодека е VP9 или AV1</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Вашето устройство няма хардуерно VP9 декодиране и тази настройка винаги е активирана, когато е активно подправяне на клиента</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Активирането на това може да подобри живота на батерията и да коригира прекъсванията при възпроизвеждане.\n\nAVC има максимална разделителна способност от 1080p и възпроизвеждането на видео ще използва повече интернет данни от VP9 или AV1.</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Видео кодек по подразбиране AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Видео кодекът се определя автоматично</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Активирането на това може да подобри живота на батерията и да поправи заекването на възпроизвеждането.
|
||||
|
||||
AVC има максимална разделителна способност от 1080p, аудио кодекът Opus не е наличен, а видеовъзпроизвеждането ще използва повече интернет данни от VP9 или AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">Cтранични ефекти от подмяната на iOS</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">• Платените видеоклипове за деца може да не се възпроизвеждат\n• Потоците на живо започват отначало\n• Видеоклиповете може да завършват 1 секунда по-рано\n• Няма аудиокодек Opus</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Частните детски видеоклипове може да не се възпроизвеждат
|
||||
• Предаванията на живо започват от началото
|
||||
• Видеоклиповете завършват 1 секунда по-рано"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Странични ефекти от подправяне на Android VR</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Детските видеоклипове може да не се възпроизвеждат\n• Липсва менюто за аудио запис\n• Не е налична стабилна сила на звука</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Детските видеоклипове може да не се възпроизвеждат
|
||||
• Предаванията на живо започват от началото
|
||||
• Видеоклиповете завършват 1 секунда по-рано"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">Език по подразбиране на аудио потока</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Език на приложението</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">Арабски</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">Азербайджански</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">Български</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">Бенгалски</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">Каталонски</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">Чешки</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">Датски</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">Немски</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">Гръцки</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">Английски</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">Испански</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">Естонски</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">Персийски</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">Финландски</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">Френски</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">Гуджарати</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">Хинди</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">Хърватски</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">Унгарски</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">Индонезийски</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">Италиански</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Японски</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">Казахски</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">Корейски</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">Литовски</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">Латвийски</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">Македонски</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">Монголски</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">Маратхи</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">Малайски</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">Бирмански</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">Холандски</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">Ория</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">Пенджабски</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">Полски</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">Португалски (Бразилия)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">Португалски (Португалия)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Румънски</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Руски</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">Словашки</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">Словенски</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">Сръбски</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">Шведски</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">Суахили</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">Тамилски</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">Телугу</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">Тайландски</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">Турски</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">Украински</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">Урду</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">Виетнамски</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">Китайски</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1217,8 +1345,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">Аудио рекламата е разблокирана</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s е недостъпен. Може да се показват реклами. Опитайте друга услуга за блокиране на реклами.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s сървърът върна грешка. Може да се показват реклами. Опитайте да превключите друга услуга за блокиране на реклами.</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s не е наличен, може да се появят реклами. Опитайте да промените услугата за блокиране на реклами в настройките.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s върна грешка, може да се появят реклами. Опитайте да промените услугата за блокиране на реклами в настройките.</string>
|
||||
<string name="revanced_block_embedded_ads_title">Блокиране на вградени видеореклами</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">Деактивирано</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Luminous прокси</string>
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -36,6 +25,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_check_environment_failed_title">চেক ফেইল করেছে</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">অফিশ্যাল ওয়েবসাইট খুলুন</string>
|
||||
<string name="revanced_check_environment_dialog_ignore_button">অবজ্ঞা করুন</string>
|
||||
<string name="revanced_check_environment_failed_message"><h5>এই অ্যাপটি আপনার দ্বারা প্যাচ করা হয়েছে বলে মনে হচ্ছে না।</h5><br>এই অ্যাপটি সঠিকভাবে কাজ নাও করতে পারে, <b>ক্ষতিকারক বা এমনকি ব্যবহারের জন্য বিপজ্জনক হতে পারে</b>।<br><br>এই চেকগুলি ইঙ্গিত দেয় যে এই অ্যাপটি পূর্ববর্তীভাবে প্যাচ করা হয়েছে বা অন্য কাউকে থেকে পাওয়া গেছে:<br><br><small>%1$s</small><br>এটি দৃঢ়ভাবে সুপারিশ করা হয় যে <b>এই অ্যাপটি আনইনস্টল করা হোক এবং নিজেই প্যাচ করা হোক</b> যাতে নিশ্চিত করা হয় যে আপনি একটি যাচাইকৃত এবং সুরক্ষিত অ্যাপ ব্যবহার করছেন।<p><br>যদি উপেক্ষা করা হয়, তাহলে এই সতর্কতাটি শুধুমাত্র দু\'বার দেখানো হবে।</string>
|
||||
<string name="revanced_check_environment_not_same_patching_device">অন্য ডিভাইসে প্যাচ করা হয়েছে</string>
|
||||
<string name="revanced_check_environment_manager_not_expected_installer">ReVanced Manager দ্বারা প্যাচ করা হয়নি</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time">১০ মিনিটেরও বেশি আগে প্যাচ করা হয়েছে</string>
|
||||
@@ -66,9 +56,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore ইনস্টল করা হয়নি। ইনস্টল করুন।</string>
|
||||
<string name="gms_core_dialog_title">পদক্ষেপ প্রয়োজন</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore এর ব্যাকগ্রাউন্ডে চলমান থাকার অনুমতি নেই।\n\nআপনার ডিভাইসের জন্য \"Don\'t kill my app\" এ থাকা নির্দেশাবলী অনুসরণ করুন, এবং আপনার ইনস্টলকৃত MicroG তে তা প্রয়োগ করুন।\n\nঅ্যাপ সঠিকভাবে চলতে এটি অবশ্যই প্রয়োজন।</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore-এর পটভূমিতে চালানোর অনুমতি নেই।
|
||||
|
||||
আপনার ফোনের জন্য \"Don't kill my app\" গাইড অনুসরণ করুন এবং MicroG ইনস্টলেশনের জন্য নির্দেশাবলী প্রয়োগ করুন।
|
||||
|
||||
এটি অ্যাপ্লিকেশনটি কাজ করার জন্য প্রয়োজন।"</string>
|
||||
<string name="gms_core_dialog_open_website_text">ওয়েবসাইট খুলুন</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">ত্রুটি এড়াতে MicroG GmsCore এর ব্যাটারি অপটিমাইজেশন অবশ্যই নিষ্ক্রিয় করতে হবে।\n\nএগিয়ে যান বোতামে ট্যাপ করুন এবং ব্যাটারি অপটিমাইজেশন নিস্ক্রিয় করুন।</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"সমস্যা এড়াতে MicroG GmsCore-এর ব্যাটারি অপ্টিমাইজেশন অক্ষম করতে হবে।
|
||||
|
||||
MicroG-এর জন্য ব্যাটারি অপ্টিমাইজেশন অক্ষম করা ব্যাটারি ব্যবহারকে নেতিবাচকভাবে প্রভাবিত করবে না।
|
||||
|
||||
চালিয়ে যান বোতামটি ট্যাপ করুন এবং অপ্টিমাইজেশন পরিবর্তনগুলি অনুমোদন করুন।"</string>
|
||||
<string name="gms_core_dialog_continue_text">এগিয়ে যান</string>
|
||||
</patch>
|
||||
</app>
|
||||
@@ -86,6 +84,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_settings_screen_12_video_title">ভিডিও</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">Shorts ব্যাকগ্রাউন্ড প্লে অক্ষম করুন</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_on">Shorts ব্যাকগ্রাউন্ড প্লে অক্ষম করা হয়েছে</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_off">Shorts ব্যাকগ্রাউন্ড প্লে সক্ষম করা হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_screen_title">ডিবাগিং</string>
|
||||
@@ -102,7 +103,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">ReVanced এর ত্রুটির ক্ষেত্রে টোস্ট দেখান</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">কোন ত্রুটি দেখা গেলে টোস্ট দেখায়</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">কোন ত্রুটি দেখা গেলে টোস্ট দেখায় না</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">ত্রুটির টোস্ট দেখানো বন্ধ করলে তা ReVanced এর সকল ত্রুটির বিজ্ঞপ্তি লুকিয়ে রাখবে।\n\nআপনি কোন অনাকাঙ্ক্ষিত ঘটনার বিজ্ঞপ্তি পাবেন না।</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"ত্রুটি \"toast\" বন্ধ করে ReVanced ত্রুটি বিজ্ঞপ্তিগুলি লুকানো হয়।
|
||||
|
||||
আপনি কোনও অপ্রত্যাশিত ঘটনার বিষয়ে অবহিত হবেন না।"</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">পছন্দ / সদস্যতা বোতামের উজ্জ্বলতা নিষ্ক্রিয় করুন</string>
|
||||
@@ -121,7 +124,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">জলছাপ লুকানো আছে</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">জলছাপ দেখানো আছে</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">আনুভূমিক শেলফ লুকান</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">যে সকল শেলফ লুকানো হবে:\n• সর্বমেষ খবর\n• দেখা অবিরত রাখুন\n• আরও চ্যানেল দেখুন\n• কেনাকাটা\n• এটি আবার দেখুন</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"শেল্ফগুলি লুকানো হয় যেমন:
|
||||
• তাজা সংবাদ
|
||||
• দেখা চালিয়ে যান
|
||||
• আরও চ্যানেল অন্বেষণ করুন
|
||||
• কেনাকাটা
|
||||
• আবার দেখুন"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">শেলফ প্রদর্শিত হয়েছে</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -221,9 +229,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_chapters_section_title">চ্যাপ্টার বিভাগ লুকান</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">চ্যাপ্টার বিভাগ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">চ্যাপ্টার বিভাগ প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_podcast_section_title">‘পডকাস্ট বিভাগ লুকান’</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">‘পডকাস্ট বিভাগ’ লুকানো আছে</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">‘পডকাস্ট বিভাগ’ প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_info_cards_section_title">তথ্য কার্ড সেকশন লুকান</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">তথ্য কার্ড সেকশন লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">তথ্য কার্ড সেকশন প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">‘মূল বিষয়বস্তু’ বিভাগ লুকানো আছে</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">‘মূল বিষয়বস্তু’ বিভাগ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">‘मुख्य संकल्पना’ अनुभाग प्रदर्शित होता है</string>
|
||||
<string name="revanced_hide_transcript_section_title">ट्रांसक्रिप्ट अनुभाग छिपाएँ</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">ট্রান্সস্ক্রিপ্ট বিভাগ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">ট্রান্সস্ক্রিপ্ট বিভাগ প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_description_components_screen_title">ভিডিওর বিবরণ</string>
|
||||
@@ -241,6 +256,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">সম্পর্কিত ভিডিওতে প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_comments_screen_title">মন্তব্য</string>
|
||||
<string name="revanced_comments_screen_summary">মন্তব্য বিভাগের উপাদানগুলি লুকান বা দেখান৷</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">“চ্যাট সারাংশ” লুকানো আছে</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">“চ্যাট সারাংশ” দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">\'মেম্বারদের মন্তব্য\' হেডার লুকান</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">\'মেম্বারদের মন্তব্য\' হেডার লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">\'মেম্বারদের মন্তব্য\' হেডার প্রদর্শিত হয়েছে</string>
|
||||
@@ -260,6 +277,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">টাইমস্ট্যাম্প ও ইমোজি বোতাম লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">টাইমস্ট্যাম্প ও ইমোজি বোতাম প্রদর্শিত হয়েছে</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles छिपाएँ</string>
|
||||
<string name="revanced_hide_doodles_summary_on">सर्च बार Doodles छिपे हुए हैं</string>
|
||||
<string name="revanced_hide_doodles_summary_off">সার্চ বারে Doodles প্রদর্শিত হয়</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodles প্রতি বছর কয়েক দিনের জন্য দেখানো হয়।
|
||||
|
||||
আপনার অঞ্চলে যদি কোনও Doodle বর্তমানে দেখানো হচ্ছে এবং এই লুকানো সেটিং চালু থাকে, তাহলে সার্চ বারের নীচে ফিল্টার বারটিও লুকানো থাকবে।"</string>
|
||||
<string name="revanced_custom_filter_screen_title">কাস্টম ফিল্টার</string>
|
||||
<string name="revanced_custom_filter_screen_summary">কাস্টম ফিল্টার ব্যবহার করে বিভিন্ন উপাদান লুকান</string>
|
||||
<string name="revanced_custom_filter_title">কাস্টম ফিল্টার সক্রিয় করুন</string>
|
||||
@@ -283,16 +306,36 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">লুকানোর জন্য কীওয়ার্ড</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"নতুন লাইন দ্বারা পৃথক করা লুকানোর জন্য কিওয়ার্ড এবং বাক্যাংশ
|
||||
|
||||
কিওয়ার্ড চ্যানেলের নাম বা ভিডিও শিরোনামে দেখানো কোনও পাঠ্য হতে পারে
|
||||
|
||||
মাঝখানে বড় হাতের অক্ষর সম্বলিত শব্দগুলি কেসিং দিয়ে প্রবেশ করতে হবে (যেমন: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">কীওয়ার্ড ফিল্টারিং সম্পর্কে</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"হোম / সাবস্ক্রিপশন / অনুসন্ধানের ফলাফলগুলি কিওয়ার্ড বাক্যাংশের সাথে মিলে যাওয়া সামগ্রী লুকানোর জন্য ফিল্টার করা হয়
|
||||
|
||||
সীমাবদ্ধতা
|
||||
• চ্যানেলের নাম দ্বারা Shorts লুকানো যাবে না
|
||||
• কিছু UI উপাদান লুকানো নাও হতে পারে
|
||||
• কোনও কিওয়ার্ড অনুসন্ধান করলে কোনও ফলাফল নাও দেখাতে পারে"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">সম্পূর্ণ শব্দ মেলাও</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">ডাবল কোটের মধ্যে একটি কীওয়ার্ড/ফ্রেজ রাখলে ভিডিও শিরোনাম এবং চ্যানেলের নামের আংশিক মিল সনাক্ত করা বন্ধ হয়ে যাবে<br><br>উদাহরণস্বরূপ,<br><b>\"ai\"</b> ভিডিওটি লুকিয়ে দেবে: <b>How does AI work?</b><br>কিন্তু লুকিয়ে দেবে না: <b>What does fair use mean?</b></string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_hide_keyword_toast_invalid_common">কিওয়ার্ড ব্যবহার করা যাবে না: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">কিওয়ার্ড ব্যবহার করার জন্য উদ্ধৃতি যোগ করুন: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_conflicting">কিওয়ার্ডের দ্বন্দ্বপূর্ণ ঘোষণা আছে: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_length">কিওয়ার্ড খুব ছোট এবং উদ্ধৃতি প্রয়োজন: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_broad">কিওয়ার্ড সমস্ত ভিডিও লুকিয়ে রাখবে: %s</string>
|
||||
</patch>
|
||||
<patch id="ad.general.hideAdsResourcePatch">
|
||||
<string name="revanced_hide_general_ads_title">সাধারণ বিজ্ঞাপন লুকান</string>
|
||||
<string name="revanced_hide_general_ads_summary_on">সাধারণ বিজ্ঞাপন লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">সাধারণ বিজ্ঞাপন প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">পূর্ণ স্ক্রীন প্যানেল লুকান</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">পূর্ণ স্ক্রীণ বিজ্ঞাপন লুকিয়ে রয়েছে\n\nএই ফিচারটি শুধুমাত্র পুরোনো ডিভাইসের জন্য উপলভ্য</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"পূর্ণ পর্দার বিজ্ঞাপন লুকানো হয়
|
||||
|
||||
এই বৈশিষ্ট্যটি কেবল পুরনো ডিভাইসের জন্য উপলব্ধ"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">পূর্ণ স্ক্রীন বিজ্ঞাপন প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">বোতামযুক্ত বিজ্ঞাপন লুকান</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">বোতামযুক্ত বিজ্ঞাপন লুকিয়ে রয়েছে</string>
|
||||
@@ -306,6 +349,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_products_banner_title">প্রোডাক্ট দেখার ব্যানার লুকান</string>
|
||||
<string name="revanced_hide_products_banner_summary_on">ব্যানার লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_products_banner_summary_off">ব্যানার প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_player_store_shelf_title">প্লেয়ার শপিং শেলফ লুকান</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">শপিং শেলফ লুকানো আছে</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">শপিং শেলফ দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_shopping_links_title">ভিডিওর বিবরণে কেনাকাটার লিঙ্ক লুকান</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">কেনাকাটার লিঙ্ক লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">কেনাকাটার লিঙ্ক প্রদর্শিত হয়েছে</string>
|
||||
@@ -389,6 +435,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_on">পূর্ণস্ক্রিনে প্রবেশ বা পূর্ণস্ক্রিন থেকে বাহির হওয়ার সময়, উজ্জ্বলতা সংরক্ষণ এবং পুনরুদ্ধার করবে</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_off">পূর্ণস্ক্রিনে প্রবেশ বা পূর্ণস্ক্রিন থেকে বাহির হওয়ার সময়, উজ্জ্বলতা সংরক্ষণ এবং পুনরুদ্ধার করবে না</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">স্বয়ংক্রিয়-উজ্জ্বলতার অঙ্গভঙ্গি সক্রিয় করুন</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">উজ্জ্বলতার অঙ্গভঙ্গির সর্বনিম্ন মানে সোয়াইপ ডাউন করলে অটো-উজ্জ্বলতা সক্ষম হয়</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">সর্বনিম্ন মানে সোয়াইপ ডাউন করলে অটো-উজ্জ্বলতা সক্ষম হয় না</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">স্বতস্ফূর্তভাবে</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">ওভার-লে টাইম আউট</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">কত মিলিসেকেন্ডের জন্য ওভারলে দৃশ্যমান হবে</string>
|
||||
@@ -397,16 +445,34 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_swipe_overlay_background_alpha_title">সোয়াইপ ব্যাকগ্রাউন্ডের দৃশ্যমানতা</string>
|
||||
<string name="revanced_swipe_overlay_background_alpha_summary">সোয়াইপ ওভারলে ব্যাকগ্রাউন্ডের দৃশ্যমানতা</string>
|
||||
<string name="revanced_swipe_threshold_title">সোয়াইপ থ্রেশহোল্ড এর মাত্রা</string>
|
||||
<string name="revanced_swipe_threshold_summary">The amount of threshold for swipe to occur</string>
|
||||
</patch>
|
||||
<patch id="layout.autocaptions.autoCaptionsPatch">
|
||||
<string name="revanced_auto_captions_title">স্বয়ংক্রিয় ক্যাপশন বন্ধ করুন</string>
|
||||
<string name="revanced_auto_captions_summary_on">অটো ক্যাপশন বন্ধ করা হয়েছে</string>
|
||||
<string name="revanced_auto_captions_summary_off">অটো ক্যাপশন চালু করা হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">অ্যাকশন বোতাম</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">ভিডিওর নীচে বোতাম লুকানো বা দেখানো</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Like এবং Dislike লুকান</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Like এবং Dislike বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Like এবং Dislike বোতাম দেখানো হচ্ছে</string>
|
||||
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_share_button_title">Share লুকান</string>
|
||||
<string name="revanced_hide_share_button_summary_on">শেয়ার করুন বোতাম লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_share_button_summary_off">শেয়ার বাটন প্রদর্শিত হয়েছে</string>
|
||||
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears only on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">Report লুকান</string>
|
||||
<string name="revanced_hide_report_button_summary_on">রিপোর্ট বাটন লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_report_button_summary_off">রিপোর্ট বাটন প্রদর্শিত</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_remix_button_title">Remix লুকান</string>
|
||||
<string name="revanced_hide_remix_button_summary_on">রিমিক্স বাটন লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_remix_button_summary_off">রিমিক্স বাটন প্রদর্শিত হয়েছে</string>
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_download_button_title">ডাউনলোডগুলো হাইড করাও</string>
|
||||
<string name="revanced_hide_download_button_summary_on">ডাউনলোড বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_download_button_summary_off">ডাউনলোড বোতাম দেখানো হয়েছে</string>
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
@@ -418,6 +484,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_clip_button_summary_on">ক্লিপ বোতাম লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_clip_button_summary_off">ক্লিপ বোতাম প্রদর্শিত হয়েছে</string>
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_playlist_button_title">প্লেলিস্টে Save লুকান</string>
|
||||
<string name="revanced_hide_playlist_button_summary_on">প্লেলিস্টে Save বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_playlist_button_summary_off">প্লেলিস্টে Save বোতাম দেখানো হচ্ছে</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.navigation.navigationButtonsPatch">
|
||||
<string name="revanced_navigation_buttons_screen_title">নেভিগেশন বোতাম</string>
|
||||
@@ -440,7 +509,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">সদস্যতা নিন বোতাম প্রদর্শিত হয়েছে</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">তৈরি বোতামকে বিজ্ঞপ্তি বোতাম দ্বারা সুইচ করুন</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">তৈরি করুন বোতাম বিজ্ঞপ্তিগুলো বোতাম দ্বারা স্থান পরিবর্তিত হয়েছে\n\nবিঃদ্রঃ এটি সক্রিয় করার ফলে ভিডিও বিজ্ঞাপন জোরপূর্বক বন্ধ থাকবে</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"তৈরি বোতামটি বিজ্ঞপ্তি বোতামের সাথে পরিবর্তন করা হয়
|
||||
|
||||
মনে রাখবেন: এটি সক্রিয় করা ভিডিও বিজ্ঞাপনগুলিও জোর করে লুকিয়ে দেয়"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">তৈরি বোতামকে বিজ্ঞপ্তি বোতাম দ্বারা সুইচ করা হয়নি</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">নেভিগেশন বোতাম লেবেল লুকান</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">লেবেল লুকিয়ে রয়েছে</string>
|
||||
@@ -458,6 +529,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_on">আরও সেটিংস দেখুন মেনু লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_off">আরও সেটিংস দেখুন মেনু প্রদর্শিত হয়েছে</string>
|
||||
<!-- 'Sleep timer' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_title">Sleep timer লুকান</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">Sleep timer মেনু লুকানো আছে</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">Sleep timer মেনু দেখানো হচ্ছে</string>
|
||||
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_loop_video_title">ভিডিও লুপ করুন লুকান</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_on">ভিডিও লুপ করুন মেনু লুকিয়ে রয়েছে</string>
|
||||
@@ -466,6 +540,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_title">অ্যাম্বিয়েন্ট মোড লুকান</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">অ্যাম্বিয়েন্ট মোড মেনু লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">অ্যাম্বিয়েন্ট মোড মেনু প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_title">Stable volume লুকান</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_off">Stable volume মেনু দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_on">Stable volume মেনু লুকানো আছে</string>
|
||||
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_help_title">সাহায্য এবং ফিডব্যাক মেনু লুকান</string>
|
||||
<string name="revanced_hide_player_flyout_help_summary_on">সহায়তা ও প্রতিক্রিয়া মেনু লুকিয়ে রয়েছে</string>
|
||||
@@ -492,6 +569,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">ভিআর মেনুতে দেখুন লুকানো আছে</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">ভিআর মেনুতে দেখুন দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_title">ভিডিও গুণমান মেনুর ফুটার লুকান</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">ভিডিও গুণমান মেনু ফুটার লুকানো আছে</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">ভিডিও গুণমান মেনু ফুটার দেখানো হচ্ছে</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<string name="revanced_hide_player_previous_next_buttons_title">পূর্ববর্তী লুকান & পরবর্তী ভিডিও বোতাম</string>
|
||||
@@ -501,6 +580,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_cast_button_summary_on">কাস্ট বাটন লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_cast_button_summary_off">কাস্ট বাটন প্রদর্শিত হয়েছে</string>
|
||||
<!-- This button does not display any text, but 'captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title' -->
|
||||
<string name="revanced_hide_captions_button_title">ক্যাপশন বোতাম লুকান</string>
|
||||
<string name="revanced_hide_captions_button_summary_on">ক্যাপশন বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_captions_button_summary_off">ক্যাপশন বোতাম দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_autoplay_button_title">autoplay বোতাম লুকান</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_on">autoplay বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_off">autoplay বোতাম দেখানো হচ্ছে</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">শেষ স্ক্রীন কার্ড লুকান</string>
|
||||
@@ -531,6 +616,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_off">থাম্বনেইলে সিকবার প্রদর্শিত হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
|
||||
<string name="revanced_shorts_player_screen_title">Shorts প্লেয়ার</string>
|
||||
<string name="revanced_shorts_player_screen_summary">Shorts প্লেয়ারে উপাদান লুকানো বা দেখানো</string>
|
||||
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
<string name="revanced_hide_shorts_home_title">প্রধান ফিডে Shorts লুকান</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">প্রধান ফিডে Shorts লুকিয়ে রয়েছে</string>
|
||||
@@ -566,6 +653,20 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">অবস্থান লেবেল লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">অবস্থান লেবেল প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">সঙ্গীত সেভ করুন বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Save music বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Save music বোতাম দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Use template বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Use template বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">Use template বোতাম দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">Upcoming বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">আগামী বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">আগামী বোতাম দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">সবুজ পর্দা বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">সবুজ পর্দা বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">সবুজ পর্দা বোতাম দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">হ্যাশট্যাগ বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_on">হ্যাশট্যাগ বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_off">হ্যাশট্যাগ বোতাম দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">অনুসন্ধান পরামর্শগুলি লুকান</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_summary_on">অনুসন্ধান পরামর্শগুলি লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_summary_off">অনুসন্ধান পরামর্শগুলি প্রদর্শিত হয়েছে</string>
|
||||
@@ -629,6 +730,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">প্লেয়ার পপআপ প্যানেলগুলো লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">প্লেয়ার পপআপ প্যানেলগুলো প্রদর্শিত হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">পূর্ণ পর্দায় ভিডিও খুলুন</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">ভিডিও পূর্ণ পর্দায় খুলবে</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">ভিডিও পূর্ণ পর্দায় খুলবে না</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">প্লেয়ার ওভারলে অস্বচ্ছতা</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">অসচ্ছতা মান ০-১০০ এর মধ্যে, যেখানে ০ হল সম্পূর্ণ স্বচ্ছ</string>
|
||||
@@ -646,7 +752,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">অপছন্দগুলো প্রদর্শিত হয়নি</string>
|
||||
<string name="revanced_ryd_shorts_title">Shorts এ অপছন্দ দেখান</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Shorts এ অপছন্দ পদর্শিত হয়েছে</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">Shorts এ অপছন্দ পদর্শিত হয়েছে\n\nসীমাবদ্ধতা: ছদ্মবেশী মোডে অপছন্দ নাও দেখাতে পারে</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Shorts-এ ডিসলাইক দেখানো হচ্ছে
|
||||
|
||||
সীমাবদ্ধতা: গোপন মোডে ডিসলাইক প্রদর্শিত নাও হতে পারে"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Shorts এ অপছন্দ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">অপছন্দগুলো শতাংশ অনুযায়ী</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">অপছন্দগুলো শতাংশ অনুযায়ী প্রদর্শিত হয়েছে</string>
|
||||
@@ -684,6 +792,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_wide_searchbar_summary_off">প্রশস্ত অনুসন্ধান বার নিষ্ক্রিয় হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="layout.seekbar.seekbarThumbnailsPatch">
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_title">উচ্চমানের থাম্বনেইল সক্ষম করুন</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">সিকবার থাম্বনেইল উচ্চমানের</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">সিকবার থাম্বনেইল মাঝারিমানের</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">পূর্ণ পর্দায় সিকবার থাম্বনেইল উচ্চমানের</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">পূর্ণ পর্দায় সিকবার থাম্বনেইল মাঝারিমানের</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"এটি সেই লাইভস্ট্রিমগুলিতে থাম্বনেইল পুনরুদ্ধার করবে যেখানে সিকবার থাম্বনেইল নেই।
|
||||
|
||||
সিকবার থাম্বনেইল বর্তমান ভিডিওর একই মান ব্যবহার করবে।
|
||||
|
||||
এই বৈশিষ্ট্যটি 720p অথবা তার চেয়ে কম ভিডিও মান এবং খুব দ্রুত ইন্টারনেট সংযোগ ব্যবহার করার সময় সবচেয়ে ভালো কাজ করে।"</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">পুরোনো সিকবার থাম্বনেইল পুনরুদ্ধার করুন</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">সিকবার এর উপরে সিকবার থাম্বনেইল দেখানো হবে</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">পূর্ণস্ক্রীণে সিকবার থাম্বনেইল দেখানো হবে</string>
|
||||
@@ -730,6 +848,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_skipcount_sum_off">স্কিপ কাউন্ট ট্র্যাকিং সক্রিয় হয়নি</string>
|
||||
<string name="revanced_sb_general_min_duration">ন্যূনতম সেগমেন্ট সময়কাল</string>
|
||||
<string name="revanced_sb_general_min_duration_sum">এই মান (সেকেন্ড) হতে কম দৈর্ঘ্যের সেগমেন্ট প্রদর্শিত বা স্কিপ করা হবে না</string>
|
||||
<string name="revanced_sb_general_min_duration_invalid">অবৈধ সময়কাল</string>
|
||||
<string name="revanced_sb_general_uuid">আপনার ব্যক্তিগত ব্যবহারকারী আইডি</string>
|
||||
<string name="revanced_sb_general_uuid_sum">এটি গোপন রাখা উচিত। এটি একটি পাসওয়ার্ডের মতো এবং কারও সাথে শেয়ার করা উচিত নয়। যদি কারও কাছে এটি থাকে, তবে তারা আপনার ছদ্মবেশ ধারণ করতে পারে</string>
|
||||
<string name="revanced_sb_general_uuid_invalid">ব্যক্তিগত ব্যবহাকারী আইডি অবশ্যই ৩০ অক্ষর লম্বা হতে হবে</string>
|
||||
@@ -745,7 +864,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">সেটিং সফলভাবে আমদানি করা হয়েছে</string>
|
||||
<string name="revanced_sb_settings_import_failed">%s আমদানি করতে ব্যর্থ হয়েছে</string>
|
||||
<string name="revanced_sb_settings_export_failed">%s রপ্তানি করতে ব্যর্থ হয়েছে</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">আপনার সেটিংএ একটি প্রাইভেট SponsorBlock ব্যবহারকারী আইডি রয়েছে।\n\nআপনার ব্যবহারকারী আইডি অনেকটা পাসওয়ার্ডের মতো তাই এটি কখনোই শেয়ার করা উচিত নয়।\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"আপনার সেটিংসে একটি ব্যক্তিগত SponsorBlock ব্যবহারকারী ID রয়েছে।
|
||||
|
||||
আপনার ব্যবহারকারী ID একটি পাসওয়ার্ডের মতো এবং এটি কখনও ভাগ করা উচিত নয়।"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">আবার দেখাবেন না</string>
|
||||
<string name="revanced_sb_diff_segments">সেগমেন্ট আচরণ পরিবর্তন করুন</string>
|
||||
<string name="revanced_sb_segments_sponsor">স্পন্সর</string>
|
||||
@@ -805,9 +926,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">%s সেগমেন্ট জমা দিতে সক্ষম হয়নি</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock সাময়িকভাবে বন্ধ আছে</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">সেগমেন্ট জমা দিতে সক্ষম হয়নি (অবস্থা: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">সেগমেন্ট জমা করা সম্ভব হয়নি।\nরেট লিমিট (একই ব্যবহারকারী বা IP থেকে অনেক বেশি)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">সেগমেন্ট জমা দিতে পারছি না। হার সীমাবদ্ধ (একই ব্যবহারকারী বা IP থেকে খুব বেশি)।</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">সেগমেন্ট জমা করা যাবে না: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">সেগমেন্ট জমা করা সম্ভব নয়।\nইতোমধ্যে রয়েছে</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"সেগমেন্ট জমা দিতে পারছি না।
|
||||
পূর্বেই বিদ্যমান"</string>
|
||||
<string name="revanced_sb_submit_succeeded">সেগমেন্ট সফলভাবে জমা হয়েছে</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock সাময়িকভাবে উপলভ্য নয় (API সময় শেষ হয়েছে)</string>
|
||||
@@ -823,13 +945,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_choose_category">সেগমেন্টের বিভাগ নির্বাচন করুন</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">সেটিং থেকে বিভাগ নিস্ক্রিয় করা হয়েছে। জমা দিতে বিভাগ সক্রিয় করুন।</string>
|
||||
<string name="revanced_sb_new_segment_title">নতুন স্পন্সরব্লক সেগমেন্ট</string>
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question">%s কে নতুন সেগমেন্টের শুরু অথবা শেষ হিসেবে সেট করুন?</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">শুরু</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">শেষ</string>
|
||||
<string name="revanced_sb_new_segment_now">এখন</string>
|
||||
<string name="revanced_sb_new_segment_time_start">সেগমেন্টটি শুরু হওয়ার সময়</string>
|
||||
<string name="revanced_sb_new_segment_time_end">সেগমেন্টটি শেষ হওয়ার সময়</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">সময়কাল কি সঠিক?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">সেগমেন্ট সময়কাল\n\n%1$s\nথেকে\n%2$s\n\n(%3$s)\n\nজমা করার জন্য প্রস্তুত?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"সেগমেন্টটি
|
||||
|
||||
%1$s
|
||||
থেকে
|
||||
|
||||
%2$s
|
||||
এবং
|
||||
|
||||
(%3$s)
|
||||
জমা দিতে প্রস্তুত।"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">শুরু অবশ্যই শেষের আগে হতে হবে</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">আগে সময় বারে দুটি অবস্থান চিহ্নিত করুন</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">সেগমেন্টটি পূর্বরূপ দেখুন এবং নিশ্চিত হোন যে এটি মসৃণভাবে এড়িয়ে যাচ্ছে</string>
|
||||
@@ -847,6 +979,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_stats_username_changed">ব্যবহারকারীর নাম সফলভাবে পরিবর্তন হয়েছে</string>
|
||||
<string name="revanced_sb_stats_reputation">আপনার রিপুটেশন হল <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>
|
||||
<string name="revanced_sb_stats_saved">আপনি মানুষকে <b>%s</b> সেগমেন্ট থেকে বাঁচিয়েছেন</string>
|
||||
<string name="revanced_sb_stats_saved_sum_zero">বৈশ্বিক পরিসংখ্যান এবং শীর্ষ অবদানকারীদের দেখতে এখানে ট্যাপ করুন</string>
|
||||
@@ -870,10 +1003,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">অ্যাপ সংস্করণ স্পুফ করুন</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">সংস্করণ স্পুফ করা হয়েছে</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">সংস্করণ স্পুফ করা হয়নি</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">অ্যাপ সংস্করণ পুরোনো একটি সংস্করণে স্পুফ করা হবে।\n\nএটি অ্যাপের চেহারা এবং ফিচার পরিবর্তন করে, কিন্তু এতে অনাকাঙ্খিত পার্শ্বপ্রতিক্রিয়া দেখা দিতে পারে।\n\nপরবর্তীতে বন্ধ করা হলে, UI বাগ থেকে বাঁচতি অ্যাপের ডাটা ক্লিয়ার করার প্রস্তাবনা রইলো।</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"অ্যাপ্লিকেশন সংস্করণটি YouTube-এর পুরনো সংস্করণে ভুয়া হবে।
|
||||
|
||||
এটি অ্যাপ্লিকেশনটির চেহারা এবং বৈশিষ্ট্য পরিবর্তন করবে, তবে অজানা পার্শ্ব প্রতিক্রিয়া হতে পারে।
|
||||
|
||||
পরে যদি বন্ধ করা হয়, UI বাগ এড়াতে অ্যাপ্লিকেশন ডেটা পরিষ্কার করার পরামর্শ দেওয়া হয়।"</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">স্পুফ অ্যাপ সংস্করণ লক্ষ্য</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 - পুরনো Shorts প্লেয়ার আইকন পুনরুদ্ধার করুন</string>
|
||||
<!-- 'RYD' is 'Return YouTube Dislike' -->
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_1">18.33.40 - ছদ্মবেশি মোডে RYD পুনরুদ্ধার করে</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_2">18.20.39 - প্রশ্বস্ত ভিডিও স্পিড এবং গুণমান মেনু পুনরুদ্ধার করে</string>
|
||||
@@ -883,12 +1021,20 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">শুরুর পৃষ্ঠা সেট করুন</string>
|
||||
<string name="revanced_change_start_page_entry_default">পূর্ব-নির্ধারিত</string>
|
||||
<string name="revanced_change_start_page_entry_browse">চ্যানেল ব্রাউজ করুন</string>
|
||||
<string name="revanced_change_start_page_entry_explore">ঘুরে দেখুন</string>
|
||||
<string name="revanced_change_start_page_entry_gaming">গেমিং</string>
|
||||
<string name="revanced_change_start_page_entry_history">ইতিহাস</string>
|
||||
<string name="revanced_change_start_page_entry_library">লাইব্রেরি</string>
|
||||
<string name="revanced_change_start_page_entry_liked_videos">পছন্দ করা ভিডিওগুলি</string>
|
||||
<string name="revanced_change_start_page_entry_live">লাইভ</string>
|
||||
<string name="revanced_change_start_page_entry_movies">মুভি</string>
|
||||
<string name="revanced_change_start_page_entry_music">সঙ্গীত</string>
|
||||
<string name="revanced_change_start_page_entry_search">অনুসন্ধান</string>
|
||||
<string name="revanced_change_start_page_entry_sports">খেলাধুলা</string>
|
||||
<string name="revanced_change_start_page_entry_subscriptions">সদস্যতা</string>
|
||||
<string name="revanced_change_start_page_entry_trending">এখন জনপ্রিয়</string>
|
||||
<string name="revanced_change_start_page_entry_watch_later">পরে দেখুন</string>
|
||||
</patch>
|
||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||
<string name="revanced_disable_resuming_shorts_player_title">Shorts প্লেয়ার আবার চালানো নিষ্ক্রিয় করুন</string>
|
||||
@@ -896,6 +1042,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_off">অ্যাপের শুরুতে Shorts প্লেয়ার আবার চলবে</string>
|
||||
</patch>
|
||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||
<string name="revanced_shorts_autoplay_title">অটোপ্লে Shorts</string>
|
||||
<string name="revanced_shorts_autoplay_summary_on">Shorts অটোপ্লে হবে</string>
|
||||
<string name="revanced_shorts_autoplay_summary_off">Shorts পুনরাবৃত্তি হবে</string>
|
||||
<string name="revanced_shorts_autoplay_background_title">পটভূমিতে Shorts অটোপ্লে</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_on">পটভূমিতে Shorts অটোপ্লে হবে</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_off">পটভূমিতে Shorts পুনরাবৃত্তি হবে</string>
|
||||
</patch>
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
<string name="revanced_tablet_layout_title">ট্যাবলেট লেআউট সক্রিয় করুন</string>
|
||||
@@ -908,18 +1060,48 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">অ্যাপের মধ্যকার মিনিমাইজড প্লেয়ার এর ধরণ পরিবর্তন করুন</string>
|
||||
<string name="revanced_miniplayer_type_title">মিনিপ্লেয়ার ধরণ</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">নিষ্ক্রিয় হয়েছে</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">আসল</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">পূর্ব-নির্ধারিত</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">ন্যূনতম</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">ট্যাবলেট</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">মর্ডান ১</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">মর্ডান ২</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">মর্ডান ৩</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">গোলাকার কোণ সক্ষম করুন</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">কোণগুলি গোলাকার</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">কোণগুলি বর্গাকার</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">ডাবল-ট্যাপ এবং পিঞ্চ টু রিসাইজ সক্ষম করুন</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"ডাবল-ট্যাপ করার ক্রিয়া এবং আকার পরিবর্তন করার জন্য চিমটি দেওয়া সক্রিয়
|
||||
|
||||
• miniplayer আকার বৃদ্ধি করতে ডাবল ট্যাপ করুন
|
||||
• মূল আকার পুনরুদ্ধার করতে আবার ডাবল ট্যাপ করুন"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">ডাবল-ট্যাপ অ্যাকশন এবং পিঞ্চ টু রিসাইজ অক্ষম</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">ড্র্যাগ এবং ড্রপ সক্ষম করুন</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"ড্র্যাগ এবং ড্রপ সক্রিয়
|
||||
|
||||
Miniplayer স্ক্রিনের যেকোনো কোণে টানা যাবে"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">ড্র্যাগ এবং ড্রপ অক্ষম</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">অনুভূমিক ড্র্যাগ অঙ্গভঙ্গি সক্ষম করুন</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"ক্ষैতিকভাবে টানার ভঙ্গি সক্রিয়
|
||||
|
||||
Miniplayer স্ক্রিন থেকে বামে বা ডানে টানা যাবে"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">অনুভূমিক ড্র্যাগ অঙ্গভঙ্গি অক্ষম</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">বন্ধ বোতাম লুকান</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">বন্ধ বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">বন্ধ বোতাম দেখানো হচ্ছে</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">বিস্তৃত ও বন্ধ করার বোতাম লুকান</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"বোতামগুলি লুকানো হয়
|
||||
|
||||
বিস্তৃত করতে বা বন্ধ করতে সোয়াইপ করুন"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">বিস্তৃত এবং বন্ধ বোতাম দেখানো হচ্ছে</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">উপপাঠ লুকান</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">উপপাঠ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_off">উপপাঠ প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_title">সামনে বা পেছনে এড়িয়ে যাওয়ার বোতাম লুকান</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">সামনে বা পেছনে এড়িয়ে যাওয়ার বোতাম লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">সামনে বা পেছনে এড়িয়ে যাওয়ার বোতাম প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_miniplayer_width_dip_title">প্রাথমিক আকার</string>
|
||||
<string name="revanced_miniplayer_width_dip_summary">প্রাথমিক পর্দার আকার, পিক্সেলে</string>
|
||||
<string name="revanced_miniplayer_width_dip_invalid_toast">পিক্সেল আকার %1$s এবং %2$s এর মধ্যে হতে হবে</string>
|
||||
<string name="revanced_miniplayer_opacity_title">ওভারলে অস্বচ্ছতা</string>
|
||||
<string name="revanced_miniplayer_opacity_summary">অসচ্ছতা মান ০-১০০ এর মধ্যে, যেখানে ০ হল সম্পূর্ণ স্বচ্ছ</string>
|
||||
<string name="revanced_miniplayer_opacity_invalid_toast">মিনিপ্লেয়ার ওভারলে অস্বচ্ছতা অবশ্যই ০-১০০ এর মধ্যে হতে হবে</string>
|
||||
@@ -935,8 +1117,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_custom_color_summary_off">সিকবারে মূল রং প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_seekbar_custom_color_value_title">নিজস্ব সিকবার রং</string>
|
||||
<string name="revanced_seekbar_custom_color_value_summary">সিকবারের রং</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">অবৈধ সিকবার রঙ মান</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">ছবি অঞ্চল সীমাবদ্ধতা বাইপাস করুন</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">yt4.ggpht.com ছবি হোস্ট ব্যবহার করে</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"মূল ছবি হোস্ট ব্যবহার করে
|
||||
|
||||
এটি সক্ষম করলে কিছু অঞ্চলে ব্লক করা থাকা অনুপস্থিত ছবিগুলি সংশোধন করতে পারে"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -951,7 +1139,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow এবং মূল থাম্বনেইল</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow এবং স্থির ছবি</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">স্থির ছবি</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow YouTube ভিডিওগুলির জন্য ক্রাউড-সোর্সড থাম্বনেল সরবরাহ করে। এই থাম্বনেলগুলি প্রায়ই YouTube দ্বারা প্রদত্ত থাম্বনেলগুলির চেয়ে বেশি প্রাসঙ্গিক\n\nঅন করলে, ভিডিও URLগুলি API সার্ভারে পাঠানো হবে এবং অন্য কোনও ডেটা পাঠানো হবে না৷ যদি একটি ভিডিওতে DeArrow থাম্বনেইল না থাকে, তাহলে আসল বা স্থির চিত্র দেখানো হয়\n\nDeArrow সম্পর্কে আরও জানতে এখানে চাপুন</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow YouTube ভিডিওগুলির জন্য জনগণের উৎস থেকে তৈরি থাম্বনেইল সরবরাহ করে। এই থাম্বনেইলগুলি প্রায়শই YouTube দ্বারা সরবরাহ করা থাম্বনেইলগুলির চেয়ে আরও প্রাসঙ্গিক।
|
||||
|
||||
যদি সক্রিয় করা হয়, তাহলে ভিডিও URLগুলি API সার্ভারে পাঠানো হবে এবং অন্য কোনও ডেটা পাঠানো হবে না। যদি কোনও ভিডিওতে DeArrow থাম্বনেইল না থাকে, তাহলে মূল বা স্থির ক্যাপচার দেখানো হবে
|
||||
|
||||
DeArrow সম্পর্কে আরও জানতে এখানে ট্যাপ করুন"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">API উপলভ্য না থাকলে একটি টোস্ট দেখান</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">যদি DeArrow অনুপস্থিত থাকে তবে টোস্ট বার্তা প্রদর্শিত হয়</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">যদি DeArrow অনুপস্থিত থাকে তবে টোস্ট বার্তা প্রদর্শিত হয় না</string>
|
||||
@@ -980,6 +1172,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">সতর্কীকরণ</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">আপনার দেখার ইতিহাস সংরক্ষিত হচ্ছে না।<br><br>এটি সম্ভবত DNS অ্যাড ব্লকার অথবা নেটওয়ার্ক প্রক্সির কারণে।<br><br>এটি ঠিক করার জন্য, <b>s.youtube.com</b> সাদা তালিকাভুক্ত করুন অথবা সকল DNS ব্লকার এবং প্রক্সি বন্ধ করুন।</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">আবার দেখাবেন না</string>
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
@@ -989,8 +1182,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">ডিভাইস ডাইমেনশন স্পুফ করুন</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">ডিভাইস ডাইমেনশন স্পুফ হয়েছে\n\nভিডিওর উন্নত গুণমান আনলক হয়েছে কিন্তু আপনি ভিডিও চলার ক্ষেত্রে আটকে চলা, খারাপ ব্যাটারি লাইফ এবং অজানা পার্শ্ব-প্রতিক্রিয়ার সম্মুখিন হতে পারেন</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">ডিভাইস ডাইমেনশন স্পুফ হয়নি\n\nএটি সক্রিয় করার ফলে উন্নত ভিডিও গুণমান আনলক হবে</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"ডিভাইসের মাত্রা ভুয়া
|
||||
|
||||
উচ্চ ভিডিও গুণমানগুলি আনলক করা যেতে পারে তবে আপনি ভিডিও প্লেব্যাক হোঁচট খাওয়া, খারাপ ব্যাটারি লাইফ এবং অজানা পার্শ্ব প্রতিক্রিয়া অনুভব করতে পারেন"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"ডিভাইসের মাত্রা ভুয়া নয়
|
||||
|
||||
এটি সক্রিয় করা উচ্চ ভিডিও গুণমানগুলি আনলক করতে পারে"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">এটি সক্রিয় করার ফলে আপনি ভিডিও চলার ক্ষেত্রে আটকে চলা, খারাপ ব্যাটারি লাইফ এবং অজানা পার্শ্ব-প্রতিক্রিয়ার সম্মুখিন হতে পারেন।</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1035,9 +1232,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">বোতাম প্রদর্শিত হয়নি</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">কাস্টম প্লেব্যাক গতি মেনু</string>
|
||||
<string name="revanced_custom_speed_menu_summary_on">কাস্টম স্পিড মেনু দেখানো হচ্ছে</string>
|
||||
<string name="revanced_custom_speed_menu_summary_off">কাস্টম স্পিড মেনু দেখানো হচ্ছে না</string>
|
||||
<string name="revanced_custom_playback_speeds_title">নিজস্ব প্লেব্যাক স্পিড</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">নিজস্ব স্পিড অবশ্যই %sগুণ থেকে কম হতে হবে। মূল ভ্যালু ব্যবহৃত হচ্ছে।</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">ভুল নিজস্ব প্লেব্যাক স্পিড। মূল ভ্যালু ব্যবহৃত হচ্ছে।</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">কাস্টম প্লেব্যাক গতি যোগ করুন অথবা পরিবর্তন করুন</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">কাস্টম গতি %s এর চেয়ে কম হতে হবে</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">অবৈধ কাস্টম প্লেব্যাক গতি</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">স্বতস্ফূর্তভাবে</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1062,12 +1263,79 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_video_streams_screen_summary">প্লেব্যাক সমস্যা প্রতিরোধ করতে ক্লায়েন্ট ভিডিও স্ট্রিম স্পুফ করুন</string>
|
||||
<string name="revanced_spoof_video_streams_title">ভিডিও স্ট্রিমিং স্পুফ করুন</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">ভিডিও স্ট্রিম স্পুফ করা হয়েছে</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">ভিডিও স্ট্রিম স্পুফ করা হয়নি\n\nভিডিও প্লেব্যাক ঠিকমতো কাজ নাও করতে পারে</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"ভিডিও স্ট্রিম ভুয়া নয়
|
||||
|
||||
ভিডিও প্লেব্যাক কাজ নাও করতে পারে"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">এই সেটিংটি বন্ধ করার ফলে ভিডিও প্লেব্যাক ত্রুটি হতে পারে।</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">ডিফল্ট ক্লায়েন্ট</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">AVC (H.264) ফোর্স করুন</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ভিডিও কোডেক AVC (H.264) ব্যবহৃত হচ্ছে</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ভিডিও কোডেক VP9 বা AV1 ব্যবহৃত হচ্ছে</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ভিডিও কোডেক AVC (H.264) তে বাধ্য করা হয়েছে</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ভিডিও কোডেক স্বয়ংক্রিয়ভাবে নির্ধারিত হচ্ছে</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"এটি সক্রিয় করা ব্যাটারি লাইফ উন্নত করতে পারে এবং প্লেব্যাক হোঁচট খাওয়া ঠিক করতে পারে।
|
||||
|
||||
AVC-এর সর্বোচ্চ রেজোলিউশন 1080p, Opus অডিও কোডেক উপলব্ধ নয় এবং ভিডিও প্লেব্যাক VP9 বা AV1 এর তুলনায় আরও ইন্টারনেট ডেটা ব্যবহার করবে।"</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS স্পুফিং এর পার্শ্ব প্রতিক্রিয়া</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• ব্যক্তিগত শিশু ভিডিওগুলি প্লে নাও হতে পারে
|
||||
• লাইভস্ট্রিম শুরু থেকে শুরু হয়
|
||||
• ভিডিও 1 সেকেন্ড আগে শেষ হয়"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR স্পুফিং এর পার্শ্ব প্রতিক্রিয়া</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• শিশু ভিডিওগুলি প্লে নাও হতে পারে
|
||||
• লাইভস্ট্রিম শুরু থেকে শুরু হয়
|
||||
• ভিডিও 1 সেকেন্ড আগে শেষ হয়"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">ডিফল্ট অডিও স্ট্রিম ভাষা</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">অ্যাপ ভাষা</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">আরবি</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">আজারবাইজানি</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">বুলগেরিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">বাংলা</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">কাতালান</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">চেক</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">ডেনিশ</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">জার্মান</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">গ্রীক</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">ইংরেজি</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">স্প্যানিশ</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">এস্তোনিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">ফার্সি</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">ফিনল্যান্ড</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">ফরাসি</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">গুজরাটি</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">হিন্দি</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">ক্রোয়েশিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">হাঙ্গেরিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">ইন্দোনেশিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">ইতালীয়</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">জাপানি</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">কাজাখ</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">কোরিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">লিথুয়ানিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">লাতভিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">ম্যাসেডোনিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">মঙ্গোলিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">মারাঠি</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">মালয়</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">বার্মিজ</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">ডাচ</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">ওড়িয়া</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">পঞ্জাবি</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">পোলিশ</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">পর্তুগিজ (ব্রাজিল)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">পর্তুগিজ (পর্তুগাল)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">রোমানীয়</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">রাশিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">স্লোভাক</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">স্লোভেনিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">সার্বিয়ান</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">সুইডিশ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">সোয়াহিলি</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">তামিল</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">তেলুগু</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">থাই</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">তুর্কি</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">ইউক্রেনীয়</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">উর্দু</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">ভিয়েতনামি</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">চীনা</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1077,8 +1345,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">অডিও বিজ্ঞাপন আনবব্লক করা হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s উপলভ্য নয়। বিজ্ঞাপন দেখাতে পারে। সেটিং থেকে অন্য কোন বিজ্ঞাপন আটকানো সেবায় সুইচ করুন।</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s সার্ভার একটি ত্রুটি দেখাচ্ছে। বিজ্ঞাপন দেখাতে পারে। সেটিং থেকে অন্য কোন বিজ্ঞাপন আটকানো সেবায় সুইচ করুন।</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s উপলব্ধ নয়, বিজ্ঞাপন দেখানো হতে পারে। সেটিংসে বিজ্ঞাপন ব্লক পরিষেবা পরিবর্তন করার চেষ্টা করুন।</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s একটি ত্রুটি ফিরিয়েছে, বিজ্ঞাপন দেখানো হতে পারে। সেটিংসে বিজ্ঞাপন ব্লক পরিষেবা পরিবর্তন করার চেষ্টা করুন।</string>
|
||||
<string name="revanced_block_embedded_ads_title">এমবেড করা ভিডিও বিজ্ঞাপন আটকান</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">নিষ্ক্রিয় হয়েছে</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Luminous প্রক্সি</string>
|
||||
@@ -1110,6 +1378,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings">ReVanced সেটিং</string>
|
||||
<string name="revanced_about_title">সম্পর্কিত</string>
|
||||
<string name="revanced_about_summary">ReVanced সম্পর্কে</string>
|
||||
<string name="revanced_ads_screen_title">বিজ্ঞাপন</string>
|
||||
<string name="revanced_ads_screen_summary">বিজ্ঞাপন বন্ধ করার সেটিং</string>
|
||||
<string name="revanced_chat_screen_title">আলাপচারি</string>
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -147,6 +136,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -44,7 +33,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">APK byggedato er ødelagt</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_title">ReVanced</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Ønsker du at fortsætte?</string>
|
||||
<string name="revanced_settings_reset">Nulstil</string>
|
||||
<string name="revanced_settings_restart_title">Opdater og genstart</string>
|
||||
@@ -68,9 +56,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore er ikke installeret. Installér den.</string>
|
||||
<string name="gms_core_dialog_title">Behov for handling</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore har ikke tilladelse til at køre i baggrunden.\n\nFølg vejledningen \"Må ikke dræbe min app\" til din telefon, og anvend vejledningen til din MicroG-installation.\n\nDette er nødvendigt for at appen kan fungere.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore har ikke tilladelse til at køre i baggrunden.
|
||||
|
||||
Følg guiden \"Dræb ikke min app\" for din telefon, og følg vejledningen for din MicroG-installation.
|
||||
|
||||
Dette er påkrævet, for at appen kan fungere."</string>
|
||||
<string name="gms_core_dialog_open_website_text">Åbn hjemmeside</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">MicroG GmsCore batterioptimeringer skal være deaktiveret for at forhindre problemer.\n\nTryk på knappen fortsæt og deaktiver batterioptimeringer.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"MicroG GmsCores batterioptimering skal deaktiveres for at forhindre problemer.
|
||||
|
||||
Deaktivering af batterioptimering for MicroG vil ikke påvirke batteriforbruget negativt.
|
||||
|
||||
Tryk på fortsætknappen, og tillad ændringer af optimering."</string>
|
||||
<string name="gms_core_dialog_continue_text">Fortsæt</string>
|
||||
</patch>
|
||||
</app>
|
||||
@@ -79,7 +75,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_settings_screen_00_about_title">Om</string>
|
||||
<string name="revanced_settings_screen_01_ads_title">Annoncer</string>
|
||||
<string name="revanced_settings_screen_02_alt_thumbnails_title">Alternative miniaturer</string>
|
||||
<string name="revanced_settings_screen_03_feed_title">Feed</string>
|
||||
<string name="revanced_settings_screen_03_feed_title">Fodring</string>
|
||||
<string name="revanced_settings_screen_04_player_title">Spiller</string>
|
||||
<string name="revanced_settings_screen_05_general_title">Generelt layout</string>
|
||||
<string name="revanced_settings_screen_07_seekbar_title">Søgebjælke</string>
|
||||
@@ -88,6 +84,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_settings_screen_12_video_title">Video</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">Deaktiver afspilning af Shorts i baggrunden</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_on">Afspilning af Shorts i baggrunden er deaktiveret</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_off">Afspilning af Shorts i baggrunden er aktiveret</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_screen_title">Fejlfinding</string>
|
||||
@@ -104,7 +103,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">Vis toast på ReVanced fejl</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Toast vist, hvis der opstår fejl</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Toast ikke vist, hvis der opstår fejl</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">Slår fejl-toasts fra skjuler alle ReVanced fejlmeddelelser.\n\nDu vil ikke blive underrettet om nogen uventede begivenheder.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Deaktivering af fejl-toasts skjuler alle ReVanced-fejlmeddelelser.
|
||||
|
||||
Du vil ikke blive underrettet om uventede hændelser."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Deaktivér som / abonnér knap glow</string>
|
||||
@@ -123,7 +124,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Vandmærke er skjult</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Vandmærke er vist</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">Skjul vandrette hylder</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">Hylder er skjult såsom:\n• Breaking news\n• Fortsæt med at se\n• Udforsk flere kanaler\n• Shopping\n• Se det igen</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"Hylder er skjult, f.eks.:
|
||||
• Nye nyheder
|
||||
• Se videre
|
||||
• Udforsk flere kanaler
|
||||
• Indkøb
|
||||
• Se det igen"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Hylder er vist</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -250,12 +256,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Vist i relaterede videoer</string>
|
||||
<string name="revanced_comments_screen_title">Kommentarer</string>
|
||||
<string name="revanced_comments_screen_summary">Skjul eller vis kommentarer sektion komponenter</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">Skjul \'Chat-oversigt\' </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">\'Chatsammenfatning\' er skjult</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">\'Chatsammenfatning\' er vist</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Skjul \'Kommentarer fra medlemmer\' header</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">\'Kommentarer fra medlemmer\' overskrift er skjult</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">\'Kommentarer fra medlemmer\' overskrift vises</string>
|
||||
<string name="revanced_hide_comments_section_title">Skjul kommentarsektion</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">Kommentarer sektion er skjult</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">Kommentarer sektion er vist</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">Skjul knappen \"Opret en Short\"</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Knappen \"Opret en Short\" er skjult</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Knappen \"Opret en Short\" vises</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">Skjul forhåndsvisning kommentar</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">Forhåndsvisning kommentar er skjult</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">Forhåndsvis kommentar er vist</string>
|
||||
@@ -269,7 +281,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_doodles_title">Skjul YouTube-Doudler</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Søgebjælke Doudler er skjult</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Søgebjælke Doudler vises</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">YouTube Doodles dukker op et par dage hvert år.\n\nHvis en Doodle i øjeblikket vises i din region og denne skjul-indstilling er slået til, så vil filterbjælken under søgelinjen også være skjult.</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"YouTube-doodles vises et par dage om året.
|
||||
|
||||
Hvis et Doodle vises i øjeblikket i din region, og denne skjuleindstilling er aktiveret, skjules filterfeltet under søgefeltet også."</string>
|
||||
<string name="revanced_custom_filter_screen_title">Tilpasset filter</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Skjul komponenter ved hjælp af brugerdefinerede filtre</string>
|
||||
<string name="revanced_custom_filter_title">Aktiver brugerdefineret filter</string>
|
||||
@@ -293,8 +307,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">Nøgleord at skjule</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">Nøgleord og sætninger at skjule, adskilt af nye linjer\n\nSøgeord kan være kanalnavne eller enhver tekst vist i video titler\n\nOrd med store bogstaver i midten skal indtastes med casing (dvs. iPhone, TikTok, LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"Søgeord og sætninger, der skal skjules, adskilt af nye linjer
|
||||
|
||||
Søgeord kan være kanalnavne eller tekst, der vises i videotitler
|
||||
|
||||
Ord med store bogstaver i midten skal indtastes med store og små bogstaver (f.eks.: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">Om søgeord filtrering</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"Hjem-/abonnement-/søgeresultater filtreres for at skjule indhold, der svarer til søgeordssætninger
|
||||
|
||||
Begrænsninger
|
||||
● Shorts kan ikke skjules efter kanalnavn
|
||||
● Nogle UI-komponenter skjules muligvis ikke
|
||||
● Søgning efter et søgeord viser muligvis ingen resultater"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Match hele ord</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">Omkring et nøgleord/sætning med dobbelt-citater vil forhindre partielle kampe af videotitler og kanalnavne<br><br>For eksempel<br><b>\"ai\"</b> vil skjule videoen: <b>How does AI work?</b><br>, men skjuler ikke: <b>What does fair use mean?</b></string>
|
||||
@@ -302,6 +326,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_toast_invalid_common">Kan ikke bruge søgeord: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Tilføj tilbud for at bruge søgeord: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_conflicting">Nøgleord har modstridende erklæringer: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_length">Søgeordet er for kort og kræver anførselstegn: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_broad">Nøgleord vil skjule alle videoer: %s</string>
|
||||
</patch>
|
||||
<patch id="ad.general.hideAdsResourcePatch">
|
||||
@@ -309,7 +334,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_general_ads_summary_on">Generelle annoncer er skjult</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">Generelle annoncer vises</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Skjul fuldskærmsannoncer</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Fuldskærmsannoncer er skjult\n\nDenne funktion er kun tilgængelig for ældre enheder</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Fuldsskærmsannoncer er skjult
|
||||
|
||||
Denne funktion er kun tilgængelig for ældre enheder"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Fuldskærms annoncer vises</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">Skjul knapfyldte annoncer</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">Knappede annoncer er skjult</string>
|
||||
@@ -454,6 +481,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_thanks_button_summary_on">Tak knappen er skjult</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Tak knappen er vist</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Skjul klip</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Klip knappen er skjult</string>
|
||||
<string name="revanced_hide_clip_button_summary_off">Klip knappen er vist</string>
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
@@ -462,7 +490,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_playlist_button_summary_off">Gem i afspilningslisteknappen vises</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.navigation.navigationButtonsPatch">
|
||||
<string name="revanced_navigation_buttons_screen_title">Navigation buttons</string>
|
||||
<string name="revanced_navigation_buttons_screen_title">Navigationsknapper</string>
|
||||
<string name="revanced_navigation_buttons_screen_summary">Skjul eller skift knapper i navigationsbjælken</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the tab. -->
|
||||
<string name="revanced_hide_home_button_title">Skjul Hjem</string>
|
||||
@@ -482,14 +510,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Abonnementer knappen vises</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Skift Opret med notifikationer</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">Opret knap er skiftet med Notifikationsknappen\n\nBemærk: Aktivering af dette skjuler også med magt videoannoncer</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Opret-knappen er skiftet med knappen Meddelelser
|
||||
|
||||
Bemærk: Aktivering af dette skjuler også videoannoncer"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Opret knappen er ikke skiftet med Notifikationer knappen</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Skjul navigationsknappens etiketter</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Etiketter er skjult</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">Etiketter er vist</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
|
||||
<string name="revanced_hide_player_flyout_title">Flyout menu</string>
|
||||
<string name="revanced_hide_player_flyout_title">Udfyldningsmenu</string>
|
||||
<string name="revanced_hide_player_flyout_summary">Skjul eller vis spiller flyout menupunkter</string>
|
||||
<!-- 'Captions' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_captions_title">Skjul Billedtekster</string>
|
||||
@@ -560,7 +590,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Skjul slutskærmkort</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">End screen cards are hidden</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Slutskærmskortene er skjult</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Kort til slutskærm vises</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
@@ -587,6 +617,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_off">Miniaturesøgelinjen vises</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
|
||||
<string name="revanced_shorts_player_screen_title">Shorts-afspiller</string>
|
||||
<string name="revanced_shorts_player_screen_summary">Skjul eller vis komponenter i Shorts-afspilleren</string>
|
||||
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
<string name="revanced_hide_shorts_home_title">Skjul Shorts i hjemmefeed</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">Shorts i hjemmet feed er skjult</string>
|
||||
@@ -699,6 +731,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">Spiller popup paneler er skjult</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">Spiller popup paneler vises</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">Åbn videoer i fuldskærm portræt</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Videoer åbne fuld skærm</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Videoer åbner ikke fuld skærm</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">Spiller overlay gennemsigtighed</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">Gennemsigtighedsværdi mellem 0-100, hvor 0 er gennemsigtig</string>
|
||||
@@ -716,7 +753,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">Dislikationer vises ikke</string>
|
||||
<string name="revanced_ryd_shorts_title">Vis ikke på Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Dislikationer vist på Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">Dislikationer vist på Shorts\n\nBegrænsning: Dislikes vises muligvis ikke i inkognito-tilstand</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Dislikes vises på Shorts
|
||||
|
||||
Begrænsning: Dislikes vises muligvis ikke i inkognitotilstand"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Synes ikke skjult på Shorts</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Synes ikke som procent</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Dislikationer vist som procent</string>
|
||||
@@ -759,7 +798,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Seekbar miniaturer er af middel kvalitet</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Fuldskærmssøgerbar miniaturer er af høj kvalitet</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Fuldskærmssøgerbar miniaturer er af middel kvalitet</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">Dette vil også gendanne miniaturer på livestreams, der ikke har søgbar miniaturebilleder.\n\nSeekbar miniaturer vil bruge samme kvalitet som den aktuelle video.\n\nDenne funktion fungerer bedst med en videokvalitet på 720p eller lavere og ved brug af en meget hurtig internetforbindelse.</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Dette vil også gendanne miniaturebilleder på livestreams, der ikke har miniaturebilleder i søgefeltet.
|
||||
|
||||
Miniaturebilleder i søgefeltet bruger den samme kvalitet som den aktuelle video.
|
||||
|
||||
Denne funktion fungerer bedst med en videokvalitet på 720p eller lavere og ved brug af en meget hurtig internetforbindelse."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Gendan gamle miniaturer på søgelinjen</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Seekbar miniaturer vises over søgelinjen</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Seekbar miniaturer vises i fuld skærm</string>
|
||||
@@ -812,7 +855,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_uuid_invalid">Privat bruger-id skal være mindst 30 tegn langt</string>
|
||||
<string name="revanced_sb_general_api_url">Skift API-URL</string>
|
||||
<string name="revanced_sb_general_api_url_sum">Adressen SponsorBlock bruger til at foretage opkald til serveren</string>
|
||||
<string name="revanced_sb_api_url_reset">API URL reset</string>
|
||||
<string name="revanced_sb_api_url_reset">API-URL nulstillet</string>
|
||||
<string name="revanced_sb_api_url_invalid">API URL er ugyldig</string>
|
||||
<string name="revanced_sb_api_url_changed">API URL ændret</string>
|
||||
<string name="revanced_sb_settings_ie">Importér/eksport indstillinger</string>
|
||||
@@ -822,7 +865,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">Indstillinger importeret med succes</string>
|
||||
<string name="revanced_sb_settings_import_failed">Mislykkedes at importere: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">Mislykkedes at eksportere: %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">Dine indstillinger indeholder et privat SponsorBloker bruger-id.\n\nDit bruger-id er som en adgangskode, og det bør aldrig deles.\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Dine indstillinger indeholder et privat SponsorBlock-bruger-id.
|
||||
|
||||
Dit bruger-id er som en adgangskode, og det må aldrig deles.
|
||||
"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Vis ikke igen</string>
|
||||
<string name="revanced_sb_diff_segments">Ændr segmentadfærd</string>
|
||||
<string name="revanced_sb_segments_sponsor">Sponsor</string>
|
||||
@@ -833,13 +879,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_segments_interaction_sum">En kort påmindelse om at lide, abonnere eller følge dem midt i indholdet. Hvis den er lang eller om noget specifik, bør den i stedet være under selvforfremmelse</string>
|
||||
<string name="revanced_sb_segments_highlight">Fremhæv</string>
|
||||
<string name="revanced_sb_segments_highlight_sum">Den del af videoen, som de fleste mennesker er på udkig efter</string>
|
||||
<string name="revanced_sb_segments_intro">Intermission/Intro Animation</string>
|
||||
<string name="revanced_sb_segments_intro">Pause/Intro-animation</string>
|
||||
<string name="revanced_sb_segments_intro_sum">Et interval uden reelt indhold. Kunne være en pause, statisk ramme eller gentagelse af animation. Omfatter ikke overgange indeholdende information</string>
|
||||
<string name="revanced_sb_segments_outro">Slutkort/Kredit</string>
|
||||
<string name="revanced_sb_segments_outro_sum">Medvirkende eller når YouTube-endcards vises. Ikke for konklusioner med information</string>
|
||||
<string name="revanced_sb_segments_preview">Forhåndsvisning/Genoptag/Krog</string>
|
||||
<string name="revanced_sb_segments_preview_sum">Indsamling af klip, der viser, hvad der kommer op, eller hvad der skete i videoen eller i andre videoer af en serie, hvor alle oplysninger gentages andetsteds</string>
|
||||
<string name="revanced_sb_segments_filler">Filler Tangent/Jokes</string>
|
||||
<string name="revanced_sb_segments_filler">Fyldstof-tangent/jokes</string>
|
||||
<string name="revanced_sb_segments_filler_sum">Tangential scener tilføjet kun for fyldstof eller humor, der ikke er forpligtet til at forstå hovedindholdet af videoen. Omfatter ikke segmenter, der giver kontekst- eller baggrundsoplysninger</string>
|
||||
<string name="revanced_sb_segments_nomusic">Musik: Ikke-Musik Sektion</string>
|
||||
<string name="revanced_sb_segments_nomusic_sum">Kun til brug i musikvideoer. Sektioner af musikvideoer uden musik, der ikke allerede er dækket af en anden kategori</string>
|
||||
@@ -852,14 +898,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_skip_button_intro_beginning">Spring intro over</string>
|
||||
<string name="revanced_sb_skip_button_intro_middle">Spring intermission over</string>
|
||||
<string name="revanced_sb_skip_button_intro_end">Spring intermission over</string>
|
||||
<string name="revanced_sb_skip_button_outro">Skip outro</string>
|
||||
<string name="revanced_sb_skip_button_outro">Spring outro over</string>
|
||||
<string name="revanced_sb_skip_button_preview_beginning">Spring forhåndsvisning over</string>
|
||||
<string name="revanced_sb_skip_button_preview_middle">Spring forhåndsvisning over</string>
|
||||
<string name="revanced_sb_skip_button_preview_end">Spring resumé over</string>
|
||||
<string name="revanced_sb_skip_button_filler">Spring filler over</string>
|
||||
<string name="revanced_sb_skip_button_nomusic">Spring over ikke-musik</string>
|
||||
<string name="revanced_sb_skip_button_unsubmitted">Overspring segment</string>
|
||||
<string name="revanced_sb_skipped_sponsor">sponsor sprunget over</string>
|
||||
<string name="revanced_sb_skipped_sponsor">Sponsor sprunget over</string>
|
||||
<string name="revanced_sb_skipped_selfpromo">Selv-forfremmelse sprunget over</string>
|
||||
<string name="revanced_sb_skipped_interaction">Sprunget over irriterende påmindelse</string>
|
||||
<string name="revanced_sb_skipped_highlight">Sprunget over for at fremhæve</string>
|
||||
@@ -882,9 +928,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">Kan ikke indsende segment: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock er midlertidigt nede</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">Kan ikke indsende segment (status: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Kan ikke indsende segment.\nRate Limited (for mange fra samme bruger eller IP)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Kan ikke indsende segment. Hastighedsbegrænset (for mange fra den samme bruger eller IP-adresse)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">Kan ikke indsende segmentet: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">Kan ikke indsende segmentet.\nfindes allerede</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"Kan ikke indsende segmentet.
|
||||
Eksisterer allerede"</string>
|
||||
<string name="revanced_sb_submit_succeeded">Segment indsendt med succes</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBloker midlertidigt ikke tilgængelig (API-tid ud)</string>
|
||||
@@ -893,8 +940,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_vote_failed_timeout">Kan ikke stemme på segment (API-timede ud)</string>
|
||||
<string name="revanced_sb_vote_failed_unknown_error">Kan ikke stemme på segment (status: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_vote_failed_forbidden">Ikke i stand til at stemme på segmentet: %s</string>
|
||||
<string name="revanced_sb_vote_upvote">Upvote</string>
|
||||
<string name="revanced_sb_vote_downvote">Downvote</string>
|
||||
<string name="revanced_sb_vote_upvote">Op</string>
|
||||
<string name="revanced_sb_vote_downvote">Ned</string>
|
||||
<string name="revanced_sb_vote_category">Skift kategori</string>
|
||||
<string name="revanced_sb_vote_no_segments">Der er ingen segmenter at stemme for</string>
|
||||
<string name="revanced_sb_new_segment_choose_category">Vælg segmentkategori</string>
|
||||
@@ -907,7 +954,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">Tidspunkt for segmentet begynder på</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Tidspunkt for segmentet slutter på</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Er tiderne korrekte?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">Segmentet er fra\n\n%1$s\ntil\n%2$s\n\n(%3$s)\n\nKlar til at indsende?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"Segmentet er fra
|
||||
|
||||
%1$s
|
||||
til
|
||||
%2$s
|
||||
|
||||
(%3$s)
|
||||
|
||||
Er du klar til at indsende?"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">Start skal være før slutningen</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">Markér to steder på tidsbjælken først</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">Forhåndsvisning af segmentet, og sikre, at det springer glat</string>
|
||||
@@ -946,10 +1001,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_about_api_sum">Data leveres af SponsorBlock API. Tryk her for at få flere oplysninger og se downloads til andre platforme</string>
|
||||
</patch>
|
||||
<patch id="layout.spoofappversion.spoofAppVersionPatch">
|
||||
<string name="revanced_spoof_app_version_title">Spoof app version</string>
|
||||
<string name="revanced_spoof_app_version_title">Spoof app-version</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">Version spoofed</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">Version ikke spoofed</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">App version vil blive spoofed til en ældre version af YouTube.\n\nDette vil ændre udseendet og funktionerne i appen, men der kan forekomme ukendte bivirkninger.\n\nHvis senere slået fra, anbefales det at rydde app-data for at forhindre UI-fejl.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"App-versionen forfalskes til en ældre version af YouTube.
|
||||
|
||||
Dette ændrer appens udseende og funktioner, men ukendte bivirkninger kan forekomme.
|
||||
|
||||
Hvis det senere slås fra, anbefales det at rydde app-dataene for at forhindre UI-fejl."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Spoof app version mål</string>
|
||||
@@ -980,9 +1039,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||
<string name="revanced_disable_resuming_shorts_player_title">Deaktivér genoptagelse af Shorts spiller</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Shorts-afspilleren genoptages ikke ved app-start</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Kortspilleren vil genoptage ved app-opstart</string>
|
||||
</patch>
|
||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||
<string name="revanced_shorts_autoplay_title">Automatisk afspilning af Shorts</string>
|
||||
<string name="revanced_shorts_autoplay_summary_on">Shorts afspilles automatisk</string>
|
||||
<string name="revanced_shorts_autoplay_summary_off">Shorts gentages</string>
|
||||
<string name="revanced_shorts_autoplay_background_title">Automatisk afspilning af Shorts i baggrunden</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_on">Shorts i baggrunden afspilles automatisk</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_off">Shorts i baggrunden gentages</string>
|
||||
</patch>
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
<string name="revanced_tablet_layout_title">Aktivér tabletlayout</string>
|
||||
@@ -991,11 +1057,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_tablet_layout_user_dialog_message">Fællesskabsindlæg vises ikke på tabletlayouts</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_screen_title">Miniplayer</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Ændre stilen for den i app minimeret afspiller</string>
|
||||
<string name="revanced_miniplayer_type_title">Type af miniplayer</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Deaktiveret</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Oprindelig</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Standard</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimal</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderne 1</string>
|
||||
@@ -1005,19 +1070,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Hjørner er afrundede</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Hjørner er firkantede</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Aktiver dobbelttryk og klemme for at ændre størrelse</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">Dobbelttryk handling og klemme for at ændre størrelse er aktiveret\n\n• Dobbelttryk for at øge miniplayer størrelse\n• Dobbelttryk igen for at gendanne original størrelse</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Dobbelttrykshandling og knib for at ændre størrelse er aktiveret
|
||||
|
||||
● Dobbelttryk for at øge miniafspillerstørrelsen
|
||||
● Dobbelttryk igen for at gendanne den oprindelige størrelse"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Dobbelttryk handling og klemme for at ændre størrelse er deaktiveret</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Aktiver træk og slip</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">Træk og slip er aktiveret\n\nMiniplayer kan trækkes til ethvert hjørne af skærmen</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Træk og slip er aktiveret
|
||||
|
||||
Miniafspiller kan trækkes til et hvilket som helst hjørne af skærmen"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Træk og slip er deaktiveret</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Aktiver vandret træk-bevægelse</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">Vandret træk gestus aktiveret\n\nMiniplayer kan trækkes fra skærmen til venstre eller højre</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Vandret træk-bevægelse aktiveret
|
||||
|
||||
Miniafspiller kan trækkes ud over skærmen til venstre eller højre"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Vandret trækbevægelse deaktiveret</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">Skjul lukkeknap</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">Luk knappen er skjult</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">Luk knappen vises</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Skjul udvid og luk knapper</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">Knapper er skjult\n\nStryg for at udvide eller lukke</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"Knapper er skjult
|
||||
|
||||
Stryg for at udvide eller lukke"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Udvid og luk knapper vises</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Skjul undertekster</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Undertekster er skjult</string>
|
||||
@@ -1048,7 +1122,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">Bypass billede region restriktioner</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">Bruger billedvært yt4.ggpht.com</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">Brug af original billedvært\n\nAktivering af dette kan rette manglende billeder, der er blokeret i nogle regioner</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"Bruger original billedevært
|
||||
|
||||
Aktivering af dette kan løse manglende billeder, der er blokeret i nogle regioner"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -1059,15 +1135,19 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_library_title">Dig fane</string>
|
||||
<string name="revanced_alt_thumbnail_player_title">Afspiller afspilningslister, anbefalinger</string>
|
||||
<string name="revanced_alt_thumbnail_search_title">Søgeresultater</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_1">Original thumbnails</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_1">Originale miniaturebilleder</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & Originale miniaturer</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow & stadig fanger</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">Fangster stadig</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow giver crowd-sourcede miniaturer til YouTube-videoer. Disse miniaturer er ofte mere relevante end dem, YouTube\n\nHvis aktiveret, video URL\'er vil blive sendt til API-serveren og ingen andre data bliver sendt. Hvis en video ikke har miniaturer til DeArrow, så er de originale eller stadig optagelser vist\n\nTryk her for at få mere at vide om DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow leverer crowdsourcede miniaturebilleder til YouTube-videoer. Disse miniaturebilleder er ofte mere relevante end dem, der er tilgængelige fra YouTube
|
||||
|
||||
Hvis aktiveret, sendes videolinks til API-serveren, og ingen andre data sendes. Hvis en video ikke har DeArrow-miniaturebilleder, vises de originale eller stillbilleder
|
||||
|
||||
Tryk her for at lære mere om DeArrow"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Vis en toast hvis API ikke er tilgængelig</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Toast vises hvis DeArrow ikke er tilgængelig</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Toast er ikke vist hvis DeArrow ikke er tilgængelig</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_title">DeArrow API endpoint</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_title">DeArrow API-slutpunkt</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">Webadressen på DeArrow thumbnail cache endpoint</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_title">Stadig video indfanger</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_summary">Stadig optagelser er taget fra begyndelsen / midten / slutningen af hver video. Disse billeder er indbygget i YouTube og ingen ekstern API bruges</string>
|
||||
@@ -1102,8 +1182,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Spoof enhedens dimensioner</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">Enhedsmål spoofed\n\nHøjere video kvaliteter kan låses op, men du kan opleve videoafspilning stuttering, værre batterilevetid og ukendte bivirkninger</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Enheds dimensioner ikke forfalsket\n\nAktivering af dette kan låse op for højere videokvaliteter</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Enhedens dimensioner er forfalsket
|
||||
|
||||
Højere videokvalitet kan låses op, men du kan opleve videoafspilningshakkethed, dårligere batterilevetid og ukendte bivirkninger"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"Enhedens dimensioner forfalskes ikke
|
||||
|
||||
Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Aktivering af dette kan forårsage videoafspilning stuttering, værre batterilevetid og ukendte bivirkninger.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1139,7 +1223,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_video_quality_default_wifi_title">Standard videokvalitet på Wi-Fi-netværk</string>
|
||||
<string name="revanced_video_quality_default_mobile_title">Standard videokvalitet på mobilnetværk</string>
|
||||
<string name="revanced_remember_video_quality_mobile">mobil</string>
|
||||
<string name="revanced_remember_video_quality_wifi">wifi</string>
|
||||
<string name="revanced_remember_video_quality_toast">Ændrede standard %1$s kvalitet til: %2$s</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
@@ -1153,8 +1236,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_speed_menu_summary_off">Brugerdefineret hastighedsmenu vises ikke</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Tilpasset afspilningshastighed</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Tilføj eller ændr den brugerdefinerede afspilningshastighed</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Brugerdefinerede hastigheder skal være mindre end %s. Bruger standardværdier.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Ugyldig brugerdefineret afspilningshastighed. Brug af standardværdier.</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Brugerdefinerede hastigheder skal være mindre end %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Ugyldige brugerdefinerede afspilningshastigheder</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Automatisk</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1175,22 +1258,83 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<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_screen_title">Spoof video streams</string>
|
||||
<string name="revanced_spoof_video_streams_screen_title">Spoof videostreams</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Spoof klienten video streams for at forhindre afspilning problemer</string>
|
||||
<string name="revanced_spoof_video_streams_title">Spoof video streams</string>
|
||||
<string name="revanced_spoof_video_streams_title">Spoof videostreams</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">Video streams er spoofed</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">Videostreams er ikke forfalskede\n\nVideoafspilning fungerer muligvis ikke</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"Videostreams forfalskes ikke
|
||||
|
||||
Videoafspilning virker muligvis ikke"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">At slå denne indstilling fra kan forårsage problemer med videoafspilning.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">Standard klient</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Gennemtving AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video codec er AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video-codec er VP9 eller AV1</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Din enhed har ikke VP9 hardwareafkodning, og denne indstilling er altid tændt, når Client spoofing er aktiveret</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Aktivering af dette kan forbedre batteriets levetid og rette afspilningsstuttering.\n\nAVC har en maksimal opløsning på 1080p, og videoafspilning vil bruge flere internetdata end VP9 eller AV1.</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video-codec er tvunget til AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video-codec bestemmes automatisk</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Aktivering af dette kan forbedre batterilevetiden og løse afspilningshakkethed.
|
||||
|
||||
AVC har en maksimal opløsning på 1080p, Opus lydcodec er ikke tilgængelig, og videoafspilning bruger mere internetdata end VP9 eller AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS forfalskning bivirkninger</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">• Private børn videoer kan ikke afspille\n• Livestreams starter fra begyndelsen\n• Videoer kan ende 1 sekund tidlig\n• Ingen opus audio codec</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Private børnevideoer kan ikke afspilles
|
||||
• Livestreams starter fra begyndelsen
|
||||
• Videoer slutter 1 sekund tidligere"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR spoofing bivirkninger</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Kids videoer afspiller muligvis ikke\n• Menuen for lydspor mangler\n• Stabil lydstyrke er ikke tilgængelig</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Børnevideoer kan ikke afspilles
|
||||
• Livestreams starter fra begyndelsen
|
||||
• Videoer slutter 1 sekund tidligere"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">Standard lyd-stream sprog</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">App sprog</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">Arabisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">Aserbajdsjansk</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">Bulgarsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">Bengalsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">Catalansk</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">Tjekkisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">Dansk</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">Tysk</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">Græsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">Engelsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">Spansk</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">Estisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">Persisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">Finsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">Fransk</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">Gujarati</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">Hindi</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">Kroatisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">Ungarsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">Indonesisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">Italiensk</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Japansk</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">Kasakhisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">Koreansk</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">Litauisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">Lettisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">Makedonsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">Mongolsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">Marathisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">Malaysisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">Burmesisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">Hollandsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">Odia</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">Punjabi</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">Polsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">Portugisisk (Brasilien)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">Portugisisk (Portugal)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Rumænsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Russisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">Slovakisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">Slovensk</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">Serbisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">Svensk</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">Swahili</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">Tamil</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">Telugu</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">Thailandsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">Tyrkisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">Ukrainsk</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">Urdu</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">Vietnamesisk</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">Kinesisk</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1200,12 +1344,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">Lydannoncer er ublokeret</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s er ikke tilgængelig. Annoncer kan vises. Prøv at skifte til en anden annonceblok tjeneste i indstillinger.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s server returnerede en fejl. Annoncer kan vises. Prøv at skifte til en anden annonceblok tjeneste i indstillinger.</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s er ikke tilgængelig, annoncer vises muligvis. Prøv at skifte annonceblokeringstjeneste i indstillinger.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s returnerede en fejl, annoncer vises muligvis. Prøv at skifte annonceblokeringstjeneste i indstillinger.</string>
|
||||
<string name="revanced_block_embedded_ads_title">Bloker indlejrede videoannoncer</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">Deaktiveret</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Lysende 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">Blokér videoannoncer</string>
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -44,7 +33,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">APK-Erstellungsdatum ist beschädigt</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_title">ReVanced</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Möchtest du fortfahren?</string>
|
||||
<string name="revanced_settings_reset">Zurücksetzen</string>
|
||||
<string name="revanced_settings_restart_title">Aktualisieren und neu starten</string>
|
||||
@@ -68,9 +56,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore ist nicht installiert. Installiers.</string>
|
||||
<string name="gms_core_dialog_title">Aktion notwendig</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore hat keine Berechtigung im Hintergrund zu laufen.\n\nFolge dem Leitfaden \"Don\'t kill my app\" für dein Telefon und wende die Anweisungen auf deine MicroG-Installation an.\n\nDies ist erforderlich, damit die App funktioniert.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore hat keine Berechtigung, im Hintergrund zu laufen.
|
||||
Folgen Sie der Anleitung \"Meine App nicht beenden\" für Ihr Telefon und wenden Sie die Anweisungen auf Ihre MicroG-Installation an.
|
||||
Dies ist erforderlich, damit die App funktioniert."</string>
|
||||
<string name="gms_core_dialog_open_website_text">Webseite öffnen</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">MicroG GmsCore Batterieoptimierungen müssen deaktiviert werden, um Probleme zu vermeiden.\n\nTippe auf den Weiter-Button und deaktiviere die Batterieoptimierung.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"Die Batterieoptimierung von MicroG GmsCore muss deaktiviert werden, um Probleme zu vermeiden.
|
||||
Die Deaktivierung der Batterieoptimierung für MicroG hat keinen negativen Einfluss auf den Batterieverbrauch.
|
||||
Tippen Sie auf die Schaltfläche \"Fortfahren\" und erlauben Sie die Optimierungsänderungen."</string>
|
||||
<string name="gms_core_dialog_continue_text">Weiter</string>
|
||||
</patch>
|
||||
</app>
|
||||
@@ -107,7 +99,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">Toast bei ReVanced Fehler anzeigen</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Toast wird angezeigt, wenn ein Fehler auftritt</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Toast wird nicht angezeigt, wenn ein Fehler auftritt</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">Das Deaktivieren von Fehlertoasts verbirgt alle ReVanced Fehlerbenachrichtigungen.\n\nDu wirst nicht über unerwartete Ereignisse benachrichtigt.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Das Ausschalten von Fehler-Toasts blendet alle Benachrichtigungen über Fehler in ReVanced aus.
|
||||
Sie werden nicht über unerwartete Ereignisse informiert."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Deaktiviere das Like / Abonnieren Button aufleuchten</string>
|
||||
@@ -126,7 +119,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Wasserzeichen ist ausgeblendet</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Wasserzeichen wird angezeigt</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">Horizontale Reihe ausblenden</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">Videoreihen sind ausgeblendet, zum Beispiel:\n•Eilmeldungen\n• Fortsetzen\n• weitere Kanäle erkunden\n• Einkaufen\n• gesehenes wiederholen</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"Regale sind ausgeblendet, wie z. B.:
|
||||
• Eilmeldungen
|
||||
• Weiterschauen
|
||||
• Weitere Kanäle erkunden
|
||||
• Shopping
|
||||
• Nochmal ansehen"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Reihen werden angezeigt</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -253,6 +251,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">In verwandten Videos angezeigt</string>
|
||||
<string name="revanced_comments_screen_title">Kommentare</string>
|
||||
<string name="revanced_comments_screen_summary">Komponenten der Kommentar-Sektion ausblenden oder anzeigen</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">\'Chat-Zusammenfassung\' ausblenden </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">\'Chat-Übersichtsanzeige\' ist ausgeblendet</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">\'Chat-Übersichtsanzeige\' wird angezeigt</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">\'Kommentare von Mitglieder\' im Kopfbereich ausblenden</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">\'Kommentare von Mitglieder\' Header ist ausgeblendet</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">\'Kommentare von Mitgliedern\' wird angezeigt</string>
|
||||
@@ -275,7 +276,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles ausblenden</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Suchleiste Doodles sind versteckt</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Suchleiste Doodles werden angezeigt</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">YouTube Doodles erscheinen jedes Jahr ein paar Tage.\n\nWenn ein Doodle in deiner Region angezeigt wird und diese Versteckeinstellung aktiviert ist dann wird auch die Filterleiste unterhalb der Suchleiste ausgeblendet.</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"YouTube-Doodles werden ein paar Tage im Jahr angezeigt.
|
||||
Wenn ein Doodle zurzeit in Ihrer Region angezeigt wird und diese Einstellung zum Ausblenden aktiviert ist, wird auch die Filterleiste unterhalb der Suchleiste ausgeblendet."</string>
|
||||
<string name="revanced_custom_filter_screen_title">Eigener Filter</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Komponenten mit benutzerdefinierten Filtern ausblenden</string>
|
||||
<string name="revanced_custom_filter_title">Eigenen Filter aktivieren</string>
|
||||
@@ -299,9 +301,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">Zu versteckende Stichwörter</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">Stichwörter und zu versteckende Phrasen durch neue Zeilen\n\ngetrennte Schlüsselwörter können Kanalnamen oder beliebiger Text sein, der in den Videotiteln\n\nWörter mit Großbuchstaben in der Mitte angezeigt werden muss mit dem Gehäuse eingegeben werden (z.B. iPhone, TikTok, LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"Stichwörter und Ausdrücke, die ausgeblendet werden sollen, durch neue Zeilen getrennt
|
||||
|
||||
Stichwörter können Kanalnamen oder alle Texte sein, die in Videobeschreibungen angezeigt werden
|
||||
|
||||
Wörter mit Großbuchstaben in der Mitte müssen mit der Groß- und Kleinschreibung eingegeben werden (z. B.: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">Über Keyword-Filterung</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">Home/Abonnement/Suchergebnisse werden gefiltert, um Inhalte zu verstecken, die den Schlüsselwörtern\n\nBeschränkungen\nentsprechen • Shorts können nicht mit dem Kanalnamen\nversteckt werden • Einige UI-Komponenten können nicht versteckt werden\n• Suche nach einem Stichwort kann keine Ergebnisse zeigen</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"Startseite/Abonnements/Suchergebnisse werden gefiltert, um Inhalte auszublenden, die mit Stichwortphrasen übereinstimmen
|
||||
|
||||
Einschränkungen
|
||||
• Shorts können nicht nach Kanalnamen ausgeblendet werden
|
||||
• Einige UI-Komponenten können nicht ausgeblendet werden
|
||||
• Die Suche nach einem Stichwort kann zu keinen Ergebnissen führen"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Ganze Wörter abgleichen</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">Durch das Umschließen mit doppelten Anführungszeichen wird verhindert, dass teilweise Videotitel und Kanalnamen<br><br><br><b>\"ai\"</b> wird das Video ausblenden: <b>How does AI work?</b><br>aber nicht versteckt: <b>What does fair use mean?</b></string>
|
||||
@@ -317,7 +328,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_general_ads_summary_on">Allgemeine Anzeigen sind ausgeblendet</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">Allgemeine Anzeigen werden angezeigt</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Vollbild-Werbung ausblenden</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Vollbild-Anzeigen sind ausgeblendet\n\nDiese Funktion ist nur für ältere Geräte verfügbar</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Vollbildwerbung wird ausgeblendet
|
||||
|
||||
Diese Funktion ist nur für ältere Geräte verfügbar"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Vollbild-Anzeigen werden angezeigt</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">Verknüpfte Werbung ausblenden</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">Verknüpfte Anzeigen sind ausgeblendet</string>
|
||||
@@ -419,7 +432,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">Auto-Helligkeit Geste aktivieren</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Wische runter auf den niedrigsten Wert der Helligkeitsgeste, um die automatische Helligkeit zu aktivieren</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">Wenn man zum niedrigsten Wert wischt, aktiviert man die automatische Helligkeit nicht</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Auto</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">Automatik</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Wischüberlagerungs-Timeout</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">Die Anzahl der Millisekunden, die das Overlay sichtbar ist</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">Wischüberlagerung Textgröße</string>
|
||||
@@ -462,7 +475,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_thanks_button_summary_on">Dankeschön-Taste ist ausgeblendet</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Dankeschön Button wird angezeigt</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Hide Clip</string>
|
||||
<string name="revanced_hide_clip_button_title">Clip ausblenden</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Clip-Button ist ausgeblendet</string>
|
||||
<string name="revanced_hide_clip_button_summary_off">Clip-Taste wird angezeigt</string>
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
@@ -471,7 +484,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_playlist_button_summary_off">In Wiedergabeliste speichern wird angezeigt</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.navigation.navigationButtonsPatch">
|
||||
<string name="revanced_navigation_buttons_screen_title">Navigation buttons</string>
|
||||
<string name="revanced_navigation_buttons_screen_title">Navigationstasten</string>
|
||||
<string name="revanced_navigation_buttons_screen_summary">Verstecke oder ändere Schaltflächen in der Navigationsleiste</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the tab. -->
|
||||
<string name="revanced_hide_home_button_title">Haus ausblenden</string>
|
||||
@@ -491,14 +504,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Abonnement-Button wird angezeigt</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Tauscht Erstellen mit Benachrichtigungen</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">Erstellen-Button wird mit Benachrichtigungs-Button getauscht\n\nHinweis: Aktivieren versteckt Video-Anzeigen</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Die Schaltfläche \"Erstellen\" wird mit der Schaltfläche \"Benachrichtigungen\" vertauscht
|
||||
|
||||
Hinweis: Durch Aktivieren dieser Option wird auch die Videowerbung zwangsweise ausgeblendet"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Erstellen-Button ist nicht mit Benachrichtigungs-Button getauscht</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Navigationstastenbezeichnungen ausblenden</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Labels sind ausgeblendet</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">Labels werden angezeigt</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
|
||||
<string name="revanced_hide_player_flyout_title">Flyout menu</string>
|
||||
<string name="revanced_hide_player_flyout_title">Einblendmenü</string>
|
||||
<string name="revanced_hide_player_flyout_summary">Verstecke oder zeige Player-Flyout-Menüeinträge</string>
|
||||
<!-- 'Captions' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_captions_title">Bildunterschriften ausblenden</string>
|
||||
@@ -710,6 +725,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">Player-Popup-Fenster sind ausgeblendet</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">Player-Popup-Fenster werden angezeigt</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">Videos im Vollbild-Hochformat öffnen</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Videos im Vollbild öffnen</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Videos öffnen nicht Vollbild</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">Spieler-Überlagerung Deckkraft</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">Deckkraft Wert zwischen 0-100, wobei 0 transparent ist</string>
|
||||
@@ -727,7 +747,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">Dislikes werden nicht angezeigt</string>
|
||||
<string name="revanced_ryd_shorts_title">Dislikes auf Shorts anzeigen</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Dislikes auf Shorts angezeigt</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">Dislikes in Shorts\n\nLimitation: Dislikes können nicht im Inkognito-Modus angezeigt werden</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Dislikes werden in Shorts angezeigt
|
||||
|
||||
Einschränkung: Dislikes werden möglicherweise nicht im Inkognito-Modus angezeigt"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Dislikes auf Shorts ausgeblendet</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Ablehnt als Prozentsatz</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Dislikes als Prozentsatz angezeigt</string>
|
||||
@@ -770,7 +792,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Thumbnails in der Suchleiste sind mittlere Qualität</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Thumbnails in der Suchleiste sind qualitativ hochwertig</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Thumbnails in der Suchleiste sind mittlere Qualität</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">Dadurch werden auch Thumbnails auf Livestreams wiederhergestellt, die keine Suchleisten-Thumbnails haben.\n\nSuchleisten-Thumbnails verwenden die gleiche Qualität wie das aktuelle Video.\n\nDiese Funktion funktioniert am besten mit einer Videoqualität von 720p oder niedriger und bei einer sehr schnellen Internetverbindung.</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Dadurch werden auch Miniaturansichten in Livestreams wiederhergestellt, die keine Miniaturansichten mit Suchleiste haben.
|
||||
|
||||
Miniaturansichten mit Suchleiste verwenden die gleiche Qualität wie das aktuelle Video.
|
||||
|
||||
Diese Funktion funktioniert am besten mit einer Videoqualität von 720p oder niedriger und bei Verwendung einer sehr schnellen Internetverbindung."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Alte Suchleisten-Thumbnails wiederherstellen</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Suchleisten-Thumbnails werden über der Suchleiste angezeigt</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Miniaturansichten werden im Vollbild angezeigt</string>
|
||||
@@ -833,7 +859,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">Einstellungen erfolgreich importiert</string>
|
||||
<string name="revanced_sb_settings_import_failed">Import fehlgeschlagen: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">Export fehlgeschlagen: %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">Ihre Einstellungen enthalten einen privaten SponsorBlock Benutzer.\n\nIhre Benutzer-ID ist wie ein Passwort und sollte nie geteilt werden.\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Ihre Einstellungen enthalten eine private SponsorBlock-Benutzer-ID.
|
||||
|
||||
Ihre Benutzer-ID ist wie ein Passwort und sollte niemals weitergegeben werden.
|
||||
"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Nicht wieder anzeigen</string>
|
||||
<string name="revanced_sb_diff_segments">Segmentverhalten ändern</string>
|
||||
<string name="revanced_sb_segments_sponsor">Sponsor</string>
|
||||
@@ -863,7 +892,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_skip_button_intro_beginning">Einleitung überspringen</string>
|
||||
<string name="revanced_sb_skip_button_intro_middle">Unterbrechung überspringen</string>
|
||||
<string name="revanced_sb_skip_button_intro_end">Unterbrechung überspringen</string>
|
||||
<string name="revanced_sb_skip_button_outro">Skip outro</string>
|
||||
<string name="revanced_sb_skip_button_outro">Überspringen</string>
|
||||
<string name="revanced_sb_skip_button_preview_beginning">Vorschau überspringen</string>
|
||||
<string name="revanced_sb_skip_button_preview_middle">Vorschau überspringen</string>
|
||||
<string name="revanced_sb_skip_button_preview_end">Rückfall überspringen</string>
|
||||
@@ -893,9 +922,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">Segment kann nicht gesendet werden: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock ist vorübergehend nicht verfügbar</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">Segment kann nicht gesendet werden (Status: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Segment kann nicht gesendet werden.\nRate limitiert (zu viele von demselben Benutzer oder IP)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Segment kann nicht übermittelt werden. Rate Limited (zu viele vom selben Benutzer oder der gleichen IP)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">Das Segment kann nicht gesendet werden: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">Segment kann nicht abgesendet werden. \nBereits vorhanden</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"Segment kann nicht übermittelt werden.
|
||||
Existiert bereits"</string>
|
||||
<string name="revanced_sb_submit_succeeded">Segment erfolgreich übertragen</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock vorübergehend nicht verfügbar (API Timeout)</string>
|
||||
@@ -918,7 +948,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">Das Segiment beginnt ab</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Das Segiment endet bei</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Sind diese Zeiten richtig?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">Das Segment ist von\n\n\n%1$s\nbis\n%2$s\n\n(%3$s)\n\nBereit zum Absenden?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"Das Segment ist von
|
||||
|
||||
%1$s
|
||||
nach
|
||||
%2$s
|
||||
|
||||
(%3$s)
|
||||
|
||||
Bereit zum Einreichen?"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">Start muss vor dem Ende sein</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">Markieren sie zuerst zwei Punkte auf der Zeitleiste</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">Vorschau des Segments und sorgt dafür, dass es reibungslos überspringt</string>
|
||||
@@ -960,7 +998,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">Spoof-App-Version</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">Version gefälscht</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">Version nicht gefälscht</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">Die App-Version wird auf eine ältere Version von YouTube gefälscht.\n\nDies ändert das Aussehen und die Funktionen der App, aber es können unbekannte Nebeneffekte auftreten.\n\nWenn später ausgeschaltet ist, wird empfohlen, die App-Daten zu löschen, um UI-Fehler zu vermeiden.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"Die App-Version wird zu einer älteren Version von YouTube gefälscht.
|
||||
|
||||
Dadurch ändert sich das Erscheinungsbild und die Funktionen der App, es können jedoch unbekannte Nebeneffekte auftreten.
|
||||
|
||||
Wenn Sie die Funktion später deaktivieren, wird empfohlen, die App-Daten zu löschen, um UI-Fehler zu vermeiden."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Spoof-App-Versionsziel</string>
|
||||
@@ -995,7 +1037,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Shorts-Player wird beim Start der App fortgesetzt</string>
|
||||
</patch>
|
||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||
<string name="revanced_shorts_autoplay_title">Autoplay Shorts</string>
|
||||
<string name="revanced_shorts_autoplay_title">Shorts automatisch abspielen</string>
|
||||
<string name="revanced_shorts_autoplay_summary_on">Shorts werden autoplay</string>
|
||||
<string name="revanced_shorts_autoplay_summary_off">Shorts wiederholen</string>
|
||||
<string name="revanced_shorts_autoplay_background_title">Autoplay Shorts Hintergrund spielen</string>
|
||||
@@ -1009,11 +1051,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_tablet_layout_user_dialog_message">Community-Beiträge werden nicht auf Tablet Layouts angezeigt</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_screen_title">Miniplayer</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Ändere den Stil des in App minimierten Players</string>
|
||||
<string name="revanced_miniplayer_type_title">Minispielertyp</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Deaktiviert</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Original</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Standard</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimal</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablets</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Modern 1</string>
|
||||
@@ -1023,19 +1064,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Ecken sind abgerundet</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Ecken sind Quadrat</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Aktiviere doppeltes Tippen und Pratzen um die Größe zu ändern</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">Doppeltipp-Aktion und Pinsel, um die Größe zu verändern, ist aktiviert\n\n• Doppeltippen, um die Größe des Miniplayers\nzu erhöhenformat@@2 • Doppeltippen erneut, um die Originalgröße wiederherzustellen</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Doppeltippen und mit zwei Fingern vergrößern/verkleinern ist aktiviert
|
||||
|
||||
• Doppeltippen, um die Größe des Mini-Players zu vergrößern
|
||||
• Nochmals doppeltippen, um die ursprüngliche Größe wiederherzustellen"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Doppel-Tipp-Aktion und Pinch um die Größe zu verändern, ist deaktiviert</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Drag and Drop aktivieren</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">Drag and Drop ist aktiviert\n\nMiniplayer kann in jede Ecke des Bildschirms gezogen werden</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Drag-and-Drop ist aktiviert
|
||||
|
||||
Der Mini-Player kann in jede Ecke des Bildschirms gezogen werden"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Drag and Drop ist deaktiviert</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Horizontales Ziehen aktivieren</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">Horizontale Drag Geste aktiviert\n\nMiniplayer kann vom Bildschirm nach links oder rechts gezogen werden</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Horizontale Ziehgeste aktiviert
|
||||
|
||||
Der Mini-Player kann mit einer Wischgeste vom Bildschirm nach links oder rechts gezogen werden"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Horizontale Drag Geste deaktiviert</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">Schließen-Button ausblenden</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">Schließen-Button ist ausgeblendet</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">Schließen-Schaltfläche wird angezeigt</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Ausklappen und Schließen der Tasten ausblenden</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">Tasten sind ausgeblendet\n\nWischen um zu erweitern oder zu schließen</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"Schaltflächen sind ausgeblendet
|
||||
|
||||
Wischen Sie, um zu erweitern oder zu schließen"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Erweitern und Schließen Tasten werden angezeigt</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Untertexte ausblenden</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Subtexte sind ausgeblendet</string>
|
||||
@@ -1066,7 +1116,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">Bildgebietsbeschränkungen umgehen</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">Bild-Host yt4.ggpht.com verwenden</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">Verwendung des ursprünglichen Bild-Hosts\n\nAktivieren kann fehlende Bilder beheben, die in einigen Regionen blockiert werden</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"Ursprünglicher Bildhost wird verwendet
|
||||
|
||||
Durch Aktivieren dieser Option können fehlende Bilder behoben werden, die in einigen Regionen blockiert sind"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -1077,15 +1129,19 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_library_title">Tab</string>
|
||||
<string name="revanced_alt_thumbnail_player_title">Playlisten, Empfehlungen</string>
|
||||
<string name="revanced_alt_thumbnail_search_title">Suchergebnisse</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_1">Original thumbnails</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_1">Original-Miniaturansichten</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">Pfeil & Original-Miniaturansichten</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">Pfeil & immer noch erfasst</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">Noch Aufnahmen</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow bietet Crowd-sourced Thumbnails für YouTube-Videos an. Diese Vorschaubilder sind oft relevanter als die von YouTube.\n\nWenn aktiviert, werden Video-URLs an den API-Server gesendet und keine anderen Daten. Wenn ein Video keine DeArrow Thumbnails hat, dann wird das Original benutzt\n\nTippe hier, um mehr über DeArrow zu erfahren</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow bietet von der Community bereitgestellte Miniaturansichten für YouTube-Videos. Diese Miniaturansichten sind oft relevanter als die von YouTube bereitgestellten.
|
||||
|
||||
Wenn diese Option aktiviert ist, werden Video-URLs an den API-Server gesendet und keine anderen Daten werden gesendet. Wenn ein Video keine DeArrow-Miniaturansichten hat, werden die Original- oder Still-Captures angezeigt.
|
||||
|
||||
Tippen Sie hier, um mehr über DeArrow zu erfahren"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Einen Toast anzeigen, wenn die API nicht verfügbar ist</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Toast wird angezeigt, wenn der Pfeil nicht verfügbar ist</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Toast wird nicht angezeigt, wenn der Pfeil nicht verfügbar ist</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_title">DeArrow API endpoint</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_title">DeArrow API-Endpunkt</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">Die URL des Cache Endpunkts der DeArrow Thumbnails</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_title">Noch Videoaufnahmen</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_summary">Die Aufnahmen werden immer noch von Anfang an / Mitte / Ende jedes Videos übernommen. Diese Bilder sind in YouTube eingebaut und es wird keine externe API verwendet</string>
|
||||
@@ -1120,8 +1176,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Spoof-Gerätegröße</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">Die Dimensionen des Geräts wurden mit\n\nverschönert. Höhere Video-Qualitäten können freigeschaltet werden, aber es kann sein, dass Videowiedergabe stuttert, die Batterielebensdauer verschlechtert und unbekannte Nebeneffekte auftreten</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Gerätedimensionen nicht gefälscht\n\nAktivieren kann höhere Video-Qualitäten freischalten</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Gerätemessungen gefälscht
|
||||
|
||||
Höhere Videoqualitäten können freigeschaltet werden, aber es kann zu Stottern bei der Videowiedergabe, kürzerer Akkulaufzeit und unbekannten Nebeneffekten kommen"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"Gerätemessungen nicht gefälscht
|
||||
|
||||
Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet werden"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Aktivieren kann dazu führen, dass Videowiedergabe blockiert, die Batterielebensdauer verschlechtert und unbekannte Nebeneffekte entstehen.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1156,8 +1216,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Qualitätsänderungen gelten nur für das aktuelle Video</string>
|
||||
<string name="revanced_video_quality_default_wifi_title">Standard-Videoqualität im Wi-Fi-Netzwerk</string>
|
||||
<string name="revanced_video_quality_default_mobile_title">Standard-Videoqualität im Mobilfunknetz</string>
|
||||
<string name="revanced_remember_video_quality_mobile">mobile</string>
|
||||
<string name="revanced_remember_video_quality_wifi">wifi</string>
|
||||
<string name="revanced_remember_video_quality_mobile">Mobile</string>
|
||||
<string name="revanced_remember_video_quality_toast">Standard %1$s Qualität geändert zu: %2$s</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
@@ -1171,8 +1230,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_speed_menu_summary_off">Benutzerdefiniertes Geschwindigkeitsmenü wird nicht angezeigt</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Benutzerdefinierte Wiedergabegeschwindigkeiten</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Hinzufügen oder Ändern der benutzerdefinierten Wiedergabegeschwindigkeit</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Benutzerdefinierte Geschwindigkeiten müssen kleiner als %ssein. Standardwerte werden verwendet.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Ungültige benutzerdefinierte Wiedergabegeschwindigkeiten. Standardwerte verwenden.</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Benutzerdefinierte Geschwindigkeiten müssen kleiner als %s sein</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Ungültige benutzerdefinierte Wiedergabegeschwindigkeiten</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Auto</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1197,18 +1256,79 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Spoof der Client-Videostreams um Wiedergabeprobleme zu verhindern</string>
|
||||
<string name="revanced_spoof_video_streams_title">Spoof-Video-Streams</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">Video-Streams sind gefälscht</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">Video-Streams sind nicht gefälscht\n\nVideo-Wiedergabe funktioniert möglicherweise nicht</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"Videoströme werden nicht gefälscht
|
||||
|
||||
Die Videowiedergabe funktioniert möglicherweise nicht"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Das Deaktivieren dieser Einstellung kann zu Videowiedergabeproblemen führen.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">Standard-Client</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">AVC erzwingen (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video Codec ist AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video Codec ist VP9 oder AV1</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Ihr Gerät hat keine VP9-Hardware-Dekodierung, und diese Einstellung ist immer aktiviert, wenn Client-Spoofing aktiviert ist</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Das Aktivieren kann die Akkulaufzeit verbessern und die Wiedergabe-Stutting beheben.\n\nAVC hat eine maximale Auflösung von 1080p, und die Videowiedergabe wird mehr Internet-Daten als VP9 oder AV1 verwenden.</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video-Codec ist zu AVC gezwungen (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video-Codec wird automatisch bestimmt</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Dadurch kann die Akkulaufzeit verbessert und Stottern bei der Wiedergabe behoben werden.
|
||||
|
||||
AVC hat eine maximale Auflösung von 1080p, der Opus-Audiocodec ist nicht verfügbar und die Videowiedergabe verbraucht mehr Internetdaten als VP9 oder AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS Spoofing Nebeneffekte</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">• Videos für Privatkinder dürfen nicht\nabspielen • Livestreams beginnen von Anfang an\n• Videos können 1 Sekunde früher\n• Kein opus Audio Codec</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Private Kindervideos werden möglicherweise nicht abgespielt
|
||||
• Livestreams starten von Anfang an
|
||||
• Videos enden 1 Sekunde früher"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR Spoofing Nebeneffekte</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Kindervideos dürfen nicht\nabspielen • Audiospurmenü fehlt\n• Stabile Lautstärke ist nicht verfügbar</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Kindervideos werden möglicherweise nicht abgespielt
|
||||
• Livestreams starten von Anfang an
|
||||
• Videos enden 1 Sekunde früher"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">Standard Audio Streamsprache</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">App-Sprache</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">Arabisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">Aserbaidschan</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">Bulgarisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">Bengalisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">Katalanisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">Tschechisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">Dänisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">Deutsch</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">Griechisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">Englisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">Spanisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">Estnisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">Persisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">Finnisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">Französisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">Gujarati</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">Hannah</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">Kroatisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">Ungarisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">Indonesisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">Italienisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Japanisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">Kazakh</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">Koreanisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">Litauisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">Lettisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">Makedonisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">Mongolisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">Marathi</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">Malaiisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">Burmese</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">Niederländisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">Odia</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">Punjabi</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">Polnisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">Portugiesisch (Brasilien)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">Portugiesisch (Portugal)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Rumänisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Russisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">Slowakisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">Slovene</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">Serbisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">Schwedisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">Swahili</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">Tamil</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">Telugu</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">Thailändisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">Türkisch</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">Ukrainische</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">Urdu</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">Vietnamese</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">Chinesisch</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1218,8 +1338,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">Audiowerbung ist entsperrt</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s ist nicht verfügbar. Ads könnten angezeigt werden. Versuche einem anderen Adblock-Dienst.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">Der %s Server hat einen Fehler zurückgegeben. Ads könnten angezeigt werden. Versuche einen anderen Adblock-Dienst.</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s nicht verfügbar, Werbung wird möglicherweise angezeigt. Versuchen Sie, den Werbesperrdienst in den Einstellungen zu ändern.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s hat einen Fehler zurückgegeben, Werbung wird möglicherweise angezeigt. Versuchen Sie, den Werbesperrdienst in den Einstellungen zu ändern.</string>
|
||||
<string name="revanced_block_embedded_ads_title">Blockiere eingebettete Video-Anzeigen</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">Deaktiviert</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Leuchtender Proxy</string>
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -36,7 +25,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_check_environment_failed_title">Αποτυχία ελέγχων</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Άνοιγμα επίσημης ιστοσελίδας</string>
|
||||
<string name="revanced_check_environment_dialog_ignore_button">Παράλειψη</string>
|
||||
<string name="revanced_check_environment_failed_message"><h5>Αυτή η εφαρμογή δεν φαίνεται να έχει τροποποιηθεί από εσάς.</h5><br>Αυτή η εφαρμογή μπορεί να μην λειτουργεί σωστά, <b>θα μπορούσε να είναι επιβλαβής ή ακόμα και επικίνδυνη για χρήση</b>.<br><br>Αυτοί οι έλεγχοι υποδηλώνουν ότι αυτή η εφαρμογή έχει τροποποιηθεί στο παρελθόν ή λήφθηκε από κάποιον άλλο:<br><br><small>%1$s</small><br>Συνιστάται έντονα να απεγκαταστήσετε την εφαρμογή <br>και να την τροποποιήσετε μόνοι σας<br> για να διασφαλίσετε ότι χρησιμοποιείτε μια επικυρωμένη και ασφαλή εφαρμογή.<p><br>Εάν αγνοηθεί, αυτή η προειδοποίηση θα εμφανιστεί μόνο δύο φορές.</string>
|
||||
<string name="revanced_check_environment_failed_message"><h5>Αυτή η εφαρμογή δεν φαίνεται να έχει τροποποιηθεί από εσάς.</h5><br>Η εφαρμογή μπορεί να μη λειτουργεί σωστά, <b>θα μπορούσε να είναι επιβλαβής ή ακόμα και επικίνδυνη για χρήση</b>.<br><br>Αυτοί οι έλεγχοι υποδηλώνουν ότι αυτή η εφαρμογή έχει τροποποιηθεί στο παρελθόν ή λήφθηκε από κάποιον άλλο:<br><br><small>%1$s</small><br>Συνιστάται έντονα να απεγκαταστήσετε την εφαρμογή <br>και να την τροποποιήσετε μόνοι σας<br> για να διασφαλίσετε ότι χρησιμοποιείτε μια επικυρωμένη και ασφαλή εφαρμογή.<p><br>Εάν αγνοηθεί, αυτή η προειδοποίηση θα εμφανιστεί μόνο δύο φορές.</string>
|
||||
<string name="revanced_check_environment_not_same_patching_device">Τροποποιήθηκε σε διαφορετική συσκευή</string>
|
||||
<string name="revanced_check_environment_manager_not_expected_installer">Δεν έχει εγκατασταθεί μέσω του ReVanced Manager</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time">Τροποποιήθηκε πάνω από 10 λεπτά πριν</string>
|
||||
@@ -67,9 +56,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">Το MicroG GmsCore δεν έχει εγκατασταθεί. Εγκαταστήστε το.</string>
|
||||
<string name="gms_core_dialog_title">Απαιτείται ενέργεια</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">Το MicroG GmsCore δεν έχει άδεια να τρέξει στο παρασκήνιο.\n\nΑκολουθήστε τον οδηγό \"Don\'t kill my app\" για το τηλέφωνό σας και εφαρμόστε τις οδηγίες στο MicroG.\n\nΑυτό απαιτείται για να λειτουργήσει η εφαρμογή.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"Το MicroG GmsCore δεν έχει άδεια να εκτελείται στο παρασκήνιο.
|
||||
|
||||
Ακολουθήστε τον οδηγό \"Don't kill my app\" για το τηλέφωνό σας και εφαρμόστε τις οδηγίες στο MicroG.
|
||||
|
||||
Αυτό είναι απαραίτητο για τη λειτουργία της εφαρμογής."</string>
|
||||
<string name="gms_core_dialog_open_website_text">Άνοιγμα ιστοσελίδας</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">Οι βελτιστοποιήσεις μπαταρίας στο MicroG GmsCore πρέπει να απενεργοποιηθούν για την αποφυγή προβλημάτων.\n\nΠατήστε το κουμπί «Συνέχεια» και απενεργοποιήστε τις βελτιστοποιήσεις μπαταρίας για το MicroG.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"Οι βελτιστοποιήσεις μπαταρίας πρέπει να απενεργοποιηθούν για το MicroG GmsCore ώστε να αποφευχθούν προβλήματα.
|
||||
|
||||
Η απενεργοποίηση των βελτιστοποιήσεων μπαταρίας για το MicroG δεν θα επηρεάσει αρνητικά τη χρήση της μπαταρίας.
|
||||
|
||||
Πατήστε το κουμπί «Συνέχεια» και επιτρέψτε τις αλλαγές βελτιστοποίησης."</string>
|
||||
<string name="gms_core_dialog_continue_text">Συνέχεια</string>
|
||||
</patch>
|
||||
</app>
|
||||
@@ -106,7 +103,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">Εμφάνιση μηνυμάτων σφαλμάτων ReVanced</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Να εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης σε περιπτώσεις σφαλμάτων</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Να μην εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης σε περιπτώσεις σφαλμάτων</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">Η απενεργοποίηση των μηνυμάτων σφαλμάτων κρύβει όλες τις ειδοποιήσεις σφαλμάτων που αφορούν το ReVanced.\n\nΔεν θα ειδοποιήστε για τυχόν απρόβλεπτα γεγονότα.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Η απενεργοποίηση των μηνυμάτων σφαλμάτων κρύβει όλες τις ειδοποιήσεις σφαλμάτων που αφορούν το ReVanced.
|
||||
|
||||
Δεν θα ειδοποιηθείτε για τυχόν απρόβλεπτα γεγονότα."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Απενεργοποίηση λάμψης των κουμπιών «Μου αρέσει» και «Εγγραφή»</string>
|
||||
@@ -125,7 +124,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">Οριζόντιες ενότητες προτάσεων</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">Οι ενότητες προτάσεων όπως:\n• Έκτακτη είδηση\n• Συνέχεια παρακολούθησης\n• Εξερευνήστε περισσότερα κανάλια\n• Αγορές\n•Παρακολουθήστε ξανά\nείναι κρυμμένες</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"Κρυμμένες
|
||||
|
||||
Αφορά τις ενότητες προτάσεων όπως:
|
||||
• Έκτακτη είδηση
|
||||
• Συνέχεια παρακολούθησης
|
||||
• Εξερευνήστε περισσότερα κανάλια
|
||||
• Αγορές
|
||||
• Παρακολουθήστε ξανά"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Εμφανίζονται</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -202,7 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_playables_summary_on">Κρυμμένα</string>
|
||||
<string name="revanced_hide_playables_summary_off">Εμφανίζονται</string>
|
||||
<string name="revanced_hide_quick_actions_title">Γρήγορες ενέργειες σε πλήρη οθόνη</string>
|
||||
<string name="revanced_hide_quick_actions_summary_on">Κρυμμένες</string>
|
||||
<string name="revanced_hide_quick_actions_summary_on">Εμφανίζονται</string>
|
||||
<string name="revanced_hide_quick_actions_summary_off">Εμφανίζονται</string>
|
||||
<string name="revanced_hide_related_videos_title">Σχετικά βίντεο στις γρήγορες ενέργειες</string>
|
||||
<string name="revanced_hide_related_videos_summary_on">Κρυμμένα</string>
|
||||
@@ -252,6 +258,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_comments_screen_title">Σχόλια</string>
|
||||
<string name="revanced_comments_screen_summary">Απόκρυψη ή εμφάνιση στοιχείων στα σχόλια</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">Σύνοψη συνομιλίας</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Ετικέτα «Σχόλια από μέλη»</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Εμφανίζεται</string>
|
||||
@@ -274,7 +283,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Κρυμμένα</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Εμφανίζονται</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">Τα YouTube Doodles εμφανίζονται για μερικές μέρες κάθε χρόνο.\n\nΑν ένα Doodle εμφανίζεται αυτόν τον καιρό στην περιοχή σας και η ρύθμιση απόκρυψης τους είναι ενεργοποιημένη, τότε η γραμμή φίλτρου κάτω από τη γραμμή αναζήτησης θα είναι επίσης κρυμμένη.</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"Τα YouTube Doodles εμφανίζονται για μερικές μέρες κάθε χρόνο.
|
||||
|
||||
Αν ένα YouTube Doodle εμφανίζεται αυτή τη στιγμή στην περιοχή σας και αυτή η ρύθμιση είναι ενεργοποιημένη, τότε η γραμμή φίλτρων κάτω από τη γραμμή αναζήτησης θα είναι κρυμμένη επίσης."</string>
|
||||
<string name="revanced_custom_filter_screen_title">Προσαρμοσμένο φίλτρο</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Απόκρυψη στοιχείων χρησιμοποιώντας προσαρμοσμένα φίλτρα</string>
|
||||
<string name="revanced_custom_filter_title">Χρήση προσαρμοσμένου φίλτρου</string>
|
||||
@@ -282,7 +293,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_filter_summary_off">Το προσαρμοσμένο φίλτρο είναι απενεργοποιημένο</string>
|
||||
<string name="revanced_custom_filter_strings_title">Προσαρμοσμένο φίλτρο</string>
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Λίστα από συμβολοσειρές στοιχείων για φιλτράρισμα, διαχωρισμένες η μία κάτω από την άλλη</string>
|
||||
<string name="revanced_custom_filter_strings_summary">Λίστα από συμβολοσειρές στοιχείων για φιλτράρισμα, διαχωρισμένες σε νέες γραμμές</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Μη έγκυρο προσαρμοσμένο φίλτρο: %s</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Απόκρυψη περιεχομένου λέξεων-κλειδιών</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Απόκρυψη βίντεο ροής και αναζήτησης χρησιμοποιώντας φίλτρα λέξεων-κλειδιών</string>
|
||||
@@ -298,9 +309,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">Λέξεις-κλειδιά για απόκρυψη</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">Λέξεις-κλειδιά και φράσεις προς απόκρυψη, διαχωρισμένες η μία κάτω από την άλλη\n\nΛέξεις-κλειδιά μπορεί να είναι ονόματα καναλιών ή οποιοδήποτε κείμενο εμφανίζεται σε τίτλους βίντεο\n\nΔώστε προσοχή στα πεζά και κεφάλαια γράμματα διότι ισχύει ευαισθησία πεζότητας (π.χ.: iPhone, TikTok, LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"Λέξεις-κλειδιά και φράσεις προς απόκρυψη, διαχωρισμένες σε νέες γραμμές
|
||||
|
||||
Οι λέξεις-κλειδιά μπορεί να είναι ονόματα καναλιών ή κείμενο που εμφανίζεται σε τίτλους των βίντεο
|
||||
|
||||
Οι λέξεις με κεφαλαία γράμματα στη μέση πρέπει να είναι ευαίσθητες στην πεζότητα (π.χ: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">Σχετικά με το φιλτράρισμα λέξεων-κλειδιών</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">Οι καρτέλες «Αρχική», «Εγγραφές» και τα αποτελέσματα αναζήτησης φιλτράρονται για απόκρυψη περιεχομένου που ταιριάζει με τις λέξεις-κλειδιά\n\nΠεριορισμοί\n• Τα Shorts δε γίνεται να κρυφτούν με βάση το όνομα καναλιού\n• Κάποια στοιχεία UI ενδέχεται να μην κρύβονται\n• Η αναζήτηση για μια λέξη-κλειδί ενδέχεται να μην εμφανίζει κανένα αποτέλεσμα</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"Οι καρτέλες «Αρχική», «Εγγραφές» και τα αποτελέσματα αναζήτησης φιλτράρονται για απόκρυψη περιεχομένου που ταιριάζει με τις λέξεις-κλειδιά
|
||||
|
||||
Περιορισμοί:
|
||||
• Τα Shorts δεν γίνεται να κρύβονται με βάση το όνομα καναλιού
|
||||
• Κάποια στοιχεία UI ενδέχεται να μην κρύβονται
|
||||
• Η αναζήτηση για μια λέξη-κλειδί ενδέχεται να μην εμφανίζει κανένα αποτέλεσμα"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Ταίριασμα ολόκληρων λέξεων</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">Περιβάλλοντας μια λέξη-κλειδί / φράση με διπλά εισαγωγικά θα αποτρέψει μερικές αντιστοιχίες των τίτλων βίντεο και των ονομάτων καναλιών<br><br>Για παράδειγμα,<br><b>\"ai\"</b> θα κρύψει το βίντεο: <b>How does AI work?</b><br>αλλά δεν θα κρύψει: <b>What does fair use mean?</b></string>
|
||||
@@ -316,7 +336,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_general_ads_summary_on">Κρυμμένες</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">Εμφανίζονται</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Διαφημίσεις πλήρους οθόνης</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Οι διαφημίσεις πλήρους οθόνης είναι κρυμμένες\n\nΑυτή η δυνατότητα είναι διαθέσιμη μόνο για παλαιότερες συσκευές</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Κρυμμένες
|
||||
|
||||
Αυτή η λειτουργία είναι διαθέσιμη μόνο για παλιότερες συσκευές"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Οι διαφημίσεις πλήρους οθόνης εμφανίζονται</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">Διαφημίσεις κουμπιών</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">Κρυμμένες</string>
|
||||
@@ -490,7 +512,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Εμφανίζεται</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Εναλλαγή κουμπιού «Δημιουργία» με κουμπί «Ειδοποιήσεις»</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">Γίνεται εναλλαγή του κουμπιού δημιουργίας σε κουμπί ειδοποιήσεων\n\nΣημείωση: Ενεργοποιώντας την εναλλαγή θα κρύβονται και οι διαφημίσεις βίντεο</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Γίνεται εναλλαγή θέσεων των κουμπιών «Δημιουργία» και «Ειδοποιήσεις»
|
||||
|
||||
Σημείωση: Η ενεργοποίηση αυτής της ρύθμισης εξαναγκάζει επίσης την απόκρυψη των διαφημίσεων βίντεο"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">Δε γίνεται εναλλαγή του κουμπιού δημιουργίας σε κουμπί ειδοποιήσεων</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Ονομασίες κουμπιών γραμμής πλοήγησης</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Κρυμμένες</string>
|
||||
@@ -692,7 +716,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_sound_button_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_title">Γραμμή πλοήγησης</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">Η γραμμή πλοήγησης θα είναι κρυμμένη κατά την αναπαραγωγή Shorts</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">Η γραμμή πλοήγησης θα εμφανίζεται κατά την αναπαραγωγή Shorts</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">Η γραμμή πλοήγησης εμφανίζεται κατά την αναπαραγωγή Shorts</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.suggestedvideoendscreen.disableSuggestedVideoEndScreenResourcePatch">
|
||||
<string name="revanced_disable_suggested_video_end_screen_title">Τελική οθόνη προτεινόμενων βίντεο</string>
|
||||
@@ -709,6 +733,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">Κρυμμένα</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">Εμφανίζονται</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">Άνοιγμα των βίντεο σε πλήρη οθόνη με κατακόρυφη προβολή</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Τα βίντεο ανοίγουν σε λειτουργία πλήρους οθόνης</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Τα βίντεο δεν ανοίγουν σε λειτουργία πλήρους οθόνης</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">Αδιαφάνεια φόντου οθόνης αναπαραγωγής</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">Τιμή αδιαφάνειας μεταξύ 0-100, όπου το 0 είναι διαφανές</string>
|
||||
@@ -726,7 +755,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">Τα «Δεν μου αρέσει» δεν εμφανίζονται</string>
|
||||
<string name="revanced_ryd_shorts_title">Εμφάνιση στα Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Τα «Δεν μου αρέσει» εμφανίζονται στα Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">Τα «Δεν μου αρέσει» εμφανίζονται στα Shorts\n\nΠεριορισμός: Τα «Δεν μου αρέσει» ενδέχεται να μην εμφανίζονται σε λειτουργία ανώνυμης περιήγησης</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Τα «Δεν μου αρέσει» εμφανίζονται στα Shorts
|
||||
|
||||
Περιορισμός: Τα «Δεν μου αρέσει» ενδέχεται να μην εμφανίζονται σε λειτουργία ανώνυμης περιήγησης"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Τα «Δεν μου αρέσει» δεν εμφανίζονται στα Shorts</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Εμφάνιση ως ποσοστό</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Τα «Δεν μου αρέσει» εμφανίζονται ως ποσοστό</string>
|
||||
@@ -769,7 +800,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Οι μικρογραφίες της γραμμής προόδου είναι μέτριας ποιότητας</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Οι μικρογραφίες πλήρους οθόνης της γραμμής προόδου είναι υψηλής ποιότητας</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Οι μικρογραφίες πλήρους οθόνης της γραμμής προόδου είναι μέτριας ποιότητας</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">Αυτό θα επαναφέρει επίσης τις μικρογραφίες σε ζωντανές μεταδόσεις που δεν έχουν μικρογραφίες γραμμής προόδου.\n\nΟι μικρογραφίες της γραμμής προόδου θα χρησιμοποιούν την ίδια ποιότητα με το τρέχον βίντεο.\n\nΑυτή η ρύθμιση λειτουργεί καλύτερα με ποιότητα βίντεο 720p ή χαμηλότερη και όταν χρησιμοποιείτε μια πολύ γρήγορη σύνδεση στο διαδίκτυο.</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Αυτό θα επαναφέρει επίσης τις μικρογραφίες σε ζωντανές μεταδόσεις που δεν έχουν μικρογραφίες γραμμής προόδου.
|
||||
|
||||
Οι μικρογραφίες γραμμής αναζήτησης θα χρησιμοποιούν την ίδια ποιότητα με το τρέχον βίντεο.
|
||||
|
||||
Αυτή η δυνατότητα λειτουργεί καλύτερα με ποιότητα βίντεο 720p ή χαμηλότερη και όταν χρησιμοποιείται πολύ γρήγορη σύνδεση στο διαδίκτυο."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Παλιές μικρογραφίες γραμμής προόδου</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Οι μικρογραφίες προεπισκόπησης θα εμφανίζονται πάνω από τη γραμμή προόδου</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Οι μικρογραφίες προεπισκόπησης θα εμφανίζονται σε πλήρη οθόνη</string>
|
||||
@@ -832,7 +867,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">Οι ρυθμίσεις εισήχθησαν επιτυχώς</string>
|
||||
<string name="revanced_sb_settings_import_failed">Η εισαγωγή απέτυχε: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">Η εξαγωγή απέτυχε: %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">Οι ρυθμίσεις σας περιέχουν ένα ιδιωτικό αναγνωριστικό χρήστη SponsorBlock.\n\nΑυτό είναι σαν έναν κωδικό πρόσβασης και δεν πρέπει ποτέ να το μοιραστείτε.\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Οι ρυθμίσεις σας περιέχουν ένα ιδιωτικό αναγνωριστικό χρήστη SponsorBlock.
|
||||
|
||||
Το αναγνωριστικό χρήστη σας είναι σαν κωδικός πρόσβασης και δεν πρέπει ποτέ να μοιράζεται."</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Να μην εμφανιστεί ξανά</string>
|
||||
<string name="revanced_sb_diff_segments">Αλλαγή συμπεριφοράς τμημάτων</string>
|
||||
<string name="revanced_sb_segments_sponsor">Χορηγός</string>
|
||||
@@ -892,9 +929,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">Αδυναμία υποβολής τμήματος: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">Το SponsorBlock είναι προσωρινά εκτός λειτουργίας</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">Αδυναμία υποβολής τμήματος (κατάσταση: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Αδυναμία υποβολής τμήματος.\nΌριο συχνότητας (πάρα πολλά από τον ίδιο χρήστη ή την ίδια IP)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Αδυναμία υποβολής τμήματος. Όριο Συχνότητας (πάρα πολλά από τον ίδιο χρήστη ή την IP)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">Αδυναμία υποβολής του τμήματος: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">Αδυναμία αποστολής του τμήματος.\nΥπάρχει ήδη</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"Δεν είναι δυνατή η υποβολή του τμήματος.
|
||||
Υπάρχει ήδη"</string>
|
||||
<string name="revanced_sb_submit_succeeded">Το τμήμα υποβλήθηκε επιτυχώς</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock προσωρινά μη διαθέσιμο (καθυστέρηση API)</string>
|
||||
@@ -917,7 +955,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">Χρόνος έναρξης του τμήματος</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Χρόνος λήξης του τμήματος</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Είναι σωστοί οι χρόνοι;</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">Το τμήμα είναι από\n\n%1$s\nσε\n%2$s\n\n(%3$s)\n\nΈτοιμο για υποβολή;</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"Το τμήμα είναι από το
|
||||
|
||||
%1$s
|
||||
έως το
|
||||
%2$s
|
||||
|
||||
(%3$s)
|
||||
|
||||
Είστε έτοιμοι για υποβολή;"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">Η αρχή πρέπει να είναι πριν από το τέλος</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">Σημειώστε δύο σημεία στην γραμμή προόδου πρώτα</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">Κάντε προεπισκόπηση του τμήματος, και σιγουρευτείτε ότι παραλείπεται σωστά</string>
|
||||
@@ -959,7 +1005,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">Τροποποίηση έκδοσης εφαρμογής</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">Η έκδοση τροποποιείται</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">Η έκδοση δεν τροποποιείται</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">Η έκδοση της εφαρμογής YouTube θα τροποποιηθεί σε παλιότερη.\n\nΑυτό θα αλλάξει την εμφάνιση και τα χαρακτηριστικά της εφαρμογής, αλλά ενδέχεται να εμφανιστούν άγνωστες παρενέργειες.\n\nΑν αργότερα απενεργοποιηθεί, συνιστάται η εκκαθάριση των δεδομένων της εφαρμογής για την αποφυγή σφαλμάτων UI.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"Η έκδοση της εφαρμογής YouTube θα παραποιηθεί σε παλιότερη.
|
||||
|
||||
Αυτό θα αλλάξει την εμφάνιση και τα χαρακτηριστικά της εφαρμογής, αλλά ενδέχεται να εμφανιστούν άγνωστες παρενέργειες.
|
||||
|
||||
Αν αργότερα απενεργοποιηθεί, συνιστάται η εκκαθάριση δεδομένων της εφαρμογής για την αποφυγή σφαλμάτων UI."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Έκδοση τροποποίησης της εφαρμογής</string>
|
||||
@@ -971,7 +1021,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_4">17.33.42 - Επαναφορά ενότητας λίστας αναπαραγωγής παλιού στυλ</string>
|
||||
</patch>
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">Ορισμός αρχικής σελίδας</string>
|
||||
<string name="revanced_change_start_page_title">Αλλαγή της αρχικής σελίδας</string>
|
||||
<string name="revanced_change_start_page_entry_default">Προεπιλογή</string>
|
||||
<string name="revanced_change_start_page_entry_browse">Περιήγηση καναλιών</string>
|
||||
<string name="revanced_change_start_page_entry_explore">Εξερεύνηση</string>
|
||||
@@ -1012,7 +1062,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">Αλλάξτε το στυλ της ελαχιστοποιημένης οθόνης αναπαραγωγής</string>
|
||||
<string name="revanced_miniplayer_type_title">Τύπος ελαχιστοποιημένης οθόνης αναπαραγωγής</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Ανενεργή</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Αρχικός</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Προεπιλογή</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Ελάχιστη</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Ταμπλετ</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Μοντέρνα 1</string>
|
||||
@@ -1022,19 +1072,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Οι γωνίες είναι στρογγυλεμένες</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Οι γωνίες είναι τετράγωνες</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Διπλό πάτημα & τσίμπημα για αλλαγή μεγέθους</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">Η λειτουργία διπλού πατήματος και τσιμπήματος για αλλαγή μεγέθους είναι ενεργοποιημένη\n\n• Πατήστε δύο φορές για να αυξήσετε το μέγεθος της ελαχιστοποιημένης οθόνης\n• Πατήστε ξανά δύο φορές για επαναφορά στο αρχικό της μέγεθος</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Η λειτουργία διπλού πατήματος και τσιμπήματος για αλλαγή μεγέθους είναι ενεργοποιημένη
|
||||
|
||||
• Πατήστε δύο φορές για να αυξήσετε το μέγεθος της ελαχιστοποιημένης οθόνης
|
||||
• Πατήστε ξανά δύο φορές για επαναφορά στο αρχικό της μέγεθος"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Η λειτουργία διπλού πατήματος και τσιμπήματος για αλλαγή μεγέθους είναι απενεργοποιημένη</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Λειτουργία μεταφοράς και απόθεσης</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">Η λειτουργία μεταφοράς και απόθεσης είναι ενεργοποιημένη\n\nΗ ελαχιστοποιημένη οθόνη αναπαραγωγής μπορεί να μετακινηθεί σε οποιαδήποτε γωνία της οθόνης</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Η λειτουργία μεταφοράς και απόθεσης είναι ενεργοποιημένη
|
||||
|
||||
Η ελαχιστοποιημένη οθόνη αναπαραγωγής μπορεί να μετακινηθεί σε οποιαδήποτε γωνία της οθόνης"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Η λειτουργία μεταφοράς και απόθεσης είναι απενεργοποιημένη</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Ενεργοποίηση οριζόντιας χειρονομίας απόρριψης</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">Η οριζόντια χειρονομία είναι ενεργή\n\nΗ ελαχιστοποιημένη οθόνη μπορεί να συρθεί εκτός οθόνης προς τα αριστερά ή δεξιά</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Η χειρονομία οριζόντιας σύρσης είναι ενεργοποιημένη
|
||||
|
||||
Η ελαχιστοποιημένη οθόνη μπορεί να συρθεί εκτός οθόνης προς τα αριστερά ή δεξιά"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Η οριζόντια χειρονομία είναι ανενεργή</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">Κουμπί κλεισίματος</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Κουμπιά επέκτασης και κλεισίματος</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">Κρυμμένα\n\nΣύρετε για επέκταση ή κλείσιμο</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"Κρυμμένα
|
||||
|
||||
Σύρετε την ελαχιστοποιημένη οθόνη αναπαραγωγής για επέκταση ή κλείσιμο του βίντεο"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Εμφανίζονται</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Κείμενα στην οθόνη αναπαραγωγής</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Κρυμμένα</string>
|
||||
@@ -1065,7 +1124,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">Παράκαμψη μπλοκαρίσματος φόρτωσης εικόνων</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">Χρησιμοποιείται το domain yt4.ggpht.com για την φόρτωση εικόνων</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">Χρησιμοποιείται το αρχικό domain για την φόρτωση εικόνων\n\nΗ ενεργοποίηση αυτής της ρύθμισης μπορεί να διορθώσει την φόρτωση εικόνων που είναι μπλοκαρισμένες σε κάποιες περιοχές</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"Χρησιμοποιείται το αρχικό domain για την φόρτωση εικόνων
|
||||
|
||||
Η ενεργοποίηση αυτής της ρύθμισης μπορεί να διορθώσει την φόρτωση εικόνων που είναι μπλοκαρισμένες σε ορισμένες περιοχές"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -1080,7 +1141,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & Αρχικές μικρογραφίες</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow & Ακίνητα καρέ</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">Ακίνητα καρέ</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">Το DeArrow παρέχει μικρογραφίες από το κοινό για τα βίντεο. Οι μικρογραφίες αυτές είναι συχνά πιο σχετικές από εκείνες που παρέχει το ίδιο το YouTube. Εάν ενεργοποιηθεί, οι διευθύνσεις URL των βίντεο θα στέλνονται στον διακομιστή API χωρίς να στέλνονται άλλα δεδομένα. Αν ένα βίντεο δεν έχει μικρογραφίες DeArrow, θα εμφανιστούν είτε οι αρχικές του μικρογραφίες είτε λήψεις ακίνητων καρέ.\n\nΠατήστε για να μάθετε περισσότερα για το DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"Το DeArrow παρέχει μικρογραφίες από το κοινό για τα βίντεο. Οι μικρογραφίες αυτές είναι συχνά πιο σχετικές από εκείνες που παρέχει το ίδιο το YouTube. Αν ενεργοποιηθεί, οι διευθύνσεις URL των βίντεο θα στέλνονται στον διακομιστή API χωρίς να στέλνονται άλλα δεδομένα. Αν κάποιο βίντεο δεν έχει μικρογραφίες DeArrow, θα εμφανιστούν είτε οι αρχικές του μικρογραφίες είτε λήψεις ακίνητων καρέ.
|
||||
|
||||
Πατήστε για να μάθετε περισσότερα για το DeArrow"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Εμφάνιση μηνύματος αν το API δεν είναι διαθέσιμο</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Να εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το DeArrow δεν είναι διαθέσιμο</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Να μην εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το DeArrow δεν είναι διαθέσιμο</string>
|
||||
@@ -1119,8 +1182,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Παραποίηση διαστάσεων συσκευής</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">Οι διαστάσεις συσκευής παραποιούνται\n\nΜπορεί να γίνουν διαθέσιμες υψηλότερες ποιότητες βίντεο, αλλά πιθανότατα να αντιμετωπίσετε μικρο-κολλήματα κατά την αναπαραγωγή, χειρότερη διάρκεια ζωής μπαταρίας και άλλες άγνωστες παρενέργειες</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Οι διαστάσεις συσκευής δεν παραποιούνται\n\nΕνεργοποιώντας αυτή τη ρύθμιση μπορούν να γίνουν διαθέσιμες υψηλότερες ποιότητες βίντεο</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Οι διαστάσεις συσκευής παραποιούνται
|
||||
|
||||
Ενδέχεται να ξεκλειδωθούν υψηλότερες ποιότητες βίντεο, αλλά μπορεί να αντιμετωπίσετε κολλήματα αναπαραγωγής βίντεο, χειρότερη διάρκεια ζωής μπαταρίας και άλλες άγνωστες παρενέργειες"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"Οι διαστάσεις συσκευής δεν παραποιούνται
|
||||
|
||||
Η ενεργοποίηση αυτής της λειτουργίας μπορεί να ξεκλειδώσει υψηλότερες ποιότητες βίντεο"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Η ενεργοποίηση αυτής της λειτουργίας μπορεί να προκαλέσει μικρο-κολλήματα κατά την αναπαραγωγή, χειρότερη διάρκεια ζωής μπαταρίας, και άλλες άγνωστες παρενέργειες.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1143,7 +1210,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_remove_tracking_query_parameter_summary_off">Η παράμετρος παρακολούθησης δεν αφαιρείται από τους συνδέσμους στην κοινοποίηση</string>
|
||||
</patch>
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
<string name="revanced_disable_zoom_haptics_title">Κατάργηση απόκρισης δόνησης στο ζουμ</string>
|
||||
<string name="revanced_disable_zoom_haptics_title">Απενεργοποίηση απόκρισης δόνησης χειρονομίας ζουμ</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_on">Η απόκριση δόνησης είναι απενεργοποιημένη</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Η απόκριση δόνησης είναι ενεργοποιημένη</string>
|
||||
</patch>
|
||||
@@ -1151,8 +1218,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Αυτόματη</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Απομνημόνευση αλλαγών ποιότητας βίντεο</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Οι αλλαγές ποιότητας θα ισχύουν για όλα τα βίντεο</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Οι αλλαγές ποιότητας θα ισχύουν μόνο για το τρέχον βίντεο</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Οι αλλαγές ποιότητας ισχύουν για όλα τα βίντεο</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Οι αλλαγές ποιότητας ισχύουν μόνο για το τρέχον βίντεο</string>
|
||||
<string name="revanced_video_quality_default_wifi_title">Προεπιλεγμένη ποιότητα βίντεο με Wi-Fi</string>
|
||||
<string name="revanced_video_quality_default_mobile_title">Προεπιλεγμένη ποιότητα βίντεο με δεδομένα κινητής τηλεφωνίας</string>
|
||||
<string name="revanced_remember_video_quality_mobile">δεδομένων</string>
|
||||
@@ -1170,44 +1237,105 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_speed_menu_summary_off">Το μενού προσαρμοσμένης ταχύτητας αναπαραγωγής δεν εμφανίζεται</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Προσαρμοσμένες ταχύτητες αναπαραγωγής</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Προσθέστε ή αλλάξτε τις προσαρμοσμένες ταχύτητες αναπαραγωγής</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Οι ταχύτητες πρέπει να είναι μικρότερες από %sx. Επαναφορά...</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Μη έγκυρες ταχύτητες αναπαραγωγής. Επαναφορά...</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Οι ταχύτητες πρέπει να είναι μικρότερες από %sx</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Μη έγκυρες προσαρμοσμένες ταχύτητες αναπαραγωγής</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Αυτόματη</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
<string name="revanced_remember_playback_speed_last_selected_title">Απομνημόνευση αλλαγών ταχύτητας αναπαραγωγής</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_on">Οι αλλαγές ταχύτητας αναπαραγωγής θα ισχύουν για όλα τα βίντεο</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_off">Οι αλλαγές ταχύτητας αναπαραγωγής θα ισχύουν μόνο για το τρέχον βίντεο</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_on">Οι αλλαγές ταχύτητας αναπαραγωγής ισχύουν για όλα τα βίντεο</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_off">Οι αλλαγές ταχύτητας αναπαραγωγής ισχύουν μόνο για το τρέχον βίντεο</string>
|
||||
<string name="revanced_playback_speed_default_title">Προεπιλεγμένη ταχύτητα αναπαραγωγής</string>
|
||||
<string name="revanced_remember_playback_speed_toast">Η προεπιλεγμένη ταχύτητα άλλαξε σε: %s</string>
|
||||
</patch>
|
||||
<patch id="video.videoqualitymenu.restoreOldVideoQualityMenuResourcePatch">
|
||||
<string name="revanced_restore_old_video_quality_menu_title">Επαναφορά παλιού μενού ποιότητας βίντεο</string>
|
||||
<string name="revanced_restore_old_video_quality_menu_summary_on">Το μενού ποιότητας βίντεο θα εμφανίζεται με το παλιό στυλ</string>
|
||||
<string name="revanced_restore_old_video_quality_menu_summary_off">Το μενού ποιότητας βίντεο θα εμφανίζεται με το νέο στυλ</string>
|
||||
<string name="revanced_restore_old_video_quality_menu_summary_on">Το μενού ποιότητας βίντεο εμφανίζεται με το παλιό στυλ</string>
|
||||
<string name="revanced_restore_old_video_quality_menu_summary_off">Το μενού ποιότητας βίντεο εμφανίζεται με το νέο στυλ</string>
|
||||
</patch>
|
||||
<patch id="interaction.seekbar.enableSlideToSeekPatch">
|
||||
<string name="revanced_slide_to_seek_title">Χειρονομία οριζόντιας σάρωσης για αναζήτηση</string>
|
||||
<string name="revanced_slide_to_seek_summary_on">Η αναζήτηση στη γραμμή προόδου με χειρονομία οριζόντιας σάρωσης είναι ενεργοποιημένη</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">Η αναζήτηση στη γραμμή προόδου με χειρονομία σάρωσης είναι απενεργοποιημένη</string>
|
||||
<string name="revanced_slide_to_seek_title">Χειρονομία συρσίματος για αναζήτηση</string>
|
||||
<string name="revanced_slide_to_seek_summary_on">Η χειρονομία συρσίματος για αναζήτηση στη γραμμή προόδου είναι ενεργοποιημένη</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">Η χειρονομία συρσίματος για αναζήτηση στη γραμμή προόδου είναι απενεργοποιημένη</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_screen_title">Παραποίηση ροών βίντεο</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Παραποίηση ροών βίντεο του προγράμματος πελάτη για την αποφυγή προβλημάτων αναπαραγωγής</string>
|
||||
<string name="revanced_spoof_video_streams_title">Παραποίηση ροών βίντεο</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">Οι ροές βίντεο παραποιούνται</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">Οι ροές βίντεο δεν παραποιούνται\n\nΗ αναπαραγωγή βίντεο ενδέχεται να μην λειτουργεί</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"Οι ροές βίντεο δεν παραποιούνται
|
||||
|
||||
Η αναπαραγωγή βίντεο ενδέχεται να μην λειτουργεί"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Η απενεργοποίηση αυτής της ρύθμισης ενδέχεται να προκαλέσει προβλήματα αναπαραγωγής βίντεο.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">Προεπιλεγμένο πρόγραμμα πελάτη</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Εξαναγκασμός AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Ο κωδικοποιητής βίντεο είναι ο AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Ο κωδικοποιητής βίντεο είναι ο VP9 ή ο AV1</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Η συσκευή σας δεν διαθέτει αποκωδικοποίηση υλικού VP9, και αυτή η ρύθμιση είναι πάντα ενεργή όταν είναι ενεργοποιημένη η παραποίηση προγράμματος πελάτη</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Ενεργοποιώντας αυτόν τον κωδικοποιητή ίσως να βελτιώσει κατανάλωση ενέργειας και ίσως διορθώσει κολλήματα αναπαραγωγής.\n\nΟ AVC έχει μέγιστη ανάλυση 1080p, και καταναλώνει περισσότερα δεδομένα internet από τον VP9 ή τον AV1.</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Ο κωδικοποιητής βίντεο έχει οριστεί υποχρεωτικά σε AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Ο κωδικοποιητής βίντεο ορίζεται αυτόματα</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Η ενεργοποίηση αυτής της λειτουργίας μπορεί να βελτιώσει τη διάρκεια ζωής της μπαταρίας και να διορθώσει κολλήματα αναπαραγωγής.
|
||||
|
||||
Ο AVC ωστόσο έχει μέγιστη ανάλυση 1080p, ο κωδικοποιητής ήχου Opus δεν είναι διαθέσιμος και η αναπαραγωγή βίντεο θα χρησιμοποιεί περισσότερα δεδομένα internet από τον κωδικοποιητή VP9 ή τον AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">Παρενέργειες παραποίησης σε iOS</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">• Ιδιωτικά βίντεο για παιδιά ενδεχομένως να μην αναπαράγονται\n• Οι ζωντανές μεταδόσεις ξεκινούν από την αρχή\n• Τα βίντεο ενδέχεται να λήξουν 1 δευτερόλεπτο νωρίτερα\n• Δεν υπάρχει κωδικοποιητής ήχου opus</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Τα ιδιωτικά βίντεο για παιδιά ενδέχεται να μην αναπαράγονται
|
||||
• Οι ζωντανές μεταδόσεις ξεκινούν από την αρχή
|
||||
• Τα βίντεο τελειώνουν 1 δευτερόλεπτο νωρίτερα"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Παρενέργειες παραποίησης σε Android VR</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Τα βίντεο για παιδιά ενδέχεται να μην αναπαράγονται\n• Το μενού «Κομμάτι ήχου» λείπει\n• Η λειτουργία «Σταθερή ένταση» δεν είναι διαθέσιμη</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Τα βίντεο για παιδιά ενδέχεται να μην αναπαράγονται
|
||||
• Οι ζωντανές μεταδόσεις ξεκινούν από την αρχή
|
||||
• Τα βίντεο τελειώνουν 1 δευτερόλεπτο νωρίτερα"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">Προεπιλεγμένη γλώσσα ροής ήχου</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Γλώσσα εφαρμογής</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">Αραβικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">Αζερμπαϊτζανικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">Βουλγαρικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">Βεγγαλικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">Καταλανικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">Τσέχικα</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">Δανέζικα</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">Γερμανικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">Ελληνικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">Αγγλικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">Ισπανικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">Εσθονικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">Περσικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">Φινλανδικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">Γαλλικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">Γκουτζαρατικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">Χίντι</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">Κροατικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">Ουγγρικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">Ινδονησιακά</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">Ιταλικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Ιαπωνικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">Καζακικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">Κορεάτικα</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">Λιθουανικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">Λετονικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">Μακεδονικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">Μογγολικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">Μαράτι</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">Μαλαισιανά</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">Βιρμανικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">Ολλανδικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">Όντια</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">Παντζάμπι</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">Πολωνικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">Πορτογαλικά (Βραζιλίας)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">Πορτογαλικά (Πορτογαλίας)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Ρουμανικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Ρωσικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">Σλοβακικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">Σλοβενικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">Σερβικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">Σουηδικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">Σουαχίλι</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">Ταμιλικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">Τελούγκου</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">Ταϊλανδικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">Τουρκικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">Ουκρανικά</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">Ουρντού</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">Βιετναμέζικα</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">Κινέζικα</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1217,8 +1345,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">Οι διαφημίσεις ήχου δεν έχουν αποκλειστεί</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s μη διαθέσιμο. Οι διαφημίσεις θα εμφανίζονται. Δοκιμάστε άλλη υπηρεσία αποκλεισμού διαφημίσεων.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">Σφάλμα διακομιστή %s. Οι διαφημίσεις ενδέχεται να εμφανίζονται. Δοκιμάστε κάποια άλλη υπηρεσία αποκλεισμού διαφημίσεων.</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s δεν είναι διαθέσιμο, ενδέχεται να εμφανιστούν διαφημίσεις. Δοκιμάστε να αλλάξετε την υπηρεσία αποκλεισμού διαφημίσεων στις ρυθμίσεις.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s επέστρεψε ένα σφάλμα, ενδέχεται να εμφανιστούν διαφημίσεις. Δοκιμάστε να αλλάξετε την υπηρεσία αποκλεισμού διαφημίσεων στις ρυθμίσεις.</string>
|
||||
<string name="revanced_block_embedded_ads_title">Αποκλεισμός ενσωματωμένων διαφημίσεων βίντεο</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">Ανενεργό</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Διαμεσολαβητής Luminous</string>
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -67,9 +56,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore no está instalado. Instálala.</string>
|
||||
<string name="gms_core_dialog_title">Acción necesaria</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore no tiene permiso para ejecutarse en segundo plano.\n\nSigue la guía \"No cerrar mi aplicación\" para tu teléfono y aplica las instrucciones a tu instalación de MicroG.\n\nEsto es necesario para que la aplicación funcione.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore no tiene permiso para ejecutarse en segundo plano."</string>
|
||||
<string name="gms_core_dialog_open_website_text">Abrir sitio web</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">Las optimizaciones de batería de MicroG GmsCore deben estar deshabilitadas para evitar problemas.\n\nPulse el botón continuar y desactive las optimizaciones de la batería.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"La optimización de la batería de MicroG GmsCore debe estar deshabilitada para evitar problemas."</string>
|
||||
<string name="gms_core_dialog_continue_text">Continuar</string>
|
||||
</patch>
|
||||
</app>
|
||||
@@ -106,7 +95,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">Mostrar brindis en error ReVanced</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">Toast mostrado si ocurre un error</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">Toast no se muestra si ocurre un error</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">Desactivar los avisos (toasts) de errores oculta todas las notificaciones de error ReVanced\n\nNo se le notificará de ningún evento inesperado.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Desactivar las notificaciones de error oculta todas las notificaciones de error de ReVanced."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Desactivar el brillo del botón de like / suscripción</string>
|
||||
@@ -125,7 +114,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Marca de agua oculta</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Marca de agua mostrada</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">Ocultar estantes horizontales</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">Los estantes están ocultos como:\n• Últimas noticias\n• Continuar viendo\n• Explorar más canales\n• Comprar\n• Verlo de nuevo</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"Los estantes están ocultos, tales como:
|
||||
• Noticias de última hora
|
||||
• Continuar viendo
|
||||
• Explorar más canales
|
||||
• Compras
|
||||
• Verlo de nuevo"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Se muestran las estanterías</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -252,6 +246,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Mostrar en vídeos relacionados</string>
|
||||
<string name="revanced_comments_screen_title">Comentarios</string>
|
||||
<string name="revanced_comments_screen_summary">Ocultar o mostrar los componentes de sección de comentarios</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">Ocultar \'Resumen del chat\'</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">El resumen de chat está oculto</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">El resumen del chat se muestra</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Ocultar encabezado \'Comentarios por miembros\'</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">El encabezado \'Comentarios por miembros\' está oculto</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">La cabecera \'Comentarios por miembros\' se muestra</string>
|
||||
@@ -274,7 +271,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_doodles_title">Ocultar YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Barra de búsqueda Doodles están ocultos</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Mostrar la barra de búsqueda Doodles</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">Los Doodles de YouTube aparecen unos pocos días cada año.\n\nSi un Doodle se muestra actualmente en tu región y esta opción de ocultación está activada, entonces la barra de filtro bajo la barra de búsqueda también se ocultará.</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"Los doodles de YouTube se muestran durante unos días al año.
|
||||
|
||||
Si un doodle se está mostrando actualmente en tu región y este ajuste de ocultación está activado, la barra de filtro situada debajo de la barra de búsqueda también estará oculta."</string>
|
||||
<string name="revanced_custom_filter_screen_title">Filtro personalizado</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Ocultar componentes usando filtros personalizados</string>
|
||||
<string name="revanced_custom_filter_title">Activar filtro personalizado</string>
|
||||
@@ -298,9 +297,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">Palabras clave a ocultar</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">Palabras clave y frases para ocultar, separadas por nuevas líneas\n\nLas palabras clave pueden ser nombres de canales o cualquier texto que se muestre en los títulos de vídeo\n\nLas palabras con letras mayúsculas en el medio deben ser ingresadas con la mayúscula (por ejemplo: iPhone, TikTok, LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"Las palabras y frases que se ocultan, separadas por nuevas líneas
|
||||
|
||||
Las palabras clave pueden ser nombres de canales o cualquier texto que aparezca en los títulos de los vídeos
|
||||
|
||||
Las palabras con mayúsculas en medio deben introducirse con las mayúsculas (es decir, iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">Acerca del filtrado de palabras clave</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">Los resultados de inicio/suscripción/búsqueda se filtran para ocultar el contenido que coincide con las frases de palabras clave\n\nLimitaciones\n• Los cortos no se pueden ocultar con el nombre del canal\n• Algunos componentes de la interfaz pueden no estar ocultos\n• Buscar una palabra clave no puede mostrar resultados</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"Los resultados de búsqueda de Home/Suscripción/Búsqueda se filtran para ocultar el contenido que coincida con las frases de palabras clave
|
||||
|
||||
Limitaciones
|
||||
• Los vídeos cortos no se pueden ocultar por nombre de canal
|
||||
• Es posible que algunos componentes de la interfaz de usuario no estén ocultos
|
||||
• La búsqueda de una palabra clave puede no mostrar ningún resultado"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Coincidir palabras completas</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">Rodear una palabra clave/frase con comillas dobles evitará las coincidencias parciales de títulos de vídeo y nombres de canales<br><br>Por ejemplo,<br><b>\"ai\"</b> ocultará el vídeo: <b>¿Cómo funciona la AI?</b><br>pero no ocultará: <b>¿Quieres aprender a bailar?</b></string>
|
||||
@@ -316,7 +324,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_general_ads_summary_on">Los anuncios generales están ocultos</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">Se muestran anuncios generales</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Ocultar anuncios a pantalla completa</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Los anuncios a pantalla completa están ocultos\n\nEsta función solo está disponible para dispositivos más antiguos</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Los anuncios a pantalla completa están ocultos
|
||||
|
||||
Esta función solo está disponible para dispositivos antiguos"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Se muestran anuncios a pantalla completa</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">Ocultar anuncios botonados</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">Los anuncios botonados están ocultos</string>
|
||||
@@ -490,7 +500,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Se muestra el botón Suscripciones</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Cambiar Crear con Notificaciones</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">El botón Crear cambia con el botón de Notificaciones\n\nNota: Activar esto también oculta anuncios de vídeo por la fuerza</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"El botón Crear se cambia por el botón Notificaciones
|
||||
|
||||
Nota: Habilitar esto también oculta a la fuerza los anuncios de vídeo"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">El botón Crear no se cambia con el botón de notificaciones</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Ocultar etiquetas de botón de navegación</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Las etiquetas están ocultas</string>
|
||||
@@ -709,6 +721,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">Los paneles emergentes del jugador están ocultos</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">Se muestran paneles emergentes del jugador</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">Abrir vídeos en el retrato de pantalla completa</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Videos abiertos a pantalla completa</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Los videos no se abren en pantalla completa</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">Opacidad de superposición del jugador</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">Valor de potencia entre 0-100, donde 0 es transparente</string>
|
||||
@@ -726,7 +743,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">No se muestran Dislikes</string>
|
||||
<string name="revanced_ryd_shorts_title">Mostrar no me gusta en Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Dislikes mostrados en Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">No me Gusta mostrados en Shorts\n\nLimitación: Los No me Gusta no pueden aparecer en modo incógnito</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"No me gustas que se muestran en los Shorts
|
||||
|
||||
Limitación: Es posible que los No me gustas no aparezcan en el modo de incógnito"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">No me Gusta ocultos en Shorts</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Desliza como porcentaje</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Dislikes mostrados como porcentaje</string>
|
||||
@@ -769,7 +788,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Las miniuñas Seekbar son de calidad media</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Las miniaturas de la barra de búsqueda a pantalla completa son de alta calidad</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Las miniaturas de la barra de búsqueda a pantalla completa son de calidad media</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">Esto también restaurará las miniuñas en vivos que no tienen las miniuñas seekbar.\n\nLas miniaturas de la barra de búsqueda usarán la misma calidad que el vídeo actual.\n\nEsta función funciona mejor con una calidad de vídeo de 720p o inferior y al usar una conexión a internet muy rápida.</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Esto también restaurará las miniaturas en las transmisiones en vivo que no tengan miniaturas de la barra de búsqueda.
|
||||
|
||||
Las miniaturas de la barra de búsqueda utilizarán la misma calidad que el vídeo actual.
|
||||
|
||||
Esta función funciona mejor con una calidad de vídeo de 720p o inferior y cuando se utiliza una conexión a Internet muy rápida."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Restaurar antiguas miniaturas de la barra de búsqueda</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Las miniaturas de la barra de búsqueda aparecerán por encima de la barra de búsqueda</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Las miniaturas de Seekbar aparecerán en pantalla completa</string>
|
||||
@@ -832,7 +855,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">Configuración importada correctamente</string>
|
||||
<string name="revanced_sb_settings_import_failed">Error al importar: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">Error al exportar: %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">Tu configuración contiene un usuario privado de SponsorBlock.\n\nTu id de usuario es como una contraseña y nunca debe ser compartida.\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"Tu configuración contiene una ID de usuario de SponsorBlock privada.
|
||||
|
||||
Tu ID de usuario es como una contraseña y nunca debe compartirse."</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">No mostrar de nuevo</string>
|
||||
<string name="revanced_sb_diff_segments">Cambiar comportamiento del segmento</string>
|
||||
<string name="revanced_sb_segments_sponsor">Sponsor</string>
|
||||
@@ -892,9 +917,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">No se puede enviar el segmento: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock está temporalmente abajo</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">No se puede enviar el segmento (estado: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">No se puede enviar el segmento.\nTasa limitada (demasiados usuarios o IP)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">No se puede enviar el segmento. Límite de velocidad (demasiados del mismo usuario o IP)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">No se puede enviar el segmento: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">No se pudo enviar el segmento.\nYa existe</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"No se puede enviar el segmento.
|
||||
Ya existe"</string>
|
||||
<string name="revanced_sb_submit_succeeded">Segmento enviado correctamente</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock temporalmente no está disponible (API)</string>
|
||||
@@ -917,7 +943,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">Segundo en el que el segmento comienza</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Segundo en el que el segmento finaliza</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">¿Los tiempos son correctos?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">El segmento es desde\n\n%1$s\nhasta\n%2$s\n\n(%3$s)\n\n¿Listo para enviarlo?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"El segmento es de %1$s a %2$s (%3$s) ¿Listo para enviar?"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">Inicio debe ser antes del final</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">Primero, marca dos instantes en la barra de tiempo</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">Previsualizar el segmento y asegurarse de que se salta sin problemas</string>
|
||||
@@ -959,7 +985,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">Versión de la aplicación Spoof</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">Versión falseada</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">Versión no falseada</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">La versión de la aplicación será suplantada por una versión anterior de YouTube.\n\nEsto cambiará la apariencia y las funciones de la aplicación, pero pueden ocurrir efectos secundarios desconocidos.\n\nSi luego se desactiva, se recomienda borrar los datos de la aplicación para prevenir errores de interfaz de usuario.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"La versión de la aplicación se falsificará a una versión anterior de YouTube.
|
||||
|
||||
Esto cambiará la apariencia y las características de la aplicación, pero pueden producirse efectos secundarios desconocidos.
|
||||
|
||||
Si se desactiva posteriormente, se recomienda borrar los datos de la aplicación para evitar errores en la interfaz de usuario."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Destino de versión de la aplicación Spoof</string>
|
||||
@@ -1012,9 +1042,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">Cambiar el estilo del reproductor minimizado de la aplicación</string>
|
||||
<string name="revanced_miniplayer_type_title">Tipo de minreproductor</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Desactivado</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Original</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Predeterminado</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Mínimo</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tableta</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderna 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderna 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Moderna 3</string>
|
||||
@@ -1022,19 +1052,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Las esquinas están redondeadas</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Las esquinas son cuadradas</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Habilitar doble toque y pellizco para redimensionar</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">Acción de doble toque y pulsar para cambiar el tamaño está habilitado\n\n• Doble toque para aumentar el tamaño de minijugador\n• Doble toque de nuevo para restaurar el tamaño original</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"La acción de doble toque y el pellizco para cambiar el tamaño están activados
|
||||
|
||||
• Toca dos veces para aumentar el tamaño del minireproductor
|
||||
• Toca dos veces de nuevo para restaurar el tamaño original"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Acción de doble toque y pellizco para redimensionar está desactivado</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Activar arrastrar y soltar</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">Arrastrar y soltar está habilitado\n\nMinijugador puede ser arrastrado a cualquier esquina de la pantalla</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"La función de arrastrar y soltar está activada
|
||||
|
||||
El minireproductor se puede arrastrar a cualquier esquina de la pantalla"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Arrastre y suelte está desactivado</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Activar gesto de arrastre horizontal</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">Gesto de arrastre horizontal habilitado\n\nMinijugador puede ser arrastrado de la pantalla a la izquierda o derecha</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"El gesto de arrastre horizontal está activado
|
||||
|
||||
El minireproductor se puede arrastrar fuera de la pantalla hacia la izquierda o la derecha"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Gesto de arrastre horizontal desactivado</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">Ocultar botón de cerrar</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">El botón de cierre está oculto</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">Se muestra el botón de cerrar</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Ocultar botones de expansión y cierre</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">Los botones están ocultos\n\nDesliza para expandir o cerrar</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"Los botones están ocultos
|
||||
|
||||
Desliza para expandir o cerrar"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Mostrar los botones de ampliación y cierre</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Ocultar subtextos</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Los subtextos están ocultos</string>
|
||||
@@ -1065,7 +1104,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">Evitar restricción regional de imágenes</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">Usando host de imagen yt4.ggpht.com</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">Utilizando el host de imágenes original\n\nHabilitar esto puede arreglar las imágenes faltantes que están bloqueadas en algunas regiones</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"Usando el servidor de imágenes original
|
||||
|
||||
Habilitar esto puede solucionar las imágenes que faltan que están bloqueadas en algunas regiones"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -1080,7 +1121,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">Deflecha & miniaturas originales</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">Flecha & Todavía capturas</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">Sigue capturando</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeFlecha proporciona miniaturas de origen crowd para vídeos de YouTube. Estas uñas suelen ser más relevantes que las proporcionadas por YouTube\n\nSi están activadas, las URL de vídeo se enviarán al servidor API y no se enviarán otros datos. Si un video no tiene miniaturas de Flecha Deprimida, entonces las capturas originales o todavía se muestran\n\nPulsa aquí para aprender más sobre DeFlecha</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow proporciona miniaturas de vídeos de YouTube obtenidas mediante crowdsourcing. Estas miniaturas suelen ser más relevantes que las que proporciona YouTube
|
||||
|
||||
Si está habilitado, las URL de los vídeos se enviarán al servidor de la API y no se envían otros datos. Si un vídeo no tiene miniaturas de DeArrow, se mostrarán las originales o las capturas fijas
|
||||
|
||||
Toca aquí para obtener más información sobre DeArrow"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Mostrar un brindis si la API no está disponible</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Toast se muestra si DeFlecha no está disponible</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Toast no se muestra si DeFlecha no está disponible</string>
|
||||
@@ -1119,8 +1164,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Dimensiones del dispositivo</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">Dimensiones del dispositivo falseadas\n\nCalidad de vídeo más alta puede ser desbloqueada, pero puede experimentar la reproducción de vídeo, peor duración de la batería y efectos secundarios desconocidos</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Dimensiones del dispositivo no falseadas\n\nHabilitar esto puede desbloquear mayores calidades de vídeo</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Las dimensiones del dispositivo están falsificadas
|
||||
|
||||
Es posible que se desbloqueen calidades de vídeo más altas, pero es posible que experimentes pausas en la reproducción de vídeo, una peor duración de la batería y efectos secundarios desconocidos"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"Las dimensiones del dispositivo no están falsificadas
|
||||
|
||||
Habilitar esto puede desbloquear calidades de vídeo más altas"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Activar esto puede causar retraso en la reproducción de vídeo, peor duración de la batería y efectos secundarios desconocidos.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1170,8 +1219,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_speed_menu_summary_off">Menú de velocidad personalizado no se muestra</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Velocidades de reproducción personalizadas</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Añadir o cambiar las velocidades de reproducción personalizadas</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Velocidades personalizadas deben ser inferiores a %s. Utilizando valores predeterminados.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Velocidades de reproducción personalizadas no válidas. Utilizando valores predeterminados.</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Las velocidades personalizadas deben ser menores que %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Velocidades de reproducción personalizadas no válidas</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Auto</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1196,18 +1245,79 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Falsifica el stream de vídeo del cliente para evitar problemas de reproducción</string>
|
||||
<string name="revanced_spoof_video_streams_title">Falsificación del stream de vídeo</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">El stream de vídeo está falsificado</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">Los streams de vídeo no están falsificados\n\nLa reproducción de vídeo puede no funcionar</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"Las transmisiones de vídeo no están falsificadas
|
||||
|
||||
Es posible que la reproducción de vídeo no funcione"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Desactivar esta configuración puede causar problemas de reproducción de vídeo.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">Cliente por defecto</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">Forzar AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Codec de vídeo AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">El códec de vídeo es VP9 o AV1</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">Su dispositivo no tiene decodificación de hardware VP9, y esta configuración siempre está encendida cuando el cliente spoofing está habilitado</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Activar esto puede mejorar la vida de la batería y corregir el retraso en la reproducción.\n\nAVC tiene una resolución máxima de 1080p, y la reproducción de vídeo utilizará más datos de Internet que VP9 o AV1.</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Códec de vídeo se ve obligado a AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">El códec de vídeo se determina automáticamente</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Habilitar esto podría mejorar la duración de la batería y solucionar los tartamudeos de la reproducción.
|
||||
|
||||
AVC tiene una resolución máxima de 1080p, el códec de audio Opus no está disponible y la reproducción de vídeo utilizará más datos de internet que VP9 o AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">Efectos secundarios para la falsificación de iOS</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">• Los vídeos de niños privados no pueden reproducir\n• Livestreams comienzan desde el principio\n• Los vídeos pueden terminar 1 segundo antes de\n• No hay código de audio de opus</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"• Es posible que los vídeos de niños privados no se reproduzcan
|
||||
• Las transmisiones en vivo empiezan desde el principio
|
||||
• Los vídeos terminan 1 segundo antes"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Efectos secundarios para la falsificación de Android RV</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">• Los vídeos infantiles no pueden reproducir\n• Falta el menú de pista de audio\n• El volumen estable no está disponible</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"• Es posible que los vídeos para niños no se reproduzcan
|
||||
• Las transmisiones en vivo empiezan desde el principio
|
||||
• Los vídeos terminan 1 segundo antes"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">Idioma de flujo de audio por defecto</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Idioma de la aplicación</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">Árabe</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">Бессия</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">Búlgaro</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">Bengalí</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">Catalán</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">Checo</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">Danés</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">Alemán</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">Griego</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">Inglés</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">Español</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">Estonio</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">Persa</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">Finlandés</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">Francés</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">Gujarati</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">Hindú</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">Croata</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">Húngaro</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">Indonesio/a</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">Italiano</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Japonés</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">Kazakh</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">Coreano</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">Lituano</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">Letón</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">Macedonio</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">Mongol</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">Maratí</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">Malayo</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">Burmese</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">Holandés</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">Odia</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">Punjabi</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">Polaco</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">Portugués (Brasil)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">Portugués (R)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Rumano</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Ruso</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">Eslovaco</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">Slovene</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">Serbio</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">Sueco</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">Swahili</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">Tamil</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">Telugu</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">Tailandés</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">Turco</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">Ucraniano</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">Urdu</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">Vietnamese</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">Chino</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1217,8 +1327,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">Anuncios de audio desbloqueados</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s no está disponible. Los anuncios pueden mostrarse. Intenta cambiar a otro servicio de bloqueo de anuncios en la configuración.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">El servidor %s devolvió un error. Los anuncios pueden mostrar. Intente cambiar a otro servicio de bloqueo de anuncios en la configuración.</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s no disponible, es posible que se muestren anuncios. Intenta cambiar el servicio de bloqueo de anuncios en los ajustes.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s ha devuelto un error, es posible que se muestren anuncios. Intenta cambiar el servicio de bloqueo de anuncios en los ajustes.</string>
|
||||
<string name="revanced_block_embedded_ads_title">Bloquear anuncios de vídeo incrustados</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">Desactivado</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Proxy luminoso</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user