mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-25 10:24:08 +01:00
Compare commits
89 Commits
v5.2.4-dev
...
v5.5.2-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe07033444 | ||
|
|
246333f3dc | ||
|
|
d82b02e4f5 | ||
|
|
44995a9f15 | ||
|
|
c87c788a26 | ||
|
|
4ef30618d1 | ||
|
|
b23e6c39fc | ||
|
|
de26766543 | ||
|
|
9168b5eaaf | ||
|
|
c43b9b3b03 | ||
|
|
5e8dfed3e8 | ||
|
|
d67dbba76f | ||
|
|
5dc93156e0 | ||
|
|
5275413ab7 | ||
|
|
248c05b670 | ||
|
|
9e6669d962 | ||
|
|
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 |
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
|
||||
|
||||
20
.github/workflows/pull_strings.yml
vendored
20
.github/workflows/pull_strings.yml
vendored
@@ -1,6 +1,8 @@
|
||||
name: Pull strings
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 */8 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
@@ -23,14 +25,18 @@ jobs:
|
||||
config: crowdin.yml
|
||||
download_translations: true
|
||||
localization_branch_name: feat/translations
|
||||
create_pull_request: true
|
||||
pull_request_title: "chore: Sync translations"
|
||||
pull_request_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
|
||||
pull_request_base_branch_name: "dev"
|
||||
commit_message: "chore: Sync translations"
|
||||
github_user_name: revanced-bot
|
||||
github_user_email: github@revanced.app
|
||||
create_pull_request: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
|
||||
- name: Open pull request
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
uses: repo-sync/pull-request@v2
|
||||
with:
|
||||
source_branch: feat/translations
|
||||
destination_branch: dev
|
||||
pr_title: "chore: Sync translations"
|
||||
pr_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
|
||||
pr_draft: true
|
||||
|
||||
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
|
||||
|
||||
282
CHANGELOG.md
282
CHANGELOG.md
@@ -1,3 +1,285 @@
|
||||
## [5.5.2-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.5.2-dev.1...v5.5.2-dev.2) (2024-12-17)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide layout components:** Hide new kind of community post ([#4155](https://github.com/ReVanced/revanced-patches/issues/4155)) ([08f68cb](https://github.com/ReVanced/revanced-patches/commit/08f68cb5d33f2cfe656d2f93d159c69981f31418))
|
||||
|
||||
## [5.5.2-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.5.1...v5.5.2-dev.1) (2024-12-17)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Miniplayer:** Use estimated maximum on screen size for devices with low density screens ([#4150](https://github.com/ReVanced/revanced-patches/issues/4150)) ([2694158](https://github.com/ReVanced/revanced-patches/commit/2694158c3c9935ede21c96832533222f850068df))
|
||||
* **YouTube - SponsorBlock:** Show create new segment error messages using a dialog ([#4148](https://github.com/ReVanced/revanced-patches/issues/4148)) ([5870906](https://github.com/ReVanced/revanced-patches/commit/587090636dfff0b358b15026cf7d47c65a4296dc))
|
||||
|
||||
## [5.5.1](https://github.com/ReVanced/revanced-patches/compare/v5.5.0...v5.5.1) (2024-12-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube:** Fix string translations ([52e04d3](https://github.com/ReVanced/revanced-patches/commit/52e04d340c1a85f3d683c67a15ae96529432d5fe))
|
||||
|
||||
## [5.5.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.5.0...v5.5.1-dev.1) (2024-12-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube:** Fix string translations ([52e04d3](https://github.com/ReVanced/revanced-patches/commit/52e04d340c1a85f3d683c67a15ae96529432d5fe))
|
||||
|
||||
# [5.5.0](https://github.com/ReVanced/revanced-patches/compare/v5.4.0...v5.5.0) (2024-12-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Twitch:** Change recommended target to the latest app version ([fb32972](https://github.com/ReVanced/revanced-patches/commit/fb32972f4de92dac1fc5d73f56a392a671c4e94b))
|
||||
* **YouTube - Spoof video streams:** Make livestreams start at the current time when using iOS client ([#4137](https://github.com/ReVanced/revanced-patches/issues/4137)) ([140f484](https://github.com/ReVanced/revanced-patches/commit/140f484b4b251b0dfa94163a63f61f45f5302052))
|
||||
* **YouTube Music:** Add `Spoof client patch` to fix playback ([#4132](https://github.com/ReVanced/revanced-patches/issues/4132)) ([b092508](https://github.com/ReVanced/revanced-patches/commit/b0925088e8b41636e285cb234593d545604ce461))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Hide feed components:** Remove obsolete `Hide search result shelf header` option ([#4134](https://github.com/ReVanced/revanced-patches/issues/4134)) ([c71443a](https://github.com/ReVanced/revanced-patches/commit/c71443a08883ab10ef2553213c03b00e7c580a43))
|
||||
* **YouTube - Navigation buttons:** Add options to disable translucent status bar and navigation bar ([#4133](https://github.com/ReVanced/revanced-patches/issues/4133)) ([a2d2141](https://github.com/ReVanced/revanced-patches/commit/a2d2141cec9b0b4929e07a8010889b21c324b229))
|
||||
* **YouTube:** Add `Force original audio` patch ([#4122](https://github.com/ReVanced/revanced-patches/issues/4122)) ([f4aa440](https://github.com/ReVanced/revanced-patches/commit/f4aa4406080b91f01d623e54b11b99ea849ddcdf))
|
||||
|
||||
# [5.5.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.4...v5.5.0-dev.5) (2024-12-16)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Navigation buttons:** Add options to disable translucent status bar and navigation bar ([#4133](https://github.com/ReVanced/revanced-patches/issues/4133)) ([a2d2141](https://github.com/ReVanced/revanced-patches/commit/a2d2141cec9b0b4929e07a8010889b21c324b229))
|
||||
|
||||
# [5.5.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.3...v5.5.0-dev.4) (2024-12-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Make livestreams start at the current time when using iOS client ([#4137](https://github.com/ReVanced/revanced-patches/issues/4137)) ([140f484](https://github.com/ReVanced/revanced-patches/commit/140f484b4b251b0dfa94163a63f61f45f5302052))
|
||||
|
||||
# [5.5.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.2...v5.5.0-dev.3) (2024-12-16)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Hide feed components:** Remove obsolete `Hide search result shelf header` option ([#4134](https://github.com/ReVanced/revanced-patches/issues/4134)) ([c71443a](https://github.com/ReVanced/revanced-patches/commit/c71443a08883ab10ef2553213c03b00e7c580a43))
|
||||
|
||||
# [5.5.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.5.0-dev.1...v5.5.0-dev.2) (2024-12-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube Music:** Add `Spoof client patch` to fix playback ([#4132](https://github.com/ReVanced/revanced-patches/issues/4132)) ([b092508](https://github.com/ReVanced/revanced-patches/commit/b0925088e8b41636e285cb234593d545604ce461))
|
||||
|
||||
# [5.5.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.4.1-dev.1...v5.5.0-dev.1) (2024-12-15)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube:** Add `Force original audio` patch ([#4122](https://github.com/ReVanced/revanced-patches/issues/4122)) ([f4aa440](https://github.com/ReVanced/revanced-patches/commit/f4aa4406080b91f01d623e54b11b99ea849ddcdf))
|
||||
|
||||
## [5.4.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.4.0...v5.4.1-dev.1) (2024-12-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Twitch:** Change recommended target to the latest app version ([fb32972](https://github.com/ReVanced/revanced-patches/commit/fb32972f4de92dac1fc5d73f56a392a671c4e94b))
|
||||
|
||||
# [5.4.0](https://github.com/ReVanced/revanced-patches/compare/v5.3.0...v5.4.0) (2024-12-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **GmsCore support:** Adjust presentation of battery optimization dialog ([#4091](https://github.com/ReVanced/revanced-patches/issues/4091)) ([5d8fc1b](https://github.com/ReVanced/revanced-patches/commit/5d8fc1bcd4e453298cfac086cdbdf279612bfb63))
|
||||
* **TikTok - Settings:** Use correct colors for dark mode ([#4087](https://github.com/ReVanced/revanced-patches/issues/4087)) ([6bd22ff](https://github.com/ReVanced/revanced-patches/commit/6bd22ffa7e8af4d8f5d2d3b1711bd92c44b4e4aa))
|
||||
* **TikTok - SIM Spoof:** Change patch to default off to fix login ([#4084](https://github.com/ReVanced/revanced-patches/issues/4084)) ([f4659a3](https://github.com/ReVanced/revanced-patches/commit/f4659a328eaf600e1e5f02a66fa2af4b6d8dc7c1))
|
||||
* **YouTube - Hide ads:** Hide new type of featured promotions ([#4113](https://github.com/ReVanced/revanced-patches/issues/4113)) ([13c7592](https://github.com/ReVanced/revanced-patches/commit/13c7592b21defd27e3a7aa9b219ffc0247bb5914))
|
||||
* **YouTube - Spoof video streams:** Fix error toast that is sometimes shown ([#4090](https://github.com/ReVanced/revanced-patches/issues/4090)) ([4c46cb2](https://github.com/ReVanced/revanced-patches/commit/4c46cb27a02c6f29626cd769b6a8e825645d5b16))
|
||||
* **YouTube - Spoof video streams:** Resolve playback of age restricted videos ([#4096](https://github.com/ReVanced/revanced-patches/issues/4096)) ([839a404](https://github.com/ReVanced/revanced-patches/commit/839a4045f1bb1759d89047834e0b7695781e82a3))
|
||||
* **YouTube Music - Bypass certificate checks:** Add a recommended target version ([#4104](https://github.com/ReVanced/revanced-patches/issues/4104)) ([17a5a6c](https://github.com/ReVanced/revanced-patches/commit/17a5a6c1691b0c23f601d3355b72f122c2bd5dcb))
|
||||
* **YouTube Music - Spoof video streams:** Disable stable volume ([#4097](https://github.com/ReVanced/revanced-patches/issues/4097)) ([16bb9df](https://github.com/ReVanced/revanced-patches/commit/16bb9dfc299612f3922724c136878606987ab132))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Add Internal data documents provider patch ([#3830](https://github.com/ReVanced/revanced-patches/issues/3830)) ([cb22f65](https://github.com/ReVanced/revanced-patches/commit/cb22f652ed678d81ffda9ece659b3971225d6931))
|
||||
* **Change package name:** Add options to change provider and permission package names to handle installation conflicts ([75c740c](https://github.com/ReVanced/revanced-patches/commit/75c740c6ba2e0c62e567f7dc90cdad368fc4f372))
|
||||
* **Twitch:** Make patches compatible with latest versions ([#4099](https://github.com/ReVanced/revanced-patches/issues/4099)) ([eecfbb7](https://github.com/ReVanced/revanced-patches/commit/eecfbb7122a9072e55e687f2c003f63108654888))
|
||||
* **YouTube - Comments:** Add `Hide 'Chat summary'` ([#4110](https://github.com/ReVanced/revanced-patches/issues/4110)) ([269493c](https://github.com/ReVanced/revanced-patches/commit/269493cd198604f1438ea2850fb68fe900d0e56f))
|
||||
|
||||
# [5.4.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.10...v5.4.0-dev.11) (2024-12-14)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Twitch:** Make patches compatible with latest versions ([#4099](https://github.com/ReVanced/revanced-patches/issues/4099)) ([eecfbb7](https://github.com/ReVanced/revanced-patches/commit/eecfbb7122a9072e55e687f2c003f63108654888))
|
||||
|
||||
# [5.4.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.9...v5.4.0-dev.10) (2024-12-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide ads:** Hide new type of featured promotions ([#4113](https://github.com/ReVanced/revanced-patches/issues/4113)) ([13c7592](https://github.com/ReVanced/revanced-patches/commit/13c7592b21defd27e3a7aa9b219ffc0247bb5914))
|
||||
|
||||
# [5.4.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.8...v5.4.0-dev.9) (2024-12-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Comments:** Add `Hide 'Chat summary'` ([#4110](https://github.com/ReVanced/revanced-patches/issues/4110)) ([269493c](https://github.com/ReVanced/revanced-patches/commit/269493cd198604f1438ea2850fb68fe900d0e56f))
|
||||
|
||||
# [5.4.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.7...v5.4.0-dev.8) (2024-12-11)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube Music - Bypass certificate checks:** Add a recommended target version ([#4104](https://github.com/ReVanced/revanced-patches/issues/4104)) ([17a5a6c](https://github.com/ReVanced/revanced-patches/commit/17a5a6c1691b0c23f601d3355b72f122c2bd5dcb))
|
||||
|
||||
# [5.4.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.6...v5.4.0-dev.7) (2024-12-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **GmsCore support:** Adjust presentation of battery optimization dialog ([#4091](https://github.com/ReVanced/revanced-patches/issues/4091)) ([5d8fc1b](https://github.com/ReVanced/revanced-patches/commit/5d8fc1bcd4e453298cfac086cdbdf279612bfb63))
|
||||
|
||||
# [5.4.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.5...v5.4.0-dev.6) (2024-12-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube Music - Spoof video streams:** Disable stable volume ([#4097](https://github.com/ReVanced/revanced-patches/issues/4097)) ([16bb9df](https://github.com/ReVanced/revanced-patches/commit/16bb9dfc299612f3922724c136878606987ab132))
|
||||
|
||||
# [5.4.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.4...v5.4.0-dev.5) (2024-12-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Resolve playback of age restricted videos ([#4096](https://github.com/ReVanced/revanced-patches/issues/4096)) ([839a404](https://github.com/ReVanced/revanced-patches/commit/839a4045f1bb1759d89047834e0b7695781e82a3))
|
||||
|
||||
# [5.4.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.3...v5.4.0-dev.4) (2024-12-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Fix error toast that is sometimes shown ([#4090](https://github.com/ReVanced/revanced-patches/issues/4090)) ([4c46cb2](https://github.com/ReVanced/revanced-patches/commit/4c46cb27a02c6f29626cd769b6a8e825645d5b16))
|
||||
|
||||
# [5.4.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.2...v5.4.0-dev.3) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **TikTok - Settings:** Use correct colors for dark mode ([#4087](https://github.com/ReVanced/revanced-patches/issues/4087)) ([6bd22ff](https://github.com/ReVanced/revanced-patches/commit/6bd22ffa7e8af4d8f5d2d3b1711bd92c44b4e4aa))
|
||||
|
||||
# [5.4.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.4.0-dev.1...v5.4.0-dev.2) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **TikTok - SIM Spoof:** Change patch to default off to fix login ([#4084](https://github.com/ReVanced/revanced-patches/issues/4084)) ([f4659a3](https://github.com/ReVanced/revanced-patches/commit/f4659a328eaf600e1e5f02a66fa2af4b6d8dc7c1))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Add Internal data documents provider patch ([#3830](https://github.com/ReVanced/revanced-patches/issues/3830)) ([cb22f65](https://github.com/ReVanced/revanced-patches/commit/cb22f652ed678d81ffda9ece659b3971225d6931))
|
||||
|
||||
# [5.4.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.3.0...v5.4.0-dev.1) (2024-12-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Change package name:** Add options to change provider and permission package names to handle installation conflicts ([75c740c](https://github.com/ReVanced/revanced-patches/commit/75c740c6ba2e0c62e567f7dc90cdad368fc4f372))
|
||||
|
||||
# [5.3.0](https://github.com/ReVanced/revanced-patches/compare/v5.2.3...v5.3.0) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Change package name:** Prevent applying the patch to known incompatible apps ([#3943](https://github.com/ReVanced/revanced-patches/issues/3943)) ([44936e7](https://github.com/ReVanced/revanced-patches/commit/44936e71e846f72f7279950232a5dba37765ceb3))
|
||||
* **Reddit:** Fix patches by using correct extension class ([70bdc68](https://github.com/ReVanced/revanced-patches/commit/70bdc6840d465399625aa1ae0259f49e72711955))
|
||||
* **Sync for Reddit:** Fix patches by using correct extension name ([030093e](https://github.com/ReVanced/revanced-patches/commit/030093e913aab3fab43935eedbaeba0f6c0491bb))
|
||||
* **Twitter:** Merge correct extension by depending on correct extension patch ([8281cf6](https://github.com/ReVanced/revanced-patches/commit/8281cf6a3eead8cc25a277371e0b0ab2be982497))
|
||||
* **YouTube - Spoof video streams:** Add missing preferred language preference to the settings ([630633c](https://github.com/ReVanced/revanced-patches/commit/630633cf57c65c65e5578046413e17670ae336e8))
|
||||
* **YouTube - Spoof video streams:** Enable opus codec by updating iOS client version ([#4063](https://github.com/ReVanced/revanced-patches/issues/4063)) ([0af156f](https://github.com/ReVanced/revanced-patches/commit/0af156f18972c5f089af4bb69824968d2a47d18f))
|
||||
* **YouTube - Spoof video streams:** Update `Force AVC` client data ([#4064](https://github.com/ReVanced/revanced-patches/issues/4064)) ([7d537dd](https://github.com/ReVanced/revanced-patches/commit/7d537ddff4bb5421fa320741275131a66ef5c7bb))
|
||||
* **YouTube Music - Permanent shuffle:** Remove obsolete and non functional patch ([#4073](https://github.com/ReVanced/revanced-patches/issues/4073)) ([fbc6ab6](https://github.com/ReVanced/revanced-patches/commit/fbc6ab6a357b351f02d4d486ddc2072cf53199c3))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Nyx:** Remove broken `Unlock pro` patch ([1fe8b16](https://github.com/ReVanced/revanced-patches/commit/1fe8b164eab0c4fa80ab2da2581977f5111a2858))
|
||||
* **YouTube - Spoof video streams:** Allow picking a default audio language track ([#4050](https://github.com/ReVanced/revanced-patches/issues/4050)) ([ede666b](https://github.com/ReVanced/revanced-patches/commit/ede666b5cb64fcbaa1334ad8bef79e2634ced113))
|
||||
* **YouTube Music:** Add `Spoof video streams` patch to fix playback ([#4065](https://github.com/ReVanced/revanced-patches/issues/4065)) ([cf3116a](https://github.com/ReVanced/revanced-patches/commit/cf3116a7583d09c25c798a85687a056f143656f0))
|
||||
* **YouTube:** Add `Open videos fullscreen` patch ([#4069](https://github.com/ReVanced/revanced-patches/issues/4069)) ([296d63b](https://github.com/ReVanced/revanced-patches/commit/296d63bd42c338a01efbcb2df702e5822d05a5f1))
|
||||
|
||||
# [5.3.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.6...v5.3.0-dev.7) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Add missing preferred language preference to the settings ([630633c](https://github.com/ReVanced/revanced-patches/commit/630633cf57c65c65e5578046413e17670ae336e8))
|
||||
|
||||
# [5.3.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.5...v5.3.0-dev.6) (2024-12-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Spoof video streams:** Allow picking a default audio language track ([#4050](https://github.com/ReVanced/revanced-patches/issues/4050)) ([ede666b](https://github.com/ReVanced/revanced-patches/commit/ede666b5cb64fcbaa1334ad8bef79e2634ced113))
|
||||
|
||||
# [5.3.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.4...v5.3.0-dev.5) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Change package name:** Prevent applying the patch to known incompatible apps ([#3943](https://github.com/ReVanced/revanced-patches/issues/3943)) ([44936e7](https://github.com/ReVanced/revanced-patches/commit/44936e71e846f72f7279950232a5dba37765ceb3))
|
||||
* **YouTube Music - Permanent shuffle:** Remove obsolete and non functional patch ([#4073](https://github.com/ReVanced/revanced-patches/issues/4073)) ([fbc6ab6](https://github.com/ReVanced/revanced-patches/commit/fbc6ab6a357b351f02d4d486ddc2072cf53199c3))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube:** Add `Open videos fullscreen` patch ([#4069](https://github.com/ReVanced/revanced-patches/issues/4069)) ([296d63b](https://github.com/ReVanced/revanced-patches/commit/296d63bd42c338a01efbcb2df702e5822d05a5f1))
|
||||
|
||||
# [5.3.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.3...v5.3.0-dev.4) (2024-12-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Nyx:** Remove broken `Unlock pro` patch ([1fe8b16](https://github.com/ReVanced/revanced-patches/commit/1fe8b164eab0c4fa80ab2da2581977f5111a2858))
|
||||
|
||||
# [5.3.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.2...v5.3.0-dev.3) (2024-12-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Update `Force AVC` client data ([#4064](https://github.com/ReVanced/revanced-patches/issues/4064)) ([7d537dd](https://github.com/ReVanced/revanced-patches/commit/7d537ddff4bb5421fa320741275131a66ef5c7bb))
|
||||
|
||||
# [5.3.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.3.0-dev.1...v5.3.0-dev.2) (2024-12-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Reddit:** Fix patches by using correct extension class ([70bdc68](https://github.com/ReVanced/revanced-patches/commit/70bdc6840d465399625aa1ae0259f49e72711955))
|
||||
|
||||
# [5.3.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.3...v5.3.0-dev.1) (2024-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube Music:** Add `Spoof video streams` patch to fix playback ([#4065](https://github.com/ReVanced/revanced-patches/issues/4065)) ([cf3116a](https://github.com/ReVanced/revanced-patches/commit/cf3116a7583d09c25c798a85687a056f143656f0))
|
||||
|
||||
## [5.2.4-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.2...v5.2.4-dev.3) (2024-12-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Spoof video streams:** Enable opus codec by updating iOS client version ([#4063](https://github.com/ReVanced/revanced-patches/issues/4063)) ([0af156f](https://github.com/ReVanced/revanced-patches/commit/0af156f18972c5f089af4bb69824968d2a47d18f))
|
||||
|
||||
## [5.2.4-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.2.4-dev.1...v5.2.4-dev.2) (2024-12-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Sync for Reddit:** Fix patches by using correct extension name ([030093e](https://github.com/ReVanced/revanced-patches/commit/030093e913aab3fab43935eedbaeba0f6c0491bb))
|
||||
|
||||
## [5.2.4-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.2.3...v5.2.4-dev.1) (2024-12-07)
|
||||
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -82,7 +82,13 @@ public final class MiniplayerPatch {
|
||||
final int WIDTH_DIP_MIN = 170; // Seems to be the smallest that works.
|
||||
final int HORIZONTAL_PADDING_DIP = 15; // Estimated padding.
|
||||
// Round down to the nearest 5 pixels, to keep any error toasts easier to read.
|
||||
final int WIDTH_DIP_MAX = 5 * ((deviceDipWidth - HORIZONTAL_PADDING_DIP) / 5);
|
||||
final int estimatedWidthDipMax = 5 * ((deviceDipWidth - HORIZONTAL_PADDING_DIP) / 5);
|
||||
// On some ultra low end devices the pixel width and density are the same number,
|
||||
// which causes the estimate to always give a value of 1.
|
||||
// Fix this by using a fixed size of double the min width.
|
||||
final int WIDTH_DIP_MAX = estimatedWidthDipMax <= WIDTH_DIP_MIN
|
||||
? 2 * WIDTH_DIP_MIN
|
||||
: estimatedWidthDipMax;
|
||||
Logger.printDebug(() -> "Screen dip width: " + deviceDipWidth + " maxWidth: " + WIDTH_DIP_MAX);
|
||||
|
||||
int dipWidth = Settings.MINIPLAYER_WIDTH_DIP.get();
|
||||
@@ -127,8 +133,10 @@ public final class MiniplayerPatch {
|
||||
private static final boolean HIDE_SUBTEXT_ENABLED =
|
||||
(CURRENT_TYPE == MODERN_1 || CURRENT_TYPE == MODERN_3) && Settings.MINIPLAYER_HIDE_SUBTEXT.get();
|
||||
|
||||
private static final boolean HIDE_REWIND_FORWARD_ENABLED =
|
||||
CURRENT_TYPE == MODERN_1 && Settings.MINIPLAYER_HIDE_REWIND_FORWARD.get();
|
||||
// 19.25 is last version that has forward/back buttons for phones,
|
||||
// but buttons still show for tablets/foldable devices and they don't work well so always hide.
|
||||
private static final boolean HIDE_REWIND_FORWARD_ENABLED = CURRENT_TYPE == MODERN_1
|
||||
&& (VersionCheckPatch.IS_19_34_OR_GREATER || Settings.MINIPLAYER_HIDE_REWIND_FORWARD.get());
|
||||
|
||||
private static final boolean MINIPLAYER_ROUNDED_CORNERS_ENABLED =
|
||||
Settings.MINIPLAYER_ROUNDED_CORNERS.get();
|
||||
@@ -145,6 +153,18 @@ public final class MiniplayerPatch {
|
||||
|
||||
private static final int OPACITY_LEVEL;
|
||||
|
||||
static {
|
||||
int opacity = Settings.MINIPLAYER_OPACITY.get();
|
||||
|
||||
if (opacity < 0 || opacity > 100) {
|
||||
Utils.showToastLong(str("revanced_miniplayer_opacity_invalid_toast"));
|
||||
Settings.MINIPLAYER_OPACITY.resetToDefault();
|
||||
opacity = Settings.MINIPLAYER_OPACITY.defaultValue;
|
||||
}
|
||||
|
||||
OPACITY_LEVEL = (opacity * 255) / 100;
|
||||
}
|
||||
|
||||
public static final class MiniplayerHorizontalDragAvailability implements Setting.Availability {
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
@@ -163,18 +183,6 @@ public final class MiniplayerPatch {
|
||||
}
|
||||
}
|
||||
|
||||
static {
|
||||
int opacity = Settings.MINIPLAYER_OPACITY.get();
|
||||
|
||||
if (opacity < 0 || opacity > 100) {
|
||||
Utils.showToastLong(str("revanced_miniplayer_opacity_invalid_toast"));
|
||||
Settings.MINIPLAYER_OPACITY.resetToDefault();
|
||||
opacity = Settings.MINIPLAYER_OPACITY.defaultValue;
|
||||
}
|
||||
|
||||
OPACITY_LEVEL = (opacity * 255) / 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*
|
||||
@@ -182,7 +190,7 @@ public final class MiniplayerPatch {
|
||||
* effectively disabling the miniplayer.
|
||||
*/
|
||||
public static boolean getMiniplayerOnCloseHandler(boolean original) {
|
||||
return CURRENT_TYPE == ORIGINAL
|
||||
return CURRENT_TYPE == DEFAULT
|
||||
? original
|
||||
: CURRENT_TYPE == DISABLED;
|
||||
}
|
||||
@@ -201,7 +209,7 @@ public final class MiniplayerPatch {
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean getModernMiniplayerOverride(boolean original) {
|
||||
return CURRENT_TYPE == ORIGINAL
|
||||
return CURRENT_TYPE == DEFAULT
|
||||
? original
|
||||
: CURRENT_TYPE.isModern();
|
||||
}
|
||||
@@ -229,7 +237,7 @@ public final class MiniplayerPatch {
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean getModernFeatureFlagsActiveOverride(boolean original) {
|
||||
if (CURRENT_TYPE == ORIGINAL) {
|
||||
if (CURRENT_TYPE == DEFAULT) {
|
||||
return original;
|
||||
}
|
||||
|
||||
@@ -240,7 +248,7 @@ public final class MiniplayerPatch {
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean enableMiniplayerDoubleTapAction(boolean original) {
|
||||
if (CURRENT_TYPE == ORIGINAL) {
|
||||
if (CURRENT_TYPE == DEFAULT) {
|
||||
return original;
|
||||
}
|
||||
|
||||
@@ -251,7 +259,7 @@ public final class MiniplayerPatch {
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean enableMiniplayerDragAndDrop(boolean original) {
|
||||
if (CURRENT_TYPE == ORIGINAL) {
|
||||
if (CURRENT_TYPE == DEFAULT) {
|
||||
return original;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,12 +3,15 @@ package app.revanced.extension.youtube.patches;
|
||||
import static app.revanced.extension.shared.Utils.hideViewUnderCondition;
|
||||
import static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton;
|
||||
|
||||
import android.os.Build;
|
||||
import android.view.View;
|
||||
|
||||
import java.util.EnumMap;
|
||||
import java.util.Map;
|
||||
|
||||
import android.widget.TextView;
|
||||
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@@ -26,6 +29,15 @@ public final class NavigationButtonsPatch {
|
||||
private static final boolean SWITCH_CREATE_WITH_NOTIFICATIONS_BUTTON
|
||||
= Settings.SWITCH_CREATE_WITH_NOTIFICATIONS_BUTTON.get();
|
||||
|
||||
private static final Boolean DISABLE_TRANSLUCENT_STATUS_BAR
|
||||
= Settings.DISABLE_TRANSLUCENT_STATUS_BAR.get();
|
||||
|
||||
private static final Boolean DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT
|
||||
= Settings.DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT.get();
|
||||
|
||||
private static final Boolean DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK
|
||||
= Settings.DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK.get();
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
@@ -48,4 +60,42 @@ public final class NavigationButtonsPatch {
|
||||
public static void hideNavigationButtonLabels(TextView navigationLabelsView) {
|
||||
hideViewUnderCondition(Settings.HIDE_NAVIGATION_BUTTON_LABELS, navigationLabelsView);
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean useTranslucentNavigationStatusBar(boolean original) {
|
||||
// Must check Android version, as forcing this on Android 11 or lower causes app hang and crash.
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
|
||||
return original;
|
||||
}
|
||||
|
||||
if (DISABLE_TRANSLUCENT_STATUS_BAR) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return original;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean useTranslucentNavigationButtons(boolean original) {
|
||||
// Feature requires Android 13+
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
|
||||
return original;
|
||||
}
|
||||
|
||||
if (!DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK && !DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT) {
|
||||
return original;
|
||||
}
|
||||
|
||||
if (DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK && DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return Utils.isDarkModeEnabled(Utils.getContext())
|
||||
? !DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK
|
||||
: !DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -74,13 +73,14 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
|
||||
final var communityPosts = new StringFilterGroup(
|
||||
Settings.HIDE_COMMUNITY_POSTS,
|
||||
"post_base_wrapper",
|
||||
"post_base_wrapper", // may be obsolete and no longer needed.
|
||||
"text_post_root.eml",
|
||||
"images_post_root.eml",
|
||||
"images_post_slim.eml",
|
||||
"images_post_slim.eml", // may be obsolete and no longer needed.
|
||||
"images_post_root_slim.eml",
|
||||
"text_post_root_slim.eml",
|
||||
"post_base_wrapper_slim.eml"
|
||||
"post_base_wrapper_slim.eml",
|
||||
"poll_post_root.eml"
|
||||
);
|
||||
|
||||
final var communityGuidelines = new StringFilterGroup(
|
||||
@@ -194,11 +194,6 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
"timed_reaction"
|
||||
);
|
||||
|
||||
searchResultShelfHeader = new StringFilterGroup(
|
||||
Settings.HIDE_SEARCH_RESULT_SHELF_HEADER,
|
||||
"shelf_header.eml"
|
||||
);
|
||||
|
||||
notifyMe = new StringFilterGroup(
|
||||
Settings.HIDE_NOTIFY_ME_BUTTON,
|
||||
"set_reminder_button"
|
||||
@@ -324,9 +319,6 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO: This also hides the feed Shorts shelf header
|
||||
if (matchedGroup == searchResultShelfHeader && contentIndex != 0) return false;
|
||||
|
||||
if (matchedGroup == horizontalShelves) {
|
||||
if (contentIndex == 0 && hideShelves()) {
|
||||
return super.isFiltered(path, identifier, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
||||
|
||||
@@ -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,41 @@ package app.revanced.extension.youtube.settings;
|
||||
|
||||
import static java.lang.Boolean.FALSE;
|
||||
import static java.lang.Boolean.TRUE;
|
||||
import static app.revanced.extension.shared.settings.Setting.*;
|
||||
import static app.revanced.extension.shared.settings.Setting.Availability;
|
||||
import static app.revanced.extension.shared.settings.Setting.migrateFromOldPreferences;
|
||||
import static app.revanced.extension.shared.settings.Setting.migrateOldSettingToNew;
|
||||
import static app.revanced.extension.shared.settings.Setting.parent;
|
||||
import static app.revanced.extension.shared.settings.Setting.parentsAny;
|
||||
import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.StartPage;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideExpandCloseAvailability;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHorizontalDragAvailability;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.*;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MINIMAL;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_1;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_2;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_3;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MODERN_4;
|
||||
import static app.revanced.extension.youtube.patches.SeekbarThumbnailsPatch.SeekbarThumbnailsHighQualityAvailability;
|
||||
import static app.revanced.extension.youtube.patches.VersionCheckPatch.IS_19_17_OR_GREATER;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.*;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.IGNORE;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.MANUAL_SKIP;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY_ONCE;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.settings.*;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.shared.settings.BooleanSetting;
|
||||
import app.revanced.extension.shared.settings.EnumSetting;
|
||||
import app.revanced.extension.shared.settings.FloatSetting;
|
||||
import app.revanced.extension.shared.settings.IntegerSetting;
|
||||
import app.revanced.extension.shared.settings.LongSetting;
|
||||
import app.revanced.extension.shared.settings.Setting;
|
||||
import app.revanced.extension.shared.settings.StringSetting;
|
||||
import app.revanced.extension.shared.settings.preference.SharedPrefCategory;
|
||||
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.DeArrowAvailability;
|
||||
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.StillImagesAvailability;
|
||||
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.ThumbnailOption;
|
||||
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.ThumbnailStillTime;
|
||||
import app.revanced.extension.youtube.patches.spoof.ClientType;
|
||||
import app.revanced.extension.youtube.patches.spoof.SpoofVideoStreamsPatch;
|
||||
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
|
||||
|
||||
public class Settings extends BaseSettings {
|
||||
@@ -35,19 +51,21 @@ public class Settings extends BaseSettings {
|
||||
public static final FloatSetting PLAYBACK_SPEED_DEFAULT = new FloatSetting("revanced_playback_speed_default", -2.0f);
|
||||
public static final StringSetting CUSTOM_PLAYBACK_SPEEDS = new StringSetting("revanced_custom_playback_speeds",
|
||||
"0.25\n0.5\n0.75\n0.9\n0.95\n1.0\n1.05\n1.1\n1.25\n1.5\n1.75\n2.0\n3.0\n4.0\n5.0", true);
|
||||
// Audio
|
||||
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", FALSE);
|
||||
|
||||
// Ads
|
||||
public static final BooleanSetting HIDE_FULLSCREEN_ADS = new BooleanSetting("revanced_hide_fullscreen_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_BUTTONED_ADS = new BooleanSetting("revanced_hide_buttoned_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_FULLSCREEN_ADS = new BooleanSetting("revanced_hide_fullscreen_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_GENERAL_ADS = new BooleanSetting("revanced_hide_general_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_GET_PREMIUM = new BooleanSetting("revanced_hide_get_premium", TRUE);
|
||||
public static final BooleanSetting HIDE_HIDE_LATEST_POSTS = new BooleanSetting("revanced_hide_latest_posts_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_MERCHANDISE_BANNERS = new BooleanSetting("revanced_hide_merchandise_banners", TRUE);
|
||||
public static final BooleanSetting HIDE_PAID_PROMOTION_LABEL = new BooleanSetting("revanced_hide_paid_promotion_label", TRUE);
|
||||
public static final BooleanSetting HIDE_PRODUCTS_BANNER = new BooleanSetting("revanced_hide_products_banner", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_STORE_SHELF = new BooleanSetting("revanced_hide_player_store_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_SHOPPING_LINKS = new BooleanSetting("revanced_hide_shopping_links", TRUE);
|
||||
public static final BooleanSetting HIDE_PRODUCTS_BANNER = new BooleanSetting("revanced_hide_products_banner", TRUE);
|
||||
public static final BooleanSetting HIDE_SELF_SPONSOR = new BooleanSetting("revanced_hide_self_sponsor_ads", TRUE);
|
||||
public static final BooleanSetting HIDE_SHOPPING_LINKS = new BooleanSetting("revanced_hide_shopping_links", TRUE);
|
||||
public static final BooleanSetting HIDE_VIDEO_ADS = new BooleanSetting("revanced_hide_video_ads", TRUE, true);
|
||||
public static final BooleanSetting HIDE_VISIT_STORE_BUTTON = new BooleanSetting("revanced_hide_visit_store_button", TRUE);
|
||||
public static final BooleanSetting HIDE_WEB_SEARCH_RESULTS = new BooleanSetting("revanced_hide_web_search_results", TRUE);
|
||||
@@ -55,9 +73,26 @@ public class Settings extends BaseSettings {
|
||||
// Feed
|
||||
public static final BooleanSetting HIDE_ALBUM_CARDS = new BooleanSetting("revanced_hide_album_cards", FALSE, true);
|
||||
public static final BooleanSetting HIDE_ARTIST_CARDS = new BooleanSetting("revanced_hide_artist_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_EXPANDABLE_CHIP = new BooleanSetting("revanced_hide_expandable_chip", TRUE);
|
||||
public static final BooleanSetting HIDE_CHIPS_SHELF = new BooleanSetting("revanced_hide_chips_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMUNITY_POSTS = new BooleanSetting("revanced_hide_community_posts", FALSE);
|
||||
public static final BooleanSetting HIDE_COMPACT_BANNER = new BooleanSetting("revanced_hide_compact_banner", TRUE);
|
||||
public static final BooleanSetting HIDE_CROWDFUNDING_BOX = new BooleanSetting("revanced_hide_crowdfunding_box", FALSE, true);
|
||||
public static final BooleanSetting HIDE_DOODLES = new BooleanSetting("revanced_hide_doodles", FALSE, true, "revanced_hide_doodles_user_dialog_message");
|
||||
|
||||
public static final BooleanSetting HIDE_EXPANDABLE_CHIP = new BooleanSetting("revanced_hide_expandable_chip", TRUE);
|
||||
public static final BooleanSetting HIDE_FEED_SURVEY = new BooleanSetting("revanced_hide_feed_survey", TRUE);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_FEED = new BooleanSetting("revanced_hide_filter_bar_feed_in_feed", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_RELATED_VIDEOS = new BooleanSetting("revanced_hide_filter_bar_feed_in_related_videos", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_SEARCH = new BooleanSetting("revanced_hide_filter_bar_feed_in_search", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FLOATING_MICROPHONE_BUTTON = new BooleanSetting("revanced_hide_floating_microphone_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_HORIZONTAL_SHELVES = new BooleanSetting("revanced_hide_horizontal_shelves", TRUE);
|
||||
public static final BooleanSetting HIDE_IMAGE_SHELF = new BooleanSetting("revanced_hide_image_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_MIX_PLAYLISTS = new BooleanSetting("revanced_hide_mix_playlists", TRUE);
|
||||
public static final BooleanSetting HIDE_MOVIES_SECTION = new BooleanSetting("revanced_hide_movies_section", TRUE);
|
||||
public static final BooleanSetting HIDE_NOTIFY_ME_BUTTON = new BooleanSetting("revanced_hide_notify_me_button", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYABLES = new BooleanSetting("revanced_hide_playables", TRUE);
|
||||
public static final BooleanSetting HIDE_SEARCH_RESULT_RECOMMENDATIONS = new BooleanSetting("revanced_hide_search_result_recommendations", TRUE);
|
||||
public static final BooleanSetting HIDE_SHOW_MORE_BUTTON = new BooleanSetting("revanced_hide_show_more_button", TRUE, true);
|
||||
// Alternative thumbnails
|
||||
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_HOME = new EnumSetting<>("revanced_alt_thumbnail_home", ThumbnailOption.ORIGINAL);
|
||||
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_SUBSCRIPTIONS = new EnumSetting<>("revanced_alt_thumbnail_subscription", ThumbnailOption.ORIGINAL);
|
||||
@@ -69,7 +104,6 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting ALT_THUMBNAIL_DEARROW_CONNECTION_TOAST = new BooleanSetting("revanced_alt_thumbnail_dearrow_connection_toast", TRUE, new DeArrowAvailability());
|
||||
public static final EnumSetting<ThumbnailStillTime> ALT_THUMBNAIL_STILLS_TIME = new EnumSetting<>("revanced_alt_thumbnail_stills_time", ThumbnailStillTime.MIDDLE, new StillImagesAvailability());
|
||||
public static final BooleanSetting ALT_THUMBNAIL_STILLS_FAST = new BooleanSetting("revanced_alt_thumbnail_stills_fast", FALSE, new StillImagesAvailability());
|
||||
|
||||
// Hide keyword content
|
||||
public static final BooleanSetting HIDE_KEYWORD_CONTENT_HOME = new BooleanSetting("revanced_hide_keyword_content_home", FALSE);
|
||||
public static final BooleanSetting HIDE_KEYWORD_CONTENT_SUBSCRIPTIONS = new BooleanSetting("revanced_hide_keyword_content_subscriptions", FALSE);
|
||||
@@ -77,88 +111,61 @@ public class Settings extends BaseSettings {
|
||||
public static final StringSetting HIDE_KEYWORD_CONTENT_PHRASES = new StringSetting("revanced_hide_keyword_content_phrases", "",
|
||||
parentsAny(HIDE_KEYWORD_CONTENT_HOME, HIDE_KEYWORD_CONTENT_SUBSCRIPTIONS, HIDE_KEYWORD_CONTENT_SEARCH));
|
||||
|
||||
// Uncategorized layout related settings. Do not add to this section, and instead move these out and categorize them.
|
||||
public static final BooleanSetting DISABLE_SUGGESTED_VIDEO_END_SCREEN = new BooleanSetting("revanced_disable_suggested_video_end_screen", FALSE, true);
|
||||
public static final BooleanSetting GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_gradient_loading_screen", FALSE, true);
|
||||
public static final BooleanSetting HIDE_HORIZONTAL_SHELVES = new BooleanSetting("revanced_hide_horizontal_shelves", TRUE);
|
||||
public static final BooleanSetting HIDE_CAPTIONS_BUTTON = new BooleanSetting("revanced_hide_captions_button", FALSE);
|
||||
public static final BooleanSetting HIDE_CHANNEL_BAR = new BooleanSetting("revanced_hide_channel_bar", FALSE);
|
||||
public static final BooleanSetting HIDE_CHANNEL_MEMBER_SHELF = new BooleanSetting("revanced_hide_channel_member_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_CHIPS_SHELF = new BooleanSetting("revanced_hide_chips_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_community_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMUNITY_POSTS = new BooleanSetting("revanced_hide_community_posts", FALSE);
|
||||
public static final BooleanSetting HIDE_COMPACT_BANNER = new BooleanSetting("revanced_hide_compact_banner", TRUE);
|
||||
public static final BooleanSetting HIDE_CROWDFUNDING_BOX = new BooleanSetting("revanced_hide_crowdfunding_box", FALSE, true);
|
||||
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
|
||||
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_FEED_SURVEY = new BooleanSetting("revanced_hide_feed_survey", TRUE);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_FEED = new BooleanSetting("revanced_hide_filter_bar_feed_in_feed", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_RELATED_VIDEOS = new BooleanSetting("revanced_hide_filter_bar_feed_in_related_videos", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_SEARCH = new BooleanSetting("revanced_hide_filter_bar_feed_in_search", FALSE, true);
|
||||
public static final BooleanSetting HIDE_FLOATING_MICROPHONE_BUTTON = new BooleanSetting("revanced_hide_floating_microphone_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_FULLSCREEN_PANELS = new BooleanSetting("revanced_hide_fullscreen_panels", TRUE, true);
|
||||
public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
|
||||
public static final BooleanSetting HIDE_IMAGE_SHELF = new BooleanSetting("revanced_hide_image_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_JOIN_MEMBERSHIP_BUTTON = new BooleanSetting("revanced_hide_join_membership_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHOW_MORE_BUTTON = new BooleanSetting("revanced_hide_show_more_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_MEDICAL_PANELS = new BooleanSetting("revanced_hide_medical_panels", TRUE);
|
||||
public static final BooleanSetting HIDE_MIX_PLAYLISTS = new BooleanSetting("revanced_hide_mix_playlists", TRUE);
|
||||
public static final BooleanSetting HIDE_MOVIES_SECTION = new BooleanSetting("revanced_hide_movies_section", TRUE);
|
||||
public static final BooleanSetting HIDE_NOTIFY_ME_BUTTON = new BooleanSetting("revanced_hide_notify_me_button", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYABLES = new BooleanSetting("revanced_hide_playables", TRUE);
|
||||
public static final BooleanSetting HIDE_QUICK_ACTIONS = new BooleanSetting("revanced_hide_quick_actions", FALSE);
|
||||
public static final BooleanSetting HIDE_RELATED_VIDEOS = new BooleanSetting("revanced_hide_related_videos", FALSE);
|
||||
public static final BooleanSetting HIDE_SEARCH_RESULT_SHELF_HEADER = new BooleanSetting("revanced_hide_search_result_shelf_header", FALSE);
|
||||
public static final BooleanSetting HIDE_SUBSCRIBERS_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_subscribers_community_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_TIMED_REACTIONS = new BooleanSetting("revanced_hide_timed_reactions", TRUE);
|
||||
public static final BooleanSetting HIDE_TIMESTAMP = new BooleanSetting("revanced_hide_timestamp", FALSE);
|
||||
public static final BooleanSetting HIDE_VIDEO_CHANNEL_WATERMARK = new BooleanSetting("revanced_hide_channel_watermark", TRUE);
|
||||
public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_SEARCH_RESULT_RECOMMENDATIONS = new BooleanSetting("revanced_hide_search_result_recommendations", TRUE);
|
||||
public static final IntegerSetting PLAYER_OVERLAY_OPACITY = new IntegerSetting("revanced_player_overlay_opacity",100, true);
|
||||
public static final BooleanSetting PLAYER_POPUP_PANELS = new BooleanSetting("revanced_hide_player_popup_panels", FALSE);
|
||||
|
||||
// Player
|
||||
public static final BooleanSetting DISABLE_FULLSCREEN_AMBIENT_MODE = new BooleanSetting("revanced_disable_fullscreen_ambient_mode", TRUE, true);
|
||||
public static final BooleanSetting DISABLE_ROLLING_NUMBER_ANIMATIONS = new BooleanSetting("revanced_disable_rolling_number_animations", FALSE);
|
||||
public static final BooleanSetting DISABLE_LIKE_SUBSCRIBE_GLOW = new BooleanSetting("revanced_disable_like_subscribe_glow", FALSE);
|
||||
public static final BooleanSetting HIDE_AUTOPLAY_BUTTON = new BooleanSetting("revanced_hide_autoplay_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_hide_cast_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS = new BooleanSetting("revanced_hide_player_previous_next_buttons", FALSE, true);
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_BUTTONS = new BooleanSetting("revanced_hide_player_buttons", FALSE, true);
|
||||
public static final BooleanSetting COPY_VIDEO_URL = new BooleanSetting("revanced_copy_video_url", FALSE);
|
||||
public static final BooleanSetting COPY_VIDEO_URL_TIMESTAMP = new BooleanSetting("revanced_copy_video_url_timestamp", TRUE);
|
||||
public static final BooleanSetting DISABLE_FULLSCREEN_AMBIENT_MODE = new BooleanSetting("revanced_disable_fullscreen_ambient_mode", TRUE, true);
|
||||
public static final BooleanSetting DISABLE_LIKE_SUBSCRIBE_GLOW = new BooleanSetting("revanced_disable_like_subscribe_glow", FALSE);
|
||||
public static final BooleanSetting DISABLE_ROLLING_NUMBER_ANIMATIONS = new BooleanSetting("revanced_disable_rolling_number_animations", FALSE);
|
||||
public static final BooleanSetting DISABLE_SUGGESTED_VIDEO_END_SCREEN = new BooleanSetting("revanced_disable_suggested_video_end_screen", FALSE, true);
|
||||
public static final BooleanSetting HIDE_AUTOPLAY_BUTTON = new BooleanSetting("revanced_hide_autoplay_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_CAPTIONS_BUTTON = new BooleanSetting("revanced_hide_captions_button", FALSE);
|
||||
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_hide_cast_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_CHANNEL_BAR = new BooleanSetting("revanced_hide_channel_bar", FALSE);
|
||||
public static final BooleanSetting HIDE_CHANNEL_MEMBER_SHELF = new BooleanSetting("revanced_hide_channel_member_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_community_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
|
||||
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
|
||||
public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_JOIN_MEMBERSHIP_BUTTON = new BooleanSetting("revanced_hide_join_membership_button", TRUE);
|
||||
public static final BooleanSetting HIDE_MEDICAL_PANELS = new BooleanSetting("revanced_hide_medical_panels", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS = new BooleanSetting("revanced_hide_player_previous_next_buttons", FALSE, true);
|
||||
public static final BooleanSetting HIDE_QUICK_ACTIONS = new BooleanSetting("revanced_hide_quick_actions", FALSE);
|
||||
public static final BooleanSetting HIDE_RELATED_VIDEOS = new BooleanSetting("revanced_hide_related_videos", FALSE);
|
||||
public static final BooleanSetting HIDE_SUBSCRIBERS_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_subscribers_community_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_TIMED_REACTIONS = new BooleanSetting("revanced_hide_timed_reactions", TRUE);
|
||||
public static final BooleanSetting HIDE_VIDEO_CHANNEL_WATERMARK = new BooleanSetting("revanced_hide_channel_watermark", TRUE);
|
||||
public static final BooleanSetting PLAYBACK_SPEED_DIALOG_BUTTON = new BooleanSetting("revanced_playback_speed_dialog_button", FALSE);
|
||||
|
||||
public static final BooleanSetting PLAYER_POPUP_PANELS = new BooleanSetting("revanced_hide_player_popup_panels", FALSE);
|
||||
public static final IntegerSetting PLAYER_OVERLAY_OPACITY = new IntegerSetting("revanced_player_overlay_opacity", 100, true);
|
||||
public static final BooleanSetting OPEN_VIDEOS_FULLSCREEN_PORTRAIT = new BooleanSetting("revanced_open_videos_fullscreen_portrait", FALSE);
|
||||
// Miniplayer
|
||||
public static final EnumSetting<MiniplayerType> MINIPLAYER_TYPE = new EnumSetting<>("revanced_miniplayer_type", MiniplayerType.ORIGINAL, true);
|
||||
public static final EnumSetting<MiniplayerType> MINIPLAYER_TYPE = new EnumSetting<>("revanced_miniplayer_type", MiniplayerType.DEFAULT, true);
|
||||
private static final Availability MINIPLAYER_ANY_MODERN = MINIPLAYER_TYPE.availability(MODERN_1, MODERN_2, MODERN_3, MODERN_4);
|
||||
public static final BooleanSetting MINIPLAYER_DOUBLE_TAP_ACTION = new BooleanSetting("revanced_miniplayer_double_tap_action", TRUE, true, MINIPLAYER_ANY_MODERN);
|
||||
public static final BooleanSetting MINIPLAYER_DRAG_AND_DROP = new BooleanSetting("revanced_miniplayer_drag_and_drop", TRUE, true, MINIPLAYER_ANY_MODERN);
|
||||
public static final BooleanSetting MINIPLAYER_HORIZONTAL_DRAG = new BooleanSetting("revanced_miniplayer_horizontal_drag", FALSE, true, new MiniplayerHorizontalDragAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_HIDE_EXPAND_CLOSE = new BooleanSetting("revanced_miniplayer_hide_expand_close", FALSE, true, new MiniplayerHideExpandCloseAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_HIDE_SUBTEXT = new BooleanSetting("revanced_miniplayer_hide_subtext", FALSE, true, MINIPLAYER_TYPE.availability(MODERN_1, MODERN_3));
|
||||
public static final BooleanSetting MINIPLAYER_HIDE_REWIND_FORWARD = new BooleanSetting("revanced_miniplayer_hide_rewind_forward", FALSE, true, MINIPLAYER_TYPE.availability(MODERN_1));
|
||||
public static final BooleanSetting MINIPLAYER_HIDE_REWIND_FORWARD = new BooleanSetting("revanced_miniplayer_hide_rewind_forward", TRUE, true, MINIPLAYER_TYPE.availability(MODERN_1));
|
||||
public static final BooleanSetting MINIPLAYER_ROUNDED_CORNERS = new BooleanSetting("revanced_miniplayer_rounded_corners", TRUE, true, MINIPLAYER_ANY_MODERN);
|
||||
public static final IntegerSetting MINIPLAYER_WIDTH_DIP = new IntegerSetting("revanced_miniplayer_width_dip", 192, true, MINIPLAYER_ANY_MODERN);
|
||||
public static final IntegerSetting MINIPLAYER_OPACITY = new IntegerSetting("revanced_miniplayer_opacity", 100, true, MINIPLAYER_TYPE.availability(MODERN_1));
|
||||
|
||||
// External downloader
|
||||
public static final BooleanSetting EXTERNAL_DOWNLOADER = new BooleanSetting("revanced_external_downloader", FALSE);
|
||||
public static final BooleanSetting EXTERNAL_DOWNLOADER_ACTION_BUTTON = new BooleanSetting("revanced_external_downloader_action_button", FALSE);
|
||||
public static final StringSetting EXTERNAL_DOWNLOADER_PACKAGE_NAME = new StringSetting("revanced_external_downloader_name",
|
||||
"org.schabi.newpipe" /* NewPipe */, parentsAny(EXTERNAL_DOWNLOADER, EXTERNAL_DOWNLOADER_ACTION_BUTTON));
|
||||
|
||||
// Comments
|
||||
public static final BooleanSetting HIDE_COMMENTS_CHAT_SUMMARY = new BooleanSetting("revanced_hide_comments_chat_summary", FALSE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_BY_MEMBERS_HEADER = new BooleanSetting("revanced_hide_comments_by_members_header", FALSE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_SECTION = new BooleanSetting("revanced_hide_comments_section", FALSE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_CREATE_A_SHORT_BUTTON = new BooleanSetting("revanced_hide_comments_create_a_short_button", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_PREVIEW_COMMENT = new BooleanSetting("revanced_hide_comments_preview_comment", FALSE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_SECTION = new BooleanSetting("revanced_hide_comments_section", FALSE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_THANKS_BUTTON = new BooleanSetting("revanced_hide_comments_thanks_button", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMENTS_TIMESTAMP_AND_EMOJI_BUTTONS = new BooleanSetting("revanced_hide_comments_timestamp_and_emoji_buttons", TRUE);
|
||||
|
||||
// Description
|
||||
public static final BooleanSetting HIDE_ATTRIBUTES_SECTION = new BooleanSetting("revanced_hide_attributes_section", FALSE);
|
||||
public static final BooleanSetting HIDE_CHAPTERS_SECTION = new BooleanSetting("revanced_hide_chapters_section", TRUE);
|
||||
@@ -166,47 +173,43 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_KEY_CONCEPTS_SECTION = new BooleanSetting("revanced_hide_key_concepts_section", FALSE);
|
||||
public static final BooleanSetting HIDE_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);
|
||||
public static final BooleanSetting HIDE_TRANSCRIPT_SECTION = new BooleanSetting("revanced_hide_transcript_section", TRUE);
|
||||
|
||||
// Action buttons
|
||||
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHARE_BUTTON = new BooleanSetting("revanced_hide_share_button", FALSE);
|
||||
public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE);
|
||||
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_DOWNLOAD_BUTTON = new BooleanSetting("revanced_hide_download_button", FALSE);
|
||||
public static final BooleanSetting HIDE_THANKS_BUTTON = new BooleanSetting("revanced_hide_thanks_button", TRUE);
|
||||
public static final BooleanSetting HIDE_CLIP_BUTTON = new BooleanSetting("revanced_hide_clip_button", TRUE);
|
||||
public static final BooleanSetting HIDE_DOWNLOAD_BUTTON = new BooleanSetting("revanced_hide_download_button", FALSE);
|
||||
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYLIST_BUTTON = new BooleanSetting("revanced_hide_playlist_button", FALSE);
|
||||
|
||||
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHARE_BUTTON = new BooleanSetting("revanced_hide_share_button", FALSE);
|
||||
public static final BooleanSetting HIDE_THANKS_BUTTON = new BooleanSetting("revanced_hide_thanks_button", TRUE);
|
||||
// Player flyout menu items
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_CAPTIONS = new BooleanSetting("revanced_hide_player_flyout_captions", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_ADDITIONAL_SETTINGS = new BooleanSetting("revanced_hide_player_flyout_additional_settings", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOOP_VIDEO = new BooleanSetting("revanced_hide_player_flyout_loop_video", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_AMBIENT_MODE = new BooleanSetting("revanced_hide_player_flyout_ambient_mode", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_HELP = new BooleanSetting("revanced_hide_player_flyout_help", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SPEED = new BooleanSetting("revanced_hide_player_flyout_speed", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MORE_INFO = new BooleanSetting("revanced_hide_player_flyout_more_info", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOCK_SCREEN = new BooleanSetting("revanced_hide_player_flyout_lock_screen", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_AUDIO_TRACK = new BooleanSetting("revanced_hide_player_flyout_audio_track", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_CAPTIONS = new BooleanSetting("revanced_hide_player_flyout_captions", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_HELP = new BooleanSetting("revanced_hide_player_flyout_help", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOCK_SCREEN = new BooleanSetting("revanced_hide_player_flyout_lock_screen", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOOP_VIDEO = new BooleanSetting("revanced_hide_player_flyout_loop_video", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MORE_INFO = new BooleanSetting("revanced_hide_player_flyout_more_info", TRUE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SLEEP_TIMER = new BooleanSetting("revanced_hide_player_flyout_sleep_timer", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SPEED = new BooleanSetting("revanced_hide_player_flyout_speed", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_STABLE_VOLUME = new BooleanSetting("revanced_hide_player_flyout_stable_volume", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_WATCH_IN_VR = new BooleanSetting("revanced_hide_player_flyout_watch_in_vr", TRUE);
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_video_quality_menu_footer", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_player_flyout_video_quality_footer", FALSE);
|
||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_WATCH_IN_VR = new BooleanSetting("revanced_hide_player_flyout_watch_in_vr", TRUE);
|
||||
|
||||
// General layout
|
||||
public static final EnumSetting<StartPage> CHANGE_START_PAGE = new EnumSetting<>("revanced_change_start_page", StartPage.ORIGINAL, true);
|
||||
public static final BooleanSetting SPOOF_APP_VERSION = new BooleanSetting("revanced_spoof_app_version", FALSE, true, "revanced_spoof_app_version_user_dialog_message");
|
||||
public static final StringSetting SPOOF_APP_VERSION_TARGET = new StringSetting("revanced_spoof_app_version_target", IS_19_17_OR_GREATER ? "19.35.36" : "17.33.42", true, parent(SPOOF_APP_VERSION));
|
||||
public static final BooleanSetting TABLET_LAYOUT = new BooleanSetting("revanced_tablet_layout", FALSE, true, "revanced_tablet_layout_user_dialog_message");
|
||||
public static final BooleanSetting WIDE_SEARCHBAR = new BooleanSetting("revanced_wide_searchbar", FALSE, true);
|
||||
public static final BooleanSetting BYPASS_IMAGE_REGION_RESTRICTIONS = new BooleanSetting("revanced_bypass_image_region_restrictions", FALSE, true);
|
||||
public static final BooleanSetting GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_gradient_loading_screen", FALSE, true);
|
||||
public static final BooleanSetting REMOVE_VIEWER_DISCRETION_DIALOG = new BooleanSetting("revanced_remove_viewer_discretion_dialog", FALSE,
|
||||
"revanced_remove_viewer_discretion_dialog_user_dialog_message");
|
||||
|
||||
public static final BooleanSetting SPOOF_APP_VERSION = new BooleanSetting("revanced_spoof_app_version", FALSE, true, "revanced_spoof_app_version_user_dialog_message");
|
||||
public static final BooleanSetting TABLET_LAYOUT = new BooleanSetting("revanced_tablet_layout", FALSE, true, "revanced_tablet_layout_user_dialog_message");
|
||||
public static final BooleanSetting WIDE_SEARCHBAR = new BooleanSetting("revanced_wide_searchbar", FALSE, true);
|
||||
public static final EnumSetting<StartPage> CHANGE_START_PAGE = new EnumSetting<>("revanced_change_start_page", StartPage.DEFAULT, true);
|
||||
public static final StringSetting SPOOF_APP_VERSION_TARGET = new StringSetting("revanced_spoof_app_version_target", IS_19_17_OR_GREATER ? "19.35.36" : "17.33.42", true, parent(SPOOF_APP_VERSION));
|
||||
// Custom filter
|
||||
public static final BooleanSetting CUSTOM_FILTER = new BooleanSetting("revanced_custom_filter", FALSE);
|
||||
public static final StringSetting CUSTOM_FILTER_STRINGS = new StringSetting("revanced_custom_filter_strings", "", true, parent(CUSTOM_FILTER));
|
||||
|
||||
// Navigation buttons
|
||||
public static final BooleanSetting HIDE_HOME_BUTTON = new BooleanSetting("revanced_hide_home_button", FALSE, true);
|
||||
public static final BooleanSetting HIDE_CREATE_BUTTON = new BooleanSetting("revanced_hide_create_button", TRUE, true);
|
||||
@@ -214,73 +217,72 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_SUBSCRIPTIONS_BUTTON = new BooleanSetting("revanced_hide_subscriptions_button", FALSE, true);
|
||||
public static final BooleanSetting HIDE_NAVIGATION_BUTTON_LABELS = new BooleanSetting("revanced_hide_navigation_button_labels", FALSE, true);
|
||||
public static final BooleanSetting SWITCH_CREATE_WITH_NOTIFICATIONS_BUTTON = new BooleanSetting("revanced_switch_create_with_notifications_button", TRUE, true);
|
||||
public static final BooleanSetting DISABLE_TRANSLUCENT_STATUS_BAR = new BooleanSetting("revanced_disable_translucent_status_bar", FALSE, true);
|
||||
public static final BooleanSetting DISABLE_TRANSLUCENT_NAVIGATION_BAR_LIGHT = new BooleanSetting("revanced_disable_translucent_navigation_bar_light", FALSE, true);
|
||||
public static final BooleanSetting DISABLE_TRANSLUCENT_NAVIGATION_BAR_DARK = new BooleanSetting("revanced_disable_translucent_navigation_bar_dark", FALSE, true);
|
||||
|
||||
// Shorts
|
||||
public static final BooleanSetting DISABLE_SHORTS_BACKGROUND_PLAYBACK = new BooleanSetting("revanced_shorts_disable_background_playback", FALSE);
|
||||
public static final BooleanSetting DISABLE_RESUMING_SHORTS_PLAYER = new BooleanSetting("revanced_disable_resuming_shorts_player", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_HOME = new BooleanSetting("revanced_hide_shorts_home", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUBSCRIPTIONS = new BooleanSetting("revanced_hide_shorts_subscriptions", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH = new BooleanSetting("revanced_hide_shorts_search", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_JOIN_BUTTON = new BooleanSetting("revanced_hide_shorts_join_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_shorts_subscribe_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_PAUSED_OVERLAY_BUTTONS = new BooleanSetting("revanced_hide_shorts_paused_overlay_buttons", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SHOP_BUTTON = new BooleanSetting("revanced_hide_shorts_shop_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_TAGGED_PRODUCTS = new BooleanSetting("revanced_hide_shorts_tagged_products", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LOCATION_LABEL = new BooleanSetting("revanced_hide_shorts_location_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SAVE_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_save_sound_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_USE_TEMPLATE_BUTTON = new BooleanSetting("revanced_hide_shorts_use_template_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_UPCOMING_BUTTON = new BooleanSetting("revanced_hide_shorts_upcoming_button", TRUE);
|
||||
public static final BooleanSetting DISABLE_SHORTS_BACKGROUND_PLAYBACK = new BooleanSetting("revanced_shorts_disable_background_playback", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_CHANNEL_BAR = new BooleanSetting("revanced_hide_shorts_channel_bar", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_COMMENTS_BUTTON = new BooleanSetting("revanced_hide_shorts_comments_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_dislike_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_FULL_VIDEO_LINK_LABEL = new BooleanSetting("revanced_hide_shorts_full_video_link_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_GREEN_SCREEN_BUTTON = new BooleanSetting("revanced_hide_shorts_green_screen_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_HASHTAG_BUTTON = new BooleanSetting("revanced_hide_shorts_hashtag_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH_SUGGESTIONS = new BooleanSetting("revanced_hide_shorts_search_suggestions", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_STICKERS = new BooleanSetting("revanced_hide_shorts_stickers", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUPER_THANKS_BUTTON = new BooleanSetting("revanced_hide_shorts_super_thanks_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_FOUNTAIN = new BooleanSetting("revanced_hide_shorts_like_fountain", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_like_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_dislike_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_COMMENTS_BUTTON = new BooleanSetting("revanced_hide_shorts_comments_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SHARE_BUTTON = new BooleanSetting("revanced_hide_shorts_share_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_HOME = new BooleanSetting("revanced_hide_shorts_home", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_INFO_PANEL = new BooleanSetting("revanced_hide_shorts_info_panel", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_sound_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_CHANNEL_BAR = new BooleanSetting("revanced_hide_shorts_channel_bar", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_VIDEO_TITLE = new BooleanSetting("revanced_hide_shorts_video_title", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SOUND_METADATA_LABEL = new BooleanSetting("revanced_hide_shorts_sound_metadata_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_FULL_VIDEO_LINK_LABEL = new BooleanSetting("revanced_hide_shorts_full_video_link_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_JOIN_BUTTON = new BooleanSetting("revanced_hide_shorts_join_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_like_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_FOUNTAIN = new BooleanSetting("revanced_hide_shorts_like_fountain", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LOCATION_LABEL = new BooleanSetting("revanced_hide_shorts_location_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_NAVIGATION_BAR = new BooleanSetting("revanced_hide_shorts_navigation_bar", FALSE, true);
|
||||
public static final BooleanSetting HIDE_SHORTS_PAUSED_OVERLAY_BUTTONS = new BooleanSetting("revanced_hide_shorts_paused_overlay_buttons", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SAVE_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_save_sound_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH = new BooleanSetting("revanced_hide_shorts_search", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH_SUGGESTIONS = new BooleanSetting("revanced_hide_shorts_search_suggestions", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SHARE_BUTTON = new BooleanSetting("revanced_hide_shorts_share_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SHOP_BUTTON = new BooleanSetting("revanced_hide_shorts_shop_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_sound_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SOUND_METADATA_LABEL = new BooleanSetting("revanced_hide_shorts_sound_metadata_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_STICKERS = new BooleanSetting("revanced_hide_shorts_stickers", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_shorts_subscribe_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUBSCRIPTIONS = new BooleanSetting("revanced_hide_shorts_subscriptions", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SUPER_THANKS_BUTTON = new BooleanSetting("revanced_hide_shorts_super_thanks_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_TAGGED_PRODUCTS = new BooleanSetting("revanced_hide_shorts_tagged_products", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_UPCOMING_BUTTON = new BooleanSetting("revanced_hide_shorts_upcoming_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_USE_TEMPLATE_BUTTON = new BooleanSetting("revanced_hide_shorts_use_template_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_VIDEO_TITLE = new BooleanSetting("revanced_hide_shorts_video_title", FALSE);
|
||||
public static final BooleanSetting SHORTS_AUTOPLAY = new BooleanSetting("revanced_shorts_autoplay", FALSE);
|
||||
public static final BooleanSetting SHORTS_AUTOPLAY_BACKGROUND = new BooleanSetting("revanced_shorts_autoplay_background", TRUE);
|
||||
|
||||
// Seekbar
|
||||
|
||||
public static final BooleanSetting DISABLE_PRECISE_SEEKING_GESTURE = new BooleanSetting("revanced_disable_precise_seeking_gesture", TRUE);
|
||||
public static final BooleanSetting SEEKBAR_TAPPING = new BooleanSetting("revanced_seekbar_tapping", TRUE);
|
||||
public static final BooleanSetting SLIDE_TO_SEEK = new BooleanSetting("revanced_slide_to_seek", FALSE, true);
|
||||
public static final BooleanSetting RESTORE_OLD_SEEKBAR_THUMBNAILS = new BooleanSetting("revanced_restore_old_seekbar_thumbnails", TRUE);
|
||||
public static final BooleanSetting SEEKBAR_THUMBNAILS_HIGH_QUALITY = new BooleanSetting("revanced_seekbar_thumbnails_high_quality", FALSE, true,
|
||||
"revanced_seekbar_thumbnails_high_quality_dialog_message", new SeekbarThumbnailsHighQualityAvailability());
|
||||
public static final BooleanSetting HIDE_SEEKBAR = new BooleanSetting("revanced_hide_seekbar", FALSE, true);
|
||||
public static final BooleanSetting HIDE_SEEKBAR_THUMBNAIL = new BooleanSetting("revanced_hide_seekbar_thumbnail", FALSE);
|
||||
public static final BooleanSetting HIDE_TIMESTAMP = new BooleanSetting("revanced_hide_timestamp", FALSE);
|
||||
public static final BooleanSetting RESTORE_OLD_SEEKBAR_THUMBNAILS = new BooleanSetting("revanced_restore_old_seekbar_thumbnails", TRUE);
|
||||
public static final BooleanSetting SEEKBAR_CUSTOM_COLOR = new BooleanSetting("revanced_seekbar_custom_color", FALSE, true);
|
||||
public static final BooleanSetting SEEKBAR_TAPPING = new BooleanSetting("revanced_seekbar_tapping", TRUE);
|
||||
public static final BooleanSetting SEEKBAR_THUMBNAILS_HIGH_QUALITY = new BooleanSetting("revanced_seekbar_thumbnails_high_quality", FALSE, true,
|
||||
"revanced_seekbar_thumbnails_high_quality_dialog_message", new SeekbarThumbnailsHighQualityAvailability());
|
||||
public static final BooleanSetting SLIDE_TO_SEEK = new BooleanSetting("revanced_slide_to_seek", FALSE, true);
|
||||
public static final StringSetting SEEKBAR_CUSTOM_COLOR_VALUE = new StringSetting("revanced_seekbar_custom_color_value", "#FF0033", true, parent(SEEKBAR_CUSTOM_COLOR));
|
||||
|
||||
// Misc
|
||||
public static final BooleanSetting ANNOUNCEMENTS = new BooleanSetting("revanced_announcements", TRUE);
|
||||
public static final IntegerSetting ANNOUNCEMENT_LAST_ID = new IntegerSetting("revanced_announcement_last_id", -1, false, false);
|
||||
public static final BooleanSetting AUTO_CAPTIONS = new BooleanSetting("revanced_auto_captions", FALSE);
|
||||
public static final BooleanSetting AUTO_REPEAT = new BooleanSetting("revanced_auto_repeat", FALSE);
|
||||
public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE);
|
||||
public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false);
|
||||
public static final BooleanSetting DISABLE_ZOOM_HAPTICS = new BooleanSetting("revanced_disable_zoom_haptics", TRUE);
|
||||
public static final BooleanSetting EXTERNAL_BROWSER = new BooleanSetting("revanced_external_browser", TRUE, true);
|
||||
public static final BooleanSetting AUTO_REPEAT = new BooleanSetting("revanced_auto_repeat", FALSE);
|
||||
public static final BooleanSetting REMOVE_TRACKING_QUERY_PARAMETER = new BooleanSetting("revanced_remove_tracking_query_parameter", TRUE);
|
||||
public static final BooleanSetting SPOOF_DEVICE_DIMENSIONS = new BooleanSetting("revanced_spoof_device_dimensions", FALSE, true,
|
||||
"revanced_spoof_device_dimensions_user_dialog_message");
|
||||
public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE);
|
||||
public static final BooleanSetting ANNOUNCEMENTS = new BooleanSetting("revanced_announcements", TRUE);
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true,"revanced_spoof_video_streams_user_dialog_message");
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC = new BooleanSetting("revanced_spoof_video_streams_ios_force_avc", FALSE, true,
|
||||
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofVideoStreamsPatch.ForceiOSAVCAvailability());
|
||||
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client", ClientType.ANDROID_VR, true, parent(SPOOF_VIDEO_STREAMS));
|
||||
public static final IntegerSetting ANNOUNCEMENT_LAST_ID = new IntegerSetting("revanced_announcement_last_id", -1, false, false);
|
||||
public static final BooleanSetting CHECK_WATCH_HISTORY_DOMAIN_NAME = new BooleanSetting("revanced_check_watch_history_domain_name", TRUE, false, false);
|
||||
public static final BooleanSetting REMOVE_TRACKING_QUERY_PARAMETER = new BooleanSetting("revanced_remove_tracking_query_parameter", TRUE);
|
||||
|
||||
// Debugging
|
||||
/**
|
||||
* When enabled, share the debug logs with care.
|
||||
* The buffer contains select user data, including the client ip address and information that could identify the end user.
|
||||
@@ -298,6 +300,8 @@ public class Settings extends BaseSettings {
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
public static final IntegerSetting SWIPE_OVERLAY_BACKGROUND_ALPHA = new IntegerSetting("revanced_swipe_overlay_background_alpha", 127, true,
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
|
||||
// Debugging
|
||||
public static final IntegerSetting SWIPE_OVERLAY_TEXT_SIZE = new IntegerSetting("revanced_swipe_text_overlay_size", 22, true,
|
||||
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
|
||||
public static final LongSetting SWIPE_OVERLAY_TIMEOUT = new LongSetting("revanced_swipe_overlay_timeout", 500L, true,
|
||||
@@ -320,7 +324,6 @@ public class Settings extends BaseSettings {
|
||||
* Do not use directly, instead use {@link SponsorBlockSettings}
|
||||
*/
|
||||
public static final StringSetting SB_PRIVATE_USER_ID = new StringSetting("sb_private_user_id_Do_Not_Share", "");
|
||||
public static final StringSetting DEPRECATED_SB_UUID_OLD_MIGRATION_SETTING = new StringSetting("uuid", ""); // Delete sometime in 2024
|
||||
public static final IntegerSetting SB_CREATE_NEW_SEGMENT_STEP = new IntegerSetting("sb_create_new_segment_step", 150, parent(SB_ENABLED));
|
||||
public static final BooleanSetting SB_VOTING_BUTTON = new BooleanSetting("sb_voting_button", FALSE, parent(SB_ENABLED));
|
||||
public static final BooleanSetting SB_CREATE_NEW_SEGMENT = new BooleanSetting("sb_create_new_segment", FALSE, parent(SB_ENABLED));
|
||||
@@ -331,34 +334,38 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting SB_TRACK_SKIP_COUNT = new BooleanSetting("sb_track_skip_count", TRUE, parent(SB_ENABLED));
|
||||
public static final FloatSetting SB_SEGMENT_MIN_DURATION = new FloatSetting("sb_min_segment_duration", 0F, parent(SB_ENABLED));
|
||||
public static final BooleanSetting SB_VIDEO_LENGTH_WITHOUT_SEGMENTS = new BooleanSetting("sb_video_length_without_segments", TRUE, parent(SB_ENABLED));
|
||||
public static final StringSetting SB_API_URL = new StringSetting("sb_api_url","https://sponsor.ajay.app");
|
||||
public static final StringSetting SB_API_URL = new StringSetting("sb_api_url", "https://sponsor.ajay.app");
|
||||
public static final BooleanSetting SB_USER_IS_VIP = new BooleanSetting("sb_user_is_vip", FALSE);
|
||||
public static final IntegerSetting SB_LOCAL_TIME_SAVED_NUMBER_SEGMENTS = new IntegerSetting("sb_local_time_saved_number_segments", 0);
|
||||
public static final LongSetting SB_LOCAL_TIME_SAVED_MILLISECONDS = new LongSetting("sb_local_time_saved_milliseconds", 0L);
|
||||
public static final LongSetting SB_LAST_VIP_CHECK = new LongSetting("sb_last_vip_check", 0L, false, false);
|
||||
public static final BooleanSetting SB_HIDE_EXPORT_WARNING = new BooleanSetting("sb_hide_export_warning", FALSE, false, false);
|
||||
public static final BooleanSetting SB_SEEN_GUIDELINES = new BooleanSetting("sb_seen_guidelines", FALSE, false, false);
|
||||
|
||||
public static final StringSetting SB_CATEGORY_SPONSOR = new StringSetting("sb_sponsor", SKIP_AUTOMATICALLY_ONCE.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_SPONSOR_COLOR = new StringSetting("sb_sponsor_color","#00D400");
|
||||
public static final StringSetting SB_CATEGORY_SPONSOR_COLOR = new StringSetting("sb_sponsor_color", "#00D400");
|
||||
public static final StringSetting SB_CATEGORY_SELF_PROMO = new StringSetting("sb_selfpromo", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_SELF_PROMO_COLOR = new StringSetting("sb_selfpromo_color","#FFFF00");
|
||||
public static final StringSetting SB_CATEGORY_SELF_PROMO_COLOR = new StringSetting("sb_selfpromo_color", "#FFFF00");
|
||||
public static final StringSetting SB_CATEGORY_INTERACTION = new StringSetting("sb_interaction", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_INTERACTION_COLOR = new StringSetting("sb_interaction_color","#CC00FF");
|
||||
public static final StringSetting SB_CATEGORY_INTERACTION_COLOR = new StringSetting("sb_interaction_color", "#CC00FF");
|
||||
public static final StringSetting SB_CATEGORY_HIGHLIGHT = new StringSetting("sb_highlight", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_HIGHLIGHT_COLOR = new StringSetting("sb_highlight_color","#FF1684");
|
||||
public static final StringSetting SB_CATEGORY_HIGHLIGHT_COLOR = new StringSetting("sb_highlight_color", "#FF1684");
|
||||
public static final StringSetting SB_CATEGORY_INTRO = new StringSetting("sb_intro", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_INTRO_COLOR = new StringSetting("sb_intro_color","#00FFFF");
|
||||
public static final StringSetting SB_CATEGORY_INTRO_COLOR = new StringSetting("sb_intro_color", "#00FFFF");
|
||||
public static final StringSetting SB_CATEGORY_OUTRO = new StringSetting("sb_outro", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_OUTRO_COLOR = new StringSetting("sb_outro_color","#0202ED");
|
||||
public static final StringSetting SB_CATEGORY_OUTRO_COLOR = new StringSetting("sb_outro_color", "#0202ED");
|
||||
public static final StringSetting SB_CATEGORY_PREVIEW = new StringSetting("sb_preview", IGNORE.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_PREVIEW_COLOR = new StringSetting("sb_preview_color","#008FD6");
|
||||
public static final StringSetting SB_CATEGORY_PREVIEW_COLOR = new StringSetting("sb_preview_color", "#008FD6");
|
||||
public static final StringSetting SB_CATEGORY_FILLER = new StringSetting("sb_filler", IGNORE.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_FILLER_COLOR = new StringSetting("sb_filler_color","#7300FF");
|
||||
public static final StringSetting SB_CATEGORY_FILLER_COLOR = new StringSetting("sb_filler_color", "#7300FF");
|
||||
public static final StringSetting SB_CATEGORY_MUSIC_OFFTOPIC = new StringSetting("sb_music_offtopic", MANUAL_SKIP.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_MUSIC_OFFTOPIC_COLOR = new StringSetting("sb_music_offtopic_color","#FF9900");
|
||||
public static final StringSetting SB_CATEGORY_MUSIC_OFFTOPIC_COLOR = new StringSetting("sb_music_offtopic_color", "#FF9900");
|
||||
public static final StringSetting SB_CATEGORY_UNSUBMITTED = new StringSetting("sb_unsubmitted", SKIP_AUTOMATICALLY.reVancedKeyValue);
|
||||
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color","#FFFFFF");
|
||||
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color", "#FFFFFF");
|
||||
|
||||
// Deprecated migrations
|
||||
public static final StringSetting DEPRECATED_SB_UUID_OLD_MIGRATION_SETTING = new StringSetting("uuid", ""); // Delete sometime in 2024
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_BUTTONS = new BooleanSetting("revanced_hide_player_buttons", FALSE, true);
|
||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_video_quality_menu_footer", FALSE);
|
||||
|
||||
static {
|
||||
// region Migration
|
||||
@@ -384,7 +391,8 @@ public class Settings extends BaseSettings {
|
||||
}
|
||||
|
||||
// Migrate renamed enum.
|
||||
if (MINIPLAYER_TYPE.get() == PHONE) {
|
||||
//noinspection deprecation
|
||||
if (MINIPLAYER_TYPE.get() == MiniplayerType.PHONE) {
|
||||
MINIPLAYER_TYPE.save(MINIMAL);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -507,7 +507,7 @@ public class SponsorBlockPreferenceFragment extends PreferenceFragment {
|
||||
Utils.showToastLong(str("revanced_sb_stats_username_changed"));
|
||||
} else {
|
||||
preference.setText(userName); // revert to previous
|
||||
Utils.showToastLong(errorMessage);
|
||||
SponsorBlockUtils.showErrorDialog(errorMessage);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
}
|
||||
@@ -363,6 +363,16 @@ public class SponsorBlockUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static void showErrorDialog(String dialogMessage) {
|
||||
Utils.runOnMainThreadNowOrLater(() ->
|
||||
new AlertDialog.Builder(SponsorBlockViewController.getOverLaysViewGroupContext())
|
||||
.setMessage(dialogMessage)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.setCancelable(false)
|
||||
.show()
|
||||
);
|
||||
}
|
||||
|
||||
public static void onEditByHandClicked() {
|
||||
try {
|
||||
Utils.verifyOnMainThread();
|
||||
|
||||
@@ -19,6 +19,7 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
|
||||
import app.revanced.extension.youtube.sponsorblock.SponsorBlockUtils;
|
||||
import app.revanced.extension.youtube.sponsorblock.objects.SegmentCategory;
|
||||
import app.revanced.extension.youtube.sponsorblock.objects.SponsorSegment;
|
||||
import app.revanced.extension.youtube.sponsorblock.objects.SponsorSegment.SegmentVote;
|
||||
@@ -142,6 +143,7 @@ public class SBRequester {
|
||||
public static void submitSegments(@NonNull String videoId, @NonNull String category,
|
||||
long startTime, long endTime, long videoLength) {
|
||||
Utils.verifyOffMainThread();
|
||||
|
||||
try {
|
||||
String privateUserId = SponsorBlockSettings.getSBPrivateUserID();
|
||||
String start = String.format(Locale.US, TIME_TEMPLATE, startTime / 1000f);
|
||||
@@ -151,35 +153,29 @@ public class SBRequester {
|
||||
HttpURLConnection connection = getConnectionFromRoute(SBRoutes.SUBMIT_SEGMENTS, privateUserId, videoId, category, start, end, duration);
|
||||
final int responseCode = connection.getResponseCode();
|
||||
|
||||
final String messageToToast;
|
||||
switch (responseCode) {
|
||||
case HTTP_STATUS_CODE_SUCCESS:
|
||||
messageToToast = str("revanced_sb_submit_succeeded");
|
||||
break;
|
||||
case 409:
|
||||
messageToToast = str("revanced_sb_submit_failed_duplicate");
|
||||
break;
|
||||
case 403:
|
||||
messageToToast = str("revanced_sb_submit_failed_forbidden", Requester.parseErrorStringAndDisconnect(connection));
|
||||
break;
|
||||
case 429:
|
||||
messageToToast = str("revanced_sb_submit_failed_rate_limit");
|
||||
break;
|
||||
case 400:
|
||||
messageToToast = str("revanced_sb_submit_failed_invalid", Requester.parseErrorStringAndDisconnect(connection));
|
||||
break;
|
||||
default:
|
||||
messageToToast = str("revanced_sb_submit_failed_unknown_error", responseCode, connection.getResponseMessage());
|
||||
break;
|
||||
}
|
||||
Utils.showToastLong(messageToToast);
|
||||
String userMessage = switch (responseCode) {
|
||||
case HTTP_STATUS_CODE_SUCCESS -> str("revanced_sb_submit_succeeded");
|
||||
case 409 -> str("revanced_sb_submit_failed_duplicate");
|
||||
case 403 -> str("revanced_sb_submit_failed_forbidden",
|
||||
Requester.parseErrorStringAndDisconnect(connection));
|
||||
case 429 -> str("revanced_sb_submit_failed_rate_limit");
|
||||
case 400 -> str("revanced_sb_submit_failed_invalid",
|
||||
Requester.parseErrorStringAndDisconnect(connection));
|
||||
default -> str("revanced_sb_submit_failed_unknown_error",
|
||||
responseCode, connection.getResponseMessage());
|
||||
};
|
||||
|
||||
// Message might be about the users account or an error too large to show in a toast.
|
||||
// Use a dialog instead.
|
||||
SponsorBlockUtils.showErrorDialog(userMessage);
|
||||
} catch (SocketTimeoutException ex) {
|
||||
// Always show, even if show connection toasts is turned off
|
||||
Logger.printDebug(() -> "Timeout", ex);
|
||||
Utils.showToastLong(str("revanced_sb_submit_failed_timeout"));
|
||||
} catch (IOException ex) {
|
||||
Logger.printDebug(() -> "IOException", ex);
|
||||
Utils.showToastLong(str("revanced_sb_submit_failed_unknown_error", 0, ex.getMessage()));
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "failed to submit segments", ex);
|
||||
Logger.printException(() -> "failed to submit segments", ex); // Should never happen.
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,19 +214,22 @@ public class SBRequester {
|
||||
: getConnectionFromRoute(SBRoutes.VOTE_ON_SEGMENT_QUALITY, uuid, segmentUuid, String.valueOf(voteOption.apiVoteType));
|
||||
final int responseCode = connection.getResponseCode();
|
||||
|
||||
String userMessage;
|
||||
switch (responseCode) {
|
||||
case HTTP_STATUS_CODE_SUCCESS:
|
||||
Logger.printDebug(() -> "Vote success for segment: " + segment);
|
||||
break;
|
||||
return;
|
||||
case 403:
|
||||
Utils.showToastLong(
|
||||
str("revanced_sb_vote_failed_forbidden", Requester.parseErrorStringAndDisconnect(connection)));
|
||||
userMessage = str("revanced_sb_vote_failed_forbidden",
|
||||
Requester.parseErrorStringAndDisconnect(connection));
|
||||
break;
|
||||
default:
|
||||
Utils.showToastLong(
|
||||
str("revanced_sb_vote_failed_unknown_error", responseCode, connection.getResponseMessage()));
|
||||
userMessage = str("revanced_sb_vote_failed_unknown_error",
|
||||
responseCode, connection.getResponseMessage());
|
||||
break;
|
||||
}
|
||||
|
||||
SponsorBlockUtils.showErrorDialog(userMessage);
|
||||
} catch (SocketTimeoutException ex) {
|
||||
Utils.showToastShort(str("revanced_sb_vote_failed_timeout"));
|
||||
} catch (IOException ex) {
|
||||
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.2.4-dev.1
|
||||
version = 5.5.2-dev.2
|
||||
|
||||
@@ -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,5 +4,6 @@ import app.revanced.patches.music.misc.extension.hooks.applicationInitHook
|
||||
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
|
||||
|
||||
val sharedExtensionPatch = sharedExtensionPatch(
|
||||
"music",
|
||||
applicationInitHook,
|
||||
)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -3,6 +3,7 @@ package app.revanced.patches.youtube.layout.buttons.navigation
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.literal
|
||||
|
||||
internal const val ANDROID_AUTOMOTIVE_STRING = "Android Automotive"
|
||||
|
||||
@@ -22,4 +23,31 @@ internal val createPivotBarFingerprint = fingerprint {
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.RETURN_VOID,
|
||||
)
|
||||
}
|
||||
|
||||
internal const val TRANSLUCENT_NAVIGATION_STATUS_BAR_FEATURE_FLAG = 45400535L
|
||||
|
||||
internal val translucentNavigationStatusBarFeatureFlagFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
literal { TRANSLUCENT_NAVIGATION_STATUS_BAR_FEATURE_FLAG }
|
||||
}
|
||||
|
||||
internal const val TRANSLUCENT_NAVIGATION_BUTTONS_FEATURE_FLAG = 45630927L
|
||||
|
||||
internal val translucentNavigationButtonsFeatureFlagFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
literal { TRANSLUCENT_NAVIGATION_BUTTONS_FEATURE_FLAG }
|
||||
}
|
||||
|
||||
/**
|
||||
* The device on screen back/home/recent buttons.
|
||||
*/
|
||||
internal const val TRANSLUCENT_NAVIGATION_BUTTONS_SYSTEM_FEATURE_FLAG = 45632194L
|
||||
|
||||
internal val translucentNavigationButtonsSystemFeatureFlagFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
literal { TRANSLUCENT_NAVIGATION_BUTTONS_SYSTEM_FEATURE_FLAG }
|
||||
}
|
||||
@@ -12,10 +12,13 @@ import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.navigation.hookNavigationButtonCreated
|
||||
import app.revanced.patches.youtube.misc.navigation.navigationBarHookPatch
|
||||
import app.revanced.patches.youtube.misc.playservice.is_19_25_or_greater
|
||||
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.insertFeatureFlagBooleanOverride
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
@@ -32,6 +35,7 @@ val navigationButtonsPatch = bytecodePatch(
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
navigationBarHookPatch,
|
||||
versionCheckPatch
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
@@ -50,19 +54,27 @@ val navigationButtonsPatch = bytecodePatch(
|
||||
execute {
|
||||
addResources("youtube", "layout.buttons.navigation.navigationButtonsPatch")
|
||||
|
||||
val preferences = mutableSetOf(
|
||||
SwitchPreference("revanced_hide_home_button"),
|
||||
SwitchPreference("revanced_hide_shorts_button"),
|
||||
SwitchPreference("revanced_hide_create_button"),
|
||||
SwitchPreference("revanced_hide_subscriptions_button"),
|
||||
SwitchPreference("revanced_switch_create_with_notifications_button"),
|
||||
SwitchPreference("revanced_hide_navigation_button_labels"),
|
||||
)
|
||||
|
||||
if (is_19_25_or_greater) {
|
||||
preferences += SwitchPreference("revanced_disable_translucent_status_bar")
|
||||
preferences += SwitchPreference("revanced_disable_translucent_navigation_bar_light")
|
||||
preferences += SwitchPreference("revanced_disable_translucent_navigation_bar_dark")
|
||||
}
|
||||
|
||||
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
|
||||
PreferenceScreenPreference(
|
||||
key = "revanced_navigation_buttons_screen",
|
||||
sorting = Sorting.UNSORTED,
|
||||
preferences = setOf(
|
||||
SwitchPreference("revanced_hide_home_button"),
|
||||
SwitchPreference("revanced_hide_shorts_button"),
|
||||
SwitchPreference("revanced_hide_create_button"),
|
||||
SwitchPreference("revanced_hide_subscriptions_button"),
|
||||
SwitchPreference("revanced_switch_create_with_notifications_button"),
|
||||
SwitchPreference("revanced_hide_navigation_button_labels"),
|
||||
),
|
||||
),
|
||||
preferences = preferences
|
||||
)
|
||||
)
|
||||
|
||||
// Switch create with notifications button.
|
||||
@@ -101,5 +113,24 @@ val navigationButtonsPatch = bytecodePatch(
|
||||
|
||||
// Hook navigation button created, in order to hide them.
|
||||
hookNavigationButtonCreated(EXTENSION_CLASS_DESCRIPTOR)
|
||||
|
||||
|
||||
// Force on/off translucent effect on status bar and navigation buttons.
|
||||
if (is_19_25_or_greater) {
|
||||
translucentNavigationStatusBarFeatureFlagFingerprint.method.insertFeatureFlagBooleanOverride(
|
||||
TRANSLUCENT_NAVIGATION_STATUS_BAR_FEATURE_FLAG,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->useTranslucentNavigationStatusBar(Z)Z",
|
||||
)
|
||||
|
||||
translucentNavigationButtonsFeatureFlagFingerprint.method.insertFeatureFlagBooleanOverride(
|
||||
TRANSLUCENT_NAVIGATION_BUTTONS_FEATURE_FLAG,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->useTranslucentNavigationButtons(Z)Z",
|
||||
)
|
||||
|
||||
translucentNavigationButtonsSystemFeatureFlagFingerprint.method.insertFeatureFlagBooleanOverride(
|
||||
TRANSLUCENT_NAVIGATION_BUTTONS_SYSTEM_FEATURE_FLAG,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->useTranslucentNavigationButtons(Z)Z",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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">
|
||||
@@ -209,6 +200,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -147,6 +136,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
|
||||
@@ -209,6 +200,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -44,6 +33,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">ØĒØ§ØąŲØŽ ØĨŲØ´Ø§ØĄ APK ØĒاŲŲ</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_title">ReVanced</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">ŲŲ ØĒØąØēب ŲŲ Ø§ŲŲ
ØĒابؚ؊Ø</string>
|
||||
<string name="revanced_settings_reset">ØĨؚاد؊ Ø§ŲØĒØšŲŲŲ</string>
|
||||
<string name="revanced_settings_restart_title">ØĒØØ¯ŲØĢ ŲØĨؚاد؊ ØĒØ´ØēŲŲ</string>
|
||||
@@ -58,18 +48,26 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Settings about dialog. -->
|
||||
<string name="revanced_settings_about_links_body">ØŖŲØĒ ØĒØŗØĒ؎دŲ
ØĨØĩØ¯Ø§Øą ReVanced Patches <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 +104,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">ØšØąØļ Ų
ŲØ§ØØ¸ØŠ ØšŲØ¯ ŲØŦŲØ¯ ØŽØˇØŖ ŲŲ ReVanced</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">ŲØĒŲ
ØšØąØļ Ų
ŲØ§ØØ¸ØŠ ŲŲ ØØ§ŲØŠ ØØ¯ŲØĢ ØŽØˇØŖ</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">ŲØ§ ŲØĒŲ
ØšØąØļ Ų
ŲØ§ØØ¸ØŠ ŲŲ ØØ§ŲØŠ ØØ¯ŲØĢ ØŽØˇØŖ</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">ŲØ¤Ø¯Ų ØĨŲŲØ§Ų ØĒØ´ØēŲŲ Ų
ŲØ§ØØ¸Ø§ØĒ Ø§ŲØŖØŽØˇØ§ØĄ ØĨŲŲ ØĨØŽŲØ§ØĄ ŲØ§ŲØŠ ØĨØ´ØšØ§ØąØ§ØĒ ØŽØˇØŖ ReVanced.\n\nŲŲ ŲØĒŲ
ØĨØšŲØ§Ų
Ų Ø¨ØŖŲ ØŖØŽØˇØ§ØĄ ØēŲØą Ų
ØĒŲŲØšØŠ.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"ŲØ¤Ø¯Ų ØĨŲŲØ§Ų ØĒØ´ØēŲŲ Ų
ŲØ§ØØ¸Ø§ØĒ Ø§ŲØŖØŽØˇØ§ØĄ ØĨŲŲ ØĨØŽŲØ§ØĄ ŲØ§ŲØŠ ØĨØ´ØšØ§ØąØ§ØĒ ØŖØŽØˇØ§ØĄ ReVanced.
|
||||
|
||||
ŲŲ ŲØĒŲ
ØĨØšŲØ§Ų
Ų Ø¨ØŖŲ ØŖØŽØˇØ§ØĄ ØēŲØą Ų
ØĒŲŲØšØŠ."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">ØĒØšØˇŲŲ ØĒŲŲØŦ Ø˛Øą ØŖØšØŦبŲŲ / اشØĒØąØ§Ų</string>
|
||||
@@ -125,7 +125,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØšŲØ§Ų
ØŠ اŲŲŲØ¯ŲŲ Ø§ŲŲ
اØĻŲØŠ</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">ŲØĒŲ
ØšØąØļ ØšŲØ§Ų
ØŠ اŲŲŲØ¯ŲŲ Ø§ŲŲ
اØĻŲØŠ</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">ØĨØŽŲØ§ØĄ Ø§ŲØąŲŲŲ Ø§ŲØŖŲŲŲØŠ</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">ØĒŲŲŲ Ø§ŲØąŲŲŲ Ų
ØŽŲŲØŠ Ų
ØĢŲ:\nâĸ Ø§ŲØŖØŽØ¨Ø§Øą Ø§ŲØšØ§ØŦŲØŠ\nâĸ Ų
ØĒابؚ؊ اŲŲ
Ø´Ø§ŲØ¯ØŠ\nâĸ Ø§ØŗØĒŲØ´Ø§Ų اŲŲ
Ø˛ŲØ¯ Ų
Ų Ø§ŲŲŲŲØ§ØĒ\nâĸ Ø§ŲØĒØŗŲŲ\nâĸ Ų
Ø´Ø§ŲØ¯ØŠ Ų
ØąØŠ ØŖØŽØąŲ</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"ØĒŲŲŲ Ø§ŲØąŲŲŲ Ų
ØŽŲŲØŠ Ų
ØĢŲ:
|
||||
âĸ Ø§ŲØŖØŽØ¨Ø§Øą Ø§ŲØšØ§ØŦŲØŠ
|
||||
âĸ Ų
ØĒابؚ؊ اŲŲ
Ø´Ø§ŲØ¯ØŠ
|
||||
âĸ Ø§ØŗØĒŲØ´Ø§Ų اŲŲ
Ø˛ŲØ¯ Ų
Ų Ø§ŲŲŲŲØ§ØĒ
|
||||
âĸ Ø§ŲØĒØŗŲŲ
|
||||
âĸ Ų
Ø´Ø§ŲØ¯ØŠ Ų
ØąØŠ ØŖØŽØąŲ"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">ŲØĒŲ
ØšØąØļ Ø§ŲØąŲŲŲ</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -153,9 +158,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_timed_reactions_title">ØĨØŽŲØ§ØĄ ØąØ¯ŲØ¯ اŲŲØšŲ اŲŲ
Ø¤ŲØĒØŠ</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØąØ¯ŲØ¯ اŲŲØšŲ اŲŲ
Ø¤ŲØĒØŠ</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">ŲØĒŲ
ØšØąØļ ØąØ¯ŲØ¯ اŲŲØšŲ اŲŲ
Ø¤ŲØĒØŠ</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_title">ØĨØŽŲØ§ØĄ ØąØŖØŗ ØąŲ ŲØĒØ§ØĻØŦ Ø§ŲØ¨ØØĢ</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØąØŖØŗ Ø§ŲØąŲ</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_off">ŲØĒŲ
ØšØąØļ ØąØŖØŗ Ø§ŲØąŲ</string>
|
||||
<string name="revanced_hide_channel_guidelines_title">ØĨØŽŲØ§ØĄ ØĨØąØ´Ø§Ø¯Ø§ØĒ اŲŲŲØ§ØŠ</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØĨØąØ´Ø§Ø¯Ø§ØĒ اŲŲŲØ§ØŠ</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_off">ŲØĒŲ
ØšØąØļ ØĨØąØ´Ø§Ø¯Ø§ØĒ اŲŲŲØ§ØŠ</string>
|
||||
@@ -226,8 +228,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_chapters_section_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ŲØŗŲ
اŲŲØĩŲŲ</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">ŲØĒŲ
ØšØąØļ ŲØŗŲ
اŲŲØĩŲŲ</string>
|
||||
<string name="revanced_hide_podcast_section_title">ØĨØŽŲØ§ØĄ ŲØŗŲ
\'Ø§ØŗØĒŲØ´Ø§Ų Ø§ŲØ¨ŲØ¯ŲØ§ØŗØĒ\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">ŲØĒŲ
ØšØąØļ ŲØŗŲ
\'Ø§ØŗØĒŲØ´Ø§Ų Ø§ŲØ¨ŲØ¯ŲØ§ØŗØĒ\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">ŲØĒŲ
ØšØąØļ ŲØŗŲ
\'Ø§ØŗØĒŲØ´Ø§Ų Ø§ŲØ¨ŲØ¯ŲØ§ØŗØĒ\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ŲØŗŲ
\"Ø§ØŗØĒŲØ´Ø§Ų Ø§ŲØ¨ŲØ¯ŲØ§ØŗØĒ\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">ŲØĒŲ
ØšØąØļ ŲØŗŲ
\"Ø§ØŗØĒŲØ´Ø§Ų Ø§ŲØ¨ŲØ¯ŲØ§ØŗØĒ\"</string>
|
||||
<string name="revanced_hide_info_cards_section_title">ØĨØŽŲØ§ØĄ ŲØŗŲ
Ø¨ØˇØ§ŲØ§ØĒ اŲŲ
ØšŲŲŲ
اØĒ</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ŲØŗŲ
Ø¨ØˇØ§ŲØ§ØĒ اŲŲ
ØšŲŲŲ
اØĒ</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">ŲØĒŲ
ØšØąØļ ŲØŗŲ
Ø¨ØˇØ§ŲØ§ØĒ اŲŲ
ØšŲŲŲ
اØĒ</string>
|
||||
@@ -252,6 +254,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">ŲØšØąØļ ŲŲ Ø§ŲŲŲØ¯ŲŲŲØ§ØĒ ذاØĒ Ø§ŲØĩŲØŠ</string>
|
||||
<string name="revanced_comments_screen_title">Ø§ŲØĒØšŲŲŲØ§ØĒ</string>
|
||||
<string name="revanced_comments_screen_summary">ØĨØŽŲØ§ØĄ ØŖŲ ØšØąØļ Ų
ŲŲŲØ§ØĒ ŲØŗŲ
Ø§ŲØĒØšŲŲŲØ§ØĒ</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">ØĨØŽŲØ§ØĄ \"Ų
ŲØŽØĩ Ø§ŲØ¯ØąØ¯Ø´ØŠ\" </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ âŲ
ŲØŽØĩ Ø§ŲØ¯ØąØ¯Ø´ØŠâ</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">ŲØĒŲ
ØšØąØļ âŲ
ŲØŽØĩ Ø§ŲØ¯ØąØ¯Ø´ØŠâ</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">ØĨØŽŲØ§ØĄ ØąØŖØŗ \'ØĒØšŲŲŲØ§ØĒ Ø§ŲØŖØšØļØ§ØĄ\'</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØąØŖØŗ \'ØĒØšŲŲŲØ§ØĒ Ø§ŲØŖØšØļØ§ØĄ\'</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">ŲØĒŲ
ØšØąØļ ØąØŖØŗ \'ØĒØšŲŲŲØ§ØĒ Ø§ŲØŖØšØļØ§ØĄ\'</string>
|
||||
@@ -274,7 +279,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_doodles_title">ØĨØŽŲØ§ØĄ ØąØŗŲŲ
اØĒ YouTube</string>
|
||||
<string name="revanced_hide_doodles_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØąØŗŲŲ
اØĒ Ø´ØąŲØˇ Ø§ŲØ¨ØØĢ</string>
|
||||
<string name="revanced_hide_doodles_summary_off">ŲØĒŲ
ØšØąØļ ØąØŗŲŲ
اØĒ Ø´ØąŲØˇ Ø§ŲØ¨ØØĢ</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">ØĒØ¸ŲØą ØąØŗŲŲ
اØĒ YouTube Doodles ŲØšØ¯ØŠ ØŖŲØ§Ų
ŲŲ ØšØ§Ų
.\n\nØĨذا ŲØ§ŲØĒ Ø§ŲØąØŗŲŲ
اØĒ ØĒØ¸ŲØą ØØ§ŲŲŲØ§ ŲŲ Ų
ŲØˇŲØĒŲ ŲØĨؚداد Ø§ŲØĨØŽŲØ§ØĄ ŲØ°Ø§ ŲŲØ¯ Ø§ŲØĒØ´ØēŲŲØ ØŗŲØĒŲ
ØŖŲØļŲØ§ ØĨØŽŲØ§ØĄ Ø´ØąŲØˇ اŲŲŲØĒØą ØŖØŗŲŲ Ø´ØąŲØˇ Ø§ŲØ¨ØØĢ.</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"ØĒØ¸ŲØą \"\"Doodles\"\" ØšŲŲ YouTube بØļؚ؊ ØŖŲØ§Ų
ŲŲ ØšØ§Ų
.
|
||||
|
||||
ØĨذا ŲØ§Ų ŲØĒŲ
ØšØąØļ \"Doodle\" ØØ§ŲŲŲØ§ ŲŲ Ų
ŲØˇŲØĒŲ ŲØĨذا ŲØ§Ų ØĨؚداد Ø§ŲØĨØŽŲØ§ØĄ ŲØ°Ø§ ŲŲØ¯ Ø§ŲØĒØ´ØēŲŲØ ŲØŗŲØĒŲ
ØŖŲØļŲØ§ ØĨØŽŲØ§ØĄ Ø´ØąŲØˇ Ø§ŲØĒØĩŲŲØŠ ØŖØŗŲŲ Ø´ØąŲØˇ Ø§ŲØ¨ØØĢ."</string>
|
||||
<string name="revanced_custom_filter_screen_title">ŲŲØĒØą Ų
ØŽØĩØĩ</string>
|
||||
<string name="revanced_custom_filter_screen_summary">ØĨØŽŲØ§ØĄ اŲŲ
ŲŲŲØ§ØĒ Ø¨Ø§ØŗØĒ؎داŲ
ŲŲØ§ØĒØą Ų
ØŽØĩØĩØŠ</string>
|
||||
<string name="revanced_custom_filter_title">ØĒŲ
ŲŲŲ Ø§ŲŲŲØĒØą Ø§ŲŲ
ØŽØĩØĩ</string>
|
||||
@@ -298,9 +305,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">اŲŲŲŲ
اØĒ اŲŲ
ŲØĒØ§ØŲØŠ اŲŲ
ØąØ§Ø¯ ØĨØŽŲØ§Ø¤Ųا</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">اŲŲŲŲ
اØĒ ŲØ§ŲØšØ¨Ø§ØąØ§ØĒ Ø§ŲØąØĻŲØŗŲØŠ Ø§ŲØĒŲ ŲØŦب ØĨØŽŲØ§Ø¤ŲØ§Ø Ų
ŲØĩŲŲØŠ Ø¨ØŗØˇØą ØŦØ¯ŲØ¯\n\nاŲŲŲŲ
اØĒ Ø§ŲØąØĻŲØŗŲØŠ ŲŲ
ŲŲ ØŖŲ ØĒŲŲŲ ØŖØŗŲ
Ø§ØĄ ŲŲŲØ§ØĒ ØŖŲ ØŖŲ ŲØĩ ŲØ¸ŲØą ŲŲ ØšŲØ§ŲŲŲ Ø§ŲŲŲØ¯ŲŲ\n\nŲØŦب ØĨØ¯ØŽØ§Ų Ø§ŲŲŲŲ
اØĒ Ø§ŲØĒŲ ØĒØØĒŲŲ ØšŲŲ ØŖØØąŲ ŲØ¨ŲØąØŠ ŲŲ Ø§ŲŲØŗØˇ بØĨØŗØĒ؎داŲ
Ø§ŲØŖØØąŲ اŲŲØ¨ŲØąØŠ (Ų
ØĢاŲ: iPhoneØ TikTokØ LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"اŲŲŲŲ
اØĒ ŲØ§ŲØšØ¨Ø§ØąØ§ØĒ Ø§ŲØĒŲ ØĒØąŲØ¯ ØĨØŽŲØ§ØĄŲØ§Ø Ų
ŲØĩŲŲØŠ Ø¨ØŗØˇŲØą ØŦØ¯ŲØ¯ØŠ
|
||||
|
||||
ŲŲ
ŲŲ ØŖŲ ØĒŲŲŲ Ø§ŲŲŲŲ
اØĒ ØšØ¨Ø§ØąØŠ ØšŲ ØŖØŗŲ
Ø§ØĄ ŲŲŲØ§ØĒ ØŖŲ ØŖŲ ŲØĩ ŲØ¸ŲØą ŲŲ ØšŲØ§ŲŲŲ Ø§ŲŲŲØ¯ŲŲŲØ§ØĒ
|
||||
|
||||
ŲØŦب ØĨØ¯ØŽØ§Ų Ø§ŲŲŲŲ
اØĒ Ø§ŲØĒŲ ØĒØØĒŲŲ ØšŲŲ ØŖØØąŲ ŲØ¨ŲØąØŠ ŲŲ Ø§ŲŲ
ŲØĒØĩŲ Ø¨ŲŲØŗ Ø§ŲØØ§ŲØŠ (ØšŲŲ ØŗØ¨ŲŲ Ø§ŲŲ
ØĢاŲ: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">ØŲŲ ØĒØĩŲŲØŠ Ø§ŲŲŲŲ
اØĒ اŲŲ
ŲØĒØ§ØŲØŠ</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">Ø§ŲØĩŲØØŠ Ø§ŲØąØĻŲØŗŲØŠ/Ø§ŲØ§Ø´ØĒØąØ§ŲØ§ØĒ/ŲØĒØ§ØĻØŦ Ø§ŲØĨØ´ØĒØąØ§Ų/ŲØĒŲ
ØĒØĩŲŲØŠ ŲØĒØ§ØĻØŦ Ø§ŲØ¨ØØĢ ŲØĨØŽŲØ§ØĄ اŲŲ
ØØĒŲŲ Ø§ŲØ°Ų ŲØĒØˇØ§Ø¨Ų Ų
Øš ØšØ¨Ø§ØąØ§ØĒ اŲŲŲŲ
اØĒ Ø§ŲØąØĻŲØŗŲØŠ\n\nاŲŲŲŲØ¯\nâĸ ŲØ§ ŲŲ
ŲŲ ØĨØŽŲØ§ØĄ ŲŲØ¯ŲŲŲØ§ØĒ Shorts Ø¨ŲØ§ØŗØˇØŠ Ø§ØŗŲ
اŲŲŲØ§ØŠ\nâĸ ŲØ¯ ŲØ§ ØĒŲŲŲ Ø¨ØšØļ Ų
ŲŲŲØ§ØĒ ŲØ§ØŦŲØŠ Ø§ŲŲ
ØŗØĒ؎دŲ
Ų
ØŽŲŲØŠ\nâĸ ŲØ¯ ŲØ§ ØĒØ¸ŲØą ŲØĒØ§ØĻØŦ Ø¨ØØĢ ØšŲ ŲŲŲ
ØŠ ØąØĻŲØŗŲØŠ</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"Ø§ŲØĩŲØØŠ Ø§ŲØąØĻŲØŗŲØŠ/Ø§ŲØ§Ø´ØĒØąØ§ŲØ§ØĒ/ŲØĒØ§ØĻØŦ Ø§ŲØ¨ØØĢ ŲØĒŲ
ØĒØĩŲŲØĒŲØ§ ŲØĨØŽŲØ§ØĄ اŲŲ
ØØĒŲŲ Ø§ŲØ°Ų ŲØĒØˇØ§Ø¨Ų Ų
Øš ŲŲŲ
اØĒ Ø§ŲØ¨ØØĢ
|
||||
|
||||
اŲŲŲŲØ¯
|
||||
âĸ ŲŲØ¯ŲŲŲØ§ØĒ Shorts ŲØ§ ŲŲ
ŲŲ ØĨØŽŲØ§Ø¤Ųا Ø¨ŲØ§ØŗØˇØŠ Ø§ØŗŲ
اŲŲŲØ§ØŠ
|
||||
âĸ ŲØ¯ ŲØ§ ŲØĒŲ
ØĨØŽŲØ§ØĄ بؚØļ Ų
ŲŲŲØ§ØĒ ŲØ§ØŦŲØŠ Ø§ŲŲ
ØŗØĒ؎دŲ
|
||||
âĸ Ø§ŲØ¨ØØĢ ØšŲ ŲŲŲ
ØŠ Ų
ا ŲØ¯ ŲØ§ ŲØšØˇŲ ŲØĒØ§ØĻØŦ"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Ų
ØˇØ§Ø¨ŲØŠ Ø§ŲŲŲŲ
اØĒ Ø¨ØŖŲŲ
ŲŲØ§</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">ØŗŲØ¤Ø¯Ų ŲØļØš ØšŲØ§Ų
ØŠ Ø§ŲØĒØ¨Ø§Øŗ Ų
Ø˛Ø¯ŲØŦØŠ ØŲŲ ŲŲŲ
ØŠ ØąØĻŲØŗŲØŠ/ØšØ¨Ø§ØąØŠ ØĨŲŲ Ų
ب𠨧بǨˇØ§Ø¨ŲاØĒ Ø§ŲØŦØ˛ØĻŲØŠ ŲØšŲاŲŲŲ Ø§ŲŲŲØ¯ŲŲ ŲØŖØŗŲ
Ø§ØĄ اŲŲŲŲØ§ØĒ.<br><br>ØšŲŲ ØŗØ¨ŲŲ Ø§ŲŲ
ØĢØ§ŲØ<br><b>\"ai\"</b> ØŗŲØŽŲŲ Ø§ŲŲŲØ¯ŲŲ: <b>How does AI work?</b><br>ŲŲŲŲ ŲŲ ŲØŽŲŲ: <b>What does fair use mean?</b></string>
|
||||
@@ -316,7 +332,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_general_ads_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ Ø§ŲØĨØšŲØ§ŲاØĒ بشŲŲ ØšØ§Ų
</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">ŲØĒŲ
ØšØąØļ Ø§ŲØĨØšŲØ§ŲاØĒ Ø§ŲØšØ§Ų
ØŠ</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">ØĨØŽŲØ§ØĄ ØĨØšŲØ§ŲاØĒ Ų
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">ŲØĒŲ
ØĨØŽŲØ§ØĄ ØĨØšŲØ§ŲاØĒ Ų
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ\n\nŲØ°Ų اŲŲ
ŲØ˛ØŠ Ų
ØĒŲŲØąØŠ ŲŲØˇ ŲŲØŖØŦŲØ˛ØŠ اŲŲØ¯ŲŲ
ØŠ</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"ŲØĒŲ
ØĨØŽŲØ§ØĄ ØĨØšŲØ§ŲاØĒ Ų
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ
|
||||
|
||||
ŲØ°Ų اŲŲ
ŲØ˛ØŠ Ų
ØĒØ§ØØŠ ŲŲØˇ ŲŲØŖØŦŲØ˛ØŠ اŲŲØ¯ŲŲ
ØŠ"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">ŲØĒŲ
ØšØąØļ ØĨØšŲØ§ŲاØĒ Ų
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">ØĨØŽŲØ§ØĄ Ø§ŲØĨØšŲØ§ŲاØĒ Ø§ŲØ˛ØąŲØŠ</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ Ø§ŲØĨØšŲØ§ŲاØĒ Ø§ŲØ˛ØąŲØŠ</string>
|
||||
@@ -416,7 +434,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_on">ØŲظ ŲØ§ØŗØĒؚاد؊ Ø§ŲØŗØˇŲØš ØšŲØ¯ Ø§ŲØŽØąŲØŦ ØŖŲ Ø§ŲØ¯ØŽŲŲ ØĨŲŲ ŲØļØš Ų
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_off">ŲØ§ ØĒŲŲ
بØŲظ Ø§ŲØŗØˇŲØš ŲØ§ØŗØĒؚادØĒŲ ØšŲØ¯ Ø§ŲØŽØąŲØŦ ØŖŲ Ø§ŲØ¯ØŽŲŲ ØĨŲŲ ŲØļØš Ų
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">ØĒŲ
ŲŲŲ ØĨŲŲ
Ø§ØĄØŠ Ø§ŲØŗØˇŲØš Ø§ŲØĒŲŲØ§ØĻŲ</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">ŲØ¤Ø¯Ų Ø§ŲØĒŲ
ØąŲØą ŲØŖØŗŲŲ ØĨŲŲ ØŖØ¯ŲŲ ŲŲŲ
ØŠ ŲØĨŲŲ
Ø§ØĄØŠ Ø§ŲØŗØˇŲØš ØĨŲŲ ØĒŲ
ŲŲŲ Ø§ŲØŗØˇŲØš Ø§ŲØĒŲŲØ§ØĻŲ</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Ø§ŲØĒŲ
ØąŲØą ŲØŖØŗŲŲ ØĨŲŲ ØŖØ¯ŲŲ ŲŲŲ
ØŠ ŲŲØŗØˇŲØš ŲŲ
ŲŲŲ Ø§ŲØŗØˇŲØš Ø§ŲØĒŲŲØ§ØĻŲ</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">ŲØ§ ŲØ¤Ø¯Ų Ø§ŲØĒŲ
ØąŲØą ŲØŖØŗŲŲ ØĨŲŲ ØŖØ¯ŲŲ ŲŲŲ
ØŠ ØĨŲŲ ØĒŲ
ŲŲŲ Ø§ŲØŗØˇŲØš Ø§ŲØĒŲŲØ§ØĻŲ</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">ØĒŲŲØ§ØĻŲ</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">Ų
ŲŲØŠ ŲØ§ØŦŲØŠ Ø§ŲØĒŲ
ØąŲØą</string>
|
||||
@@ -435,7 +453,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">ØŖØ˛ØąØ§Øą Ø§ŲØĨØŦØąØ§ØĄ</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">ØĨØŽŲØ§ØĄ ØŖŲ ØšØąØļ Ø§ŲØŖØ˛ØąØ§Øą ØĒØØĒ Ų
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">ØĨØŽŲØ§ØĄ ØŖŲ ØšØąØļ Ø§ŲØŖØ˛ØąØ§Øą ØĒØØĒ Ø§ŲŲŲØ¯ŲŲŲØ§ØĒ</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">ØĨØŽŲØ§ØĄ ØŖØšØŦبŲŲ ŲŲŲ
ŲØšØŦبŲŲ</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØŖØ˛ØąØ§Øą ØŖØšØŦبŲŲ ŲŲŲ
ŲØšØŦبŲŲ</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">ŲØĒŲ
ØšØąØļ ØŖØ˛ØąØ§Øą ØŖØšØŦبŲŲ ŲŲŲ
ŲØšØŦبŲŲ</string>
|
||||
@@ -490,11 +508,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">ŲØĒŲ
ØšØąØļ Ø˛Øą Ø§ŲØ§Ø´ØĒØąØ§ŲØ§ØĒ</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">ØĒبدŲŲ Ø§ŲØĨŲØ´Ø§ØĄ Ų
Øš Ø§ŲØĨØ´ØšØ§ØąØ§ØĒ</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">ØĒŲ
ØĒبدŲŲ Ø˛Øą Ø§ŲØĨŲØ´Ø§ØĄ Ø¨ŲØ˛Øą Ø§ŲØĨØ´ØšØ§ØąØ§ØĒ\n\nŲ
ŲØ§ØØ¸ØŠ: ŲØ¤Ø¯Ų ØĒŲ
ŲŲŲ ŲØ°Ø§ ØŖŲØļŲØ§ ØĨŲŲ ØĨØŽŲØ§ØĄ ØĨØšŲØ§ŲاØĒ اŲŲŲØ¯ŲŲ Ø¨Ø§ŲŲŲØŠ</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"ØĒŲ
ØĒبدŲŲ Ø˛Øą Ø§ŲØĨŲØ´Ø§ØĄ Ø¨ŲØ˛Øą Ø§ŲØĨØ´ØšØ§ØąØ§ØĒ
|
||||
|
||||
Ų
ŲØ§ØØ¸ØŠ: ŲØ¤Ø¯Ų ØĒŲ
ŲŲŲ ŲØ°Ø§ ØŖŲØļŲØ§ ØĨŲŲ ØĨØŽŲØ§ØĄ ØĨØšŲØ§ŲاØĒ اŲŲŲØ¯ŲŲ Ø¨Ø§ŲŲŲØŠ"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">ŲØ§ ŲØĒŲ
ØĒبدŲŲ Ø˛Øą Ø§ŲØĨŲØ´Ø§ØĄ Ø¨Ø˛Øą Ø§ŲØĨØ´ØšØ§ØąØ§ØĒ</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ
ŲØ§ØĒ Ø˛Øą Ø§ŲØĒŲŲŲ</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ Ø§ŲØĒØŗŲ
ŲØ§ØĒ</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">ŲØĒŲ
ØšØąØļ Ø§ŲØĒØŗŲ
ŲØ§ØĒ</string>
|
||||
<string name="revanced_disable_translucent_status_bar_title">ØĒØšØˇŲŲ Ø´ØąŲØˇ Ø§ŲØØ§ŲØŠ Ø§ŲØ´ŲاŲ</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_on">Ø´ØąŲØˇ Ø§ŲØØ§ŲØŠ ØēŲØą Ų
ØšØĒŲ
ØŠ</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_off">Ø´ØąŲØˇ Ø§ŲØØ§ŲØŠ ØēŲØą Ø´ŲØ§ŲØŠ ØŖŲ ØšŲ
ŲŲØŠ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_title">ØĒØšØˇŲŲ Ø´ØąŲØˇ Ø§ŲØĒŲŲŲ Ø§ŲØ´ŲØ§Ų Ø§ŲŲØ§ØĒØ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">Ø´ØąŲØˇ Ø§ŲØĒŲŲŲ ŲŲ Ø§ŲŲØļØš اŲŲØ§ØĒØ Ų
ØšØĒŲ
</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">ŲŲŲŲ Ø´ØąŲØˇ Ø§ŲØĒŲŲŲ ŲŲ Ø§ŲŲØļØš اŲŲØ§ØĒØ Ų
ØšØĒŲ
ŲØ§ ØŖŲ ŲØĩŲ Ø´ŲØ§Ų</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_title">ØĒØšØˇŲŲ Ø§ŲØ´ØąŲØˇ Ø§ŲØ¯Ø§ŲŲØŠ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">Ø´ØąŲØˇ Ø§ŲØĒŲŲŲ ŲŲ Ø§ŲŲØļØš Ø§ŲØ¯Ø§ŲŲ Ų
ØšØĒŲ
</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">Ø´ØąŲØˇ Ø§ŲØĒØˇØ¨ŲŲ Ø§ŲŲ
ØĩŲØąŲ Ø§ŲØ´ŲØ§Ų ØēŲØą ØšŲ
ŲŲØŠ ØŖŲ ØšŲ
ŲŲØŠ</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
|
||||
<string name="revanced_hide_player_flyout_title">اŲŲØ§ØĻŲ
ØŠ اŲŲ
ŲØ¨ØĢŲØŠ</string>
|
||||
@@ -617,8 +646,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ Ø˛Øą Ø§ŲØ§Ø´ØĒØąØ§Ų</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_off">ŲØĒŲ
ØšØąØļ Ø˛Øą Ø§ŲØ§Ø´ØĒØąØ§Ų</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">ØĨØŽŲØ§ØĄ ØŖØ˛ØąØ§Øą ŲØ§ØŦŲØŠ Ø§ŲØĒŲŲŲ</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØŖØ˛ØąØ§Øą ØĒØąØ§ŲØ¨ Ø§ŲØĒŲŲŲ</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">ŲØĒŲ
ØšØąØļ ØŖØ˛ØąØ§Øą ØĒØąØ§ŲØ¨ Ø§ŲØĒŲŲŲ</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØŖØ˛ØąØ§Øą ŲØ§ØŦŲØŠ Ø§ŲØĒŲŲŲ</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">ŲØĒŲ
ØšØąØļ ØŖØ˛ØąØ§Øą ŲØ§ØŦŲØŠ Ø§ŲØĒŲŲŲ</string>
|
||||
<string name="revanced_hide_shorts_shop_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą اŲŲ
ØĒØŦØą</string>
|
||||
<string name="revanced_hide_shorts_shop_button_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ Ø˛Øą اŲŲ
ØĒØŦØą</string>
|
||||
<string name="revanced_hide_shorts_shop_button_summary_off">ŲØĒŲ
ØšØąØļ Ø˛Øą اŲŲ
ØĒØŦØą</string>
|
||||
@@ -652,9 +681,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_stickers_title">ØĨØŽŲØ§ØĄ اŲŲ
ŲØĩŲØ§ØĒ</string>
|
||||
<string name="revanced_hide_shorts_stickers_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ اŲŲ
ŲØĩŲØ§ØĒ</string>
|
||||
<string name="revanced_hide_shorts_stickers_summary_off">ŲØĒŲ
ØšØąØļ اŲŲ
ŲØĩŲØ§ØĒ</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">ØĨØŽŲØ§ØĄ ŲØ§ŲŲØąØŠ ØŖØšØŦبŲŲ</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØĒØŖØĢŲØą Ø§ŲŲØ§ŲŲØąØŠ ŲŲØ˛Øą ØŖØšØŦبŲŲ</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_off">ŲØĒŲ
ØšØąØļ ØĒØŖØĢŲØą Ø§ŲŲØ§ŲŲØąØŠ ŲŲØ˛Øą ØŖØšØŦبŲŲ</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">ØĨØŽŲØ§ØĄ ŲŲØąØ§Ų ØŖØšØŦبŲŲ</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ Ø§ŲØĒØŖØĢŲØą Ø§ŲŲŲŲØ§Øą ŲŲØ˛Øą ØŖØšØŦبŲŲ</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_off">ŲØĒŲ
ØšØąØļ Ø§ŲØĒØŖØĢŲØą Ø§ŲŲŲŲØ§Øą ŲŲØ˛Øą ØŖØšØŦبŲŲ</string>
|
||||
<string name="revanced_hide_shorts_like_button_title">ØĨØŽŲØ§ØĄ Ø˛Øą ØŖØšØŦبŲŲ</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ Ø˛Øą ØŖØšØŦبŲŲ</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_off">ŲØĒŲ
ØšØąØļ Ø˛Øą ØŖØšØŦبŲŲ</string>
|
||||
@@ -683,7 +712,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_video_title_summary_off">ŲØĒŲ
ØšØąØļ Ø§ŲØšŲŲØ§Ų</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ
ŲØŠ Ø¨ŲØ§ŲاØĒ Ø§ŲØĒØšØąŲŲ Ø§ŲØĩŲØĒŲØŠ</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØĒØŗŲ
ŲØŠ Ø¨ŲØ§ŲاØĒ Ø§ŲØĒØšØąŲŲ</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">ŲØĒŲ
ØšØąØļ ØĒØŗŲ
ŲØŠ Ø§ŲØ¨ŲØ§ŲØ§ØĒ اŲŲØĩŲŲØŠ</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">ŲØĒŲ
ØšØąØļ ØĒØŗŲ
ŲØŠ Ø¨ŲØ§ŲاØĒ Ø§ŲØĒØšØąŲŲ</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_title">ØĨØŽŲØ§ØĄ ØĒØŗŲ
ŲØŠ ØąØ§Ø¨Øˇ اŲŲŲØ¯ŲŲ Ø§ŲŲØ§Ų
Ų</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ØĒØŗŲ
ŲØŠ ØąØ§Ø¨Øˇ اŲŲŲØ¯ŲŲ</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_off">ŲØĒŲ
ØšØąØļ ØĒØŗŲ
ŲØŠ ØąØ§Ø¨Øˇ اŲŲŲØ¯ŲŲ</string>
|
||||
@@ -709,8 +738,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ ŲŲØØ§ØĒ اŲŲ
Ø´ØēŲ Ø§ŲŲ
ŲØ¨ØĢŲØŠ</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">ŲØĒŲ
ØšØąØļ ŲŲØØ§ØĒ اŲŲ
Ø´ØēŲ Ø§ŲŲ
ŲØ¨ØĢŲØŠ</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">ŲØĒØ Ų
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ ŲŲ Ų
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">ŲØĒŲ
ŲØĒØ اŲŲŲØ¯ŲŲŲØ§ØĒ ŲŲ ŲØļØš Ų
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">ŲØ§ ŲØĒŲ
ŲØĒØ اŲŲŲØ¯ŲŲŲØ§ØĒ ŲŲ ŲØļØš Ų
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">Ø´ŲØ§ŲŲØŠ ØĒØąØ§ŲØ¨ اŲŲ
Ø´ØēŲ</string>
|
||||
<string name="revanced_player_overlay_opacity_title">Ø´ŲØ§ŲŲØŠ ŲØ§ØŦŲØŠ Ø§ŲŲ
Ø´ØēŲ</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">ŲŲŲ
ØŠ Ø§ŲØ´ŲاŲŲØŠ Ø¨ŲŲ 0-100Ø ØŲØĢ ŲŲŲŲ 0 Ø´ŲØ§Ų</string>
|
||||
<string name="revanced_player_overlay_opacity_invalid_toast">Ø´ŲØ§ŲŲØŠ ŲØ§ØŦŲØŠ Ø§ŲŲ
Ø´ØēŲ ŲØŦب ØŖŲ ØĒŲŲŲ Ø¨ŲŲ 0-100</string>
|
||||
</patch>
|
||||
@@ -726,7 +760,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">ŲØ§ ŲØĒŲ
ØšØąØļ ŲŲ
ŲØšØŦبŲŲ</string>
|
||||
<string name="revanced_ryd_shorts_title">ØšØąØļ ŲŲ
ŲØšØŦŲŲ ŲŲ Ų
ŲØ§ØˇØš Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">ŲØĒŲ
ØšØąØļ ŲŲ
ŲØšØŦŲŲ ŲŲ Ų
ŲØ§ØˇØš Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">ØĨØ¨Ø¯Ø§ØĄØ§ØĒ ŲŲ
ŲØšØŦبŲŲ Ø§ŲØĒŲ ØĒØ¸ŲØą ØšŲŲ ŲŲØ¯ŲŲŲØ§ØĒ Shorts\n\nØ§ŲØĒŲŲŲØ¯: ŲØ¯ ŲØ§ ØĒØ¸ŲØą ØĨØ¨Ø¯Ø§ØĄØ§ØĒ ŲŲ
ŲØšØŦبŲŲ ŲŲ ŲØļØš Ø§ŲØĒØĩŲØ اŲŲ
ØĒØŽŲŲ</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"ØĨØ¨Ø¯Ø§ØĄØ§ØĒ ŲŲ
ŲØšØŦبŲŲ Ø§ŲØĒŲ ØĒØ¸ŲØą ØšŲŲ ŲŲØ¯ŲŲŲØ§ØĒ Shorts
|
||||
|
||||
Ø§ŲØĒŲŲŲØ¯: ŲØ¯ ŲØ§ ØĒØ¸ŲØą ØĨØ¨Ø¯Ø§ØĄØ§ØĒ ŲŲ
ŲØšØŦبŲŲ ŲŲ ŲØļØš Ø§ŲØĒØĩŲØ اŲŲ
ØĒØŽŲŲ"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">ØĒŲ
ØĨØŽŲØ§ØĄ ŲŲ
ŲØšØŦŲŲ ŲŲ Ų
ŲØ§ØˇØš Shorts</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">ŲŲ
ŲØšØŦبŲŲ ŲŲŲ ŲØŗØ¨ØŠ Ų
ØĻŲŲØŠ</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">ŲØšØąØļ ØšØ¯Ø¯ ŲŲ
ŲØšØŦبŲŲ ŲŲ ŲØŗØ¨ØŠ Ų
ØĻŲŲØŠ</string>
|
||||
@@ -751,7 +787,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_statistics_getFetchCallCount_zero_summary">ŲŲ
ŲØĒŲ
ØĨØŦØąØ§ØĄ اØĒØĩØ§ŲØ§ØĒ Ø§ŲØ´Ø¨ŲØŠ</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallCount_non_zero_summary">%d اØĒØĩØ§ŲØ§ØĒ شبŲŲØŠ ØŖØŦØąŲØĒ</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_title">API ØŦŲØ¨ Ø§ŲØŖØĩŲØ§ØĒØ ØšØ¯Ø¯ اŲŲ
ŲŲØ§ØĒ</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary">ŲŲ
ØĒŲØĒŲŲ Ų
ŲŲØŠ Ø§ŲŲ
ŲØ§ŲŲ
اØĒ Ø§ŲØ´Ø¨ŲŲØŠ</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary">ŲŲ
ØĒŲØĒŲŲ Ų
ŲŲØŠ Ø§ŲØ§ØĒØĩØ§ŲØ§ØĒ Ø§ŲØ´Ø¨ŲŲØŠ</string>
|
||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_non_zero_summary">اØĒØĩØ§ŲØ§ØĒ شبŲŲØŠ Ø§ŲØĒŲØĒ Ų
ŲŲØĒŲØ§ %d</string>
|
||||
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_title">ØØ¯Ųد Ų
ØšØ¯Ų ØšŲ
ŲŲ API</string>
|
||||
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_zero_summary">ŲØ§ ØĒŲØŦد ØØ¯Ųد ŲŲ
ØšØ¯Ų Ø§ŲØšŲ
ŲŲ</string>
|
||||
@@ -769,13 +805,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Ų
ØĩØēØąØ§ØĒ Ø´ØąŲØˇ Ø§ŲØĒŲØ¯Ų
Ų
ØĒŲØŗØˇØŠ Ø§ŲØŦŲØ¯ØŠ</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Ų
ØĩØēØąØ§ØĒ Ø´ØąŲØˇ Ø§ŲØĒŲØ¯Ų
بŲ
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ ؚاŲŲØŠ Ø§ŲØŦŲØ¯ØŠ</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Ų
ØĩØēØąØ§ØĒ Ø´ØąŲØˇ Ø§ŲØĒŲØ¯Ų
بŲ
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ Ų
ØĒŲØŗØˇØŠ Ø§ŲØŦŲØ¯ØŠ</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">ØŗŲØ¤Ø¯Ų ŲØ°Ø§ ØŖŲØļØ§ ØĨŲŲ Ø§ØŗØĒؚاد؊ اŲŲ
ØĩØēØąØ§ØĒ ØšŲŲ Ø§ŲØ¨ØĢ اŲŲ
Ø¨Ø§Ø´Øą Ø§ŲØ°Ų ŲØ§ ŲØØĒŲŲ ØšŲŲ Ų
ØĩØēØąØ§ØĒ Ø´ØąŲØˇ Ø§ŲØĒŲØ¯Ų
.\n\nŲ
ØĩØēØąØ§ØĒ Ø´ØąŲØˇ Ø§ŲØĒŲØ¯Ų
ØŗŲŲ ØĒØŗØĒ؎دŲ
ŲŲØŗ ØŦŲØ¯ØŠ اŲŲŲØ¯ŲŲ Ø§ŲØØ§ŲŲ.\n\nØĒØšŲ
Ų ŲØ°Ų اŲŲ
ŲØ˛ØŠ بشŲŲ ØŖŲØļŲ Ų
Øš ØŦŲØ¯ØŠ ŲŲØ¯ŲŲ 720p ØŖŲ ØŖŲŲ ŲØšŲد Ø§ØŗØĒ؎داŲ
اØĒØĩØ§Ų ØĨŲØĒØąŲØĒ ØŗØąŲØš ØŦداŲ.</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Ø§ØŗØĒؚاد؊ Ų
ØĩØēØąØ§ØĒ Ø´ØąŲØˇ Ø§ŲØĒŲØ¯Ų
اŲŲØ¯ŲŲ
</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"ØŗŲØ¤Ø¯Ų ŲØ°Ø§ ØŖŲØļØ§ ØĨŲŲ Ø§ØŗØĒؚاد؊ اŲŲ
ØĩØēØąØ§ØĒ ØšŲŲ Ø§ŲØ¨ØĢ اŲŲ
Ø¨Ø§Ø´Øą Ø§ŲØ°Ų ŲØ§ ŲØØĒŲŲ ØšŲŲ Ų
ØĩØēØąØ§ØĒ Ø´ØąŲØˇ Ø§ŲØĒŲØ¯Ų
.
|
||||
|
||||
Ų
ØĩØēØąØ§ØĒ Ø´ØąŲØˇ Ø§ŲØĒŲØ¯Ų
ØŗŲŲ ØĒØŗØĒ؎دŲ
ŲŲØŗ ØŦŲØ¯ØŠ اŲŲŲØ¯ŲŲ Ø§ŲØØ§ŲŲ.
|
||||
|
||||
ØĒØšŲ
Ų ŲØ°Ų اŲŲ
ŲØ˛ØŠ بشŲŲ ØŖŲØļŲ Ų
Øš ØŦŲØ¯ØŠ ŲŲØ¯ŲŲ 720p ØŖŲ ØŖŲŲ ŲØšŲد Ø§ØŗØĒ؎داŲ
اØĒØĩØ§Ų ØĨŲØĒØąŲØĒ ØŗØąŲØš ØŦداŲ."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Ø§ØŗØĒؚاد؊ Ų
ØĩØēØąØ§ØĒ Ø´ØąŲØˇ Ø§ŲØĒŲØ¯Ų
اŲŲØ¯ŲŲ
ØŠ</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Ų
ØĩØēØąØ§ØĒ Ø´ØąŲØˇ Ø§ŲØĒŲØ¯Ų
ØŗØĒØ¸ŲØą ŲŲŲ Ø´ØąŲØˇ ØĒŲØ¯Ų
اŲŲŲØ¯ŲŲ</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Ų
ØĩØēØąØ§ØĒ Ø´ØąŲØˇ Ø§ŲØĒŲØ¯Ų
ØŗØĒØ¸ŲØą ŲŲ Ų
ŲØĄ Ø§ŲØ´Ø§Ø´ØŠ</string>
|
||||
</patch>
|
||||
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
|
||||
<string name="revanced_sb_enable_sb">ØĒŲ
ŲŲŲ Ų
اŲب𠨧بąŲØšŲØ§ØŠ SponsorBlock</string>
|
||||
<string name="revanced_sb_enable_sb">ØĒŲ
ŲŲŲ SponsorBlock</string>
|
||||
<string name="revanced_sb_enable_sb_sum">Ų
اŲب𠨧بąŲØšŲØ§ØŠ ŲŲ ŲØ¸Ø§Ų
ØŦŲ
Ø§ØšŲ ŲØĒØŽØˇŲ Ø§ŲØŖØŦØ˛Ø§ØĄ اŲŲ
ŲŲ
ŲŲŲŲØŠ ŲŲ Ų
ŲØ§ØˇØš YouTube</string>
|
||||
<string name="revanced_sb_appearance_category">اŲŲ
Ø¸ŲØą</string>
|
||||
<string name="revanced_sb_enable_voting">ØšØąØļ Ø˛Øą Ø§ŲØĒØĩŲŲØĒ</string>
|
||||
@@ -832,12 +872,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">ØĒŲ
Ø§ØŗØĒŲØąØ§Ø¯ Ø§ŲØĨؚداداØĒ Ø¨ŲØŦاØ</string>
|
||||
<string name="revanced_sb_settings_import_failed">ŲØ´Ų Ø§ØŗØĒŲØąØ§Ø¯: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">ŲØ´Ų ØĒØĩØ¯ŲØą: %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">ØĒØØĒŲŲ ØĨؚداداØĒŲ ØšŲŲ Ų
ØšØąŲ Ų
ØŗØĒ؎دŲ
؎اØĩ ŲŲ SponsorBlock.\n\n Ų
ØšØąŲ Ø§ŲŲ
ØŗØĒ؎دŲ
Ø§ŲØŽØ§Øĩ Ø¨Ų ŲØ´Ø¨Ų ŲŲŲ
ØŠ اŲŲ
ØąŲØą ŲŲØŦب ؚدŲ
Ų
Ø´Ø§ØąŲØĒŲ ØŖØ¨Ø¯ŲØ§.\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"ØĒØØĒŲŲ ØĨؚداداØĒŲ ØšŲŲ Ų
ØšØąŲ Ų
ØŗØĒ؎دŲ
؎اØĩ ŲŲ SponsorBlock.
|
||||
|
||||
Ų
ØšØąŲ Ø§ŲŲ
ØŗØĒ؎دŲ
Ø§ŲØŽØ§Øĩ Ø¨Ų ŲØ´Ø¨Ų ŲŲŲ
ØŠ اŲŲ
ØąŲØą ŲŲØŦب ؚدŲ
Ų
Ø´Ø§ØąŲØĒŲ ØŖØ¨Ø¯ŲØ§.
|
||||
"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">ŲØ§ ØĒØšØąØļ Ų
ØąØŠ ØŖØŽØąŲ</string>
|
||||
<string name="revanced_sb_diff_segments">ØĒØēŲŲØą ØŗŲŲŲ Ø§ŲŲ
ŲØˇØš</string>
|
||||
<string name="revanced_sb_segments_sponsor">Ø§ŲØąØ§ØšŲ</string>
|
||||
<string name="revanced_sb_segments_sponsor_sum">Ø§ŲØĒØąŲŲØŦ اŲŲ
دŲب𠨧بŖØŦØąØ ŲØ§ŲØĨØØ§ŲاØĒ اŲŲ
دŲŲØšØŠ Ø§ŲØŖØŦØą ŲØ§ŲØĨØšŲØ§ŲاØĒ اŲŲ
Ø¨Ø§Ø´ØąØŠ. ŲŲØŗ ŲŲØĒØąŲŲØŦ Ø§ŲØ°Ø§ØĒŲ ØŖŲ ŲØĩØąØ§ØšØ§ØĒ Ų
ØŦاŲŲØŠ ŲŲب﨧ب§/اŲŲ
بدؚŲŲ/اŲŲ
ŲØ§ŲØš Ø§ŲØĨŲŲØĒØąŲŲŲØŠ/اŲŲ
ŲØĒØŦاØĒ Ø§ŲØĒŲ ŲØØ¨ŲŲ Ø§ŲØØĩŲŲ ØšŲŲŲØ§</string>
|
||||
<string name="revanced_sb_segments_selfpromo">ØĒØąŲŲØŦ Ø´ØŽØĩŲ / ØēŲØą Ų
دŲب𠨧بŖØŦØą</string>
|
||||
<string name="revanced_sb_segments_selfpromo">ØĒØąŲŲØŦ Ø´ØŽØĩŲ/ØēŲØą Ų
دŲب𠨧بŖØŦØą</string>
|
||||
<string name="revanced_sb_segments_selfpromo_sum">شبŲŲØŠ Ø¨Ų \"Ø§ŲØąØ§ØšŲ\" Ø¨Ø§ØŗØĒØĢŲØ§ØĄ Ų
ا ŲØĒØšŲŲ Ø¨Ø§ŲØĨØšŲØ§ŲاØĒ ØēŲØą Ø§ŲŲ
دŲŲØšØŠ Ø§ŲØŖØŦØą ØŖŲ Ø§ŲØ°Ø§ØĒŲØŠ. ŲŲØ´Ų
Ų Ø°ŲŲ ØŖŲØŗØ§Ų
ØšŲ Ø§ŲØŗŲØš ØŖŲ Ø§ŲØĒØ¨ØąØšØ§ØĒ ØŖŲ Ø§ŲŲ
ØšŲŲŲ
اØĒ اŲŲ
ØĒØšŲŲØŠ Ø¨Ų
Ų ØĒؚاŲŲŲØ§ Ų
Øš ŲØ§Ø´Øą اŲŲ
ØØĒŲŲ</string>
|
||||
<string name="revanced_sb_segments_interaction">ØĒذŲŲØą Ø¨Ø§ŲØĒŲØ§ØšŲ (اشØĒØąØ§Ų)</string>
|
||||
<string name="revanced_sb_segments_interaction_sum">ØĒذŲŲØą ŲØĩŲØą ŲŲØĨØšØŦاب ØŖŲ Ø§ŲØ§Ø´ØĒØąØ§Ų ØŖŲ Ø§ŲŲ
ØĒابؚ؊ ŲŲ Ų
ŲØĒØĩŲ Ø§ŲŲ
ØØĒŲŲ. ØĨذا ŲØ§ŲØĒ ØˇŲŲŲØŠ ØŖŲ ØĒØĒØšŲŲ Ø¨Ø´ŲØĄ Ų
ØØ¯Ø¯Ø ŲŲØŦب ØŖŲ ØĒŲŲŲ ØŽØ§Øļؚ؊ ŲŲØĒØąŲŲØŦ Ø§ŲØ´ØŽØĩŲ Ø¨Ø¯ŲØ§Ų Ų
Ų Ø°ŲŲ</string>
|
||||
@@ -892,9 +935,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">ØēŲØą ŲØ§Ø¯Øą ØšŲŲ ØĨØąØŗØ§Ų Ø§ŲŲ
ŲØˇØš: Ø§ŲØØ§ŲØŠ: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock Ų
ØĒŲŲŲ Ų
Ø¤ŲØĒŲØ§</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">ØēŲØą ŲØ§Ø¯Øą ØšŲŲ ØĨØąØŗØ§Ų Ø§ŲŲ
ŲØˇØš (Ø§ŲØØ§ŲØŠ: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">ŲØ§ ŲŲ
ŲŲ ØĨØąØŗØ§Ų Ø§ŲŲ
ŲØˇØš.\n ØŦØ§ØąŲ Ø§ŲØØ¯ Ų
Ų Ų
ØšØ¯Ų ØĨØąØŗØ§ŲŲ (ؚدد ŲØ¨ŲØą ØŦدا Ų
Ų ŲŲØŗ اŲŲ
ØŗØĒ؎دŲ
ØŖŲ IP)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">ŲØ§ ŲŲ
ŲŲ ØĨØąØŗØ§Ų Ø§ŲŲ
ŲØˇØš. ØŦØ§ØąŲ Ø§ŲØØ¯ Ų
Ų Ų
ØšØ¯Ų ØĨØąØŗØ§ŲŲ (ؚدد ŲØ¨ŲØą ØŦØ¯ŲØ§ Ų
Ų ŲŲØŗ اŲŲ
ØŗØĒ؎دŲ
ØŖŲ IP)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">ŲØ§ ŲŲ
ŲŲ ØĨØąØŗØ§Ų Ø§ŲŲ
ŲØˇØš: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">ŲØ§ ŲŲ
ŲŲ ØĨØąØŗØ§Ų ŲØ°Ø§ اŲŲ
ŲØˇØš.\nŲ
ŲØŦŲØ¯ باŲŲØšŲ</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"ŲØ§ ŲŲ
ŲŲ ØĨØąØŗØ§Ų ŲØ°Ø§ اŲŲ
ŲØˇØš.
|
||||
Ų
ŲØŦŲØ¯ باŲŲØšŲ"</string>
|
||||
<string name="revanced_sb_submit_succeeded">ØĒŲ
ØĨØąØŗØ§Ų Ø§ŲŲ
ŲØˇØš Ø¨ŲØŦاØ</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock ØēŲØą Ų
ØĒØ§Ø Ų
Ø¤ŲØĒŲØ§ (Ø§ŲØĒŲØĒ Ų
ŲŲØŠ API)</string>
|
||||
@@ -909,7 +953,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_vote_no_segments">ŲØ§ ØĒŲØŦد Ų
ŲØ§ØˇØš ŲŲØĒØĩŲŲØĒ ØšŲŲŲØ§</string>
|
||||
<string name="revanced_sb_new_segment_choose_category">ا؎ØĒŲØ§Øą ŲØĻØŠ Ø§ŲŲ
ŲØˇØš</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">اŲŲØĻØŠ Ų
ØšØˇŲØŠ ŲŲ Ø§ŲØĨؚداداØĒ. ØĒŲ
ŲŲŲ Ø§ŲŲØĻØŠ ŲŲØĨØąØŗØ§Ų.</string>
|
||||
<string name="revanced_sb_new_segment_title">Ų
ŲØˇØš Ų
اŲŲØš ØąŲØšŲا؊ ØŦØ¯ŲØ¯</string>
|
||||
<string name="revanced_sb_new_segment_title">Ų
ŲØˇØš SponsorBlock ØŦØ¯ŲØ¯</string>
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question">ØĒØšŲŲŲ %s ŲØ¨Ø¯Ø§ŲØŠ ØŖŲ ŲŲØ§ŲØŠ ŲŲ
ŲØˇØš ØŦØ¯ŲØ¯Ø</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">Ø§ŲØ¨Ø¯Ø§ŲØŠ</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">اŲŲŲØ§ŲØŠ</string>
|
||||
@@ -917,7 +961,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">اŲŲŲØĒ Ø§ŲØ°Ų ŲØ¨Ø¯ØŖ ØšŲØ¯Ų اŲŲ
ŲØˇØš</string>
|
||||
<string name="revanced_sb_new_segment_time_end">اŲŲŲØĒ Ø§ŲØ°Ų ŲŲØĒŲŲ ØšŲØ¯Ų اŲŲ
ŲØˇØš</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">ŲŲ Ø§ŲØŖŲŲØ§ØĒ ØĩØŲØØŠØ</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">اŲŲ
ŲØˇØš Ų
Ų\n\n%1$s\nto\n%2$s\n\n(%3$s)\n\nReady to ØŦØ§ŲØ˛ ŲŲØĨØąØŗØ§ŲØ</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"اŲŲ
ŲØˇØš Ų
Ų
|
||||
|
||||
%1$s
|
||||
ØĨŲŲ
|
||||
%2$s
|
||||
|
||||
(%3$s)
|
||||
|
||||
ŲŲ ØŖŲØĒ Ų
ØŗØĒؚد ŲŲØĨØąØŗØ§ŲØ"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">ŲØŦب ØŖŲ ØĒŲŲŲ Ø§ŲØ¨Ø¯Ø§ŲØŠ ŲØ¨Ų اŲŲŲØ§ŲØŠ</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">ØļØš ØšŲØ§Ų
ØŠ ØšŲŲ Ų
ŲŲØšŲŲ ŲŲ Ø´ØąŲØˇ اŲŲŲØĒ ØŖŲŲŲØ§</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">Ų
ؚاŲŲØŠ Ø§ŲŲ
ŲØˇØšØ ŲØ§ŲØĒØŖŲØ¯ Ų
Ų ØĒØŽØˇŲŲ Ø¨ØŗŲØ§ØŗØŠ</string>
|
||||
@@ -959,7 +1011,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">ØŽŲØ¯Ø§Øš ØĨØĩØ¯Ø§Øą Ø§ŲØĒØˇØ¨ŲŲ</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">ØĒŲ
ØĒØēŲŲØą Ø§ØĩØ¯Ø§Øą Ø§ŲØĒØˇØ¨ŲŲ</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">ŲŲ
ŲØĒŲ
ØĒØēŲŲØą Ø§ØĩØ¯Ø§Øą Ø§ŲØĒØˇØ¨ŲŲ</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">ØŗŲØĒŲ
ØĒØēŲŲØą ØĨØĩØ¯Ø§Øą Ø§ŲØĒØˇØ¨ŲŲ ØĨŲŲ ØĨØĩØ¯Ø§Øą ŲØ¯ŲŲ
Ų
Ų YouTube.\n\nØŗŲØ¤Ø¯Ų ŲØ°Ø§ ØĨŲŲ ØĒØēŲŲØą Ų
Ø¸ŲØą ŲŲ
Ų
ŲØ˛Ø§ØĒ Ø§ŲØĒØˇØ¨ŲŲØ ŲŲŲŲ ŲØ¯ ØĒØØ¯ØĢ ØĒØŖØĢبਧØĒ ØŦØ§ŲØ¨ŲØŠ ØēŲØą Ų
ØšØąŲŲØŠ.\n\nØĨذا ØĒŲ
ØĨŲŲØ§Ų ØĒØ´ØēŲŲŲ ŲØ§ØŲØ§Ø Ų
Ų Ø§ŲŲ
ØŗØĒØØŗŲ Ų
ØŗØ Ø¨ŲØ§ŲاØĒ Ø§ŲØĒØˇØ¨ŲŲ ŲŲ
ŲØš ØØ¯ŲØĢ ØŖØŽØˇØ§ØĄ ŲŲ ŲØ§ØŦŲØŠ Ø§ŲŲ
ØŗØĒ؎دŲ
.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"ØŗŲØĒŲ
ØĒØēŲŲØą ØĨØĩØ¯Ø§Øą Ø§ŲØĒØˇØ¨ŲŲ ØĨŲŲ ØĨØĩØ¯Ø§Øą ŲØ¯ŲŲ
Ų
Ų YouTube.
|
||||
|
||||
ØŗŲØ¤Ø¯Ų ŲØ°Ø§ ØĨŲŲ ØĒØēŲŲØą Ų
Ø¸ŲØą ŲŲ
Ų
ŲØ˛Ø§ØĒ Ø§ŲØĒØˇØ¨ŲŲØ ŲŲŲŲ ŲØ¯ ØĒØØ¯ØĢ ØĒØŖØĢبਧØĒ ØŦØ§ŲØ¨ŲØŠ ØēŲØą Ų
ØšØąŲŲØŠ.
|
||||
|
||||
ØĨذا ØĒŲ
ØĨŲŲØ§Ų ØĒØ´ØēŲŲŲ ŲØ§ØŲŲØ§Ø Ų
Ų Ø§ŲŲ
ØŗØĒØØŗŲ Ų
ØŗØ Ø¨ŲØ§ŲاØĒ Ø§ŲØĒØˇØ¨ŲŲ ŲŲ
ŲØš ØØ¯ŲØĢ ØŖØŽØˇØ§ØĄ ŲŲ ŲØ§ØŦŲØŠ Ø§ŲŲ
ØŗØĒ؎دŲ
."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">اŲŲØ¯Ų Ų
Ų ØĒØēŲŲØą ØĨØĩØ¯Ø§Øą Ø§ŲØĒØˇØ¨ŲŲ</string>
|
||||
@@ -1012,7 +1068,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">ØĒØēŲŲØą ŲŲ
Øˇ اŲŲ
Ø´ØēŲ Ø§ŲŲ
ØĩØēØą Ø¯Ø§ØŽŲ Ø§ŲØĒØˇØ¨ŲŲ</string>
|
||||
<string name="revanced_miniplayer_type_title">Ųب𠨧ŲŲ
Ø´ØēŲ Ø§ŲŲ
ØĩØēØą</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Ų
ØšØˇŲŲ</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Ø§ŲØŖØĩŲŲ</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">ØĨبǨਧØļŲ</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Ø§ŲØØ¯ Ø§ŲØŖØ¯ŲŲ</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Ø§ŲØŦŲØ§Ø˛ اŲŲŲØŲ</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">ØØ¯ŲØĢ 1</string>
|
||||
@@ -1022,19 +1078,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Ø§ŲØ˛ŲØ§ŲØ§ Ų
ØŗØĒØ¯ŲØąØŠ</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Ø§ŲØ˛ŲØ§ŲØ§ Ų
ØąØ¨ØšØŠ</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">ØĒŲ
ŲŲŲ Ø§ŲŲŲØą Ø§ŲŲ
Ø˛Ø¯ŲØŦ ŲØ§ŲØļØēØˇ ŲØĒØēŲŲØą Ø§ŲØØŦŲ
</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">ØĒŲ
ØĒŲ
ŲŲŲ ØĨØŦØąØ§ØĄ Ø§ŲØļØēØˇ اŲŲ
Ø˛Ø¯ŲØŦ ŲØ§ŲØļØēØˇ ŲØĒØēŲŲØą Ø§ŲØØŦŲ
\n\nâĸ اŲŲŲØą Ø§ŲŲ
Ø˛Ø¯ŲØŦ ŲØ˛Ųاد؊ ØØŦŲ
اŲŲ
Ø´ØēŲ Ø§ŲŲ
ØĩØēØą\nâĸ اŲŲŲØą Ø§ŲŲ
Ø˛Ø¯ŲØŦ Ų
ØąØŠ ØŖØŽØąŲ ŲØ§ØŗØĒؚاد؊ Ø§ŲØØŦŲ
Ø§ŲØŖØĩŲŲ</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"ØĒŲ
ØĒŲ
ŲŲŲ ØĨØŦØąØ§ØĄ Ø§ŲØļØēØˇ اŲŲ
Ø˛Ø¯ŲØŦ ŲØ§ŲØļØēØˇ ŲØĒØēŲŲØą Ø§ŲØØŦŲ
|
||||
|
||||
âĸ اŲŲŲØą Ø§ŲŲ
Ø˛Ø¯ŲØŦ ŲØ˛Ųاد؊ ØØŦŲ
اŲŲ
Ø´ØēŲ Ø§ŲŲ
ØĩØēØą
|
||||
âĸ اŲŲŲØą Ø§ŲŲ
Ø˛Ø¯ŲØŦ Ų
ØąØŠ ØŖØŽØąŲ ŲØ§ØŗØĒؚاد؊ Ø§ŲØØŦŲ
Ø§ŲØŖØĩŲŲ"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">ØĨØŦØąØ§ØĄ اŲŲŲØą Ø§ŲŲ
Ø˛Ø¯ŲØŦ ŲØ§ŲØļØēØˇ ŲØĒØēŲŲØą Ø§ŲØØŦŲ
Ų
ØšØˇŲ</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">ØĒŲ
ŲŲŲ Ø§ŲØŗØØ¨ ŲØ§ŲØĨŲŲØ§ØĒ</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">Ø§ŲØŗØØ¨ ŲØ§ŲØĨŲŲØ§ØĒ Ų
ŲØšŲاŲ\n\nŲŲ
ŲŲ ØŗØØ¨ اŲŲ
Ø´ØēŲ Ø§ŲŲ
ØĩØēØą ØĨŲŲ ØŖŲ Ø˛Ø§ŲŲØŠ Ų
Ų Ø§ŲØ´Ø§Ø´ØŠ</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Ø§ŲØŗØØ¨ ŲØ§ŲØĨŲŲØ§ØĒ Ų
ŲØšŲاŲ
|
||||
|
||||
ŲŲ
ŲŲ ØŗØØ¨ اŲŲ
Ø´ØēŲ Ø§ŲŲ
ØĩØēØą ØĨŲŲ ØŖŲ Ø˛Ø§ŲŲØŠ Ų
Ų Ø§ŲØ´Ø§Ø´ØŠ"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">ØĒŲ
ØĒØšØˇŲŲ Ø§ŲØŗØØ¨ ŲØ§ŲØĨŲŲØ§ØĒ</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">ØĒŲ
ŲŲŲ ØĨŲŲ
Ø§ØĄØŠ Ø§ŲØŗØØ¨ Ø§ŲØŖŲŲŲØŠ</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">ØĒŲ
ØĒŲ
ŲŲŲ ØĨŲŲ
Ø§ØĄØŠ Ø§ŲØŗØØ¨ Ø§ŲØŖŲŲŲØŠ\n\nŲŲ
ŲŲ ØŗØØ¨ اŲŲ
Ø´ØēŲ Ø§ŲŲ
ØĩØēØą ØŽØ§ØąØŦ Ø§ŲØ´Ø§Ø´ØŠ ØĨŲŲ Ø§ŲŲØŗØ§Øą ØŖŲ Ø§ŲŲŲ
ŲŲ</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"ØĒŲ
ØĒŲ
ŲŲŲ ØĨŲŲ
Ø§ØĄØŠ Ø§ŲØŗØØ¨ Ø§ŲØŖŲŲŲØŠ
|
||||
|
||||
ŲŲ
ŲŲ ØŗØØ¨ اŲŲ
Ø´ØēŲ Ø§ŲŲ
ØĩØēØą ØŽØ§ØąØŦ Ø§ŲØ´Ø§Ø´ØŠ ØĨŲŲ Ø§ŲŲØŗØ§Øą ØŖŲ Ø§ŲŲŲ
ŲŲ"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">ØĒŲ
ØĒØšØˇŲŲ ØĨŲŲ
Ø§ØĄØŠ Ø§ŲØŗØØ¨ Ø§ŲØŖŲŲŲØŠ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">ØĨØŽŲØ§ØĄ Ø˛Øą Ø§ŲØĨØēŲØ§Ų</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ Ø˛Øą Ø§ŲØĨØēŲØ§Ų</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">ŲØĒŲ
ØšØąØļ Ø˛Øą Ø§ŲØĨØēŲØ§Ų</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">ØĨØŽŲØ§ØĄ ØŖØ˛ØąØ§Øą Ø§ŲØĒŲØŗŲØš ŲØ§ŲØĨØēŲØ§Ų</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ Ø§ŲØŖØ˛ØąØ§Øą\n\nŲ
ØąØą ŲŲØĒŲØŗŲØš ØŖŲ Ø§ŲØĨØēŲØ§Ų</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"ØĒŲ
ØĨØŽŲØ§ØĄ Ø§ŲØŖØ˛ØąØ§Øą
|
||||
|
||||
Ų
ØąØą ŲŲØĒŲØŗŲØš ØŖŲ Ø§ŲØĨØēŲØ§Ų"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">ŲØĒŲ
ØšØąØļ ØŖØ˛ØąØ§Øą Ø§ŲØĒŲØŗŲØš ŲØ§ŲØĨØēŲØ§Ų</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">ØĨØŽŲØ§ØĄ اŲŲØĩŲØĩ اŲŲØąØšŲØŠ</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">ØĒŲ
ØĨØŽŲØ§ØĄ اŲŲØĩŲØĩ اŲŲØąØšŲØŠ</string>
|
||||
@@ -1065,7 +1130,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">ØĒØŦØ§ŲØ˛ ŲŲŲØ¯ Ų
ŲØˇŲØŠ Ø§ŲØĩŲØąØŠ</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">Ø§ØŗØĒ؎داŲ
Ų
ØļŲŲ Ø§ŲØĩŲØąØŠ yt4.ggpht.com</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">Ø§ØŗØĒ؎داŲ
Ų
ØļŲŲ Ø§ŲØĩŲØą Ø§ŲØŖØĩŲŲ\n\nØĒŲ
ŲŲŲ ŲØ°Ø§ ŲŲ
ŲŲ ØĨØĩŲØ§Ø Ø§ŲØĩŲØą Ø§ŲŲ
ŲŲŲØ¯ØŠ Ø§ŲØĒŲ ŲØĒŲ
ØØ¸ØąŲا ŲŲ Ø¨ØšØļ اŲŲ
ŲØ§ØˇŲ</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"Ø§ØŗØĒ؎داŲ
Ų
ØļŲŲ Ø§ŲØĩŲØą Ø§ŲØŖØĩŲŲ
|
||||
|
||||
ØĒŲ
ŲŲŲ ŲØ°Ø§ ŲŲ
ŲŲ ØĨØĩŲØ§Ø Ø§ŲØĩŲØą Ø§ŲŲ
ŲŲŲØ¯ØŠ Ø§ŲØĒŲ ŲØĒŲ
ØØ¸ØąŲا ŲŲ Ø¨ØšØļ اŲŲ
ŲØ§ØˇŲ"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -1080,12 +1147,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & اŲŲ
ØĩŲØēØąØ§ØĒ Ø§ŲØŖØĩŲŲØŠ</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 +1190,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Ų
ØØ§Ųا؊ ØŖØ¨ØšØ§Ø¯ Ø§ŲØŦŲØ§Ø˛</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">ØĒŲ
Ų
ØØ§Ųا؊ ØŖØ¨ØšØ§Ø¯ Ø§ŲØŦŲØ§Ø˛\n\nŲØ¯ ŲØĒŲ
ŲØĒØ ŲŲŲ ØŦŲØ¯ØŠ اŲŲŲØ¯ŲŲ Ø§ŲØšØ§ŲŲØŠ ŲŲŲŲ ŲØ¯ ØĒŲØ§ØŦŲ ØĒŲØˇØšŲا ŲŲ ØĒØ´ØēŲŲ Ø§ŲŲŲØ¯ŲŲ ŲØšŲ
Øą Ø¨ØˇØ§ØąŲØŠ ØŖØŗŲØŖ ŲØĒØŖØĢبਧØĒ ØŦØ§ŲØ¨ŲØŠ ØēŲØą Ų
ØšØąŲŲØŠ</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">ØŖØ¨ØšØ§Ø¯ Ø§ŲØŦŲØ§Ø˛ ØēŲØą Ų
ØØ§Ųا؊\n\nŲŲ
ŲŲ ØŖŲ ŲØ¤Ø¯Ų ØĒŲØšŲŲ ŲØ°Ø§ ØĨŲŲ ŲØĒØ ØŦŲØ¯ØŠ ØŖØšŲŲ ŲŲŲŲØ¯ŲŲ</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"ØĒŲ
Ų
ØØ§Ųا؊ ØŖØ¨ØšØ§Ø¯ Ø§ŲØŦŲØ§Ø˛
|
||||
|
||||
ŲØ¯ ŲØĒŲ
ŲØĒØ ŲŲŲ ØŦŲØ¯ØŠ اŲŲŲØ¯ŲŲ Ø§ŲØšØ§ŲŲØŠ ŲŲŲŲ ŲØ¯ ØĒŲØ§ØŦŲ ØĒŲØˇØšŲا ŲŲ ØĒØ´ØēŲŲ Ø§ŲŲŲØ¯ŲŲ ŲØšŲ
Øą Ø¨ØˇØ§ØąŲØŠ ØŖØŗŲØŖ ŲØĒØŖØĢبਧØĒ ØŦØ§ŲØ¨ŲØŠ ØēŲØą Ų
ØšØąŲŲØŠ"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"ØŖØ¨ØšØ§Ø¯ Ø§ŲØŦŲØ§Ø˛ ØēŲØą Ų
ØØ§Ųا؊
|
||||
|
||||
ŲŲ
ŲŲ ØŖŲ ŲØ¤Ø¯Ų ØĒŲØšŲŲ ŲØ°Ø§ ØĨŲŲ ŲØĒØ ØŦŲØ¯ØŠ ØŖØšŲŲ ŲŲŲŲØ¯ŲŲ"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">ŲØ¯ ŲØ¤Ø¯Ų ØĒŲ
ŲŲŲ ŲØ°Ø§ ØĨŲŲ ØĒØ¨Ø§ØˇØ¤ ØĒØ´ØēŲŲ Ø§ŲŲŲØ¯ŲŲ ŲØĒØ¯ŲŲØą ØšŲ
Øą Ø§ŲØ¨ØˇØ§ØąŲØŠ ŲØĸØĢØ§Øą ØŦØ§ŲØ¨ŲØŠ ØēŲØą Ų
ØšØąŲŲØŠ.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1147,6 +1222,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_on">ØĒŲ
ØĒØšØˇŲŲ Ø§ŲØ§ŲØĒØ˛Ø§Ø˛</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">ØĒŲ
ØĒŲ
ŲŲŲ Ø§ŲØ§ŲØĒØ˛Ø§Ø˛</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">ŲØąØļ Ø§ŲØĩŲØĒ Ø§ŲØŖØĩŲŲ</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Ø§ØŗØĒ؎داŲ
Ø§ŲØĩŲØĒ Ø§ŲØŖØĩŲŲ</string>
|
||||
<string name="revanced_force_original_audio_summary_off">Ø§ØŗØĒ؎داŲ
Ø§ŲØĩŲØĒ Ø§ŲØ§ŲØĒØąØ§ØļŲ</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">ØĒŲŲØ§ØĻŲ</string>
|
||||
@@ -1170,13 +1250,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_speed_menu_summary_off">ŲØ§ ŲØĒŲ
ØšØąØļ ŲØ§ØĻŲ
ØŠ ØŗØąØšØŠ Ø§ŲØĒØ´ØēŲŲ Ø§ŲŲ
ØŽØĩØĩØŠ</string>
|
||||
<string name="revanced_custom_playback_speeds_title">ØŗØąØšØŠ Ø§ŲØĒØ´ØēŲŲ Ø§ŲŲ
ØŽØĩØĩØŠ</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">ØĨØļØ§ŲØŠ ØŖŲ ØĒØēŲŲØą ØŗØąØšØŠ Ø§ŲØĒØ´ØēŲŲ Ø§ŲŲ
ØŽØĩØĩØŠ</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">ŲØŦب ØŖŲ ØĒŲŲŲ Ø§ŲØŗØąØšØŠ اŲŲ
ØŽØĩØĩØŠ ØŖŲŲ Ų
Ų %s. Ø¨Ø§ØŗØĒ؎داŲ
اŲŲŲŲ
Ø§ŲØ§ŲØĒØąØ§ØļŲØŠ.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">ØŗØąØšØŠ ØĒØ´ØēŲŲ Ų
ØŽØĩØĩØŠ ØēŲØą ØĩØ§ŲØØŠ. Ø§ØŗØĒ؎داŲ
اŲŲŲŲ
Ø§ŲØ§ŲØĒØąØ§ØļŲØŠ.</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">ŲØŦب ØŖŲ ØĒŲŲŲ ØŗØąØšØ§ØĒ Ø§ŲØĒØ´ØēŲŲ Ø§ŲŲ
ØŽØĩØĩØŠ ØŖŲŲ Ų
Ų %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">ØŗØąØšØŠ Ø§ŲØĒØ´ØēŲŲ Ø§ŲŲ
ØŽØĩØĩØŠ ØēŲØą ØĩØ§ŲØØŠ</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">ØĒŲŲØ§ØĻŲ</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
<string name="revanced_remember_playback_speed_last_selected_title">ØĒØ°ŲØą Ø§ŲØĒØēبਧØĒ ŲŲ ØŗØąØšØŠ Ø§ŲØĒØ´ØēŲŲ</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_on">ØĒØˇØ¨ŲŲ ØĒØēŲبਧØĒ ØŗØąØšØŠ Ø§ŲØĒØ´ØēŲŲ ØšŲŲ ØŦŲ
ŲØš Ų
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_on">ØĒØˇØ¨ŲŲ ØĒØēŲبਧØĒ ØŗØąØšØŠ Ø§ŲØĒØ´ØēŲŲ ØšŲŲ ØŦŲ
ب𠨧ŲŲŲØ¯ŲŲŲØ§ØĒ</string>
|
||||
<string name="revanced_remember_playback_speed_last_selected_summary_off">ØĒØˇØ¨ŲŲ ØĒØēŲبਧØĒ ØŗØąØšØŠ Ø§ŲØĒØ´ØēŲŲ ŲŲØˇ ØšŲŲ Ø§ŲŲŲØ¯ŲŲ Ø§ŲØØ§ŲŲ</string>
|
||||
<string name="revanced_playback_speed_default_title">ØŗØąØšØŠ Ø§ŲØĒØ´ØēŲŲ Ø§ŲØ§ŲØĒØąØ§ØļŲØŠ</string>
|
||||
<string name="revanced_remember_playback_speed_toast">ØĒØēŲŲØą Ø§ŲØŗØąØšØŠ Ø§ŲØ§ŲØĒØąØ§ØļŲØŠ ØĨŲŲ: %s</string>
|
||||
@@ -1187,27 +1267,87 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_restore_old_video_quality_menu_summary_off">ŲØ§ ŲØĒŲ
ØšØąØļ ŲØ§ØĻŲ
ØŠ ØŦŲØ¯ØŠ اŲŲŲØ¯ŲŲ Ø§ŲŲØ¯ŲŲ
ØŠ</string>
|
||||
</patch>
|
||||
<patch id="interaction.seekbar.enableSlideToSeekPatch">
|
||||
<string name="revanced_slide_to_seek_title">ØĒŲ
ŲŲŲ Slide to Seek</string>
|
||||
<string name="revanced_slide_to_seek_summary_on">ØĒŲ
ØĒŲ
ŲŲŲ Slide to Seek</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">ØĒŲ
ØĒØšØˇŲŲ Slide to Seek</string>
|
||||
<string name="revanced_slide_to_seek_title">ØĒŲ
ŲŲŲ Ø§ŲØĒŲ
ØąŲØą ŲŲØĒŲØ¯ŲŲ
ØŖŲ Ø§ŲØĒØąØŦŲØš</string>
|
||||
<string name="revanced_slide_to_seek_summary_on">ØĒŲ
ØĒŲ
ŲŲŲ Ø§ŲØĒŲ
ØąŲØą ŲŲØĒŲØ¯ŲŲ
ØŖŲ Ø§ŲØĒØąØŦŲØš</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">ØĒŲ
ØĒØšØˇŲŲ Ø§ŲØĒŲ
ØąŲØą ŲŲØĒŲØ¯ŲŲ
ØŖŲ Ø§ŲØĒØąØŦŲØš</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_screen_title">Spoof Video Streams</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">ØĒØ˛ŲŲŲ ØĒدŲŲØ§ØĒ اŲŲŲØ¯ŲŲ Ø§ŲØŽØ§ØĩØŠ Ø¨Ø§ŲØšŲ
ŲŲ ŲŲ
ŲØš ØØ¯ŲØĢ Ų
Ø´ŲŲØ§ØĒ ØŖØĢŲØ§ØĄ Ø§ŲØĒØ´ØēŲŲ</string>
|
||||
<string name="revanced_spoof_video_streams_title">Spoof Video Streams</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">ŲØĒŲ
ØĒØ˛ŲŲŲ ØĒدŲŲØ§ØĒ اŲŲŲØ¯ŲŲ</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">ŲØ§ ŲØĒŲ
ØĒØ˛ŲŲŲ ØĒدŲŲØ§ØĒ اŲŲŲØ¯ŲŲ\n\nŲØ¯ ŲØ§ ŲØšŲ
Ų ØĒØ´ØēŲŲ Ø§ŲŲŲØ¯ŲŲ</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"ŲØ§ ŲØĒŲ
ØĒØ˛ŲŲŲ ØĒدŲŲØ§ØĒ اŲŲŲØ¯ŲŲ
|
||||
|
||||
ŲØ¯ ŲØ§ ŲØšŲ
Ų ØĒØ´ØēŲŲ Ø§ŲŲŲØ¯ŲŲ"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">ØĨŲŲØ§Ų ØĒØ´ØēŲŲ ŲØ°Ø§ Ø§ŲØĨؚداد ŲØ¯ ŲØŗØ¨Ø¨ Ų
شاŲŲ ŲŲ ØĒØ´ØēŲŲ Ø§ŲŲŲØ¯ŲŲ.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">Ø§ŲØšŲ
ŲŲ Ø§ŲØ§ŲØĒØąØ§ØļŲ</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">ŲØąØļ AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ØĒØąŲ
ŲØ˛ اŲŲŲØ¯ŲŲ ŲŲ AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ØĒØąŲ
ŲØ˛ اŲŲŲØ¯ŲŲ ŲŲ VP9 ØŖŲ AV1</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">ŲØ§ ŲØØĒŲŲ ØŦŲØ§Ø˛Ų ØšŲŲ ŲŲ ØĒØ´ŲŲØą Ø§ŲØŖØŦŲØ˛ØŠ VP9Ø ŲŲØ°Ø§ Ø§ŲØĨؚداد ŲØšŲ
Ų Ø¯Ø§ØĻŲ
ا ØšŲØ¯ ØĒŲ
ŲŲŲ ØĒØ˛ŲŲŲ Ø§ŲØšŲ
ŲŲ</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">ŲØ¯ ŲØ¤Ø¯Ų ØĒŲ
ŲŲŲ ŲØ°Ø§ ØĨŲŲ ØĒØØŗŲŲ ØšŲ
Øą Ø§ŲØ¨ØˇØ§ØąŲØŠ ŲØĨØĩŲØ§Ø Ų
Ø´ŲŲØŠ ØĒŲØˇŲØš Ø§ŲØĒØ´ØēŲŲ.\n\nŲØĒŲ
ØĒØš ØĒŲØŗŲŲ AVC Ø¨Ø¯ŲØŠ ŲØĩŲŲ ØĒØ¨ŲØē 1080PØ ŲØŗŲØŗØĒ؎دŲ
ØĒØ´ØēŲŲ Ø§ŲŲŲØ¯ŲŲ Ø§ŲŲ
Ø˛ŲØ¯ Ų
Ų Ø¨ŲØ§ŲاØĒ Ø§ŲØĨŲØĒØąŲØĒ Ų
ŲØ§ØąŲØŠŲ Ø¨ØĒŲØŗŲŲ VP9 ØŖŲ AV1.</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ØĒŲ
ŲØąØļ ØĒØąŲ
ŲØ˛ اŲŲŲØ¯ŲŲ ØšŲŲ AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ŲØĒŲ
ØĒØØ¯Ųد ØĒØąŲ
ŲØ˛ اŲŲŲØ¯ŲŲ ØĒŲŲØ§ØĻŲŲØ§</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"ŲØ¯ ŲØ¤Ø¯Ų ØĒŲ
ŲŲŲ ŲØ°Ø§ ØĨŲŲ ØĒØØŗŲŲ ØšŲ
Øą Ø§ŲØ¨ØˇØ§ØąŲØŠ ŲØĨØĩŲØ§Ø Ų
Ø´ŲŲØŠ ØĒŲØˇŲØš Ø§ŲØĒØ´ØēŲŲ.
|
||||
|
||||
ŲØĒŲ
ØĒØš ØĒŲØŗŲŲ AVC Ø¨Ø¯ŲØŠ ŲØĩŲŲ ØĒØ¨ŲØē 1080PØ Ø¨ØąŲØ§Ų
ØŦ ØĒØąŲ
ŲØ˛ Ø§ŲØĩŲØĒ Opus ØēŲØą Ų
ØĒŲبਠبŗŲØŗØĒ؎دŲ
ØĒØ´ØēŲŲ Ø§ŲŲŲØ¯ŲŲ Ø§ŲŲ
Ø˛ŲØ¯ Ų
Ų Ø¨ŲØ§ŲاØĒ Ø§ŲØĨŲØĒØąŲØĒ Ų
ŲØ§ØąŲØŠŲ Ø¨ØĒŲØŗŲŲ VP9 ØŖŲ AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">Ø§ŲØĒØŖØĢبਧØĒ Ø§ŲØŦØ§ŲØ¨ŲØŠ ŲŲ
ØØ§Ųا؊ iOS</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">âĸ ŲØ¯ ŲØ§ ŲØĒŲ
ØĒØ´ØēŲŲ ŲŲØ¯ŲŲŲØ§ØĒ Ø§ŲØŖØˇŲØ§Ų Ø§ŲØŽØ§ØĩØŠ\nâĸ ØĒØ¨Ø¯ØŖ Ø§ŲØ¨ØĢŲØĢ Ø§ŲŲ
Ø¨Ø§Ø´Øą Ų
Ų Ø§ŲØ¨Ø¯Ø§ŲØŠ\nâĸ ŲØ¯ ØĒŲØĒŲŲ Ø§ŲŲŲØ¯ŲŲŲØ§ØĒ ŲØ¨Ų اŲŲŲØ§ŲØŠ بØĢاŲŲØŠ ŲØ§ØØ¯ØŠ\nâĸ ŲØ§ ŲŲØŦد ØĒØąŲ
ŲØ˛ Ø§ŲØĩŲØĒ opus</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"âĸ ŲØ§ ŲŲ
ŲŲ ØĒØ´ØēŲŲ Ų
ŲØ§ØˇØš ŲŲØ¯ŲŲ Ø§ŲØŖØˇŲØ§Ų Ø§ŲØŽØ§ØĩØŠ.
|
||||
âĸ ØĒŲØĒŲŲ Ų
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ Ų
Ø¨ŲØąŲا بŲ
ŲØ¯Ø§Øą 1 ØĢاŲŲØŠ."</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Ø§ŲØĒØŖØĢبਧØĒ Ø§ŲØŦØ§ŲØ¨ŲØŠ ŲŲ
ØØ§Ųا؊ Android VR</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">âĸ ŲØ¯ ŲØ§ ŲØĒŲ
ØĒØ´ØēŲŲ ŲŲØ¯ŲŲŲØ§ØĒ Ø§ŲØŖØˇŲاŲ\nâĸ ŲØ§ØĻŲ
ØŠ اŲŲ
ŲØˇØš Ø§ŲØĩŲØĒŲ Ų
ŲŲŲØ¯ØŠ\nâĸ Ų
ØŗØĒŲŲ Ø§ŲØĩŲØĒ Ø§ŲØĢØ§Ø¨ØĒ ØēŲØą Ų
ØĒŲŲØą</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"âĸ ŲØ¯ ŲØ§ ŲØĒŲ
ØĒØ´ØēŲŲ ŲŲØ¯ŲŲŲØ§ØĒ Ø§ŲØŖØˇŲاŲ
|
||||
âĸ ØĒØ¨Ø¯ØŖ Ø§ŲØ¨ØĢŲØĢ Ø§ŲŲ
Ø¨Ø§Ø´ØąØŠ Ų
Ų Ø§ŲØ¨Ø¯Ø§ŲØŠ
|
||||
âĸ ŲØ¯ ØĒŲØĒŲŲ Ø§ŲŲŲØ¯ŲŲŲØ§ØĒ ŲØ¨Ų اŲŲŲØ§ŲØŠ بØĢاŲŲØŠ ŲØ§ØØ¯ØŠ"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">ŲØēØŠ Ø§ŲØ¨ØĢ Ø§ŲØĩŲØĒŲ Ø§ŲØ§ŲØĒØąØ§ØļŲØŠ</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">ŲØēØŠ Ø§ŲØĒØˇØ¨ŲŲ</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">Ø§ŲØšØąØ¨ŲØŠ</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">Azerbaijani</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">Bulgarian</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">Bengali</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">Catalan</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">Czech</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">Danish</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">German</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">Greek</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">English</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">Spanish</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">Estonian</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">ŲØ§ØąØŗŲ</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">Finnish</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">French</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">Gujarati</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">Hindi</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">Croatian</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">Hungarian</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID"> Indonesian</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">Italian</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Japanese</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">Kazakh</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">Korean</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">Lithuanian</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">Latvian</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">Macedonian</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">Mongolian</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">Marathi</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">Malay</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">Burmese</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">Dutch</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">Odia</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">Punjabi</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">Polish</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">Portuguese (Brazil)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">Portuguese (Portugal)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Romanian</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Russian</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">Slovak</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">Slovene</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">Serbian</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">Swedish</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">Swahili</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">Tamil</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">Telugu</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">Thai</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">Turkish</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">Ukrainian</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">Urdu</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">Vietnamese</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">Chinese</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -147,6 +136,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
|
||||
@@ -192,8 +183,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
</patch>
|
||||
<patch id="misc.announcements.announcementsPatch">
|
||||
<string name="revanced_announcements_dialog_dismiss">āĻāĻžā§°āĻŋāĻ āĻā§°āĻ</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">āϏāĻā§ā§āύāĻŋ</string>
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
</patch>
|
||||
@@ -209,6 +202,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -44,6 +33,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">APK quruluÅ tarixi pozulub</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_title">\"ReVanced\"</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Davam etmÉk istÉyirsiniz?</string>
|
||||
<string name="revanced_settings_reset">SÄąfÄąrla</string>
|
||||
<string name="revanced_settings_restart_title">YenilÉ vÉ yenidÉn baÅlat</string>
|
||||
@@ -67,9 +57,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore quraÅdÄąrÄąlmayÄąb. Bunu quraÅdÄąr.</string>
|
||||
<string name="gms_core_dialog_title">FÉaliyyÉt lazÄąmdÄąr</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore arxa planda iÅlÉmÉyÉ icazÉ almayÄąb.\n\nTelefonunuz ÃŧçÃŧn \"TÉtbiqim baÄlanÄąlmasÄąn\" bÉlÉdçisin izlÉyin vÉ tÉlimatlarÄą MicroG quraÅdÄąrmasÄąna tÉtbiq edin.\n\nBu tÉtbiq iÅlÉyÉn mÃŧddÉtdÉ tÉlÉb olunur.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore-un arxaplanda iÅlÉmÉsi ÃŧçÃŧn icazÉsi yoxdur.
|
||||
|
||||
Telefonunuz ÃŧçÃŧn \"TÉtbiqimi ÃļldÃŧrmÉ\" bÉlÉdçisinÉ ÉmÉl edin vÉ tÉlimatlarÄą MicroG quraÅdÄąrmanÄąza tÉtbiq edin.
|
||||
|
||||
Bu, tÉtbiqin iÅlÉmÉsi ÃŧçÃŧn tÉlÉb olunur."</string>
|
||||
<string name="gms_core_dialog_open_website_text">Veb saytÄą aç</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">ProblemlÉrin olmamasÄą ÃŧçÃŧn MicroG GmsCore batareya optimallaÅdÄąrmasÄą qeyri-aktiv edilmÉlidir.\n\nDavam dÃŧymÉsinÉ toxun vÉ batareya optimallaÅdÄąrmasÄąnÄą qeyri-aktiv et.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"Problemsiz iÅlÉmÉsi ÃŧçÃŧn MicroG GmsCore batareya optimallaÅdÄąrmalarÄą sÄąradan Ã§ÄąxarÄąlmalÄądÄąr.
|
||||
|
||||
MicroG ÃŧçÃŧn batareya optimallaÅdÄąrmasÄąnÄą sÄąradan Ã§Äąxartmaq, batareya istifadÉsinÉ mÉnfi tÉsir etmÉyÉcÉk.
|
||||
|
||||
Davam dÃŧymÉsinÉ toxunun vÉ optimallaÅdÄąrma dÉyiÅikliklÉrinÉ icazÉ verin."</string>
|
||||
<string name="gms_core_dialog_continue_text">Davam et</string>
|
||||
</patch>
|
||||
</app>
|
||||
@@ -84,7 +82,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_settings_screen_07_seekbar_title">AxtarÄąÅ Ã§ubuÄu</string>
|
||||
<string name="revanced_settings_screen_08_swipe_controls_title">SÃŧrÃŧÅdÃŧrmÉ nÉzarÉtçilÉri</string>
|
||||
<string name="revanced_settings_screen_11_misc_title">MÃŧxtÉlif</string>
|
||||
<string name="revanced_settings_screen_12_video_title">Video</string>
|
||||
<string name="revanced_settings_screen_12_video_title">\"Video\"</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">Shorts arxa plan oynatmasÄąn baÄla</string>
|
||||
@@ -106,7 +104,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">ReVanced xÉtasÄąnda ani bildiriÅ gÃļstÉr</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">XÉta baÅ verÉrsÉ bildiriÅ gÃļstÉr</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">XÉta baÅ verÉrsÉ bildiriÅ gÃļstÉrmÉ</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">Ani bildiriÅlÉri sÃļndÃŧrÉndÉ, bÃŧtÃŧn ReVanced xÉta bildiriÅlÉri gizlÉnir.\n\nGÃļzlÉnilmÉz hallardan xÉbÉrdar olmayacaqsÄąnÄąz.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"XÉta bildiriÅlÉrini sÃļndÃŧrmÉk, bÃŧtÃŧn ReVanced xÉta bildiriÅlÉrini gizlÉdir.
|
||||
|
||||
GÃļzlÉnilmÉz tÉdbirlÉr barÉdÉ bildiriÅ almayacaqsÄąnÄąz."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">BÉyÉn/abunÉ ol dÃŧymÉ parÄąltÄąsÄąn sÃļndÃŧr</string>
|
||||
@@ -125,7 +125,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Su niÅanÄą gizlidir</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Su niÅanÄą gÃļstÉrilir</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">ÃfÃŧqi hissÉlÉri gizlÉt</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">BelÉ hissÉlÉr gizlidir:\nâĸ Son xÉbÉrlÉr\nâĸ BaxmaÄa davam et\nâĸ Daha çox kanal kÉÅf et\nâĸ BazarlÄąq\nâĸ TÉkrar izlÉ</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"RÉflÉr gizlidir, mÉsÉlÉn:
|
||||
âĸ Son xÉbÉrlÉr
|
||||
âĸ İzlÉmÉyÉ davam et
|
||||
âĸ Daha çox kanallar kÉÅf edin
|
||||
âĸ AlÄąÅ-veriÅ
|
||||
âĸ YenidÉn izlÉ"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">HissÉlÉr gÃļstÉrilir</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -153,9 +158,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_timed_reactions_title">VaxtlÄą reaksiyalarÄą gizlÉt</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">ZamanlanmÄąÅ reaksiyalar gizlÉdilir</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">ZamanlanmÄąÅ reaksiyalar gÃļstÉrilir</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_title">AxtarÄąÅ nÉticÉsi bÃļlmÉ baÅlÄąÄÄąnÄą gizlÉt</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_on">BÃļlmÉ baÅlÄąÄÄą gizlidir</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_off">BÃļlmÉ baÅlÄąÄÄą gÃļstÉrilir</string>
|
||||
<string name="revanced_hide_channel_guidelines_title">Kanal tÉlimatlarÄąnÄą gizlÉt</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_on">Kanal tÉlimatlarÄą gizlidir</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_off">Kanal tÉlimatlarÄą gÃļstÉrilir</string>
|
||||
@@ -252,6 +254,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">ÆlaqÉli videolarda gÃļrÃŧnÃŧr</string>
|
||||
<string name="revanced_comments_screen_title">ÅÉrhlÉr</string>
|
||||
<string name="revanced_comments_screen_summary">ÅÉrhlÉr bÃļlmÉsi elementlÉrin gizlÉt vÉ ya gÃļstÉr</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">\'SÃļhbÉt yekunun\' gizlÉt </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">\"SÃļhbÉt yekunu\" gizlÉdilir</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">\'SÃļhbÉt yekunu\' gÃļstÉrilir</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">\'ÃzvlÉrin ÅÉrhlÉri\' baÅlÄąÄÄąnÄą gizlÉt</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">\"ÃzvlÉrin ÅÉrhlÉri\" baÅlÄąÄÄą gizlÉdilib</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">\"ÃzvlÉrin ÅÉrhlÉri\" baÅlÄąÄÄą gÃļstÉrilir</string>
|
||||
@@ -274,7 +279,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodle-larÄą gizlÉt</string>
|
||||
<string name="revanced_hide_doodles_summary_on">AxtarÄąÅ Ã§ubuÄu Doodle-larÄą gizlidir</string>
|
||||
<string name="revanced_hide_doodles_summary_off">AxtarÄąÅ Ã§ubuÄu Doodle-larÄą gÃļstÉrilir</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">YouTube Doodle-lar hÉr il bir neÃ§É gÃŧn gÃļstÉrilir.\n\nDoodle hazÄąrda bÃļlgÉnizdÉ gÃļrÃŧnÃŧr vÉ bu gizlÉtmÉ seçimi aktivdirsÉ, axtarÄąÅ Ã§ubuÄu altÄąndakÄą filtr paneli dÉ gizlÉdilÉcÉk.</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodles ilinin bir neÃ§É gÃŧnÃŧ gÃļstÉrilir.
|
||||
|
||||
ÆgÉr Doodle hazÄąrda sizin bÃļlgÉnizdÉ gÃļstÉrilirsÉ vÉ bu gizlÉtmÉ parametr aÃ§ÄąqdÄąrsa, axtarÄąÅ Ã§ubuÄunun altÄąndakÄą filtr çubuÄu da gizlÉnÉcÉk."</string>
|
||||
<string name="revanced_custom_filter_screen_title">ÅÉxsi filtr</string>
|
||||
<string name="revanced_custom_filter_screen_summary">FÉrdi filtrlÉr ilÉ elementlÉri gizlÉt</string>
|
||||
<string name="revanced_custom_filter_title">FÉrdi filtri aktivlÉÅdir</string>
|
||||
@@ -298,9 +305,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">GizlÉdilÉcÉk açar sÃļzlÉr</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">Yeni sÉtirlÉrlÉ ayrÄąlmÄąÅ gizlÉdilÉcÉk açar sÃļzlÉr vÉ frazalar\n\nAçar sÃļzlÉr kanal adlarÄą vÉ ya video adlarÄąnda gÃļstÉrilÉn istÉnilÉn mÉtn ola bilÉr\n\nOrtada bÃļyÃŧk hÉrf olan sÃļzlÉr korpusla birlikdÉ qeyd edilmÉlidir (yÉni: iPhone, TikTok, LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"KÉnarda qoyulacaq açar sÃļzlÉr vÉ cÃŧmlÉlÉr, yeni sÉtirlÉrlÉ ayrÄąlmÄąÅdÄąr
|
||||
|
||||
Açar sÃļzlÉr kanal adlarÄą vÉ ya video baÅlÄąqlarÄąnda gÃļstÉrilÉn hÉr hansÄą mÉtn ola bilÉr.
|
||||
|
||||
Orta hÉrflÉri bÃļyÃŧk hÉrflÉrlÉ olan sÃļzlÉr bÃļyÃŧk hÉrflÉrlÉ yazÄąlmalÄądÄąr (mÉsÉlÉn: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">Açar sÃļz filtrlÉmÉsi haqqÄąnda</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">Æsas sÉhifÉ/AbunÉlik/AxtarÄąÅ nÉticÉlÉri açar sÃļz ifadÉlÉrinÉ uyÄunlaÅan mÉzmunu gizlÉtmÉk ÃŧçÃŧn filtrlÉnir\n\nMÉhdudiyyÉtlÉr\nâĸ Shorts-lar kanal adÄąna gÃļrÉ gizlÉnÉ bilmÉz\nâĸ BÉzi UI hissÉciklÉri gizlÉdilÉ bilmÉz\nâĸ Açar sÃļz axtarÄąÅÄąnda nÉticÉ olmaya bilÉr</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"Ana sÉhifÉ/AbunÉlik/AxtarÄąÅ nÉticÉlÉri açar sÃļz ifadÉlÉrinÉ uyÄun olan mÉzmunu gizlÉtmÉk ÃŧçÃŧn sÃŧzÃŧlÃŧr
|
||||
|
||||
MÉhdudiyyÉtlÉr
|
||||
âĸ Åortlar kanal adÄą ilÉ gizlÉnÉ bilmÉz
|
||||
âĸ BÉzi UI komponentlÉri gizlÉnÉ bilmÉz
|
||||
âĸ Açar sÃļz axtarmaq heç bir nÉticÉ vermÉyÉ bilÉr"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">BÃŧtÃŧn sÃļzlÉri uyÄunlaÅdÄąr</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">Açar sÃļz/frazanÄąn qoÅa dÄąrnaqlarla ÉhatÉ olunmasÄą video adlarÄą vÉ kanal adlarÄąnÄąn qismÉn uyÄunlaÅmasÄąna mane olacaq <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 +332,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_general_ads_summary_on">Ãmumi reklamlar gizlidir</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">Ãmumi reklamlar gÃļstÉrilir</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Tam ekran reklamlarÄąnÄą gizlÉt</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Tam ekran reklamlarÄą gizlidir\n\nBu funksiya yalnÄąz kÃļhnÉ cihazlar ÃŧçÃŧn ÉlçatandÄąr</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Tam ekran reklam gizlidir
|
||||
|
||||
Bu xÃŧsusiyyÉt yalnÄąz kÃļhnÉ cihazlar ÃŧçÃŧn mÃļvcuddur"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Tam ekran reklamlarÄą gÃļstÉrilir</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">DÃŧymÉli reklamlarÄą gizlÉt</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">DÃŧymÉli reklamlar gizlÉdilir</string>
|
||||
@@ -490,11 +508,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">AbunÉliklÉr dÃŧymÉsi gÃļstÉrilir</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">\"Yarat\"Äą \"BildiriÅlÉr\" ilÉ dÉyiÅdir</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">Yarat dÃŧymÉsi BildiriÅlÉr dÃŧymÉsi ilÉ dÉyiÅdirilir\n\nQeyd: Bunu aktivlÉÅdirmÉ video reklamlarÄą da mÉcburÉn gizlÉdir</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"Yarat dÃŧymÉsi BildiriÅlÉr dÃŧymÉsi ilÉ dÉyiÅdirilir
|
||||
|
||||
Qeyd: Bunu aktivlÉÅdirmÉk video reklamlarÄą da mÉcburi olaraq gizlÉdir"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">\"Yarat\" dÃŧymÉsi, \"BildiriÅlÉr\" dÃŧymÉsi ilÉ dÉyiÅdirilmir</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">FÉaliyyÉt dÃŧymÉ etiketlÉrini gizlÉt</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">EtiketlÉr gizlidir</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">EtiketlÉr gÃļstÉrilir</string>
|
||||
<string name="revanced_disable_translucent_status_bar_title">YarÄąmÅÉffaf status barÄą deaktiv et</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_on">Status çubuÄu ÅÉffaf deyil</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_off">Status çubuÄu ÅÉffaf vÉ ya yarÄą ÅÉffaf</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_title">AÃ§Äąq yarÄąmÅÉffaf barÄą deaktiv et</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">AÃ§Äąq rejim navigasiya barÄą qeyri-ÅÉffafdÄąr</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">AÃ§Äąq rÉngli naviqasiya çubuÄu ÅÉffaf vÉ ya yarÄą ÅÉffaf</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_title">TÃŧnd ÅÉffaf çubuÄu deaktiv edin</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">TÃŧnd rejim navigasiya barÄą qeyri-ÅÉffafdÄąr</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">TÃŧnd rÉngli naviqasiya çubuÄu ÅÉffaf vÉ ya yarÄą ÅÉffaf</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
|
||||
<string name="revanced_hide_player_flyout_title">AÃ§Äąlan menyu</string>
|
||||
@@ -709,6 +738,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">OynadÄącÄą aÃ§Äąlan pÉncÉrÉ panellÉri gizlidir</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">OynadÄącÄą aÃ§Äąlan pÉncÉrÉ panellÉri gÃļstÉrilir</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">VideolarÄą tam ekran tÉsvirindÉ aç</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Videolar tam ekranda aÃ§ÄąlÄąr</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Videolar tam ekranda aÃ§ÄąlmÄąr</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">OynadÄącÄą ÃļrtÃŧyÃŧnÃŧn qeyri-ÅÉffaflÄąÄÄą</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">0-100 arasÄąnda qeyri-ÅÉffaflÄąq dÉyÉri, burada 0 ÅÉffafdÄąr</string>
|
||||
@@ -726,7 +760,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">BÉyÉnmÉmÉlÉr gÃļstÉrilmir</string>
|
||||
<string name="revanced_ryd_shorts_title">\"Shorts\"da bÉyÉnmÉmÉ sayÄąnÄą gÃļstÉr</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">BÉyÉnmÉmÉ sayÄą \"Shorts\"da gÃļstÉrilir</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">\"BÉyÉnmÉmÉ\"lÉr \"Shorts\"da gÃļstÉrilir\n\nMÉhdudiyyÉt: \"BÉyÉnmÉmÉ\"lÉr gizli rejimdÉ gÃļrÃŧnmÉyÉ bilÉr</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Åortlarda gÃļrÃŧnÉn bÉyÉnmÉmÉlÉr
|
||||
|
||||
MÉhdudiyyÉt: BÉyÉnmÉmÉlÉr gizli rejimdÉ gÃļrÃŧnÉ bilmÉz"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">\"BÉyÉnmÉmÉ\"lÉr \"Shorts\"da gizlidir</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">\"BÉyÉnmÉmÉ\"lÉr faiz olaraq</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">\"BÉyÉnmÉmÉ\"lÉr faiz olaraq gÃļstÉrilir</string>
|
||||
@@ -769,7 +805,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">AxtarÄąÅ Ã§ubuÄu miniatÃŧrlÉri orta keyfiyyÉtlidir</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">Tam ekran axtarÄąÅ Ã§ubuÄu miniatÃŧrlÉri yÃŧksÉk keyfiyyÉtlidir</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Tam ekran axtarÄąÅ Ã§ubuÄu miniatÃŧrlÉri orta keyfiyyÉtlidir</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">Bu, hÉm dÉ axtarÄąÅ cizgisi ÃŧzrÉ miniatÃŧrlÉri olmayan canlÄą yayÄąmlarda miniatÃŧrlÉri qaytaracaq.\n\nAxtarÄąÅ cizgisi miniatÃŧrlÉri, cari video kimi eyni keyfiyyÉti iÅlÉdÉcÉk.\n\nBu xÃŧsusiyyÉt, 720p vÉ ya daha aÅaÄÄą video keyfiyyÉti vÉ Ã§ox sÃŧrÉtli internet baÄlantÄąsÄą istifadÉ edÉrkÉn daha yaxÅÄą iÅlÉyir.</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Bu, hÉmçinin axtarÄąÅ Ã§ubuÄu kiçik gÃļrÃŧntÃŧlÉri olmayan canlÄą yayÄąmlarda kiçik ÅÉkillÉri bÉrpa edÉcÉk.
|
||||
|
||||
AxtarÄąÅ Ã§ubuÄu kiçik ÅÉkillÉri cari videonun keyfiyyÉti ilÉ eyni keyfiyyÉtdÉn istifadÉ edÉcÉk.
|
||||
|
||||
Bu xÃŧsusiyyÉt Én yaxÅÄą 720p vÉ ya daha aÅaÄÄą video keyfiyyÉti vÉ Ã§ox sÃŧrÉtli internet baÄlantÄąsÄąndan istifadÉ edÉrkÉn iÅlÉyir."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">KÃļhnÉ axtarÄąÅ Ã§ubuÄu miniatÃŧrlÉrin al</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">AxtarÄąÅ Ã§ubuÄu miniatÃŧrlÉri axtarÄąÅ Ã§ubuÄu ÃŧstÃŧndÉ gÃļrÃŧnÉcÉk</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">AxtarÄąÅ Ã§ubuÄu miniatÃŧrlÉri tam ekranda gÃļrÃŧnÉcÉk</string>
|
||||
@@ -832,7 +872,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">TÉnzimlÉmÉlÉr uÄurla idxal edildi</string>
|
||||
<string name="revanced_sb_settings_import_failed">%s idxal uÄursuz</string>
|
||||
<string name="revanced_sb_settings_export_failed">%s ixrac uÄursuz</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">TÉnzimlÉmÉlÉr ÅÉxsi SponsorBlock istifadÉçi kimliyi ehtiva edir.\n\nİstifadÉçi kimliyiniz parol kimidir vÉ bu paylaÅÄąlmamalÄądÄąr.\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"ParametrlÉrdÉ ÃļzÉl SponsorBlock istifadÉçi IDniz var.
|
||||
|
||||
SizÉ istifadÉçi IDniz parol kimidir vÉ heç vaxt baÅqasÄąna verilmÉmÉlidir.
|
||||
"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">TÉkrar gÃļstÉrmÉ</string>
|
||||
<string name="revanced_sb_diff_segments">BÃļlÃŧm davranÄąÅÄąnÄą dÉyiÅdir</string>
|
||||
<string name="revanced_sb_segments_sponsor">Sponsor</string>
|
||||
@@ -892,9 +935,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">BÃļlÃŧm gÃļndÉrilmir: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock mÃŧvÉqqÉti olaraq cavab vermir</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">BÃļlÃŧm gÃļndÉrilmir (status: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">BÃļlÃŧm gÃļndÉrilmir.\nSÃŧrÉt mÉhdudlaÅÄąb (eyni istifadÉçi vÉ ya IP-dÉn pik sayda)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">Segment tÉqdim edÉ bilmÉdiniz. HÉddÉn artÄąq istifadÉ (eyni istifadÉçi vÉ ya IP ÃŧnvanÄąndan çox)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">BÃļlÃŧm gÃļndÉrilmir: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">BÃļlÃŧm gÃļndÉrilmir.\nArtÄąq var</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"Segment tÉqdim edÉ bilmirsiniz.
|
||||
ArtÄąq mÃļvcuddur"</string>
|
||||
<string name="revanced_sb_submit_succeeded">BÃļlÃŧm uÄurla gÃļndÉrildi</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock mÃŧvÉqqÉti ÉlçatmazdÄąr (API vaxtÄą bitdi)</string>
|
||||
@@ -917,7 +961,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">BÃļlÃŧm baÅladÄąÄÄą vaxt</string>
|
||||
<string name="revanced_sb_new_segment_time_end">BÃļlÃŧmÃŧn bitmÉ vaxtÄą</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">Vaxtlar dÃŧzgÃŧndÃŧr?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">BÃļlÃŧm \n\n%1$s\n\n%2$s\n\n(%3$s)\n\nTÉqdim etmÉyÉ hazÄąrsÄąnÄąz?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"BÃļlÃŧm
|
||||
|
||||
%1$s
|
||||
ilÉ
|
||||
%2$s arasÄądÄąr
|
||||
|
||||
(%3$s)
|
||||
|
||||
TÉqdim etmÉyÉ hazÄąrdÄąr?"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">BaÅlanÄÄąc sondan ÉvvÉl olmalÄądÄąr</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">ÆvvÉlcÉ vaxt çubuÄunda iki yeri doldur</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">BÃļlÃŧmÃŧ izlÉyin, rahatlÄąqla ÃļtÃŧrdÃŧyÃŧnÉ Émin olun</string>
|
||||
@@ -959,7 +1011,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">TÉtbiq versiyasÄąnÄą saxtalaÅdÄąr</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">Versiya saxtalaÅdÄąrÄąldÄą</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">Versiya saxtalaÅdÄąrÄąlmadÄą</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">TÉtbiq versiyasÄą, YouTube-un daha kÃļhnÉ versiyasÄą ÅÉklindÉ saxtalaÅdÄąrÄąlacaq.\n\nBu, tÉtbiqin gÃļrÃŧnÃŧÅÃŧnÃŧ vÉ funksiyalarÄąnÄą dÉyiÅdirÉcÉk, ancaq bilinmÉyÉn yan tÉsirlÉr ola bilÉr.\n\nDaha sonra sÃļndÃŧrsÉniz, UI sÉhvlÉrini ÃļnlÉmÉk ÃŧçÃŧn tÉtbiq mÉlumatÄąnÄą tÉmizlÉmÉk tÃļvsiyÉ olunur.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"TÉtbiq versiyasÄą kÃļhnÉ bir YouTube versiyasÄąna oxÅayacaq.
|
||||
|
||||
Bu tÉtbiqin gÃļrÃŧnÃŧÅÃŧnÃŧ vÉ xÃŧsusiyyÉtlÉrini dÉyiÅdirÉcÉk, lakin bilinmÉyÉn yan tÉsirlÉr yarana bilÉr.
|
||||
|
||||
Sonradan sÃļndÃŧrÃŧlÉrsÉ, UI sÉhvlÉrini qarÅÄąsÄąnÄą almaq ÃŧçÃŧn tÉtbiqin mÉlumatlarÄąnÄą silmÉk tÃļvsiyÉ olunur."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Saxta tÉtbiq versiyasÄą hÉdÉfi</string>
|
||||
@@ -1012,7 +1068,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">TÉtbiqdÉ kiçildilÉn oynadÄącÄą Ãŧslubunu dÉyiÅdir</string>
|
||||
<string name="revanced_miniplayer_type_title">Kiçik oynadÄącÄą nÃļvÃŧ</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Qeyri-aktivdir</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Orijinal</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">İlkin</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Æn kiçik</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">PlanÅet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">MÃŧasir 1</string>
|
||||
@@ -1022,19 +1078,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">KÃŧnclÉr dairÉvidir</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">KÃŧnclÉr kvadratdÄąr</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">ÃlçÃŧsÃŧnÃŧ dÉyiÅmÉk ÃŧçÃŧn cÃŧt toxunmanÄą vÉ Ã§imdiklÉmÉni aktivlÉÅdir</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">ÃlçÃŧsÃŧnÃŧ dÉyiÅdirmÉk ÃŧçÃŧn cÃŧt toxunma fÉaliyyÉti vÉ Ã§imdiklÉmÉ aktivlÉÅdirildi\n\nâĸ Mini oynadÄącÄą ÃļlçÃŧsÃŧn artÄąrmaq ÃŧçÃŧn cÃŧt toxunun\nâĸ Orijinal ÃļlçÃŧnÃŧ bÉrpa etmÉk ÃŧçÃŧn tÉkrar cÃŧt toxun</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"İkiqat vuruÅ hÉrÉkÉti vÉ Ã§imdikleyÉrÉk yenidÉn ÃļlçmÉk aktivdir
|
||||
|
||||
âĸ Miniplayer ÃļlçÃŧsÃŧnÃŧ artÄąrmaq ÃŧçÃŧn iki dÉfÉ vurun
|
||||
âĸ Orijinal ÃļlçÃŧsÃŧnÉ qayÄątmaq ÃŧçÃŧn yenidÉn iki dÉfÉ vurun"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">ÃlçÃŧsÃŧnÃŧ dÉyiÅdirmÉk ÃŧçÃŧn cÃŧt toxunma fÉaliyyÉti vÉ Ã§imdiklÉmÉ yoxdur</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">\"SÃŧrÃŧklÉ vÉ burax\"Äą aktivlÉÅdir</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">\"SÃŧrÃŧklÉ vÉ burax\" aktivdir\n\nMini oynadÄącÄą, ekranÄąn istÉnilÉn kÃŧncÃŧnÉ sÃŧrÃŧklÉnÉ bilÉr</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"SÃŧrÃŧklÉ vÉ burax aktivdir
|
||||
|
||||
Miniplayer ekranÄąn istÉnilÉn kÃŧncÃŧnÉ sÃŧrÃŧklÉnÉ bilÉr"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">\"SÃŧrÃŧklÉ vÉ burax\" aktiv deyil</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">ÃfÃŧqi sÃŧrÃŧklÉmÉ jestini aktivlÉÅdir</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">ÃfÃŧqi sÃŧrÃŧklÉmÉ jesti aktivdir\n\nKiçik OynadÄącÄą ekranÄąn soluna vÉ ya saÄÄąna sÃŧrÃŧklÉnÉ bilÉr</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"ÃfÃŧqi sÃŧrÃŧklÉmÉ jesti aktivdir
|
||||
|
||||
Miniplayer ekrandan sola vÉ ya saÄa sÃŧrÃŧklÉnÉ bilÉr"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">ÃfÃŧqi sÃŧrÃŧklÉmÉ jesti qapatÄąldÄą</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">\"BaÄla\" dÃŧymÉsini gizlÉt</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">\"BaÄla\" dÃŧymÉsi gizlidir</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">\"BaÄla\" dÃŧymÉsi gÃļstÉrilir</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">GeniÅlÉndir vÉ baÄla dÃŧymÉlÉrini gizlÉt</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">DÃŧymÉlÉr gizlÉdilib\n\nGeniÅlÉndirmÉk vÉ ya baÄlamaq ÃŧçÃŧn sÃŧrÃŧÅdÃŧr</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"DÃŧymÉlÉr gizlidir
|
||||
|
||||
Açmaq vÉ ya baÄlamaq barmaqla sÃŧrÃŧÅdÃŧrÃŧn"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">GeniÅlÉndir vÉ baÄla dÃŧymÉlÉri gÃļstÉrilir</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Alt mÉtnlÉri gizlÉt</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Alt mÉtnlÉr gizlÉdilir</string>
|
||||
@@ -1065,7 +1130,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">TÉsvir bÃļlgÉ mÉhdudiyyÉtlÉrini ÃļtÃŧr</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">yt4.ggpht.com tÉsvir host-u istifadÉ edilir</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">Orijinal tÉsvir host-u istifadÉ edilir\n\nBunu aktivlÉÅdirmÉ, bÉzi bÃļlgÉlÉrdÉ ÉngÉllÉnÉn, aÄ tÉsvirlÉri dÃŧzÉldÉ bilÉr</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"Orijinal ÅÉkil hostundan istifadÉ
|
||||
|
||||
Bunu aktivlÉÅdirmÉk, bÉzi regionlarda bloklanmÄąÅdÄąrÄąlmÄąÅ itkin ÅÉkillÉri dÃŧzÉldÉ bilÉr"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -1080,7 +1147,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & 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_title">DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow, YouTube videolarÄą ÃŧçÃŧn kÃŧtlÉdÉn alÄąnan kiçik gÃļrÃŧntÃŧlÉr tÉqdim edir. Bu kiçik gÃļrÃŧntÃŧlÉr YouTube tÉrÉfindÉn tÉqdim edilÉnlÉrdÉn daha uyÄun ola bilÉr
|
||||
|
||||
AktivlÉÅdirilÉrsÉ, video URLlÉri API serverinÉ gÃļndÉrilÉcÉk vÉ baÅqa heç bir mÉlumat gÃļndÉrilmÉyÉcÉk. Bir videoda DeArrow kiçik ÅÉkillÉri yoxdursa, onda orijinal vÉ ya hÉrÉkÉtsiz çÉkiliÅlÉr gÃļstÉrilir
|
||||
|
||||
DeArrow haqqÄąnda ÉtraflÄą mÉlumat ÃŧçÃŧn buraya vurun"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">API Élçatan deyilsÉ ani bildiriÅ gÃļstÉr</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">DeArrow Élçatan deyilsÉ bildiriÅ gÃļstÉrilir</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">DeArrow Élçatan deyilsÉ bildiriÅ gÃļstÉrilmir</string>
|
||||
@@ -1119,8 +1191,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Cihaz ÃļlçÃŧlÉrini saxtalaÅdÄąr</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">Cihaz ÃļlçÃŧlÉri saxtalaÅdÄą\n\nDaha yÃŧksÉk video keyfiyyÉtlÉri gÃļstÉrilÉ bilÉr, ancaq video oynatma donmalarÄą, daha pis batareya istismarÄą vÉ bilinmÉyÉn yan tÉsirlÉri gÃļrÉ bilÉrsiniz</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Cihaz ÃļlçÃŧlÉri saxtalaÅmÄąr\n\nBunu aktivlÉÅdirmÉ, daha yÃŧksÉk video keyfiyyÉtlÉrinin olmasÄąn tÉmin edÉ bilir</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"Cihaz ÃļlçÃŧlÉri saxtalaÅdÄąrÄąldÄą
|
||||
|
||||
YÃŧksÉk video keyfiyyÉtlÉr gÃļrÃŧnÉ bilÉr, ancaq videonun oynadÄąlmasÄąnda qÄąrÄąlma, daha pis batareya ÃļmrÃŧ vÉ bilinmÉyÉn yan tÉsirlÉri sezÉ bilÉrsiniz"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"Cihaz ÃļlçÃŧlÉri saxtalaÅdÄąrÄąlmayÄąb
|
||||
|
||||
Bunu aktivlÉÅdirmÉ daha yÃŧksÉk video keyfiyyÉtlÉri ÉngÉlin silÉ bilÉr"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Bunu aktivlÉÅdirmÉ, video oynatma donmalarÄąna, daha pis batareya istismarÄąna vÉ bilinmÉyÉn yan tÉsirlÉrÉ sÉbÉb ola bilÉr.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1147,6 +1223,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_on">ToxunuÅ Éks-ÉlaqÉsi baÄlandÄą</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">ToxunuÅ Éks-ÉlaqÉsi aktivdir</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">Orijinal sÉsi tÉlÉb et</string>
|
||||
<string name="revanced_force_original_audio_summary_on">Orijinal sÉs istifadÉsi</string>
|
||||
<string name="revanced_force_original_audio_summary_off">İlkin sÉs istifadÉsi</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Avtomatik</string>
|
||||
@@ -1170,8 +1251,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_speed_menu_summary_off">FÉrdi sÃŧrÉt menyusu gÃļstÉrilmir</string>
|
||||
<string name="revanced_custom_playback_speeds_title">FÉrdi oynatma sÃŧrÉti</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">FÉrdi oynatma sÃŧrÉtlÉrini ÉlavÉ et vÉ ya dÉyiÅ</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">FÉrdi sÃŧrÉtlÉr %s-dÉn az olmalÄądÄąr. Standart dÉyÉrlÉr istifadÉsi.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">EtibarsÄąz oynatma sÃŧrÉtlÉri. Standartlar istifadÉdÉdir.</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">FÉrdi sÃŧrÉtlÉr %s dÉyÉrindÉn az olmalÄądÄąr</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">FÉrdi oynatma sÃŧrÉtlÉri etibarsÄązdÄąr</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Avtomatik</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1196,18 +1277,78 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_video_streams_screen_summary">Oynatma problemlÉrin ÃļnlÉmÉk ÃŧçÃŧn qÉbuledici video yayÄąmlarÄąn saxtalaÅdÄąr</string>
|
||||
<string name="revanced_spoof_video_streams_title">Video yayÄąmlarÄą saxtalaÅdÄąr</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">Video yayÄąmlarÄą saxtalaÅdÄąrÄąlÄąr</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">Video yayÄąmlarÄą saxtalaÅmÄąr\n\nVideo oynatma iÅlÉmÉyÉ bilÉr</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"Video yayÄąmlar saxtalaÅdÄąrÄąlmÄąr
|
||||
|
||||
Video oynatma iÅlÉmÉyÉ bilÉr"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">Bu seçimi baÄlamaq, video oynatma problemlÉrinÉ sÉbÉb olar.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">İlkin qÉbuledici</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">MÉcburi AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodlaÅdÄąrma: AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodlaÅdÄąrma / VP9 vÉ ya AV1</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">CihazÄąnÄązÄąn VP9 hardware decoding\'i yoxdur vÉ bu seçim, \"QÉbuledicini saxtalaÅdÄąrma\" aktivlÉÅdikdÉ hÉmiÅÉlikdir</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">Bunu aktivlÉÅdirmÉ batareya ÃļmrÃŧnÃŧ yaxÅÄąlaÅdÄąra vÉ oynatma donmasÄąnÄą dÃŧzÉldÉ bilÉr.\n\nAVC maksimum 1080p gÃļrÃŧntÃŧ imkanÄąna malikdir vÉ video oynadÄąlmasÄą VP9 vÉ ya AV1-dÉn daha çox internet mÉlumatÄą istifadÉ edÉcÉk.</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">Video kodlama AVC (H.264) -yÉ mÉcbur edilir</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">Video kodlama birbaÅa yoxlanÄąlÄąr</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Bunu fÉallaÅdÄąrma, batareya ÃļmrÃŧnÃŧ yaxÅÄąlaÅdÄąra vÉ oxutma iliÅmÉlÉrini dÃŧzÉldÉ bilÉr.
|
||||
|
||||
AVC-nin maksimum dÉqiqliyi 1080p-dir, Opus sÉs kodek Élçatan deyil vÉ video oxutma, VP9 vÉ ya AV1-dÉn daha çox internet datasÄą istifadÉ edÉcÉk."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS saxtakarlÄąÄÄą yan tÉsirlÉri</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">âĸ ÅÉxsi uÅaq videolarÄą oynadÄąlmaya bilÉr\nâĸ CanlÄą yayÄąmlar baÅdan baÅlayÄąr\nâĸ Videolar 1 saniyÉ tez bitÉ bilÉr\nâĸ Opus sÉs kodlama yoxdur</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"âĻ XÃŧsusi uÅaq videolarÄą bÉlkÉ dÉ oynanÄąlmaya bilÉr
|
||||
âĻ Videolar 1 saniyÉ tez bitir"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR saxtakarlÄąÄÄą yan tÉsirlÉri</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">âĸ UÅaq videolarÄą oynadÄąlmaya bilÉr\nâĸ SÉs treki menyusu Éskikdir\nâĸ Sabit sÉs hÉcmi Élçatan deyil</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"âĸ UÅaq videolarÄą oxudulmaya bilÉr
|
||||
âĸ CanlÄą yayÄąmlar baÅdan baÅlayÄąr
|
||||
âĸ Videolar 1 saniyÉ tez bitir"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">İlkin sÉs yayÄąmÄą dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">TÉtbiq dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">ÆrÉbcÉ</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">AzÉrbaycanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">Bolqarca</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">Benqalca</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">Katalanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">ÃexcÉ</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">Danimarka dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">Almanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">Yunanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">İngiliscÉ</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">İspanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">Estonca</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">Farsca</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">FincÉ</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">FransÄązca</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">QÃŧcÉrat dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">HindcÉ</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">Xorvatca</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">Macarca</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">İndoneziya dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">İtalyanca</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Yaponca</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">Qazaxca</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">Koreyaca</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">Litvaca</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">Letonca</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">Makedon Dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">Monqolca</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">Marathi dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">Malay dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">Birman dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">Hollandca</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">Oriya dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">PÉncabca</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">Polyak dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">Portuqalca (Braziliya)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">Portuqalca (PortÉgiz)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">RumÄąnca</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Rusca</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">Slovak dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">Sloven dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">SerbcÉ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">İsveçcÉ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">Suahili dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">TamilcÉ</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">Teluquca</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">Tay dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">TÃŧrkcÉ</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">Ukrayna dili</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">Urduca</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">Vyetnamca</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">ÃincÉ</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1217,8 +1358,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">SÉsli reklamlar bloklanmayÄąb</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s ÉlçatmazdÄąr. Reklamlar gÃļrÃŧnÉ bilÉr. SeçimlÉrdÉ baÅqa reklam bloku xidmÉtinÉ keçirmÉyÉ cÉhd et.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s serveri xÉta sorÄusu verdi. Reklam gÃļrÃŧnÉ bilÉr. SeçimlÉrdÉ baÅqa reklam bloku xidmÉtinÉ keçir.</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s ÉlçatmazdÄąr, reklamlar gÃļstÉrilÉ bilÉr. Ayarlarda reklam ÉngÉllÉmÉ xidmÉtini dÉyiÅdirmÉyÉ Ã§alÄąÅÄąn.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s bir xÉta qaytardÄą, reklamlar gÃļstÉrilÉ bilÉr. Ayarlarda reklam ÉngÉllÉmÉ xidmÉtini dÉyiÅdirmÉyÉ Ã§alÄąÅÄąn.</string>
|
||||
<string name="revanced_block_embedded_ads_title">YerlÉÅdirilÉn video reklamlarÄąnÄą ÉngÉllÉ</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">Qeyri-aktiv edildi</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">DÉqiq proksi</string>
|
||||
|
||||
@@ -1,40 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">\"ĐŅавŅдСĐĩĐŊĐŊĐĩ ĐŋŅавĐĩŅĐēŅ Đ°ŅŅŅĐžĐ´Đ´ĐˇŅ ĐŊĐĩ ŅдаĐģĐžŅŅ\"</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">\"ĐĐ´ĐēŅŅŅŅ Đ°ŅŅŅŅĐšĐŊŅ Đ˛ŅĐą-ŅаКŅ\"</string>
|
||||
<string name="revanced_check_environment_dialog_ignore_button">ĐĐŗĐŊаŅаваŅŅ</string>
|
||||
<string name="revanced_check_environment_failed_message"><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_title">ReVanced</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">ĐŅ Ņ
ĐžŅаŅĐĩ ĐŋŅаŅŅĐŗĐŊŅŅŅ?</string>
|
||||
<string name="revanced_settings_reset">ĐĄĐēŅĐŊŅŅŅ</string>
|
||||
<string name="revanced_settings_restart_title">ĐĐąĐŊавŅŅĐĩ Ņ ĐŋĐĩŅĐ°ĐˇĐ°ĐŗŅŅСŅŅĐĩ</string>
|
||||
@@ -58,9 +57,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore ĐŊĐĩ ŅŅŅаĐģŅваĐŊŅ. ĐŖŅŅаĐģŅĐšŅĐĩ ŅĐŗĐž.</string>
|
||||
<string name="gms_core_dialog_title">ĐаŅŅайŅĐĩŅŅа дСĐĩŅĐŊĐŊĐĩ</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore ĐŊĐĩ ĐŧаĐĩ даСвОĐģŅ ĐŊа ĐŋŅаŅŅ Ņ ŅĐžĐŊавŅĐŧ ŅŅĐļŅĐŧĐĩ.\n\nĐŅĐēĐžĐŊваКŅĐĩ ŅĐŊŅŅŅŅĐēŅŅŅ \"ĐĐĩ СайŅваКŅĐĩ ĐŧĐ°Ņ ĐŋŅĐ°ĐŗŅаĐŧŅ\" Đ´ĐģŅ Đ˛Đ°ŅĐ°ĐŗĐ° ŅŅĐģĐĩŅĐžĐŊа Ņ ĐŋŅŅĐŧŅĐŊŅŅĐĩ ŅĐŊŅŅŅŅĐēŅŅŅ Đ´Đ° ŅŅŅаĐŊĐžŅĐēŅ MicroG.\n\nĐŅŅа ĐŋаŅŅайŅĐĩŅŅа Đ´ĐģŅ ĐŋŅŅĐēĐģадаĐŊĐŊĐĩ Đ´ĐģŅ ĐŋŅаŅŅ.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore ĐŊĐĩ ĐŧаĐĩ даСвОĐģŅ ĐŊа ĐŋŅаŅŅ Ņ ŅĐžĐŊавŅĐŧ ŅŅĐļŅĐŧĐĩ.
|
||||
|
||||
ĐŅĐēĐžĐŊваКŅĐĩ ŅĐŊŅŅŅŅĐēŅŅŅ \"ĐĐĩ СайŅваК ĐŧĐ°Ņ ĐŋŅŅĐēĐģадаĐŊĐŊĐĩ\" Đ´ĐģŅ Đ˛Đ°ŅĐ°ĐŗĐ° ŅŅĐģĐĩŅĐžĐŊа Ņ ĐŋŅŅĐŧŅĐŊŅŅĐĩ ŅŅ
да ваŅаК ŅŅŅаĐŊĐžŅĐēŅ MicroG.
|
||||
|
||||
ĐŅŅа ĐŊĐĩайŅ
ОдĐŊа Đ´ĐģŅ ĐŋŅаŅŅ ĐŋŅŅĐēĐģадаĐŊĐŊŅ."</string>
|
||||
<string name="gms_core_dialog_open_website_text">ĐĐ´ĐēŅŅŅŅ ŅаКŅ</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">ĐĐŋŅŅĐŧŅСаŅŅŅ ĐąĐ°ŅаŅŅŅ MicroG GmsCore ĐŋавŅĐŊĐŊа ĐąŅŅŅ Đ°Đ´ĐēĐģŅŅаĐŊа, Đēай ĐŋŅадŅŅ
ŅĐģŅŅŅ ĐŋŅайĐģĐĩĐŧŅ.\n\nĐаŅŅŅĐŊŅŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐŅаŅŅĐŗĐŊŅŅŅ\" Ņ Đ°Đ´ĐēĐģŅŅŅŅĐĩ аĐŋŅŅĐŧŅСаŅŅŅ ĐąĐ°ŅаŅŅŅ.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"ĐĐĩайŅ
ОдĐŊа адĐēĐģŅŅŅŅŅ Đ°ĐŋŅŅĐŧŅСаŅŅŅ ĐąĐ°ŅаŅŅŅ Đ´ĐģŅ MicroG GmsCore, Đēай ĐŋаСйĐĩĐŗĐŊŅŅŅ ĐŋŅайĐģĐĩĐŧ.
|
||||
|
||||
ĐĐ´ĐēĐģŅŅŅĐŊĐŊĐĩ аĐŋŅŅĐŧŅСаŅŅŅ ĐąĐ°ŅаŅŅŅ Đ´ĐģŅ MicroG ĐŊĐĩ ĐŋаŅĐŋĐģŅваĐĩ ĐŊа вŅĐēаŅŅŅŅаĐŊĐŊĐĩ йаŅаŅŅŅ.
|
||||
|
||||
ĐаŅŅŅĐŊŅŅĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐŅаŅŅĐŗĐŊŅŅŅ\" Ņ Đ´Đ°ĐˇĐ˛ĐžĐģŅŅĐĩ СĐŧŅĐŊŅŅŅ Đ°ĐŋŅŅĐŧŅСаŅŅŅ."</string>
|
||||
<string name="gms_core_dialog_continue_text">ĐŅаŅŅĐŗĐŊŅŅŅ</string>
|
||||
</patch>
|
||||
</app>
|
||||
@@ -72,12 +79,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_settings_screen_03_feed_title">ĐаŅĐŧŅŅŅ</string>
|
||||
<string name="revanced_settings_screen_04_player_title">ĐŅĐģĐĩŅ</string>
|
||||
<string name="revanced_settings_screen_05_general_title">ĐĐĩĐŊĐĩŅаĐģŅĐŊĐ°Ņ ĐŋĐģаĐŊŅŅĐžŅĐēа</string>
|
||||
<string name="revanced_settings_screen_06_shorts_title">Shorts</string>
|
||||
<string name="revanced_settings_screen_07_seekbar_title">ĐаĐŊŅĐģŅ ĐŋĐžŅŅĐēŅ</string>
|
||||
<string name="revanced_settings_screen_08_swipe_controls_title">ĐĐģĐĩĐŧĐĩĐŊŅŅ ĐēŅŅаваĐŊĐŊŅ ĐŋаĐģŅŅаĐŧ</string>
|
||||
<string name="revanced_settings_screen_11_misc_title">РОСĐŊаĐĩ</string>
|
||||
<string name="revanced_settings_screen_12_video_title">ĐŅĐ´Ņа</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">ĐĐ´ĐēĐģŅŅŅŅŅ ĐŋŅĐ°ĐšĐŗŅаваĐŊĐŊĐĩ Shorts Ņ ŅĐžĐŊавŅĐŧ</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_on">ĐŅĐ°ĐšĐŗŅаваĐŊĐŊĐĩ Shorts Ņ ŅĐžĐŊавŅĐŧ адĐēĐģŅŅаĐŊа</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_off">ФОĐŊОвŅĐš ĐŋĐģĐĩĐšĐģиŅŅ Shorts вĐēĐģŅŅĐĩĐŊ</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_screen_title">ĐĐ´ĐģадĐēа</string>
|
||||
@@ -94,10 +105,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">ĐаĐēаСаŅŅ ŅĐžŅŅ ĐŋŅŅ ĐŋаĐŧŅĐģŅŅ ReVanced</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">ĐĸĐžŅŅ ĐŋаĐēаСваĐĩŅŅа, ĐēаĐģŅ ŅСĐŊŅĐēаĐĩ ĐŋаĐŧŅĐģĐēа</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">ĐĸĐžŅŅ ĐŊĐĩ ĐŋаĐēаСваĐĩŅŅа, ĐēаĐģŅ ŅСĐŊŅĐēаĐĩ ĐŋаĐŧŅĐģĐēа</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">ĐĐ´ĐēĐģŅŅŅĐŊĐŊĐĩ аĐŋавŅŅŅŅĐŊĐŊŅŅ ĐŋŅа ĐŋаĐŧŅĐģĐēŅ ŅŅ
аваĐĩ ŅŅĐĩ аĐŋавŅŅŅŅĐŊĐŊŅ Đ°Đą ĐŋаĐŧŅĐģĐēаŅ
ReVanced.\n\nĐŅ ĐŊĐĩ ĐąŅдСĐĩŅĐĩ аŅŅŅĐŧĐģŅваŅŅ Đ°ĐŋавŅŅŅŅĐŊĐŊŅ Đ°Đą ĐŊĐĩĐŋŅадйаŅаĐŊŅŅ
ĐŋадСĐĩŅŅ
.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"ĐĐ´ĐēĐģŅŅŅĐŊĐŊĐĩ ĐŋавĐĩдаĐŧĐģĐĩĐŊĐŊŅŅ ĐŋŅа ĐŋаĐŧŅĐģĐēŅ ŅŅ
аваĐĩ ŅŅĐĩ аĐŋавŅŅŅŅĐŊĐŊŅ ReVanced ĐŋŅа ĐŋаĐŧŅĐģĐēŅ.
|
||||
|
||||
ĐŅ ĐŊĐĩ ĐąŅдСĐĩŅĐĩ аŅŅŅĐŧĐģŅваŅŅ Đ°ĐŋавŅŅŅŅĐŊĐŊŅ ĐŋŅа ĐŊĐĩŅаĐēаĐŊŅŅ ĐŋадСĐĩŅ."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">ĐĐ´ĐēĐģŅŅŅŅŅ ŅвŅŅŅĐŊĐŊĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐадайаĐĩŅŅа\" / \"ĐадĐŋŅŅаŅŅа\".</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_title">ĐĐ´ĐēĐģŅŅŅŅŅ ŅвŅŅŅĐŊĐŊĐĩ ĐēĐŊĐžĐŋĐēŅ \"ĐадайаĐĩŅŅа\" / \"ĐадĐŋŅŅаŅŅа\"</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">ĐĐŊĐžĐŋĐēа \"ĐадайаĐĩŅŅа\" Ņ \"ĐадĐŋŅŅаŅŅа\" ĐŊĐĩ ĐąŅĐ´ŅŅŅ ŅвŅŅŅŅŅа ĐŋŅŅ ĐˇĐŗĐ°Đ´Đ˛Đ°ĐŊĐŊŅ</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">ĐĐŊĐžĐŋĐēа \"ĐадайаĐĩŅŅа\" Ņ \"ĐадĐŋŅŅаŅŅа\" ĐąŅĐ´ŅŅŅ ŅвŅŅŅŅŅа ĐŋŅŅ ĐˇĐŗĐ°Đ´Đ˛Đ°ĐŊĐŊŅ</string>
|
||||
<string name="revanced_hide_album_cards_title">ĐĄŅ
аваŅŅ ĐēаŅŅŅ Đ°ĐģŅйОĐŧа</string>
|
||||
@@ -113,7 +126,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">ĐадСŅĐŊŅ ĐˇĐŊаĐē ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">ĐаĐēаСаĐŊŅ Đ˛Đ°Đ´ĐˇŅĐŊŅ ĐˇĐŊаĐē</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">ĐĄŅ
аваКŅĐĩ ĐŗĐ°ŅŅСаĐŊŅаĐģŅĐŊŅŅ ĐŋаĐģŅŅŅ</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">ĐаĐģŅŅŅ ŅŅ
аваĐŊŅ, ĐŊаĐŋŅŅĐēĐģад:\nâĸ ĐĐŋĐžŅĐŊŅŅ ĐŊавŅĐŊŅ\nâĸ ĐŅаŅŅĐŗĐ˛Đ°ĐšŅĐĩ ĐŋŅĐ°ĐŗĐģŅĐ´\nâĸ ĐаŅĐģĐĩĐ´ŅĐšŅĐĩ ŅĐŊŅŅŅ ĐēаĐŊаĐģŅ\nâĸ ĐаĐēŅĐŋĐēŅ\nâĸ ĐĐģŅдСŅŅĐĩ ŅŅŅŅ ŅаС</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"ĐĄŅ
аваĐŊŅ ĐŋаĐģŅŅŅ, ŅаĐēŅŅ ŅĐē:
|
||||
âĸ ĐавŅĐŊŅ
|
||||
âĸ ĐŅаŅŅĐŗ ĐŋŅĐ°ĐŗĐģŅĐ´Ņ
|
||||
âĸ ĐавĐĩдаКŅĐĩŅŅ ĐąĐžĐģŅŅ ĐŋŅа ĐēаĐŊаĐģŅ
|
||||
âĸ ĐаĐēŅĐŋĐēŅ
|
||||
âĸ ĐĐ°ĐŗĐģŅдСĐĩŅŅ ŅŅŅŅ ŅаС"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">ĐаĐēаСаĐŊŅ ĐŋаĐģŅŅŅ</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -141,9 +159,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_timed_reactions_title">ĐĄŅ
аваŅŅ ŅŅаĐēŅŅŅ Đŋа ŅаŅĐĩ</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">ЧаŅОвŅŅ ŅŅаĐēŅŅŅ ŅŅ
аваĐŊŅŅ</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">ĐаĐēаСваŅŅŅа ŅŅаĐēŅŅŅ Đŋа ŅаŅĐĩ</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_title">ĐĄŅ
аваŅŅ ĐˇĐ°ĐŗĐ°ĐģОваĐē ĐŋаĐģŅŅŅ Đˇ вŅĐŊŅĐēаĐŧŅ ĐŋĐžŅŅĐēŅ</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_on">ĐĐ°ĐŗĐ°ĐģОваĐē ĐŋаĐģŅŅŅ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_off">ĐаĐēаСаĐŊŅ ĐˇĐ°ĐŗĐ°ĐģОваĐē ĐŋаĐģŅŅŅ</string>
|
||||
<string name="revanced_hide_channel_guidelines_title">ĐĄŅ
аваŅŅ ŅŅĐēаĐŧĐĩĐŊдаŅŅŅ ĐēаĐŊаĐģа</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_on">ĐŅавŅĐģŅ ĐēаĐŊаĐģа ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_off">ĐаĐēаСваŅŅŅа ŅĐŊŅŅŅŅĐēŅŅŅ Đŋа ĐēаĐŊаĐģаŅ
</string>
|
||||
@@ -210,7 +225,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_attributes_section_title">ĐĄŅ
аваŅŅ ŅаСдСĐĩĐģ аŅŅŅĐąŅŅаŅ</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">РаСдСĐĩĐģŅ \"ĐŅĐąŅаĐŊŅŅ ĐŧĐĩŅŅŅ\", ĐŗŅĐģŅĐŊŅ Ņ ĐŧŅСŅĐēа ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">ĐаĐēаСваŅŅŅа ŅаСдСĐĩĐģŅ \"ĐŅĐąŅаĐŊŅŅ ĐŧĐĩŅŅŅ\", ĐŅĐģŅĐŊŅ Ņ ĐŅСŅĐēа</string>
|
||||
<string name="revanced_hide_chapters_section_title">ĐĄŅ
аваŅŅ ŅаСдСĐĩĐģ \"РаСдСĐĩĐģŅ\".</string>
|
||||
<string name="revanced_hide_chapters_section_title">ĐĄŅ
аваŅŅ ŅаСдСĐĩĐģ \"РаСдСĐĩĐģŅ\"</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">РаСдСĐĩĐģ ŅаСдСĐĩĐģĐ°Ņ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">ĐаĐēаСваĐĩŅŅа ŅаСдСĐĩĐģ ŅаСдСĐĩĐģаŅ</string>
|
||||
<string name="revanced_hide_podcast_section_title">ĐĄŅ
аваŅŅ ŅаСдСĐĩĐģ \"ĐаŅĐģĐĩдаваŅŅ ĐŋадĐēаŅŅ\"</string>
|
||||
@@ -240,12 +255,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">ĐаĐēаСаĐŊа Ņ ĐˇĐ˛ŅСаĐŊŅŅ
вŅĐ´Ņа</string>
|
||||
<string name="revanced_comments_screen_title">ĐаĐŧĐĩĐŊŅаŅŅŅ</string>
|
||||
<string name="revanced_comments_screen_summary">ĐĄŅ
аваŅŅ Đ°ĐąĐž ĐŋаĐēаСаŅŅ ĐēаĐŧĐŋаĐŊĐĩĐŊŅŅ ŅаСдСĐĩĐģа ĐēаĐŧĐĩĐŊŅаŅŅŅŅ</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">ĐĄŅ
аваŅŅ \"ĐвОдĐēа ŅаŅа\" </string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">ÂĢĐĐŗĐģŅĐ´ ŅаŅаÂģ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">ÂĢĐĐŗĐģŅĐ´ ŅаŅаÂģ ĐŋаĐēаСаĐŊŅ</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">ĐĄŅ
аваŅŅ ĐˇĐ°ĐŗĐ°ĐģОваĐē \"ĐаĐŧĐĩĐŊŅаŅŅŅ ŅдСĐĩĐģŅĐŊŅĐēаŅ\"</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">ĐĐ°ĐŗĐ°ĐģОваĐē \"ĐаĐŧĐĩĐŊŅаŅŅŅ ŅдСĐĩĐģŅĐŊŅĐēаŅ\" ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">ĐаĐēаСаĐŊŅ ĐˇĐ°ĐŗĐ°ĐģОваĐē \"ĐаĐŧĐĩĐŊŅаŅŅŅ ŅдСĐĩĐģŅĐŊŅĐēаŅ\"</string>
|
||||
<string name="revanced_hide_comments_section_title">ĐĄŅ
аваŅŅ ŅаСдСĐĩĐģ ĐēаĐŧĐĩĐŊŅаŅŅŅŅ</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">РаСдСĐĩĐģ ĐēаĐŧĐĩĐŊŅаŅŅŅŅ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">ĐаĐēаСваĐĩŅŅа ŅаСдСĐĩĐģ ĐēаĐŧĐĩĐŊŅаŅŅŅŅ</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐĄŅвОŅиŅŅ Short\"</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐĄŅвОŅиŅŅ Short\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">ĐĐŊĐžĐŋĐēа \"ĐĄŅвОŅиŅŅ Short\" ĐŋаĐēаСаĐŊа</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">ĐĄŅ
аваŅŅ ĐēаĐŧĐĩĐŊŅаŅŅĐš Đ´ĐģŅ ĐŋаĐŋŅŅŅĐ´ĐŊŅĐŗĐ° ĐŋŅĐ°ĐŗĐģŅĐ´Ņ</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">ĐаĐŧĐĩĐŊŅаŅŅĐš ĐŋĐĩŅад ĐŋŅĐ°ĐŗĐģŅдаĐŧ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">ĐаĐēаСваĐĩŅŅа ĐŋаĐŋŅŅŅĐ´ĐŊŅ ĐŋŅĐ°ĐŗĐģŅĐ´ ĐēаĐŧĐĩĐŊŅаŅŅŅ</string>
|
||||
@@ -256,6 +277,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">ĐĐŊĐžĐŋĐēŅ ĐŧĐĩŅĐēŅ ŅаŅŅ Ņ ŅĐŧĐžĐ´ĐˇŅ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">ĐаĐēаСваŅŅŅа ĐēĐŊĐžĐŋĐēŅ ĐŧĐĩŅĐēŅ ŅаŅŅ Ņ ŅĐŧОдСŅ</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">ĐĄŅ
аваŅŅ YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Doodles Ņ ĐŋаĐŊŅĐģŅ ĐŋĐžŅŅĐēŅ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Doodles Ņ ĐŋаĐŊŅĐģŅ ĐŋĐžŅŅĐēŅ ĐŋаĐēаСаĐŊŅ</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"Doodles Đŋа YouTube ĐŋаĐēаСваŅŅŅа ĐŊĐĩĐēаĐģŅĐēŅ Đ´ĐˇŅĐŊ Ņ ĐŗĐžĐ´.
|
||||
|
||||
ĐаĐģŅ Doodle СаŅаС ĐŋаĐēаСваĐĩŅŅа Ņ Đ˛Đ°ŅŅĐŧ ŅŅĐŗŅŅĐŊĐĩ Ņ ĐŗŅŅŅ ĐŋаŅаĐŧĐĩŅŅ ŅŅ
аваĐŊŅ, ĐŋаĐŊŅĐģŅ ŅŅĐģŅŅŅĐ°Ņ ĐŊŅĐļŅĐš ŅадĐēа ĐŋĐžŅŅĐēŅ ŅаĐēŅаĐŧа ĐąŅдСĐĩ ŅŅ
аваĐŊа."</string>
|
||||
<string name="revanced_custom_filter_screen_title">ĐаŅŅŅŅаĐģŅĐŊŅŅĐēŅ ŅŅĐģŅŅŅ</string>
|
||||
<string name="revanced_custom_filter_screen_summary">ĐĄŅ
аваКŅĐĩ ĐēаĐŧĐŋаĐŊĐĩĐŊŅŅ Đˇ даĐŋаĐŧĐžĐŗĐ°Đš ĐēаŅŅŅŅаŅĐēŅŅ
ŅŅĐģŅŅŅаŅ</string>
|
||||
<string name="revanced_custom_filter_title">ĐŖĐēĐģŅŅŅŅŅ ĐēаŅŅŅŅаĐģŅĐŊŅŅĐēŅ ŅŅĐģŅŅŅ</string>
|
||||
@@ -279,16 +306,36 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">ĐĐģŅŅавŅŅ ŅĐģОвŅ, ŅĐēŅŅ ŅŅŅйа ŅŅ
аваŅŅ</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"ĐĐģŅŅавŅŅ ŅĐģĐžĐ˛Ņ Ņ ŅŅĐ°ĐˇŅ Đ´ĐģŅ ŅŅ
аваĐŊĐŊŅ, ĐŋадСĐĩĐģĐĩĐŊŅŅ ĐŋĐĩŅаŅ
ОдаĐŧŅ ĐŊа ĐŊОвŅŅ ŅадОĐē
|
||||
|
||||
ĐĐģŅŅавŅŅ ŅĐģĐžĐ˛Ņ ĐŧĐžĐŗŅŅŅ ĐąŅŅŅ ĐŊаСваĐŧŅ ĐēаĐŊаĐģĐ°Ņ Đ°ĐąĐž ĐģŅĐąŅĐŧ ŅŅĐēŅŅаĐŧ, ŅĐēŅ ĐŋаĐēаСаĐŊŅ Ņ ĐŊаСваŅ
вŅĐ´Ņа
|
||||
|
||||
ĐĄĐģĐžĐ˛Ņ Đˇ вŅĐģŅĐēŅĐŧŅ ĐģŅŅаŅаĐŧŅ ĐŋаŅŅŅŅдСŅĐŊĐĩ ĐŋавŅĐŊĐŊŅ ŅвОдСŅŅŅа С вŅĐģŅĐēаК ĐģŅŅаŅŅ (ĐŊаĐŋŅŅĐēĐģад: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">ĐĐą ŅŅĐģŅŅŅаŅŅŅ ĐēĐģŅŅавŅŅ
ŅĐģĐžŅ</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"ĐŅĐŊŅĐēŅ Đ´ĐžĐŧа/ĐŋадĐŋŅŅĐēŅ/ĐŋĐžŅŅĐēŅ ŅŅĐģŅŅŅŅŅŅŅа, Đēай ŅŅ
аваŅŅ ĐˇĐŧĐĩŅŅ, ŅĐēŅ Đ°Đ´ĐŋавŅдаĐĩ ĐēĐģŅŅавŅĐŧ ŅĐģОваĐŧ Ņ ŅŅаСаĐŧ
|
||||
|
||||
ĐĐąĐŧĐĩĐļаваĐŊĐŊŅ
|
||||
âĸ Shorts ĐŊĐĩĐģŅĐŗĐ° ŅŅ
аваŅŅ Đŋа ĐŊаСвĐĩ ĐēаĐŊаĐģа
|
||||
âĸ ĐĐĩĐēаŅĐžŅŅŅ ŅĐģĐĩĐŧĐĩĐŊŅŅ ŅĐŊŅŅŅŅĐĩĐšŅŅ ĐŧĐžĐŗŅŅŅ ĐŊĐĩ ĐąŅŅŅ ŅŅ
аваĐŊŅ
|
||||
âĸ ĐĐžŅŅĐē Đŋа ĐēĐģŅŅавŅĐŧ ŅĐģОвĐĩ ĐŧĐžĐļа ĐŊĐĩ ĐŋаĐēаСаŅŅ Đ˛ŅĐŊŅĐēŅ"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">ĐĄŅĐŋадСĐĩĐŊĐŊĐĩ ŅŅĐģŅŅ
ŅĐģĐžŅ</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">ĐаĐģŅ Đ˛Ņ Đ°Ņ
ŅĐŊĐĩŅĐĩ ĐēĐģŅŅавОĐĩ ŅĐģОва айО ŅŅĐ°ĐˇŅ Ņ Đ´Đ˛ŅŅ
ŅаСОвŅŅ ĐģаĐŋĐēŅ, ĐŗŅŅа ĐŋĐĩŅаŅĐēОдСŅŅŅ ŅаŅŅĐēОваĐŧŅ ŅŅĐŋадСĐĩĐŊĐŊŅ ĐŊĐ°ĐˇĐ˛Đ°Ņ Đ˛ŅĐ´Ņа Ņ ĐēаĐŊаĐģаŅ<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 +349,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_products_banner_title">ĐĄŅ
аваŅŅ ĐąĐ°ĐŊĐĩŅ Đ´ĐģŅ ĐŋŅĐ°ĐŗĐģŅĐ´Ņ ĐŋŅадŅĐēŅаŅ</string>
|
||||
<string name="revanced_hide_products_banner_summary_on">ĐаĐŊŅŅ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_products_banner_summary_off">ĐаĐēаСваĐĩŅŅа йаĐŊŅŅ</string>
|
||||
<string name="revanced_hide_player_store_shelf_title">ĐĄŅ
аваŅŅ ĐŋĐžĐģĐēŅ ĐēŅаĐŧŅ ĐŋŅĐ°ĐšĐŗŅаваĐģŅĐŊŅĐēа</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">ĐаĐģŅŅа ĐēŅаĐŧŅ ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">ĐаĐģŅŅа ĐēŅаĐŧŅ ĐŋаĐēаСаĐŊа</string>
|
||||
<string name="revanced_hide_shopping_links_title">ĐĄŅ
аваŅŅ ŅĐŋаŅŅĐģĐēŅ ĐŊа ĐŋаĐēŅĐŋĐēŅ Ņ Đ°ĐŋŅŅаĐŊĐŊŅ Đ˛ŅĐ´Ņа</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">ĐĄĐŋаŅŅĐģĐēŅ ĐŊа ĐŋаĐēŅĐŋĐēŅ ŅŅ
аваĐŊŅŅ</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">ĐаĐēаСваŅŅŅа ŅĐŋаŅŅĐģĐēŅ ĐŊа ĐŋаĐēŅĐŋĐēŅ</string>
|
||||
@@ -375,7 +425,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_swipe_volume_title">ĐŖĐēĐģŅŅŅŅŅ ĐļŅŅŅ ĐŗŅŅĐŊаŅŅŅ</string>
|
||||
<string name="revanced_swipe_volume_summary_on">ĐŅавŅдСĐĩĐŊĐŊĐĩ ĐŋаĐģŅŅаĐŧ Đŋа ĐŗŅŅĐŊаŅŅŅ ŅĐēĐģŅŅаĐŊа</string>
|
||||
<string name="revanced_swipe_volume_summary_off">ĐŅавŅдСĐĩĐŊĐŊĐĩ ĐŋаĐģŅŅаĐŧ Đŋа ĐŗŅŅĐŊаŅŅŅ Đ°Đ´ĐēĐģŅŅаĐŊа</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">ĐŖĐēĐģŅŅŅŅŅ ĐļŅŅŅ \"ĐŊаŅŅŅĐēаĐŊĐŊĐĩ Đ´ĐģŅ ĐŋŅавŅдСĐĩĐŊĐŊŅ ĐŋаĐģŅŅаĐŧ\".</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">ĐŖĐēĐģŅŅŅŅŅ ĐļŅŅŅ \"ĐŊаŅŅŅĐēаĐŊĐŊĐĩ Đ´ĐģŅ ĐŋŅавŅдСĐĩĐŊĐŊŅ ĐŋаĐģŅŅаĐŧ\"</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">ĐŅавŅдСĐĩĐŊĐŊĐĩ ĐŋаĐģŅŅаĐŧ ŅĐēĐģŅŅаĐŊа</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">ĐŅавŅдСĐĩĐŊĐŊĐĩ ĐŋаĐģŅŅаĐŧ адĐēĐģŅŅаĐŊа</string>
|
||||
<string name="revanced_swipe_haptic_feedback_title">ĐŖĐēĐģŅŅŅŅŅ ŅаĐēŅŅĐģŅĐŊŅŅ ĐˇĐ˛Đ°ŅĐžŅĐŊŅŅ ŅŅвŅСŅ</string>
|
||||
@@ -405,22 +455,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">ĐĐŊĐžĐŋĐēŅ Đ´ĐˇĐĩŅĐŊĐŊŅŅ</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">ĐĄŅ
аваŅŅ Đ°ĐąĐž ĐŋаĐēаСаŅŅ ĐēĐŊĐžĐŋĐēŅ Đŋад вŅĐ´Ņа</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">ĐĄŅ
аваŅŅ \"ĐадайаĐĩŅŅа\" Ņ \"ĐĐĩ ĐŋадайаĐĩŅŅа\".</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">ĐĄŅ
аваŅŅ \"ĐадайаĐĩŅŅа\" Ņ \"ĐĐĩ ĐŋадайаĐĩŅŅа\"</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">ĐĐŊĐžĐŋĐēŅ \"ĐадайаĐĩŅŅа\" Ņ \"ĐĐĩ ĐŋадайаĐĩŅŅа\" ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">ĐаĐēаСваŅŅŅа ĐēĐŊĐžĐŋĐēŅ \"ĐадайаĐĩŅŅа\" Ņ \"ĐĐĩ ĐŋадайаĐĩŅŅа\".</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">ĐаĐēаСваŅŅŅа ĐēĐŊĐžĐŋĐēŅ \"ĐадайаĐĩŅŅа\" Ņ \"ĐĐĩ ĐŋадайаĐĩŅŅа\"</string>
|
||||
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_share_button_title">ĐĄŅ
аваŅŅ Share</string>
|
||||
<string name="revanced_hide_share_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐадСŅĐģŅŅŅа\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_share_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐадСŅĐģŅŅŅа\".</string>
|
||||
<string name="revanced_hide_share_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐадСŅĐģŅŅŅа\"</string>
|
||||
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears only on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">ĐĄŅ
аваŅŅ ŅĐŋŅаваСдаŅŅ</string>
|
||||
<string name="revanced_hide_report_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐавĐĩдаĐŧŅŅŅ\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_report_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐавĐĩдаĐŧŅŅŅ\".</string>
|
||||
<string name="revanced_hide_report_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐавĐĩдаĐŧŅŅŅ\"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_remix_button_title">ĐĄŅ
аваŅŅ ŅŅĐŧŅĐēŅ</string>
|
||||
<string name="revanced_hide_remix_button_summary_on">ĐĐŊĐžĐŋĐēа \"Đ ŅĐŧŅĐēŅ\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_remix_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"Đ ŅĐŧŅĐēŅ\".</string>
|
||||
<string name="revanced_hide_remix_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"Đ ŅĐŧŅĐēŅ\"</string>
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_download_button_title">ĐĄŅ
аваŅŅ ĐˇĐ°ĐŗŅŅСĐēŅ</string>
|
||||
<string name="revanced_hide_download_button_summary_on">ĐĐŊĐžĐŋĐēа ĐˇĐ°ĐŗŅŅСĐēŅ ŅŅ
аваĐŊа</string>
|
||||
@@ -436,7 +486,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_playlist_button_title">ĐĄŅ
аваŅŅ ĐаŅ
аваŅŅ Ņ ĐŋĐģŅĐšĐģŅŅŅ</string>
|
||||
<string name="revanced_hide_playlist_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐаŅ
аваŅŅ Ņ ŅĐŋŅŅ ĐŋŅĐ°ĐšĐŗŅаваĐŊĐŊŅ\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_playlist_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐаŅ
аваŅŅ Ņ ŅĐŋŅŅ ĐŋŅĐ°ĐšĐŗŅаваĐŊĐŊŅ\".</string>
|
||||
<string name="revanced_hide_playlist_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐаŅ
аваŅŅ Ņ ŅĐŋŅŅ ĐŋŅĐ°ĐšĐŗŅаваĐŊĐŊŅ\"</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.navigation.navigationButtonsPatch">
|
||||
<string name="revanced_navigation_buttons_screen_title">ĐĐŊĐžĐŋĐēŅ ĐŊавŅĐŗĐ°ŅŅŅ</string>
|
||||
@@ -444,23 +494,37 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the tab. -->
|
||||
<string name="revanced_hide_home_button_title">ĐĄŅ
аваŅŅ ĐŗĐ°ĐģĐžŅĐŊŅŅ</string>
|
||||
<string name="revanced_hide_home_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐадОĐŧŅ\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_home_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐадОĐŧŅ\".</string>
|
||||
<string name="revanced_hide_home_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐадОĐŧŅ\"</string>
|
||||
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_hide_shorts_button_title">ĐĄŅ
аваŅŅ Shorts</string>
|
||||
<string name="revanced_hide_shorts_button_summary_on">ĐĐŊĐžĐŋĐēа Shorts ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_button_summary_off">ĐĐŊĐžĐŋĐēа shorts ĐŋаĐēаСваĐĩŅŅа</string>
|
||||
<!-- The Create button has no display name. Translate normally. -->
|
||||
<string name="revanced_hide_create_button_title">ĐĄŅ
аваŅŅ ĐĄŅваŅŅŅŅ</string>
|
||||
<string name="revanced_hide_create_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐĄŅваŅŅŅŅ\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_create_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅваŅŅŅŅ\".</string>
|
||||
<string name="revanced_hide_create_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅваŅŅŅŅ\"</string>
|
||||
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_hide_subscriptions_button_title">ĐĄŅ
аваŅŅ ĐŋадĐŋŅŅĐēŅ</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐадĐŋŅŅĐēŅ\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐадĐŋŅŅĐēŅ\".</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐадĐŋŅŅĐēŅ\"</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">ĐĐĩŅаĐēĐģŅŅаĐģŅĐŊŅĐē \"ĐĄŅваŅŅŅŅ Đˇ аĐŋавŅŅŅŅĐŊĐŊŅĐŧŅ\".</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐĄŅваŅŅŅŅ\" СаĐŧŅĐŊŅĐĩŅŅа ĐēĐŊĐžĐŋĐēаК \"ĐĐŋавŅŅŅŅĐŊĐŊŅ\"\n\nĐаŅĐ˛Đ°ĐŗĐ°: ĐŋŅŅ ŅĐēĐģŅŅŅĐŊĐŊŅ ĐŗŅŅĐ°ĐŗĐ° ŅаĐēŅаĐŧа ĐŋŅŅĐŧŅŅОва Ņ
аваĐĩŅŅа вŅĐ´ŅаŅŅĐēĐģаĐŧа</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">ĐĐŊĐžĐŋĐēа \"ĐĄŅваŅŅŅŅ\" ĐŊĐĩ ŅСаĐĩĐŧадСĐĩĐšĐŊŅŅаĐĩ С ĐēĐŊĐžĐŋĐēаК \"ĐĐŋавŅŅŅŅĐŊĐŊŅ\".</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_title">ĐĐĩŅаĐēĐģŅŅаĐģŅĐŊŅĐē \"ĐĄŅваŅŅŅŅ Đˇ аĐŋавŅŅŅŅĐŊĐŊŅĐŧŅ\"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"ĐĐŊĐžĐŋĐēа ÂĢĐĄŅваŅŅŅŅÂģ СаĐŧĐĩĐŊĐĩĐŊа ĐēĐŊĐžĐŋĐēаК ÂĢĐĐŋавŅŅŅŅĐŊĐŊŅÂģ
|
||||
|
||||
ĐаŅĐ˛Đ°ĐŗĐ°: ĐŖĐēĐģŅŅŅĐŊĐŊĐĩ ĐŗŅŅĐ°ĐŗĐ° ŅаĐēŅаĐŧа ĐŋŅŅĐŧŅŅОва ŅŅ
аваĐĩ вŅĐ´ŅаŅŅĐēĐģаĐŧŅ"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">ĐĐŊĐžĐŋĐēа \"ĐĄŅваŅŅŅŅ\" ĐŊĐĩ ŅСаĐĩĐŧадСĐĩĐšĐŊŅŅаĐĩ С ĐēĐŊĐžĐŋĐēаК \"ĐĐŋавŅŅŅŅĐŊĐŊŅ\"</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">ĐĄŅ
аваŅŅ ĐŧĐĩŅĐēŅ ĐēĐŊĐžĐŋаĐē ĐŊавŅĐŗĐ°ŅŅŅ</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">ĐĻŅŅĐģŅĐēŅ ŅŅ
аваĐŊŅŅ</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">ĐŅŅĐēĐĩŅĐēŅ ĐŋаĐēаСаĐŊŅ</string>
|
||||
<string name="revanced_disable_translucent_status_bar_title">ĐĐ´ĐēĐģŅŅŅŅŅ ĐŋŅаСŅŅŅŅŅŅ ĐŋаĐŊŅĐģŅ ŅŅаĐŊŅ</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_on">ĐаĐŊŅĐģŅ ŅŅаĐŊŅ ĐŊĐĩĐŋŅаСŅŅŅŅаŅ.</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_off">ĐаĐŊŅĐģŅ ŅŅаĐŊŅ ĐŊŅĐŋŅаСŅŅŅŅĐ°Ņ ŅŅ ĐŋŅаСŅŅŅŅаŅ.</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_title">ĐĐ´ĐēĐģŅŅŅŅŅ ŅвĐĩŅĐģŅŅ ĐŋŅаСŅŅŅŅŅŅ ĐŋаĐŊŅĐģŅ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">ĐаĐŊŅĐģŅ ĐŊавŅĐŗĐ°ŅŅŅ Ņ ŅвĐĩŅĐģŅĐŧ ŅŅĐļŅĐŧĐĩ ĐŊĐĩĐŋŅаСŅŅŅŅаŅ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">ĐаĐŊŅĐģŅ ĐŊавŅĐŗĐ°ŅŅŅ Ņ ŅвĐĩŅĐģаК ŅŅĐŧĐĩ ĐŊŅĐŋŅаСŅŅŅŅĐ°Ņ ŅŅ ĐŋŅаСŅŅŅŅаŅ.</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_title">ĐĐ´ĐēĐģŅŅŅŅŅ ŅŅĐŧĐŊŅŅ ĐŊĐĩĐŋŅаСŅŅŅŅŅŅ ĐŋаĐŊŅĐģŅ.</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">ĐаĐŊŅĐģŅ ĐŊавŅĐŗĐ°ŅŅŅ Ņ ŅŅĐŧĐŊŅĐŧ ŅŅĐļŅĐŧĐĩ ĐŊĐĩĐŋŅаСŅŅŅŅаŅ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">ĐаĐŊŅĐģŅ ĐŊавŅĐŗĐ°ŅŅŅ Ņ ŅŅĐŧĐŊаК ŅŅĐŧĐĩ ĐŊŅĐŋŅаСŅŅŅŅаŅ.</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
|
||||
<string name="revanced_hide_player_flyout_title">ĐŅĐŋадаŅŅаĐĩ ĐŧĐĩĐŊŅ</string>
|
||||
@@ -474,6 +538,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_on">ĐĐĩĐŊŅ Đ´Đ°Đ´Đ°ŅĐēОвŅŅ
ĐŊаĐģад ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_off">ĐĐ´ĐģŅŅŅŅŅĐĩŅŅа ĐŧĐĩĐŊŅ Đ´Đ°Đ´Đ°ŅĐēОвŅŅ
ĐŊаĐģад</string>
|
||||
<!-- 'Sleep timer' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_title">ĐĄŅ
аваŅŅ ŅаКĐŧĐĩŅ ŅĐŊŅ</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">ĐĐĩĐŊŅ ŅаКĐŧĐĩŅа ŅĐŊŅ ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">ĐĐĩĐŊŅ ŅаКĐŧĐĩŅа ŅĐŊŅ ĐŋаĐēаСаĐŊа</string>
|
||||
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_loop_video_title">ĐĄŅ
аваŅŅ ŅŅĐēĐģ вŅĐ´Ņа</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_on">ĐĐĩĐŊŅ ŅŅĐēĐģŅŅĐŊĐ°ĐŗĐ° вŅĐ´Ņа ŅŅ
аваĐŊа</string>
|
||||
@@ -482,6 +549,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_title">ĐĄŅ
аваŅŅ ĐŊĐĩаĐēŅŅŅĐŊŅ ŅŅĐļŅĐŧ</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">ĐĐĩĐŊŅ ĐŊĐĩаĐēŅŅŅĐŊĐ°ĐŗĐ° ŅŅĐļŅĐŧŅ ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">ĐĐ´ĐģŅŅŅŅĐžŅваĐĩŅŅа ĐŧĐĩĐŊŅ ŅŅĐļŅĐŧŅ ĐŊаваĐēĐžĐģŅĐŊĐ°ĐŗĐ° аŅŅŅОддСŅ</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_title">ĐĄŅ
аваŅŅ ŅŅайŅĐģŅĐŊŅ ĐŗŅĐē</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_off">ĐĐĩĐŊŅ ŅŅайŅĐģŅĐŊĐ°ĐŗĐ° ĐŗŅĐēŅ ĐŋаĐēаСаĐŊа</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_on">ĐĐĩĐŊŅ ŅŅайŅĐģŅĐŊĐ°ĐŗĐ° ĐŗŅĐēŅ ŅŅ
аваĐŊа</string>
|
||||
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_help_title">ĐĄŅ
аваŅŅ ĐавĐĩĐ´ĐēŅ & СваŅĐžŅĐŊĐ°Ņ ŅŅвŅСŅ</string>
|
||||
<string name="revanced_hide_player_flyout_help_summary_on">ĐаĐŋаĐŧĐžĐŗĐ° & ĐŧĐĩĐŊŅ ĐˇĐ˛Đ°ŅĐžŅĐŊаК ŅŅвŅĐˇŅ ŅŅ
аваĐŊа</string>
|
||||
@@ -506,7 +576,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_title">ĐĄŅ
аваŅŅ ĐŗĐ°Đ´ĐˇŅĐŊĐŊŅĐē Ņ VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">ĐĐĩĐŊŅ ĐŋŅĐ°ĐŗĐģŅĐ´Ņ Ņ VR ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">ĐаĐēаСаĐŊа ĐŧĐĩĐŊŅ \"ĐĐģŅдСĐĩŅŅ Ņ VR\".</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">ĐаĐēаСаĐŊа ĐŧĐĩĐŊŅ \"ĐĐģŅдСĐĩŅŅ Ņ VR\"</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_title">ĐĄŅ
аваŅŅ ĐēаĐģĐžĐŊŅŅŅŅĐģ ĐŧĐĩĐŊŅ ŅĐēаŅŅŅ Đ˛ŅĐ´Ņа</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">ĐŅĐļĐŊŅ ĐēаĐģĐžĐŊŅŅŅŅĐģ ĐŧĐĩĐŊŅ ŅĐēаŅŅŅ Đ˛ŅĐ´Ņа ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">ĐаĐēаСваĐĩŅŅа ĐŊŅĐļĐŊŅ ĐēаĐģĐžĐŊŅŅŅŅĐģ ĐŧĐĩĐŊŅ ŅĐēаŅŅŅ Đ˛ŅĐ´Ņа</string>
|
||||
@@ -519,7 +589,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_cast_button_summary_on">ĐĐŊĐžĐŋĐēа Cast ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_cast_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа Cast</string>
|
||||
<!-- This button does not display any text, but 'captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title' -->
|
||||
<string name="revanced_hide_captions_button_title">ĐĐŊĐžĐŋĐēа ÂĢĐĄŅ
аваŅŅ ŅŅŅŅŅÂģ.</string>
|
||||
<string name="revanced_hide_captions_button_title">ĐĐŊĐžĐŋĐēа ÂĢĐĄŅ
аваŅŅ ŅŅŅŅŅÂģ</string>
|
||||
<string name="revanced_hide_captions_button_summary_on">ĐĐŊĐžĐŋĐēа ŅŅĐąŅŅŅŅĐ°Ņ ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_captions_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ŅŅĐąŅŅŅŅаŅ</string>
|
||||
<string name="revanced_hide_autoplay_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ Đ°ŅŅаСаĐŋŅŅĐēŅ</string>
|
||||
@@ -555,16 +625,27 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_off">ĐĐ´ĐģŅŅŅŅĐžŅваĐĩŅŅа ĐŋаĐŊŅĐģŅ ĐŋĐžŅŅĐēŅ ŅŅĐēŅСаŅ</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
|
||||
<string name="revanced_shorts_player_screen_title">ĐŅĐ°ĐšĐŗŅаваĐģŅĐŊŅĐē Shorts</string>
|
||||
<string name="revanced_shorts_player_screen_summary">ĐĄŅ
аваŅŅ Đ°ĐąĐž ĐŋаĐēаСаŅŅ ĐēаĐŧĐŋаĐŊĐĩĐŊŅŅ Ņ ĐŋŅĐ°ĐšĐŗŅаваĐģŅĐŊŅĐēŅ Shorts</string>
|
||||
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
<string name="revanced_hide_shorts_home_title">ĐĄŅ
аваŅŅ ŅĐžŅŅŅ Ņ Ņ
аŅĐŊŅĐš ŅŅŅĐļŅŅ</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">Shorts Ņ ŅŅŅĐļŅŅ Ņ
аŅĐŊŅĐš ŅŅаŅĐžĐŊĐēŅ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_home_summary_off">Shorts Ņ ŅŅŅĐļŅŅ Ņ
аŅĐŊŅĐš ŅŅаŅĐžĐŊĐēŅ ĐŋаĐēаСаĐŊŅ</string>
|
||||
<!-- 'subscription' should be translated using the same localized wording YouTube displays for the subscription tab. -->
|
||||
<string name="revanced_hide_shorts_subscriptions_title">ĐĄŅ
аваŅŅ Shorts Ņ ŅŅŅĐļŅŅ ĐŋадĐŋŅŅĐēŅ</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_on">Shorts Ņ ŅŅŅĐļŅŅ ĐŋадĐŋŅŅĐēŅ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_off">Shorts Ņ ŅŅŅĐļŅŅ ĐŋадĐŋŅŅĐēŅ ĐŋаĐēаСаĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_search_title">ĐĄŅ
аваŅŅ Shorts Ņ Đ˛ŅĐŊŅĐēаŅ
ĐŋĐžŅŅĐēŅ</string>
|
||||
<string name="revanced_hide_shorts_search_summary_on">Shorts Ņ Đ˛ŅĐŊŅĐēаŅ
ĐŋĐžŅŅĐēŅ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_search_summary_off">Shorts Ņ Đ˛ŅĐŊŅĐēаŅ
ĐŋĐžŅŅĐēŅ ĐŋаĐēаСаĐŊŅ</string>
|
||||
<!-- 'join' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_join_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ Đ´Đ°ĐģŅŅŅŅŅа</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">ĐĐŊĐžĐŋĐēа ÂĢĐаĐģŅŅŅŅŅаÂģ ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ÂĢĐаĐģŅŅŅŅŅаÂģ.</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ÂĢĐаĐģŅŅŅŅŅаÂģ</string>
|
||||
<!-- 'subscribe' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_subscribe_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ ĐŋадĐŋŅŅаŅŅа</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐадĐŋŅŅаŅŅа\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ÂĢĐадĐŋŅŅаŅŅаÂģ.</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ÂĢĐадĐŋŅŅаŅŅаÂģ</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">ĐĄŅ
аваŅŅ ĐŋŅŅĐŋŅĐŊĐĩĐŊŅŅ ĐēĐŊĐžĐŋĐēŅ ĐŊаĐēĐģадаĐŊĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">ĐŅŅĐŋŅĐŊĐĩĐŊŅŅ ĐēĐŊĐžĐŋĐēŅ ĐŊаĐēĐģадаĐŊĐŊŅ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">ĐаĐēаСваŅŅŅа ĐŋŅŅĐŋŅĐŊĐĩĐŊŅŅ ĐēĐŊĐžĐŋĐēŅ ĐŊаĐēĐģадаĐŊĐŊŅ</string>
|
||||
@@ -573,33 +654,54 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_shop_button_summary_off">ĐаĐēаСваĐĩŅŅа ĐēĐŊĐžĐŋĐēа ĐēŅаĐŧŅ</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ ŅŅĐŋĐĩŅдСŅĐēŅĐš</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">ĐĐŊĐžĐŋĐēа ŅŅĐŋĐĩŅдСŅĐēŅĐš ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅĐŋĐĩŅ Đ´ĐˇŅĐēŅĐš\".</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅĐŋĐĩŅ Đ´ĐˇŅĐēŅĐš\"</string>
|
||||
<string name="revanced_hide_shorts_tagged_products_title">ĐĄŅ
аваŅŅ ĐŋаСĐŊаŅаĐŊŅŅ ĐŋŅадŅĐēŅŅ</string>
|
||||
<string name="revanced_hide_shorts_tagged_products_summary_on">ĐаСĐŊаŅаĐŊŅŅ ĐŋŅадŅĐēŅŅ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_tagged_products_summary_off">ĐŅадŅĐēŅŅ Đˇ ŅŅĐŗĐ°ĐŧŅ ĐŋаĐēаСаĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">ĐĄŅ
аваŅŅ ĐŧĐĩŅĐēŅ ĐŧĐĩŅŅаСĐŊаŅ
ОдĐļаĐŊĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">ĐĐĩŅĐēа ĐŧĐĩŅŅаСĐŊаŅ
ОдĐļаĐŊĐŊŅ ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">ĐаĐēаСаĐŊа ĐŧĐĩŅĐēа ĐŧĐĩŅŅаСĐŊаŅ
ОдĐļаĐŊĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ ĐˇĐ°Ņ
аваĐŊĐŊŅ ĐŧŅСŅĐēŅ</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">ĐĐŊĐžĐŋĐēа СаŅ
аваĐŊĐŊŅ ĐŧŅСŅĐēŅ ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">ĐĐŊĐžĐŋĐēа СаŅ
аваĐŊĐŊŅ ĐŧŅСŅĐēŅ ĐŋаĐēаСаĐŊа</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ Đ˛ŅĐēаŅŅŅŅаĐŊĐŊŅ ŅайĐģĐžĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">ĐĐŊĐžĐŋĐēа вŅĐēаŅŅŅŅаĐŊĐŊŅ ŅайĐģĐžĐŊŅ ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">ĐĐŊĐžĐŋĐēа вŅĐēаŅŅŅŅаĐŊĐŊŅ ŅайĐģĐžĐŊŅ ĐŋаĐēаСаĐŊа</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ ĐąŅĐ´ŅŅŅŅ
</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">ĐĐŊĐžĐŋĐēа âŦī¸ĐŅĐ´ŅŅиĐĩ ŅĐžĐģиĐēиâŦī¸ ŅĐēŅŅŅа</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">ĐĐŊĐžĐŋĐēа âŦī¸ĐŅĐ´ŅŅиĐĩ ŅĐžĐģиĐēиâŦī¸ ĐžŅОйŅаĐļаĐĩŅŅŅ</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">ĐĄĐēŅŅŅŅ ĐēĐŊĐžĐŋĐēŅ Ņ ĐˇĐĩĐģŅĐŊŅĐŧ ŅĐēŅаĐŊĐžĐŧ Shorts</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">ĐĐŊĐžĐŋĐēа Ņ ĐˇĐĩĐģŅĐŊŅĐŧ ŅĐēŅаĐŊĐžĐŧ Shorts ŅĐēŅŅŅа</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">ĐĐŊĐžĐŋĐēа Ņ ĐˇĐĩĐģŅĐŊŅĐŧ ŅĐēŅаĐŊĐžĐŧ Shorts ĐžŅОйŅаĐļаĐĩŅŅŅ</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">ĐĄĐēŅŅŅŅ Ņ
ĐĩŅŅĐĩĐŗ-ĐēĐŊĐžĐŋĐēŅ Shorts</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_on">ĐĨĐĩŅŅĐĩĐŗ-ĐēĐŊĐžĐŋĐēа Shorts ŅĐēŅŅŅа</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_off">ĐĨĐĩŅŅĐĩĐŗ-ĐēĐŊĐžĐŋĐēа Shorts ĐžŅОйŅаĐļаĐĩŅŅŅ</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">ĐĄŅ
аваŅŅ ĐŋŅаĐŋаĐŊĐžĐ˛Ņ ĐŋĐžŅŅĐēŅ</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_summary_on">ĐĐžŅŅĐēавŅŅ ĐŋŅаĐŋаĐŊĐžĐ˛Ņ ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_summary_off">ĐаĐēаСваŅŅŅа ĐŋŅаĐŋаĐŊĐžĐ˛Ņ ĐŋĐžŅŅĐēŅ</string>
|
||||
<string name="revanced_hide_shorts_like_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐадайаĐĩŅŅа\".</string>
|
||||
<string name="revanced_hide_shorts_stickers_title">ĐĄĐēŅŅŅŅ ŅŅиĐēĐĩŅŅ</string>
|
||||
<string name="revanced_hide_shorts_stickers_summary_on">ĐĄŅиĐēĐĩŅŅ Shorts ŅĐēŅŅŅŅ</string>
|
||||
<string name="revanced_hide_shorts_stickers_summary_off">ĐĄŅиĐēĐĩŅŅ Shorts ĐžŅОйŅаĐļаŅŅŅŅ</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">ĐĄĐēŅŅŅŅ Đ˛ŅĐŋĐģŅваŅŅĐĩĐĩ ĐžĐēĐŊĐž Ņ ĐģаКĐēаĐŧи Shorts</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_on">ĐĐŊиĐŧаŅĐ¸Ņ Đ˛ŅĐŋĐģŅваŅŅĐĩĐŗĐž ĐžĐēĐŊа Ņ ĐģаКĐēаĐŧи Shorts ŅĐēŅŅŅа</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_off">ĐĐŊиĐŧаŅĐ¸Ņ Đ˛ŅĐŋĐģŅваŅŅĐĩĐŗĐž ĐžĐēĐŊа Ņ ĐģаКĐēаĐŧи Shorts ĐžŅОйŅаĐļаĐĩŅŅŅ</string>
|
||||
<string name="revanced_hide_shorts_like_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐадайаĐĩŅŅа\"</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐадайаĐĩŅŅа\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐадайаĐĩŅŅа\".</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐŊĐĩ ĐŋадайаĐĩŅŅа\".</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐадайаĐĩŅŅа\"</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ \"ĐŊĐĩ ĐŋадайаĐĩŅŅа\"</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐĐĩ ĐŋадайаĐĩŅŅа\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĐĩ ĐŋадайаĐĩŅŅа\".</string>
|
||||
<string name="revanced_hide_shorts_comments_button_title">ĐĐŊĐžĐŋĐēа \"ĐĄŅ
аваŅŅ ĐēаĐŧĐĩĐŊŅаŅŅŅ\".</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĐĩ ĐŋадайаĐĩŅŅа\"</string>
|
||||
<string name="revanced_hide_shorts_comments_button_title">ĐĐŊĐžĐŋĐēа \"ĐĄŅ
аваŅŅ ĐēаĐŧĐĩĐŊŅаŅŅŅ\"</string>
|
||||
<string name="revanced_hide_shorts_comments_button_summary_on">ĐĐŊĐžĐŋĐēа ĐēаĐŧĐĩĐŊŅаŅŅŅŅ ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_comments_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ĐēаĐŧĐĩĐŊŅаŅŅŅŅ</string>
|
||||
<!-- 'remix' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_remix_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ ŅŅĐŧŅĐēŅа</string>
|
||||
<string name="revanced_hide_shorts_remix_button_summary_on">ĐĐŊĐžĐŋĐēа \"Đ ŅĐŧŅĐēŅ\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_remix_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"Đ ŅĐŧŅĐēŅ\".</string>
|
||||
<string name="revanced_hide_shorts_remix_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"Đ ŅĐŧŅĐēŅ\"</string>
|
||||
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_share_button_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ Đ°ĐąĐ°ĐŗŅĐģŅваĐŊĐŊŅ</string>
|
||||
<string name="revanced_hide_shorts_share_button_summary_on">ĐĐŊĐžĐŋĐēа \"ĐадСŅĐģŅŅŅа\" ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_share_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐадСŅĐģŅŅŅа\".</string>
|
||||
<string name="revanced_hide_shorts_share_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐадСŅĐģŅŅŅа\"</string>
|
||||
<string name="revanced_hide_shorts_info_panel_title">ĐĄŅ
аваŅŅ ŅĐŊŅаŅĐŧаŅŅĐšĐŊŅŅ ĐŋаĐŊŅĐģŅ</string>
|
||||
<string name="revanced_hide_shorts_info_panel_summary_on">ĐĐŊŅаŅĐŧаŅŅĐšĐŊĐ°Ņ ĐŋаĐŊŅĐģŅ ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_info_panel_summary_off">ĐаĐēаСаĐŊа ŅĐŊŅаŅĐŧаŅŅĐšĐŊĐ°Ņ ĐŋаĐŊŅĐģŅ</string>
|
||||
@@ -615,7 +717,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_full_video_link_label_title">ĐĄŅ
аваŅŅ ĐŋĐžŅĐŊŅŅ ĐŧĐĩŅĐēŅ ŅĐŋаŅŅĐģĐēŅ ĐŊа вŅĐ´Ņа</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_on">ĐĐĩŅĐēа ŅĐŋаŅŅĐģĐēŅ ĐŊа вŅĐ´Ņа ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_off">ĐĐ´ĐģŅŅŅŅŅĐĩŅŅа ĐŧĐĩŅĐēа ŅĐŋаŅŅĐģĐēŅ ĐŊа вŅĐ´Ņа</string>
|
||||
<string name="revanced_hide_shorts_sound_button_title">ĐĐŊĐžĐŋĐēа \"ĐĄŅ
аваŅŅ ĐŗŅĐē\".</string>
|
||||
<string name="revanced_hide_shorts_sound_button_title">ĐĐŊĐžĐŋĐēа \"ĐĄŅ
аваŅŅ ĐŗŅĐē\"</string>
|
||||
<string name="revanced_hide_shorts_sound_button_summary_on">ĐĐŊĐžĐŋĐēа ĐŗŅĐēŅ ŅŅ
аваĐŊа</string>
|
||||
<string name="revanced_hide_shorts_sound_button_summary_off">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа ĐŗŅĐēŅ</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_title">ĐĄŅ
аваŅŅ ĐŋаĐŊŅĐģŅ ĐŊавŅĐŗĐ°ŅŅŅ</string>
|
||||
@@ -637,6 +739,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">ĐŖŅĐŋĐģŅваĐģŅĐŊŅŅ ĐŋаĐŊŅĐģŅ ĐŋŅĐ°ĐšĐŗŅаваĐģŅĐŊŅĐēа ŅŅ
аваĐŊŅŅ</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">ĐаĐēаСваŅŅŅа ŅŅĐŋĐģŅваĐģŅĐŊŅŅ ĐŋаĐŊŅĐģŅ ĐŋŅĐ°ĐšĐŗŅаваĐģŅĐŊŅĐēа</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">ĐŅĐēŅŅваŅŅ Đ˛Đ¸Đ´ĐĩĐž ĐŊа вĐĩŅŅ ŅĐēŅаĐŊ в ĐŋĐžŅŅŅĐĩŅĐŊĐžĐŧ ŅĐĩĐļиĐŧĐĩ</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">ĐидĐĩĐž ĐžŅĐēŅŅваŅŅŅŅ ĐŊа вĐĩŅŅ ŅĐēŅаĐŊ</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">ĐидĐĩĐž ĐŊĐĩ ĐžŅĐēŅŅваŅŅŅŅ ĐŊа вĐĩŅŅ ŅĐēŅаĐŊ</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">ĐĐĩĐŋŅаСŅŅŅŅаŅŅŅ ĐŊаĐēĐģадаĐŊĐŊŅ ĐŋŅĐ°ĐšĐŗŅаваĐģŅĐŊŅĐēа</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">ĐĐŊаŅŅĐŊĐŊĐĩ ĐŊĐĩĐŋŅаСŅŅŅŅаŅŅŅ ĐŋаĐŧŅĐļ 0-100, дСĐĩ 0 - ĐŋŅаСŅŅŅŅŅ</string>
|
||||
@@ -649,12 +756,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_failure_client_rate_limit_requested">ĐŅСĐģаКĐēŅ ĐŊĐĩдаŅŅŅĐŋĐŊŅŅ (даŅŅĐŗĐŊŅŅŅ ĐģŅĐŧŅŅ ĐēĐģŅĐĩĐŊŅĐēĐ°ĐŗĐ° API)</string>
|
||||
<string name="revanced_ryd_failure_generic">ĐĐĩ ĐŋадайаĐĩŅŅа (%s)</string>
|
||||
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">ĐĐĩŅĐ°ĐˇĐ°ĐŗŅŅСŅŅĐĩ вŅĐ´Ņа, Đēай ĐŋŅĐ°ĐŗĐ°ĐģаŅаваŅŅ Đˇ даĐŋаĐŧĐžĐŗĐ°Đš ŅŅĐŊĐēŅŅŅ \"ĐŅŅĐŊŅŅŅ ĐŊĐĩ ĐŋадайаĐĩŅŅа YouTube\".</string>
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">ĐĐĩŅĐ°ĐˇĐ°ĐŗŅŅСŅŅĐĩ вŅĐ´Ņа, Đēай ĐŋŅĐ°ĐŗĐ°ĐģаŅаваŅŅ Đˇ даĐŋаĐŧĐžĐŗĐ°Đš ŅŅĐŊĐēŅŅŅ \"ĐŅŅĐŊŅŅŅ ĐŊĐĩ ĐŋадайаĐĩŅŅа YouTube\"</string>
|
||||
<string name="revanced_ryd_enable_summary_on">ĐŅСĐģаКĐēŅ ĐŋаĐēаСаĐŊŅ</string>
|
||||
<string name="revanced_ryd_enable_summary_off">ĐŅСĐģаКĐēŅ ĐŊĐĩ ĐŋаĐēаСваŅŅŅа</string>
|
||||
<string name="revanced_ryd_shorts_title">ĐаĐēаСваКŅĐĩ \"ĐŊĐĩ ĐŋадайаĐĩŅŅа\" ĐŊа Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">ĐдСĐŊаĐēŅ \"ĐŊĐĩ ĐŋадайаĐĩŅŅа\" Ņ Shorts</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">ĐдСĐŊаĐēŅ \"ĐĐĩ ĐŋадайаĐĩŅŅа\" Ņ Shorts\n\nĐĐąĐŧĐĩĐļаваĐŊĐŊĐĩ: адСĐŊаĐēŅ \"ĐĐĩ ĐŋадайаĐĩŅŅа\" ĐŧĐžĐŗŅŅŅ ĐŊĐĩ С\"ŅŅĐģŅŅŅа Ņ ŅŅĐļŅĐŧĐĩ ŅĐŊĐēĐžĐŗĐŊŅŅа</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"ĐĐĩĐŋаĐŋадаĐŊĐŊŅ ĐŋаĐēаСаĐŊŅ ĐŊа Shorts
|
||||
|
||||
ĐĐąĐŧĐĩĐļаваĐŊĐŊĐĩ: ĐĐĩĐŋаĐŋадаĐŊĐŊŅ ĐŧĐžĐŗŅŅŅ ĐŊĐĩ С'ŅŅĐģŅŅŅа Ņ ŅŅĐļŅĐŧĐĩ ŅĐŊĐēĐžĐŗĐŊŅŅа"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">ĐŅСĐģаĐēŅ ŅŅ
аваĐŊŅŅ Ņ Shorts</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">ĐŅСĐģаКĐēŅ Ņ ĐŋŅаŅŅĐŊŅаŅ
</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">ĐĐĩŅĐŋадайаĐŊĐŊŅ ĐŋаĐēаСаĐŊŅ Ņ ĐŋŅаŅŅĐŊŅаŅ
</string>
|
||||
@@ -692,6 +801,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_wide_searchbar_summary_off">ШŅŅĐžĐēĐ°Ņ ĐŋаĐŊŅĐģŅ ĐŋĐžŅŅĐēŅ Đ°Đ´ĐēĐģŅŅаĐŊа</string>
|
||||
</patch>
|
||||
<patch id="layout.seekbar.seekbarThumbnailsPatch">
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_title">ĐĐēĐģŅŅиŅŅ ĐŧиĐŊиаŅŅŅŅ Đ˛ŅŅĐžĐēĐžĐŗĐž ĐēаŅĐĩŅŅва</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">ĐиĐŊиаŅŅŅŅ ĐŋĐžĐģСŅĐŊĐēа ĐŋŅĐžĐŗŅĐĩŅŅа â вŅŅĐžĐēĐžĐŗĐž ĐēаŅĐĩŅŅва</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">ĐиĐŊиаŅŅŅŅ ĐŋĐžĐģСŅĐŊĐēа ĐŋŅĐžĐŗŅĐĩŅŅа â ŅŅĐĩĐ´ĐŊĐĩĐŗĐž ĐēаŅĐĩŅŅва</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">ĐиĐŊиаŅŅŅŅ ĐŋĐžĐģСŅĐŊĐēа ĐŋŅĐžĐŗŅĐĩŅŅа в ĐŋĐžĐģĐŊĐžŅĐēŅаĐŊĐŊĐžĐŧ ŅĐĩĐļиĐŧĐĩ â вŅŅĐžĐēĐžĐŗĐž ĐēаŅĐĩŅŅва</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">ĐиĐŊиаŅŅŅŅ ĐŋĐžĐģСŅĐŊĐēа ĐŋŅĐžĐŗŅĐĩŅŅа в ĐŋĐžĐģĐŊĐžŅĐēŅаĐŊĐŊĐžĐŧ ŅĐĩĐļиĐŧĐĩ â ŅŅĐĩĐ´ĐŊĐĩĐŗĐž ĐēаŅĐĩŅŅва</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"ĐŅŅа ŅаĐēŅаĐŧа адĐŊавŅŅŅ ĐŧŅĐŊŅаŅŅŅŅ ĐŊа ŅŅаĐŊŅĐģŅŅŅŅŅ
Ņ ĐŋŅаĐŧŅĐŧ ŅŅŅŅŅ, ŅĐēŅŅ ĐŊĐĩ ĐŧаŅŅŅ ĐŧŅĐŊŅаŅŅŅ Đˇ ĐŧĐ°ĐŗŅŅĐŧаŅŅŅ ĐŋĐĩŅаĐŧĐžŅĐēŅ.
|
||||
|
||||
ĐŅĐŊŅаŅŅŅŅ Đˇ ĐŧĐ°ĐŗŅŅĐŧаŅŅŅ ĐŋĐĩŅаĐŧĐžŅĐēŅ ĐąŅĐ´ŅŅŅ Đ˛ŅĐēаŅŅŅŅĐžŅваŅŅ ŅŅŅ Đļ ŅĐēаŅŅŅ, ŅŅĐž Ņ ĐąŅĐŗŅŅаĐĩ вŅĐ´Ņа.
|
||||
|
||||
ĐŅŅĐ°Ņ ŅŅĐŊĐēŅŅŅ ĐģĐĩĐŋŅ ĐˇĐ° ŅŅŅ ĐŋŅаŅŅĐĩ С ŅĐēаŅŅŅ Đ˛ŅĐ´Ņа 720p айО ĐŊŅĐļŅĐš Ņ ĐŋŅŅ Đ˛ŅĐēаŅŅŅŅаĐŊĐŊŅ Đ˛ĐĩĐģŅĐŧŅ Ņ
ŅŅĐēĐ°ĐŗĐ° ĐĐŊŅŅŅĐŊŅŅ-СĐģŅŅŅĐŊĐŊŅ."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">ĐĐ´ĐŊавŅŅŅ ŅŅаŅŅŅ ĐŧŅĐŊŅŅŅŅŅŅ ĐŋаĐŊŅĐģŅ ĐŋĐžŅŅĐēŅ</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">ĐŅĐēŅĐˇŅ ĐŋаĐŊŅĐģŅ ĐŋĐžŅŅĐēŅ Đˇ\"ŅвŅŅŅа ĐŊад ĐŋаĐŊŅĐģĐģŅ ĐŋĐžŅŅĐēŅ</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">ĐŅĐŊŅŅŅŅŅŅ ĐŋаĐŊŅĐģŅ ĐŋĐžŅŅĐēŅ Đˇ\"ŅвŅŅŅа Ņ ĐŋĐžŅĐŊаŅĐēŅаĐŊĐŊŅĐŧ ŅŅĐļŅĐŧĐĩ</string>
|
||||
@@ -718,7 +837,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_time_without_sum_off">ĐаĐēаСаĐŊа ĐŋĐžŅĐŊĐ°Ņ Đ´Đ°ŅĐļŅĐŊŅ Đ˛ŅĐ´Ņа</string>
|
||||
<string name="revanced_sb_create_segment_category">ĐĄŅваŅŅĐŊĐŊĐĩ ĐŊОвŅŅ
ŅĐĩĐŗĐŧĐĩĐŊŅаŅ</string>
|
||||
<string name="revanced_sb_enable_create_segment">ĐаĐēаСаŅŅ ĐēĐŊĐžĐŋĐēŅ ŅŅваŅŅĐŊĐŊŅ ĐŊĐžĐ˛Đ°ĐŗĐ° ŅĐĩĐŗĐŧĐĩĐŊŅа</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅваŅŅŅŅ ĐŊĐžĐ˛Ņ ŅĐĩĐŗĐŧĐĩĐŊŅ\".</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_on">ĐаĐēаСаĐŊа ĐēĐŊĐžĐŋĐēа \"ĐĄŅваŅŅŅŅ ĐŊĐžĐ˛Ņ ŅĐĩĐŗĐŧĐĩĐŊŅ\"</string>
|
||||
<string name="revanced_sb_enable_create_segment_sum_off">ĐĐŊĐžĐŋĐēа \"ĐĄŅваŅŅŅŅ ĐŊĐžĐ˛Ņ ŅĐĩĐŗĐŧĐĩĐŊŅ\" ĐŊĐĩ ĐŋаĐēаСваĐĩŅŅа</string>
|
||||
<string name="revanced_sb_general_adjusting">ĐĐ´ŅŅĐŗŅĐģŅĐšŅĐĩ ĐŊĐžĐ˛Ņ ĐēŅĐžĐē ŅĐĩĐŗĐŧĐĩĐŊŅа</string>
|
||||
<string name="revanced_sb_general_adjusting_sum">ĐĐžĐģŅĐēаŅŅŅ ĐŧŅĐģŅŅĐĩĐēŅĐŊĐ´, ĐŊа ŅĐēŅŅ ĐŋĐĩŅаĐŧŅŅŅаŅŅŅа ĐēĐŊĐžĐŋĐēŅ ŅŅĐŗŅĐģŅваĐŊĐŊŅ ŅаŅŅ ĐŋŅŅ ŅŅваŅŅĐŊĐŊŅ ĐŊОвŅŅ
ŅĐĩĐŗĐŧĐĩĐŊŅаŅ</string>
|
||||
@@ -738,6 +857,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_skipcount_sum_off">ĐĐ´ŅĐžŅваĐŊĐŊĐĩ ĐēĐžĐģŅĐēаŅŅŅ ĐŋŅĐžĐŋŅŅĐēĐ°Ņ ĐŊĐĩ ŅĐēĐģŅŅаĐŊа</string>
|
||||
<string name="revanced_sb_general_min_duration">ĐŅĐŊŅĐŧаĐģŅĐŊĐ°Ņ ĐŋŅаŅŅĐŗĐģаŅŅŅ ŅĐĩĐŗĐŧĐĩĐŊŅа</string>
|
||||
<string name="revanced_sb_general_min_duration_sum">ĐĄĐĩĐŗĐŧĐĩĐŊŅŅ, ĐēаŅаŅĐĩĐšŅŅŅ ĐˇĐ° ĐŗŅŅа СĐŊаŅŅĐŊĐŊĐĩ (Ņ ŅĐĩĐēŅĐŊдаŅ
), ĐŊĐĩ ĐąŅĐ´ŅŅŅ ĐŋаĐēаСваŅŅа айО ĐŋŅаĐŋŅŅĐēаŅŅа</string>
|
||||
<string name="revanced_sb_general_min_duration_invalid">ĐĐĩвĐĩŅĐŊĐ°Ņ ĐŋŅОдОĐģĐļиŅĐĩĐģŅĐŊĐžŅŅŅ</string>
|
||||
<string name="revanced_sb_general_uuid">ĐĐ°Ņ Đ°ŅайŅŅŅŅ ŅĐ´ŅĐŊŅŅŅŅĐēаŅĐ°Ņ ĐēаŅŅŅŅаĐģŅĐŊŅĐēа</string>
|
||||
<string name="revanced_sb_general_uuid_sum">ĐŅŅа ĐŋавŅĐŊĐŊа ĐąŅŅŅ ĐŋŅŅваŅĐŊŅĐŧ. ĐŅŅа ŅĐē ĐŋаŅĐžĐģŅ, Ņ ŅĐŗĐž ĐŊĐĩĐģŅĐŗĐ° ĐŊŅĐēĐžĐŧŅ ĐŋавĐĩдаĐŧĐģŅŅŅ. ĐаĐģŅ Ņ ĐēĐ°ĐŗĐžŅŅŅŅ ĐŗŅŅа ŅŅŅŅ, ŅĐŊ ĐŧĐžĐļа вŅдаваŅŅ ŅŅĐąĐĩ Са ваŅ</string>
|
||||
<string name="revanced_sb_general_uuid_invalid">ĐŅŅваŅĐŊŅ ŅĐ´ŅĐŊŅŅŅŅĐēаŅĐ°Ņ ĐēаŅŅŅŅаĐģŅĐŊŅĐēа ĐŋавŅĐŊĐĩĐŊ ĐąŅŅŅ ĐŊĐĩ ĐŧĐĩĐŊŅ ĐˇĐ° 30 ŅŅĐŧваĐģаŅ</string>
|
||||
@@ -753,7 +873,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">ĐаĐģĐ°Đ´Ņ ĐŋаŅĐŋŅŅ
Ова ŅĐŧĐŋаŅŅаваĐŊŅ</string>
|
||||
<string name="revanced_sb_settings_import_failed">ĐĐĩ ŅдаĐģĐžŅŅ ŅĐŧĐŋаŅŅаваŅŅ: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">ĐĐĩ ŅдаĐģĐžŅŅ ŅĐēŅĐŋаŅŅаваŅŅ: %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">ĐаŅŅ ĐŊаĐģĐ°Đ´Ņ ŅŅŅŅĐŧĐģŅваŅŅŅ ĐŋŅŅваŅĐŊŅ ŅĐ´ŅĐŊŅŅŅŅĐēаŅĐ°Ņ ĐēаŅŅŅŅаĐģŅĐŊŅĐēа SponsorBlock.\n\nĐĐ°Ņ ŅĐ´ŅĐŊŅŅŅŅĐēаŅĐ°Ņ ĐēаŅŅŅŅаĐģŅĐŊŅĐēа ĐŋадОйĐŊŅ ĐŊа ĐŋаŅĐžĐģŅ, Ņ ŅĐŗĐž ĐŊŅĐēĐžĐģŅ ĐŊĐĩ ŅŅŅйа ŅаŅĐēŅŅваŅŅ.\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"ĐаŅŅ ĐŊаĐģĐ°Đ´Ņ ŅŅŅŅĐŧĐģŅваŅŅŅ Đ°ŅайŅŅŅŅ ŅĐ´ŅĐŊŅŅŅŅĐēаŅĐ°Ņ SponsorBlock.
|
||||
|
||||
ĐĐ°Ņ ŅĐ´ŅĐŊŅŅŅŅĐēаŅĐ°Ņ ĐēаŅŅŅŅаĐģŅĐŊŅĐēа ĐŋадОйĐŊŅ Đ´Đ° ĐŋаŅĐžĐģŅ, Ņ ŅĐŗĐž ĐŊŅĐēĐžĐģŅ ĐŊĐĩ ваŅŅа дСŅĐģŅŅŅа.
|
||||
|
||||
"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">ĐĐžĐģŅŅ ĐŊĐĩ ĐŋаĐēаСваŅŅ</string>
|
||||
<string name="revanced_sb_diff_segments">ĐĐŧŅĐŊŅŅŅ ĐŋавОдСŅĐŊŅ ŅĐĩĐŗĐŧĐĩĐŊŅа</string>
|
||||
<string name="revanced_sb_segments_sponsor">ĐĄĐŋĐžĐŊŅаŅ</string>
|
||||
@@ -813,9 +937,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">ĐĐĩĐŧĐ°ĐŗŅŅĐŧа адĐŋŅавŅŅŅ ŅĐĩĐŗĐŧĐĩĐŊŅ: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock ŅаŅОва ĐŊĐĩ ĐŋŅаŅŅĐĩ</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">ĐĐĩĐŧĐ°ĐŗŅŅĐŧа адĐŋŅавŅŅŅ ŅĐĩĐŗĐŧĐĩĐŊŅ (ŅŅаŅŅŅ: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">ĐĐĩĐŧĐ°ĐŗŅŅĐŧа адĐŋŅавŅŅŅ ŅĐĩĐŗĐŧĐĩĐŊŅ.\nĐŅŅĐŊĐēа айĐŧĐĩĐļаваĐŊĐ°Ņ (СаĐŊадŅа ŅĐŧĐ°Ņ Đ°Đ´ адĐŊĐ°ĐŗĐž ĐēаŅŅŅŅаĐģŅĐŊŅĐēа айО IP)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">ĐĐĩĐŧĐ°ĐŗŅŅĐŧа адĐŋŅавŅŅŅ ŅĐĩĐŗĐŧĐĩĐŊŅ. ĐĐąĐŧĐĩĐļаваĐŊĐŊĐĩ Đŋа Ņ
ŅŅĐēаŅŅŅ (СаĐŊадŅа ŅĐŧĐ°Ņ Đ°Đ´ адĐŊĐ°ĐŗĐž Ņ ŅĐ°ĐŗĐž Đļ ĐēаŅŅŅŅаĐģŅĐŊŅĐēа айО IP-адŅаŅа)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">ĐĐĩĐŧĐ°ĐŗŅŅĐŧа адĐŋŅавŅŅŅ ŅĐĩĐŗĐŧĐĩĐŊŅ: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">ĐĐĩĐŧĐ°ĐŗŅŅĐŧа адĐŋŅавŅŅŅ ŅĐĩĐŗĐŧĐĩĐŊŅ.\nĐŖĐļĐž ŅŅĐŊŅĐĩ</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"ĐĐĩĐŧĐ°ĐŗŅŅĐŧа адĐŋŅавŅŅŅ ŅĐĩĐŗĐŧĐĩĐŊŅ.
|
||||
ĐŖĐļĐž ŅŅĐŊŅĐĩ"</string>
|
||||
<string name="revanced_sb_submit_succeeded">ĐĄĐĩĐŗĐŧĐĩĐŊŅ ĐŋаŅĐŋŅŅ
Ова адĐŋŅаŅĐģĐĩĐŊŅ</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock ŅаŅОва ĐŊĐĩдаŅŅŅĐŋĐŊŅ (ŅĐ°Ņ ŅаĐēаĐŊĐŊŅ API ŅĐēĐžĐŊŅŅŅŅŅ)</string>
|
||||
@@ -838,7 +963,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">Đ§Đ°Ņ ĐŋаŅаŅĐēŅ ŅĐĩĐŗĐŧĐĩĐŊŅа</string>
|
||||
<string name="revanced_sb_new_segment_time_end">Đ§Đ°Ņ ĐˇĐ°ĐēаĐŊŅŅĐŊĐŊŅ ŅĐĩĐŗĐŧĐĩĐŊŅа</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">ĐĻŅ ĐŋŅавŅĐģŅĐŊŅ ŅаŅ?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">ĐĄĐĩĐŗĐŧĐĩĐŊŅ Đ°Đ´\n\n%1$s\nда\n%2$s\n\n(%3$s)\n\nĐаŅĐžĐ˛Ņ Đ°Đ´ĐŋŅавŅŅŅ?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"ĐĄŅĐŗĐŧŅĐŊŅ ĐˇĐŊаŅ
ОдСŅŅŅа ĐŋаĐŧŅĐļ
|
||||
|
||||
%1$s
|
||||
да
|
||||
%2$s
|
||||
|
||||
(%3$s)
|
||||
|
||||
ĐаŅОвŅŅ Đ°Đ´ĐŋŅавŅŅŅ?"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">ĐаŅŅĐŊаŅŅ ŅŅŅйа ŅаĐŊĐĩĐš Са ĐēаĐŊĐĩŅ</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">ĐĄĐŋаŅаŅĐēŅ Đ°Đ´ĐˇĐŊаŅŅĐĩ два ĐŧĐĩŅŅŅ ĐŊа ĐŋаĐŊŅĐģŅ ŅаŅŅ</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">ĐаĐŋŅŅŅĐ´ĐŊŅ ĐŋŅĐ°ĐŗĐģŅĐ´ ŅĐĩĐŗĐŧĐĩĐŊŅа Ņ ĐŋĐĩŅаĐēаĐŊаКŅĐĩŅŅ, ŅŅĐž ŅĐŊ ĐŋŅаŅ
ОдСŅŅŅ ĐŋĐģаŅĐŊа</string>
|
||||
@@ -856,6 +989,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_stats_username_changed">ĐĐŧŅ ĐēаŅŅŅŅаĐģŅĐŊŅĐēа ĐŋаŅĐŋŅŅ
Ова СĐŧĐĩĐŊĐĩĐŊа</string>
|
||||
<string name="revanced_sb_stats_reputation">ĐаŅа ŅŅĐŋŅŅаŅŅŅ <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 +1013,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">ĐĐĩŅŅŅŅ ĐŋŅĐ°ĐŗŅаĐŧŅ Spoof</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">ĐĐĩŅŅŅŅ ĐŋадŅОйĐģĐĩĐŊаŅ</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">ĐĐĩŅŅŅŅ ĐŊĐĩ ĐŋадŅОйĐģĐĩĐŊаŅ</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">ĐĐĩŅŅŅŅ ĐŋŅĐ°ĐŗŅаĐŧŅ ĐąŅдСĐĩ ĐŋадĐŧĐĩĐŊĐĩĐŊа ĐŊа ŅŅаŅŅŅ Đ˛ĐĩŅŅŅŅ YouTube.\n\nĐŅŅа СĐŧĐĩĐŊŅŅŅ ĐˇĐŊĐĩŅĐŊŅ Đ˛ŅĐŗĐģŅĐ´ Ņ ŅŅĐŊĐēŅŅŅ ĐŋŅĐ°ĐŗŅаĐŧŅ, аĐģĐĩ ĐŧĐžĐŗŅŅŅ ŅСĐŊŅĐēĐŊŅŅŅ ĐŊĐĩвŅĐ´ĐžĐŧŅŅ ĐŋайОŅĐŊŅŅ ŅŅĐĩĐēŅŅ.\n\nĐаĐģŅ ĐŋаСĐŊĐĩĐš вŅĐēĐģŅŅŅŅŅ, ŅŅĐēаĐŧĐĩĐŊĐ´ŅĐĩŅŅа аŅŅŅŅŅŅŅ Đ´Đ°ĐŊŅŅ ĐŋŅĐ°ĐŗŅаĐŧŅ, Đēай ĐŋŅадŅŅ
ŅĐģŅŅŅ ĐŋаĐŧŅĐģĐēŅ ĐēаŅŅŅŅаŅĐēĐ°ĐŗĐ° ŅĐŊŅŅŅŅĐĩĐšŅŅ.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"ĐĐĩŅŅŅŅ ĐŋŅŅĐēĐģадаĐŊĐŊŅ ĐąŅдСĐĩ ĐŋадŅОйĐģĐĩĐŊŅ Đ´Đ° ŅŅаŅŅĐšŅаК вĐĩŅŅŅŅ YouTube.
|
||||
|
||||
ĐŅŅа СĐŧĐĩĐŊŅŅŅ ĐˇĐŊĐĩŅĐŊŅ Đ˛ŅĐŗĐģŅĐ´ Ņ ŅŅĐŊĐēŅŅŅ ĐŋŅŅĐēĐģадаĐŊĐŊŅ, аĐģĐĩ ĐŧĐžĐŗŅŅŅ ŅСĐŊŅĐēĐŊŅŅŅ ĐŊĐĩвŅĐ´ĐžĐŧŅŅ ĐŋайОŅĐŊŅŅ ŅŅĐĩĐēŅŅ.
|
||||
|
||||
ĐаĐģŅ ĐŋаСĐŊĐĩĐš ĐąŅдСĐĩ адĐēĐģŅŅаĐŊа, ŅŅĐēаĐŧĐĩĐŊĐ´ŅĐĩŅŅа аŅŅŅŅŅŅŅ Đ´Đ°ĐŊŅŅ ĐŋŅŅĐēĐģадаĐŊĐŊŅ, Đēай ĐŋаСйĐĩĐŗĐŊŅŅŅ ĐŋаĐŧŅĐģаĐē Ņ ŅĐŊŅŅŅŅĐĩĐšŅĐĩ."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">ĐадŅОйĐēа ĐŧŅŅаваК вĐĩŅŅŅŅ ĐŋŅĐ°ĐŗŅаĐŧŅ</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 â ĐĐžŅŅŅаĐŊОвиŅŅ ŅŅаŅŅĐĩ СĐŊаŅĐēи ĐŋĐģĐĩĐĩŅа Shorts</string>
|
||||
<!-- 'RYD' is 'Return YouTube Dislike' -->
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_1">18.33.40 - ĐĐ´ĐŊаŅĐģĐĩĐŊĐŊĐĩ RYD ĐŊа Shorts Ņ ŅŅĐļŅĐŧĐĩ ŅĐŊĐēĐžĐŗĐŊŅŅа</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_2">18.20.39 - ĐĐ´ĐŊавŅŅŅ Ņ
ŅŅĐēаŅŅŅ ŅŅŅĐžĐēĐ°ĐŗĐ° вŅĐ´Ņа & ŅĐēаŅĐŊаĐĩ ĐŧĐĩĐŊŅ</string>
|
||||
@@ -892,12 +1031,20 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">ĐŖŅŅаĐģŅваŅŅ ŅŅаŅŅавŅŅ ŅŅаŅĐžĐŊĐēŅ</string>
|
||||
<string name="revanced_change_start_page_entry_default">Đа СĐŧаŅŅаĐŊĐŊŅ</string>
|
||||
<string name="revanced_change_start_page_entry_browse">ĐĐąĐˇĐžŅ ĐēаĐŊаĐģОв</string>
|
||||
<string name="revanced_change_start_page_entry_explore">ĐаŅŅĐģĐĩĐ´ŅĐšŅĐĩ</string>
|
||||
<string name="revanced_change_start_page_entry_gaming">ĐĐŗŅŅ</string>
|
||||
<string name="revanced_change_start_page_entry_history">ĐŅŅŅĐžŅŅŅ</string>
|
||||
<string name="revanced_change_start_page_entry_library">ĐийĐģиОŅĐĩĐēа</string>
|
||||
<string name="revanced_change_start_page_entry_liked_videos">ĐĄĐŋадайаĐģŅŅŅ Đ˛ŅĐ´Ņа</string>
|
||||
<string name="revanced_change_start_page_entry_live">Đ ĐŋŅŅĐŧĐžĐŧ ŅŅиŅĐĩ</string>
|
||||
<string name="revanced_change_start_page_entry_movies">ФиĐģŅĐŧŅ</string>
|
||||
<string name="revanced_change_start_page_entry_music">ĐŅСŅĐēа</string>
|
||||
<string name="revanced_change_start_page_entry_search">ĐĐžŅŅĐē</string>
|
||||
<string name="revanced_change_start_page_entry_sports">ĐĄĐŋĐžŅŅ</string>
|
||||
<string name="revanced_change_start_page_entry_subscriptions">ĐадĐŋŅŅĐēŅ</string>
|
||||
<string name="revanced_change_start_page_entry_trending">ĐŖ ŅŅŅĐŊдСĐĩ</string>
|
||||
<string name="revanced_change_start_page_entry_watch_later">ĐĐžŅĐŧĐžŅŅĐĩŅŅ ĐŋОСĐļĐĩ</string>
|
||||
</patch>
|
||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||
<string name="revanced_disable_resuming_shorts_player_title">ĐĐ´ĐēĐģŅŅŅŅŅ Đ°Đ´ĐŊаŅĐģĐĩĐŊĐŊĐĩ ĐŋŅĐ°ĐšĐŗŅаваĐŊĐŊŅ Shorts</string>
|
||||
@@ -905,6 +1052,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_off">ĐŅĐ°ĐšĐŗŅаваĐģŅĐŊŅĐē Shorts адĐŊОвŅŅŅа ĐŋŅŅ ĐˇĐ°ĐŋŅŅĐēŅ ĐŋŅĐ°ĐŗŅаĐŧŅ</string>
|
||||
</patch>
|
||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||
<string name="revanced_shorts_autoplay_title">ĐвŅОвОŅĐŋŅОиСвĐĩĐ´ĐĩĐŊиĐĩ Shorts</string>
|
||||
<string name="revanced_shorts_autoplay_summary_on">Shorts ĐąŅĐ´ŅŅ Đ˛ĐžŅĐŋŅОиСвОдиŅŅŅŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐĩŅĐēи</string>
|
||||
<string name="revanced_shorts_autoplay_summary_off">Shorts ĐąŅĐ´ŅŅ ĐŋОвŅĐžŅŅŅŅŅŅ</string>
|
||||
<string name="revanced_shorts_autoplay_background_title">ĐвŅОвОŅĐŋŅОиСвĐĩĐ´ĐĩĐŊиĐĩ Shorts в ŅĐžĐŊОвОĐŧ ŅĐĩĐļиĐŧĐĩ</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_on">Shorts в ŅĐžĐŊОвОĐŧ ŅĐĩĐļиĐŧĐĩ ĐąŅĐ´ŅŅ Đ˛ĐžŅĐŋŅОиСвОдиŅŅŅŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐĩŅĐēи</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_off">Shorts в ŅĐžĐŊОвОĐŧ ŅĐĩĐļиĐŧĐĩ ĐąŅĐ´ŅŅ ĐŋОвŅĐžŅŅŅŅŅŅ</string>
|
||||
</patch>
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
<string name="revanced_tablet_layout_title">ĐŖĐēĐģŅŅŅŅŅ ĐŧаĐēĐĩŅ ĐŋĐģаĐŊŅŅŅа</string>
|
||||
@@ -917,12 +1070,38 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">ĐĐŧŅĐŊŅŅĐĩ ŅŅŅĐģŅ ĐŧŅĐŊŅĐŧŅСаваĐŊĐ°ĐŗĐ° ĐŋĐģŅĐĩŅа Ņ ĐŋŅĐ°ĐŗŅаĐŧĐĩ</string>
|
||||
<string name="revanced_miniplayer_type_title">ĐĸŅĐŋ ĐŧŅĐŊŅĐŋĐģŅĐĩŅа</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">ĐĐŊваĐģŅĐ´Ņ</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">ĐŅŅĐŗŅĐŊаĐģ</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Đа СĐŧаŅŅаĐŊĐŊŅ</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">ĐиĐŊиĐŧаĐģŅĐŊŅĐš</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">ĐĐģаĐŊŅŅŅ</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">ĐĄŅŅаŅĐŊŅ 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">ĐĄŅŅаŅĐŊŅ 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">ĐĄŅŅаŅĐŊŅ 3</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">ĐĐēĐģŅŅиŅŅ ĐˇĐ°ĐēŅŅĐŗĐģĐĩĐŊĐŊŅĐĩ ŅĐŗĐģŅ</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">ĐŖĐŗĐģŅ ĐˇĐ°ĐēŅŅĐŗĐģĐĩĐŊŅ</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">ĐŖĐŗĐģŅ ĐēвадŅаŅĐŊŅĐĩ</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">ĐĐēĐģŅŅиŅŅ Đ´Đ˛ĐžĐšĐŊĐžĐĩ ĐŊаĐļаŅиĐĩ и ĐŧаŅŅŅайиŅОваĐŊиĐĩ Ņ ĐŋĐžĐŧĐžŅŅŅŅиĐŋĐēа</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"ĐŖĐēĐģŅŅаĐŊа дСĐĩŅĐŊĐŊĐĩ ÂĢĐŋОдвОКĐŊаĐĩ ĐŊаŅŅŅĐēаĐŊĐŊĐĩÂģ Ņ ÂĢŅŅŅĐŋĐēŅ Đ´ĐģŅ ĐˇĐŧĐĩĐŊŅ ĐŋаĐŧĐĩŅŅÂģ
|
||||
|
||||
âĸ ĐОдвОКĐŊаĐĩ ĐŊаŅŅŅĐēаĐŊĐŊĐĩ, Đēай ĐŋавŅĐģŅŅŅŅŅ ĐŋаĐŧĐĩŅ ĐŧŅĐŊŅ-ĐŋŅĐ°ĐšĐŗŅаваĐģŅĐŊŅĐēа
|
||||
âĸ ĐОдвОКĐŊаĐĩ ĐŊаŅŅŅĐēаĐŊĐŊĐĩ ŅŅŅŅ ŅаС, Đēай адĐŊавŅŅŅ ĐŋĐĩŅŅаĐŋаŅаŅĐēĐžĐ˛Ņ ĐŋаĐŧĐĩŅ"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">ĐвОКĐŊĐžĐĩ ĐŊаĐļаŅиĐĩ и scalewithpinch ĐžŅĐēĐģŅŅĐĩĐŊŅ</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">ĐĐēĐģŅŅиŅŅ ĐŋĐĩŅĐĩŅаŅĐēиваĐŊиĐĩ</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"ĐŖĐēĐģŅŅаĐŊа ĐŋĐĩŅаŅŅĐŗĐ˛Đ°ĐŊĐŊĐĩ Ņ ĐēŅдаĐŊĐŊĐĩ
|
||||
|
||||
ĐŅĐŊŅ-ĐŋŅĐ°ĐšĐŗŅаваĐģŅĐŊŅĐē ĐŧĐžĐļĐŊа ĐŋĐĩŅаŅŅĐŗĐŊŅŅŅ Ņ ĐģŅĐąŅ ĐēŅŅĐžĐē ŅĐēŅаĐŊа"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">ĐĐĩŅĐĩŅаŅĐēиваĐŊиĐĩ ĐžŅĐēĐģŅŅĐĩĐŊĐž</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">ĐĐēĐģŅŅиŅŅ ĐŗĐžŅиСОĐŊŅаĐģŅĐŊŅĐš ĐļĐĩŅŅ ĐŋĐĩŅĐĩŅаŅĐēиваĐŊиŅ</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"ĐŖĐēĐģŅŅаĐŊŅ ĐļŅŅŅ ĐŗĐ°ŅŅСаĐŊŅаĐģŅĐŊĐ°ĐŗĐ° ĐŋĐĩŅаŅŅĐŗĐ˛Đ°ĐŊĐŊŅ
|
||||
|
||||
ĐŅĐŊŅ-ĐŋŅĐ°ĐšĐŗŅаваĐģŅĐŊŅĐē ĐŧĐžĐļĐŊа ĐŋĐĩŅаŅŅĐŗĐŊŅŅŅ ĐˇĐ° ĐŧĐĩĐļŅ ŅĐēŅаĐŊа ŅĐģĐĩва ŅŅ ŅĐŋŅава"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">ĐĐžŅиСОĐŊŅаĐģŅĐŊŅĐš ĐļĐĩŅŅ ĐŋĐĩŅĐĩŅаŅĐēиваĐŊĐ¸Ņ ĐžŅĐēĐģŅŅĐĩĐŊ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">ĐĄĐēŅŅŅŅ ĐēĐŊĐžĐŋĐēŅ ĐˇĐ°ĐēŅŅŅиŅ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">ĐĐŊĐžĐŋĐēа СаĐēŅŅŅĐ¸Ņ ŅĐēŅŅŅа</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">ĐĐŊĐžĐŋĐēа СаĐēŅŅŅĐ¸Ņ ĐžŅОйŅаĐļаĐĩŅŅŅ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ ŅĐ°ĐˇĐŗĐžŅŅваĐŊĐŊŅ Ņ ĐˇĐ°ĐēŅŅŅŅŅ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"ĐĐŊĐžĐŋĐēŅ ŅŅ
аваĐŊŅ
|
||||
|
||||
ĐŅаŅŅĐŗĐ˛Đ°ĐšŅĐĩ ĐŋаĐģŅŅаĐŧ, Đēай ŅĐ°ĐˇĐŗĐ°ŅĐŊŅŅŅ Đ°ĐąĐž СаĐēŅŅŅŅ"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">ĐаĐēаСваŅŅŅа ĐēĐŊĐžĐŋĐēŅ ŅĐ°ĐˇĐŗĐ°ŅĐŊŅŅŅ Ņ ĐˇĐ°ĐēŅŅŅŅ</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">ĐĄŅ
аваŅŅ ĐŋадŅŅĐēŅŅŅ</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">ĐадŅŅĐēŅŅŅ ŅŅ
аваĐŊŅŅ</string>
|
||||
@@ -930,6 +1109,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_title">ĐĄŅ
аваŅŅ ĐēĐŊĐžĐŋĐēŅ ĐŋĐĩŅаŅ
ĐžĐ´Ņ ĐŊаĐŋĐĩŅад Ņ ĐŊаСад</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">ĐĐĩŅаŅ
Од ĐŊаĐŋĐĩŅад Ņ ĐŊаСад ŅŅ
аваĐŊŅ</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">ĐаĐēаСваĐĩŅŅа ĐŋĐĩŅаŅ
Од ĐŊаĐŋĐĩŅад Ņ ĐŊаСад</string>
|
||||
<string name="revanced_miniplayer_width_dip_title">РаСĐŧĐĩŅ ĐŋĐž ŅĐŧĐžĐģŅаĐŊиŅ</string>
|
||||
<string name="revanced_miniplayer_width_dip_summary">ĐаŅаĐģŅĐŊĐ°Ņ ŅаСĐŧĐĩŅ ĐŊа ŅĐēŅаĐŊĐĩ в ĐŋиĐēŅĐĩĐģŅŅ
</string>
|
||||
<string name="revanced_miniplayer_width_dip_invalid_toast">РаСĐŧĐĩŅ ĐŋиĐēŅĐĩĐģŅ Đ´ĐžĐģĐļĐĩĐŊ ĐąŅŅŅ Đ˛ ĐŋŅĐĩĐ´ĐĩĐģаŅ
%1$s и %2$s</string>
|
||||
<string name="revanced_miniplayer_opacity_title">ĐĐĩĐŋŅаСŅŅŅŅаŅŅŅ ĐŊаĐēĐģадаĐŊĐŊŅ</string>
|
||||
<string name="revanced_miniplayer_opacity_summary">ĐĐŊаŅŅĐŊĐŊĐĩ ĐŊĐĩĐŋŅаСŅŅŅŅаŅŅŅ ĐŋаĐŧŅĐļ 0-100, дСĐĩ 0 - ĐŋŅаСŅŅŅŅŅ</string>
|
||||
<string name="revanced_miniplayer_opacity_invalid_toast">ĐĐĩĐŋŅаСŅŅŅŅаŅŅŅ ĐŊаĐēĐģадаĐŊĐŊŅ ĐŧŅĐŊŅ-ĐŋĐģŅĐĩŅа ĐŋавŅĐŊĐŊа ĐąŅŅŅ Đ°Đ´ 0 да 100</string>
|
||||
@@ -945,11 +1127,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_custom_color_summary_off">ĐаĐēаСаĐŊŅ ĐˇŅŅ
ОдĐŊŅ ĐēĐžĐģĐĩŅ ĐŋаĐŊŅĐģŅ ĐŋĐžŅŅĐēŅ</string>
|
||||
<string name="revanced_seekbar_custom_color_value_title">ĐаŅŅŅŅаĐģŅĐŊŅŅĐēŅ ĐēĐžĐģĐĩŅ ĐŋаĐŊŅĐģŅ ĐŋĐžŅŅĐēŅ</string>
|
||||
<string name="revanced_seekbar_custom_color_value_summary">ĐĐžĐģĐĩŅ ĐŋаĐŊŅĐģŅ ĐŋĐžŅŅĐēŅ</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">ĐĐĩвĐĩŅĐŊĐžĐĩ СĐŊаŅĐĩĐŊиĐĩ ŅвĐĩŅа ĐŋĐžĐģСŅĐŊĐēа ĐŋŅĐžĐŗŅĐĩŅŅа</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">ĐĐąŅŅ
Од айĐŧĐĩĐļаваĐŊĐŊŅŅ ŅŅĐŗŅŅĐŊŅ</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">ĐŅĐēаŅŅŅŅаĐŊĐŊĐĩ Ņ
аŅŅа вŅдаŅŅŅĐ°Ņ yt4.ggpht.com</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">ĐŅĐēаŅŅŅŅаĐŊĐŊĐĩ аŅŅĐŗŅĐŊаĐģŅĐŊĐ°ĐŗĐ° Ņ
аŅŅа вŅдаŅŅŅаŅ\n\nĐŖĐēĐģŅŅŅĐŊĐŊĐĩ ĐŗŅŅаК ĐžĐŋŅŅŅ ĐŧĐžĐļа вŅĐŋŅавŅŅŅ Đ°Đ´ŅŅŅĐŊŅŅаŅŅŅŅ Đ˛ŅдаŅŅŅŅ, ŅĐēŅŅ ĐˇĐ°ĐąĐģаĐēŅŅаваĐŊŅŅ Ņ ĐŊĐĩĐēаŅĐžŅŅŅ
ŅŅĐŗŅŅĐŊаŅ
</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"ĐŅĐēаŅŅŅŅĐžŅваĐĩŅŅа аŅŅĐŗŅĐŊаĐģŅĐŊŅ Ņ
ĐžŅŅ ĐŧаĐģŅĐŊĐēаŅ
|
||||
|
||||
ĐŖĐēĐģŅŅŅĐŊĐŊĐĩ ĐŗŅŅĐ°ĐŗĐ° ĐŧĐžĐļа вŅĐŋŅавŅŅŅ ĐŋŅайĐģĐĩĐŧŅ Đˇ адŅŅŅĐŊаŅŅŅ ĐŧаĐģŅĐŊĐēаŅ, ŅĐēŅŅ ĐˇĐ°ĐąĐģаĐēаваĐŊŅ Ņ ĐŊĐĩĐēаŅĐžŅŅŅ
ŅŅĐŗŅŅĐŊаŅ
"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -964,7 +1149,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & ĐŅŅĐŗŅĐŊаĐģŅĐŊŅŅ ĐŧŅĐŊŅŅŅŅŅŅ</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 +1182,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">ĐŖĐ˛Đ°ĐŗĐ°</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">ĐаŅа ĐŗŅŅŅĐžŅŅŅ ĐŋŅĐ°ĐŗĐģŅĐ´Ņ ĐŊĐĩ СаŅ
ĐžŅваĐĩŅŅа.<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 +1192,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">ĐаĐŧĐĩŅŅ ĐŋадĐŧаĐŊĐŊĐ°ĐŗĐ° ĐŋŅŅĐģадŅ</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">ĐаĐŧĐĩŅŅ ĐŋŅŅĐģĐ°Đ´Ņ ĐŋадŅОйĐģĐĩĐŊŅŅ\n\nĐĐžĐļа ĐąŅŅŅ ŅаСйĐģаĐēŅŅаваĐŊа йОĐģŅŅ Đ˛ŅŅĐžĐēĐ°Ņ ŅĐēаŅŅŅ Đ˛ŅĐ´Ņа, аĐģĐĩ Đ˛Ņ ĐŧĐžĐļаŅĐĩ ŅŅŅŅĐēĐŊŅŅŅа С СаŅŅŅĐŧĐēаĐŧŅ ĐŋŅŅ ĐŋŅĐ°ĐšĐŗŅаваĐŊĐŊŅ, ĐŋĐ°ĐŗĐ°ŅŅŅĐŊĐŊĐĩĐŧ ŅаŅŅ Đ°ŅŅаĐŊĐžĐŧĐŊаК ĐŋŅаŅŅ Ņ ĐŊĐĩвŅĐ´ĐžĐŧŅĐŧŅ ĐŋайОŅĐŊŅĐŧŅ ŅŅĐĩĐēŅаĐŧŅ</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">ĐаĐŧĐĩŅŅ ĐŋŅŅĐģĐ°Đ´Ņ ĐŊĐĩ ĐŋадŅОйĐģĐĩĐŊŅŅ\n\nĐŖĐēĐģŅŅŅĐŊĐŊĐĩ ĐŗŅŅĐ°ĐŗĐ° ĐŧĐžĐļа ŅаСйĐģаĐēŅŅаваŅŅ ĐąĐžĐģŅŅ Đ˛ŅŅĐžĐēŅŅ ŅĐēаŅŅŅ Đ˛ŅĐ´Ņа</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"ĐаĐŧĐĩŅŅ ĐŋŅŅĐģĐ°Đ´Ņ ĐŋадŅОйĐģĐĩĐŊŅ
|
||||
|
||||
ĐĐ°ĐŗŅŅĐŧа, ĐąŅĐ´ŅŅŅ ŅаСйĐģаĐēаваĐŊŅ ĐąĐžĐģŅŅ Đ˛ŅŅĐžĐēŅŅ ŅĐēаŅŅŅ Đ˛ŅĐ´Ņа, аĐģĐĩ Đ˛Ņ ĐŧĐžĐļаŅĐĩ ŅŅŅŅĐēĐŊŅŅŅа С СаŅĐēаĐŊĐŊĐĩĐŧ вŅĐ´Ņа, ĐŗĐžŅŅŅĐŧ ŅŅŅĐŧŅĐŊаĐŧ ŅĐģŅĐļĐąŅ ĐąĐ°ŅаŅŅŅ Ņ ĐŊĐĩвŅĐ´ĐžĐŧŅĐŧŅ ĐŋайОŅĐŊŅĐŧŅ ŅŅĐĩĐēŅаĐŧŅ"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"ĐаĐŧĐĩŅŅ ĐŋŅŅĐģĐ°Đ´Ņ ĐŊĐĩ ĐŋадŅОйĐģĐĩĐŊŅ
|
||||
|
||||
ĐŖĐēĐģŅŅŅĐŊĐŊĐĩ ĐŗŅŅĐ°ĐŗĐ° ĐŧĐžĐļа ŅаСйĐģаĐēаваŅŅ ĐąĐžĐģŅŅ Đ˛ŅŅĐžĐēŅŅ ŅĐēаŅŅŅ Đ˛ŅĐ´Ņа"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">ĐŖĐēĐģŅŅŅĐŊĐŊĐĩ ĐŗŅŅĐ°ĐŗĐ° ĐŧĐžĐļа ĐŋŅŅвĐĩŅŅŅ Đ´Đ° ĐŋŅŅĐŋŅĐŊĐēĐ°Ņ ĐŋŅĐ°ĐšĐŗŅаваĐŊĐŊŅ Đ˛ŅĐ´Ņа, ĐŋĐ°ĐŗĐ°ŅŅŅĐŊĐŊŅ ŅŅŅĐŧŅĐŊŅ ŅĐģŅĐļĐąŅ ĐąĐ°ŅаŅŅŅ Ņ ĐŊĐĩвŅĐ´ĐžĐŧŅŅ
ĐŋайОŅĐŊŅŅ
ŅŅĐĩĐēŅаŅ.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1030,6 +1224,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_on">ĐĸаĐēŅŅĐģŅĐŊŅŅ ŅŅĐŊĐēŅŅŅ Đ°Đ´ĐēĐģŅŅаĐŊŅ</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">ĐĸаĐēŅŅĐģŅĐŊŅŅ ŅŅĐŗĐŊаĐģŅ ŅĐēĐģŅŅаĐŊŅ</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">ĐŅĐŧŅŅаĐŊаĐĩ аŅŅĐŗŅĐŊаĐģŅĐŊаĐĩ аŅĐ´ŅŅ</string>
|
||||
<string name="revanced_force_original_audio_summary_on">ĐŅĐēаŅŅŅŅаĐŊĐŊĐĩ аŅŅĐŗŅĐŊаĐģŅĐŊĐ°ĐŗĐ° аŅĐ´ŅŅ</string>
|
||||
<string name="revanced_force_original_audio_summary_off">ĐŅĐēаŅŅŅŅаĐŊĐŊĐĩ аŅĐ´ŅŅ Đŋа СĐŧаŅŅаĐŊĐŊŅ</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">ĐŅŅĐž</string>
|
||||
@@ -1039,7 +1238,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_video_quality_default_wifi_title">ĐĄŅаĐŊдаŅŅĐŊĐ°Ņ ŅĐēаŅŅŅ Đ˛ŅĐ´Ņа Ņ ŅĐĩŅŅŅ Wi-Fi</string>
|
||||
<string name="revanced_video_quality_default_mobile_title">ĐĄŅаĐŊдаŅŅĐŊĐ°Ņ ŅĐēаŅŅŅ Đ˛ŅĐ´Ņа Ņ ĐŧайŅĐģŅĐŊаК ŅĐĩŅŅŅ</string>
|
||||
<string name="revanced_remember_video_quality_mobile">ĐŧайŅĐģŅĐŊŅ</string>
|
||||
<string name="revanced_remember_video_quality_wifi">Wi-Fi</string>
|
||||
<string name="revanced_remember_video_quality_wifi">wi-fi</string>
|
||||
<string name="revanced_remember_video_quality_toast">ĐĄŅаĐŊдаŅŅĐŊĐ°Ņ ŅĐēаŅŅŅ %1$s СĐŧĐĩĐŊĐĩĐŊа ĐŊа: %2$s</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
@@ -1048,9 +1247,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">ĐĐŊĐžĐŋĐēа ĐŊĐĩ ĐŋаĐēаСваĐĩŅŅа</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">ĐĐĩĐŊŅ ĐŋĐžĐģŅСОваŅĐĩĐģŅŅĐēОК ŅĐēĐžŅĐžŅŅи вОŅĐŋŅОиСвĐĩĐ´ĐĩĐŊиŅ</string>
|
||||
<string name="revanced_custom_speed_menu_summary_on">ĐĐĩĐŊŅ ĐŋĐžĐģŅСОваŅĐĩĐģŅŅĐēОК ŅĐēĐžŅĐžŅŅи ĐžŅОйŅаĐļаĐĩŅŅŅ</string>
|
||||
<string name="revanced_custom_speed_menu_summary_off">ĐĐĩĐŊŅ ĐŋĐžĐģŅСОваŅĐĩĐģŅŅĐēОК ŅĐēĐžŅĐžŅŅи ĐŊĐĩ ĐžŅОйŅаĐļаĐĩŅŅŅ</string>
|
||||
<string name="revanced_custom_playback_speeds_title">ĐаŅŅŅŅаĐģŅĐŊŅŅĐēŅŅ Ņ
ŅŅĐēаŅŅŅ ĐŋŅĐ°ĐšĐŗŅаваĐŊĐŊŅ</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">ĐаŅŅŅŅаĐģŅĐŊŅŅĐēŅŅ Ņ
ŅŅĐēаŅŅŅ ĐŋавŅĐŊĐŊŅ ĐąŅŅŅ ĐŧĐĩĐŊŅ ĐˇĐ° %s. ĐŅĐēаŅŅŅŅаĐŊĐŊĐĩ СĐŊаŅŅĐŊĐŊŅŅ Đŋа СĐŧаŅŅаĐŊĐŊŅ.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">ĐŅĐŋŅавŅĐģŅĐŊŅŅ ĐēаŅŅŅŅаĐģŅĐŊŅŅĐēŅŅ Ņ
ŅŅĐēаŅŅŅ ĐŋŅĐ°ĐšĐŗŅаваĐŊĐŊŅ. ĐŅĐēаŅŅŅŅаĐŊĐŊĐĩ СĐŊаŅŅĐŊĐŊŅŅ Đŋа СĐŧаŅŅаĐŊĐŊŅ.</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">ĐОйавŅŅĐĩ иĐģи иСĐŧĐĩĐŊиŅĐĩ ĐŋĐžĐģŅСОваŅĐĩĐģŅŅĐēŅŅ ŅĐēĐžŅĐžŅŅŅ Đ˛ĐžŅĐŋŅОиСвĐĩĐ´ĐĩĐŊиŅ</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">ĐĐĩŅŅаĐŊдаŅŅĐŊŅŅ Ņ
ŅŅĐēаŅŅŅ ĐŋавŅĐŊĐŊŅ ĐąŅŅŅ ĐŧĐĩĐŊŅ ĐˇĐ° %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">ĐĐĩŅаĐŋŅаŅĐ´ĐŊŅŅ ĐŊĐĩŅŅаĐŊдаŅŅĐŊŅŅ Ņ
ŅŅĐēаŅŅŅ ĐŋŅĐ°ĐšĐŗŅаваĐŊĐŊŅ</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">ĐŅŅĐž</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1071,7 +1274,82 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_slide_to_seek_summary_off">ĐĄĐģаКд Đ´ĐģŅ ĐŋĐžŅŅĐēŅ ĐŊĐĩ ŅĐēĐģŅŅаĐŊŅ</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_screen_title">ĐОддĐĩĐģŅваŅŅ ĐŋĐžŅĐžĐēи видĐĩĐž</string>
|
||||
<string name="revanced_spoof_video_streams_screen_summary">ĐĐŧиŅиŅŅĐšŅĐĩ ĐŋĐžŅĐžĐēи видĐĩĐž ĐēĐģиĐĩĐŊŅОв, ŅŅĐžĐąŅ ĐŋŅĐĩĐ´ĐžŅвŅаŅиŅŅ ĐŋŅОйĐģĐĩĐŧŅ Ņ Đ˛ĐžŅĐŋŅОиСвĐĩĐ´ĐĩĐŊиĐĩĐŧ</string>
|
||||
<string name="revanced_spoof_video_streams_title">ĐОддĐĩĐģŅваŅŅ ĐŋĐžŅĐžĐēи видĐĩĐž</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">ĐĐžŅĐžĐēи видĐĩĐž ĐŋОддĐĩĐģаĐŊŅ</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"ĐŅĐ´ŅаŅŅŅŅĐŧ ĐŊĐĩ ĐŋадŅОйĐģĐĩĐŊŅ
|
||||
|
||||
ĐŅĐ°ĐšĐŗŅаваĐŊĐŊĐĩ вŅĐ´Ņа ĐŧĐžĐļа ĐŊĐĩ ĐŋŅаŅаваŅŅ"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">ĐĐ´ĐēĐģŅŅŅĐŊĐŊĐĩ ĐŗŅŅаК ĐŊаĐģĐ°Đ´Ņ ĐŧĐžĐļа вŅĐēĐģŅĐēаŅŅ ĐŋŅайĐģĐĩĐŧŅ Đˇ ĐŋŅĐ°ĐšĐŗŅаваĐŊĐŊĐĩĐŧ вŅĐ´Ņа.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">ĐĐģиĐĩĐŊŅ ĐŋĐž ŅĐŧĐžĐģŅаĐŊиŅ</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">ĐŅиĐŊŅдиŅĐĩĐģŅĐŊĐž AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ĐидĐĩĐžĐēОдĐĩĐē ĐŋŅиĐŊŅдиŅĐĩĐģŅĐŊĐž ŅŅŅаĐŊОвĐģĐĩĐŊ в AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ĐидĐĩĐžĐēОдĐĩĐē ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐĩŅŅŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐĩŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"ĐŖĐēĐģŅŅŅĐŊĐŊĐĩ ĐŗŅŅĐ°ĐŗĐ° ĐŧĐžĐļа ĐŋаĐģĐĩĐŋŅŅŅŅ ŅŅŅĐŧŅĐŊ ŅĐģŅĐļĐąŅ ĐąĐ°ŅаŅŅŅ Ņ Đ˛ŅĐŋŅавŅŅŅ ĐˇĐ°ŅĐēаĐŊĐŊĐĩ вŅĐ´Ņа.
|
||||
|
||||
AVC ĐŧаĐĩ ĐŧаĐēŅŅĐŧаĐģŅĐŊŅŅ ŅаСдСŅĐģŅĐģŅĐŊаŅŅŅ 1080p, аŅĐ´ŅŅĐēадŅĐēĐ°Ņ Opus ĐŊĐĩдаŅŅŅĐŋĐŊŅ, Ņ Đ˛ŅĐ´Ņа ĐąŅдСĐĩ вŅĐēаŅŅŅŅĐžŅваŅŅ ĐąĐžĐģŅŅ ĐĐŊŅŅŅĐŊŅŅ-даĐŊŅŅ
, ŅŅĐŧ VP9 айО AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">ĐайОŅĐŊŅŅ ŅŅĐĩĐēŅŅ ĐŋадĐŧĐĩĐŊŅ iOS</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"âĸ ĐŅŅваŅĐŊŅŅ Đ´ĐˇŅŅŅŅŅŅ Đ˛ŅĐ´Ņа ĐŧĐžĐŗŅŅŅ ĐŊĐĩ ĐŋŅĐ°ĐšĐŗŅаваŅŅа
|
||||
âĸ ĐŅĐ´Ņа СаĐēаĐŊŅваŅŅŅа ĐŊа 1 ŅĐĩĐēŅĐŊĐ´Ņ ŅаĐŊĐĩĐš"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">ĐОйОŅĐŊŅĐĩ ŅŅŅĐĩĐēŅŅ ĐŋОдĐŧĐĩĐŊŅ Android VR</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"âĸ ĐСŅŅŅŅŅŅ Đ˛ŅĐ´Ņа ĐŧĐžĐŗŅŅŅ ĐŊĐĩ ĐŋŅĐ°ĐšĐŗŅаваŅŅа
|
||||
âĸ ĐĸŅаĐŊŅĐģŅŅŅŅ Ņ ĐŋŅаĐŧŅĐŧ ŅŅŅŅŅ ĐŋаŅŅĐŊаŅŅŅа С ĐŋаŅаŅĐēŅ
|
||||
âĸ ĐŅĐ´Ņа СаĐēаĐŊŅваŅŅŅа ĐŊа 1 ŅĐĩĐēŅĐŊĐ´Ņ ŅаĐŊĐĩĐš"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">Đ¯ĐˇŅĐē ĐŋĐžŅĐžĐēа аŅдиО ĐŋĐž ŅĐŧĐžĐģŅаĐŊиŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">Đ¯ĐˇŅĐē ĐŋŅиĐģĐžĐļĐĩĐŊиŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">ĐŅайŅĐēиК</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">ĐСĐĩŅйаКдĐļаĐŊŅĐēиК</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">ĐĐžĐģĐŗĐ°ŅŅĐēиК</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">ĐĐĩĐŊĐŗĐ°ĐģŅŅĐēиК</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">ĐаŅаĐģĐžĐŊŅĐēиК</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">ЧĐĩŅŅĐēиК</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">ĐаŅŅĐēиК</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">ĐĐĩĐŧĐĩŅĐēиК</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">ĐŅĐĩŅĐĩŅĐēиК</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">ĐĐŊĐŗĐģŅĐšŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">ĐŅĐŋаĐŊŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">ĐŅŅĐžĐŊŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">ФаŅŅŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">ФŅĐŊŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">ФŅаĐŊŅŅСŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">ĐŅŅŅаŅŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">ĐĨŅĐŊĐ´Ņ</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">ĐĨĐžŅваŅŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">ĐĐĩĐŊĐŗĐĩŅŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">ĐĐŊдаĐŊĐĩСŅĐšŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">ĐŅаĐģŅŅĐŊŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Đ¯ĐŋĐžĐŊŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">ĐаСаŅ
ŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">ĐĐžŅŅĐšŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">ĐŅŅĐžŅŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">ĐаŅŅŅŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">ĐаĐēĐĩĐ´ĐžĐŊŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">ĐĐžĐŊĐŗĐžĐģŅŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">ĐаŅаŅŅ
Ņ</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">ĐаĐģаКŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">ĐŅŅĐŧаĐŊŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">ĐŅĐ´ŅĐģаĐŊĐ´ŅĐēиК</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">ĐŅŅŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">ĐаĐŊĐ´ĐļайŅĐēиК</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">ĐĐžĐģŅŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">ĐаŅŅŅĐŗĐ°ĐģŅŅĐēĐ°Ņ (ĐŅаСŅĐģŅŅ)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">ĐаŅŅŅĐŗĐ°ĐģŅŅĐēĐ°Ņ (ĐаŅŅŅĐŗĐ°ĐģŅŅ)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Đ ŅĐŧŅĐŊŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Đ ŅŅŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">ĐĄĐģОваŅĐēиŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">ĐĄĐģОвĐĩĐŊŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">ĐĄĐĩŅĐąŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">ШвĐĩŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">ĐĄŅаŅ
ŅĐģŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">ĐĸаĐŧŅĐģŅŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">ĐĸŅĐģŅĐŗŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">ĐĸаКŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">ĐĸŅŅŅŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">ĐŖĐēŅаŅĐŊŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">ĐŖŅĐ´Ņ</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">ĐŅĐĩŅĐŊаĐŧŅĐēаŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">ĐŅŅаКŅĐēаŅ</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1081,8 +1359,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">ĐŅĐ´ŅŅŅŅĐēĐģаĐŧа ŅаСйĐģаĐēŅŅаваĐŊа</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s ĐŊĐĩдаŅŅŅĐŋĐŊŅ. Đ ŅĐēĐģаĐŧа ĐŧĐžĐļа ĐŋаĐēаСваŅŅа. ĐаŅĐŋŅайŅĐšŅĐĩ ĐŋĐĩŅаĐēĐģŅŅŅŅŅа ĐŊа ŅĐŊŅŅŅ ŅĐģŅĐļĐąŅ ĐąĐģаĐēŅŅĐžŅĐēŅ ŅŅĐēĐģаĐŧŅ Ņ ĐŊаĐģадаŅ
.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">ĐĄĐĩŅвĐĩŅ %s вŅŅĐŊŅŅ ĐŋаĐŧŅĐģĐēŅ. Đ ŅĐēĐģаĐŧа ĐŧĐžĐļа ĐŋаĐēаСваŅŅа. ĐаŅĐŋŅайŅĐšŅĐĩ ĐŋĐĩŅаĐēĐģŅŅŅŅŅа ĐŊа ŅĐŊŅŅŅ ŅĐģŅĐļĐąŅ ĐąĐģаĐēŅŅĐžŅĐēŅ ŅŅĐēĐģаĐŧŅ Ņ ĐŊаĐģадаŅ
.</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s ĐŊĐĩдаŅŅŅĐŋĐŊŅ, ŅŅĐēĐģаĐŧа ĐŧĐžĐļа ĐŋаĐēаСваŅŅа. ĐаŅĐŋŅайŅĐšŅĐĩ СĐŧŅĐŊŅŅŅ ŅĐģŅĐļĐąŅ ĐąĐģаĐēаваĐŊĐŊŅ ŅŅĐēĐģаĐŧŅ Ņ ĐŊаĐģадаŅ
.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s вŅĐ´Đ°Ņ ĐŋаĐŧŅĐģĐēŅ, ŅŅĐēĐģаĐŧа ĐŧĐžĐļа ĐŋаĐēаСваŅŅа. ĐаŅĐŋŅайŅĐšŅĐĩ СĐŧŅĐŊŅŅŅ ŅĐģŅĐļĐąŅ ĐąĐģаĐēаваĐŊĐŊŅ ŅŅĐēĐģаĐŧŅ Ņ ĐŊаĐģадаŅ
.</string>
|
||||
<string name="revanced_block_embedded_ads_title">ĐĐģаĐēŅŅаваŅŅ ŅĐąŅдаваĐŊŅŅ Đ˛ŅĐ´ŅаŅŅĐēĐģаĐŧŅ</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">ĐĐŊваĐģŅĐ´Ņ</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">ХвĐĩŅĐģĐ°Đ˛Ņ ĐŋŅĐžĐēŅŅ</string>
|
||||
@@ -1114,6 +1392,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings">ĐаĐģĐ°Đ´Ņ ReVanced</string>
|
||||
<string name="revanced_about_title">ĐŅа ĐŊаŅ</string>
|
||||
<string name="revanced_about_summary">РаŅĐēаĐļŅŅŅ âReVancedâ</string>
|
||||
<string name="revanced_ads_screen_title">ĐĐą\"ŅвŅ</string>
|
||||
<string name="revanced_ads_screen_summary">ĐаĐģĐ°Đ´Ņ ĐąĐģаĐēŅŅĐžŅĐēŅ ŅŅĐēĐģаĐŧŅ</string>
|
||||
<string name="revanced_chat_screen_title">ЧаŅ</string>
|
||||
|
||||
@@ -1,34 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
Note: All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
This is because Crowdin requires temporarily flattening this file and removing the <app> and <patch> elements.
|
||||
|
||||
# General guidelines and information for translating
|
||||
|
||||
## Strings parameters can be reordered to allow more flexible translations if the grammar should be changed.
|
||||
Strings with new lines must be raw strings where they're wrapped in quotes and new lines are not encoded.
|
||||
Raw strings still requires escaping embedded double quotes but escaping embedded single quotes is optional.
|
||||
|
||||
For example, the patches string:
|
||||
<string name="revanced_patches_string">You will arrive at %1$s in %2$s hours from now</string>
|
||||
Could be translated to another language using a rearranged grammar:
|
||||
<string name="revanced_patches_string">You will arrive %2$s hours from now at %1$s</string>
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
For Manager strings:
|
||||
You will arrive at ${destination} in ${count} hours from now
|
||||
Could be rearranged by changing the order of the ${} parameters:
|
||||
You will arrive ${count} hours from now at ${destination}
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
|
||||
Reordering is particularly relevant when translating into right to left languages, or for any language with grammar that is noticeably different from English.
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
## Single and double quotation marks must be escaped for patch strings (Manager does not require escaping any quotes).
|
||||
|
||||
All _patches_ single and double quotation marks must be escaped as \" or \'
|
||||
Forgetting to do this will cause that string to appear in app with no quotation characters.
|
||||
|
||||
Correct:
|
||||
<string name="revanced_string">You\'re correct. This is the \"correct\" way and this text will appear as expected in the app</string>
|
||||
Not correct:
|
||||
<string name="revanced_string">You're not correct. This is not the "correct" way and this text will not appear as expected the in app</string>
|
||||
-->
|
||||
<resources>
|
||||
<app id="shared">
|
||||
@@ -44,12 +33,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">ĐаŅаŅа ĐŊа ĐēĐžĐŧĐŋиĐģаŅĐ¸Ņ ĐŊа APK Đĩ ĐŋОвŅĐĩĐ´ĐĩĐŊа</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_title">ReVanced</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">ĐŅĐēаŅĐĩ Đģи да ĐŋŅОдŅĐģĐļиŅĐĩ?</string>
|
||||
<string name="revanced_settings_reset">ĐŅĐģиŅаĐŊĐĩ</string>
|
||||
<string name="revanced_settings_reset">ĐŅСŅŅаĐŊОви</string>
|
||||
<string name="revanced_settings_restart_title">Đ ĐĩŅŅаŅŅиŅаК и ĐžĐŋŅĐĩŅĐŊи</string>
|
||||
<string name="revanced_settings_restart">Đ ĐĩŅŅаŅŅиŅаĐŊĐĩ</string>
|
||||
<string name="revanced_settings_import">ĐĐŧĐŋĐžŅŅиŅаĐŊĐĩ</string>
|
||||
<string name="revanced_settings_import_copy">ĐĐžĐŋиŅаĐŊĐĩ</string>
|
||||
<string name="revanced_settings_import_copy">ĐĐžĐŋиŅаК</string>
|
||||
<string name="revanced_settings_import_reset">ĐаŅŅŅОКĐēиŅĐĩ ĐŊа ReVanced ĐąŅŅ
а ĐŊŅĐģиŅаĐŊи</string>
|
||||
<string name="revanced_settings_import_success">ĐĄĐģĐĩĐ´ĐŊиŅĐĩ ĐŊаŅŅŅОКĐēи ĐąŅŅ
а иĐŧĐŋĐžŅŅиŅаĐŊи ŅŅĐŋĐĩŅĐŊĐž: %d</string>
|
||||
<string name="revanced_settings_import_failure_parse">ĐĐŧĐŋĐžŅŅиŅаĐŊĐĩŅĐž ĐąĐĩŅĐĩ ĐŊĐĩŅŅĐŋĐĩŅĐŊĐž: %s</string>
|
||||
@@ -67,15 +57,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">GmsCore ĐŊĐĩ Đĩ иĐŊŅŅаĐģиŅаĐŊ. ĐĐŊŅŅаĐģиŅаКŅĐĩ ĐŗĐž.</string>
|
||||
<string name="gms_core_dialog_title">ĐŅĐļĐŊĐž Đĩ Đ´ĐĩĐšŅŅвиĐĩ</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore ĐŊĐĩ ĐŧĐžĐļĐĩ да ŅайОŅи вŅв ŅĐžĐŊОв ŅĐĩĐļиĐŧ.\n\nĐĐžĐģŅ, ŅĐģĐĩдваКŅĐĩ ŅŅĐēОвОдŅŅвОŅĐž \"Don\'t kill my appâ Са ваŅĐ¸Ņ ŅĐĩĐģĐĩŅĐžĐŊ и ĐŋŅиĐģĐžĐļĐĩŅĐĩ иĐŊŅŅŅŅĐēŅииŅĐĩ ĐŊа MicroG.\n\nĐĸОва Đĩ ĐŊĐĩОйŅ
ОдиĐŧĐž, Са да ŅайОŅи ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore ĐŊŅĐŧа ŅаСŅĐĩŅĐĩĐŊиĐĩ да ŅайОŅи вŅв ŅĐžĐŊОв ŅĐĩĐļиĐŧ.
|
||||
|
||||
ĐĄĐģĐĩдваКŅĐĩ ŅŅĐēОвОдŅŅвОŅĐž \"ĐĐĩ ŅйиваК ĐŧĐžĐĩŅĐž ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩ\" Са ваŅĐ¸Ņ ŅĐĩĐģĐĩŅĐžĐŊ и ĐŋŅиĐģĐžĐļĐĩŅĐĩ иĐŊŅŅŅŅĐēŅииŅĐĩ ĐēŅĐŧ ваŅаŅа иĐŊŅŅаĐģаŅĐ¸Ņ ĐŊа MicroG.
|
||||
|
||||
ĐĸОва Đĩ ĐŊĐĩОйŅ
ОдиĐŧĐž, Са да ŅайОŅи ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž."</string>
|
||||
<string name="gms_core_dialog_open_website_text">ĐŅвОŅи ŅаКŅа</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">Đа да иСйĐĩĐŗĐŊĐĩŅĐĩ ĐŋŅОйĐģĐĩĐŧи Đĩ ĐŊĐĩОйŅ
ОдиĐŧĐž да иСĐēĐģŅŅиŅĐĩ ĐžĐŋŅиĐŧиСаŅиŅŅа ĐŊа йаŅĐĩŅиŅŅа Са GmsCore.\n\nĐаŅиŅĐŊĐĩŅĐĩ \"ĐŅОдОĐģĐļи\" и иСĐēŅŅĐĩŅĐĩ ĐžĐŋŅиĐŧиСаŅиŅŅа ĐŊа йаŅĐĩŅиŅŅа.</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"ĐĐŋŅиĐŧиСаŅииŅĐĩ ĐŊа йаŅĐĩŅиŅŅа Са MicroG GmsCore ŅŅŅйва да ĐąŅĐ´Đ°Ņ Đ´ĐĩаĐēŅивиŅаĐŊи, Са да ŅĐĩ иСйĐĩĐŗĐŊĐ°Ņ ĐŋŅОйĐģĐĩĐŧи.
|
||||
|
||||
ĐĐĩаĐēŅивиŅаĐŊĐĩŅĐž ĐŊа ĐžĐŋŅиĐŧиСаŅииŅĐĩ ĐŊа йаŅĐĩŅиŅŅа Са MicroG ĐŊŅĐŧа да ĐŋОвĐģиŅĐĩ ĐžŅŅиŅаŅĐĩĐģĐŊĐž ĐŊа иСĐŋĐžĐģСваĐŊĐĩŅĐž ĐŊа йаŅĐĩŅиŅŅа.
|
||||
|
||||
ĐĐžĐēĐžŅĐŊĐĩŅĐĩ ĐąŅŅĐžĐŊа Са ĐŋŅОдŅĐģĐļаваĐŊĐĩ и ŅаСŅĐĩŅĐĩŅĐĩ ĐŋŅĐžĐŧĐĩĐŊи в ĐžĐŋŅиĐŧиСаŅиŅŅа."</string>
|
||||
<string name="gms_core_dialog_continue_text">ĐŅОдŅĐģĐļи</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_screen_00_about_title">ĐŅĐŊĐžŅĐŊĐž</string>
|
||||
<string name="revanced_settings_screen_00_about_title">Đа ĐŋŅĐžĐŗŅаĐŧаŅа</string>
|
||||
<string name="revanced_settings_screen_01_ads_title">Đ ĐĩĐēĐģаĐŧи</string>
|
||||
<string name="revanced_settings_screen_02_alt_thumbnails_title">ĐĐģŅĐĩŅĐŊаŅивĐŊи ĐŧиĐŊиаŅŅŅи</string>
|
||||
<string name="revanced_settings_screen_03_feed_title">ĐĐžŅĐžĐē</string>
|
||||
@@ -106,7 +104,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">ĐĐžĐēаĐļи ŅиŅŅĐĩĐŧĐŊĐž ŅŅОйŅĐĩĐŊиĐĩ ĐŋŅи ReVanced ĐŗŅĐĩŅĐēа</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">ХиŅŅĐĩĐŧĐŊĐž ŅŅОйŅĐĩĐŊиĐĩ ŅĐĩ ĐąŅĐ´Đĩ ĐŋĐžĐēаСаĐŊĐž, аĐēĐž ŅĐĩ ĐŋĐžŅви ĐŗŅĐĩŅĐēа</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">ХиŅŅĐĩĐŧĐŊĐž ŅŅОйŅĐĩĐŊиĐĩ ĐŊŅĐŧа да ĐąŅĐ´Đĩ ĐŋĐžĐēаСаĐŊĐž, аĐēĐž ŅĐĩ ĐŋĐžŅви ĐŗŅĐĩŅĐēа</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">ĐĐēĐž иСĐēĐģŅŅиŅĐĩ ŅиŅŅĐĩĐŧĐŊиŅĐĩ ŅŅОйŅĐĩĐŊиŅ, ŅĐĩ ŅĐēŅиĐĩŅĐĩ вŅиŅĐēи ŅвĐĩĐ´ĐžĐŧĐģĐĩĐŊĐ¸Ņ ĐˇĐ° ReVanced ĐŗŅĐĩŅĐēи. \n\nĐŅĐŧа да ĐąŅĐ´ĐĩŅĐĩ ŅвĐĩĐ´ĐžĐŧĐĩĐŊи, аĐēĐž ĐŊаŅŅŅĐŋŅŅ ĐŊĐĩĐžŅаĐēваĐŊи ŅŅйиŅиŅ.</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"ĐСĐēĐģŅŅваĐŊĐĩŅĐž ĐŊа иСŅĐēаŅаŅи ŅŅОйŅĐĩĐŊĐ¸Ņ ĐˇĐ° ĐŗŅĐĩŅĐēи ĐēŅиĐĩ вŅиŅĐēи иСвĐĩŅŅĐ¸Ņ ĐˇĐ° ĐŗŅĐĩŅĐēи ĐŊа ReVanced.
|
||||
|
||||
ĐŅĐŧа да ĐąŅĐ´ĐĩŅĐĩ ŅвĐĩĐ´ĐžĐŧĐĩĐŊи Са ĐŊĐĩĐžŅаĐēваĐŊи ŅŅйиŅиŅ."</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">ĐĐĩаĐēŅивиŅаКŅĐĩ ĐŋОдŅвĐĩŅĐēаŅа ĐŊа ĐąŅŅĐžĐŊа ĐĨаŅĐĩŅваĐŧ /ĐйОĐŊаĐŧĐĩĐŊŅ</string>
|
||||
@@ -121,74 +121,76 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_floating_microphone_button_title">ĐĐģĐ°Đ˛Đ°Ņ ĐąŅŅĐžĐŊ Са ĐŧиĐēŅĐžŅĐžĐŊа</string>
|
||||
<string name="revanced_hide_floating_microphone_button_summary_on">ĐŅŅĐžĐŊŅŅ ĐŊа ĐŧиĐēŅĐžŅĐžĐŊа Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_floating_microphone_button_summary_off">ĐĐžĐēаСаĐŊ Đĩ ĐąŅŅĐžĐŊ ĐŊа ĐŧиĐēŅĐžŅĐžĐŊа</string>
|
||||
<string name="revanced_hide_channel_watermark_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа вОдĐŊĐ¸Ņ ĐˇĐŊаĐē ĐŊа ĐēаĐŊаĐģа</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_on">ĐОдĐŊиŅŅ ĐˇĐŊаĐē Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">ĐОдĐŊиŅŅ ĐˇĐŊаĐē Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_hide_channel_watermark_title">ĐОдĐĩĐŊ СĐŊаĐē ĐŊа ĐēаĐŊаĐģа</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_on">ĐОдĐŊиŅŅ ĐˇĐŊаĐē ĐŊа ĐēаĐŊаĐģа Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">ĐОдĐŊиŅŅ ĐˇĐŊаĐē ĐŊа ĐēаĐŊаĐģа ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">ĐĨĐžŅиСОĐŊŅаĐģĐŊи ŅĐĩĐēŅии</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">ĐĨĐžŅиСОĐŊŅаĐģĐŊиŅĐĩ ŅĐĩĐēŅии Ņа ŅĐēŅиŅи:\nâĸ ĐСвŅĐŊŅĐĩĐ´ĐŊи ĐŊОвиĐŊи\nâĸ ĐŅОдŅĐģĐļĐĩŅĐĩ да ĐŗĐģĐĩдаŅĐĩ\nâĸ Đ Đ°ĐˇĐŗĐģĐĩдаКŅĐĩ ĐžŅĐĩ ĐēаĐŊаĐģи\nâĸ ĐаСаŅŅваĐŊĐĩ\nâĸ ĐĐģĐĩдаКŅĐĩ ĐžŅĐŊОвО</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"РаŅŅОвĐĩŅĐĩ Ņа ŅĐēŅиŅи, ŅаĐēива ĐēаŅĐž:
|
||||
âĸ ĐĐēŅŅаĐģĐŊи ĐŊОвиĐŊи
|
||||
âĸ ĐŅОдŅĐģĐļаваК да ĐŗĐģĐĩдаŅ
|
||||
âĸ Đ Đ°ĐˇĐŗĐģĐĩдаК ĐžŅĐĩ ĐēаĐŊаĐģи
|
||||
âĸ ĐаСаŅŅваĐŊĐĩ
|
||||
âĸ ĐĐģĐĩдаК ĐžŅĐŊОвО"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">ĐĨĐžŅиСОĐŊŅаĐģĐŊи ŅĐĩĐēŅии ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐąŅŅĐžĐŊа \'ĐŅиŅŅĐĩдиĐŊи ŅĐĩ\'</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">ĐŅŅĐžĐŊŅŅ Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">ĐŅŅĐžĐŊŅŅ Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">ĐŅŅĐžĐŊа ĐĐžĐēаĐļи ĐžŅĐĩ Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">ĐŅŅĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\" ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅĐĩĐēŅиŅŅа \'Đа ваŅ\' в ŅŅŅаĐŊиŅаŅа ĐŊа ĐēаĐŊаĐģа</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">РаŅŅŅŅ Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">РаŅŅŅŅ Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">ĐĄĐĩĐēŅиŅŅа \'Đа ĐаŅ\' Đĩ ŅĐēŅиŅа</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">ĐĄĐĩĐēŅиŅŅа \'Đа ĐаŅ\' ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐąŅŅĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\"</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">ĐŅŅĐžĐŊŅŅ Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">ĐŅŅĐžĐŊŅŅ Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">ĐŅŅĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\" Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">ĐŅŅĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\" ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŋŅĐĩĐŋĐžŅŅĐēиŅĐĩ \'ĐŅŅĐŗĐ¸ Ņ
аŅĐĩŅĐ˛Đ°Ņ ŅŅŅĐž\'</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">ĐŅĐĩĐŋĐžŅŅĐēиŅĐĩ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">ĐŅĐĩĐŋĐžŅŅĐēиŅĐĩ Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">ĐŅĐĩĐŋĐžŅŅĐēиŅĐĩ ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐąŅŅĐžĐŊа \"ĐĐžĐēаĐļи ĐžŅĐĩ\"</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">ĐŅŅĐžĐŊŅŅ Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">ĐŅŅĐžĐŊŅŅ Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">ĐŅŅĐžĐŊа ĐĐžĐēаĐļи ĐžŅĐĩ Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">ĐŅŅĐžĐŊа ĐĐžĐēаĐļи ĐžŅĐĩ ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<string name="revanced_hide_timed_reactions_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа вŅĐĩĐŧĐĩвиŅĐĩ ŅĐĩаĐēŅии</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">ĐŅĐĩĐŧĐĩвиŅĐĩ ŅĐĩаĐēŅии Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">ĐŅĐĩĐŧĐĩвиŅĐĩ ŅĐĩаĐēŅии Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅĐž ĐŊа ŅаŅŅа Ņ ŅĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐĩŅĐž</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_on">ĐĐ°ĐŗĐģавиĐĩŅĐž ĐŊа ŅаŅŅа Đĩ ŅĐēŅиŅĐž</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_off">ĐĐ°ĐŗĐģавиĐĩŅĐž Đĩ ĐŋĐžĐēаСаĐŊĐž</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">ĐŅĐĩĐŧĐĩвиŅĐĩ ŅĐĩаĐēŅии ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_hide_channel_guidelines_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŊаŅĐžĐēиŅĐĩ ĐŊа ĐēаĐŊаĐģа</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_on">ĐаŅĐžĐēиŅĐĩ ĐŊа ĐēаĐŊаĐģа Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_off">ĐаŅĐžĐēиŅĐĩ ĐŊа ĐēаĐŊаĐģа Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_chips_shelf_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅаŅŅа Са ŅиĐŋОвĐĩ</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">РаŅŅŅŅ ĐˇĐ° ŅиĐŋОвĐĩ Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">РаŅŅŅŅ ĐˇĐ° ŅиĐŋОвĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_hide_expandable_chip_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅаСŅиŅŅĐĩĐŧĐ¸Ņ ŅиĐŋ ĐŋОд видĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">РаСŅиŅŅваŅиŅĐĩ ŅĐĩ ŅиĐŋОвĐĩ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">РаСŅиŅŅваŅиŅĐĩ ŅĐĩ ŅиĐŋОвĐĩ Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_off">ĐаŅĐžĐēиŅĐĩ ĐŊа ĐēаĐŊаĐģа ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_hide_chips_shelf_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅиĐģĐŧОвиŅĐĩ ŅаŅŅОвĐĩ</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">РаŅŅŅŅ \"Chip\" Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">РаŅŅОвĐĩŅĐĩ ŅŅŅ ŅĐŊиĐŧĐēи ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_hide_expandable_chip_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŋĐžĐēаСваŅи ŅĐĩ ŅаСдĐĩĐģи ĐŋОд видĐĩĐžĐēĐģиĐŋОвĐĩ</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">ĐадаŅиŅĐĩ ĐŧĐĩĐŊŅŅа Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">ĐĐžĐēĐ°ĐˇĐ˛Đ°Ņ ŅĐĩ</string>
|
||||
<string name="revanced_hide_community_posts_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŋŅĐąĐģиĐēаŅииŅĐĩ ĐžŅ ĐžĐąŅĐŊĐžŅŅŅа</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">ĐŅĐąĐģиĐēаŅииŅĐĩ ĐžŅ ĐžĐąŅĐŊĐžŅŅŅа Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">ĐŅĐąĐģиĐēаŅииŅĐĩ ĐžŅ ĐžĐąŅĐŊĐžŅŅŅа Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">ĐаŅĐžĐēиŅĐĩ ĐŊа ОйŅĐŊĐžŅŅŅа Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">ĐĐžŅĐģĐĩĐ´ĐŊиŅĐĩ ĐŋŅĐąĐģиĐēаŅии Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_compact_banner_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐēĐžĐŧĐŋаĐēŅĐŊиŅĐĩ йаĐŊĐĩŅи</string>
|
||||
<string name="revanced_hide_compact_banner_summary_on">ĐĐžĐŧĐŋаĐēŅĐŊиŅĐĩ йаĐŊĐĩŅи Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_compact_banner_summary_off">ĐĐžĐŧĐŋаĐēŅĐŊиŅĐĩ йаĐŊĐĩŅи Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_compact_banner_summary_on">ĐĐŊŅĐžŅĐŧаŅиОĐŊĐŊиŅĐĩ ĐŋаĐŊĐĩĐģи Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_compact_banner_summary_off">ĐĐŊŅĐžŅĐŧаŅиОĐŊĐŊиŅĐĩ ĐŋаĐŊĐĩĐģи ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_hide_movies_section_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅаСдĐĩĐģа Са ŅиĐģĐŧи</string>
|
||||
<string name="revanced_hide_movies_section_summary_on">РаСдĐĩĐģŅŅ ĐˇĐ° ŅиĐģĐŧи Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_movies_section_summary_on">ĐĄĐĩĐēŅиŅŅа Ņ ĐēĐžĐŧĐĩĐŊŅаŅи Đĩ ŅĐēŅиŅа</string>
|
||||
<string name="revanced_hide_movies_section_summary_off">РаСдĐĩĐģŅŅ ĐˇĐ° ŅиĐģĐŧи Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_hide_feed_survey_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа аĐŊĐēĐĩŅиŅĐĩ в ĐŊОвиĐŊаŅŅĐēĐ¸Ņ ĐŋĐžŅĐžĐē</string>
|
||||
<string name="revanced_hide_feed_survey_summary_on">AĐŊĐēĐĩŅиŅĐĩ в ĐŊОвиĐŊаŅŅĐēĐ¸Ņ ĐŋĐžŅĐžĐē Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_feed_survey_summary_off">AĐŊĐēĐĩŅиŅĐĩ в ĐŊОвиĐŊаŅŅĐēĐ¸Ņ ĐŋĐžŅĐžĐē Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_feed_survey_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа аĐŊĐēĐĩŅи в ĐĩĐŧиŅииŅĐĩ</string>
|
||||
<string name="revanced_hide_feed_survey_summary_on">ĐĐŊĐēĐĩŅиŅĐĩ Са ĐĩĐŧиŅии Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_feed_survey_summary_off">ĐĐŊĐēĐĩŅиŅĐĩ Са ĐĩĐŧиŅии ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_hide_community_guidelines_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŊаŅĐžĐēиŅĐĩ ĐŊа ОйŅĐŊĐžŅŅŅа</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_on">ĐаŅĐžĐēиŅĐĩ ĐŊа ОйŅĐŊĐžŅŅŅа Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_off">ĐаŅĐžĐēиŅĐĩ ĐŊа ОйŅĐŊĐžŅŅŅа Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_community_guidelines_summary_off">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŊаŅĐžĐēиŅĐĩ Са ОйŅĐŊĐžŅŅŅа ĐŊа айОĐŊаŅиŅĐĩ</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŊаŅĐžĐēиŅĐĩ Са ОйŅĐŊĐžŅŅŅа ĐŊа айОĐŊаŅиŅĐĩ</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">ĐаŅĐžĐēиŅĐĩ Са ОйŅĐŊĐžŅŅŅа ĐŊа айОĐŊаŅиŅĐĩ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">ĐаŅĐžĐēиŅĐĩ Са ОйŅĐŊĐžŅŅŅа ĐŊа айОĐŊаŅиŅĐĩ Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_channel_member_shelf_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅаŅŅа ĐŊа ĐēаĐŊаĐģа</string>
|
||||
<string name="revanced_hide_channel_member_shelf_summary_on">РаŅŅŅŅ ĐŊа ĐēаĐŊаĐģа Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_channel_member_shelf_summary_off">РаŅŅŅŅ ĐŊа ĐēаĐŊаĐģа Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">ĐаŅĐžĐēиŅĐĩ Са ОйŅĐŊĐžŅŅŅа Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">ĐаŅĐžĐēиŅĐĩ Са ОйŅĐŊĐžŅŅŅа Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_channel_member_shelf_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅĐĩĐēŅиŅŅа Ņ ŅĐģĐĩĐŊŅваŅи</string>
|
||||
<string name="revanced_hide_channel_member_shelf_summary_on">РаŅŅа Ņ ŅĐģĐĩĐŊŅваŅи Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_channel_member_shelf_summary_off">РаŅŅа Ņ ŅĐģĐĩĐŊŅваŅи ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<string name="revanced_hide_emergency_box_title">ĐĄĐēŅиваĐŊĐĩ аваŅиКĐŊиŅĐĩ ĐēŅŅии</string>
|
||||
<string name="revanced_hide_emergency_box_summary_on">ĐваŅиКĐŊиŅĐĩ ĐēŅŅии Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_emergency_box_summary_off">ĐваŅиКĐŊиŅĐĩ ĐēŅŅии Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_emergency_box_summary_on">ĐĄĐŋĐĩŅĐŊи ĐēŅŅии Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_emergency_box_summary_off">ĐĄĐŋĐĩŅĐŊи ĐēŅŅии Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_info_panels_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа иĐŊŅĐžŅĐŧаŅиОĐŊĐŊиŅĐĩ ĐŋаĐŊĐĩĐģи</string>
|
||||
<string name="revanced_hide_info_panels_summary_on">ĐĐŊŅĐžŅĐŧаŅиОĐŊĐŊиŅĐĩ ĐŋаĐŊĐĩĐģи Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_info_panels_summary_off">ĐĐŊŅĐžŅĐŧаŅиОĐŊĐŊиŅĐĩ ĐŋаĐŊĐĩĐģи Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
@@ -201,24 +203,24 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_playables_title">ĐĐŗŅи в YouTube</string>
|
||||
<string name="revanced_hide_playables_summary_on">ĐĐŗŅи в YouTube Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_playables_summary_off">ĐĐŗŅиŅĐĩ в YouTube ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_hide_quick_actions_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐąŅŅСиŅĐĩ Đ´ĐĩĐšŅŅĐ˛Đ¸Ņ Đ˛ ŅĐĩĐļиĐŧ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ</string>
|
||||
<string name="revanced_hide_quick_actions_summary_on">ĐŅŅСиŅĐĩ Đ´ĐĩĐšŅŅĐ˛Đ¸Ņ Đ˛ ŅĐĩĐļиĐŧ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_quick_actions_summary_off">ĐŅŅСиŅĐĩ Đ´ĐĩĐšŅŅĐ˛Đ¸Ņ Đ˛ ŅĐĩĐļиĐŧ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_quick_actions_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŧĐĩĐŊŅ Ņ ĐŅŅСи Đ´ĐĩĐšŅŅвиŅ</string>
|
||||
<string name="revanced_hide_quick_actions_summary_on">ĐŅŅСи Đ´ĐĩĐšŅŅĐ˛Đ¸Ņ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_quick_actions_summary_off">ĐŅŅСи Đ´ĐĩĐšŅŅĐ˛Đ¸Ņ ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_hide_related_videos_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅвŅŅСаĐŊиŅĐĩ видĐĩĐžĐēĐģиĐŋОвĐĩ в ĐąŅŅСиŅĐĩ Đ´ĐĩĐšŅŅвиŅ</string>
|
||||
<string name="revanced_hide_related_videos_summary_on">ХвŅŅСаĐŊиŅĐĩ видĐĩĐžĐēĐģиĐŋОвĐĩ в ĐąŅŅСиŅĐĩ Đ´ĐĩĐšŅŅĐ˛Đ¸Ņ Ņа ŅĐēиŅŅи</string>
|
||||
<string name="revanced_hide_related_videos_summary_off">ХвŅŅСаĐŊиŅĐĩ видĐĩĐžĐēĐģиĐŋОвĐĩ в ĐąŅŅСиŅĐĩ Đ´ĐĩĐšŅŅĐ˛Đ¸Ņ Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_image_shelf_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅаŅŅа Ņ Đ¸ĐˇĐžĐąŅаĐļĐĩĐŊĐ¸Ņ Đ˛ ŅĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐĩŅĐž</string>
|
||||
<string name="revanced_hide_image_shelf_summary_on">РаŅŅŅŅ Ņ Đ¸ĐˇĐžĐąŅаĐļĐĩĐŊĐ¸Ņ Đ˛ ŅĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐĩŅĐž Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_image_shelf_summary_off">РаŅŅŅŅ Ņ Đ¸ĐˇĐžĐąŅаĐļĐĩĐŊĐ¸Ņ Đ˛ ŅĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐĩŅĐž Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_hide_related_videos_summary_on">ĐĄŅОдĐŊи видĐĩĐž Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_related_videos_summary_off">ĐĄŅОдĐŊи видĐĩĐž Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_image_shelf_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅаŅŅОвĐĩŅĐĩ ŅŅŅ ŅĐŊиĐŧĐēи</string>
|
||||
<string name="revanced_hide_image_shelf_summary_on">РаŅŅОвĐĩŅĐĩ ŅŅŅ ŅĐŊиĐŧĐēи Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_image_shelf_summary_off">РаŅŅОвĐĩŅĐĩ ŅŅŅ ŅĐŊиĐŧĐēи ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_hide_latest_posts_ads_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŋĐžŅĐģĐĩĐ´ĐŊиŅĐĩ ĐŋŅĐąĐģиĐēаŅии</string>
|
||||
<string name="revanced_hide_latest_posts_ads_summary_on">ĐĐžŅĐģĐĩĐ´ĐŊиŅĐĩ ĐŋŅĐąĐģиĐēаŅии Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_latest_posts_ads_summary_on">ĐаК-ĐŊОвиŅĐĩ ĐŋŅĐąĐģиĐēаŅии Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_latest_posts_ads_summary_off">ĐĐžŅĐģĐĩĐ´ĐŊиŅĐĩ ĐŋŅĐąĐģиĐēаŅии Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_mix_playlists_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅаСйŅŅĐēаĐŊиŅĐĩ ĐŋĐģĐĩĐšĐģиŅŅи</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_on">РаСйŅŅĐēаĐŊиŅĐĩ ĐŋĐģĐĩĐšĐģиŅŅи Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_off">РаСйŅŅĐēаĐŊиŅĐĩ ĐŋĐģĐĩĐšĐģиŅŅи Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_mix_playlists_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŧиĐēŅ ĐŋĐģĐĩĐšĐģиŅŅ</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_on">ĐĐģĐĩĐšĐģиŅŅ ĐŧиĐēŅа Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_off">ĐĐģĐĩĐšĐģиŅŅ ĐŧиĐēŅа ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<string name="revanced_hide_artist_cards_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐēаŅŅиŅĐĩ ĐŊа аŅŅиŅŅиŅĐĩ</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">ĐаŅŅиŅĐĩ ĐŊа аŅŅиŅŅиŅĐĩ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">ĐаŅŅиŅĐĩ ĐŊа аŅŅиŅŅиŅĐĩ Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">ĐаŅŅиŅĐĩ ĐŊа иСĐŋŅĐģĐŊиŅĐĩĐģиŅĐĩ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">ĐĐžĐēĐ°ĐˇĐ˛Đ°Ņ ŅĐĩ ĐēаŅŅи ĐŊа аŅŅиŅŅи</string>
|
||||
<string name="revanced_hide_attributes_section_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅĐĩĐēŅиŅŅа Ņ Đ°ŅŅийŅŅи</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">âĐĐžĐŋŅĐģŅŅĐŊи ĐŧĐĩŅŅаâ, âĐĐŗŅиâ и âĐŅСиĐēаâ ĐŋОд ĐžĐŋиŅаĐŊиĐĩŅĐž Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">âĐĐžĐŋŅĐģŅŅĐŊи ĐŧĐĩŅŅаâ, âĐĐŗŅиâ и âĐŅСиĐēаâ ĐŋОд ĐžĐŋиŅаĐŊиĐĩŅĐž ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
@@ -252,6 +254,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">ĐĐžĐēаСаĐŊĐž в ŅŅОдĐŊи видĐĩĐžĐēĐģиĐŋОвĐĩ</string>
|
||||
<string name="revanced_comments_screen_title">ĐĐžĐŧĐĩĐŊŅаŅи</string>
|
||||
<string name="revanced_comments_screen_summary">ĐĄĐēŅиваĐŊĐĩ иĐģи ĐŋĐžĐēаСваĐŊĐĩ ĐŊа ŅĐĩĐēŅиŅŅа Са ĐēĐžĐŧĐĩĐŊŅаŅи</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title">ĐĄĐēŅиК âĐ ĐĩСŅĐŧĐĩ ĐŊа ŅаŅаâ</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">\'Đ ĐĩСŅĐŧĐĩ ĐŊа ŅаŅа\' Đĩ ŅĐēŅиŅĐž</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">\'Đ ĐĩСŅĐŧĐĩ ĐŊа ŅаŅа\' Đĩ ĐŋĐžĐēаСаĐŊĐž</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа âĐĐžĐŧĐĩĐŊŅаŅи, ĐŊаĐŋŅавĐĩĐŊи ĐžŅ ŅĐģĐĩĐŊОвĐĩâ</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">âĐĐžĐŧĐĩĐŊŅаŅи ĐžŅ ŅĐģĐĩĐŊОвĐĩâ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">âĐĐžĐŧĐĩĐŊŅаŅи ĐžŅ ŅĐģĐĩĐŊОвĐĩâ ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
@@ -274,7 +279,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Doodles в ĐģĐĩĐŊŅаŅа Са ŅŅŅŅĐĩĐŊĐĩ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Doodles в ĐģĐĩĐŊŅаŅа Са ŅŅŅŅĐĩĐŊĐĩ ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">YouTube Doodles ŅĐĩ ĐŋĐžŅвŅĐ˛Đ°Ņ ĐŊŅĐēĐžĐģĐēĐž Đ´ĐŊи в ĐŗĐžĐ´Đ¸ĐŊаŅа.\n\nĐĐēĐž Doodle в ĐŧĐžĐŧĐĩĐŊŅа ŅĐĩ ĐŋĐžĐēаСва вŅв ваŅĐ¸Ņ ŅĐĩĐŗĐ¸ĐžĐŊ и ŅаСи ĐžĐŋŅĐ¸Ņ ĐˇĐ° ŅĐēŅиваĐŊĐĩ Đĩ аĐēŅивиŅаĐŊа, ŅиĐģŅŅŅĐŊаŅа ĐģĐĩĐŊŅа ĐŋОд ĐģĐĩĐŊŅаŅа Са ŅŅŅŅĐĩĐŊĐĩ ŅŅŅĐž ŅĐĩ ĐąŅĐ´Đĩ ŅĐēŅиŅа.</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"Doodles в YouTube ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ ĐŊŅĐēĐžĐģĐēĐž Đ´ĐŊи в ĐŗĐžĐ´Đ¸ĐŊаŅа.
|
||||
|
||||
ĐĐēĐž в ĐŧĐžĐŧĐĩĐŊŅа ŅĐĩ ĐŋĐžĐēаСва Doodle вŅв ваŅĐ¸Ņ ŅĐĩĐŗĐ¸ĐžĐŊ и ŅаСи ĐŊаŅŅŅОКĐēа Са ŅĐēŅиваĐŊĐĩ Đĩ вĐēĐģŅŅĐĩĐŊа, ŅĐžĐŗĐ°Đ˛Đ° ĐģĐĩĐŊŅаŅа Са ŅиĐģŅŅиŅаĐŊĐĩ ĐŋОд ĐģĐĩĐŊŅаŅа Са ŅŅŅŅĐĩĐŊĐĩ ŅŅŅĐž ŅĐĩ ĐąŅĐ´Đĩ ŅĐēŅиŅа."</string>
|
||||
<string name="revanced_custom_filter_screen_title">ĐĐžŅŅĐĩйиŅĐĩĐģŅĐēи ŅиĐģŅŅŅ</string>
|
||||
<string name="revanced_custom_filter_screen_summary">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐēĐžĐŧĐŋĐžĐŊĐĩĐŊŅи Ņ ĐŋĐžĐŧĐžŅŅа ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēи ŅиĐģŅŅи</string>
|
||||
<string name="revanced_custom_filter_title">ĐĐēŅивиŅаĐŊĐĩ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēиŅĐĩ ŅиĐģŅŅи</string>
|
||||
@@ -286,21 +293,30 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">ĐĐĩваĐģидĐĩĐŊ ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēи ŅиĐģŅŅŅ: %s</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅŅĐ´ŅŅĐļаĐŊиĐĩŅĐž Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">ĐĄĐēŅиваĐŊĐĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ в ŅĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊŅŅ Đ¸ в ĐŊОвиĐŊаŅŅĐēĐ¸Ņ ĐŋĐžŅĐžĐē Ņ ĐŋĐžĐŧĐžŅŅа ĐŊа ŅиĐģŅŅи Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ ĐŊа ĐŊаŅаĐģĐŊаŅа ŅŅŅаĐŊиŅа Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_on">ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ ĐŊа ĐŊаŅаĐģĐŊĐ¸Ņ ĐĩĐēŅаĐŊ Ņа ŅиĐģŅŅиŅаĐŊи Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_off">ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ ĐŊа ĐŊаŅаĐģĐŊĐ¸Ņ ĐĩĐēŅаĐŊ ĐŊĐĩ Ņа ŅиĐģŅŅиŅаĐŊи Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ в ĐŊаŅаĐģĐŊаŅа ŅŅŅаĐŊиŅа Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_on">ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ в ŅаСдĐĩĐģа ĐаŅаĐģĐž ŅĐĩ ŅиĐģŅŅиŅĐ°Ņ Ņ ĐŋĐžĐŧĐžŅŅа ĐŊа ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_off">ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ в ŅаСдĐĩĐģа ĐаŅаĐģĐž ĐŊĐĩ ŅĐĩ ŅиĐģŅŅиŅĐ°Ņ ĐŋĐž ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ ĐžŅ Đ°ĐąĐžĐŊаĐŧĐĩĐŊŅи Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_on">ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ в ŅаСдĐĩĐģа Са айОĐŊаĐŧĐĩĐŊŅи Ņа Ņа ŅиĐģŅŅиŅаĐŊи Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_off">ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ в ŅаСдĐĩĐģа Са айОĐŊаĐŧĐĩĐŊŅи Ņа Ņа ŅиĐģŅŅиŅаĐŊи Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_off">ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ в ĐĩĐŧиŅиŅŅа Са айОĐŊаĐŧĐĩĐŊŅи ĐŊĐĩ ŅĐĩ ŅиĐģŅŅиŅаŅ</string>
|
||||
<string name="revanced_hide_keyword_content_search_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅĐĩСŅĐģŅаŅи ĐžŅ ŅŅŅŅĐĩĐŊĐ¸Ņ Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_on">Đ ĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐ¸Ņ Ņа ŅиĐģŅŅиŅаĐŊи Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_off">Đ ĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐ¸Ņ ĐŊĐĩ Ņа ŅиĐģŅŅиŅаĐŊи Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_on">Đ ĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐĩŅĐž ŅĐĩ ŅиĐģŅŅиŅĐ°Ņ Ņ ĐŋĐžĐŧĐžŅŅа ĐŊа ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_off">Đ ĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐĩŅĐž ĐŊĐĩ ŅĐĩ ŅиĐģŅŅиŅĐ°Ņ ĐŋĐž ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_title">ĐĐģŅŅОви Đ´ŅĐŧи, ĐēОиŅĐž да ĐąŅĐ´Đ°Ņ ŅĐēŅиŅи</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">ĐĐģŅŅОви Đ´ŅĐŧи и ŅŅаСи Са ŅĐēŅиваĐŊĐĩ, ŅаСдĐĩĐģĐĩĐŊи Ņ ĐŊОви ŅĐĩдОвĐĩ\n\nĐĐģŅŅОвиŅĐĩ Đ´ŅĐŧи ĐŧĐžĐŗĐ°Ņ Đ´Đ° ĐąŅĐ´Đ°Ņ Đ¸ĐŧĐĩĐŊа ĐŊа ĐēаĐŊаĐģи иĐģи вŅĐĩĐēи ŅĐĩĐēŅŅ, ĐŋĐžĐēаСаĐŊ в ĐˇĐ°ĐŗĐģавиŅŅа ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ\n\nĐŅĐŧиŅĐĩ Ņ ĐŗĐģавĐŊи ĐąŅĐēви в ŅŅĐĩдаŅа ŅŅŅйва да ĐąŅĐ´Đ°Ņ Đ˛ŅвĐĩĐ´ĐĩĐŊи Ņ ĐŧаĐģĐēи ĐąŅĐēви (ĐŊаĐŋŅ.: iPhone, TikTok, LeBlanc)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"ĐĐģŅŅОви Đ´ŅĐŧи и ŅŅаСи Са ŅĐēŅиваĐŊĐĩ, ŅаСдĐĩĐģĐĩĐŊи ĐžŅ ĐŊОв ŅĐĩĐ´
|
||||
|
||||
ĐĐģŅŅОвиŅĐĩ Đ´ŅĐŧи ĐŧĐžĐŗĐ°Ņ Đ´Đ° ĐąŅĐ´Đ°Ņ Đ¸ĐŧĐĩĐŊа ĐŊа ĐēаĐŊаĐģи иĐģи вŅŅĐēаĐēŅв ŅĐĩĐēŅŅ, ĐŋĐžĐēаСаĐŊ в ĐˇĐ°ĐŗĐģавиŅŅа ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ
|
||||
|
||||
ĐŅĐŧиŅĐĩ Ņ ĐŗĐģавĐŊи ĐąŅĐēви в ŅŅĐĩдаŅа ŅŅŅйва да ĐąŅĐ´Đ°Ņ Đ˛ŅвĐĩĐ´ĐĩĐŊи Ņ ĐŗĐģавĐŊи ĐąŅĐēви (ĐŊаĐŋŅ.: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">Đа ŅиĐģŅŅиŅаĐŊĐĩ Ņ ĐēĐģŅŅОви Đ´ŅĐŧи</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">ĐаŅаĐģĐž/ĐйОĐŊаĐŧĐĩĐŊŅ/Đ ĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐĩŅĐž ŅĐĩ ŅиĐģŅŅиŅаŅ, Са да ŅĐĩ ŅĐēŅиĐĩ ŅŅĐ´ŅŅĐļаĐŊиĐĩ, ĐēĐžĐĩŅĐž ŅŅĐžŅвĐĩŅŅŅва ĐŊа ĐēĐģŅŅОви ŅŅаСи\n\nĐĐŗŅаĐŊиŅĐĩĐŊиŅ\nâĸ Shorts ĐŊĐĩ ĐŧĐžĐŗĐ°Ņ Đ´Đ° ĐąŅĐ´Đ°Ņ ŅĐēŅиŅи ĐžŅ Đ¸ĐŧĐĩŅĐž ĐŊа ĐēаĐŊаĐģа\nâĸ ĐŅĐēОи ĐēĐžĐŧĐŋĐžĐŊĐĩĐŊŅи ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēĐ¸Ņ Đ¸ĐŊŅĐĩŅŅĐĩĐšŅ ĐŧĐžĐļĐĩ да ĐŊĐĩ Ņа ŅĐēŅиŅи\nâĸ ĐĸŅŅŅĐĩĐŊĐĩŅĐž ĐŋĐž ĐēĐģŅŅОва Đ´ŅĐŧа ĐŧĐžĐļĐĩ да ĐŊĐĩ ĐŋĐžĐēаĐļĐĩ ŅĐĩСŅĐģŅаŅи</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"Đ ĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐĩŅĐž в ĐаŅаĐģĐž/ĐйОĐŊаĐŧĐĩĐŊŅ/ĐĸŅŅŅĐĩĐŊĐĩ ŅĐĩ ŅиĐģŅŅиŅаŅ, Са да ŅĐĩ ŅĐēŅиĐĩ ŅŅĐ´ŅŅĐļаĐŊиĐĩŅĐž, ĐēĐžĐĩŅĐž ŅŅвĐŋада Ņ ŅŅаСи Ņ ĐēĐģŅŅОви Đ´ŅĐŧи
|
||||
|
||||
ĐĐŗŅаĐŊиŅĐĩĐŊиŅ
|
||||
âĸ ШОŅŅи ĐŊĐĩ ĐŧĐžĐŗĐ°Ņ Đ´Đ° ĐąŅĐ´Đ°Ņ ŅĐēŅиŅи ĐŋĐž иĐŧĐĩ ĐŊа ĐēаĐŊаĐģа
|
||||
âĸ ĐŅĐēОи UI ĐēĐžĐŧĐŋĐžĐŊĐĩĐŊŅи ĐŧĐžĐļĐĩ да ĐŊĐĩ Ņа ŅĐēŅиŅи
|
||||
âĸ ĐĸŅŅŅĐĩĐŊĐĩŅĐž ĐŊа ĐēĐģŅŅОва Đ´ŅĐŧа ĐŧĐžĐļĐĩ да ĐŊĐĩ ĐŋĐžĐēаĐļĐĩ ŅĐĩСŅĐģŅаŅи"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">ĐĄŅвĐŋадĐĩĐŊиĐĩ ĐŊа вŅиŅĐēи Đ´ŅĐŧи</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">ĐĐŗŅаĐļдаĐŊĐĩŅĐž ĐŊа ĐēĐģŅŅОва Đ´ŅĐŧа/ŅŅаСа Ņ Đ´Đ˛ĐžĐšĐŊи ĐēавиŅĐēи ŅĐĩ ĐŋŅĐĩĐ´ĐžŅвŅаŅи ŅаŅŅиŅĐŊи ŅŅвĐŋадĐĩĐŊĐ¸Ņ ĐŊа ĐˇĐ°ĐŗĐģĐ°Đ˛Đ¸Ņ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ и иĐŧĐĩĐŊа ĐŊа ĐēаĐŊаĐģи<br><br>ĐаĐŋŅиĐŧĐĩŅ,<br><b>\"ai\"</b> ŅĐĩ ŅĐēŅиĐĩ видĐĩĐžĐēĐģиĐŋа: <b>How does AI work?</b><br>ĐŊĐž ĐŊŅĐŧа да ŅĐēŅиĐĩ: <b>What does fair use mean?</b></string>
|
||||
@@ -314,13 +330,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="ad.general.hideAdsResourcePatch">
|
||||
<string name="revanced_hide_general_ads_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ОйŅиŅĐĩ ŅĐĩĐēĐģаĐŧи</string>
|
||||
<string name="revanced_hide_general_ads_summary_on">ĐĐąŅиŅĐĩ ŅĐĩĐēĐģаĐŧи Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">ĐĐąŅиŅĐĩ ŅĐĩĐēĐģаĐŧи Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">ĐĐąŅиŅĐĩ ŅĐĩĐēĐģаĐŧи ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅĐĩĐēĐģаĐŧиŅĐĩ в ŅĐĩĐļиĐŧ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Đ ĐĩĐēĐģаĐŧиŅĐĩ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ Ņа ŅĐēŅиŅи\n\in ĐĸаСи ŅŅĐŊĐēŅĐ¸Ņ Đĩ Đ´ĐžŅŅŅĐŋĐŊа ŅаĐŧĐž Са ĐŋĐž-ŅŅаŅи ŅŅŅŅОКŅŅва</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"ĐŅиŅĐēи ŅĐĩĐēĐģаĐŧи ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ Ņа ŅĐēŅиŅи
|
||||
|
||||
ĐĸаСи ŅŅĐŊĐēŅĐ¸Ņ Đĩ ĐŊаĐģиŅĐŊа ŅаĐŧĐž Са ĐŋĐž-ŅŅаŅи ŅŅŅŅОКŅŅва"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Đ ĐĩĐēĐģаĐŧиŅĐĩ в ŅĐĩĐļиĐŧ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅĐĩĐēĐģаĐŧĐŊи ĐąŅŅĐžĐŊи</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">Đ ĐĩĐēĐģаĐŧиŅĐĩ ĐēаŅĐž ĐąŅŅĐžĐŊ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_off">Đ ĐĩĐēĐģаĐŧиŅĐĩ ĐēаŅĐž ĐąŅŅĐžĐŊ Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_on">ĐŅŅĐžĐŊиŅаĐŊиŅĐĩ ŅĐĩĐēĐģаĐŧи Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_buttoned_ads_summary_off">ĐŅŅĐžĐŊиŅаĐŊиŅĐĩ ŅĐĩĐēĐģаĐŧи Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_paid_promotion_label_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŋĐģаŅĐĩĐŊиŅĐĩ ĐŋŅĐžĐŧĐžŅии</string>
|
||||
<string name="revanced_hide_paid_promotion_label_summary_on">ĐŅĐžĐŧĐžŅиОĐŊаĐģĐŊиŅĐĩ ĐĩŅиĐēĐĩŅи Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_paid_promotion_label_summary_off">ĐŅĐžĐŧĐžŅиОĐŊаĐģĐŊиŅĐĩ ĐĩŅиĐēĐĩŅи ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
@@ -333,35 +351,35 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_store_shelf_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅаŅŅа Са ĐŋаСаŅŅваĐŊĐĩ</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">РаŅŅа Са ĐŋаСаŅŅваĐŊĐĩ Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">РаŅŅа Са ĐŋаСаŅŅваĐŊĐĩ ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<string name="revanced_hide_shopping_links_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа вŅŅСĐēиŅĐĩ Са ĐŋаСаŅŅваĐŊĐĩ в ĐžĐŋиŅаĐŊиĐĩŅĐž ĐŊа видĐĩĐžĐēĐģиĐŋа</string>
|
||||
<string name="revanced_hide_shopping_links_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа вŅŅСĐēи Са ĐŋаСаŅŅваĐŊĐĩ</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">ĐŅŅСĐēиŅĐĩ Са ĐŋаСаŅŅваĐŊĐĩ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">ĐŅŅСĐēиŅĐĩ Са ĐŋаСаŅŅваĐŊĐĩ Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">ĐŅŅСĐēиŅĐĩ Са ĐŋаСаŅŅваĐŊĐĩ ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">ĐĄĐēŅиКŅĐĩ ĐąŅŅĐžĐŊа âĐĐžŅĐĩŅĐĩŅĐĩ ĐŧĐ°ĐŗĐ°ĐˇĐ¸ĐŊаâ ĐŊа ŅŅŅаĐŊиŅиŅĐĩ ĐŊа ĐēаĐŊаĐģиŅĐĩ</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">ĐŅŅĐžĐŊŅŅ Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">ĐŅŅĐžĐŊŅŅ Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">ĐŅŅĐžĐŊа ĐĐžĐēаĐļи ĐžŅĐĩ Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">ĐŅŅĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\" ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<string name="revanced_hide_web_search_results_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ŅĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅĐĩĐą ŅŅŅŅĐĩĐŊĐĩŅĐž</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">Đ ĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅĐĩĐą ŅŅŅŅĐĩĐŊĐĩŅĐž Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">Đ ĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅĐĩĐą ŅŅŅŅĐĩĐŊĐĩŅĐž Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">Đ ĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅĐĩĐą ŅŅŅŅĐĩĐŊĐĩŅĐž Ņа ĐŋĐžĐēаСаĐŊи.</string>
|
||||
<string name="revanced_hide_merchandise_banners_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа йаĐŊĐĩŅиŅĐĩ Са ŅŅĐžĐēи</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_on">ĐаĐŊĐĩŅиŅĐĩ Са ŅŅĐžĐēи Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_off">ĐаĐŊĐĩŅиŅĐĩ Са ŅŅĐžĐēи Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_on">Đ ĐĩĐēĐģаĐŧĐŊиŅĐĩ йаĐŊĐĩŅи Са ŅŅĐžĐēи Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_off">ĐаĐŊĐĩŅиŅĐĩ Са ŅŅĐžĐēи ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">ĐĄĐēŅ. ĐŊа ŅĐĩĐēĐģаĐŧи ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ, Са ĐŋĐž-ŅŅаŅи ŅŅŅŅОКŅŅва</string>
|
||||
</patch>
|
||||
<patch id="ad.getpremium.hideGetPremiumPatch">
|
||||
<string name="revanced_hide_get_premium_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа YouTube Premium ĐŋŅĐžĐŧĐžŅии</string>
|
||||
<string name="revanced_hide_get_premium_summary_on">YouTube Premium ĐŋŅĐžĐŧĐžŅииŅĐĩ ĐŋОд видĐĩĐž ĐŋĐģĐĩĐšŅŅа Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_get_premium_summary_off">YouTube Premium ĐŋŅĐžĐŧĐžŅииŅĐĩ ĐŋОд видĐĩĐž ĐŋĐģĐĩĐšŅŅа Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_get_premium_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа YouTube Premium ĐŋŅĐžĐŧĐžŅииŅĐĩ</string>
|
||||
<string name="revanced_hide_get_premium_summary_on">YouTube Premium ĐŋŅĐžĐŧĐžŅииŅĐĩ Ņа ŅĐēŅиŅи.</string>
|
||||
<string name="revanced_hide_get_premium_summary_off">YouTube Premium ĐŋŅĐžĐŧĐžŅииŅĐĩ ŅĐĩ ĐŋĐžĐēаСваŅ.</string>
|
||||
</patch>
|
||||
<patch id="ad.video.videoAdsPatch">
|
||||
<string name="revanced_hide_video_ads_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа видĐĩĐž ŅĐĩĐēĐģаĐŧиŅĐĩ</string>
|
||||
<string name="revanced_hide_video_ads_summary_on">ĐидĐĩĐž ŅĐĩĐēĐģаĐŧиŅĐĩ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_video_ads_summary_off">ĐидĐĩĐž ŅĐĩĐēĐģаĐŧиŅĐĩ Ņа ĐŋĐžĐēаСаĐŊи</string>
|
||||
<string name="revanced_hide_video_ads_summary_on">ĐидĐĩĐž ŅĐĩĐēĐģаĐŧиŅĐĩ Ņа ŅĐēŅиŅи.</string>
|
||||
<string name="revanced_hide_video_ads_summary_off">ĐидĐĩĐž ŅĐĩĐēĐģаĐŧиŅĐĩ ŅĐĩ ĐŋĐžĐēаСваŅ.</string>
|
||||
</patch>
|
||||
<patch id="interaction.copyvideourl.copyVideoUrlResourcePatch">
|
||||
<string name="revanced_share_copy_url_success">URL адŅĐĩŅŅŅ Đĩ ĐēĐžĐŋиŅаĐŊ в ĐēĐģиĐŋйОŅда</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL адŅĐĩŅŅŅ Ņ Đ˛ŅĐĩĐŧĐĩви ĐžŅĐŋĐĩŅаŅŅĐē Đĩ ĐēĐžĐŋиŅаĐŊ</string>
|
||||
<string name="revanced_share_copy_url_success">ĐŅŅСĐēаŅа Đĩ ĐēĐžĐŋиŅаĐŊа в ĐēĐģиĐŋйОŅда.</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL адŅĐĩŅ Ņ ĐžŅĐŧĐĩŅĐēа Са вŅĐĩĐŧĐĩ, ĐēĐžĐŋиŅаĐŊ в ĐēĐģиĐŋйОŅда.</string>
|
||||
<string name="revanced_copy_video_url_title">ĐĐžĐēаСваĐŊĐĩ ĐŊа ĐąŅŅĐžĐŊа Са ĐēĐžĐŋиŅаĐŊĐĩ ĐŊа URL адŅĐĩŅа ĐŊа видĐĩĐžĐēĐģиĐŋа</string>
|
||||
<string name="revanced_copy_video_url_summary_on">ĐĐžĐēаСаĐŊ Đĩ ĐąŅŅĐžĐŊ. ĐĐžĐēĐžŅĐŊĐĩŅĐĩ, Са да ĐēĐžĐŋиŅаŅĐĩ URL ĐŊа видĐĩĐžŅĐž. ĐĐžĐēĐžŅĐŊĐĩŅĐĩ и СадŅŅĐļŅĐĩ, Са да ĐēĐžĐŋиŅаŅĐĩ URL адŅĐĩŅа ĐŊа видĐĩĐžĐēĐģиĐŋа Ņ ĐēĐģĐĩĐšĐŧĐž Са вŅĐĩĐŧĐĩ</string>
|
||||
<string name="revanced_copy_video_url_summary_off">ĐŅŅĐžĐŊŅŅ ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
@@ -370,7 +388,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">ĐŅŅĐžĐŊŅŅ ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐŋŅОСОŅĐĩŅа Са вŅСŅаŅŅОвО ĐžĐŗŅаĐŊиŅĐĩĐŊиĐĩ</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">ĐŅОСОŅĐĩŅ ĐˇĐ° вŅСŅаŅŅОвО ĐžĐŗŅаĐŊиŅĐĩĐŊиĐĩ</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_on">ĐиаĐģĐžĐŗĐžĐ˛Đ¸ŅŅ ĐŋŅОСОŅĐĩŅ ŅĐĩ ĐąŅĐ´Đĩ ĐŋŅĐĩĐŧаŅ
ĐŊаŅ</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_off">ĐиаĐģĐžĐŗĐžĐ˛Đ¸ŅŅ ĐŋŅОСОŅĐĩŅ ŅĐĩ ĐąŅĐ´Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">ĐĸаСи ŅŅĐŊĐēŅĐ¸Ņ ĐŊĐĩ СаОйиĐēаĐģŅ Đ˛ŅСŅаŅŅОвОŅĐž ĐžĐŗŅаĐŊиŅĐĩĐŊиĐĩ. ĐĸŅ ĐŋŅĐžŅŅĐž ĐŋŅиĐĩĐŧа вŅСŅаŅŅОваŅа ĐŗŅаĐŊиŅа авŅĐžĐŧаŅиŅĐŊĐž.</string>
|
||||
@@ -391,27 +409,27 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="interaction.seekbar.disablePreciseSeekingGesturePatch">
|
||||
<string name="revanced_disable_precise_seeking_gesture_title">ĐĐĩаĐēŅивиŅаĐŊĐĩ ĐŊа ĐļĐĩŅŅа Са ŅĐžŅĐŊĐž ŅŅŅŅĐĩĐŊĐĩ</string>
|
||||
<string name="revanced_disable_precise_seeking_gesture_summary_on">ĐĐĩŅŅŅŅ Đĩ Đ´ĐĩаĐēŅивиŅаĐŊ</string>
|
||||
<string name="revanced_disable_precise_seeking_gesture_summary_off">ĐĐĩŅŅŅŅ Đĩ аĐēŅивиŅаĐŊ</string>
|
||||
<string name="revanced_disable_precise_seeking_gesture_summary_on">ĐĐĩŅŅ ĐžŅĐēĐģŅŅĐĩĐŊ</string>
|
||||
<string name="revanced_disable_precise_seeking_gesture_summary_off">ĐĐĩŅŅ Đ˛ĐēĐģŅŅĐĩĐŊ</string>
|
||||
</patch>
|
||||
<patch id="interaction.seekbar.enableSeekbarTappingPatch">
|
||||
<string name="revanced_seekbar_tapping_title">ĐĐēŅивиŅаĐŊĐĩ ĐŊа Đ´ĐžĐēĐžŅваĐŊĐĩŅĐž ĐŊа ĐģĐĩĐŊŅаŅа Са вŅĐĩĐŧĐĩ</string>
|
||||
<string name="revanced_seekbar_tapping_summary_on">ĐĐžĐēĐžŅваĐŊĐĩŅĐž ĐŊа ĐģĐĩĐŊŅаŅа Са вŅĐĩĐŧĐĩ Đĩ вĐēĐģŅŅĐĩĐŊĐž</string>
|
||||
<string name="revanced_seekbar_tapping_summary_off">ĐĐžĐēĐžŅваĐŊĐĩŅĐž ĐŊа ĐģĐĩĐŊŅаŅа Са вŅĐĩĐŧĐĩ Đĩ иСĐēĐģŅŅĐĩĐŊĐž</string>
|
||||
<string name="revanced_seekbar_tapping_summary_on">ФŅĐŊĐēŅиŅŅа âĐĐžĐēĐžŅваĐŊĐĩ Đ´Đž ĐģĐĩĐŊŅаŅа Са ŅŅŅŅĐĩĐŊĐĩâ Đĩ аĐēŅивиŅаĐŊа</string>
|
||||
<string name="revanced_seekbar_tapping_summary_off">ФŅĐŊĐēŅиŅŅа âĐĐžĐēĐžŅваĐŊĐĩ Đ´Đž ĐģĐĩĐŊŅаŅа Са ŅŅŅŅĐĩĐŊĐĩâ Đĩ Đ´ĐĩаĐēŅивиŅаĐŊа</string>
|
||||
</patch>
|
||||
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
|
||||
<string name="revanced_swipe_brightness_title">ĐадаваĐŊĐĩ ĐŊа ŅŅĐēĐžŅŅ ŅŅĐĩС ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">ĐадаваĐŊĐĩŅĐž ĐŊа ŅŅĐēĐžŅŅ ŅŅĐĩС ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ Đĩ вĐēĐģŅŅĐĩĐŊĐž</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">ĐадаваĐŊĐĩŅĐž ĐŊа ŅŅĐēĐžŅŅ ŅŅĐĩС ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ Đĩ иСĐēĐģŅŅĐĩĐŊĐž</string>
|
||||
<string name="revanced_swipe_brightness_summary_on">ĐĐŋŅиŅŅа Са ĐŋŅĐĩвŅŅŅаĐŊĐĩ Ņ ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ Са ĐŋŅĐžĐŧŅĐŊа ĐŊа ŅŅĐēĐžŅŅŅа Đĩ аĐēŅивиŅаĐŊа</string>
|
||||
<string name="revanced_swipe_brightness_summary_off">ĐĐŋŅиŅŅа Са ĐŋŅĐĩвŅŅŅаĐŊĐĩ Ņ ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ Са ĐŋŅĐžĐŧŅĐŊа ĐŊа ŅŅĐēĐžŅŅŅа Đĩ Đ´ĐĩаĐēŅивиŅаĐŊа</string>
|
||||
<string name="revanced_swipe_volume_title">ĐаŅŅŅОКваĐŊĐĩ ĐŊа СвŅĐēа ŅŅĐĩС ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ</string>
|
||||
<string name="revanced_swipe_volume_summary_on">ĐаŅŅŅОКваĐŊĐĩŅĐž ĐŊа СвŅĐēа ŅŅĐĩС ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ Đĩ вĐēĐģŅŅĐĩĐŊĐž</string>
|
||||
<string name="revanced_swipe_volume_summary_off">ĐаŅŅŅОКваĐŊĐĩŅĐž ĐŊа СвŅĐēа ŅŅĐĩС ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ Đĩ иСĐēĐģŅŅĐĩĐŊĐž</string>
|
||||
<string name="revanced_swipe_volume_summary_on">ĐĐąĐĩĐŧŅŅ ŅŅĐĩС ĐŋĐģŅСваĐŊĐĩ Đĩ аĐēŅивĐĩĐŊ</string>
|
||||
<string name="revanced_swipe_volume_summary_off">ĐĐąĐĩĐŧŅŅ ŅŅĐĩС ĐŋĐģŅСваĐŊĐĩ Đĩ Đ´ĐĩаĐēŅивиŅаĐŊ</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">ĐĐēŅивиŅаĐŊĐĩ ĐŊа ĐļĐĩŅŅа ĐŊаŅиŅĐēаĐŊĐĩ Са ĐŋŅĐĩĐŧĐĩŅŅваĐŊĐĩ</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">ĐаŅиŅĐēаĐŊĐĩŅĐž ĐŋŅи ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ Đĩ вĐēĐģŅŅĐĩĐŊĐž</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">ĐаŅиŅĐēаĐŊĐĩŅĐž ĐŋŅи ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ Đĩ иСĐēĐģŅŅĐĩĐŊĐž</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">ĐĐģŅĐˇĐŗĐ°ĐŊĐĩŅĐž ŅŅĐĩС ĐŊаŅиŅĐēаĐŊĐĩ Đĩ аĐēŅивиŅаĐŊĐž</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">ĐĐģŅĐˇĐŗĐ°ĐŊĐĩŅĐž ŅŅĐĩС ĐŊаŅиŅĐēаĐŊĐĩ Đĩ Đ´ĐĩаĐēŅивиŅаĐŊĐž</string>
|
||||
<string name="revanced_swipe_haptic_feedback_title">ĐĐēŅивиŅаĐŊĐĩ ĐŊа Ņ
ĐĩĐŋŅиŅĐŊаŅа ОйŅаŅĐŊа вŅŅСĐēа</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_on">ĐĨĐĩĐŋŅиŅĐŊаŅа ОйŅаŅĐŊа вŅŅСĐēа Đĩ аĐēŅивиŅаĐŊа</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_off">ĐĨĐĩĐŋŅиŅĐŊаŅа ОйŅаŅĐŊа вŅŅСĐēа Đĩ Đ´ĐĩаĐēŅивиŅаĐŊа</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_on">ĐĸаĐēŅиĐģĐŊаŅа ОйŅаŅĐŊа вŅŅСĐēа Đĩ аĐēŅивиŅаĐŊа</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_off">ĐĸаĐēŅиĐģĐŊаŅа ОйŅаŅĐŊа вŅŅСĐēа Đĩ Đ´ĐĩаĐēŅивиŅаĐŊа</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_title">ĐаĐŋаСваĐŊĐĩ и вŅСŅŅаĐŊОвŅваĐŊĐĩ ĐŊа ŅŅĐēĐžŅŅŅа</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_on">ĐаĐŋаСваĐŊĐĩ и вŅСŅŅаОвŅваĐŊĐĩ ŅŅĐēĐžŅŅŅа ĐŋŅи вĐēĐģŅŅваĐŊĐĩ иĐģи иСĐēĐģŅŅваĐŊĐĩ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_off">ĐĐĩ ŅĐĩ СаĐŋаСва иĐģи вŅСŅŅаОвŅва ŅŅĐēĐžŅŅŅа ĐŋŅи вĐēĐģŅŅваĐŊĐĩ иĐģи иСĐēĐģŅŅваĐŊĐĩ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ</string>
|
||||
@@ -419,12 +437,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">ĐĐģŅĐˇĐŗĐ°ĐŊĐĩŅĐž ĐŊадОĐģŅ Đ´Đž ĐŊаК-ĐŊиŅĐēаŅа ŅŅОКĐŊĐžŅŅ ĐŊа ĐļĐĩŅŅа Са ŅŅĐēĐžŅŅ, Са да ŅĐĩ аĐēŅивиŅа авŅĐžĐŧаŅиŅĐŊаŅа ŅŅĐēĐžŅŅ</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_off">ĐĐģŅĐˇĐŗĐ°ĐŊĐĩŅĐž ĐŊадОĐģŅ Đ´Đž ĐŊаК-ĐŊиŅĐēаŅа ŅŅОКĐŊĐžŅŅ ĐŊа ĐļĐĩŅŅа Са ŅŅĐēĐžŅŅ, ĐąĐĩС даŅĐĩ аĐēŅивиŅа авŅĐžĐŧаŅиŅĐŊаŅа ŅŅĐēĐžŅŅ</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_overlay_text">ĐвŅĐž</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">ĐадŅŅĐļĐēа ĐŊа ĐŋĐģŅĐˇĐŗĐ°ŅаŅа ĐēĐžĐŊŅŅĐžĐģа</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">ĐŅĐĩĐŧĐĩ Са ĐēĐžĐĩŅĐž ĐŋĐģŅĐˇĐŗĐ°ŅаŅа ĐēĐžĐŊŅŅĐžĐģа Đĩ видиĐŧа</string>
|
||||
<string name="revanced_swipe_overlay_timeout_title">ĐадŅŅĐļĐēа ĐŊа ĐŋĐģŅĐˇĐŗĐ°ŅаŅа ĐēĐžĐŊŅŅĐžĐģа Са ĐŋĐžĐēаСваĐŊĐĩ</string>
|
||||
<string name="revanced_swipe_overlay_timeout_summary">ĐŅĐĩĐŧĐĩ Са ĐēĐžĐĩŅĐž ĐŋĐģŅĐˇĐŗĐ°ŅаŅа ĐēĐžĐŊŅŅĐžĐģа Đĩ видиĐŧа.</string>
|
||||
<string name="revanced_swipe_text_overlay_size_title">РаСĐŧĐĩŅ ĐŊа ŅĐĩĐēŅŅа ĐŋŅи ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ</string>
|
||||
<string name="revanced_swipe_text_overlay_size_summary">РаСĐŧĐĩŅа ĐŊа ŅĐĩĐēŅŅа ĐŊа ĐŋĐģŅĐˇĐŗĐ°ŅиŅĐĩ ĐēĐžĐŊŅŅĐžĐģи</string>
|
||||
<string name="revanced_swipe_overlay_background_alpha_title">ĐидиĐŧĐžŅŅ ĐŊа ŅĐžĐŊа ĐŊа ĐŋĐģŅĐˇĐŗĐ°ŅиŅĐĩ ĐēĐžĐŊŅŅĐžĐģи</string>
|
||||
<string name="revanced_swipe_overlay_background_alpha_summary">ĐидиĐŧĐžŅŅŅа ĐŊа ŅĐžĐŊа ĐŊа ĐŋĐģŅĐˇĐŗĐ°ŅиŅĐĩ ĐēĐžĐŊŅŅĐžĐģи</string>
|
||||
<string name="revanced_swipe_overlay_background_alpha_summary">ĐидиĐŧĐžŅŅŅа ĐŊа ŅĐžĐŊа ĐŊа ĐŋĐģŅĐˇĐŗĐ°ŅиŅĐĩ ĐēĐžĐŊŅŅĐžĐģи.</string>
|
||||
<string name="revanced_swipe_threshold_title">ĐŅĐ°Đŗ ĐŊа вĐĩĐģиŅиĐŊаŅа ĐŊа ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ</string>
|
||||
<string name="revanced_swipe_threshold_summary">ĐŅĐ°Đŗ ĐŋŅĐĩди да ŅĐĩ ĐžŅŅŅĐĩŅŅви ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩŅĐž</string>
|
||||
</patch>
|
||||
@@ -490,11 +508,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">ĐŅŅĐžĐŊа Са айОĐŊаĐŧĐĩĐŊŅи ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">ĐаĐŧĐĩĐŊĐĩŅĐĩ ĐąŅŅĐžĐŊа âĐĄŅСдаваĐŊĐĩâ Ņ ĐąŅŅĐžĐŊа âĐСвĐĩŅŅиŅâ</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">ĐŅŅĐžĐŊŅŅ ĐˇĐ° ŅŅСдаваĐŊĐĩ ŅĐĩ СаĐŧĐĩĐŊŅ Ņ ĐąŅŅĐžĐŊа Са иСвĐĩŅŅиŅ\n\nĐайĐĩĐģĐĩĐļĐēа: ĐĐēŅивиŅаĐŊĐĩŅĐž ĐŊа ŅаСи ĐžĐŋŅĐ¸Ņ ŅŅŅĐž ŅĐēŅива видĐĩĐžŅĐĩĐēĐģаĐŧи</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"ĐŅŅĐžĐŊŅŅ ĐˇĐ° ŅŅСдаваĐŊĐĩ Đĩ ŅĐŧĐĩĐŊĐĩĐŊ Ņ ĐąŅŅĐžĐŊа ĐСвĐĩŅŅиŅ
|
||||
|
||||
ĐайĐĩĐģĐĩĐļĐēа: ĐĐēŅивиŅаĐŊĐĩŅĐž ĐŊа ŅОва ŅŅŅĐž ĐŋŅиĐŊŅдиŅĐĩĐģĐŊĐž ŅĐēŅива видĐĩĐž ŅĐĩĐēĐģаĐŧиŅĐĩ"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">ĐŅŅĐžĐŊиŅĐĩ \"ĐĄŅСдаваĐŊĐĩ\" и \"ĐСвĐĩŅŅиŅ\" ĐŊĐĩ Ņа ŅаСĐŧĐĩĐŊĐĩĐŊи</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">ĐĐŧĐĩĐŊа ĐŊа ĐąŅŅĐžĐŊиŅĐĩ ĐŊа ĐģĐĩĐŊŅаŅа Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°ŅиŅ</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">ĐŅиĐēĐĩŅиŅĐĩ Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">ĐŅиĐēĐĩŅиŅĐĩ ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_disable_translucent_status_bar_title">ĐĐĩаĐēŅивиŅаК ĐŋĐžĐģŅĐŋŅОСŅаŅĐŊаŅа ĐģĐĩĐŊŅа ĐŊа ŅŅŅŅĐžŅĐŊиĐĩŅĐž</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_on">ĐĄŅаŅŅŅĐŊĐ°Ņ ĐģĐĩĐŊŅа Đĩ ĐŊĐĩĐŋŅОСŅаŅĐŊа</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_off">ĐĄŅаŅŅŅĐŊĐ°Ņ ĐģĐĩĐŊŅа Đĩ ĐŊĐĩĐŋŅОСŅаŅĐŊа иĐģи ĐŋŅОСŅаŅĐŊа</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_title">ĐĐĩаĐēŅивиŅаК ĐŋĐžĐģŅĐŋŅОСŅаŅĐŊаŅа ŅвĐĩŅĐģа ĐģĐĩĐŊŅа Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°ŅиŅ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">ХвĐĩŅĐģаŅа ĐģĐĩĐŊŅа Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°ŅĐ¸Ņ Đĩ ĐŊĐĩĐŋŅОСŅаŅĐŊа</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">ХвĐĩŅĐģаŅа ĐģĐĩĐŊŅа Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°ŅĐ¸Ņ Đĩ ĐŊĐĩĐŋŅОСŅаŅĐŊа иĐģи ĐŋŅОСŅаŅĐŊа</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_title">ĐĐĩаĐēŅивиŅаĐŊĐĩ ĐŊа ŅŅĐŧĐŊаŅа ĐŋĐžĐģŅĐŋŅОСŅаŅĐŊа ĐģĐĩĐŊŅа</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">ĐĸŅĐŧĐŊаŅа ĐģĐĩĐŊŅа Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°ŅĐ¸Ņ Đĩ ĐŊĐĩĐŋŅОСŅаŅĐŊа</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">ĐĸŅĐŧĐŊаŅа ĐģĐĩĐŊŅа Са ĐŊĐ°Đ˛Đ¸ĐŗĐ°ŅĐ¸Ņ Đĩ ĐŊĐĩĐŋŅОСŅаŅĐŊа иĐģи ĐŋŅОСŅаŅĐŊа</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
|
||||
<string name="revanced_hide_player_flyout_title">ĐадаŅĐž ĐŧĐĩĐŊŅ</string>
|
||||
@@ -676,8 +705,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_info_panel_summary_on">ĐĐŊŅĐžŅĐŧаŅиОĐŊĐŊиŅĐĩ ĐŋаĐŊĐĩĐģи Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_shorts_info_panel_summary_off">ĐĐŊŅĐžŅĐŧаŅиОĐŊĐŊиŅĐĩ ĐŋаĐŊĐĩĐģи ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐģĐĩĐŊŅаŅа ĐŊа ĐēаĐŊаĐģа</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_summary_on">ĐĐĩĐŊŅаŅа ĐŊа ĐēаĐŊаĐģа Đĩ ŅĐēŅиŅа</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_summary_off">ĐĐĩĐŊŅаŅа ĐŊа ĐēаĐŊаĐģа Đĩ ĐŋĐžĐēаСаĐŊа</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_summary_on">ĐĐĩĐŊŅаŅа ĐŊа ĐēаĐŊаĐģа Đĩ ŅĐēŅиŅа.</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_summary_off">ĐĐĩĐŊŅаŅа ĐŊа ĐēаĐŊаĐģа Đĩ ĐŋĐžĐēаСаĐŊа.</string>
|
||||
<string name="revanced_hide_shorts_video_title_title">ĐĐ°ĐŗĐģавиĐĩ ĐŊа видĐĩĐžŅĐž</string>
|
||||
<string name="revanced_hide_shorts_video_title_summary_on">ĐĐ°ĐŗĐģавиĐĩŅĐž Đĩ ŅĐēŅиŅĐž</string>
|
||||
<string name="revanced_hide_shorts_video_title_summary_off">ĐĐ°ĐŗĐģавиĐĩŅĐž ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
@@ -709,6 +738,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">ĐСŅĐēаŅаŅиŅĐĩ ĐŋаĐŊĐĩĐģи ĐŊа ĐŋĐģĐĩĐšŅŅа Ņа ŅĐēŅиŅи</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">ĐСŅĐēаŅаŅиŅĐĩ ĐŋаĐŊĐĩĐģи ĐŊа ĐŋĐģĐĩĐšŅŅа ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">ĐŅваŅŅĐŊĐĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ в ĐŋĐžŅŅŅĐĩŅĐĩĐŊ ŅĐĩĐļиĐŧ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ ŅĐĩ ĐžŅваŅŅŅ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ ĐĐĩ ŅĐĩ ĐžŅваŅŅŅ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">ĐŅОСŅаŅĐŊĐžŅŅ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ в ĐĐģĐĩаŅа</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">ĐĄŅОКĐŊĐžŅŅ ĐŊа ĐŋŅОСŅаŅĐŊĐžŅŅ ĐŧĐĩĐļĐ´Ņ 0-100, ĐēŅĐ´ĐĩŅĐž 0 Đĩ ĐŋŅОСŅаŅĐŊĐž</string>
|
||||
@@ -726,7 +760,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">ĐĐĩŅ
аŅĐĩŅваĐŊиŅŅа ĐŊĐĩ ŅĐĩ ĐŋĐžĐēаСваŅ</string>
|
||||
<string name="revanced_ryd_shorts_title">ĐĐžĐē. ĐŊĐĩŅ
аŅĐĩŅваĐŊĐ¸Ņ Đ˛ ĐēŅаŅĐēиŅĐĩ ĐēĐģиĐŋОвĐĩ</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">ĐĐĩŅ
аŅĐĩŅваĐŊиŅŅа ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ Đ˛ ĐēŅаŅĐēиŅĐĩ ĐēĐģиĐŋОвĐĩ</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">ĐĐĩŅ
аŅĐĩŅваĐŊиŅ, ĐŋĐžĐēаСаĐŊи в Shorts\n\nĐĐŗŅаĐŊиŅĐĩĐŊиĐĩ: ĐĐĩŅ
аŅĐĩŅваĐŊиŅŅа ĐŧĐžĐļĐĩ да ĐŊĐĩ ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ Đ˛ ŅĐĩĐļиĐŧ âиĐŊĐēĐžĐŗĐŊиŅĐžâ</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"ĐĐĩŅ
аŅĐĩŅваĐŊиŅŅа ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ ĐŊа ŅĐžŅŅи
|
||||
|
||||
ĐĐŗŅаĐŊиŅĐĩĐŊиĐĩ: ĐĐĩŅ
аŅĐĩŅваĐŊиŅŅа ĐŧĐžĐļĐĩ да ĐŊĐĩ ŅĐĩ ĐŋĐžŅвŅŅ Đ˛ ŅĐĩĐļиĐŧ иĐŊĐēĐžĐŗĐŊиŅĐž"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">ĐĐĩŅ
аŅĐĩŅваĐŊиŅŅа Ņа ŅĐēŅиŅи в ĐēŅаŅĐēиŅĐĩ ĐēĐģиĐŋОвĐĩ</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">ĐĐĩŅ
аŅĐĩŅваĐŊĐ¸Ņ ĐēаŅĐž ĐŋŅĐžŅĐĩĐŊŅ</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">ĐĐĩŅ
аŅĐĩŅваĐŊиŅŅа ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ ĐēаŅĐž ĐŋŅĐžŅĐĩĐŊŅ</string>
|
||||
@@ -738,7 +774,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_toast_on_connection_error_title">ĐĐžĐēаСваĐŊĐĩ ĐŊа иСвĐĩŅŅиĐĩ, аĐēĐž API ĐŊĐĩ Đĩ ĐŊаĐģиŅĐĩĐŊ</string>
|
||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">ĐĐžĐēаСва иСвĐĩŅŅиĐĩ, аĐēĐž Return YouTube Dislike ĐŊĐĩ Đĩ ĐŊаĐģиŅĐĩĐŊ</string>
|
||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">ĐĐĩ ŅĐĩ ĐŋĐžĐēаСва иСвĐĩŅŅиĐĩ, аĐēĐž ReturnYouTube Dislike ĐŊĐĩ Đĩ ĐŊаĐģиŅĐĩĐŊ</string>
|
||||
<string name="revanced_ryd_about">ĐŅĐŊĐžŅĐŊĐž</string>
|
||||
<string name="revanced_ryd_about">Đа ĐŋŅĐžĐŗŅаĐŧаŅа</string>
|
||||
<string name="revanced_ryd_attribution_summary">ĐаĐŊĐŊиŅĐĩ Са ĐŊĐĩŅ
аŅĐĩŅваĐŊĐĩ Ņа ĐžŅ Return YouTube Dislike API. ĐĐžĐēĐžŅĐŊĐĩŅĐĩ Са да ĐŊаŅŅиŅĐĩ ĐŋОвĐĩŅĐĩ</string>
|
||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||
<string name="revanced_ryd_statistics_category_title">ĐĄŅаŅиŅŅиĐēа Return YouTube Dislike API ĐŊа ŅОва ŅŅŅŅОКŅŅвО</string>
|
||||
@@ -769,7 +805,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">ĐиĐŊиаŅŅŅи Ņ ŅŅĐĩĐ´ĐŊĐž ĐēаŅĐĩŅŅвО в ĐģĐĩĐŊŅаŅа ĐŊа вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩ</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">ĐиĐŊиаŅŅŅи Ņ Đ˛Đ¸ŅĐžĐēĐž ĐēаŅĐĩŅŅвО в ĐģĐĩĐŊŅаŅа ĐŊа ĐŋŅĐžĐŗŅĐĩŅа ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">ĐиĐŊиаŅŅŅи ŅŅŅ ŅŅĐĩĐ´ĐŊĐž ĐēаŅĐĩŅŅвО в ĐģĐĩĐŊŅаŅа ĐŊа ĐŋŅĐžĐŗŅĐĩŅа ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">ĐĸОва ŅŅŅĐž ŅаĐēа ŅĐĩ вŅСŅŅаĐŊОви ĐŧиĐŊиаŅŅŅи ĐŊа ĐŋĐžŅĐžŅи ĐŊа ĐļивО, ĐēОиŅĐž ĐŊŅĐŧĐ°Ņ ĐŧиĐŊиаŅŅŅи ĐŊа ĐģĐĩĐŊŅаŅа ĐŊа ĐŋŅĐžĐŗŅĐĩŅа.\n\nĐиĐŊииСОйŅаĐļĐĩĐŊиŅŅа ĐŊа ĐģĐĩĐŊŅаŅа ĐŊа ĐŋŅĐžĐŗŅĐĩŅа ŅĐĩ иСĐŋĐžĐģĐˇĐ˛Đ°Ņ ŅŅŅĐžŅĐž ĐēаŅĐĩŅŅвО ĐēаŅĐž ŅĐĩĐēŅŅĐ¸Ņ Đ˛Đ¸Đ´ĐĩĐžĐēĐģиĐŋ.\n\nĐĸаСи ŅŅĐŊĐēŅĐ¸Ņ ŅайОŅи ĐŊаК-дОйŅĐĩ Ņ ĐēаŅĐĩŅŅвО ĐŊа видĐĩĐžŅĐž 720p иĐģи ĐŋĐž-ĐŊиŅĐēĐž и ĐēĐžĐŗĐ°ŅĐž иСĐŋĐžĐģСваŅĐĩ ĐŧĐŊĐžĐŗĐž ĐąŅŅСО иĐŊŅĐĩŅĐŊĐĩŅ Đ˛ŅŅСĐēа.</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"ĐĸОва ŅŅŅĐž ŅĐĩ вŅСŅŅаĐŊОви ĐŧиĐŊиаŅŅŅиŅĐĩ ĐŊа ĐŋŅĐĩдаваĐŊĐ¸Ņ ĐŊа ĐļивО, ĐēОиŅĐž ĐŊŅĐŧĐ°Ņ ĐŧиĐŊиаŅŅŅи ĐŊа ĐŋĐģŅĐˇĐŗĐ°Ņа.
|
||||
|
||||
ĐиĐŊиаŅŅŅиŅĐĩ ĐŊа ĐŋĐģŅĐˇĐŗĐ°Ņа ŅĐĩ иСĐŋĐžĐģĐˇĐ˛Đ°Ņ ŅŅŅĐžŅĐž ĐēаŅĐĩŅŅвО ĐēаŅĐž ŅĐĩĐēŅŅĐžŅĐž видĐĩĐž.
|
||||
|
||||
ĐĸаСи ŅŅĐŊĐēŅĐ¸Ņ ŅайОŅи ĐŊаК-дОйŅĐĩ Ņ Đ˛Đ¸Đ´ĐĩĐž ĐēаŅĐĩŅŅвО ĐžŅ 720p иĐģи ĐŋĐž-ĐŊиŅĐēĐž и ĐŋŅи иСĐŋĐžĐģСваĐŊĐĩ ĐŊа ĐŧĐŊĐžĐŗĐž ĐąŅŅСа иĐŊŅĐĩŅĐŊĐĩŅ Đ˛ŅŅСĐēа."</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">ĐĄŅаŅи ĐŧиĐŊиаŅŅŅи ĐŊа вŅĐĩĐŧĐĩваŅа ĐģиĐŊиŅ</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Đад ĐģĐĩĐŊŅаŅа Са вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩ ŅĐĩ ĐŋĐžŅвŅĐ˛Đ°Ņ ĐŧиĐŊиаŅŅŅи</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">ĐиĐŊиаŅŅŅиŅĐĩ ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ Đ˛ ŅĐĩĐļиĐŧ ĐŊа ŅŅĐģ ĐĩĐēŅаĐŊ</string>
|
||||
@@ -777,7 +817,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
|
||||
<string name="revanced_sb_enable_sb">ĐĐēĐģŅŅваĐŊĐĩ ĐŊа SponsorBlock</string>
|
||||
<string name="revanced_sb_enable_sb_sum">SponsorBlock Đĩ ŅиŅŅĐĩĐŧа Са ĐŋŅĐĩŅĐēаŅаĐŊĐĩ ĐŊа Đ´ĐžŅадĐŊи ŅаŅŅи и ŅĐĩĐēĐģаĐŧи ĐžŅ Đ˛Đ¸Đ´ĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ в YouTube</string>
|
||||
<string name="revanced_sb_appearance_category">ĐĐąĐģиĐē</string>
|
||||
<string name="revanced_sb_appearance_category">ĐŅĐŊŅĐĩĐŊ вид</string>
|
||||
<string name="revanced_sb_enable_voting">ĐŅŅĐžĐŊа Са ĐŗĐģаŅŅваĐŊĐĩ</string>
|
||||
<string name="revanced_sb_enable_voting_sum_on">ĐŅŅĐžĐŊа Са ĐŗĐģаŅŅваĐŊĐĩ ĐŊа ŅаŅŅ ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<string name="revanced_sb_enable_voting_sum_off">ĐŅŅĐžĐŊа Са ĐŗĐģаŅŅваĐŊĐĩ ĐŊа ŅаŅŅ Đĩ ŅĐēŅиŅ</string>
|
||||
@@ -801,13 +841,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_adjusting">ĐаŅŅŅОКваĐŊĐĩ ŅŅŅĐŋĐēа ĐŊа ĐŊОваŅа ŅаŅŅ</string>
|
||||
<string name="revanced_sb_general_adjusting_sum">ĐиĐģиŅĐĩĐēŅĐŊдиŅĐĩ Ņ ĐēОКŅĐž ŅĐĩ ĐŋŅĐĩĐŧĐĩŅŅĐ˛Đ°Ņ ĐąŅŅĐžĐŊиŅĐĩ Са ĐŊаŅŅŅОКĐēа ĐŋŅи ŅŅСдаваĐŊĐĩ ĐŊа ŅаŅŅ</string>
|
||||
<string name="revanced_sb_general_adjusting_invalid">ĐĄŅОКĐŊĐžŅŅŅа ŅŅŅйва да Đĩ ĐŋĐžĐģĐžĐļиŅĐĩĐģĐŊĐž ŅиŅĐģĐž</string>
|
||||
<string name="revanced_sb_guidelines_preference_title">ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа ŅŅĐēОвОдĐŊиŅĐĩ ĐģиĐŊии</string>
|
||||
<string name="revanced_sb_guidelines_preference_title">ĐиĐļŅĐĩ ŅĐēаСаĐŊиŅŅа</string>
|
||||
<string name="revanced_sb_guidelines_preference_sum">ĐŖĐēаСаĐŊиŅŅа ŅŅĐ´ŅŅĐļĐ°Ņ ĐŋŅавиĐģа и ŅŅвĐĩŅи Са ŅŅСдаваĐŊĐĩ ĐŊа ĐŊОви ŅаŅŅи</string>
|
||||
<string name="revanced_sb_guidelines_popup_title">ĐĄĐģĐĩдваКŅĐĩ ŅĐēаСаĐŊиŅŅа</string>
|
||||
<string name="revanced_sb_guidelines_popup_content">ĐŅĐžŅĐĩŅĐĩŅĐĩ ŅĐēаСаĐŊиŅŅа ĐŊа SponsorBlock ĐŋŅĐĩди да ŅŅСдадĐĩŅĐĩ ĐŊОви ŅаŅŅи</string>
|
||||
<string name="revanced_sb_guidelines_popup_already_read">ĐĐĩŅĐĩ ĐŋŅĐžŅĐĩŅĐžŅ
</string>
|
||||
<string name="revanced_sb_guidelines_popup_already_read">ĐĐĩŅĐĩ ĐŗĐ¸ ĐŋŅĐžŅĐĩŅĐžŅ
</string>
|
||||
<string name="revanced_sb_guidelines_popup_open">ĐĐžĐēаĐļи Đŧи</string>
|
||||
<string name="revanced_sb_general">ĐĐąŅи</string>
|
||||
<string name="revanced_sb_general">ĐŅĐŊОвĐĩĐŊ</string>
|
||||
<string name="revanced_sb_toast_on_connection_error_title">ĐĐžĐēаСваĐŊĐĩ ĐŊа иСвĐĩŅŅиĐĩ, аĐēĐž API ĐŊĐĩ Đĩ ĐŊаĐģиŅĐĩĐŊ</string>
|
||||
<string name="revanced_sb_toast_on_connection_error_summary_on">ĐĐžĐēаСва ŅĐĩ иСвĐĩŅŅиĐĩ, аĐēĐž SponsorBlock ĐŊĐĩ Đĩ ĐŊаĐģиŅĐĩĐŊ</string>
|
||||
<string name="revanced_sb_toast_on_connection_error_summary_off">ĐĐžĐēаСва ŅĐĩ иСвĐĩŅŅиĐĩ, аĐēĐž SponsorBlock ĐŊĐĩ Đĩ ĐŊаĐģиŅĐĩĐŊ</string>
|
||||
@@ -818,24 +858,27 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_min_duration_sum">ЧаŅŅи, ĐŋĐž-ĐēŅаŅĐēи ĐžŅ ŅаСи ŅŅОКĐŊĐžŅŅ (в ŅĐĩĐēŅĐŊди) ĐŊŅĐŧа да ĐąŅĐ´Đ°Ņ ĐŋŅĐžĐŋŅŅĐēаĐŊи иĐģи ĐŋĐžĐēаСваĐŊи</string>
|
||||
<string name="revanced_sb_general_min_duration_invalid">ĐĐĩваĐģидĐŊа вŅĐĩĐŧĐĩŅŅаĐĩĐŊĐĩ</string>
|
||||
<string name="revanced_sb_general_uuid">ĐаŅиŅŅ ŅĐŊиĐēаĐģĐĩĐŊ ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēи id</string>
|
||||
<string name="revanced_sb_general_uuid_sum">ĐĸОва ŅŅŅйва да ŅĐĩ Đ´ŅŅĐļи ŅаКĐŊĐž. ĐĸĐž Đĩ ĐēаŅĐž ĐŋаŅĐžĐģа и ĐŊĐĩ ŅŅŅйва да ŅĐĩ ŅĐŋОдĐĩĐģŅ Ņ ĐŊиĐēĐžĐŗĐž. ĐĐēĐž ĐŊŅĐēОК ĐŗĐž иĐŧа, ŅĐž ŅОК ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋŅĐĩĐ´ŅŅави вĐŧĐĩŅŅĐž ваŅ</string>
|
||||
<string name="revanced_sb_general_uuid_sum">ĐĸОва ŅŅŅйва да ŅĐĩ ĐŋаСи ŅаКĐŊĐž. ĐĸĐž Đĩ ĐēаŅĐž ĐŋаŅĐžĐģа и ĐŊĐĩ ŅŅŅйва да ŅĐĩ ŅĐŋОдĐĩĐģŅ Ņ ĐŊиĐēĐžĐŗĐž. ĐĐēĐž ĐŊŅĐēОК ĐŗĐž ĐŋŅиŅĐĩĐļава, ŅОК ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋŅĐĩĐ´ŅŅави вĐŧĐĩŅŅĐž ваŅ.</string>
|
||||
<string name="revanced_sb_general_uuid_invalid">ĐиŅĐŊиŅŅ Id ŅŅŅйва да Đĩ Ņ Đ´ŅĐģĐļиĐŊа ĐŋĐžĐŊĐĩ 30 СĐŊаĐēа</string>
|
||||
<string name="revanced_sb_general_api_url">ĐŅĐžĐŧŅĐŊа URL ĐŊа API</string>
|
||||
<string name="revanced_sb_general_api_url_sum">ĐĐ´ŅĐĩŅŅŅ, ĐēОКŅĐž SponsorBlock иСĐŋĐžĐģСва Са ŅвŅŅСваĐŊĐĩ ĐēŅĐŧ ŅŅŅвŅŅа</string>
|
||||
<string name="revanced_sb_api_url_reset">ĐŅĐģиŅаĐŊĐĩ URL адŅĐĩŅа ĐŊа API</string>
|
||||
<string name="revanced_sb_api_url_reset">ĐŅĐģиŅаĐŊĐĩ URL адŅĐĩŅа, ĐŊа API.</string>
|
||||
<string name="revanced_sb_api_url_invalid">URL адŅĐĩŅŅŅ Đĩ ĐŊĐĩваĐģидĐĩĐŊ</string>
|
||||
<string name="revanced_sb_api_url_changed">URL адŅĐĩŅŅŅ ĐŊа API Đĩ ĐŋŅĐžĐŧĐĩĐŊĐĩĐŊ</string>
|
||||
<string name="revanced_sb_settings_ie">ĐаŅŅŅОКĐēи Са вĐŊаŅŅĐŊĐĩ и иСĐŊаŅŅĐŊĐĩ</string>
|
||||
<string name="revanced_sb_settings_copy">ĐĐžĐŋиŅаĐŊĐĩ</string>
|
||||
<string name="revanced_sb_api_url_changed">URL API Đĩ ĐŋŅĐžĐŧĐĩĐŊĐĩĐŊ.</string>
|
||||
<string name="revanced_sb_settings_ie">ĐĐŧĐŋĐžŅŅиŅаĐŊĐĩ / ĐĐēŅĐŋĐžŅŅиŅаĐŊĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ</string>
|
||||
<string name="revanced_sb_settings_copy">ĐĐžĐŋиŅаК</string>
|
||||
<string name="revanced_sb_settings_ie_sum">ĐаŅаŅа JSON ĐēĐžĐŊŅĐ¸ĐŗŅŅаŅĐ¸Ņ ĐŊа SponsorBlock ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ иĐŧĐŋĐžŅŅиŅаĐŊа/ĐĩĐēŅĐŋĐžŅŅиŅаĐŊа в ReVanced и Đ´ŅŅĐŗĐ¸ ĐŋĐģаŅŅĐžŅĐŧи ĐŊа SponsorBlock</string>
|
||||
<string name="revanced_sb_settings_ie_sum_warning">ĐаŅаŅа SponsorBlock JSON ĐēĐžĐŊŅĐ¸ĐŗŅŅаŅĐ¸Ņ ĐēĐžŅŅĐž ĐŧĐžĐļĐĩ да ŅĐĩ иĐŧĐŋĐžŅŅиŅа/ĐĩĐēŅĐŋĐžŅŅиŅа Đ´Đž ReVanced иĐģи Đ´ŅŅĐŗĐ¸ ĐŋĐģаŅŅĐžŅĐŧи ĐŋĐžĐģСваŅи SponsorBlock. ĐĸОва вĐēĐģŅŅва ваŅĐ¸Ņ ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēи id. ĐĄĐŋОдĐĩĐģŅĐšŅĐĩ ŅОва ŅаСŅĐŧĐŊĐž</string>
|
||||
<string name="revanced_sb_settings_import_successful">ĐаŅŅŅОКĐēиŅĐĩ Ņа ŅŅĐŋĐĩŅĐŊĐž вŅŅŅаĐŊОвĐĩĐŊи</string>
|
||||
<string name="revanced_sb_settings_import_failed">ĐĐĩŅŅĐŋĐĩŅĐŊĐž иĐŧĐŋĐžŅŅиŅаĐŊĐĩ: %s</string>
|
||||
<string name="revanced_sb_settings_export_failed">ĐĐĩŅŅĐŋĐĩŅĐŊĐž ĐĩĐēŅĐŋĐžŅŅиŅаĐŊĐĩ ĐŊа %s</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">ĐаŅиŅĐĩ ĐŊаŅŅŅОКĐēи ĐŊа SponsorBlock ŅŅĐ´ŅŅĐļĐ°Ņ ĐģиŅĐŊĐž Id.\n\nĐаŅĐĩŅĐž Id Đĩ ĐēаŅĐž ĐŋаŅĐžĐģа и ĐŊĐĩ ŅŅŅйва да ŅĐĩ ŅĐŋОдĐĩĐģŅ Ņ ĐŊиĐēĐžĐŗĐž\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"ĐаŅиŅĐĩ ĐŊаŅŅŅОКĐēи ŅŅĐ´ŅŅĐļĐ°Ņ ĐŋОвĐĩŅиŅĐĩĐģĐĩĐŊ идĐĩĐŊŅиŅиĐēаŅĐžŅ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģ ĐŊа SponsorBlock.
|
||||
|
||||
ĐĐ´ĐĩĐŊŅиŅиĐēаŅĐžŅŅŅ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģŅ Đĩ ĐēаŅĐž ĐŋаŅĐžĐģа и ĐŊиĐēĐžĐŗĐ° ĐŊĐĩ ŅŅŅйва да ŅĐĩ ŅĐŋОдĐĩĐģŅ.
|
||||
"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">ĐĐĩ ĐŋĐžĐēаСваК ĐžŅĐŊОвО</string>
|
||||
<string name="revanced_sb_diff_segments">ĐŅĐžĐŧĐĩĐŊи ĐŋОвĐĩĐ´ĐĩĐŊиĐĩŅĐž ĐŊа ŅĐ¸ĐŗĐŧĐĩĐŊŅа</string>
|
||||
<string name="revanced_sb_segments_sponsor">ĐĄĐŋĐžĐŊŅĐžŅ</string>
|
||||
<string name="revanced_sb_segments_sponsor">ĐĄĐŋĐžĐŊŅĐžŅи</string>
|
||||
<string name="revanced_sb_segments_sponsor_sum">ĐĐģаŅĐĩĐŊа ĐŋŅĐžĐŧĐžŅиŅ, ĐŋĐģаŅĐĩĐŊи ĐŋŅĐĩĐŋĐžŅŅĐēи и диŅĐĩĐēŅĐŊи ŅĐĩĐēĐģаĐŧи. ĐĐĩ Са ŅаĐŧĐžŅĐĩĐēĐģаĐŧа иĐģи ĐąĐĩСĐŋĐģаŅĐŊи ĐŋŅĐĩĐŋĐžŅŅĐēи Са ĐēаŅСи/ŅŅСдаŅĐĩĐģи/ŅĐĩĐąŅаКŅОвĐĩ/ĐŋŅОдŅĐēŅи, ĐēОиŅĐž ŅĐĩ Ņ
аŅĐĩŅĐ˛Đ°Ņ ĐŊа авŅĐžŅа</string>
|
||||
<string name="revanced_sb_segments_selfpromo">ĐĐĩĐŋĐģаŅĐĩĐŊа/ХаĐŧĐžŅĐĩĐēĐģаĐŧа</string>
|
||||
<string name="revanced_sb_segments_selfpromo_sum">ĐОдОйĐŊĐž ĐŊа âĐĄĐŋĐžĐŊŅĐžŅâ, Ņ Đ¸ĐˇĐēĐģŅŅĐĩĐŊиĐĩ ĐŊа ĐŊĐĩĐŋĐģаŅĐĩĐŊĐž иĐģи ŅаĐŧĐžŅĐĩĐēĐģаĐŧа. ĐĐēĐģŅŅва ŅаСдĐĩĐģи Са ŅŅĐžĐēи, даŅĐĩĐŊĐ¸Ņ Đ¸Đģи иĐŊŅĐžŅĐŧаŅĐ¸Ņ ĐˇĐ° ŅОва Ņ ĐēĐžĐŗĐž Ņа Ņи ŅŅŅŅŅĐ´ĐŊиŅиĐģи</string>
|
||||
@@ -884,17 +927,18 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_skipped_nomusic">ĐŅĐžĐŋŅŅĐŊаŅа ŅаŅŅ ĐąĐĩС ĐŧŅСиĐēа</string>
|
||||
<string name="revanced_sb_skipped_unsubmitted">ĐŅĐžĐŋŅŅĐŊĐ°Ņ ĐŊĐĩиСĐŋŅаŅĐĩĐŊ ŅĐĩĐŗĐŧĐĩĐŊŅ</string>
|
||||
<string name="revanced_sb_skipped_multiple_segments">ĐŅĐžĐŋŅŅĐŊаŅи ĐŧĐŊĐžĐļĐĩŅŅвО ŅаŅŅи</string>
|
||||
<string name="revanced_sb_skip_automatically">Đа ŅĐĩ ĐŋŅĐĩŅĐēаŅа ĐžŅ ŅаĐŧĐž ŅĐĩĐąĐĩ Ņи</string>
|
||||
<string name="revanced_sb_skip_automatically">ĐвŅĐžĐŧаŅиŅĐŊĐž ĐŋŅĐžĐŋŅŅĐēаĐŊĐĩ</string>
|
||||
<string name="revanced_sb_skip_automatically_once">ĐвŅ. ĐŋŅĐžĐŋŅŅĐēаĐŊĐĩ вĐĩĐ´ĐŊŅĐļ</string>
|
||||
<string name="revanced_sb_skip_showbutton">ĐĐžĐēаСваК ĐąŅŅĐžĐŊ Са ĐŋŅĐžĐŋŅŅĐēаĐŊĐĩ</string>
|
||||
<string name="revanced_sb_skip_seekbaronly">ĐĐžĐēаСв. в ĐģĐĩĐŊŅаŅа Са вŅĐĩĐŧĐĩ</string>
|
||||
<string name="revanced_sb_skip_ignore">ĐСĐēĐģŅŅваĐŊĐĩ</string>
|
||||
<string name="revanced_sb_skip_ignore">ĐĐĩаĐēŅивиŅаĐŊĐĩ</string>
|
||||
<string name="revanced_sb_submit_failed_invalid">ĐĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ иСĐŋŅаŅи ŅĐĩĐŗĐŧĐĩĐŊŅ: %s</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock вŅĐĩĐŧĐĩĐŊĐŊĐž ĐŊĐĩ ŅайОŅи</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">ĐĐĩ ĐŧĐžĐŗĐ°Ņ Đ´Đ° ŅĐĩ иСĐŋŅаŅŅŅ ŅĐ¸ĐŗĐŧĐĩĐŊŅи: (ŅŅаŅŅŅ:%1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">ĐĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ иСĐŋŅаŅи ŅаŅŅŅа.\nĐŅĐžŅŅ Đĩ ĐžĐŗŅаĐŊиŅĐĩĐŊ (ĐĸвŅŅĐ´Đĩ ĐŧĐŊĐžĐŗĐž ĐžŅ ĐĩдиĐŊ и ŅŅŅ ĐŋĐžŅŅĐĩйиŅĐĩĐģ, IP)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">ĐĐĩŅŅĐŋĐĩŅĐŊĐž иСĐŋŅаŅаĐŊĐĩ ĐŊа ŅĐĩĐŗĐŧĐĩĐŊŅ. ĐĐŗŅаĐŊиŅĐĩĐŊа ŅĐēĐžŅĐžŅŅ (ŅвŅŅĐ´Đĩ ĐŧĐŊĐžĐŗĐž ĐžŅ ĐĩдиĐŊ и ŅŅŅ ĐŋĐžŅŅĐĩйиŅĐĩĐģ иĐģи IP)</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">ĐĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ иСĐŋŅаŅи ŅаŅŅŅа: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">ĐĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ иСĐŋŅаŅи ŅаŅŅŅа.\nĐĐĩŅĐĩ ŅŅŅĐĩŅŅвŅва</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"ĐĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ иСĐŋŅаŅи ŅĐĩĐŗĐŧĐĩĐŊŅŅŅ.
|
||||
ĐĐĩŅĐĩ ŅŅŅĐĩŅŅвŅва"</string>
|
||||
<string name="revanced_sb_submit_succeeded">ЧаŅŅŅа Đĩ иСĐŋŅаŅĐĩĐŊа ŅŅĐŋĐĩŅĐŊĐž</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock вŅĐĩĐŧĐĩĐŊĐŊĐž ĐŊĐĩ Đĩ ĐŊаĐģиŅĐĩĐŊ (API timed out)</string>
|
||||
@@ -917,7 +961,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_time_start">ЧаŅŅŅа СаĐŋĐžŅва ĐžŅ</string>
|
||||
<string name="revanced_sb_new_segment_time_end">ЧаŅŅŅа ŅвŅŅŅва Đ´Đž</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">ĐŅĐĩĐŧĐĩĐŊаŅа ŅĐžŅĐŊи Đģи Ņа?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">ĐĄĐĩĐŗĐŧĐĩĐŊŅŅŅ ĐŋŅОдŅĐģĐļава ĐžŅ\n\n%1$s\nĐ´Đž\n%2$s\n\n(%3$s)\n\nĐĐžŅОв Đģи Đĩ Са иСĐŋŅаŅаĐŊĐĩ?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"ĐĄĐĩĐŗĐŧĐĩĐŊŅŅŅ Đĩ ĐžŅ
|
||||
|
||||
\"%1$s\"
|
||||
Đ´Đž
|
||||
\"%2$s\"
|
||||
|
||||
(\"%3$s\")
|
||||
|
||||
ĐĐžŅОви Đģи ŅŅĐĩ да ĐŗĐž иСĐŋŅаŅиŅĐĩ?"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">ĐаŅаĐģĐžŅĐž ŅŅŅйва да ĐąŅĐ´Đĩ ĐŋŅĐĩди ĐēŅаŅ</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">ĐŅŅвО ĐŧаŅĐēиŅаКŅĐĩ двĐĩ ĐŧĐĩŅŅа в ĐģĐĩĐŊŅаŅа Са вŅĐĩĐŧĐĩŅĐž</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">ĐŅĐĩĐŗĐģĐĩĐ´ и ĐŋŅОвĐĩŅĐēа ĐŊа ŅаŅŅŅа Са ĐŊĐžŅĐŧаĐģĐŊĐž ĐŋŅĐžĐŋŅŅĐēаĐŊĐĩ</string>
|
||||
@@ -928,11 +980,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||
<string name="revanced_sb_stats_connection_failure">ĐĄŅаŅиŅŅиĐēаŅа Đĩ вŅаĐŧĐĩĐŊĐŊĐž ĐŊĐĩĐ´ĐžŅŅŅĐŋĐŊа (API ĐŊĐĩ ŅайОŅи)</string>
|
||||
<string name="revanced_sb_stats_loading">ĐаŅĐĩĐļдаĐŊĐĩ...</string>
|
||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock Đĩ иСĐēĐģŅŅĐĩĐŊĐž</string>
|
||||
<string name="revanced_sb_stats_sb_disabled">SponsorBlock Đĩ Đ´ĐĩаĐēŅивиŅаĐŊ.</string>
|
||||
<string name="revanced_sb_stats_username">ĐаŅĐĩŅĐž ĐŋĐžŅŅĐĩĐą. иĐŧĐĩ: <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 +1003,19 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_color_reset">ĐŅСŅŅаĐŊОви ŅвĐĩŅа</string>
|
||||
<string name="revanced_sb_color_invalid">ĐĐĩваĐģидĐŊа ŅŅОКĐŊĐžŅŅ ĐˇĐ° ŅвĐĩŅа</string>
|
||||
<string name="revanced_sb_reset_color">ĐŅСŅŅаĐŊОвŅваĐŊĐĩ ĐŊа ŅвŅŅ</string>
|
||||
<string name="revanced_sb_reset">ĐŅĐģиŅаĐŊĐĩ</string>
|
||||
<string name="revanced_sb_about">ĐŅĐŊĐžŅĐŊĐž</string>
|
||||
<string name="revanced_sb_reset">ĐŅСŅŅаĐŊОви</string>
|
||||
<string name="revanced_sb_about">Đа ĐŋŅĐžĐŗŅаĐŧаŅа</string>
|
||||
<string name="revanced_sb_about_api_sum">ĐаĐŊĐŊиŅĐĩ Ņа ĐŋŅĐĩĐ´ĐžŅŅавĐĩĐŊи ĐžŅ SponsorBlock API. ĐĐžĐēĐžŅĐŊĐĩŅĐĩ ŅŅĐē Са ĐŋОвĐĩŅĐĩ иĐŊŅĐžŅĐŧаŅĐ¸Ņ Đ¸ иСŅĐĩĐŗĐģиŅĐŊиŅ</string>
|
||||
</patch>
|
||||
<patch id="layout.spoofappversion.spoofAppVersionPatch">
|
||||
<string name="revanced_spoof_app_version_title">ĐОдĐģŅĐŗĐ˛Đ°ĐŊĐĩ Са вĐĩŅŅиŅŅа ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">ĐОдĐŋŅавĐĩĐŊа вĐĩŅŅиŅ</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">ĐĐĩ ĐŋОдĐŋŅавĐĩĐŊа вĐĩŅŅиŅ</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">ĐĐĩŅŅиŅŅа ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž YouTube ŅĐĩ ĐąŅĐ´Đĩ ĐŋŅĐžĐŧĐĩĐŊĐĩĐŊа ĐŊа ĐŋĐž-ŅŅаŅа.\n\nĐĸОва ŅĐĩ ĐŋŅĐžĐŧĐĩĐŊи вŅĐŊŅĐŊĐ¸Ņ Đ˛Đ¸Đ´ и ŅŅĐŊĐēŅииŅĐĩ ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž.\n\nĐŊĐž аĐēĐž ĐŋĐž-ĐēŅŅĐŊĐž ŅĐĩ Đ´ĐĩаĐēŅивиŅа, ŅĐĩ ĐŋŅĐĩĐŋĐžŅŅŅва да иСŅиŅŅиŅĐĩ даĐŊĐŊиŅĐĩ ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž, Са да иСйĐĩĐŗĐŊĐĩŅĐĩ ĐŗŅĐĩŅĐēи в ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēĐ¸Ņ Đ¸ĐŊŅĐĩŅŅĐĩĐšŅ.</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"ĐĐĩŅŅиŅŅа ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž ŅĐĩ ĐąŅĐ´Đĩ ŅаĐģŅиŅиŅиŅаĐŊа ĐŋĐž-ŅŅаŅа вĐĩŅŅĐ¸Ņ ĐŊа YouTube.
|
||||
|
||||
ĐĸОва ŅĐĩ ĐŋŅĐžĐŧĐĩĐŊи вŅĐŊŅĐŊĐ¸Ņ Đ˛Đ¸Đ´ и ŅŅĐŊĐēŅииŅĐĩ ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž, ĐŊĐž ĐŧĐžĐļĐĩ да вŅСĐŊиĐēĐŊĐ°Ņ ĐŊĐĩиСвĐĩŅŅĐŊи ŅŅŅаĐŊиŅĐŊи ĐĩŅĐĩĐēŅи.
|
||||
|
||||
ĐĐēĐž ĐŋĐž-ĐēŅŅĐŊĐž ĐąŅĐ´Đĩ иСĐēĐģŅŅĐĩĐŊĐž, ĐŋŅĐĩĐŋĐžŅŅŅиŅĐĩĐģĐŊĐž Đĩ да иСŅиŅŅиŅĐĩ даĐŊĐŊиŅĐĩ ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž, Са да ĐŋŅĐĩĐ´ĐžŅвŅаŅиŅĐĩ ĐŗŅĐĩŅĐēи в ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēĐ¸Ņ Đ¸ĐŊŅĐĩŅŅĐĩĐšŅ."</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">ĐОдĐģŅĐŗĐ˛Đ°ĐŊĐĩ Са вĐĩŅŅиŅŅа ĐŊа</string>
|
||||
@@ -1012,7 +1068,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">ĐŅĐžĐŧĐĩĐŊĐĩŅĐĩ ŅŅиĐģа ĐŊа ĐŧиĐŊиĐŧиСиŅаĐŊĐ¸Ņ ĐĩĐēŅаĐŊ Са вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩ</string>
|
||||
<string name="revanced_miniplayer_type_title">ĐиĐŊиĐŧиСиŅаĐŊ ŅиĐŋ ĐĩĐēŅаĐŊ Са ĐŗĐģĐĩдаĐŊĐĩ</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">ĐĐĩаĐēŅивиŅаĐŊĐž</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">ĐŅĐ¸ĐŗĐ¸ĐŊаĐģ</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">ĐĐž ĐŋОдŅаСйиŅаĐŊĐĩ</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">ĐиĐŊиĐŧаĐģĐŊĐž</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">ĐĸайĐģĐĩŅ</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">ĐОдĐĩŅĐĩĐŊ 1</string>
|
||||
@@ -1022,19 +1078,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">ĐĒĐŗĐģиŅĐĩ Ņа СаОйĐģĐĩĐŊи</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">ĐĒĐŗĐģиŅĐĩ Ņа ĐŊĐžŅĐŧаĐģĐŊи</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">ĐĐēŅивиŅаКŅĐĩ двОКĐŊĐžŅĐž Đ´ĐžĐēĐžŅваĐŊĐĩ и ŅиĐŋваĐŊĐĩ Са ĐŋŅĐĩĐžŅаСĐŧĐĩŅŅваĐŊĐĩ</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">ĐĐĩĐšŅŅвиĐĩŅĐž Ņ Đ´Đ˛ĐžĐšĐŊĐž Đ´ĐžĐēĐžŅваĐŊĐĩ и ŅиĐŋваĐŊĐĩ Са ĐŋŅĐĩĐžŅаСĐŧĐĩŅŅваĐŊĐĩ Đĩ аĐēŅивиŅаĐŊĐž\n\nâĸ ĐĐžĐēĐžŅĐŊĐĩŅĐĩ двŅĐēŅаŅĐŊĐž, Са да ŅвĐĩĐģиŅиŅĐĩ ŅаСĐŧĐĩŅа ĐŊа ĐŧиĐŊиĐŋĐģĐĩĐšŅŅа\nâĸ ĐĐžĐēĐžŅĐŊĐĩŅĐĩ два ĐŋŅŅи ĐžŅĐŊОвО, Са да вŅСŅŅаĐŊОвиŅĐĩ ĐžŅĐ¸ĐŗĐ¸ĐŊаĐģĐŊĐ¸Ņ ŅаСĐŧĐĩŅ</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"ĐĐēŅивиŅаĐŊĐž Đĩ двОКĐŊĐž Đ´ĐžĐēĐžŅваĐŊĐĩ и ŅиĐŋĐēа Са ĐŋŅĐĩĐžŅаСĐŧĐĩŅŅваĐŊĐĩ
|
||||
|
||||
âĸ ĐвОКĐŊĐž Đ´ĐžĐēĐžŅваĐŊĐĩ Са ŅвĐĩĐģиŅаваĐŊĐĩ ĐŊа ŅаСĐŧĐĩŅа ĐŊа ĐŧиĐŊи ĐŋĐģĐĩĐšŅŅа
|
||||
âĸ ĐвОКĐŊĐž Đ´ĐžĐēĐžŅваĐŊĐĩ ĐžŅĐŊОвО, Са да вŅСŅŅаĐŊОвиŅĐĩ ĐžŅĐ¸ĐŗĐ¸ĐŊаĐģĐŊĐ¸Ņ ŅаСĐŧĐĩŅ"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">ĐвОКĐŊĐž Đ´ĐžĐēĐžŅваĐŊĐĩ и ŅиĐŋваĐŊĐĩ Са ĐŋŅĐĩĐžŅаСĐŧĐĩŅŅваĐŊĐĩ Đĩ Đ´ĐĩаĐēŅивиŅаĐŊĐž</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">РаСŅĐĩŅĐĩŅĐĩ ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ и ĐŧĐĩŅŅĐĩĐŊĐĩ</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">ĐĐģŅĐˇĐŗĐ°ĐŊĐĩ и ĐŧĐĩŅŅĐĩĐŊĐĩŅĐž Đĩ аĐēŅивиŅаĐŊĐž\n\nĐиĐŊиĐŋĐģĐĩĐšŅŅŅŅ ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋĐģŅĐˇĐŗĐ° Đ´Đž вŅĐĩĐēи ŅĐŗŅĐģ ĐŊа ĐĩĐēŅаĐŊа</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"ĐĐēĐģŅŅĐĩĐŊĐž Đĩ ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ и ĐŋŅŅĐēаĐŊĐĩ
|
||||
|
||||
ĐиĐŊи ĐŋĐģĐĩĐšŅŅŅŅ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ ĐŋĐģŅĐˇĐŗĐ°ĐŊ Đ´Đž вŅĐĩĐēи ŅĐŗŅĐģ ĐŊа ĐĩĐēŅаĐŊа"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">ĐĐģŅĐˇĐŗĐ°ĐŊĐĩŅĐž и ĐŋŅĐĩĐŧĐĩŅŅваĐŊĐĩŅĐž Đĩ Đ´ĐĩаĐēŅивиŅаĐŊĐž</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">ĐĐēŅивиŅаĐŊĐĩ ĐŊа Ņ
ĐžŅиСОĐŊŅаĐģĐŊĐž ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">ĐĐĩŅŅŅŅ ĐˇĐ° Ņ
ĐžŅиСОĐŊŅаĐģĐŊĐž ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ Đĩ аĐēŅивиŅаĐŊ\n\nĐиĐŊиĐŋĐģĐĩĐšŅŅŅŅ ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋĐģŅĐˇĐŗĐ° иСвŅĐŊ ĐĩĐēŅаĐŊа ĐŊаĐģŅвО иĐģи ĐŊадŅŅĐŊĐž</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"ĐĐēŅивиŅаĐŊ Đĩ Ņ
ĐžŅиСОĐŊŅаĐģĐĩĐŊ ĐļĐĩŅŅ ĐˇĐ° ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ
|
||||
|
||||
ĐиĐŊи ĐŋĐģĐĩĐšŅŅŅŅ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ ĐŋĐģŅĐˇĐŗĐ°ĐŊ иСвŅĐŊ ĐĩĐēŅаĐŊа ĐŊаĐģŅвО иĐģи ĐŊадŅŅĐŊĐž"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">ĐĐĩŅŅŅŅ ĐˇĐ° Ņ
ĐžŅиСОĐŊŅаĐģĐŊĐž ĐŋĐģŅĐˇĐŗĐ°ĐŊĐĩ Đĩ Đ´ĐĩаĐēŅивиŅаĐŊ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">ĐĄĐēŅиваĐŊĐĩ ĐŊа ĐąŅŅĐžĐŊа Са СаŅваŅŅĐŊĐĩ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">ĐŅŅĐžĐŊŅŅ ĐˇĐ° СаŅваŅŅĐŊĐĩ Đĩ ŅĐēŅиŅ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">ĐĐžĐēаСаĐŊ Đĩ ĐąŅŅĐžĐŊ Са СаŅваŅŅĐŊĐĩ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">ĐŅŅĐžĐŊи Са ŅаСŅиŅŅваĐŊĐĩ и ŅвиваĐŊĐĩ ĐŊа ĐĩĐēŅаĐŊа</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">ĐŅŅĐžĐŊиŅĐĩ Ņа ŅĐēŅиŅи\n\nĐĐģŅСĐŊĐĩŅĐĩ Са ŅĐ°ĐˇĐŗŅваĐŊĐĩ иĐģи СаŅваŅŅĐŊĐĩ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"ĐŅŅĐžĐŊиŅĐĩ Ņа ŅĐēŅиŅи
|
||||
|
||||
ĐĐģŅСĐŊĐĩŅĐĩ, Са да ŅĐ°ĐˇĐŗŅĐŊĐĩŅĐĩ иĐģи СаŅвОŅиŅĐĩ"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">ĐŅŅĐžĐŊи Са ŅаСŅиŅŅваĐŊĐĩ и ŅвиваĐŊĐĩ ĐŊа ĐĩĐēŅаĐŊа Ņа видиĐŧи</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">ĐĐēŅаĐŊĐŊи ŅĐĩĐēŅŅОвĐĩ, ĐĩŅиĐēĐĩŅи</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">ĐĄĐēŅиŅи</string>
|
||||
@@ -1065,7 +1130,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">ĐŅĐĩŅĐēĐžŅĐĩŅĐĩ СайŅаĐŊаŅа Са СаŅĐĩĐļдаĐŊĐĩ ĐŊа иСОйŅаĐļĐĩĐŊиĐĩ</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">ĐĐžĐŧĐĩĐšĐŊŅŅ yt4.ggpht.com ŅĐĩ иСĐŋĐžĐģСва Са СаŅĐĩĐļдаĐŊĐĩ ĐŊа иСОйŅаĐļĐĩĐŊиŅ</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">ĐŅĐ¸ĐŗĐ¸ĐŊаĐģĐŊиŅŅ Đ´ĐžĐŧĐĩĐšĐŊ ŅĐĩ иСĐŋĐžĐģСва Са СаŅĐĩĐļдаĐŊĐĩ ĐŊа иСОйŅаĐļĐĩĐŊиŅ\n\nĐĐēŅивиŅаĐŊĐĩŅĐž ĐŊа ŅаСи ĐŊаŅŅŅОКĐēа ĐŧĐžĐļĐĩ да ĐēĐžŅĐ¸ĐŗĐ¸Ņа СаŅĐĩĐļдаĐŊĐĩŅĐž ĐŊа иСОйŅаĐļĐĩĐŊиŅ, ĐēОиŅĐž Ņа ĐąĐģĐžĐēиŅаĐŊи в ĐŊŅĐēОи ŅĐĩĐŗĐ¸ĐžĐŊи</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"ĐСĐŋĐžĐģСва ŅĐĩ ĐžŅĐ¸ĐŗĐ¸ĐŊаĐģĐĩĐŊ Ņ
ĐžŅŅ ĐŊа иСОйŅаĐļĐĩĐŊиŅ
|
||||
|
||||
ĐĐēŅивиŅаĐŊĐĩŅĐž ĐŊа ŅОва ĐŧĐžĐļĐĩ да ĐŋĐžĐŋŅави ĐģиĐŋŅваŅиŅĐĩ иСОйŅаĐļĐĩĐŊиŅ, ĐēОиŅĐž Ņа ĐąĐģĐžĐēиŅаĐŊи в ĐŊŅĐēОи ŅĐĩĐŗĐ¸ĐžĐŊи"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -1080,7 +1147,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow & ĐžŅĐ¸ĐŗĐ¸ĐŊаĐģĐŊи ĐŧиĐŊиаŅŅŅи</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 +1190,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">ĐŅĐļĐģиви ĐŋаŅаĐŧĐĩŅŅи ĐŊа ŅŅŅŅОКŅŅвОŅĐž</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">ĐОдĐŋŅавĐĩĐŊаŅа ŅĐĩСОĐģŅŅĐ¸Ņ ĐŊа ŅŅŅŅОКŅŅвОŅĐž\n\nĐĐžĐļĐĩ да ŅĐĩ ĐžŅĐēĐģŅŅи ĐŋĐž-виŅĐžĐēĐž ĐēаŅĐĩŅŅвО ĐŊа видĐĩĐžŅĐž, ĐŊĐž ĐŧĐžĐļĐĩ да иСĐŋиŅаŅĐĩ СаŅиŅаĐŊĐĩ ĐŋŅи вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩ ĐŊа видĐĩĐž, ĐŋĐž-ĐģĐžŅ ĐļĐ¸Đ˛ĐžŅ ĐŊа йаŅĐĩŅиŅŅа и ĐŊĐĩиСвĐĩŅŅĐŊи ŅŅŅаĐŊиŅĐŊи ĐĩŅĐĩĐēŅи</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Đ ĐĩСОĐģŅŅиŅŅа ĐŊа ŅŅŅŅОКŅŅвОŅĐž ĐŊĐĩ Đĩ ĐŋОдĐŋŅавĐĩĐŊа\n\nĐĐēŅивиŅаĐŊĐĩŅĐž ĐŊа ŅОва ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐžŅĐēĐģŅŅи ĐŋĐž-виŅĐžĐēĐž ĐēаŅĐĩŅŅвО ĐŊа видĐĩĐžŅĐž</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"РаСĐŧĐĩŅиŅĐĩ ĐŊа ŅŅŅŅОКŅŅвОŅĐž Ņа ŅаĐģŅиŅиŅиŅаĐŊи
|
||||
|
||||
ĐĐž-виŅĐžĐēиŅĐĩ видĐĩĐž ĐēаŅĐĩŅŅва ĐŧĐžĐļĐĩ да ĐąŅĐ´Đ°Ņ ĐžŅĐēĐģŅŅĐĩĐŊи, ĐŊĐž ĐŧĐžĐļĐĩ да иСĐŋиŅаŅĐĩ СаĐĩĐēваĐŊĐĩ ĐŊа видĐĩОвŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩ, ĐŋĐž-ĐģĐžŅа иСдŅŅĐļĐģивОŅŅ ĐŊа йаŅĐĩŅиŅŅа и ĐŊĐĩиСвĐĩŅŅĐŊи ŅŅŅаĐŊиŅĐŊи ĐĩŅĐĩĐēŅи"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"РаСĐŧĐĩŅиŅĐĩ ĐŊа ŅŅŅŅОКŅŅвОŅĐž ĐŊĐĩ Ņа ŅаĐģŅиŅиŅиŅаĐŊи
|
||||
|
||||
ĐĐēŅивиŅаĐŊĐĩŅĐž ĐŊа ŅОва ĐŧĐžĐļĐĩ да ĐžŅĐēĐģŅŅи ĐŋĐž-виŅĐžĐēи видĐĩĐž ĐēаŅĐĩŅŅва"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">РаСŅĐĩŅаваĐŊĐĩŅĐž ĐŊа ŅОва ĐŧĐžĐļĐĩ да ĐŋŅиŅиĐŊи ĐŋŅĐĩĐēŅŅваĐŊĐĩ ĐŊа вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩŅĐž ĐŊа видĐĩĐž, вĐģĐžŅĐĩĐŊ ĐļĐ¸Đ˛ĐžŅ ĐŊа йаŅĐĩŅиŅŅа и ĐŊĐĩиСвĐĩŅŅĐŊи ŅŅŅаĐŊиŅĐŊи ĐĩŅĐĩĐēŅи.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1147,6 +1222,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_on">ĐийŅаŅииŅĐĩ Ņа Đ´ĐĩаĐēŅивиŅаĐŊи</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">ĐийŅаŅииŅĐĩ Ņа аĐēŅивиŅаĐŊи</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">ĐŅиĐŊŅдиŅĐĩĐģĐŊĐž ĐžŅĐ¸ĐŗĐ¸ĐŊаĐģĐŊĐž аŅдиО</string>
|
||||
<string name="revanced_force_original_audio_summary_on">ĐСĐŋĐžĐģСваĐŊĐĩ ĐŊа ĐžŅĐ¸ĐŗĐ¸ĐŊаĐģĐŊĐž аŅдиО</string>
|
||||
<string name="revanced_force_original_audio_summary_off">ĐСĐŋĐžĐģСваĐŊĐĩ ĐŊа аŅдиО ĐŋĐž ĐŋОдŅаСйиŅаĐŊĐĩ</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">ĐвŅĐž</string>
|
||||
@@ -1161,7 +1241,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">ĐĐžĐēаСваĐŊĐĩ ĐąŅŅĐžĐŊ Са ŅĐēĐžŅĐžŅŅ</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">ĐŅŅĐžĐŊŅŅ Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">ĐŅŅĐžĐŊа \"ĐŖĐ˛ĐĩĐ´ĐžĐŧи ĐŧĐĩ\" ŅĐĩ ĐŋĐžĐēаСва.</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">ĐŅŅĐžĐŊŅŅ ĐŊĐĩ Đĩ ĐŋĐžĐēаСаĐŊ</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
@@ -1170,8 +1250,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_speed_menu_summary_off">ĐĐĩĐŊŅŅĐž Са ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēа ŅĐēĐžŅĐžŅŅ ĐŊĐĩ ŅĐĩ ĐŋĐžĐēаСва</string>
|
||||
<string name="revanced_custom_playback_speeds_title">ĐĐĩŅŅĐžĐŊаĐģиСиŅаĐŊи ŅĐēĐžŅĐžŅŅи ĐŊа вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩ</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">ĐОйавĐĩŅĐĩ иĐģи ĐŋŅĐžĐŧĐĩĐŊĐĩŅĐĩ ŅĐēĐžŅĐžŅŅa ĐŊа вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩ</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">ĐĐĩŅŅĐžĐŊаĐģĐŊаŅа ŅĐēĐžŅĐžŅŅ ŅŅŅйва да Đĩ ĐŋĐž-ĐŧаĐģĐēа ĐžŅ %s. ĐСĐŋĐžĐģСваĐŊĐĩ ĐŊа ŅŅОКĐŊĐžŅŅи ĐŋĐž ĐŋОдŅаСйиŅаĐŊĐĩ.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">ĐĐĩваĐģидĐŊи ĐŋĐĩŅŅĐžĐŊаĐģиСиŅаĐŊи ŅĐēĐžŅĐžŅŅи ĐŊа вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩ. ĐСĐŋĐžĐģСваĐŊĐĩ ĐŊа ŅŅОКĐŊĐžŅŅи ĐŋĐž ĐŋОдŅаСйиŅаĐŊĐĩ.</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">ĐĐĩŅŅĐžĐŊаĐģиСиŅаĐŊиŅĐĩ ŅĐēĐžŅĐžŅŅи ŅŅŅйва да Ņа ĐŋĐž-ĐŧаĐģĐēи ĐžŅ %s</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">ĐĐĩваĐģидĐŊи ĐŋĐĩŅŅĐžĐŊаĐģиСиŅаĐŊи ŅĐēĐžŅĐžŅŅи ĐŊа вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩ</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">ĐвŅĐž</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1196,18 +1276,78 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_video_streams_screen_summary">ĐОдĐŋŅавĐĩŅĐĩ ĐēĐģиĐĩĐŊŅŅĐēиŅĐĩ видĐĩĐž ĐŋĐžŅĐžŅи, Са да ĐŋŅĐĩĐ´ĐžŅвŅаŅиŅĐĩ ĐŋŅОйĐģĐĩĐŧи Ņ Đ˛ŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩŅĐž</string>
|
||||
<string name="revanced_spoof_video_streams_title">ĐОдĐŋŅавŅĐŊĐĩ ĐŊа видĐĩĐž ĐŋĐžŅĐžŅи</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">ĐидĐĩĐž ĐŋĐžŅĐžŅиŅĐĩ Ņа ĐŋОдĐŋŅавĐĩĐŊи</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">ĐидĐĩĐž ĐŋĐžŅĐžŅиŅĐĩ ĐŊĐĩ Ņа ĐŋОдĐŋŅавĐĩĐŊи\n\nĐŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩŅĐž ĐŊа видĐĩĐž ĐŧĐžĐļĐĩ да ĐŊĐĩ ŅайОŅи</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"ĐĐžŅĐžŅиŅĐĩ ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ ĐŊĐĩ Ņа ŅаĐģŅиŅиŅиŅаĐŊи
|
||||
|
||||
ĐŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩŅĐž ĐŊа видĐĩĐžĐēĐģиĐŋОвĐĩ ĐŧĐžĐļĐĩ да ĐŊĐĩ ŅайОŅи"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">ĐĐĩаĐēŅивиŅаĐŊĐĩŅĐž ĐŊа ŅаСи ĐŊаŅŅŅОКĐēа ŅĐĩ дОвĐĩĐ´Đĩ Đ´Đž ĐŋŅОйĐģĐĩĐŧи Ņ Đ˛ŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩŅĐž ĐŊа видĐĩĐž.</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">ĐĐģиĐĩĐŊŅ ĐŋĐž ĐŋОдŅаСйиŅаĐŊĐĩ</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">ĐŅиĐŊŅдиŅĐĩĐģĐŊĐž AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ĐидĐĩĐžĐēОдĐĩĐēа Đĩ AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ĐидĐĩĐžĐēОдĐĩĐēа Đĩ VP9 иĐģи AV1</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_no_hardware_vp9_summary_on">ĐаŅĐĩŅĐž ŅŅŅŅОКŅŅвО ĐŊŅĐŧа Ņ
аŅĐ´ŅĐĩŅĐŊĐž VP9 Đ´ĐĩĐēОдиŅаĐŊĐĩ и ŅаСи ĐŊаŅŅŅОКĐēа виĐŊĐ°ĐŗĐ¸ Đĩ аĐēŅивиŅаĐŊа, ĐēĐžĐŗĐ°ŅĐž Đĩ аĐēŅивĐŊĐž ĐŋОдĐŋŅавŅĐŊĐĩ ĐŊа ĐēĐģиĐĩĐŊŅа</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">ĐĐēŅивиŅаĐŊĐĩŅĐž ĐŊа ŅОва ĐŧĐžĐļĐĩ да ĐŋОдОйŅи ĐļивОŅа ĐŊа йаŅĐĩŅиŅŅа и да ĐēĐžŅĐ¸ĐŗĐ¸Ņа ĐŋŅĐĩĐēŅŅваĐŊиŅŅа ĐŋŅи вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩ.\n\nAVC иĐŧа ĐŧаĐēŅиĐŧаĐģĐŊа ŅаСдĐĩĐģиŅĐĩĐģĐŊа ŅĐŋĐžŅОйĐŊĐžŅŅ ĐžŅ 1080p и вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩŅĐž ĐŊа видĐĩĐž ŅĐĩ иСĐŋĐžĐģСва ĐŋОвĐĩŅĐĩ иĐŊŅĐĩŅĐŊĐĩŅ Đ´Đ°ĐŊĐŊи ĐžŅ VP9 иĐģи AV1.</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ĐидĐĩĐž ĐēОдĐĩĐē ĐŋĐž ĐŋОдŅаСйиŅаĐŊĐĩ AVC (H.264)</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">ĐидĐĩĐž ĐēОдĐĩĐēŅŅ ŅĐĩ ĐžĐŋŅĐĩĐ´ĐĩĐģŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐŊĐž</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"ĐĐēŅивиŅаĐŊĐĩŅĐž ĐŊа ŅОва ĐŧĐžĐļĐĩ да ĐŋОдОйŅи ĐļивОŅа ĐŊа йаŅĐĩŅиŅŅа и да ĐŋĐžĐŋŅави СаĐĩĐēваĐŊĐĩŅĐž ĐŊа вŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩŅĐž.
|
||||
|
||||
AVC иĐŧа ĐŧаĐēŅиĐŧаĐģĐŊа ŅаСдĐĩĐģиŅĐĩĐģĐŊа ŅĐŋĐžŅОйĐŊĐžŅŅ ĐžŅ 1080p, аŅдиО ĐēОдĐĩĐēŅŅ Opus ĐŊĐĩ Đĩ ĐŊаĐģиŅĐĩĐŊ, а видĐĩОвŅСĐŋŅОиСвĐĩĐļдаĐŊĐĩŅĐž ŅĐĩ иСĐŋĐžĐģСва ĐŋОвĐĩŅĐĩ иĐŊŅĐĩŅĐŊĐĩŅ Đ´Đ°ĐŊĐŊи ĐžŅ VP9 иĐģи AV1."</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">CŅŅаĐŊиŅĐŊи ĐĩŅĐĩĐēŅи ĐžŅ ĐŋОдĐŧŅĐŊаŅа ĐŊа iOS</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">âĸ ĐĐģаŅĐĩĐŊиŅĐĩ видĐĩĐžĐēĐģиĐŋОвĐĩ Са Đ´ĐĩŅа ĐŧĐžĐļĐĩ да ĐŊĐĩ ŅĐĩ вŅСĐŋŅОиСвĐĩĐļдаŅ\nâĸ ĐĐžŅĐžŅиŅĐĩ ĐŊа ĐļивО СаĐŋĐžŅĐ˛Đ°Ņ ĐžŅĐŊаŅаĐģĐž\nâĸ ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ ĐŧĐžĐļĐĩ да СавŅŅŅĐ˛Đ°Ņ 1 ŅĐĩĐēŅĐŊда ĐŋĐž-ŅаĐŊĐž\nâĸ ĐŅĐŧа аŅдиОĐēОдĐĩĐē Opus</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"âĸ ĐŅСĐŧĐžĐļĐŊĐž Đĩ ŅаŅŅĐŊиŅĐĩ Đ´ĐĩŅŅĐēи видĐĩĐžĐēĐģиĐŋОвĐĩ да ĐŊĐĩ ŅĐĩ вŅСĐŋŅОиСвĐĩĐļдаŅ
|
||||
âĸ ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ СавŅŅŅĐ˛Đ°Ņ 1 ŅĐĩĐēŅĐŊда ĐŋĐž-ŅаĐŊĐž"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">ĐĄŅŅаĐŊиŅĐŊи ĐĩŅĐĩĐēŅи ĐžŅ ĐŋОдĐŋŅавŅĐŊĐĩ ĐŊа Android VR</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">âĸ ĐĐĩŅŅĐēиŅĐĩ видĐĩĐžĐēĐģиĐŋОвĐĩ ĐŧĐžĐļĐĩ да ĐŊĐĩ ŅĐĩ вŅСĐŋŅОиСвĐĩĐļдаŅ\nâĸ ĐиĐŋŅва ĐŧĐĩĐŊŅŅĐž Са аŅдиО СаĐŋиŅ\nâĸ ĐĐĩ Đĩ ĐŊаĐģиŅĐŊа ŅŅайиĐģĐŊа ŅиĐģа ĐŊа СвŅĐēа</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"âĸ ĐĐĩŅŅĐēиŅĐĩ видĐĩĐžĐēĐģиĐŋОвĐĩ ĐŧĐžĐļĐĩ да ĐŊĐĩ ŅĐĩ вŅСĐŋŅОиСвĐĩĐļдаŅ
|
||||
âĸ ĐŅĐĩдаваĐŊиŅŅа ĐŊа ĐļивО СаĐŋĐžŅĐ˛Đ°Ņ ĐžŅ ĐŊаŅаĐģĐžŅĐž
|
||||
âĸ ĐидĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ СавŅŅŅĐ˛Đ°Ņ 1 ŅĐĩĐēŅĐŊда ĐŋĐž-ŅаĐŊĐž"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">ĐСиĐē ĐŋĐž ĐŋОдŅаСйиŅаĐŊĐĩ ĐŊа аŅдиО ĐŋĐžŅĐžĐēа</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">ĐСиĐē ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">ĐŅайŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">ĐСĐĩŅйаКдĐļаĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">ĐŅĐģĐŗĐ°ŅŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">ĐĐĩĐŊĐŗĐ°ĐģŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">ĐаŅаĐģĐžĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">ЧĐĩŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">ĐаŅŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">ĐĐĩĐŧŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">ĐŅŅŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">ĐĐŊĐŗĐģиКŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">ĐŅĐŋаĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">ĐŅŅĐžĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">ĐĐĩŅŅиКŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">ФиĐŊĐģаĐŊĐ´ŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">ФŅĐĩĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">ĐŅĐ´ĐļаŅаŅи</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">ĐĨиĐŊди</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">ĐĨŅŅваŅŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">ĐŖĐŊĐŗĐ°ŅŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">ĐĐŊĐ´ĐžĐŊĐĩСиКŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">ĐŅаĐģиаĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">Đ¯ĐŋĐžĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">ĐаСаŅ
ŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">ĐĐžŅĐĩĐšŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">ĐиŅОвŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">ĐаŅвиКŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">ĐаĐēĐĩĐ´ĐžĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">ĐĐžĐŊĐŗĐžĐģŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">ĐаŅаŅŅ
и</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">ĐаĐģаКŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">ĐиŅĐŧаĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">ĐĨĐžĐģаĐŊĐ´ŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">ĐŅиŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">ĐĐĩĐŊĐ´ĐļайŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">ĐĐžĐģŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">ĐĐžŅŅŅĐŗĐ°ĐģŅĐēи (ĐŅаСиĐģиŅ)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">ĐĐžŅŅŅĐŗĐ°ĐģŅĐēи (ĐĐžŅŅŅĐŗĐ°ĐģиŅ)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">Đ ŅĐŧŅĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">Đ ŅŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">ĐĄĐģОваŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">ĐĄĐģОвĐĩĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">ĐĄŅŅĐąŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">ШвĐĩĐ´ŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">ĐĄŅаŅ
иĐģи</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">ĐĸаĐŧиĐģŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">ĐĸĐĩĐģŅĐŗŅ</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">ĐĸаКĐģаĐŊĐ´ŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">ĐĸŅŅŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">ĐŖĐēŅаиĐŊŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">ĐŖŅĐ´Ņ</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">ĐиĐĩŅĐŊаĐŧŅĐēи</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">ĐиŅаКŅĐēи</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1217,8 +1357,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">ĐŅдиО ŅĐĩĐēĐģаĐŧаŅа Đĩ ŅаСйĐģĐžĐēиŅаĐŊа</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s Đĩ ĐŊĐĩĐ´ĐžŅŅŅĐŋĐĩĐŊ. ĐĐžĐļĐĩ да ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ ŅĐĩĐēĐģаĐŧи. ĐĐŋиŅаКŅĐĩ Đ´ŅŅĐŗĐ° ŅŅĐģŅĐŗĐ° Са ĐąĐģĐžĐēиŅаĐŊĐĩ ĐŊа ŅĐĩĐēĐģаĐŧи.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s ŅŅŅвŅŅŅŅ Đ˛ŅŅĐŊа ĐŗŅĐĩŅĐēа. ĐĐžĐļĐĩ да ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ ŅĐĩĐēĐģаĐŧи. ĐĐŋиŅаКŅĐĩ да ĐŋŅĐĩвĐēĐģŅŅиŅĐĩ Đ´ŅŅĐŗĐ° ŅŅĐģŅĐŗĐ° Са ĐąĐģĐžĐēиŅаĐŊĐĩ ĐŊа ŅĐĩĐēĐģаĐŧи.</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s ĐŊĐĩ Đĩ ĐŊаĐģиŅĐĩĐŊ, ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋĐžŅвŅŅ ŅĐĩĐēĐģаĐŧи. ĐĐŋиŅаКŅĐĩ да ĐŋŅĐžĐŧĐĩĐŊиŅĐĩ ŅŅĐģŅĐŗĐ°Ņа Са ĐąĐģĐžĐēиŅаĐŊĐĩ ĐŊа ŅĐĩĐēĐģаĐŧи в ĐŊаŅŅŅОКĐēиŅĐĩ.</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s вŅŅĐŊа ĐŗŅĐĩŅĐēа, ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋĐžŅвŅŅ ŅĐĩĐēĐģаĐŧи. ĐĐŋиŅаКŅĐĩ да ĐŋŅĐžĐŧĐĩĐŊиŅĐĩ ŅŅĐģŅĐŗĐ°Ņа Са ĐąĐģĐžĐēиŅаĐŊĐĩ ĐŊа ŅĐĩĐēĐģаĐŧи в ĐŊаŅŅŅОКĐēиŅĐĩ.</string>
|
||||
<string name="revanced_block_embedded_ads_title">ĐĐģĐžĐēиŅаĐŊĐĩ ĐŊа Đ˛ĐŗŅадĐĩĐŊи видĐĩĐžŅĐĩĐēĐģаĐŧи</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">ĐĐĩаĐēŅивиŅаĐŊĐž</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Luminous ĐŋŅĐžĐēŅи</string>
|
||||
|
||||
@@ -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>
|
||||
@@ -43,6 +33,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">APK āϤā§āϰāĻŋāϰ āϤāĻžāϰāĻŋāĻ āϤā§āϰā§āĻāĻŋāĻĒā§āϰā§āĻŖ</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_title">ReVanced</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">āĻāĻĒāύāĻŋ āĻāĻŋ āĻāĻāĻŋā§ā§ āϝā§āϤ⧠āĻāĻā§āĻā§āĻ?</string>
|
||||
<string name="revanced_settings_reset">āĻāĻŦāĻžāϰ āϏā§āĻ āĻāϰā§āύ</string>
|
||||
<string name="revanced_settings_restart_title">āϰāĻŋāĻĢā§āϰā§āĻļ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻŦāĻžāϰ āĻāĻžāϞ⧠āĻāϰā§āύ</string>
|
||||
@@ -66,9 +57,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore āĻāύāϏā§āĻāϞ āĻāϰāĻž āĻšā§āύāĻŋāĨ¤ āĻāύāϏā§āĻāϞ āĻāϰā§āύāĨ¤</string>
|
||||
<string name="gms_core_dialog_title">āĻĒāĻĻāĻā§āώā§āĻĒ āĻĒā§āϰā§ā§āĻāύ</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">MicroG GmsCore āĻāϰ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄā§ āĻāϞāĻŽāĻžāύ āĻĨāĻžāĻāĻžāϰ āĻ
āύā§āĻŽāϤāĻŋ āύā§āĻāĨ¤\n\nāĻāĻĒāύāĻžāϰ āĻĄāĻŋāĻāĻžāĻāϏā§āϰ āĻāύā§āϝ \"Don\'t kill my app\" āĻ āĻĨāĻžāĻāĻž āύāĻŋāϰā§āĻĻā§āĻļāĻžāĻŦāϞ⧠āĻ
āύā§āϏāϰāĻŖ āĻāϰā§āύ, āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻāύāϏā§āĻāϞāĻā§āϤ MicroG āϤ⧠āϤāĻž āĻĒā§āϰā§ā§āĻ āĻāϰā§āύāĨ¤\n\nāĻ
ā§āϝāĻžāĻĒ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāϞāϤ⧠āĻāĻāĻŋ āĻ
āĻŦāĻļā§āϝāĻ āĻĒā§āϰā§ā§āĻāύāĨ¤</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"MicroG GmsCore-āĻāϰ āĻĒāĻāĻā§āĻŽāĻŋāϤ⧠āĻāĻžāϞāĻžāύā§āϰ āĻ
āύā§āĻŽāϤāĻŋ āύā§āĻāĨ¤
|
||||
|
||||
āĻāĻĒāύāĻžāϰ āĻĢā§āύā§āϰ āĻāύā§āϝ \"Don't kill my app\" āĻāĻžāĻāĻĄ āĻ
āύā§āϏāϰāĻŖ āĻāϰā§āύ āĻāĻŦāĻ MicroG āĻāύāϏā§āĻāϞā§āĻļāύā§āϰ āĻāύā§āϝ āύāĻŋāϰā§āĻĻā§āĻļāĻžāĻŦāϞ⧠āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰā§āύāĨ¤
|
||||
|
||||
āĻāĻāĻŋ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋ āĻāĻžāĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤"</string>
|
||||
<string name="gms_core_dialog_open_website_text">āĻā§ā§āĻŦāϏāĻžāĻāĻ āĻā§āϞā§āύ</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">āϤā§āϰā§āĻāĻŋ āĻā§āĻžāϤ⧠MicroG GmsCore āĻāϰ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻ
āĻĒāĻāĻŋāĻŽāĻžāĻāĻā§āĻļāύ āĻ
āĻŦāĻļā§āϝāĻ āύāĻŋāώā§āĻā§āϰāĻŋā§ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤\n\nāĻāĻāĻŋā§ā§ āϝāĻžāύ āĻŦā§āϤāĻžāĻŽā§ āĻā§āϝāĻžāĻĒ āĻāϰā§āύ āĻāĻŦāĻ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻ
āĻĒāĻāĻŋāĻŽāĻžāĻāĻā§āĻļāύ āύāĻŋāϏā§āĻā§āϰāĻŋā§ āĻāϰā§āύāĨ¤</string>
|
||||
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"āϏāĻŽāϏā§āϝāĻž āĻāĻĄāĻŧāĻžāϤ⧠MicroG GmsCore-āĻāϰ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāύ āĻ
āĻā§āώāĻŽ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
|
||||
|
||||
MicroG-āĻāϰ āĻāύā§āϝ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāύ āĻ
āĻā§āώāĻŽ āĻāϰāĻž āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻā§ āύā§āϤāĻŋāĻŦāĻžāĻāĻāĻāĻžāĻŦā§ āĻĒā§āϰāĻāĻžāĻŦāĻŋāϤ āĻāϰāĻŦā§ āύāĻžāĨ¤
|
||||
|
||||
āĻāĻžāϞāĻŋāϝāĻŧā§ āϝāĻžāύ āĻŦā§āϤāĻžāĻŽāĻāĻŋ āĻā§āϝāĻžāĻĒ āĻāϰā§āύ āĻāĻŦāĻ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋ āĻ
āύā§āĻŽā§āĻĻāύ āĻāϰā§āύāĨ¤"</string>
|
||||
<string name="gms_core_dialog_continue_text">āĻāĻāĻŋā§ā§ āϝāĻžāύ</string>
|
||||
</patch>
|
||||
</app>
|
||||
@@ -80,12 +79,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_settings_screen_03_feed_title">āĻĢāĻŋāĻĄ</string>
|
||||
<string name="revanced_settings_screen_04_player_title">āĻĒā§āϞā§ā§āĻžāϰ</string>
|
||||
<string name="revanced_settings_screen_05_general_title">āϏāĻžāϧāĻžāϰāĻŖ āϞā§-āĻāĻāĻ</string>
|
||||
<string name="revanced_settings_screen_06_shorts_title">Shorts</string>
|
||||
<string name="revanced_settings_screen_07_seekbar_title">āϏāĻŋāĻāĻŦāĻžāϰ</string>
|
||||
<string name="revanced_settings_screen_08_swipe_controls_title">āϏā§āϝāĻŧāĻžāĻāĻĒ āĻāύā§āĻā§āϰā§āϞ</string>
|
||||
<string name="revanced_settings_screen_11_misc_title">āĻŦāĻŋāĻŦāĻŋāϧ</string>
|
||||
<string name="revanced_settings_screen_12_video_title">āĻāĻŋāĻĄāĻŋāĻ</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">Shorts āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āĻĒā§āϞ⧠āĻ
āĻā§āώāĻŽ āĻāϰā§āύ</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_on">Shorts āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āĻĒā§āϞ⧠āĻ
āĻā§āώāĻŽ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_off">Shorts āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āĻĒā§āϞ⧠āϏāĻā§āώāĻŽ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_screen_title">āĻĄāĻŋāĻŦāĻžāĻāĻŋāĻ</string>
|
||||
@@ -102,7 +105,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_title">ReVanced āĻāϰ āϤā§āϰā§āĻāĻŋāϰ āĻā§āώā§āϤā§āϰ⧠āĻā§āϏā§āĻ āĻĻā§āĻāĻžāύ</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_on">āĻā§āύ āϤā§āϰā§āĻāĻŋ āĻĻā§āĻāĻž āĻā§āϞ⧠āĻā§āϏā§āĻ āĻĻā§āĻāĻžā§</string>
|
||||
<string name="revanced_debug_toast_on_error_summary_off">āĻā§āύ āϤā§āϰā§āĻāĻŋ āĻĻā§āĻāĻž āĻā§āϞ⧠āĻā§āϏā§āĻ āĻĻā§āĻāĻžā§ āύāĻž</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">āϤā§āϰā§āĻāĻŋāϰ āĻā§āϏā§āĻ āĻĻā§āĻāĻžāύ⧠āĻŦāύā§āϧ āĻāϰāϞ⧠āϤāĻž ReVanced āĻāϰ āϏāĻāϞ āϤā§āϰā§āĻāĻŋāϰ āĻŦāĻŋāĻā§āĻāĻĒā§āϤāĻŋ āϞā§āĻāĻŋā§ā§ āϰāĻžāĻāĻŦā§āĨ¤\n\nāĻāĻĒāύāĻŋ āĻā§āύ āĻ
āύāĻžāĻāĻžāĻā§āĻā§āώāĻŋāϤ āĻāĻāύāĻžāϰ āĻŦāĻŋāĻā§āĻāĻĒā§āϤāĻŋ āĻĒāĻžāĻŦā§āύ āύāĻžāĨ¤</string>
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"āϤā§āϰā§āĻāĻŋ \"toast\" āĻŦāύā§āϧ āĻāϰ⧠ReVanced āϤā§āϰā§āĻāĻŋ āĻŦāĻŋāĻā§āĻāĻĒā§āϤāĻŋāĻā§āϞāĻŋ āϞā§āĻāĻžāύ⧠āĻšāϝāĻŧāĨ¤
|
||||
|
||||
āĻāĻĒāύāĻŋ āĻā§āύāĻ āĻ
āĻĒā§āϰāϤā§āϝāĻžāĻļāĻŋāϤ āĻāĻāύāĻžāϰ āĻŦāĻŋāώāϝāĻŧā§ āĻ
āĻŦāĻšāĻŋāϤ āĻšāĻŦā§āύ āύāĻžāĨ¤"</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">āĻĒāĻāύā§āĻĻ / āϏāĻĻāϏā§āϝāϤāĻž āĻŦā§āϤāĻžāĻŽā§āϰ āĻāĻā§āĻā§āĻŦāϞāϤāĻž āύāĻŋāώā§āĻā§āϰāĻŋā§ āĻāϰā§āύ</string>
|
||||
@@ -121,7 +126,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_channel_watermark_summary_on">āĻāϞāĻāĻžāĻĒ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">āĻāϞāĻāĻžāĻĒ āĻĻā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">āĻāύā§āĻā§āĻŽāĻŋāĻ āĻļā§āϞāĻĢ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">āϝ⧠āϏāĻāϞ āĻļā§āϞāĻĢ āϞā§āĻāĻžāύ⧠āĻšāĻŦā§:\nâĸ āϏāϰā§āĻŦāĻŽā§āώ āĻāĻŦāϰ\nâĸ āĻĻā§āĻāĻž āĻ
āĻŦāĻŋāϰāϤ āϰāĻžāĻā§āύ\nâĸ āĻāϰāĻ āĻā§āϝāĻžāύā§āϞ āĻĻā§āĻā§āύ\nâĸ āĻā§āύāĻžāĻāĻžāĻāĻž\nâĸ āĻāĻāĻŋ āĻāĻŦāĻžāϰ āĻĻā§āĻā§āύ</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"āĻļā§āϞā§āĻĢāĻā§āϞāĻŋ āϞā§āĻāĻžāύ⧠āĻšāϝāĻŧ āϝā§āĻŽāύ:
|
||||
âĸ āϤāĻžāĻāĻž āϏāĻāĻŦāĻžāĻĻ
|
||||
âĸ āĻĻā§āĻāĻž āĻāĻžāϞāĻŋāϝāĻŧā§ āϝāĻžāύ
|
||||
âĸ āĻāϰāĻ āĻā§āϝāĻžāύā§āϞ āĻ
āύā§āĻŦā§āώāĻŖ āĻāϰā§āύ
|
||||
âĸ āĻā§āύāĻžāĻāĻžāĻāĻž
|
||||
âĸ āĻāĻŦāĻžāϰ āĻĻā§āĻā§āύ"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">āĻļā§āϞāĻĢ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
@@ -149,9 +159,6 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_timed_reactions_title">āϏāĻŽā§ āĻ
āύā§āϝāĻžā§ā§ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋā§āĻž āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">āϏāĻŽā§ āĻ
āύā§āϝāĻžā§ā§ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋā§āĻž āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">āϏāĻŽā§ āĻ
āύā§āϝāĻžā§ā§ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋā§āĻž āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_title">āĻ
āύā§āϏāύā§āϧāĻžāύ āĻĢāϞāĻžāĻĢāϞ āĻļā§āϞāĻĢā§āϰ āĻšā§āĻĄāĻžāϰ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_on">āĻļā§āϞāĻĢ āĻšā§āĻĄāĻžāϰ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_off">āĻļā§āϞāĻĢ āĻšā§āĻĄāĻžāϰ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_channel_guidelines_title">āĻā§āϝāĻžāύā§āϞ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_on">āĻā§āϝāĻžāύā§āϞ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_off">āĻā§āϝāĻžāύā§āϞ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
@@ -221,9 +228,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_chapters_section_title">āĻā§āϝāĻžāĻĒā§āĻāĻžāϰ āĻŦāĻŋāĻāĻžāĻ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">āĻā§āϝāĻžāĻĒā§āĻāĻžāϰ āĻŦāĻŋāĻāĻžāĻ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">āĻā§āϝāĻžāĻĒā§āĻāĻžāϰ āĻŦāĻŋāĻāĻžāĻ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_podcast_section_title">âāĻĒāĻĄāĻāĻžāϏā§āĻ āĻŦāĻŋāĻāĻžāĻ āϞā§āĻāĻžāύâ</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">âāĻĒāĻĄāĻāĻžāϏā§āĻ āĻŦāĻŋāĻāĻžāĻâ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">âāĻĒāĻĄāĻāĻžāϏā§āĻ āĻŦāĻŋāĻāĻžāĻâ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_info_cards_section_title">āϤāĻĨā§āϝ āĻāĻžāϰā§āĻĄ āϏā§āĻāĻļāύ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">āϤāĻĨā§āϝ āĻāĻžāϰā§āĻĄ āϏā§āĻāĻļāύ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">āϤāĻĨā§āϝ āĻāĻžāϰā§āĻĄ āϏā§āĻāĻļāύ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">âāĻŽā§āϞ āĻŦāĻŋāώā§āĻŦāϏā§āϤā§â āĻŦāĻŋāĻāĻžāĻ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">âāĻŽā§āϞ āĻŦāĻŋāώā§āĻŦāϏā§āϤā§â āĻŦāĻŋāĻāĻžāĻ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">âā¤ŽāĨā¤āĨ⤝ ⤏ā¤ā¤ā¤˛āĨā¤Ēā¤¨ā¤žâ ā¤
⤍āĨā¤ā¤žā¤ ā¤ĒāĨ⤰ā¤Ļ⤰āĨā¤ļā¤ŋ⤤ ā¤šāĨā¤¤ā¤ž ā¤šāĨ</string>
|
||||
<string name="revanced_hide_transcript_section_title">ā¤āĨā¤°ā¤žā¤ā¤¸ā¤āĨ⤰ā¤ŋā¤ĒāĨ⤠ā¤
⤍āĨā¤ā¤žā¤ ā¤ā¤ŋā¤Ēā¤žā¤ā¤</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">āĻā§āϰāĻžāύā§āϏāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻŦāĻŋāĻāĻžāĻ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">āĻā§āϰāĻžāύā§āϏāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻŦāĻŋāĻāĻžāĻ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_description_components_screen_title">āĻāĻŋāĻĄāĻŋāĻāϰ āĻŦāĻŋāĻŦāϰāĻŖ</string>
|
||||
@@ -241,6 +255,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻāĻŋāĻĄāĻŋāĻāϤ⧠āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_comments_screen_title">āĻŽāύā§āϤāĻŦā§āϝ</string>
|
||||
<string name="revanced_comments_screen_summary">āĻŽāύā§āϤāĻŦā§āϝ āĻŦāĻŋāĻāĻžāĻā§āϰ āĻāĻĒāĻžāĻĻāĻžāύāĻā§āϞāĻŋ āϞā§āĻāĻžāύ āĻŦāĻž āĻĻā§āĻāĻžāύ⧎</string>
|
||||
<string name="revanced_hide_comments_chat_summary_title"> \'āĻā§āϝāĻžāĻā§āϰ āϏāĻžāϰāĻžāĻāĻļ\' āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_on">âāĻā§āϝāĻžāĻ āϏāĻžāϰāĻžāĻāĻļâ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_comments_chat_summary_summary_off">âāĻā§āϝāĻžāĻ āϏāĻžāϰāĻžāĻāĻļâ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">\'āĻŽā§āĻŽā§āĻŦāĻžāϰāĻĻā§āϰ āĻŽāύā§āϤāĻŦā§āϝ\' āĻšā§āĻĄāĻžāϰ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">\'āĻŽā§āĻŽā§āĻŦāĻžāϰāĻĻā§āϰ āĻŽāύā§āϤāĻŦā§āϝ\' āĻšā§āĻĄāĻžāϰ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">\'āĻŽā§āĻŽā§āĻŦāĻžāϰāĻĻā§āϰ āĻŽāύā§āϤāĻŦā§āϝ\' āĻšā§āĻĄāĻžāϰ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
@@ -260,6 +277,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">āĻāĻžāĻāĻŽāϏā§āĻā§āϝāĻžāĻŽā§āĻĒ āĻ āĻāĻŽā§āĻāĻŋ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">āĻāĻžāĻāĻŽāϏā§āĻā§āϝāĻžāĻŽā§āĻĒ āĻ āĻāĻŽā§āĻāĻŋ āĻŦā§āϤāĻžāĻŽ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles ā¤ā¤ŋā¤Ēā¤žā¤ā¤</string>
|
||||
<string name="revanced_hide_doodles_summary_on">⤏⤰āĨ⤠ā¤Ŧā¤žā¤° Doodles ā¤ā¤ŋā¤ĒāĨ ā¤šāĨā¤ ā¤šāĨā¤</string>
|
||||
<string name="revanced_hide_doodles_summary_off">āϏāĻžāϰā§āĻ āĻŦāĻžāϰ⧠Doodles āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšāϝāĻŧ</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodles āĻĒā§āϰāϤāĻŋ āĻŦāĻāϰ āĻāϝāĻŧā§āĻ āĻĻāĻŋāύā§āϰ āĻāύā§āϝ āĻĻā§āĻāĻžāύ⧠āĻšāϝāĻŧāĨ¤
|
||||
|
||||
āĻāĻĒāύāĻžāϰ āĻ
āĻā§āĻāϞ⧠āϝāĻĻāĻŋ āĻā§āύāĻ Doodle āĻŦāϰā§āϤāĻŽāĻžāύ⧠āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§ āĻāĻŦāĻ āĻāĻ āϞā§āĻāĻžāύ⧠āϏā§āĻāĻŋāĻ āĻāĻžāϞ⧠āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠āϏāĻžāϰā§āĻ āĻŦāĻžāϰā§āϰ āύā§āĻā§ āĻĢāĻŋāϞā§āĻāĻžāϰ āĻŦāĻžāϰāĻāĻŋāĻ āϞā§āĻāĻžāύ⧠āĻĨāĻžāĻāĻŦā§āĨ¤"</string>
|
||||
<string name="revanced_custom_filter_screen_title">āĻāĻžāϏā§āĻāĻŽ āĻĢāĻŋāϞā§āĻāĻžāϰ</string>
|
||||
<string name="revanced_custom_filter_screen_summary">āĻāĻžāϏā§āĻāĻŽ āĻĢāĻŋāϞā§āĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻŦāĻŋāĻāĻŋāύā§āύ āĻāĻĒāĻžāĻĻāĻžāύ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_custom_filter_title">āĻāĻžāϏā§āĻāĻŽ āĻĢāĻŋāϞā§āĻāĻžāϰ āϏāĻā§āϰāĻŋā§ āĻāϰā§āύ</string>
|
||||
@@ -283,16 +306,36 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_phrases_title">āϞā§āĻāĻžāύā§āϰ āĻāύā§āϝ āĻā§āĻā§āĻžāϰā§āĻĄ</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">"āύāϤā§āύ āϞāĻžāĻāύ āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āĻĨāĻ āĻāϰāĻž āϞā§āĻāĻžāύā§āϰ āĻāύā§āϝ āĻāĻŋāĻāϝāĻŧāĻžāϰā§āĻĄ āĻāĻŦāĻ āĻŦāĻžāĻā§āϝāĻžāĻāĻļ
|
||||
|
||||
āĻāĻŋāĻāϝāĻŧāĻžāϰā§āĻĄ āĻā§āϝāĻžāύā§āϞā§āϰ āύāĻžāĻŽ āĻŦāĻž āĻāĻŋāĻĄāĻŋāĻ āĻļāĻŋāϰā§āύāĻžāĻŽā§ āĻĻā§āĻāĻžāύ⧠āĻā§āύāĻ āĻĒāĻžāĻ ā§āϝ āĻšāϤ⧠āĻĒāĻžāϰā§
|
||||
|
||||
āĻŽāĻžāĻāĻāĻžāύ⧠āĻŦāĻĄāĻŧ āĻšāĻžāϤā§āϰ āĻ
āĻā§āώāϰ āϏāĻŽā§āĻŦāϞāĻŋāϤ āĻļāĻŦā§āĻĻāĻā§āϞāĻŋ āĻā§āϏāĻŋāĻ āĻĻāĻŋāϝāĻŧā§ āĻĒā§āϰāĻŦā§āĻļ āĻāϰāϤ⧠āĻšāĻŦā§ (āϝā§āĻŽāύ: iPhone, TikTok, LeBlanc)"</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">āĻā§āĻā§āĻžāϰā§āĻĄ āĻĢāĻŋāϞā§āĻāĻžāϰāĻŋāĻ āϏāĻŽā§āĻĒāϰā§āĻā§</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">"āĻšā§āĻŽ / āϏāĻžāĻŦāϏā§āĻā§āϰāĻŋāĻĒāĻļāύ / āĻ
āύā§āϏāύā§āϧāĻžāύā§āϰ āĻĢāϞāĻžāĻĢāϞāĻā§āϞāĻŋ āĻāĻŋāĻāϝāĻŧāĻžāϰā§āĻĄ āĻŦāĻžāĻā§āϝāĻžāĻāĻļā§āϰ āϏāĻžāĻĨā§ āĻŽāĻŋāϞ⧠āϝāĻžāĻāϝāĻŧāĻž āϏāĻžāĻŽāĻā§āϰ⧠āϞā§āĻāĻžāύā§āϰ āĻāύā§āϝ āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧ
|
||||
|
||||
āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž
|
||||
âĸ āĻā§āϝāĻžāύā§āϞā§āϰ āύāĻžāĻŽ āĻĻā§āĻŦāĻžāϰāĻž Shorts āϞā§āĻāĻžāύ⧠āϝāĻžāĻŦā§ āύāĻž
|
||||
âĸ āĻāĻŋāĻā§ UI āĻāĻĒāĻžāĻĻāĻžāύ āϞā§āĻāĻžāύ⧠āύāĻžāĻ āĻšāϤ⧠āĻĒāĻžāϰā§
|
||||
âĸ āĻā§āύāĻ āĻāĻŋāĻāϝāĻŧāĻžāϰā§āĻĄ āĻ
āύā§āϏāύā§āϧāĻžāύ āĻāϰāϞ⧠āĻā§āύāĻ āĻĢāϞāĻžāĻĢāϞ āύāĻžāĻ āĻĻā§āĻāĻžāϤ⧠āĻĒāĻžāϰā§"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻļāĻŦā§āĻĻ āĻŽā§āϞāĻžāĻ</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">āĻĄāĻžāĻŦāϞ āĻā§āĻā§āϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āĻā§āĻāϝāĻŧāĻžāϰā§āĻĄ/āĻĢā§āϰā§āĻ āϰāĻžāĻāϞ⧠āĻāĻŋāĻĄāĻŋāĻ āĻļāĻŋāϰā§āύāĻžāĻŽ āĻāĻŦāĻ āĻā§āϝāĻžāύā§āϞā§āϰ āύāĻžāĻŽā§āϰ āĻāĻāĻļāĻŋāĻ āĻŽāĻŋāϞ āϏāύāĻžāĻā§āϤ āĻāϰāĻž āĻŦāύā§āϧ āĻšā§ā§ āϝāĻžāĻŦā§<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">āϏā§ā§āĻžāĻāĻĒ āĻāϰāĻžāϰ āĻĨā§āϰā§āĻļāĻšā§āϞā§āĻĄā§āϰ āĻĒāϰāĻŋāĻŽāĻžāĻŖ</string>
|
||||
</patch>
|
||||
<patch id="layout.autocaptions.autoCaptionsPatch">
|
||||
<string name="revanced_auto_captions_title">āϏā§āĻŦā§āĻāĻā§āϰāĻŋā§ āĻā§āϝāĻžāĻĒāĻļāύ āĻŦāύā§āϧ āĻāϰā§āύ</string>
|
||||
<string name="revanced_auto_captions_summary_on">āĻ
āĻā§ āĻā§āϝāĻžāĻĒāĻļāύ āĻŦāύā§āϧ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§</string>
|
||||
<string name="revanced_auto_captions_summary_off">āĻ
āĻā§ āĻā§āϝāĻžāĻĒāĻļāύ āĻāĻžāϞ⧠āĻāϰāĻž āĻšāϝāĻŧā§āĻā§</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">āĻ
ā§āϝāĻžāĻāĻļāύ āĻŦā§āϤāĻžāĻŽ</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">āĻāĻŋāĻĄāĻŋāĻāϰ āύā§āĻā§ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻŦāĻž āĻĻā§āĻāĻžāύā§</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Like āĻāĻŦāĻ Dislike āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Like āĻāĻŦāĻ Dislike āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Like āĻāĻŦāĻ Dislike āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_share_button_title">Share āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_share_button_summary_on">āĻļā§ā§āĻžāϰ āĻāϰā§āύ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_share_button_summary_off">āĻļā§ā§āĻžāϰ āĻŦāĻžāĻāύ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears only on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">Report āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_report_button_summary_on">āϰāĻŋāĻĒā§āϰā§āĻ āĻŦāĻžāĻāύ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_report_button_summary_off">āϰāĻŋāĻĒā§āϰā§āĻ āĻŦāĻžāĻāύ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_remix_button_title">Remix āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_remix_button_summary_on">āϰāĻŋāĻŽāĻŋāĻā§āϏ āĻŦāĻžāĻāύ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_remix_button_summary_off">āϰāĻŋāĻŽāĻŋāĻā§āϏ āĻŦāĻžāĻāύ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_download_button_title">āĻĄāĻžāĻāύāϞā§āĻĄāĻā§āϞ⧠āĻšāĻžāĻāĻĄ āĻāϰāĻžāĻ</string>
|
||||
<string name="revanced_hide_download_button_summary_on">āĻĄāĻžāĻāύāϞā§āĻĄ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_download_button_summary_off">āĻĄāĻžāĻāύāϞā§āĻĄ āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāϝāĻŧā§āĻā§</string>
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
@@ -418,6 +484,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_clip_button_summary_on">āĻā§āϞāĻŋāĻĒ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_clip_button_summary_off">āĻā§āϞāĻŋāĻĒ āĻŦā§āϤāĻžāĻŽ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_playlist_button_title">āĻĒā§āϞā§āϞāĻŋāϏā§āĻā§ Save āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_playlist_button_summary_on">āĻĒā§āϞā§āϞāĻŋāϏā§āĻā§ Save āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_playlist_button_summary_off">āĻĒā§āϞā§āϞāĻŋāϏā§āĻā§ Save āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.navigation.navigationButtonsPatch">
|
||||
<string name="revanced_navigation_buttons_screen_title">āύā§āĻāĻŋāĻā§āĻļāύ āĻŦā§āϤāĻžāĻŽ</string>
|
||||
@@ -440,11 +509,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">āϏāĻĻāϏā§āϝāϤāĻž āύāĻŋāύ āĻŦā§āϤāĻžāĻŽ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">āϤā§āϰāĻŋ āĻŦā§āϤāĻžāĻŽāĻā§ āĻŦāĻŋāĻā§āĻāĻĒā§āϤāĻŋ āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āϏā§āĻāĻ āĻāϰā§āύ</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">āϤā§āϰāĻŋ āĻāϰā§āύ āĻŦā§āϤāĻžāĻŽ āĻŦāĻŋāĻā§āĻāĻĒā§āϤāĻŋāĻā§āϞ⧠āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āϏā§āĻĨāĻžāύ āĻĒāϰāĻŋāĻŦāϰā§āϤāĻŋāϤ āĻšā§ā§āĻā§\n\nāĻŦāĻŋāĻāĻĻā§āϰāĻ āĻāĻāĻŋ āϏāĻā§āϰāĻŋā§ āĻāϰāĻžāϰ āĻĢāϞ⧠āĻāĻŋāĻĄāĻŋāĻ āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻā§āϰāĻĒā§āϰā§āĻŦāĻ āĻŦāύā§āϧ āĻĨāĻžāĻāĻŦā§</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_on">"āϤā§āϰāĻŋ āĻŦā§āϤāĻžāĻŽāĻāĻŋ āĻŦāĻŋāĻā§āĻāĻĒā§āϤāĻŋ āĻŦā§āϤāĻžāĻŽā§āϰ āϏāĻžāĻĨā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻž āĻšāϝāĻŧ
|
||||
|
||||
āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ: āĻāĻāĻŋ āϏāĻā§āϰāĻŋāϝāĻŧ āĻāϰāĻž āĻāĻŋāĻĄāĻŋāĻ āĻŦāĻŋāĻā§āĻāĻžāĻĒāύāĻā§āϞāĻŋāĻ āĻā§āϰ āĻāϰ⧠āϞā§āĻāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧ"</string>
|
||||
<string name="revanced_switch_create_with_notifications_button_summary_off">āϤā§āϰāĻŋ āĻŦā§āϤāĻžāĻŽāĻā§ āĻŦāĻŋāĻā§āĻāĻĒā§āϤāĻŋ āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āϏā§āĻāĻ āĻāϰāĻž āĻšā§āύāĻŋ</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">āύā§āĻāĻŋāĻā§āĻļāύ āĻŦā§āϤāĻžāĻŽ āϞā§āĻŦā§āϞ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">āϞā§āĻŦā§āϞ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">āϞā§āĻŦā§āϞ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_disable_translucent_status_bar_title">āĻ
āϰā§āϧāϏā§āĻŦāĻā§āĻ āϏā§āĻĨāĻŋāϤāĻŋ āĻŦāĻžāϰ āύāĻŋāώā§āĻā§āϰāĻŋāϝāĻŧ āĻāϰā§āύ</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_on">āϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻŦāĻžāϰāĻāĻŋ āĻ
āϏā§āĻŦāĻā§āĻ</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_off">āϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻŦāĻžāϰāĻāĻŋ āĻ
āϏā§āĻŦāĻā§āĻ āĻŦāĻž āϏā§āĻŦāĻā§āĻ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_title">āĻ
āϰā§āϧāϏā§āĻŦāĻā§āĻ āĻšāĻžāϞāĻāĻž āĻŦāĻžāϰ āύāĻŋāώā§āĻā§āϰāĻŋāϝāĻŧ āĻāϰā§āύ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">āĻšāĻžāϞāĻāĻž āĻŽā§āĻĄ āύā§āĻāĻŋāĻā§āĻļāύ āĻŦāĻžāϰ āĻ
āϏā§āĻŦāĻā§āĻ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">āϞāĻžāĻāĻ āĻŽā§āĻĄ āύā§āϝāĻžāĻāĻŋāĻā§āĻļāύ āĻŦāĻžāϰāĻāĻŋ āĻ
āϏā§āĻŦāĻā§āĻ āĻŦāĻž āϏā§āĻŦāĻā§āĻ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_title">āĻāĻžāĻĸāĻŧ āϏā§āĻŦāĻā§āĻ āĻŦāĻžāϰ āĻ
āĻā§āώāĻŽ āĻāϰā§āύ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">āĻāĻžāĻĸāĻŧ āĻŽā§āĻĄ āύā§āĻāĻŋāĻā§āĻļāύ āĻŦāĻžāϰ āĻ
āϏā§āĻŦāĻā§āĻ</string>
|
||||
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">āĻāĻžāĻĸāĻŧ āĻŽā§āĻĄ āύā§āϝāĻžāĻāĻŋāĻā§āĻļāύ āĻŦāĻžāϰāĻāĻŋ āĻ
āϏā§āĻŦāĻā§āĻ āĻŦāĻž āϏā§āĻŦāĻā§āĻ</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
|
||||
<string name="revanced_hide_player_flyout_title">āĻĢā§āϞāĻžāĻāĻāĻāĻ āĻŽā§āύā§</string>
|
||||
@@ -458,6 +538,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_on">āĻāϰāĻ āϏā§āĻāĻŋāĻāϏ āĻĻā§āĻā§āύ āĻŽā§āύ⧠āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_off">āĻāϰāĻ āϏā§āĻāĻŋāĻāϏ āĻĻā§āĻā§āύ āĻŽā§āύ⧠āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<!-- 'Sleep timer' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_title">Sleep timer āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">Sleep timer āĻŽā§āύ⧠āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">Sleep timer āĻŽā§āύ⧠āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_loop_video_title">āĻāĻŋāĻĄāĻŋāĻ āϞā§āĻĒ āĻāϰā§āύ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_on">āĻāĻŋāĻĄāĻŋāĻ āϞā§āĻĒ āĻāϰā§āύ āĻŽā§āύ⧠āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
@@ -466,6 +549,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_title">āĻ
ā§āϝāĻžāĻŽā§āĻŦāĻŋā§ā§āύā§āĻ āĻŽā§āĻĄ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">āĻ
ā§āϝāĻžāĻŽā§āĻŦāĻŋā§ā§āύā§āĻ āĻŽā§āĻĄ āĻŽā§āύ⧠āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">āĻ
ā§āϝāĻžāĻŽā§āĻŦāĻŋā§ā§āύā§āĻ āĻŽā§āĻĄ āĻŽā§āύ⧠āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_title">Stable volume āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_off">Stable volume āĻŽā§āύ⧠āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_on">Stable volume āĻŽā§āύ⧠āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_help_title">āϏāĻžāĻšāĻžāϝā§āϝ āĻāĻŦāĻ āĻĢāĻŋāĻĄāĻŦā§āϝāĻžāĻ āĻŽā§āύ⧠āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_player_flyout_help_summary_on">āϏāĻšāĻžā§āϤāĻž āĻ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋā§āĻž āĻŽā§āύ⧠āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
@@ -492,6 +578,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">āĻāĻŋāĻāϰ āĻŽā§āύā§āϤ⧠āĻĻā§āĻā§āύ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">āĻāĻŋāĻāϰ āĻŽā§āύā§āϤ⧠āĻĻā§āĻā§āύ āĻĻā§āĻāĻžāύ⧠āĻšāϝāĻŧā§āĻā§</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_title">āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻŖāĻŽāĻžāύ āĻŽā§āύā§āϰ āĻĢā§āĻāĻžāϰ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻŖāĻŽāĻžāύ āĻŽā§āύ⧠āĻĢā§āĻāĻžāϰ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻŖāĻŽāĻžāύ āĻŽā§āύ⧠āĻĢā§āĻāĻžāϰ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<string name="revanced_hide_player_previous_next_buttons_title">āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āϞā§āĻāĻžāύ & āĻĒāϰāĻŦāϰā§āϤ⧠āĻāĻŋāĻĄāĻŋāĻ āĻŦā§āϤāĻžāĻŽ</string>
|
||||
@@ -501,6 +589,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_cast_button_summary_on">āĻāĻžāϏā§āĻ āĻŦāĻžāĻāύ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_cast_button_summary_off">āĻāĻžāϏā§āĻ āĻŦāĻžāĻāύ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<!-- This button does not display any text, but 'captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title' -->
|
||||
<string name="revanced_hide_captions_button_title">āĻā§āϝāĻžāĻĒāĻļāύ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_captions_button_summary_on">āĻā§āϝāĻžāĻĒāĻļāύ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_captions_button_summary_off">āĻā§āϝāĻžāĻĒāĻļāύ āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_hide_autoplay_button_title">autoplay āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_on">autoplay āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_off">autoplay āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">āĻļā§āώ āϏā§āĻā§āϰā§āύ āĻāĻžāϰā§āĻĄ āϞā§āĻāĻžāύ</string>
|
||||
@@ -531,6 +625,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_off">āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ⧠āϏāĻŋāĻāĻŦāĻžāϰ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
|
||||
<string name="revanced_shorts_player_screen_title">Shorts āĻĒā§āϞā§āϝāĻŧāĻžāϰ</string>
|
||||
<string name="revanced_shorts_player_screen_summary">Shorts āĻĒā§āϞā§āϝāĻŧāĻžāϰ⧠āĻāĻĒāĻžāĻĻāĻžāύ āϞā§āĻāĻžāύ⧠āĻŦāĻž āĻĻā§āĻāĻžāύā§</string>
|
||||
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
<string name="revanced_hide_shorts_home_title">āĻĒā§āϰāϧāĻžāύ āĻĢāĻŋāĻĄā§ Shorts āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">āĻĒā§āϰāϧāĻžāύ āĻĢāĻŋāĻĄā§ Shorts āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
@@ -566,6 +662,20 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">āĻ
āĻŦāϏā§āĻĨāĻžāύ āϞā§āĻŦā§āϞ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">āĻ
āĻŦāϏā§āĻĨāĻžāύ āϞā§āĻŦā§āϞ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">āϏāĻā§āĻā§āϤ āϏā§āĻ āĻāϰā§āύ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Save music āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Save music āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Use template āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Use template āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">Use template āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">Upcoming āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">āĻāĻāĻžāĻŽā§ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">āĻāĻāĻžāĻŽā§ āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">āϏāĻŦā§āĻ āĻĒāϰā§āĻĻāĻž āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">āϏāĻŦā§āĻ āĻĒāϰā§āĻĻāĻž āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">āϏāĻŦā§āĻ āĻĒāϰā§āĻĻāĻž āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">āĻšā§āϝāĻžāĻļāĻā§āϝāĻžāĻ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_on">āĻšā§āϝāĻžāĻļāĻā§āϝāĻžāĻ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_off">āĻšā§āϝāĻžāĻļāĻā§āϝāĻžāĻ āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">āĻ
āύā§āϏāύā§āϧāĻžāύ āĻĒāϰāĻžāĻŽāϰā§āĻļāĻā§āϞāĻŋ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_summary_on">āĻ
āύā§āϏāύā§āϧāĻžāύ āĻĒāϰāĻžāĻŽāϰā§āĻļāĻā§āϞāĻŋ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_summary_off">āĻ
āύā§āϏāύā§āϧāĻžāύ āĻĒāϰāĻžāĻŽāϰā§āĻļāĻā§āϞāĻŋ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
@@ -629,6 +739,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">āĻĒā§āϞā§ā§āĻžāϰ āĻĒāĻĒāĻāĻĒ āĻĒā§āϝāĻžāύā§āϞāĻā§āϞ⧠āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">āĻĒā§āϞā§ā§āĻžāϰ āĻĒāĻĒāĻāĻĒ āĻĒā§āϝāĻžāύā§āϞāĻā§āϞ⧠āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||
<string name="revanced_open_videos_fullscreen_portrait_title">āĻĒā§āϰā§āĻŖ āĻĒāϰā§āĻĻāĻžāϝāĻŧ āĻāĻŋāĻĄāĻŋāĻ āĻā§āϞā§āύ</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">āĻāĻŋāĻĄāĻŋāĻ āĻĒā§āϰā§āĻŖ āĻĒāϰā§āĻĻāĻžāϝāĻŧ āĻā§āϞāĻŦā§</string>
|
||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">āĻāĻŋāĻĄāĻŋāĻ āĻĒā§āϰā§āĻŖ āĻĒāϰā§āĻĻāĻžāϝāĻŧ āĻā§āϞāĻŦā§ āύāĻž</string>
|
||||
</patch>
|
||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||
<string name="revanced_player_overlay_opacity_title">āĻĒā§āϞā§ā§āĻžāϰ āĻāĻāĻžāϰāϞ⧠āĻ
āϏā§āĻŦāĻā§āĻāϤāĻž</string>
|
||||
<string name="revanced_player_overlay_opacity_summary">āĻ
āϏāĻā§āĻāϤāĻž āĻŽāĻžāύ ā§Ļ-ā§§ā§Ļā§Ļ āĻāϰ āĻŽāϧā§āϝā§, āϝā§āĻāĻžāύ⧠ā§Ļ āĻšāϞ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āϏā§āĻŦāĻā§āĻ</string>
|
||||
@@ -646,7 +761,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_enable_summary_off">āĻ
āĻĒāĻāύā§āĻĻāĻā§āϞ⧠āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§āύāĻŋ</string>
|
||||
<string name="revanced_ryd_shorts_title">Shorts āĻ āĻ
āĻĒāĻāύā§āĻĻ āĻĻā§āĻāĻžāύ</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Shorts āĻ āĻ
āĻĒāĻāύā§āĻĻ āĻĒāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">Shorts āĻ āĻ
āĻĒāĻāύā§āĻĻ āĻĒāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§\n\nāϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž: āĻāĻĻā§āĻŽāĻŦā§āĻļā§ āĻŽā§āĻĄā§ āĻ
āĻĒāĻāύā§āĻĻ āύāĻžāĻ āĻĻā§āĻāĻžāϤ⧠āĻĒāĻžāϰā§</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Shorts-āĻ āĻĄāĻŋāϏāϞāĻžāĻāĻ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§
|
||||
|
||||
āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž: āĻā§āĻĒāύ āĻŽā§āĻĄā§ āĻĄāĻŋāϏāϞāĻžāĻāĻ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āύāĻžāĻ āĻšāϤ⧠āĻĒāĻžāϰā§"</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Shorts āĻ āĻ
āĻĒāĻāύā§āĻĻ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">āĻ
āĻĒāĻāύā§āĻĻāĻā§āϞ⧠āĻļāϤāĻžāĻāĻļ āĻ
āύā§āϝāĻžā§ā§</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">āĻ
āĻĒāĻāύā§āĻĻāĻā§āϞ⧠āĻļāϤāĻžāĻāĻļ āĻ
āύā§āϝāĻžā§ā§ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
@@ -684,6 +801,16 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_wide_searchbar_summary_off">āĻĒā§āϰāĻļāϏā§āϤ āĻ
āύā§āϏāύā§āϧāĻžāύ āĻŦāĻžāϰ āύāĻŋāώā§āĻā§āϰāĻŋā§ āĻšā§ā§āĻā§</string>
|
||||
</patch>
|
||||
<patch id="layout.seekbar.seekbarThumbnailsPatch">
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_title">āĻāĻā§āĻāĻŽāĻžāύā§āϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āϏāĻā§āώāĻŽ āĻāϰā§āύ</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">āϏāĻŋāĻāĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āĻāĻā§āĻāĻŽāĻžāύā§āϰ</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">āϏāĻŋāĻāĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āĻŽāĻžāĻāĻžāϰāĻŋāĻŽāĻžāύā§āϰ</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_on">āĻĒā§āϰā§āĻŖ āĻĒāϰā§āĻĻāĻžāϝāĻŧ āϏāĻŋāĻāĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āĻāĻā§āĻāĻŽāĻžāύā§āϰ</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">āĻĒā§āϰā§āĻŖ āĻĒāϰā§āĻĻāĻžāϝāĻŧ āϏāĻŋāĻāĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āĻŽāĻžāĻāĻžāϰāĻŋāĻŽāĻžāύā§āϰ</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"āĻāĻāĻŋ āϏā§āĻ āϞāĻžāĻāĻāϏā§āĻā§āϰāĻŋāĻŽāĻā§āϞāĻŋāϤ⧠āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻŦā§ āϝā§āĻāĻžāύ⧠āϏāĻŋāĻāĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āύā§āĻāĨ¤
|
||||
|
||||
āϏāĻŋāĻāĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āĻŦāϰā§āϤāĻŽāĻžāύ āĻāĻŋāĻĄāĻŋāĻāϰ āĻāĻāĻ āĻŽāĻžāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āĨ¤
|
||||
|
||||
āĻāĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻāĻŋ 720p āĻ
āĻĨāĻŦāĻž āϤāĻžāϰ āĻā§āϝāĻŧā§ āĻāĻŽ āĻāĻŋāĻĄāĻŋāĻ āĻŽāĻžāύ āĻāĻŦāĻ āĻā§āĻŦ āĻĻā§āϰā§āϤ āĻāύā§āĻāĻžāϰāύā§āĻ āϏāĻāϝā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻžāϞ⧠āĻāĻžāĻ āĻāϰā§āĨ¤"</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">āĻĒā§āϰā§āύ⧠āϏāĻŋāĻāĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰā§āύ</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">āϏāĻŋāĻāĻŦāĻžāϰ āĻāϰ āĻāĻĒāϰ⧠āϏāĻŋāĻāĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āĻĻā§āĻāĻžāύ⧠āĻšāĻŦā§</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">āĻĒā§āϰā§āĻŖāϏā§āĻā§āϰā§āĻŖā§ āϏāĻŋāĻāĻŦāĻžāϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āĻĻā§āĻāĻžāύ⧠āĻšāĻŦā§</string>
|
||||
@@ -730,6 +857,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_skipcount_sum_off">āϏā§āĻāĻŋāĻĒ āĻāĻžāĻāύā§āĻ āĻā§āϰā§āϝāĻžāĻāĻŋāĻ āϏāĻā§āϰāĻŋā§ āĻšā§āύāĻŋ</string>
|
||||
<string name="revanced_sb_general_min_duration">āύā§āϝā§āύāϤāĻŽ āϏā§āĻāĻŽā§āύā§āĻ āϏāĻŽāϝāĻŧāĻāĻžāϞ</string>
|
||||
<string name="revanced_sb_general_min_duration_sum">āĻāĻ āĻŽāĻžāύ (āϏā§āĻā§āύā§āĻĄ) āĻšāϤ⧠āĻāĻŽ āĻĻā§āϰā§āĻā§āϝā§āϰ āϏā§āĻāĻŽā§āύā§āĻ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻŦāĻž āϏā§āĻāĻŋāĻĒ āĻāϰāĻž āĻšāĻŦā§ āύāĻž</string>
|
||||
<string name="revanced_sb_general_min_duration_invalid">āĻ
āĻŦā§āϧ āϏāĻŽāϝāĻŧāĻāĻžāϞ</string>
|
||||
<string name="revanced_sb_general_uuid">āĻāĻĒāύāĻžāϰ āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻāĻĄāĻŋ</string>
|
||||
<string name="revanced_sb_general_uuid_sum">āĻāĻāĻŋ āĻā§āĻĒāύ āϰāĻžāĻāĻž āĻāĻāĻŋāϤāĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄā§āϰ āĻŽāϤ⧠āĻāĻŦāĻ āĻāĻžāϰāĻ āϏāĻžāĻĨā§ āĻļā§āϝāĻŧāĻžāϰ āĻāϰāĻž āĻāĻāĻŋāϤ āύāϝāĻŧāĨ¤ āϝāĻĻāĻŋ āĻāĻžāϰāĻ āĻāĻžāĻā§ āĻāĻāĻŋ āĻĨāĻžāĻā§, āϤāĻŦā§ āϤāĻžāϰāĻž āĻāĻĒāύāĻžāϰ āĻāĻĻā§āĻŽāĻŦā§āĻļ āϧāĻžāϰāĻŖ āĻāϰāϤ⧠āĻĒāĻžāϰā§</string>
|
||||
<string name="revanced_sb_general_uuid_invalid">āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ āĻŦā§āϝāĻŦāĻšāĻžāĻāĻžāϰ⧠āĻāĻāĻĄāĻŋ āĻ
āĻŦāĻļā§āϝāĻ ā§Šā§Ļ āĻ
āĻā§āώāϰ āϞāĻŽā§āĻŦāĻž āĻšāϤ⧠āĻšāĻŦā§</string>
|
||||
@@ -745,7 +873,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_settings_import_successful">āϏā§āĻāĻŋāĻ āϏāĻĢāϞāĻāĻžāĻŦā§ āĻāĻŽāĻĻāĻžāύāĻŋ āĻāϰāĻž āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_sb_settings_import_failed">%s āĻāĻŽāĻĻāĻžāύāĻŋ āĻāϰāϤ⧠āĻŦā§āϝāϰā§āĻĨ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_sb_settings_export_failed">%s āϰāĻĒā§āϤāĻžāύāĻŋ āĻāϰāϤ⧠āĻŦā§āϝāϰā§āĻĨ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">āĻāĻĒāύāĻžāϰ āϏā§āĻāĻŋāĻāĻ āĻāĻāĻāĻŋ āĻĒā§āϰāĻžāĻāĻā§āĻ SponsorBlock āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻāĻĄāĻŋ āϰā§ā§āĻā§āĨ¤\n\nāĻāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻāĻĄāĻŋ āĻ
āύā§āĻāĻāĻž āĻĒāĻžāϏāĻā§āĻžāϰā§āĻĄā§āϰ āĻŽāϤ⧠āϤāĻžāĻ āĻāĻāĻŋ āĻāĻāύā§āĻ āĻļā§ā§āĻžāϰ āĻāϰāĻž āĻāĻāĻŋāϤ āύā§āĨ¤\n</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning">"āĻāĻĒāύāĻžāϰ āϏā§āĻāĻŋāĻāϏ⧠āĻāĻāĻāĻŋ āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ SponsorBlock āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠ID āϰāϝāĻŧā§āĻā§āĨ¤
|
||||
|
||||
āĻāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠ID āĻāĻāĻāĻŋ āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄā§āϰ āĻŽāϤ⧠āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻāύāĻ āĻāĻžāĻ āĻāϰāĻž āĻāĻāĻŋāϤ āύāϝāĻŧāĨ¤"</string>
|
||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">āĻāĻŦāĻžāϰ āĻĻā§āĻāĻžāĻŦā§āύ āύāĻž</string>
|
||||
<string name="revanced_sb_diff_segments">āϏā§āĻāĻŽā§āύā§āĻ āĻāĻāϰāĻŖ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§āύ</string>
|
||||
<string name="revanced_sb_segments_sponsor">āϏā§āĻĒāύā§āϏāϰ</string>
|
||||
@@ -805,9 +935,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_submit_failed_invalid">%s āϏā§āĻāĻŽā§āύā§āĻ āĻāĻŽāĻž āĻĻāĻŋāϤ⧠āϏāĻā§āώāĻŽ āĻšā§āύāĻŋ</string>
|
||||
<string name="revanced_sb_submit_failed_timeout">SponsorBlock āϏāĻžāĻŽā§āĻŋāĻāĻāĻžāĻŦā§ āĻŦāύā§āϧ āĻāĻā§</string>
|
||||
<string name="revanced_sb_submit_failed_unknown_error">āϏā§āĻāĻŽā§āύā§āĻ āĻāĻŽāĻž āĻĻāĻŋāϤ⧠āϏāĻā§āώāĻŽ āĻšā§āύāĻŋ (āĻ
āĻŦāϏā§āĻĨāĻž: %1$d %2$s)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">āϏā§āĻāĻŽā§āύā§āĻ āĻāĻŽāĻž āĻāϰāĻž āϏāĻŽā§āĻāĻŦ āĻšā§āύāĻŋāĨ¤\nāϰā§āĻ āϞāĻŋāĻŽāĻŋāĻ (āĻāĻāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻŦāĻž IP āĻĨā§āĻā§ āĻ
āύā§āĻ āĻŦā§āĻļāĻŋ)</string>
|
||||
<string name="revanced_sb_submit_failed_rate_limit">āϏā§āĻāĻŽā§āύā§āĻ āĻāĻŽāĻž āĻĻāĻŋāϤ⧠āĻĒāĻžāϰāĻāĻŋ āύāĻžāĨ¤ āĻšāĻžāϰ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧ (āĻāĻāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻŦāĻž IP āĻĨā§āĻā§ āĻā§āĻŦ āĻŦā§āĻļāĻŋ)āĨ¤</string>
|
||||
<string name="revanced_sb_submit_failed_forbidden">āϏā§āĻāĻŽā§āύā§āĻ āĻāĻŽāĻž āĻāϰāĻž āϝāĻžāĻŦā§ āύāĻž: %s</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">āϏā§āĻāĻŽā§āύā§āĻ āĻāĻŽāĻž āĻāϰāĻž āϏāĻŽā§āĻāĻŦ āύā§āĨ¤\nāĻāϤā§āĻŽāϧā§āϝ⧠āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_sb_submit_failed_duplicate">"āϏā§āĻāĻŽā§āύā§āĻ āĻāĻŽāĻž āĻĻāĻŋāϤ⧠āĻĒāĻžāϰāĻāĻŋ āύāĻžāĨ¤
|
||||
āĻĒā§āϰā§āĻŦā§āĻ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ"</string>
|
||||
<string name="revanced_sb_submit_succeeded">āϏā§āĻāĻŽā§āύā§āĻ āϏāĻĢāϞāĻāĻžāĻŦā§ āĻāĻŽāĻž āĻšā§ā§āĻā§</string>
|
||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">SponsorBlock āϏāĻžāĻŽā§āĻŋāĻāĻāĻžāĻŦā§ āĻāĻĒāϞāĻā§āϝ āύ⧠(API āϏāĻŽā§ āĻļā§āώ āĻšā§ā§āĻā§)</string>
|
||||
@@ -823,13 +954,23 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_new_segment_choose_category">āϏā§āĻāĻŽā§āύā§āĻā§āϰ āĻŦāĻŋāĻāĻžāĻ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰā§āύ</string>
|
||||
<string name="revanced_sb_new_segment_disabled_category">āϏā§āĻāĻŋāĻ āĻĨā§āĻā§ āĻŦāĻŋāĻāĻžāĻ āύāĻŋāϏā§āĻā§āϰāĻŋā§ āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤ āĻāĻŽāĻž āĻĻāĻŋāϤ⧠āĻŦāĻŋāĻāĻžāĻ āϏāĻā§āϰāĻŋā§ āĻāϰā§āύāĨ¤</string>
|
||||
<string name="revanced_sb_new_segment_title">āύāϤā§āύ āϏā§āĻĒāύā§āϏāϰāĻŦā§āϞāĻ āϏā§āĻāĻŽā§āύā§āĻ</string>
|
||||
<string name="revanced_sb_new_segment_mark_time_as_question">%s āĻā§ āύāϤā§āύ āϏā§āĻāĻŽā§āύā§āĻā§āϰ āĻļā§āϰ⧠āĻ
āĻĨāĻŦāĻž āĻļā§āώ āĻšāĻŋāϏā§āĻŦā§ āϏā§āĻ āĻāϰā§āύ?</string>
|
||||
<string name="revanced_sb_new_segment_mark_start">āĻļā§āϰā§</string>
|
||||
<string name="revanced_sb_new_segment_mark_end">āĻļā§āώ</string>
|
||||
<string name="revanced_sb_new_segment_now">āĻāĻāύ</string>
|
||||
<string name="revanced_sb_new_segment_time_start">āϏā§āĻāĻŽā§āύā§āĻāĻāĻŋ āĻļā§āϰ⧠āĻšāĻāϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ</string>
|
||||
<string name="revanced_sb_new_segment_time_end">āϏā§āĻāĻŽā§āύā§āĻāĻāĻŋ āĻļā§āώ āĻšāĻāϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ</string>
|
||||
<string name="revanced_sb_new_segment_confirm_title">āϏāĻŽāϝāĻŧāĻāĻžāϞ āĻāĻŋ āϏāĻ āĻŋāĻ?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">āϏā§āĻāĻŽā§āύā§āĻ āϏāĻŽā§āĻāĻžāϞ\n\n%1$s\nāĻĨā§āĻā§\n%2$s\n\n(%3$s)\n\nāĻāĻŽāĻž āĻāϰāĻžāϰ āĻāύā§āϝ āĻĒā§āϰāϏā§āϤā§āϤ?</string>
|
||||
<string name="revanced_sb_new_segment_confirm_content">"āϏā§āĻāĻŽā§āύā§āĻāĻāĻŋ
|
||||
|
||||
%1$s
|
||||
āĻĨā§āĻā§
|
||||
|
||||
%2$s
|
||||
āĻāĻŦāĻ
|
||||
|
||||
(%3$s)
|
||||
āĻāĻŽāĻž āĻĻāĻŋāϤ⧠āĻĒā§āϰāϏā§āϤā§āϤāĨ¤"</string>
|
||||
<string name="revanced_sb_new_segment_start_is_before_end">āĻļā§āϰ⧠āĻ
āĻŦāĻļā§āϝāĻ āĻļā§āώā§āϰ āĻāĻā§ āĻšāϤ⧠āĻšāĻŦā§</string>
|
||||
<string name="revanced_sb_new_segment_mark_locations_first">āĻāĻā§ āϏāĻŽā§ āĻŦāĻžāϰ⧠āĻĻā§āĻāĻŋ āĻ
āĻŦāϏā§āĻĨāĻžāύ āĻāĻŋāĻšā§āύāĻŋāϤ āĻāϰā§āύ</string>
|
||||
<string name="revanced_sb_new_segment_preview_segment_first">āϏā§āĻāĻŽā§āύā§āĻāĻāĻŋ āĻĒā§āϰā§āĻŦāϰā§āĻĒ āĻĻā§āĻā§āύ āĻāĻŦāĻ āύāĻŋāĻļā§āĻāĻŋāϤ āĻšā§āύ āϝ⧠āĻāĻāĻŋ āĻŽāϏā§āĻŖāĻāĻžāĻŦā§ āĻā§āĻŋā§ā§ āϝāĻžāĻā§āĻā§</string>
|
||||
@@ -847,6 +988,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_stats_username_changed">āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āύāĻžāĻŽ āϏāĻĢāϞāĻāĻžāĻŦā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_sb_stats_reputation">āĻāĻĒāύāĻžāϰ āϰāĻŋāĻĒā§āĻā§āĻļāύ āĻšāϞ <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 +1012,15 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_title">āĻ
ā§āϝāĻžāĻĒ āϏāĻāϏā§āĻāϰāĻŖ āϏā§āĻĒā§āĻĢ āĻāϰā§āύ</string>
|
||||
<string name="revanced_spoof_app_version_summary_on">āϏāĻāϏā§āĻāϰāĻŖ āϏā§āĻĒā§āĻĢ āĻāϰāĻž āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_spoof_app_version_summary_off">āϏāĻāϏā§āĻāϰāĻŖ āϏā§āĻĒā§āĻĢ āĻāϰāĻž āĻšā§āύāĻŋ</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">āĻ
ā§āϝāĻžāĻĒ āϏāĻāϏā§āĻāϰāĻŖ āĻĒā§āϰā§āύ⧠āĻāĻāĻāĻŋ āϏāĻāϏā§āĻāϰāĻŖā§ āϏā§āĻĒā§āĻĢ āĻāϰāĻž āĻšāĻŦā§āĨ¤\n\nāĻāĻāĻŋ āĻ
ā§āϝāĻžāĻĒā§āϰ āĻā§āĻšāĻžāϰāĻž āĻāĻŦāĻ āĻĢāĻŋāĻāĻžāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻāϤ⧠āĻ
āύāĻžāĻāĻžāĻā§āĻāĻŋāϤ āĻĒāĻžāϰā§āĻļā§āĻŦāĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋā§āĻž āĻĻā§āĻāĻž āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤\n\nāĻĒāϰāĻŦāϰā§āϤā§āϤ⧠āĻŦāύā§āϧ āĻāϰāĻž āĻšāϞā§, UI āĻŦāĻžāĻ āĻĨā§āĻā§ āĻŦāĻžāĻāĻāϤāĻŋ āĻ
ā§āϝāĻžāĻĒā§āϰ āĻĄāĻžāĻāĻž āĻā§āϞāĻŋā§āĻžāϰ āĻāϰāĻžāϰ āĻĒā§āϰāϏā§āϤāĻžāĻŦāύāĻž āϰāĻāϞā§āĨ¤</string>
|
||||
<string name="revanced_spoof_app_version_user_dialog_message">"āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāĻāϏā§āĻāϰāĻŖāĻāĻŋ YouTube-āĻāϰ āĻĒā§āϰāύ⧠āϏāĻāϏā§āĻāϰāĻŖā§ āĻā§āϝāĻŧāĻž āĻšāĻŦā§āĨ¤
|
||||
|
||||
āĻāĻāĻŋ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋāϰ āĻā§āĻšāĻžāϰāĻž āĻāĻŦāĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻŦā§, āϤāĻŦā§ āĻ
āĻāĻžāύāĻž āĻĒāĻžāϰā§āĻļā§āĻŦ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
|
||||
|
||||
āĻĒāϰ⧠āϝāĻĻāĻŋ āĻŦāύā§āϧ āĻāϰāĻž āĻšāϝāĻŧ, UI āĻŦāĻžāĻ āĻāĻĄāĻŧāĻžāϤ⧠āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĄā§āĻāĻž āĻĒāϰāĻŋāώā§āĻāĻžāϰ āĻāϰāĻžāϰ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧāĨ¤"</string>
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">āϏā§āĻĒā§āĻĢ āĻ
ā§āϝāĻžāĻĒ āϏāĻāϏā§āĻāϰāĻŖ āϞāĻā§āώā§āϝ</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 - āĻĒā§āϰāύ⧠Shorts āĻĒā§āϞā§āϝāĻŧāĻžāϰ āĻāĻāĻāύ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰā§āύ</string>
|
||||
<!-- 'RYD' is 'Return YouTube Dislike' -->
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_1">18.33.40 - āĻāĻĻā§āĻŽāĻŦā§āĻļāĻŋ āĻŽā§āĻĄā§ RYD āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰā§</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_2">18.20.39 - āĻĒā§āϰāĻļā§āĻŦāϏā§āϤ āĻāĻŋāĻĄāĻŋāĻ āϏā§āĻĒāĻŋāĻĄ āĻāĻŦāĻ āĻā§āĻŖāĻŽāĻžāύ āĻŽā§āύ⧠āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰā§</string>
|
||||
@@ -883,12 +1030,20 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">āĻļā§āϰā§āϰ āĻĒā§āώā§āĻ āĻž āϏā§āĻ āĻāϰā§āύ</string>
|
||||
<string name="revanced_change_start_page_entry_default">āĻĒā§āϰā§āĻŦ-āύāĻŋāϰā§āϧāĻžāϰāĻŋāϤ</string>
|
||||
<string name="revanced_change_start_page_entry_browse">āĻā§āϝāĻžāύā§āϞ āĻŦā§āϰāĻžāĻāĻ āĻāϰā§āύ</string>
|
||||
<string name="revanced_change_start_page_entry_explore">āĻā§āϰ⧠āĻĻā§āĻā§āύ</string>
|
||||
<string name="revanced_change_start_page_entry_gaming">āĻā§āĻŽāĻŋāĻ</string>
|
||||
<string name="revanced_change_start_page_entry_history">āĻāϤāĻŋāĻšāĻžāϏ</string>
|
||||
<string name="revanced_change_start_page_entry_library">āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ</string>
|
||||
<string name="revanced_change_start_page_entry_liked_videos">āĻĒāĻāύā§āĻĻ āĻāϰāĻž āĻāĻŋāĻĄāĻŋāĻāĻā§āϞāĻŋ</string>
|
||||
<string name="revanced_change_start_page_entry_live">āϞāĻžāĻāĻ</string>
|
||||
<string name="revanced_change_start_page_entry_movies">āĻŽā§āĻāĻŋ</string>
|
||||
<string name="revanced_change_start_page_entry_music">āϏāĻā§āĻā§āϤ</string>
|
||||
<string name="revanced_change_start_page_entry_search">āĻ
āύā§āϏāύā§āϧāĻžāύ</string>
|
||||
<string name="revanced_change_start_page_entry_sports">āĻā§āϞāĻžāϧā§āϞāĻž</string>
|
||||
<string name="revanced_change_start_page_entry_subscriptions">āϏāĻĻāϏā§āϝāϤāĻž</string>
|
||||
<string name="revanced_change_start_page_entry_trending">āĻāĻāύ āĻāύāĻĒā§āϰāĻŋā§</string>
|
||||
<string name="revanced_change_start_page_entry_watch_later">āĻĒāϰ⧠āĻĻā§āĻā§āύ</string>
|
||||
</patch>
|
||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||
<string name="revanced_disable_resuming_shorts_player_title">Shorts āĻĒā§āϞā§ā§āĻžāϰ āĻāĻŦāĻžāϰ āĻāĻžāϞāĻžāύ⧠āύāĻŋāώā§āĻā§āϰāĻŋā§ āĻāϰā§āύ</string>
|
||||
@@ -896,6 +1051,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_off">āĻ
ā§āϝāĻžāĻĒā§āϰ āĻļā§āϰā§āϤ⧠Shorts āĻĒā§āϞā§ā§āĻžāϰ āĻāĻŦāĻžāϰ āĻāϞāĻŦā§</string>
|
||||
</patch>
|
||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||
<string name="revanced_shorts_autoplay_title">āĻ
āĻā§āĻĒā§āϞ⧠Shorts</string>
|
||||
<string name="revanced_shorts_autoplay_summary_on">Shorts āĻ
āĻā§āĻĒā§āϞ⧠āĻšāĻŦā§</string>
|
||||
<string name="revanced_shorts_autoplay_summary_off">Shorts āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻšāĻŦā§</string>
|
||||
<string name="revanced_shorts_autoplay_background_title">āĻĒāĻāĻā§āĻŽāĻŋāϤ⧠Shorts āĻ
āĻā§āĻĒā§āϞā§</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_on">āĻĒāĻāĻā§āĻŽāĻŋāϤ⧠Shorts āĻ
āĻā§āĻĒā§āϞ⧠āĻšāĻŦā§</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_off">āĻĒāĻāĻā§āĻŽāĻŋāϤ⧠Shorts āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻšāĻŦā§</string>
|
||||
</patch>
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
<string name="revanced_tablet_layout_title">āĻā§āϝāĻžāĻŦāϞā§āĻ āϞā§āĻāĻāĻ āϏāĻā§āϰāĻŋā§ āĻāϰā§āύ</string>
|
||||
@@ -908,18 +1069,48 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_summary">āĻ
ā§āϝāĻžāĻĒā§āϰ āĻŽāϧā§āϝāĻāĻžāϰ āĻŽāĻŋāύāĻŋāĻŽāĻžāĻāĻāĻĄ āĻĒā§āϞā§ā§āĻžāϰ āĻāϰ āϧāϰāĻŖ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§āύ</string>
|
||||
<string name="revanced_miniplayer_type_title">āĻŽāĻŋāύāĻŋāĻĒā§āϞā§ā§āĻžāϰ āϧāϰāĻŖ</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">āύāĻŋāώā§āĻā§āϰāĻŋā§ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">āĻāϏāϞ</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">āĻĒā§āϰā§āĻŦ-āύāĻŋāϰā§āϧāĻžāϰāĻŋāϤ</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">āύā§āϝā§āύāϤāĻŽ</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">āĻā§āϝāĻžāĻŦāϞā§āĻ</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">āĻŽāϰā§āĻĄāĻžāύ ā§§</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">āĻŽāϰā§āĻĄāĻžāύ ⧍</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">āĻŽāϰā§āĻĄāĻžāύ ā§Š</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">āĻā§āϞāĻžāĻāĻžāϰ āĻā§āĻŖ āϏāĻā§āώāĻŽ āĻāϰā§āύ</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">āĻā§āĻŖāĻā§āϞāĻŋ āĻā§āϞāĻžāĻāĻžāϰ</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">āĻā§āĻŖāĻā§āϞāĻŋ āĻŦāϰā§āĻāĻžāĻāĻžāϰ</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">āĻĄāĻžāĻŦāϞ-āĻā§āϝāĻžāĻĒ āĻāĻŦāĻ āĻĒāĻŋāĻā§āĻ āĻā§ āϰāĻŋāϏāĻžāĻāĻ āϏāĻā§āώāĻŽ āĻāϰā§āύ</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"āĻĄāĻžāĻŦāϞ-āĻā§āϝāĻžāĻĒ āĻāϰāĻžāϰ āĻā§āϰāĻŋāϝāĻŧāĻž āĻāĻŦāĻ āĻāĻāĻžāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŋāĻŽāĻāĻŋ āĻĻā§āĻāϝāĻŧāĻž āϏāĻā§āϰāĻŋāϝāĻŧ
|
||||
|
||||
âĸ miniplayer āĻāĻāĻžāϰ āĻŦā§āĻĻā§āϧāĻŋ āĻāϰāϤ⧠āĻĄāĻžāĻŦāϞ āĻā§āϝāĻžāĻĒ āĻāϰā§āύ
|
||||
âĸ āĻŽā§āϞ āĻāĻāĻžāϰ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāϤ⧠āĻāĻŦāĻžāϰ āĻĄāĻžāĻŦāϞ āĻā§āϝāĻžāĻĒ āĻāϰā§āύ"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">āĻĄāĻžāĻŦāϞ-āĻā§āϝāĻžāĻĒ āĻ
ā§āϝāĻžāĻāĻļāύ āĻāĻŦāĻ āĻĒāĻŋāĻā§āĻ āĻā§ āϰāĻŋāϏāĻžāĻāĻ āĻ
āĻā§āώāĻŽ</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">āĻĄā§āϰā§āϝāĻžāĻ āĻāĻŦāĻ āĻĄā§āϰāĻĒ āϏāĻā§āώāĻŽ āĻāϰā§āύ</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"āĻĄā§āϰā§āϝāĻžāĻ āĻāĻŦāĻ āĻĄā§āϰāĻĒ āϏāĻā§āϰāĻŋāϝāĻŧ
|
||||
|
||||
Miniplayer āϏā§āĻā§āϰāĻŋāύā§āϰ āϝā§āĻā§āύ⧠āĻā§āĻŖā§ āĻāĻžāύāĻž āϝāĻžāĻŦā§"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">āĻĄā§āϰā§āϝāĻžāĻ āĻāĻŦāĻ āĻĄā§āϰāĻĒ āĻ
āĻā§āώāĻŽ</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">āĻ
āύā§āĻā§āĻŽāĻŋāĻ āĻĄā§āϰā§āϝāĻžāĻ āĻ
āĻā§āĻāĻāĻā§āĻāĻŋ āϏāĻā§āώāĻŽ āĻāϰā§āύ</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"āĻā§āώāĨāϤāĻŋāĻāĻāĻžāĻŦā§ āĻāĻžāύāĻžāϰ āĻāĻā§āĻāĻŋ āϏāĻā§āϰāĻŋāϝāĻŧ
|
||||
|
||||
Miniplayer āϏā§āĻā§āϰāĻŋāύ āĻĨā§āĻā§ āĻŦāĻžāĻŽā§ āĻŦāĻž āĻĄāĻžāύ⧠āĻāĻžāύāĻž āϝāĻžāĻŦā§"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">āĻ
āύā§āĻā§āĻŽāĻŋāĻ āĻĄā§āϰā§āϝāĻžāĻ āĻ
āĻā§āĻāĻāĻā§āĻāĻŋ āĻ
āĻā§āώāĻŽ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_title">āĻŦāύā§āϧ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_on">āĻŦāύā§āϧ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ⧠āĻāĻā§</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_summary_off">āĻŦāύā§āϧ āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">āĻŦāĻŋāϏā§āϤā§āϤ āĻ āĻŦāύā§āϧ āĻāϰāĻžāϰ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">"āĻŦā§āϤāĻžāĻŽāĻā§āϞāĻŋ āϞā§āĻāĻžāύ⧠āĻšāϝāĻŧ
|
||||
|
||||
āĻŦāĻŋāϏā§āϤā§āϤ āĻāϰāϤ⧠āĻŦāĻž āĻŦāύā§āϧ āĻāϰāϤ⧠āϏā§āϝāĻŧāĻžāĻāĻĒ āĻāϰā§āύ"</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">āĻŦāĻŋāϏā§āϤā§āϤ āĻāĻŦāĻ āĻŦāύā§āϧ āĻŦā§āϤāĻžāĻŽ āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">āĻāĻĒāĻĒāĻžāĻ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">āĻāĻĒāĻĒāĻžāĻ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_off">āĻāĻĒāĻĒāĻžāĻ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_title">āϏāĻžāĻŽāύ⧠āĻŦāĻž āĻĒā§āĻāύ⧠āĻā§āĻŋā§ā§ āϝāĻžāĻā§āĻžāϰ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻžāύ</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">āϏāĻžāĻŽāύ⧠āĻŦāĻž āĻĒā§āĻāύ⧠āĻā§āĻŋā§ā§ āϝāĻžāĻā§āĻžāϰ āĻŦā§āϤāĻžāĻŽ āϞā§āĻāĻŋā§ā§ āϰā§ā§āĻā§</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">āϏāĻžāĻŽāύ⧠āĻŦāĻž āĻĒā§āĻāύ⧠āĻā§āĻŋā§ā§ āϝāĻžāĻā§āĻžāϰ āĻŦā§āϤāĻžāĻŽ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_miniplayer_width_dip_title">āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻāĻāĻžāϰ</string>
|
||||
<string name="revanced_miniplayer_width_dip_summary">āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻĒāϰā§āĻĻāĻžāϰ āĻāĻāĻžāϰ, āĻĒāĻŋāĻā§āϏā§āϞā§</string>
|
||||
<string name="revanced_miniplayer_width_dip_invalid_toast">āĻĒāĻŋāĻā§āϏā§āϞ āĻāĻāĻžāϰ %1$s āĻāĻŦāĻ %2$s āĻāϰ āĻŽāϧā§āϝ⧠āĻšāϤ⧠āĻšāĻŦā§</string>
|
||||
<string name="revanced_miniplayer_opacity_title">āĻāĻāĻžāϰāϞ⧠āĻ
āϏā§āĻŦāĻā§āĻāϤāĻž</string>
|
||||
<string name="revanced_miniplayer_opacity_summary">āĻ
āϏāĻā§āĻāϤāĻž āĻŽāĻžāύ ā§Ļ-ā§§ā§Ļā§Ļ āĻāϰ āĻŽāϧā§āϝā§, āϝā§āĻāĻžāύ⧠ā§Ļ āĻšāϞ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āϏā§āĻŦāĻā§āĻ</string>
|
||||
<string name="revanced_miniplayer_opacity_invalid_toast">āĻŽāĻŋāύāĻŋāĻĒā§āϞā§ā§āĻžāϰ āĻāĻāĻžāϰāϞ⧠āĻ
āϏā§āĻŦāĻā§āĻāϤāĻž āĻ
āĻŦāĻļā§āϝāĻ ā§Ļ-ā§§ā§Ļā§Ļ āĻāϰ āĻŽāϧā§āϝ⧠āĻšāϤ⧠āĻšāĻŦā§</string>
|
||||
@@ -935,8 +1126,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_custom_color_summary_off">āϏāĻŋāĻāĻŦāĻžāϰ⧠āĻŽā§āϞ āϰāĻ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_seekbar_custom_color_value_title">āύāĻŋāĻāϏā§āĻŦ āϏāĻŋāĻāĻŦāĻžāϰ āϰāĻ</string>
|
||||
<string name="revanced_seekbar_custom_color_value_summary">āϏāĻŋāĻāĻŦāĻžāϰā§āϰ āϰāĻ</string>
|
||||
<string name="revanced_seekbar_custom_color_invalid">āĻ
āĻŦā§āϧ āϏāĻŋāĻāĻŦāĻžāϰ āϰāĻ āĻŽāĻžāύ</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||
<string name="revanced_bypass_image_region_restrictions_title">āĻāĻŦāĻŋ āĻ
āĻā§āĻāϞ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āĻŦāĻžāĻāĻĒāĻžāϏ āĻāϰā§āύ</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_on">yt4.ggpht.com āĻāĻŦāĻŋ āĻšā§āϏā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§</string>
|
||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"āĻŽā§āϞ āĻāĻŦāĻŋ āĻšā§āϏā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§
|
||||
|
||||
āĻāĻāĻŋ āϏāĻā§āώāĻŽ āĻāϰāϞ⧠āĻāĻŋāĻā§ āĻ
āĻā§āĻāϞ⧠āĻŦā§āϞāĻ āĻāϰāĻž āĻĨāĻžāĻāĻž āĻ
āύā§āĻĒāϏā§āĻĨāĻŋāϤ āĻāĻŦāĻŋāĻā§āϞāĻŋ āϏāĻāĻļā§āϧāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§"</string>
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
@@ -951,7 +1148,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow āĻāĻŦāĻ āĻŽā§āϞ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow āĻāĻŦāĻ āϏā§āĻĨāĻŋāϰ āĻāĻŦāĻŋ</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_4">āϏā§āĻĨāĻŋāϰ āĻāĻŦāĻŋ</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow YouTube āĻāĻŋāĻĄāĻŋāĻāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻā§āϰāĻžāĻāĻĄ-āϏā§āϰā§āϏāĻĄ āĻĨāĻžāĻŽā§āĻŦāύā§āϞ āϏāϰāĻŦāϰāĻžāĻš āĻāϰā§āĨ¤ āĻāĻ āĻĨāĻžāĻŽā§āĻŦāύā§āϞāĻā§āϞāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻ YouTube āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāĻĻāϤā§āϤ āĻĨāĻžāĻŽā§āĻŦāύā§āϞāĻā§āϞāĻŋāϰ āĻā§āϝāĻŧā§ āĻŦā§āĻļāĻŋ āĻĒā§āϰāĻžāϏāĻā§āĻāĻŋāĻ\n\nāĻ
āύ āĻāϰāϞā§, āĻāĻŋāĻĄāĻŋāĻ URLāĻā§āϞāĻŋ API āϏāĻžāϰā§āĻāĻžāϰ⧠āĻĒāĻžāĻ āĻžāύ⧠āĻšāĻŦā§ āĻāĻŦāĻ āĻ
āύā§āϝ āĻā§āύāĻ āĻĄā§āĻāĻž āĻĒāĻžāĻ āĻžāύ⧠āĻšāĻŦā§ āύāĻžā§ˇ āϝāĻĻāĻŋ āĻāĻāĻāĻŋ āĻāĻŋāĻĄāĻŋāĻāϤ⧠DeArrow āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āύāĻž āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠āĻāϏāϞ āĻŦāĻž āϏā§āĻĨāĻŋāϰ āĻāĻŋāϤā§āϰ āĻĻā§āĻāĻžāύ⧠āĻšāϝāĻŧ\n\nDeArrow āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāϰāĻ āĻāĻžāύāϤ⧠āĻāĻāĻžāύ⧠āĻāĻžāĻĒā§āύ</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_title">DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow YouTube āĻāĻŋāĻĄāĻŋāĻāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻāύāĻāĻŖā§āϰ āĻā§āϏ āĻĨā§āĻā§ āϤā§āϰāĻŋ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āϏāϰāĻŦāϰāĻžāĻš āĻāϰā§āĨ¤ āĻāĻ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞāĻā§āϞāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻļāĻ YouTube āĻĻā§āĻŦāĻžāϰāĻž āϏāϰāĻŦāϰāĻžāĻš āĻāϰāĻž āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞāĻā§āϞāĻŋāϰ āĻā§āϝāĻŧā§ āĻāϰāĻ āĻĒā§āϰāĻžāϏāĻā§āĻāĻŋāĻāĨ¤
|
||||
|
||||
āϝāĻĻāĻŋ āϏāĻā§āϰāĻŋāϝāĻŧ āĻāϰāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧠āĻāĻŋāĻĄāĻŋāĻ URLāĻā§āϞāĻŋ API āϏāĻžāϰā§āĻāĻžāϰ⧠āĻĒāĻžāĻ āĻžāύ⧠āĻšāĻŦā§ āĻāĻŦāĻ āĻ
āύā§āϝ āĻā§āύāĻ āĻĄā§āĻāĻž āĻĒāĻžāĻ āĻžāύ⧠āĻšāĻŦā§ āύāĻžāĨ¤ āϝāĻĻāĻŋ āĻā§āύāĻ āĻāĻŋāĻĄāĻŋāĻāϤ⧠DeArrow āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āύāĻž āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠āĻŽā§āϞ āĻŦāĻž āϏā§āĻĨāĻŋāϰ āĻā§āϝāĻžāĻĒāĻāĻžāϰ āĻĻā§āĻāĻžāύ⧠āĻšāĻŦā§
|
||||
|
||||
DeArrow āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāϰāĻ āĻāĻžāύāϤ⧠āĻāĻāĻžāύ⧠āĻā§āϝāĻžāĻĒ āĻāϰā§āύ"</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">API āĻāĻĒāϞāĻā§āϝ āύāĻž āĻĨāĻžāĻāϞ⧠āĻāĻāĻāĻŋ āĻā§āϏā§āĻ āĻĻā§āĻāĻžāύ</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">āϝāĻĻāĻŋ DeArrow āĻ
āύā§āĻĒāϏā§āĻĨāĻŋāϤ āĻĨāĻžāĻā§ āϤāĻŦā§ āĻā§āϏā§āĻ āĻŦāĻžāϰā§āϤāĻž āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšāϝāĻŧ</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">āϝāĻĻāĻŋ DeArrow āĻ
āύā§āĻĒāϏā§āĻĨāĻŋāϤ āĻĨāĻžāĻā§ āϤāĻŦā§ āĻā§āϏā§āĻ āĻŦāĻžāϰā§āϤāĻž āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§ āύāĻž</string>
|
||||
@@ -980,6 +1182,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">āϏāϤāϰā§āĻā§āĻāϰāĻŖ</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">āĻāĻĒāύāĻžāϰ āĻĻā§āĻāĻžāϰ āĻāϤāĻŋāĻšāĻžāϏ āϏāĻāϰāĻā§āώāĻŋāϤ āĻšāĻā§āĻā§ āύāĻžāĨ¤<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 +1192,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">āĻĄāĻŋāĻāĻžāĻāϏ āĻĄāĻžāĻāĻŽā§āύāĻļāύ āϏā§āĻĒā§āĻĢ āĻāϰā§āύ</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">āĻĄāĻŋāĻāĻžāĻāϏ āĻĄāĻžāĻāĻŽā§āύāĻļāύ āϏā§āĻĒā§āĻĢ āĻšā§ā§āĻā§\n\nāĻāĻŋāĻĄāĻŋāĻāϰ āĻāύā§āύāϤ āĻā§āĻŖāĻŽāĻžāύ āĻāύāϞāĻ āĻšā§ā§āĻā§ āĻāĻŋāύā§āϤ⧠āĻāĻĒāύāĻŋ āĻāĻŋāĻĄāĻŋāĻ āĻāϞāĻžāϰ āĻā§āώā§āϤā§āϰ⧠āĻāĻāĻā§ āĻāϞāĻž, āĻāĻžāϰāĻžāĻĒ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āϞāĻžāĻāĻĢ āĻāĻŦāĻ āĻ
āĻāĻžāύāĻž āĻĒāĻžāϰā§āĻļā§āĻŦ-āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋā§āĻžāϰ āϏāĻŽā§āĻŽā§āĻāĻŋāύ āĻšāϤ⧠āĻĒāĻžāϰā§āύ</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">āĻĄāĻŋāĻāĻžāĻāϏ āĻĄāĻžāĻāĻŽā§āύāĻļāύ āϏā§āĻĒā§āĻĢ āĻšā§āύāĻŋ\n\nāĻāĻāĻŋ āϏāĻā§āϰāĻŋā§ āĻāϰāĻžāϰ āĻĢāϞ⧠āĻāύā§āύāϤ āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻŖāĻŽāĻžāύ āĻāύāϞāĻ āĻšāĻŦā§</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">"āĻĄāĻŋāĻāĻžāĻāϏā§āϰ āĻŽāĻžāϤā§āϰāĻž āĻā§āϝāĻŧāĻž
|
||||
|
||||
āĻāĻā§āĻ āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻŖāĻŽāĻžāύāĻā§āϞāĻŋ āĻāύāϞāĻ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠āϤāĻŦā§ āĻāĻĒāύāĻŋ āĻāĻŋāĻĄāĻŋāĻ āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ āĻšā§āĻāĻāĻ āĻāĻžāĻāϝāĻŧāĻž, āĻāĻžāϰāĻžāĻĒ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āϞāĻžāĻāĻĢ āĻāĻŦāĻ āĻ
āĻāĻžāύāĻž āĻĒāĻžāϰā§āĻļā§āĻŦ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻ
āύā§āĻāĻŦ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ"</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">"āĻĄāĻŋāĻāĻžāĻāϏā§āϰ āĻŽāĻžāϤā§āϰāĻž āĻā§āϝāĻŧāĻž āύāϝāĻŧ
|
||||
|
||||
āĻāĻāĻŋ āϏāĻā§āϰāĻŋāϝāĻŧ āĻāϰāĻž āĻāĻā§āĻ āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻŖāĻŽāĻžāύāĻā§āϞāĻŋ āĻāύāϞāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§"</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">āĻāĻāĻŋ āϏāĻā§āϰāĻŋā§ āĻāϰāĻžāϰ āĻĢāϞ⧠āĻāĻĒāύāĻŋ āĻāĻŋāĻĄāĻŋāĻ āĻāϞāĻžāϰ āĻā§āώā§āϤā§āϰ⧠āĻāĻāĻā§ āĻāϞāĻž, āĻāĻžāϰāĻžāĻĒ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āϞāĻžāĻāĻĢ āĻāĻŦāĻ āĻ
āĻāĻžāύāĻž āĻĒāĻžāϰā§āĻļā§āĻŦ-āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋā§āĻžāϰ āϏāĻŽā§āĻŽā§āĻāĻŋāύ āĻšāϤ⧠āĻĒāĻžāϰā§āύāĨ¤</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1017,6 +1224,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_on">āĻāĻŽā§āĻĒāύ āύāĻŋāώā§āĻā§āϰāĻŋā§ āĻāϰāĻž āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">āĻāĻŽā§āĻĒāύ āϏāĻā§āϰāĻŋā§ āĻāϰāĻž āĻšā§ā§āĻā§</string>
|
||||
</patch>
|
||||
<patch id="video.audio.forceOriginalAudioPatch">
|
||||
<string name="revanced_force_original_audio_title">āĻŽā§āϞ āĻ
āĻĄāĻŋāĻ āĻŦāϞāĻĒā§āϰā§āĻŦāĻ āĻāĻžāϞ⧠āĻāϰā§āύ</string>
|
||||
<string name="revanced_force_original_audio_summary_on">āĻŽā§āϞ āĻ
āĻĄāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻā§</string>
|
||||
<string name="revanced_force_original_audio_summary_off">āĻĄāĻŋāĻĢāϞā§āĻ āĻ
āĻĄāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻā§</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">āϏā§āĻŦāϤāϏā§āĻĢā§āϰā§āϤāĻāĻžāĻŦā§</string>
|
||||
@@ -1035,9 +1247,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">āĻŦā§āϤāĻžāĻŽ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšā§āύāĻŋ</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">āĻāĻžāϏā§āĻāĻŽ āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ āĻāϤāĻŋ āĻŽā§āύā§</string>
|
||||
<string name="revanced_custom_speed_menu_summary_on">āĻāĻžāϏā§āĻāĻŽ āϏā§āĻĒāĻŋāĻĄ āĻŽā§āύ⧠āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_custom_speed_menu_summary_off">āĻāĻžāϏā§āĻāĻŽ āϏā§āĻĒāĻŋāĻĄ āĻŽā§āύ⧠āĻĻā§āĻāĻžāύ⧠āĻšāĻā§āĻā§ āύāĻž</string>
|
||||
<string name="revanced_custom_playback_speeds_title">āύāĻŋāĻāϏā§āĻŦ āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ āϏā§āĻĒāĻŋāĻĄ</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">āύāĻŋāĻāϏā§āĻŦ āϏā§āĻĒāĻŋāĻĄ āĻ
āĻŦāĻļā§āϝāĻ %sāĻā§āĻŖ āĻĨā§āĻā§ āĻāĻŽ āĻšāϤ⧠āĻšāĻŦā§āĨ¤ āĻŽā§āϞ āĻā§āϝāĻžāϞ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāĻā§āĻā§āĨ¤</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">āĻā§āϞ āύāĻŋāĻāϏā§āĻŦ āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ āϏā§āĻĒāĻŋāĻĄāĨ¤ āĻŽā§āϞ āĻā§āϝāĻžāϞ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāĻā§āĻā§āĨ¤</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">āĻāĻžāϏā§āĻāĻŽ āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ āĻāϤāĻŋ āϝā§āĻ āĻāϰā§āύ āĻ
āĻĨāĻŦāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§āύ</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">āĻāĻžāϏā§āĻāĻŽ āĻāϤāĻŋ %s āĻāϰ āĻā§āϝāĻŧā§ āĻāĻŽ āĻšāϤ⧠āĻšāĻŦā§</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">āĻ
āĻŦā§āϧ āĻāĻžāϏā§āĻāĻŽ āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ āĻāϤāĻŋ</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">āϏā§āĻŦāϤāϏā§āĻĢā§āϰā§āϤāĻāĻžāĻŦā§</string>
|
||||
</patch>
|
||||
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
|
||||
@@ -1062,12 +1278,77 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_video_streams_screen_summary">āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ āϏāĻŽāϏā§āϝāĻž āĻĒā§āϰāϤāĻŋāϰā§āϧ āĻāϰāϤ⧠āĻā§āϞāĻžā§ā§āύā§āĻ āĻāĻŋāĻĄāĻŋāĻ āϏā§āĻā§āϰāĻŋāĻŽ āϏā§āĻĒā§āĻĢ āĻāϰā§āύ</string>
|
||||
<string name="revanced_spoof_video_streams_title">āĻāĻŋāĻĄāĻŋāĻ āϏā§āĻā§āϰāĻŋāĻŽāĻŋāĻ āϏā§āĻĒā§āĻĢ āĻāϰā§āύ</string>
|
||||
<string name="revanced_spoof_video_streams_summary_on">āĻāĻŋāĻĄāĻŋāĻ āϏā§āĻā§āϰāĻŋāĻŽ āϏā§āĻĒā§āĻĢ āĻāϰāĻž āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">āĻāĻŋāĻĄāĻŋāĻ āϏā§āĻā§āϰāĻŋāĻŽ āϏā§āĻĒā§āĻĢ āĻāϰāĻž āĻšā§āύāĻŋ\n\nāĻāĻŋāĻĄāĻŋāĻ āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ āĻ āĻŋāĻāĻŽāϤ⧠āĻāĻžāĻ āύāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§</string>
|
||||
<string name="revanced_spoof_video_streams_summary_off">"āĻāĻŋāĻĄāĻŋāĻ āϏā§āĻā§āϰāĻŋāĻŽ āĻā§āϝāĻŧāĻž āύāϝāĻŧ
|
||||
|
||||
āĻāĻŋāĻĄāĻŋāĻ āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ āĻāĻžāĻ āύāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">āĻāĻ āϏā§āĻāĻŋāĻāĻāĻŋ āĻŦāύā§āϧ āĻāϰāĻžāϰ āĻĢāϞ⧠āĻāĻŋāĻĄāĻŋāĻ āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ āϤā§āϰā§āĻāĻŋ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤</string>
|
||||
<string name="revanced_spoof_video_streams_client_title">āĻĄāĻŋāĻĢāϞā§āĻ āĻā§āϞāĻžā§ā§āύā§āĻ</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">AVC (H.264) āĻĢā§āϰā§āϏ āĻāϰā§āύ</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻĄā§āĻ AVC (H.264) āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻĄā§āĻ VP9 āĻŦāĻž AV1 āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻĄā§āĻ AVC (H.264) āϤ⧠āĻŦāĻžāϧā§āϝ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">āĻāĻŋāĻĄāĻŋāĻ āĻā§āĻĄā§āĻ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧāĻāĻžāĻŦā§ āύāĻŋāϰā§āϧāĻžāϰāĻŋāϤ āĻšāĻā§āĻā§</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"āĻāĻāĻŋ āϏāĻā§āϰāĻŋāϝāĻŧ āĻāϰāĻž āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āϞāĻžāĻāĻĢ āĻāύā§āύāϤ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ āĻšā§āĻāĻāĻ āĻāĻžāĻāϝāĻŧāĻž āĻ āĻŋāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
|
||||
|
||||
AVC-āĻāϰ āϏāϰā§āĻŦā§āĻā§āĻ āϰā§āĻā§āϞāĻŋāĻāĻļāύ 1080p, Opus āĻ
āĻĄāĻŋāĻ āĻā§āĻĄā§āĻ āĻāĻĒāϞāĻŦā§āϧ āύāϝāĻŧ āĻāĻŦāĻ āĻāĻŋāĻĄāĻŋāĻ āĻĒā§āϞā§āĻŦā§āϝāĻžāĻ VP9 āĻŦāĻž AV1 āĻāϰ āϤā§āϞāύāĻžāϝāĻŧ āĻāϰāĻ āĻāύā§āĻāĻžāϰāύā§āĻ āĻĄā§āĻāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āĨ¤"</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_title">iOS āϏā§āĻĒā§āĻĢāĻŋāĻ āĻāϰ āĻĒāĻžāϰā§āĻļā§āĻŦ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž</string>
|
||||
<string name="revanced_spoof_video_streams_about_ios_summary">"âĸ āĻŦā§āϏāϰāĻāĻžāϰāĻŋ āĻļāĻŋāĻļā§ āĻāĻŋāĻĄāĻŋāĻ āĻāϞāϤ⧠āύāĻžāĻ āĻĒāĻžāϰā§<br>âĸ āĻāĻŋāĻĄāĻŋāĻāĻā§āϞāĻŋ 1 āϏā§āĻā§āύā§āĻĄ āĻāĻā§ āĻļā§āώ āĻšā§"</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_title">Android VR āϏā§āĻĒā§āĻĢāĻŋāĻ āĻāϰ āĻĒāĻžāϰā§āĻļā§āĻŦ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž</string>
|
||||
<string name="revanced_spoof_video_streams_about_android_vr_summary">"âĸ āĻļāĻŋāĻļā§ āĻāĻŋāĻĄāĻŋāĻāĻā§āϞāĻŋ āĻĒā§āϞ⧠āύāĻžāĻ āĻšāϤ⧠āĻĒāĻžāϰā§
|
||||
âĸ āϞāĻžāĻāĻāϏā§āĻā§āϰāĻŋāĻŽ āĻļā§āϰ⧠āĻĨā§āĻā§ āĻļā§āϰ⧠āĻšāϝāĻŧ
|
||||
âĸ āĻāĻŋāĻĄāĻŋāĻ 1 āϏā§āĻā§āύā§āĻĄ āĻāĻā§ āĻļā§āώ āĻšāϝāĻŧ"</string>
|
||||
<string name="revanced_spoof_video_streams_language_title">āĻĄāĻŋāĻĢāϞā§āĻ āĻ
āĻĄāĻŋāĻ āϏā§āĻā§āϰāĻŋāĻŽ āĻāĻžāώāĻž</string>
|
||||
<string name="revanced_spoof_video_streams_language_DEFAULT">āĻ
ā§āϝāĻžāĻĒ āĻāĻžāώāĻž</string>
|
||||
<string name="revanced_spoof_video_streams_language_AR">āĻāϰāĻŦāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_AZ">āĻāĻāĻžāϰāĻŦāĻžāĻāĻāĻžāύāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_BG">āĻŦā§āϞāĻā§āϰāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_BN">āĻŦāĻžāĻāϞāĻž</string>
|
||||
<string name="revanced_spoof_video_streams_language_CA">āĻāĻžāϤāĻžāϞāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_CS">āĻā§āĻ</string>
|
||||
<string name="revanced_spoof_video_streams_language_DA">āĻĄā§āύāĻŋāĻļ</string>
|
||||
<string name="revanced_spoof_video_streams_language_DE">āĻāĻžāϰā§āĻŽāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_EL">āĻā§āϰā§āĻ</string>
|
||||
<string name="revanced_spoof_video_streams_language_EN">āĻāĻāϰā§āĻāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_ES">āϏā§āĻĒā§āϝāĻžāύāĻŋāĻļ</string>
|
||||
<string name="revanced_spoof_video_streams_language_ET">āĻāϏā§āϤā§āύāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_FA">āĻĢāĻžāϰā§āϏāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_FI">āĻĢāĻŋāύāϞā§āϝāĻžāύā§āĻĄ</string>
|
||||
<string name="revanced_spoof_video_streams_language_FR">āĻĢāϰāĻžāϏāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_GU">āĻā§āĻāϰāĻžāĻāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_HI">āĻšāĻŋāύā§āĻĻāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_HR">āĻā§āϰā§āϝāĻŧā§āĻļāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_HU">āĻšāĻžāĻā§āĻā§āϰāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_ID">āĻāύā§āĻĻā§āύā§āĻļāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_IT">āĻāϤāĻžāϞā§āϝāĻŧ</string>
|
||||
<string name="revanced_spoof_video_streams_language_JA">āĻāĻžāĻĒāĻžāύāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_KK">āĻāĻžāĻāĻžāĻ</string>
|
||||
<string name="revanced_spoof_video_streams_language_KO">āĻā§āϰāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_LT">āϞāĻŋāĻĨā§āϝāĻŧāĻžāύāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_LV">āϞāĻžāϤāĻāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_MK">āĻŽā§āϝāĻžāϏā§āĻĄā§āύāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_MN">āĻŽāĻā§āĻā§āϞāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_MR">āĻŽāĻžāϰāĻžāĻ āĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_MS">āĻŽāĻžāϞāϝāĻŧ</string>
|
||||
<string name="revanced_spoof_video_streams_language_MY">āĻŦāĻžāϰā§āĻŽāĻŋāĻ</string>
|
||||
<string name="revanced_spoof_video_streams_language_NL">āĻĄāĻžāĻ</string>
|
||||
<string name="revanced_spoof_video_streams_language_OR">āĻāĻĄāĻŧāĻŋāϝāĻŧāĻž</string>
|
||||
<string name="revanced_spoof_video_streams_language_PA">āĻĒāĻā§āĻāĻžāĻŦāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_PL">āĻĒā§āϞāĻŋāĻļ</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_BR">āĻĒāϰā§āϤā§āĻāĻŋāĻ (āĻŦā§āϰāĻžāĻāĻŋāϞ)</string>
|
||||
<string name="revanced_spoof_video_streams_language_PT_PT">āĻĒāϰā§āϤā§āĻāĻŋāĻ (āĻĒāϰā§āϤā§āĻāĻžāϞ)</string>
|
||||
<string name="revanced_spoof_video_streams_language_RO">āϰā§āĻŽāĻžāύā§āϝāĻŧ</string>
|
||||
<string name="revanced_spoof_video_streams_language_RU">āϰāĻžāĻļāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SK">āϏā§āϞā§āĻāĻžāĻ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SL">āϏā§āϞā§āĻā§āύāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SR">āϏāĻžāϰā§āĻŦāĻŋāϝāĻŧāĻžāύ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SV">āϏā§āĻāĻĄāĻŋāĻļ</string>
|
||||
<string name="revanced_spoof_video_streams_language_SW">āϏā§āϝāĻŧāĻžāĻšāĻŋāϞāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_TA">āϤāĻžāĻŽāĻŋāϞ</string>
|
||||
<string name="revanced_spoof_video_streams_language_TE">āϤā§āϞā§āĻā§</string>
|
||||
<string name="revanced_spoof_video_streams_language_TH">āĻĨāĻžāĻ</string>
|
||||
<string name="revanced_spoof_video_streams_language_TR">āϤā§āϰā§āĻāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_UK">āĻāĻāĻā§āϰā§āύā§āϝāĻŧ</string>
|
||||
<string name="revanced_spoof_video_streams_language_UR">āĻāϰā§āĻĻā§</string>
|
||||
<string name="revanced_spoof_video_streams_language_VI">āĻāĻŋāϝāĻŧā§āϤāύāĻžāĻŽāĻŋ</string>
|
||||
<string name="revanced_spoof_video_streams_language_ZH">āĻā§āύāĻž</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="twitch">
|
||||
@@ -1077,8 +1358,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_block_audio_ads_summary_off">āĻ
āĻĄāĻŋāĻ āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻāύāĻŦāĻŦā§āϞāĻ āĻāϰāĻž āĻšā§ā§āĻā§</string>
|
||||
</patch>
|
||||
<patch id="ad.embedded.embeddedAdsPatch">
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s āĻāĻĒāϞāĻā§āϝ āύā§āĨ¤ āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻĻā§āĻāĻžāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϏā§āĻāĻŋāĻ āĻĨā§āĻā§ āĻ
āύā§āϝ āĻā§āύ āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻāĻāĻāĻžāύ⧠āϏā§āĻŦāĻžā§ āϏā§āĻāĻ āĻāϰā§āύāĨ¤</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s āϏāĻžāϰā§āĻāĻžāϰ āĻāĻāĻāĻŋ āϤā§āϰā§āĻāĻŋ āĻĻā§āĻāĻžāĻā§āĻā§āĨ¤ āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻĻā§āĻāĻžāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϏā§āĻāĻŋāĻ āĻĨā§āĻā§ āĻ
āύā§āϝ āĻā§āύ āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻāĻāĻāĻžāύ⧠āϏā§āĻŦāĻžā§ āϏā§āĻāĻ āĻāϰā§āύāĨ¤</string>
|
||||
<string name="revanced_embedded_ads_service_unavailable">%s āĻāĻĒāϞāĻŦā§āϧ āύāϝāĻŧ, āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻĻā§āĻāĻžāύ⧠āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϏā§āĻāĻŋāĻāϏ⧠āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻŦā§āϞāĻ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§āύāĨ¤</string>
|
||||
<string name="revanced_embedded_ads_service_failed">%s āĻāĻāĻāĻŋ āϤā§āϰā§āĻāĻŋ āĻĢāĻŋāϰāĻŋāϝāĻŧā§āĻā§, āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻĻā§āĻāĻžāύ⧠āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϏā§āĻāĻŋāĻāϏ⧠āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻŦā§āϞāĻ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§āύāĨ¤</string>
|
||||
<string name="revanced_block_embedded_ads_title">āĻāĻŽāĻŦā§āĻĄ āĻāϰāĻž āĻāĻŋāĻĄāĻŋāĻ āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻāĻāĻāĻžāύ</string>
|
||||
<string name="revanced_block_embedded_ads_entry_1">āύāĻŋāώā§āĻā§āϰāĻŋā§ āĻšā§ā§āĻā§</string>
|
||||
<string name="revanced_block_embedded_ads_entry_2">Luminous āĻĒā§āϰāĻā§āϏāĻŋ</string>
|
||||
@@ -1110,6 +1391,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings">ReVanced āϏā§āĻāĻŋāĻ</string>
|
||||
<string name="revanced_about_title">āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ</string>
|
||||
<string name="revanced_about_summary">ReVanced āϏāĻŽā§āĻĒāϰā§āĻā§</string>
|
||||
<string name="revanced_ads_screen_title">āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ</string>
|
||||
<string name="revanced_ads_screen_summary">āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻŦāύā§āϧ āĻāϰāĻžāϰ āϏā§āĻāĻŋāĻ</string>
|
||||
<string name="revanced_chat_screen_title">āĻāϞāĻžāĻĒāĻāĻžāϰāĻŋ</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user