Compare commits

...

195 Commits

Author SHA1 Message Date
Ajay
88d1cc1650 bump version 2023-06-22 14:00:21 -04:00
Ajay
dd7a673637 Don't show dearrow popup for new users 2023-06-22 14:00:08 -04:00
Ajay
35ac452a30 bump version 2023-06-21 23:11:02 -04:00
Ajay
de654e0016 update translations 2023-06-21 23:08:54 -04:00
Ajay
b4adee720f Add notice about dearrow, make dearrow links not appear if dearrow installed 2023-06-21 23:07:09 -04:00
Ajay
d4f668559c Add link in options to dearrow 2023-06-21 19:55:17 -04:00
Ajay
6b2b26faf5 update locales 2023-06-16 13:23:22 -04:00
Ajay
52135e7478 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2023-06-16 13:22:46 -04:00
Ajay
10a0537b78 Fix video mutation listener refresh being called too many times 2023-06-16 13:22:43 -04:00
Ajay Ramachandran
b383acc902 Merge pull request #1705 from rakleed/border-radius
Add border radius like other YouTube elements
2023-06-16 12:26:41 -04:00
github-actions[bot]
f5706d9fe3 Update Invidious List (#1776)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-15 01:46:41 -04:00
Ajay
fea33945c7 bump maze utils again 2023-05-30 16:02:34 -04:00
Ajay
22826e3b36 Add some garbage collection to old thumbnail elements 2023-05-30 15:58:30 -04:00
Ajay
c7dad09555 Add warning when enabling filler 2023-05-29 14:39:44 -04:00
Ajay
198ae9c41f bump version 2023-05-28 16:12:29 -04:00
Ajay
1b2be35bd6 Check multiple times if preview bar failed to be added 2023-05-28 16:11:49 -04:00
Ajay
ff3d8ff2d6 Add waiting for when preview bar detects incorrect number of chapters 2023-05-28 15:51:44 -04:00
Ajay
932ed34947 remove duplicates from translations 2023-05-28 15:04:12 -04:00
Ajay
ed59101fc7 Upload to release incrementally 2023-05-28 14:55:47 -04:00
Ajay
a4e8cdd0f6 Fix release worflow 2023-05-28 14:48:43 -04:00
Ajay
40604d7604 bump version 2023-05-28 14:42:09 -04:00
Ajay
d5d766b429 Another video element change check when video id changes 2023-05-24 23:50:12 -04:00
Ajay
a83e83c1b1 Potential fix for preview bar disappearing sometimes 2023-05-24 23:43:41 -04:00
Ajay
6585a4e325 Fix large times when locale uses dots for chapter names
Fixes #1757
2023-05-24 19:06:38 -04:00
Ajay
20ab0768df Fix chapters not saving after clicking suggestion
They still submitted properly, it only mattered if you closed the submission box
2023-05-21 19:55:58 -04:00
Ajay
b07381e5d0 Remove extra log 2023-05-12 23:55:33 -04:00
Ajay
4a1829839f Slightly improve firefox skipping 2023-05-12 23:53:37 -04:00
Ajay
93d864e927 Don't use unmute skip trick on chromium if there are mutes happening 2023-05-11 20:20:05 -04:00
Ajay
232b1816fe Fix mute segment right after skip being delayed 2023-05-11 20:17:57 -04:00
Ajay
54437ed0fd Add warning if CPU Tamer extension is detected 2023-05-10 19:38:03 -04:00
Ajay
282a4670ce Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2023-05-10 15:52:05 -04:00
Ajay
5973b801b9 Fix popup buttons centering 2023-05-10 15:52:03 -04:00
Ajay Ramachandran
628595bf5a Merge pull request #1749 from mini-bomba/previewbar-minwidth
Set min width of previewbar segments to 1px
2023-05-10 15:13:03 -04:00
Ajay
86498eb399 Add submodule build instructions to readme 2023-05-10 15:09:27 -04:00
Ajay
92fabdf37a Move more funcs to shared lib 2023-05-09 22:12:15 -04:00
Ajay
33d098d78a Fix popup padding css 2023-05-09 20:47:09 -04:00
Ajay
e094f95602 Move some options page funcs to shared lib 2023-05-09 16:49:54 -04:00
Ajay
b35bcae213 Fix copying bad files when compiling 2023-05-09 16:06:56 -04:00
Ajay
46ae92c321 Upload source before doing npm ci 2023-05-09 13:32:47 -04:00
Ajay
cc45e764cf Upload source code with modules to github 2023-05-09 13:30:31 -04:00
Ajay
f1026d403f Make workflows recursively checkout submodules 2023-05-09 13:24:32 -04:00
Ajay
c60c534a9e Fix submodule defintion file missing 2023-05-09 13:21:40 -04:00
Ajay
0e0555c32c Delete original locale files from repo 2023-05-09 13:20:22 -04:00
Ajay
928f1ed0e8 Add translations as git submodule 2023-05-09 13:18:36 -04:00
Ajay
14da4b5fcc Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2023-05-08 20:16:50 -04:00
Ajay
9d6e23d171 Fix margin issue on category pill tooltip 2023-05-08 20:16:44 -04:00
Ajay Ramachandran
68a6286af6 Merge pull request #1715 from Blueberryy/master
Add notice time to translation file
2023-05-08 17:10:55 -04:00
Ajay Ramachandran
7960fde155 Add description to translation 2023-05-08 17:08:02 -04:00
Ajay Ramachandran
afe7271419 New Crowdin updates (#1733) 2023-05-08 17:06:22 -04:00
Ajay
c6c3bd3a3d bump version 2023-05-08 17:03:49 -04:00
Ajay
f2482ee973 Add auto-config import to clickbait extension, move more funcs to shared lib
Also fix a isSafari call
2023-05-08 17:02:49 -04:00
Ajay
71dd4a97bf Fix SponsorBlock on latest YouTube layout 2023-05-07 23:56:55 -04:00
mini-bomba
f771a5a7ec Set min width of previewbar segments to 1px
This fixes short segments on long videos not appearing at all in small embeds
2023-05-07 14:25:55 +02:00
Ajay Ramachandran
d8ca29a18b Update funding 2023-05-06 23:35:45 -04:00
Ajay
4d7018a017 Fix safari check not running function
Should make Firefox more precise
2023-05-06 20:05:43 -04:00
Ajay
ca24e82a6d Fix skip looping
Fixes #1747
2023-05-06 20:04:17 -04:00
Ajay Ramachandran
186fa7af61 Merge pull request #1739 from mini-bomba/invidious-duration-without-skips
Show time with skips removed on invidious
2023-05-03 11:52:37 -04:00
mini-bomba
75b406cb5b Show time with skips removed on invidious 2023-05-02 21:42:09 +02:00
Ajay
d20b46f3ef bump version 2023-04-30 20:32:59 -04:00
Ajay
b2f3605571 Fix submit button in fullscreen and theater mode 2023-04-30 18:13:38 -04:00
Ajay
da1be6c87b bump version 2023-04-30 16:49:45 -04:00
Ajay
62a60daac7 Fix preview bar not being created on video element change if not created previously 2023-04-30 14:54:50 -04:00
Ajay
45d45b0068 Fix preview bar not appearing on all videos 2023-04-30 14:35:37 -04:00
Blueberryy
4cae6e8f41 Real fix by mini-bomba
@mini-bomba

Co-Authored-By: mini-bomba <55105495+mini-bomba@users.noreply.github.com>
2023-04-29 15:52:24 +05:00
Ajay
d3fa735481 Don't show harmful vote option for non chapters 2023-04-27 22:29:08 -04:00
Ajay Ramachandran
052a805a98 Merge pull request #1729 from ajayyy/dependabot/npm_and_yarn/xml2js-and-web-ext-0.5.0
Bump xml2js and web-ext
2023-04-27 15:22:06 -04:00
Ajay Ramachandran
6e8c406da9 New Crowdin updates (#1722) 2023-04-27 15:20:11 -04:00
dependabot[bot]
6e6c3819e5 Bump xml2js and web-ext
Bumps [xml2js](https://github.com/Leonidas-from-XIV/node-xml2js) to 0.5.0 and updates ancestor dependency [web-ext](https://github.com/mozilla/web-ext). These dependencies need to be updated together.


Updates `xml2js` from 0.4.23 to 0.5.0
- [Release notes](https://github.com/Leonidas-from-XIV/node-xml2js/releases)
- [Commits](https://github.com/Leonidas-from-XIV/node-xml2js/commits/0.5.0)

Updates `web-ext` from 7.5.0 to 7.6.2
- [Release notes](https://github.com/mozilla/web-ext/releases)
- [Commits](https://github.com/mozilla/web-ext/compare/7.5.0...7.6.2)

---
updated-dependencies:
- dependency-name: xml2js
  dependency-type: indirect
- dependency-name: web-ext
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-27 19:18:54 +00:00
Ajay
2b739e33e6 bump version 2023-04-27 15:18:34 -04:00
Ajay
7768447ab0 Upgrade maze-utils, move video element refreshes to lib 2023-04-27 15:18:17 -04:00
Ajay
e31efbbf81 Fix looped videos sometimes not skipping start segment
Fixes  #1723
2023-04-21 22:16:13 -04:00
Blueberryy
dc0d7d7e45 Another fix NoticeComponent.tsx 2023-04-20 18:58:11 +05:00
Blueberryy
ade4214b25 fIX messages.json 2023-04-20 18:50:23 +05:00
Blueberryy
6bc4c686ec FIX NoticeComponent.tsx 2023-04-20 18:49:22 +05:00
Ajay Ramachandran
ab7dfe80f7 Merge pull request #1721 from biot/received
Spelling fix
2023-04-19 17:35:43 -04:00
Bert Vermeulen
c5f549f937 Spelling fix 2023-04-19 19:26:45 +02:00
Ajay
a7aa4042ff Fix video labels showing all categories regardless of settings 2023-04-17 20:29:52 -04:00
Ajay
8136a53981 Fix wrapping issue on safari 2023-04-17 20:02:11 -04:00
Ajay Ramachandran
624c61f383 bump version 2023-04-17 17:58:09 -04:00
Ajay Ramachandran
bf1be68d06 New Crowdin updates (#1695) 2023-04-17 17:57:54 -04:00
Blueberryy
1b714470de add translatable s in notice 2023-04-11 23:03:29 +05:00
Blueberryy
32fd64ee25 add translatable s in notice 2023-04-11 23:03:23 +05:00
Ajay Ramachandran
e1521e9837 Merge pull request #1710 from mini-bomba/controls-skip-inline-players
Don't attach controls to inline preview players
2023-03-31 13:07:12 -04:00
Ajay Ramachandran
7b5303b1d8 Merge pull request #1711 from mini-bomba/darkreader-proofing-the-fvlabels
Reset fvlabel color definitions when segment == null
2023-03-31 13:06:37 -04:00
mini-bomba
78f6c66547 Reset fvlabel color definitions when segment == null
Without this, we would try to use the color for an 'undefined' category on the first render pass of the element.
It was then immediately re-rendered with a segment set, but DR missed the update, which caused it to stick to that 'undefined' category and the label became transparent.
2023-03-25 13:19:47 +01:00
Ajay
c2252af575 Move more thumbnail logic to lib 2023-03-24 19:07:26 -04:00
mini-bomba
1ef6c1977f Don't attach controls to inline preview players
Co-authored-by: Ajay <dev@ajay.app>
2023-03-24 23:59:59 +01:00
Ajay Ramachandran
e1b30204ce Merge pull request #1709 from mini-bomba/previewbar-left-right
Define left + right on previewbar segments instead of left + width
2023-03-24 18:34:44 -04:00
mini-bomba
0001d28f14 Define left + right on previewbar segments instead of left + width 2023-03-24 23:21:42 +01:00
Ajay Ramachandran
3dcc4240dc Merge pull request #1708 from mchangrh/windows-webpack
fix paths for windows dev
2023-03-24 17:50:24 -04:00
Michael C
4db3343029 fix paths for windows dev 2023-03-24 17:40:29 -04:00
Ajay Ramachandran
5711e70dbb Merge pull request #1707 from mini-bomba/fix-videoid-mismatch-error
Fix the incorrectVideoCheck() error showing the same videoID as recorded & actual
2023-03-24 15:51:47 -04:00
Ajay
6d7953a1ca Fix potentially leaking set interval 2023-03-24 15:51:36 -04:00
mini-bomba
356ce5a6f3 Fix the incorrectVideoCheck() error showing the same videoID as recorded & actual 2023-03-24 19:18:00 +01:00
Ajay Ramachandran
c1a61b9795 Merge pull request #1704 from mini-bomba/darkreader-proofing-the-dynamic-css
Darkreader-proofing the dynamic CSS variables
2023-03-22 00:11:22 -04:00
Pavel
992e727d93 Adds border radius like other YouTube elements 2023-03-22 03:42:42 +03:00
mini-bomba
e159989f17 Generate darkreader variables with our category color variables
This ensures the timeline, fv labels and thumbnail labels don't go transparent if darkreader forgets to set it's variable overrides.
2023-03-21 20:38:20 +01:00
Ajay
f6a42a7908 Fix manual skips after autoskips when inside a chapter 2023-03-20 23:10:13 -04:00
Ajay
3ddfc2f0dd reformat webpack document script definition 2023-03-20 14:14:28 -04:00
Ajay
4cf827b48a Remove exclusive_accessCategoryAdded migration 2023-03-18 21:31:27 -04:00
Ajay
f00b3abbe4 Enable chapter by default 2023-03-18 21:30:33 -04:00
Ajay
2f68a66f13 Remove chapters payment checks 2023-03-18 21:27:26 -04:00
Ajay
9831c3393f Remove chapters update message 2023-03-18 21:12:56 -04:00
Ajay
09511e8b3d Remove vendor references 2023-03-18 14:37:14 -04:00
Ajay
0e89549f6a bump version 2023-03-18 04:49:36 -04:00
Ajay Ramachandran
ef00e07647 Merge pull request #1623 from mini-bomba/labels-on-thumbnails
Show Full-Video Labels on thumbnails
2023-03-18 04:40:26 -04:00
Ajay
3a1d631e01 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into labels-on-thumbnails-merged 2023-03-18 02:08:02 -04:00
Ajay
488f5efa2f Add option to disable thumbnail icons 2023-03-18 02:05:14 -04:00
Ajay
e15e33b048 Lock version number for maze utils 2023-03-18 02:04:45 -04:00
Ajay
504f5c565b Fix oss attribution workflow 2023-03-18 00:31:07 -04:00
Ajay
94e168f803 bump version 2023-03-18 00:28:39 -04:00
Ajay
43e07fe725 Fix Invidious support on Firefox 2023-03-18 00:28:26 -04:00
Ajay
2374f4d31b Fix invidious support for thumbnail labels 2023-03-17 23:41:59 -04:00
Ajay
52f58b8ea4 Don't trigger hover autoplay from hovering over thumbnail label 2023-03-17 22:57:44 -04:00
Ajay
18f860c6a2 Increase opacity on hover 2023-03-17 22:11:13 -04:00
Ajay
5d610a342f Inject document script using raw HTML to be fast enough to still be able to hijack listener when visiting YouTube channel page directly 2023-03-17 21:10:26 -04:00
Ajay
758f0b7526 Show Full-Video Labels on thumbnails
Co-authored-by: mini-bomba <mini-bomba@users.noreply.github.com>
2023-03-10 03:49:01 -05:00
Ajay Ramachandran
3ace3b9650 Merge pull request #1674 from ajayyy/dependabot/npm_and_yarn/cacheable-request-and-got-10.2.7
Bump cacheable-request and got
2023-03-07 22:46:42 -05:00
Ajay Ramachandran
037d468c30 Merge pull request #1664 from ajayyy/dependabot/npm_and_yarn/http-cache-semantics-4.1.1
Bump http-cache-semantics from 4.1.0 to 4.1.1
2023-03-07 22:46:35 -05:00
Ajay Ramachandran
bf13c12443 Merge pull request #1661 from mchangrh/dependency-upgrade
Dependency upgrade
2023-03-07 22:45:10 -05:00
Michael C
a1f3892bd1 update dependencies 2023-03-07 22:11:28 -05:00
Ajay Ramachandran
9550a66291 Merge pull request #1691 from mchangrh/prettify-ci
update CI to prettify oss-attribution
2023-03-07 22:04:36 -05:00
Michael C
a024352b15 update GHA 2023-03-07 22:00:26 -05:00
Michael C
ef222ce229 upgrade dependencies
- remove speed-measure-webpack-plugin since it was there only for POC
2023-03-07 22:00:26 -05:00
Michael C
b310152f7f update CI to prettify oss-attribution
- also fix TS warnings in invidiousCI.ts
2023-03-07 21:55:48 -05:00
Ajay
afe8d2a20c bump version 2023-03-07 21:31:04 -05:00
github-actions[bot]
bc038c3eb3 Update OSS Attribution (#1678)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-07 21:30:30 -05:00
Ajay Ramachandran
729c816f6e Update translations (#1690) 2023-03-07 21:29:59 -05:00
github-actions[bot]
d6541945ef Update Invidious List (#1686)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-07 21:27:35 -05:00
Ajay
369d241874 bump maze utils 2023-03-07 21:27:13 -05:00
Ajay
66f3d34942 Fix chapter imports when not in focus 2023-03-03 19:47:08 -05:00
Ajay
419f0e0907 Fix duplicate code 2023-02-28 00:14:37 -05:00
Ajay
c0954b2819 Add new skip workaround for Firefox
Wait until next animation frame before starting the skipping timer
2023-02-28 00:10:54 -05:00
Ajay
290c910a1b rename submission button to "Open Submission Menu" 2023-02-26 22:12:05 -05:00
Ajay
1ffe42771f Fix unhiding one segment unhiding all 2023-02-26 20:15:33 -05:00
Ajay
b25a0a4db1 Lower case and trim invidious instances 2023-02-24 14:21:17 -05:00
Ajay
21f1e52571 Only update invidious instances if there are more, and don't remove old ones 2023-02-24 14:19:27 -05:00
Ajay
11f6fc9a31 Don't reset custom invidious instances on safari 2023-02-24 14:17:02 -05:00
Ajay
4af318403a Update channel id regex 2023-02-22 00:28:46 -05:00
Ajay
c14b33283d Switch headless mode to new due to chrome update
https://bugs.chromium.org/p/chromium/issues/detail?id=706008#c42
2023-02-22 00:22:20 -05:00
Ajay
069b1c1681 Fix odd skipping behavior sometimes with auto skip on music videos
Fix #1682
2023-02-22 00:16:51 -05:00
Ajay
dfbe036119 Fix skipping not working 2023-02-22 00:11:56 -05:00
Ajay
00c09052dc update chrome driver 2023-02-22 00:06:35 -05:00
Ajay
4095ca8642 Fix missing userid generation call swaps 2023-02-18 22:44:34 -05:00
Ajay
4ca6a331f1 Move generate userID to shared lib 2023-02-18 02:54:42 -05:00
Ajay
1d05c2b3df Convert dots to colons when importing existing chapters 2023-02-14 18:38:47 -05:00
Ajay
1d0ac86e5a Move get hash to shared lib 2023-02-14 01:42:25 -05:00
Ajay
12c63b4ff9 Fix setup tab updates missing 2023-02-14 01:24:25 -05:00
Ajay
8c994f362d Move requesting logic to shared lib 2023-02-14 01:20:46 -05:00
Ajay
5ecb809c73 Remove unused interface 2023-02-13 13:14:23 -05:00
github-actions[bot]
6ee58167d8 Update OSS Attribution (#1676)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-13 03:26:09 -05:00
Ajay
c4619aee51 Fix category pill disappearing on mobile youtube 2023-02-13 03:22:55 -05:00
Ajay
d3117d603f Fix mobile and invidious 2023-02-13 02:43:43 -05:00
Ajay
5859c33ce8 Move video handing and config to shared library 2023-02-13 02:31:25 -05:00
dependabot[bot]
241c17eb7e Bump cacheable-request and got
Bumps [cacheable-request](https://github.com/jaredwray/cacheable-request) and [got](https://github.com/sindresorhus/got). These dependencies needed to be updated together.

Updates `cacheable-request` from 7.0.2 to 10.2.7
- [Release notes](https://github.com/jaredwray/cacheable-request/releases)
- [Commits](https://github.com/jaredwray/cacheable-request/commits)

Updates `got` from 12.1.0 to 12.5.3
- [Release notes](https://github.com/sindresorhus/got/releases)
- [Commits](https://github.com/sindresorhus/got/compare/v12.1.0...v12.5.3)

---
updated-dependencies:
- dependency-name: cacheable-request
  dependency-type: indirect
- dependency-name: got
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-12 14:27:25 +00:00
Ajay Ramachandran
f4d80d8843 Merge pull request #1671 from ajayyy/ci/oss_attribution
Update OSS Attribution
2023-02-07 17:51:34 -05:00
Ajay
0cdfd68239 bump version 2023-02-07 17:42:38 -05:00
Ajay
bbb234e498 Make invidious instances work on safari 2023-02-07 17:42:22 -05:00
Ajay Ramachandran
3716c8aa80 chrome limitation gone 2023-02-07 02:54:06 -05:00
github-actions[bot]
57fe4d7d65 Update OSS Attribution 2023-02-07 02:23:30 +00:00
Ajay
92e156834b Use pollyfill for invidious registration
Fix #798
2023-02-06 21:22:34 -05:00
dependabot[bot]
4e6246a710 Bump http-cache-semantics from 4.1.0 to 4.1.1
Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kornelski/http-cache-semantics/releases)
- [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-04 06:11:03 +00:00
Ajay
b2e6e4f076 Fix tests 2023-02-01 19:55:01 -05:00
Ajay
6348bdccde bump version 2023-02-01 19:51:50 -05:00
Ajay
c3213eb040 Add invidious instances by default for safari
https://github.com/ajayyy/SponsorBlock/issues/798
2023-02-01 19:48:24 -05:00
Ajay
78a006544a Fix icon not square 2023-01-31 01:07:00 -05:00
Ajay
3ab2361f45 bump version 2023-01-31 00:58:40 -05:00
Ajay
6068276644 Fix icon on firefox being wrong 2023-01-31 00:58:31 -05:00
Ajay
e3bedbf5f2 Fix chapter importing and lock fetching after 404 2023-01-29 17:53:37 -05:00
Ajay Ramachandran
c9fc22e51e Merge pull request #1654 from mchangrh/fix-large-img
load shared.css on third party sites
2023-01-28 16:42:52 -05:00
Michael C
146c1fc889 load shared.css on third party sites 2023-01-26 03:07:43 -05:00
Ajay
63a5b6fb6f Store fonts locally 2023-01-23 01:05:33 -05:00
Ajay
254261b83a Don't hide chevron if segments are null 2023-01-21 17:37:12 -05:00
Ajay
9301a0914d Add info that piped is supported 2023-01-21 17:26:43 -05:00
Ajay Ramachandran
8e3bae6396 bump version 2023-01-21 17:24:55 -05:00
Ajay Ramachandran
1a4d48503a Merge pull request #1560 from mchangrh/piped-support
add selector for piped
2023-01-21 17:23:45 -05:00
Ajay Ramachandran
508d51d582 New Crowdin updates (#1619) 2023-01-21 17:23:10 -05:00
Ajay
8f91b83195 Remove next chapter from youtube hotkeys warning 2023-01-21 17:17:05 -05:00
Ajay
6adac26a3d Fix keybinds from popup 2023-01-21 17:13:48 -05:00
Ajay
140e816979 Change next chapter keybind to be same as YouTube and disable YouTube's one
Fix #1508
2023-01-21 17:11:08 -05:00
Ajay
f89682c2d6 give more time for chapters to load 2023-01-21 16:59:36 -05:00
Ajay
35e0f7ede9 Fix warnings 2023-01-21 16:20:18 -05:00
Ajay
8383699a68 Fix chapter name sometimes disappearing 2023-01-21 16:18:25 -05:00
dependabot[bot]
76aa472745 Bump json5 from 2.2.1 to 2.2.3 (#1640)
Bumps [json5](https://github.com/json5/json5) from 2.2.1 to 2.2.3.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-08 15:41:36 -05:00
Michael C
6959bdbee1 Add piped support
- add playerInit listener
- made popup container generic for possible piped support
- explicitly add css files to web_accessible_resources
2023-01-03 17:10:51 -05:00
Michael C
c3d4914f57 add selector for piped 2023-01-02 18:28:37 -05:00
github-actions[bot]
55b6b74590 Update Invidious List (#1631)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-01-01 19:44:34 -05:00
Ajay
4a4b281495 Remove log 2022-12-30 23:13:39 -05:00
Ajay Ramachandran
b9b43513b4 Merge pull request #1627 from mchangrh/partialRequredSegment
highlight partial required segments
2022-12-27 12:42:06 -05:00
Michael C
f68429487e add brackets for operator precedence 2022-12-27 00:24:46 -05:00
Michael C
c5178b4c99 highlight partial required segments 2022-12-26 20:18:51 -05:00
Ajay
27f3ced338 Remove lookbehind because safari
Resolves https://github.com/ajayyy/SponsorBlock/issues/1626
2022-12-26 16:28:17 -05:00
Ajay
06a112a030 Fix category pill disappearing on mobile 2022-12-25 00:38:49 -05:00
github-actions[bot]
89b210ffd5 Update OSS Attribution (#1624)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-12-24 00:56:55 -05:00
Ajay
7dd2c9eb3e Move some generic functions to a new package 2022-12-24 00:54:56 -05:00
125 changed files with 4834 additions and 46502 deletions

2
.github/FUNDING.yml vendored
View File

@@ -1,3 +1,3 @@
github: ajayyy-org
patreon: ajayyy
custom: [buy.ajay.app/l/sponsorblock, sponsor.ajay.app/donate]
custom: [sponsor.ajay.app/donate]

View File

@@ -11,6 +11,8 @@ jobs:
steps:
# Initialization
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/setup-node@v3
with:
node-version: '18'

View File

@@ -13,67 +13,35 @@ jobs:
steps:
# Initialization
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- name: Copy configuration
run: cp config.json.example config.json
# Create source artifact with submodule
- name: Create directory
run: cd ..; mkdir ./builds
- name: Zip Source code
run: zip -r ../builds/SourceCodeUseThisOne.zip *
- name: Upload Source to release
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
args: ../builds/SourceCodeUseThisOne.zip
name: SourceCodeUseThisOne.zip
path: ../builds/SourceCodeUseThisOne.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
- run: npm ci
# Create Chrome artifacts
- name: Create Chrome artifacts
run: npm run build:chrome
- uses: actions/upload-artifact@v3
with:
name: ChromeExtension
path: dist
- run: mkdir ./builds
- name: Zip Artifacts
run: cd ./dist ; zip -r ../builds/ChromeExtension.zip *
# Create Firefox artifacts
- name: Create Firefox artifacts
run: npm run build:firefox
- uses: actions/upload-artifact@v3
with:
name: FirefoxExtension
path: dist
- name: Zip Artifacts
run: cd ./dist ; zip -r ../builds/FirefoxExtension.zip *
# Create Beta artifacts (Builds with the name changed to beta)
- name: Create Chrome Beta artifacts
run: npm run build:chrome -- --env stream=beta
- uses: actions/upload-artifact@v3
with:
name: ChromeExtensionBeta
path: dist
- name: Zip Artifacts
run: cd ./dist ; zip -r ../builds/ChromeExtensionBeta.zip *
# Create Safari artifacts
- name: Create Safari artifacts
run: npm run build:safari
- uses: actions/upload-artifact@v3
with:
name: SafariExtension
path: dist
- name: Zip Artifacts
run: cd ./dist ; zip -r ../builds/SafariExtension.zip *
# Create Edge artifacts
- name: Clear dist for Edge
run: rm -rf ./dist
- name: Create Edge artifacts
run: npm run build:edge
- uses: actions/upload-artifact@v3
with:
name: EdgeExtension
path: dist
- name: Zip Artifacts
run: cd ./dist ; zip -r ../builds/EdgeExtension.zip *
# Upload each release asset
- name: Upload ChromeExtension to release
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
@@ -81,13 +49,12 @@ jobs:
name: ChromeExtension.zip
path: ./builds/ChromeExtension.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload ChromeExtensionBeta to release
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
args: builds/ChromeExtensionBeta.zip
name: ChromeExtensionBeta.zip
path: ./builds/ChromeExtensionBeta.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
# Create Firefox artifacts
- name: Create Firefox artifacts
run: npm run build:firefox
- name: Zip Artifacts
run: cd ./dist ; zip -r ../builds/FirefoxExtension.zip *
- name: Upload FirefoxExtension to release
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
@@ -95,6 +62,26 @@ jobs:
name: FirefoxExtension.zip
path: ./builds/FirefoxExtension.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
# Create Beta artifacts (Builds with the name changed to beta)
- name: Create Chrome Beta artifacts
run: npm run build:chrome -- --env stream=beta
- name: Zip Artifacts
run: cd ./dist ; zip -r ../builds/ChromeExtensionBeta.zip *
- name: Upload ChromeExtensionBeta to release
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
args: builds/ChromeExtensionBeta.zip
name: ChromeExtensionBeta.zip
path: ./builds/ChromeExtensionBeta.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
# Create Safari artifacts
- name: Create Safari artifacts
run: npm run build:safari
- name: Zip Artifacts
run: cd ./dist ; zip -r ../builds/SafariExtension.zip *
- name: Upload SafariExtension to release
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
@@ -102,6 +89,14 @@ jobs:
name: SafariExtension.zip
path: ./builds/SafariExtension.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
# Create Edge artifacts
- name: Clear dist for Edge
run: rm -rf ./dist
- name: Create Edge artifacts
run: npm run build:edge
- name: Zip Artifacts
run: cd ./dist ; zip -r ../builds/EdgeExtension.zip *
- name: Upload EdgeExtension to release
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:

View File

@@ -10,6 +10,8 @@ jobs:
steps:
# Initialization
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/setup-node@v3
with:
node-version: '18'

View File

@@ -13,6 +13,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/setup-node@v3
with:
node-version: '18'
@@ -22,10 +24,13 @@ jobs:
npm i -g oss-attribution-generator
generate-attribution
mv ./oss-attribution/attribution.txt ./public/oss-attribution/attribution.txt
- name: Prettify attributions
run: |
cd ci && npx ts-node prettify.ts
- name: Create pull request to update list
uses: peter-evans/create-pull-request@b4d51739f96fca8047ad065eccef63442d8e99f7
# v4.2.0
uses: peter-evans/create-pull-request@2b011faafdcbc9ceb11414d64d0573f37c774b04
# v4.2.3
with:
commit-message: Update OSS Attribution
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

View File

@@ -9,6 +9,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Download instance list
run: |
wget https://api.invidious.io/instances.json -O ci/data.json
@@ -18,8 +20,8 @@ jobs:
run: npm run ci:invidious
- name: Create pull request to update list
uses: peter-evans/create-pull-request@b4d51739f96fca8047ad065eccef63442d8e99f7
# v4.2.0
uses: peter-evans/create-pull-request@2b011faafdcbc9ceb11414d64d0573f37c774b04
# v4.2.3
with:
commit-message: Update Invidious List
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "public/_locales"]
path = public/_locales
url = https://github.com/ajayyy/ExtensionTranslations

View File

@@ -62,17 +62,29 @@ You can read the API docs [here](https://wiki.sponsor.ajay.app/index.php/API_Doc
You must have [Node.js 16](https://nodejs.org/) and npm installed.
1. Copy the file `config.json.example` to `config.json` and adjust configuration as desired.
1. Clone with submodules
```bash
git clone https://github.com/ajayyy/SponsorBlock --recurse-submodules=yes
```
Or if you already cloned it, pull submodules with
```bash
git submodule update --init --recursive
```
2. Copy the file `config.json.example` to `config.json` and adjust configuration as desired.
- You will need to repeat this step in the future if you get build errors related to `CompileConfig`. This can happen for example when a new category is added.
2. Run `npm install` in the repository to install dependencies.
3. Run `npm install` in the repository to install dependencies.
3. Run `npm run build:dev` (for Chrome) or `npm run build:dev:firefox` (for Firefox) to generate a development version of the extension with source maps.
4. Run `npm run build:dev` (for Chrome) or `npm run build:dev:firefox` (for Firefox) to generate a development version of the extension with source maps.
- You can also run `npm run build` (for Chrome) or `npm run build:firefox` (for Firefox) to generate a production build.
4. The built extension is now in `dist/`. You can load this folder directly in Chrome as an [unpacked extension](https://developer.chrome.com/docs/extensions/mv3/getstarted/#manifest), or convert it to a zip file to load it as a [temporary extension](https://developer.mozilla.org/en-US/docs/Tools/about:debugging#loading_a_temporary_extension) in Firefox.
5. The built extension is now in `dist/`. You can load this folder directly in Chrome as an [unpacked extension](https://developer.chrome.com/docs/extensions/mv3/getstarted/#manifest), or convert it to a zip file to load it as a [temporary extension](https://developer.mozilla.org/en-US/docs/Tools/about:debugging#loading_a_temporary_extension) in Firefox.
### Developing with a clean profile and hot reloading

View File

@@ -16,10 +16,10 @@ if (!existsSync(join(__dirname, "data.json"))) {
import * as data from "../ci/data.json";
type instanceMap = {
name: string,
url: string,
dailyRatios: {ratio: string, label: string }[],
thirtyDayUptime: string
name: string;
url: string;
dailyRatios: {ratio: string; label: string }[];
thirtyDayUptime: string;
}[]
// only https servers

View File

@@ -1 +1 @@
["inv.bp.projectsegfau.lt","inv.odyssey346.dev","inv.riverside.rocks","inv.vern.cc","invidio.xamh.de","invidious.baczek.me","invidious.esmailelbob.xyz","invidious.flokinet.to","invidious.namazso.eu","invidious.nerdvpn.de","invidious.rhyshl.live","invidious.sethforprivacy.com","invidious.slipfox.xyz","invidious.snopyta.org","invidious.tiekoetter.com","invidious.weblibre.org","vid.puffyan.us","y.com.sb","yewtu.be","yt.artemislena.eu"]
["inv.bp.projectsegfau.lt","inv.zzls.xyz","invidious.0011.lt","invidious.baczek.me","invidious.lunar.icu","invidious.privacydev.net","invidious.tiekoetter.com","iv.ggtyler.dev","iv.melmac.space","vid.puffyan.us","y.com.sb","yewtu.be","yt.artemislena.eu"]

6
ci/prettify.ts Normal file
View File

@@ -0,0 +1,6 @@
import { writeFile } from 'fs';
import * as license from "../oss-attribution/licenseInfos.json";
const result = JSON.stringify(license, null, 2);
writeFile("../oss-attribution/licenseInfos.json", result, err => { if (err) return console.log(err) } );

View File

@@ -30,5 +30,17 @@
"guidelines": "https://wiki.sponsor.ajay.app/w/Guidelines",
"mute": "https://wiki.sponsor.ajay.app/w/Mute_Segment",
"chapter": "https://wiki.sponsor.ajay.app/w/Chapter"
},
"extensionImportList": {
"chromium": [
"enamippconapkdmgfgjchkhakpfinmaj"
],
"firefox": [
"deArrow@ajay.app",
"deArrowBETA@ajay.app"
],
"safari": [
"app.ajay.dearrow.extension"
]
}
}

View File

@@ -1,7 +1,7 @@
{
"name": "__MSG_fullName__",
"short_name": "SponsorBlock",
"version": "5.1.11",
"version": "5.4.10",
"default_locale": "en",
"description": "__MSG_Description__",
"homepage_url": "https://sponsor.ajay.app",
@@ -13,7 +13,6 @@
],
"all_frames": true,
"js": [
"./js/vendor.js",
"./js/content.js"
],
"css": [
@@ -68,16 +67,25 @@
"icons/export.svg",
"icons/PlayerInfoIconSponsorBlocker.svg",
"icons/PlayerDeleteIconSponsorBlocker.svg",
"icons/dearrow.svg",
"popup.html",
"popup.css",
"content.css",
"js/document.js"
"shared.css",
"js/document.js",
"libs/Source+Sans+Pro.css",
"libs/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu.woff2",
"libs/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRduz8A.woff2",
"libs/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBduz8A.woff2",
"libs/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBduz8A.woff2"
],
"permissions": [
"storage",
"https://sponsor.ajay.app/*"
],
"optional_permissions": [
"*://*/*"
"*://*/*",
"webNavigation"
],
"browser_action": {
"default_title": "SponsorBlock",
@@ -85,8 +93,8 @@
"default_icon": {
"16": "icons/IconSponsorBlocker16px.png",
"32": "icons/IconSponsorBlocker32px.png",
"64": "icons/LogoSponsorBlocker64px.png",
"128": "icons/LogoSponsorBlocker128px.png"
"64": "icons/IconSponsorBlocker64px.png",
"128": "icons/IconSponsorBlocker128px.png"
},
"theme_icons": [
{
@@ -100,31 +108,30 @@
"size": 32
},
{
"light": "icons/LogoSponsorBlocker64px.png",
"dark": "icons/LogoSponsorBlocker64px.png",
"light": "icons/IconSponsorBlocker64px.png",
"dark": "icons/IconSponsorBlocker64px.png",
"size": 64
},
{
"light": "icons/LogoSponsorBlocker128px.png",
"dark": "icons/LogoSponsorBlocker128px.png",
"light": "icons/IconSponsorBlocker128px.png",
"dark": "icons/IconSponsorBlocker128px.png",
"size": 128
}
]
},
"background": {
"scripts":[
"./js/vendor.js",
"./js/background.js"
]
},
"icons": {
"16": "icons/IconSponsorBlocker16px.png",
"32": "icons/IconSponsorBlocker32px.png",
"64": "icons/LogoSponsorBlocker64px.png",
"128": "icons/LogoSponsorBlocker128px.png",
"256": "icons/LogoSponsorBlocker256px.png",
"512": "icons/LogoSponsorBlocker512px.png",
"1024": "icons/LogoSponsorBlocker1024px.png"
"64": "icons/IconSponsorBlocker64px.png",
"128": "icons/IconSponsorBlocker128px.png",
"256": "icons/IconSponsorBlocker256px.png",
"512": "icons/IconSponsorBlocker512px.png",
"1024": "icons/IconSponsorBlocker1024px.png"
},
"options_ui": {
"page": "options/options.html",

File diff suppressed because one or more lines are too long

4933
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,37 +4,38 @@
"description": "",
"main": "background.js",
"dependencies": {
"@ajayyy/maze-utils": "1.1.37",
"content-scripts-register-polyfill": "^4.0.2",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@types/chrome": "^0.0.199",
"@types/firefox-webext-browser": "^94.0.1",
"@types/jest": "^29.2.0",
"@types/react": "^18.0.21",
"@types/react-dom": "^18.0.6",
"@types/selenium-webdriver": "^4.1.6",
"@types/chrome": "^0.0.220",
"@types/firefox-webext-browser": "^111.0.0",
"@types/jest": "^29.4.0",
"@types/react": "^18.0.28",
"@types/react-dom": "^18.0.11",
"@types/selenium-webdriver": "^4.1.13",
"@types/wicg-mediasession": "^1.1.4",
"@typescript-eslint/eslint-plugin": "^5.40.1",
"@typescript-eslint/parser": "^5.40.1",
"chromedriver": "^106.0.1",
"concurrently": "^7.4.0",
"@typescript-eslint/eslint-plugin": "^5.54.1",
"@typescript-eslint/parser": "^5.54.1",
"chromedriver": "^110.0.0",
"concurrently": "^7.6.0",
"copy-webpack-plugin": "^11.0.0",
"eslint": "^8.25.0",
"eslint-plugin-react": "^7.31.10",
"fork-ts-checker-webpack-plugin": "^7.2.13",
"jest": "^29.2.1",
"jest-environment-jsdom": "^29.2.1",
"rimraf": "^3.0.2",
"eslint": "^8.35.0",
"eslint-plugin-react": "^7.32.2",
"fork-ts-checker-webpack-plugin": "^7.3.0",
"jest": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
"rimraf": "^4.3.1",
"schema-utils": "^4.0.0",
"selenium-webdriver": "^4.5.0",
"speed-measure-webpack-plugin": "^1.5.0",
"ts-jest": "^29.0.3",
"ts-loader": "^9.4.1",
"selenium-webdriver": "^4.8.1",
"ts-jest": "^29.0.5",
"ts-loader": "^9.4.2",
"ts-node": "^10.9.1",
"typescript": "4.8",
"web-ext": "^7.3.1",
"webpack": "^5.74.0",
"typescript": "4.9",
"web-ext": "^7.6.2",
"webpack": "^5.75.0",
"webpack-cli": "^4.10.0",
"webpack-merge": "^5.8.0"
},

1
public/_locales Submodule

Submodule public/_locales added at 1b0a076f74

View File

@@ -1 +0,0 @@
{}

View File

@@ -1,14 +0,0 @@
{
"Loading": {
"message": "በመጫን ላይ..."
},
"paused": {
"message": "ለአፍታ አቁም"
},
"success": {
"message": "ተሳክቷል!"
},
"Username": {
"message": "መለያ ስም"
}
}

View File

@@ -1,644 +0,0 @@
{
"fullName": {
"message": "سبونسر بلوك لليوتيوب - تخطي الرعاية الاعلانية",
"description": "Name of the extension."
},
"Description": {
"message": "تخطي الرعاية الاعلانية ، التسول في الاشتراك والمزيد على مقاطع الفيديو على اليوتيوب. التبليغ عن الرعايه الاعلانيه علي مقاطع الفيديو التي تشاهدها لتوفير وقتك و وقت الآخرين.",
"description": "Description of the extension."
},
"400": {
"message": "الخادم قال أن هذا الطلب خاطيء"
},
"429": {
"message": "لقد قدمت الكثير من اوقات الرعاية الاعلانية لهذا الفيديو الواحد، هل أنت متأكد من وجود هذا العدد؟"
},
"409": {
"message": "تم تقديم هذا بالفعل من قبل"
},
"channelWhitelisted": {
"message": "القناة في القائمة البيضاء!"
},
"Segment": {
"message": "جزء"
},
"Segments": {
"message": "أجزاء"
},
"Chapters": {
"message": "الفصول"
},
"upvoteButtonInfo": {
"message": "التصويت على هذا الإرسال"
},
"reportButtonTitle": {
"message": "إبلاغ"
},
"reportButtonInfo": {
"message": "الإبلاغ عن هذا التقديم كغير صحيح."
},
"Dismiss": {
"message": "إلغاء"
},
"Loading": {
"message": "جاري التحميل..."
},
"Hide": {
"message": "لا تظهر أبداً"
},
"hitGoBack": {
"message": "قم الضغط علي تخطي للوصول إلى المكان الذي أتيت منه."
},
"unskip": {
"message": "الرجوع في التخطي"
},
"reskip": {
"message": "اعاده التخطي"
},
"unmute": {
"message": "إلغاء الكتم"
},
"paused": {
"message": "ايقاف مؤقت"
},
"manualPaused": {
"message": "تم إيقاف الموقت"
},
"confirmMSG": {
"message": "لتحرير أو حذف قيّم فردياً، انقر فوق زر المعلومات أو فتح الإضافة عن طريق النقر على أيقونة الإضافة في الزاوية اليمنى العليا."
},
"clearThis": {
"message": "هل أنت متأكد أنك تريد حذف هذا؟\n\n"
},
"Unknown": {
"message": "حدث خطأ في إرسال توقيت الرعاة الخاص بك، الرجاء المحاولة مرة أخرى لاحقاً."
},
"sponsorFound": {
"message": "يحتوي هذا الفيديو على أجزاء في قاعدة البيانات!"
},
"sponsor404": {
"message": "لم يتم العثور على أجزاء"
},
"sponsorStart": {
"message": "يبدأ الجزء الآن"
},
"sponsorEnd": {
"message": "ينتهي الجزء الآن"
},
"sponsorCancel": {
"message": "إلغاء إنشاء جزء"
},
"noVideoID": {
"message": "لم يتم العثور على فيديو يوتيوب.\nإذا كان هذا غير صحيح، قم بتحديث الصفحة."
},
"refreshSegments": {
"message": "تحديث الأجزاء"
},
"success": {
"message": "تم بنجاح!"
},
"voted": {
"message": "تم التصويت!"
},
"serverDown": {
"message": "يبدو أن الخادم غير متصل. تواصل مع المطوّر على الفور."
},
"connectionError": {
"message": "حدث خطأ في الاتصال. رمز الخطأ: "
},
"clearTimes": {
"message": "مسح الأجزاء"
},
"openPopup": {
"message": "فتح نافذة SponsorBlock المنبثقة"
},
"closePopup": {
"message": "إغلاق النافذة المنبثقة"
},
"SubmitTimes": {
"message": "إرسال الأجزاء"
},
"submitCheck": {
"message": "هل أنت متأكد أنك تريد إرسال هذا؟"
},
"whitelistChannel": {
"message": "إضافة القناة إلى القائمة البيضاء"
},
"removeFromWhitelist": {
"message": "إزالة القناة من القائمة البيضاء"
},
"voteOnTime": {
"message": "صوّت لجزء"
},
"Submissions": {
"message": "المشاركات"
},
"savedPeopleFrom": {
"message": "لقد وفّرت على الناس "
},
"viewLeaderboard": {
"message": "المتصدرين"
},
"recordTimesDescription": {
"message": "إرسال"
},
"submissionEditHint": {
"message": "سيظهر تحرير الجزء بعد النقر على إرسال",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "تلميح: يمكنك إعداد اختصارات مفاتيح للتقديم في الخيارات"
},
"clearTimesButton": {
"message": "مسح الأوقات"
},
"submitTimesButton": {
"message": "إرسال الأوقات"
},
"publicStats": {
"message": "يستخدم هذا في صفحة الإحصائيات العامة لإظهار مقدار مساهمتك. قم برؤيتها"
},
"Username": {
"message": "اسم المستخدم"
},
"setUsername": {
"message": "تعيين اسم مستخدم"
},
"copyPublicID": {
"message": "نسخ رمز المستخدم"
},
"copySegmentID": {
"message": "نسخ معرف الجزء"
},
"discordAdvert": {
"message": "انضم إلى سيرفر \"ديسكورد\" الرسمي لتقديم اقتراحات وتعليقات!"
},
"hideThis": {
"message": "إخفاء هذا"
},
"Options": {
"message": "خيارات"
},
"showButtons": {
"message": "إظهار الأزرار على مشغل اليوتيوب"
},
"hideButtons": {
"message": "إخفاء الأزرار على مشغل اليوتيوب"
},
"hideButtonsDescription": {
"message": "هذا يخفي الأزرار التي تظهر على مشغل اليوتيوب لإرسال أجزاء للتخطي."
},
"showSkipButton": {
"message": "إبقاء زر \"تخطي للعنوان الرئيس\" على المشغّل"
},
"showInfoButton": {
"message": "إظهار زر \"معلومات\" على مشغّل اليوتيوب"
},
"hideInfoButton": {
"message": "إخفاء زر \"معلومات\" على مشغّل اليوتيوب"
},
"autoHideInfoButton": {
"message": "إخفاء تلقائي لزر \"معلومات\""
},
"hideDeleteButton": {
"message": "إخفاء زر \"حذف\" على مشغّل اليوتيوب"
},
"showDeleteButton": {
"message": "إظهار زر \"حذف\" على مشغّل اليوتيوب"
},
"enableViewTracking": {
"message": "تمكين تتبع مرات التخطي"
},
"enableTrackDownvotes": {
"message": "حفظ التصويت السلبي للمقاطع"
},
"whatTrackDownvotes": {
"message": "أي مقاطع قمت بالتصويت السلبي لها ستبقى مخفية حتى بعد التحديث"
},
"showNotice": {
"message": "إظهار الإشعار مرة أخرى"
},
"showCategoryGuidelines": {
"message": "إظهار مساعدة الفئة"
},
"website": {
"message": "موقع الويب",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "الشفرة المصدرية",
"description": "Used on Firefox Store Page"
},
"setSkipShortcut": {
"message": "تخطي الجزء",
"description": "Keybind label"
},
"setStartSponsorShortcut": {
"message": "بدء/إيقاف الجزء",
"description": "Keybind label"
},
"setSubmitKeybind": {
"message": "إرسال الأجزاء",
"description": "Keybind label"
},
"yourWork": {
"message": "عملك",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"errorCode": {
"message": "رمز الخطأ: "
},
"skip": {
"message": "تخطي"
},
"mute": {
"message": "كتم"
},
"full": {
"message": "فيديو كامل",
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
"message": "تخطي {0}؟"
},
"mute_category": {
"message": "كتم {0}؟"
},
"skip_to_category": {
"message": "تخطي إلى {0}؟",
"description": "Used for skipping to things (Skip to Highlight)"
},
"skipped": {
"message": "تم تخطي {0}",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "تم كتم {0}",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "تم التخطي إلى {0}",
"description": "Used for skipping to things (Skipped to Highlight)"
},
"disableAutoSkip": {
"message": "تعطيل التخطي التلقائي"
},
"enableAutoSkip": {
"message": "تفعيل التخطي التلقائي"
},
"youHaveSkipped": {
"message": "قمت بتخطي "
},
"minLower": {
"message": "دقيقة"
},
"minsLower": {
"message": "دقائق"
},
"hourLower": {
"message": "ساعة"
},
"hoursLower": {
"message": "ساعات"
},
"youHaveSavedTime": {
"message": "لقد وفّرت على الناس",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": " من حياتهم",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"createdBy": {
"message": "أنشئت من قِبل"
},
"supportOtherSites": {
"message": "دعم مواقع يوتيوب الطرف الثالث"
},
"supportedSites": {
"message": "المواقع المدعومة: "
},
"add": {
"message": "أضِف"
},
"save": {
"message": "حفظ"
},
"reset": {
"message": "إعادة تعيين"
},
"exportOptionsCopy": {
"message": "تعديل/نسخ"
},
"exportOptionsDownload": {
"message": "حفظ إلى ملف"
},
"exportOptionsUpload": {
"message": "تحميل من ملف"
},
"setOptions": {
"message": "تعيين الخيارات"
},
"confirmNoticeTitle": {
"message": "إرسال المقطع"
},
"submit": {
"message": "إرسال"
},
"cancel": {
"message": "إلغاء"
},
"delete": {
"message": "حذف"
},
"preview": {
"message": "معاينة"
},
"unsubmitted": {
"message": "غير مرسلة"
},
"inspect": {
"message": "فحص"
},
"edit": {
"message": "تعديل"
},
"copyDebugInformationFailed": {
"message": "فشل في الكتابة إلى الحافظة"
},
"to": {
"message": "إلى",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"category_sponsor": {
"message": "الراعي"
},
"category_sponsor_guideline1": {
"message": "دعايات مدفوعة"
},
"category_selfpromo": {
"message": "دعاية غير مدفوعة/ذاتية"
},
"category_exclusive_access": {
"message": "وصول حصري"
},
"category_intro_short": {
"message": "استراحة"
},
"category_intro_guideline1": {
"message": "فاصل بدون محتوى فعلي"
},
"category_outro": {
"message": "الخاتمة/تترات النهاية"
},
"category_preview": {
"message": "معاينة/خلاصة"
},
"category_filler_short": {
"message": "حشو"
},
"category_music_offtopic": {
"message": "الموسيقى: مقطع غير موسيقي"
},
"category_music_offtopic_short": {
"message": "غير موسيقي"
},
"category_poi_highlight": {
"message": "ابراز"
},
"category_livestream_messages_short": {
"message": "قراءة الرسالة"
},
"autoSkip": {
"message": "تخطي تلقائي"
},
"manualSkip": {
"message": "تخطي يدوي"
},
"showOverlay": {
"message": "إظهار في شريط البحث"
},
"disable": {
"message": "تعطيل"
},
"autoSkip_POI": {
"message": "تخطي تلقائي حتى البدء"
},
"manualSkip_POI": {
"message": "اسأل عند تحميل الفيديو"
},
"showOverlay_POI": {
"message": "إظهار في شريط البحث"
},
"showOverlay_full": {
"message": "إظهار التسمية"
},
"previewColor": {
"message": "لون غير المرسل",
"description": "Referring to submissions that have not been sent to the server yet."
},
"seekBarColor": {
"message": "لون شريط البحث"
},
"category": {
"message": "الفئة"
},
"skipOption": {
"message": "خيار التخطي",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "تمكين الخادم التجريبي"
},
"bracketNow": {
"message": "(الآن)"
},
"moreCategories": {
"message": "المزيد من الفئات"
},
"chooseACategory": {
"message": "اختر فئة"
},
"bracketEnd": {
"message": "(النهاية)"
},
"hiddenDueToDownvote": {
"message": "مخفي: تصويت سلبي"
},
"hiddenDueToDuration": {
"message": "مخفي: قصير جداً"
},
"manuallyHidden": {
"message": "مخفي يدوياً"
},
"permissionRequestSuccess": {
"message": "نجح طلب الإذن!"
},
"permissionRequestFailed": {
"message": "فشل طلب الإذن ، هل نقرت على رفض؟"
},
"downvoteDescription": {
"message": "خاطئ/التوقيت غير صحيح"
},
"incorrectCategory": {
"message": "تغيير الفئة"
},
"multipleSegments": {
"message": "أجزاء متعددة"
},
"guidelines": {
"message": "الإرشادات"
},
"readTheGuidelines": {
"message": "اقرأ الإرشادات!!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"categoryUpdate1": {
"message": "الفئات هنا!"
},
"help": {
"message": "المساعدة"
},
"GotIt": {
"message": "فهمت",
"description": "Used as the button to dismiss a tooltip"
},
"hideForever": {
"message": "إخفاء دائم"
},
"warningTitle": {
"message": "لقد حصلت على تحذير"
},
"questionButton": {
"message": "لدي سؤال"
},
"warningConfirmButton": {
"message": "أنا أفهم السبب"
},
"Donate": {
"message": "تبرع"
},
"considerDonating": {
"message": "ساعد في تمويل التطوير"
},
"hideDonationLink": {
"message": "إخفاء رابط التبرع"
},
"darkModeOptionsPage": {
"message": "الوضع الداكن في صفحة الخيارات"
},
"helpPageThanksForInstalling": {
"message": "شكرا على تثبيت SponsorBlock."
},
"helpPageReviewOptions": {
"message": "يرجى مراجعة الخيارات أدناه"
},
"helpPageHowSkippingWorks": {
"message": "كيف يعمل التخطي"
},
"Submitting": {
"message": "إرسال"
},
"Editing": {
"message": "التعديل"
},
"helpPageTooSlow": {
"message": "هذا بطيء جداً"
},
"helpPageCopyOfDatabase": {
"message": "هل يمكنني الحصول على نسخة من قاعدة البيانات؟ ماذا يحدث إذا اختفيت؟"
},
"helpPageCopyOfDatabase1": {
"message": "قاعدة البيانات عامة ومتاحة على"
},
"helpPageNews": {
"message": "الأخبار وكيف تم صنعها"
},
"helpPageSourceCode": {
"message": "أين يمكنني الحصول على شفرة المصدر؟"
},
"LearnMore": {
"message": "معرفة المزيد"
},
"FullDetails": {
"message": "التفاصيل الكاملة"
},
"OpenCategoryWikiPage": {
"message": "افتح صفحة ويكي هذه الفئة."
},
"CopyAndDownvote": {
"message": "نسخ وتصويت معارض"
},
"ContinueVoting": {
"message": "متابعة التصويت"
},
"downvote": {
"message": "تصويت سلبي"
},
"upvote": {
"message": "تصويت إيجابي"
},
"hideSegment": {
"message": "إخفاء المقطع"
},
"SponsorTimeEditScrollNewFeature": {
"message": "استخدم عجلة الماوس أثناء التمرير فوق مربع التعديل لضبط الوقت بسرعة. يمكن استخدام مجموعات مفتاح ctrl أو Shift لضبط التغييرات."
},
"dayAbbreviation": {
"message": "ي",
"description": "100d"
},
"hourAbbreviation": {
"message": "س",
"description": "100h"
},
"optionsTabBehavior": {
"message": "سلوك",
"description": "Appears in Options as a tab header for options related to categories and skipping behavior. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabInterface": {
"message": "واجهه المستخدم",
"description": "Appears in Options as a tab header for options related to GUI and sounds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabKeyBinds": {
"message": "اختصارات لوحة المفاتيح",
"description": "Appears in Options as a tab header for keybinds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabBackup": {
"message": "النسخ الاحتياطي/الاستعادة",
"description": "Appears in Options as a tab header for options related to saving/restoring your settings. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabAdvanced": {
"message": "متنوع",
"description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"noticeVisibilityLabel": {
"message": "تخطي ظهور الإشعار",
"description": "Option label"
},
"unbind": {
"message": "إلغاء ربط",
"description": "Unbind keyboard shortcut"
},
"notSet": {
"message": "لم يتم التعيين"
},
"change": {
"message": "تغيير"
},
"youtubeKeybindWarning": {
"message": "هذا اختصار يوتيوب مدمج. هل أنت متأكد أنك تريد استخدامه؟"
},
"betaServerWarning": {
"message": "الخادم التجريبي مفعّل!"
},
"openOptionsPage": {
"message": "فتح صفحة الخيارات"
},
"resetToDefault": {
"message": "إعادة تعيين الإعدادات الإفتراضية"
},
"confirmResetToDefault": {
"message": "هل أنت متأكد من أنك تريد إعادة تعيين كافة الإعدادات إلى حالتها الافتراضية؟ لا يمكنك التراجع عن ذلك."
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,226 +0,0 @@
{
"fullName": {
"message": "SponsorBlock per YouTube - Omet els Sponsorships",
"description": "Name of the extension."
},
"Description": {
"message": "Omet els sponsorships, pregant per una subscripció i mes en videos de YouTube. Informa dels patrocinadors a els vídeos que mires per estalviar temps als altres.",
"description": "Description of the extension."
},
"400": {
"message": "El server ha dit que aquesta sol·licitud es invalida"
},
"429": {
"message": "Heu enviat massa vegades patrocinadors per a aquest vídeo, esteu segur que n'hi ha tants?"
},
"409": {
"message": "Això ja s'ha enviat abans"
},
"channelWhitelisted": {
"message": "El canal és a la llista blanca!"
},
"Segment": {
"message": "segment"
},
"Segments": {
"message": "segments"
},
"upvoteButtonInfo": {
"message": "Voteu millor aquesta submissió"
},
"reportButtonTitle": {
"message": "Informa"
},
"reportButtonInfo": {
"message": "Notifiqueu que aquest enviament és incorrecte."
},
"Dismiss": {
"message": "Omet"
},
"Loading": {
"message": "Carregant..."
},
"Hide": {
"message": "No mostris mai"
},
"hitGoBack": {
"message": "Premeu \"no saltar\" per tornar on estàveu."
},
"unskip": {
"message": "No saltar"
},
"reskip": {
"message": "Saltar de nou"
},
"unmute": {
"message": "Deixa de silenciar"
},
"paused": {
"message": "En pausa"
},
"manualPaused": {
"message": "S'ha aturat el temporitzador"
},
"confirmMSG": {
"message": "Per editar o esborrar valors individuals, premeu el botó d'informació o cliqueu la pestanya de l'extensió al cantó superior dret."
},
"clearThis": {
"message": "Segur que voleu esborrar això?\n\n"
},
"Unknown": {
"message": "S'ha produït un error en enviar els temps d'anunciant, torneu-ho a provar més endavant."
},
"sponsorFound": {
"message": "Aquest vídeo té segments a la base de dades!"
},
"sponsor404": {
"message": "No s'han trobat segments"
},
"sponsorStart": {
"message": "El segment comença ara"
},
"sponsorEnd": {
"message": "El segment acaba ara"
},
"sponsorCancel": {
"message": "Cancel·la la creació del segment"
},
"noVideoID": {
"message": "No s'ha trobat cap vídeo de YouTube.\nSi penseu que és incorrecte, refresqueu la pestanya."
},
"refreshSegments": {
"message": "Refresca els segments"
},
"success": {
"message": "Èxit!"
},
"voted": {
"message": "Votat!"
},
"serverDown": {
"message": "Sembla que ha caigut el servidor. Contacteu el desenvolupador immediatament."
},
"connectionError": {
"message": "S'ha produït un error de connexió. Codi d'error: "
},
"clearTimes": {
"message": "Esborra els segments"
},
"openPopup": {
"message": "Obrir finestra de SponsorBlock"
},
"closePopup": {
"message": "Tanca la finestra"
},
"SubmitTimes": {
"message": "Envia els segments"
},
"submitCheck": {
"message": "Segur que voleu enviar això?"
},
"whitelistChannel": {
"message": "Canal de llista blanca"
},
"removeFromWhitelist": {
"message": "Treure canal de la llista blanca"
},
"voteOnTime": {
"message": "Vota un segment"
},
"Submissions": {
"message": "Propostes"
},
"savedPeopleFrom": {
"message": "Heu estalviat la gent "
},
"viewLeaderboard": {
"message": "Classificació"
},
"recordTimesDescription": {
"message": "Envia"
},
"submissionEditHint": {
"message": "L'edició de seccions apareixerà després de prémer \"envia\"",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "Consell: Podeu crear tecles de drecera per enviar en \"opcions\""
},
"clearTimesButton": {
"message": "Esborra temps"
},
"submitTimesButton": {
"message": "Envia temps"
},
"publicStats": {
"message": "Això s'utilitza a la pàgina d'estadístiques pública per fatxendejar de quant heu contribuït. Vegeu"
},
"Username": {
"message": "Nom d'usuari"
},
"setUsername": {
"message": "Definiu el nom d'usuari"
},
"copyPublicID": {
"message": "Copia l'identificador públic d'usuari"
},
"discordAdvert": {
"message": "Uniu-vos al servidor de Discord oficial per opinar i fer suggeriments!"
},
"hideThis": {
"message": "Amaga això"
},
"Options": {
"message": "Opcions"
},
"showButtons": {
"message": "Mostra els botons al reproductor de YouTube"
},
"hideButtons": {
"message": "Amaga els botons al reproductor de YouTube"
},
"hideButtonsDescription": {
"message": "Això amaga els botons que apareixen al reproductor de YouTube per enviar segments."
},
"showSkipButton": {
"message": "Mantenir \"Botar al destacat\" al reproductor"
},
"showInfoButton": {
"message": "Mostra el botó d'informació al reproductor de YouTube"
},
"hideInfoButton": {
"message": "Amaga el botó d'informació al reproductor de YouTube"
},
"autoHideInfoButton": {
"message": "Amaga automàticament el botó d'informació"
},
"minLower": {
"message": "minut"
},
"minsLower": {
"message": "minuts"
},
"hourLower": {
"message": "hora"
},
"hoursLower": {
"message": "hores"
},
"youHaveSavedTime": {
"message": "Heu estalviat la gent",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": " de les seves vides",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "Visiteu status.sponsor.ajay.app per conèixer l'estat del servidor."
},
"whatChangeUserID": {
"message": "Això hauria de romandre privat: és semblant a una contrasenya i no s'hauria de compartir amb cap persona. Si algú hi té accés, poden suplantar-vos. Si esteu cercant el vostre identificador d'usuari públic, premeu la icona del portanotes a la finestra."
},
"help": {
"message": "Ajuda"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,394 +0,0 @@
{
"fullName": {
"message": "اسپانسربلاک برای یوتیوب - اسپانسر ها را رد کنید",
"description": "Name of the extension."
},
"Description": {
"message": "بخش های اسپانسر شده، درخواست ساب اسکرایب و خیلی چیز های دیگر در ویدیو های یوتیوب را رد کنید. قسمت های اسپانسری ویدیو هایی که میبینید را گزارش کنید تا در وقت دیگران صرفه جویی شود.",
"description": "Description of the extension."
},
"400": {
"message": "سرور گفت که این درخواست نامعتبر است"
},
"429": {
"message": "شما برای این ویدیو قسمت های اسپانسری خیلی زیادی ثبت کرده اید، آیا مطمئنید که به این تعداد وجوددارد؟"
},
"409": {
"message": "این قبلاً ثبت شده است"
},
"channelWhitelisted": {
"message": "کانال در لیست سفید قرار گرفت!"
},
"Segment": {
"message": "بخش"
},
"Segments": {
"message": "بخش"
},
"upvoteButtonInfo": {
"message": "امتیاز دادن به این گزارش ثبت‌شده"
},
"reportButtonTitle": {
"message": "گزارش"
},
"reportButtonInfo": {
"message": "گزارش این ارسال به‌عنوان غیر صحیح."
},
"Dismiss": {
"message": "رد کردن"
},
"Loading": {
"message": "درحال بارگذاری..."
},
"Hide": {
"message": "هرگز نمایش نده"
},
"hitGoBack": {
"message": "کلید عدم رد کردن را بزنید تا به جایی که بودید برگردید."
},
"unskip": {
"message": "عدم رد کردن"
},
"reskip": {
"message": "دوباره رد کردن"
},
"unmute": {
"message": "صدادار"
},
"paused": {
"message": "وقفه شده"
},
"manualPaused": {
"message": "شمارنده متوقف شد"
},
"clearThis": {
"message": "مطمئن هستید که میخواهید این را حذف کنید؟\n\n"
},
"Unknown": {
"message": "اشکالی در ثبت کردن زمان های ارسالی شما پیش آمد. لطفا بعداً دوباره تلاش کنید."
},
"sponsorFound": {
"message": "این ویدیو دارای بخش‌هایی در پایگاه‌داده است!"
},
"sponsor404": {
"message": "هیچ بخشی پیدا نشد"
},
"sponsorStart": {
"message": "بخش اینجا شروع می‌شود"
},
"sponsorEnd": {
"message": "بخش اینجا پایان می‌یابد"
},
"sponsorCancel": {
"message": "لغو ساختن بخش"
},
"noVideoID": {
"message": "هیچ ویدیوی یوتیوب‌ای یافت نشد.\nاگر این صحیح نیست، زبانه را تازه کنید."
},
"refreshSegments": {
"message": "تازه‌کردن بخش‌ها"
},
"success": {
"message": "موفقیت!"
},
"voted": {
"message": "گزارش داده شد!"
},
"serverDown": {
"message": "به‌نظر می‌رسد که ارتباط سرور قطع شده است. با توسعه‌دهنده سریعاً تماس بگیرید."
},
"connectionError": {
"message": "خطای شبکه رخ داده است. کد خطا: "
},
"clearTimes": {
"message": "پاک‌نمودن بخش‌ها"
},
"openPopup": {
"message": "نمایش پنجره اسپانسر بلاک"
},
"closePopup": {
"message": "بستن پنجره"
},
"SubmitTimes": {
"message": "ثبت بخش‌ها"
},
"submitCheck": {
"message": "مطمئن هستید که میخواهید این را ثبت کنید؟"
},
"whitelistChannel": {
"message": "قرار دادن کانال در لیست سفید"
},
"removeFromWhitelist": {
"message": "حذف کانال از لیست سفید"
},
"voteOnTime": {
"message": "رأی دهی به یک بخش"
},
"Submissions": {
"message": "ارسالی‌ها"
},
"savedPeopleFrom": {
"message": "شما دیگران را نجات دادید از "
},
"viewLeaderboard": {
"message": "نفرات برتر"
},
"recordTimesDescription": {
"message": "ثبت"
},
"clearTimesButton": {
"message": "حذف دفعات"
},
"submitTimesButton": {
"message": "ثبت دفعات"
},
"Username": {
"message": "نام‌کاربری"
},
"setUsername": {
"message": "تنظیم نام کاربری"
},
"discordAdvert": {
"message": "به سرور رسمی دیسکورد بپیوندید تا پیشنهادات و بازخورد‌های خود را ارائه دهید!"
},
"hideThis": {
"message": "مخفی‌سازی"
},
"Options": {
"message": "گزینه‌ها"
},
"showButtons": {
"message": "نمایش کلید ها در پخش‌کننده یوتیوب"
},
"hideButtons": {
"message": "مخفی‌سازی کلید ها در پخش‌کننده یوتیوب"
},
"showNotice": {
"message": "نمایش مجدد اطلاعیه"
},
"longDescription": {
"message": "افزونه اسپانسر بلاک به شما امکان رد کردن بخش‌های تبلیغاتی (اسپانسر شده)، قسمت‌های شروع و پایان ویدیو، درخواست ساب‌اسکرایب و سایر قسمت‌های آزار دهنده یوتیوب را می‌دهد. اسپانسر بلاک یک افزونه مرورگر است که به هر کسی امکان ثبت زمان شروع و پایان بخش های اسپانسر شده و سایر بخش های ویدیو های یوتیوب را می‌دهد. پس از اینکه هر کاربر این اطلاعات را ثبت کرده و گزارش دهد، بقیه کاربرانی که از این افزونه استفاده می‌کنند مستقیماً بخش اسپانسر شده ویدیو را رد خواهند کرد. شما همچنین می‌توانید در ویدیو های نماهنگ (موزیک ویدیو)، قسمت‌های غیر موسیقی ویدیو را رد کنید.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "وب‌سایت",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "سورس کد",
"description": "Used on Firefox Store Page"
},
"noticeUpdate2": {
"message": "اگر همچنان این را نمی‌پسندید، گزینه هرگز نمایش نده را انتخاب کنید.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"disableSkipping": {
"message": "ردکردن فعال است"
},
"enableSkipping": {
"message": "ردکردن غیرفعال است"
},
"yourWork": {
"message": "کار شما",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "به نظر می‌رسد سرور زیر فشار است. چند ثانیه‌ی دیگر دوباره امتحان کنید."
},
"errorCode": {
"message": "کد خطا: "
},
"skip": {
"message": "رد کردن"
},
"mute": {
"message": "بی‌صدا"
},
"skip_category": {
"message": "{0} رد شود؟"
},
"mute_category": {
"message": "{0} بی‌صدا شود؟"
},
"skipped": {
"message": "{0} رد شد",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} بی‌صدا شد",
"description": "Example: Sponsor Muted"
},
"minLower": {
"message": "دقیقه"
},
"hourLower": {
"message": "ساعت"
},
"createdBy": {
"message": "ایجاد شده توسط"
},
"supportedSites": {
"message": "وب‌سایت‌های پشتیبانی شده: "
},
"add": {
"message": "افزودن"
},
"save": {
"message": "ذخیره"
},
"reset": {
"message": "بازنشانی"
},
"areYouSureReset": {
"message": "آيا مطمئن هستيد که مي خواهيد این را بازنشانی کنید؟"
},
"mobileUpdateInfo": {
"message": "m.youtube.com اکنون پشتیبانی می‌شود"
},
"setOptions": {
"message": "تنظیم گزینه‌ها"
},
"confirmNoticeTitle": {
"message": "ثبت بخش"
},
"submit": {
"message": "ثبت"
},
"cancel": {
"message": "لغو"
},
"delete": {
"message": "حذف"
},
"preview": {
"message": "پیش‌نمایش"
},
"unsubmitted": {
"message": "ثبت‌نشده"
},
"inspect": {
"message": "مشاهده"
},
"edit": {
"message": "ویرایش"
},
"to": {
"message": "به",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"category_sponsor": {
"message": "اسپانسر"
},
"category_exclusive_access": {
"message": "دسترسی اختصاصی"
},
"category_filler_short": {
"message": "پر کننده"
},
"category_music_offtopic_short": {
"message": "غیر موسیقی"
},
"category_poi_highlight": {
"message": "برجسته"
},
"autoSkip": {
"message": "ردکردن خودکار"
},
"manualSkip": {
"message": "ردکردن دستی"
},
"showOverlay": {
"message": "نمایش در نوار پیشرفت"
},
"disable": {
"message": "غیرفعال کردن"
},
"showOverlay_POI": {
"message": "نمایش در نوار پیشرفت"
},
"showOverlay_full": {
"message": "نمایش نام"
},
"category": {
"message": "دسته بندی"
},
"bracketNow": {
"message": "(اکنون)"
},
"moreCategories": {
"message": "نمایش دسته‌بندی‌ها"
},
"bracketEnd": {
"message": "(پایان)"
},
"acceptPermission": {
"message": "تأیید دسترسی"
},
"incorrectCategory": {
"message": "تغییر دسته بندی"
},
"guidelines": {
"message": "دستورالعمل‌ها"
},
"readTheGuidelines": {
"message": "دستورالعمل‌ها را بخوانید!!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"help": {
"message": "راهنما"
},
"GotIt": {
"message": "فهمیدم",
"description": "Used as the button to dismiss a tooltip"
},
"hideForever": {
"message": "مخفی‌سازی برای همیشه"
},
"Donate": {
"message": "کمک مالی"
},
"hideDonationLink": {
"message": "پنهان کردن لینک کمک مالی"
},
"helpPageThanksForInstalling": {
"message": "ازینکه افزونه SponserBlock را نصب کردید سپاسگزاریم."
},
"helpPageReviewOptions": {
"message": "لطفاً تنظیمات زیر را بررسی کنید"
},
"helpPageHowSkippingWorks": {
"message": "چگونه ردکردن کار می‌کند"
},
"Submitting": {
"message": "ثبت نمودن"
},
"Editing": {
"message": "ویرایش"
},
"helpPageCopyOfDatabase": {
"message": "آیا می‌توان یک کپی از پایگاه داده را دریافت کرد؟ اگر شما یک روز ناپدید شدید چه می‌شود؟"
},
"helpPageCopyOfDatabase1": {
"message": "پایگاه داده به‌صورت عمومی در دسترس است در"
},
"helpPageCopyOfDatabase2": {
"message": "سورس کد به‌صورت رایگان ارائه شده است. بنابراین، اگر اتفاقی برای من بیفتد، ارسالات شما از بین نمی‌روند."
},
"helpPageSourceCode": {
"message": "از کجا سورس کد را بگیرم؟"
},
"Credits": {
"message": "سازندگان"
},
"LearnMore": {
"message": "بیشتر بدانید"
},
"dayAbbreviation": {
"message": "روز",
"description": "100d"
},
"hourAbbreviation": {
"message": "ساعت",
"description": "100h"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,118 +0,0 @@
{
"fullName": {
"message": "SponsorBlock para YouTube - I-skip ang mga Sponsorships",
"description": "Name of the extension."
},
"Description": {
"message": "I-skip ang mga sponsorships, subscription begging at marami pa sa mga YouTube videos. I-report ang mga sponsor sa videos na napapanood mo upang makatipid sa oras ng iba.",
"description": "Description of the extension."
},
"429": {
"message": "Masyadong kang maraming beses na nagsumite ng sponsor times para sa video na ito, sigurado ka na marami yan?"
},
"409": {
"message": "Naisumite na ito noon"
},
"channelWhitelisted": {
"message": "Whitelisted na ang channel na ito!"
},
"Segment": {
"message": "segment"
},
"Segments": {
"message": "segments"
},
"upvoteButtonInfo": {
"message": "I-upvote ang submission na ito"
},
"reportButtonTitle": {
"message": "I-report"
},
"reportButtonInfo": {
"message": "I-report ang submission na ito bilang mali."
},
"Dismiss": {
"message": "I-dismiss"
},
"Loading": {
"message": "Loading..."
},
"Hide": {
"message": "Hindi ipakita"
},
"hitGoBack": {
"message": "Pindutin ang \"unskip\" para bumalik ka sa iyong dating posisyon sa video."
},
"unskip": {
"message": "I-unskip"
},
"reskip": {
"message": "I-reskip"
},
"unmute": {
"message": "I-unmute"
},
"paused": {
"message": "Naka-pause na"
},
"manualPaused": {
"message": "Tigilan ang timer"
},
"confirmMSG": {
"message": "Para sa pag-edit o tanggalin ng mga individual values, pindutin ang info button o ang extension icon sa kanang sulok sa itaas."
},
"clearThis": {
"message": "Sigurado ka bang gusto mong tanggalin ito?"
},
"Unknown": {
"message": "May error na nagkaroon sa pagsusumite sa iyong sponsor times, subukang muli mamaya."
},
"sponsorFound": {
"message": "May mga segments sa database para sa video na ito!"
},
"sponsor404": {
"message": "Walang nakitang segment"
},
"sponsorStart": {
"message": "Simula ang Segment Ngayon"
},
"sponsorEnd": {
"message": "Nagtatapos ang Segment Ngayon"
},
"sponsorCancel": {
"message": "Kanselahin ang Paggawa ng Segment"
},
"noVideoID": {
"message": "Walang YouTube video na nakita.\nKung mali ito, i-refresh ang tab mo."
},
"refreshSegments": {
"message": "I-refresh ang mga segments"
},
"success": {
"message": "Tagumpay na!"
},
"voted": {
"message": "Bumoto na!"
},
"connectionError": {
"message": "Nagkaroon ng error sa koneksyon. Error code: "
},
"clearTimes": {
"message": "I-clear ang mga segments"
},
"openPopup": {
"message": "I-buksan ang SponsorBlock popup"
},
"closePopup": {
"message": "Isara ang Popup"
},
"SubmitTimes": {
"message": "I-submit ang mga segments"
},
"submitCheck": {
"message": "Sigurado ka bang gusto mong isumite ito?"
},
"whitelistChannel": {
"message": "I-whitelist itong channel"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,18 +0,0 @@
{
"fullName": {
"message": "યુટ્યુબ માટે સ્પોન્સરબ્લોક - સ્પોન્સરશિપ છોડી દો",
"description": "Name of the extension."
},
"400": {
"message": "સર્વરે કહ્યું કે આ વિનંતી અમાન્ય છે"
},
"429": {
"message": "તમે આ એક વિડિઓ માટે ઘણી પ્રાયોજક વખત સબમિટ કરી છે, શું તમને ખાતરી છે કે આ ઘણા છે?"
},
"409": {
"message": "આ અગાઉ રજુ કરવામાં આવી છે"
},
"channelWhitelisted": {
"message": "ચેનલ વ્હાઇટલિસ્ટેડ!"
}
}

View File

@@ -1,762 +0,0 @@
{
"fullName": {
"message": "חוסם פרסומות ליוטיוב - דלג על החסויות",
"description": "Name of the extension."
},
"Description": {
"message": "דלג על החסויות, ההתחננויות לעשות מנוי ועוד בסרטוני יוטיוב. דווח על ספונסרים בסרטונים שאתה צופה בהם כדי לחסוך לאחרים זמן.",
"description": "Description of the extension."
},
"400": {
"message": "השרת אמר שהבקשה הזו לא בתוקף"
},
"429": {
"message": "הגשת יותר מדי זמני חסויות עבור הסרטון היחיד הזה, אתה בטוח שיש כל כך הרבה?"
},
"409": {
"message": "זה כבר הוגש בעבר"
},
"channelWhitelisted": {
"message": "הערוץ הורשה!"
},
"Segment": {
"message": "מקטע"
},
"Segments": {
"message": "מקטעים"
},
"SegmentsCap": {
"message": "מקטעים"
},
"Chapters": {
"message": "פרקים"
},
"renderAsChapters": {
"message": "עיבוד מקטעים כפרקים",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "הצגת מקטע נוכחי לצד זמן וידאו"
},
"upvoteButtonInfo": {
"message": "הצבע לדיווח הזה"
},
"reportButtonTitle": {
"message": "דווח"
},
"reportButtonInfo": {
"message": "דווח על הדיווח הזה כלא נכון."
},
"Dismiss": {
"message": "סגור"
},
"Loading": {
"message": "טוען..."
},
"Hide": {
"message": "אל תציג אף פעם"
},
"hitGoBack": {
"message": "לחץ על דלג אחורה כדי להגיע מאיפה שבאת."
},
"unskip": {
"message": "דלג אחורה"
},
"reskip": {
"message": "דלג קדימה"
},
"unmute": {
"message": "ביטול השתקה"
},
"paused": {
"message": "מושהה"
},
"manualPaused": {
"message": "טיימר נעצר"
},
"confirmMSG": {
"message": "כדי לערוך או למחוק קטעים יחידים, לחץ על כפתור המידע או פתח את החלונית של ההרחבה בדפדפן ע\"י לחיצה על הסמליל בצד ימין למעלה (יכול להיות ששמאל למעלה בדפדפנים בעברית)."
},
"clearThis": {
"message": "אתה בטוח שאתה רוצה לנקות את זה?\n\n"
},
"Unknown": {
"message": "אירעה שגיאה בדיווח הזמנים, נסה שוב מאוחר יותר."
},
"sponsorFound": {
"message": "לסרטון הזה יש קטעים במאגר הנתונים!"
},
"sponsor404": {
"message": "לא נמצאו מקטעים"
},
"sponsorStart": {
"message": "מקטע מתחיל עכשיו"
},
"sponsorEnd": {
"message": "מקטע נגמר עכשיו"
},
"sponsorCancel": {
"message": "ביטול יצירת מקטע"
},
"noVideoID": {
"message": "לא נמצא סרטון יוטיוב.\nאם זה לא נכון, רענן את הכרטיסייה."
},
"refreshSegments": {
"message": "ריענון מקטעים"
},
"success": {
"message": "הצלחה!"
},
"voted": {
"message": "הצבעת!"
},
"serverDown": {
"message": "נראה שהשרת נפל. צור קשר עם המפתח מיד."
},
"connectionError": {
"message": "התקבלה שגיאת חיבור. קוד השגיאה: "
},
"segmentsStillLoading": {
"message": "מקטע עדיין נטען..."
},
"clearTimes": {
"message": "נקה מקטעים"
},
"openPopup": {
"message": "פתח חלונית SponsorBlock"
},
"closePopup": {
"message": "סגור חלון"
},
"closeIcon": {
"message": "סגירת סמליל"
},
"SubmitTimes": {
"message": "הגש מקטעים"
},
"sortSegments": {
"message": "מיון מקטעים"
},
"submitCheck": {
"message": "אתה בטוח שאתה רוצה להזין את זה?"
},
"whitelistChannel": {
"message": "הרשה ערוץ"
},
"removeFromWhitelist": {
"message": "הסר ערוץ מרשימת ערוצים מורשים"
},
"voteOnTime": {
"message": "הצבע על מקטע"
},
"Submissions": {
"message": "הזנות"
},
"savedPeopleFrom": {
"message": "הצלת אנשים מ "
},
"viewLeaderboard": {
"message": "לוח מובילים"
},
"recordTimesDescription": {
"message": "הגש"
},
"submissionEditHint": {
"message": "עריכת מקטע תופיע אחרי שתלחץ הגש",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "רמז: אתה יכול להגדיר קיצורים מהמקלדת דרך תפריט אפשרויות כדי להזין זמנים"
},
"clearTimesButton": {
"message": "ניקוי זמנים"
},
"submitTimesButton": {
"message": "הגשת זמנים"
},
"publicStats": {
"message": "זה משמש בדף הסטטיסטיקה הציבורי כדי להראות כמה תרמת. ניתן לצפות בזה"
},
"Username": {
"message": "שם משתמש"
},
"setUsername": {
"message": "הגדרת שם משתמש"
},
"copyPublicID": {
"message": "העתקת מזהה משתמש פומבי"
},
"copySegmentID": {
"message": "העתקת מזהה מקטע"
},
"discordAdvert": {
"message": "הצטרפות לשרת הדיסקורד הרשמי כדי לביא הצעות וחוות דעת!"
},
"hideThis": {
"message": "להסתיר את זה"
},
"Options": {
"message": "אפשרויות"
},
"showButtons": {
"message": "הצגת כפתורים על הנגן של יוטיוב"
},
"hideButtons": {
"message": "הסתרת כפתורים על הנגן של יוטיוב"
},
"hideButtonsDescription": {
"message": "זה מחביא את הכפתורים שמופיעים בנגן YouTube להגיש מקטעי דילוג."
},
"showSkipButton": {
"message": "השארת כפתור הדילוג להדגשה על הנגן"
},
"showInfoButton": {
"message": "הראה כפתור מידע בנגן YouTube"
},
"hideInfoButton": {
"message": "החבא כפתור מידע בנגן YouTube"
},
"autoHideInfoButton": {
"message": "הסתרה אוטומטית של כפתורי אינפורמציה"
},
"hideDeleteButton": {
"message": "הסתרת כפתור מחיקה על הנגן של יוטיוב"
},
"showDeleteButton": {
"message": "הצגת כפתור מחיקה על הנגן של יוטיוב"
},
"whatViewTracking": {
"message": "תכונה זו עוקבת אחר אילו מקטעים דילגת כדי לאפשר למשתמשים לדעת עד כמה ההגשה שלהם עזרה לאחרים והשתמשה כמדד יחד עם הצבעות בעד כדי להבטיח שספאם לא ייכנס למסד הנתונים. התוסף שולח הודעה לשרת בכל פעם שאתה מדלג על קטע. אני מקווה שרוב האנשים לא ישנו את ההגדרה הזו כדי שמספרי התצוגה יהיו מדויקים. :)"
},
"website": {
"message": "אתר",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "קוד מקור",
"description": "Used on Firefox Store Page"
},
"nextChapterKeybind": {
"message": "הפרק הבא",
"description": "Keybind label"
},
"disableSkipping": {
"message": "דילוג מופעל"
},
"enableSkipping": {
"message": "דילוג מושבת"
},
"yourWork": {
"message": "העבודה שלך",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "נראה שהשרת עמוס יתר על המידה. יש לנסות שוב בעוד מספר שניות."
},
"errorCode": {
"message": "קוד שגיאה: "
},
"skip": {
"message": "דילוג"
},
"mute": {
"message": "השתקה"
},
"full": {
"message": "וידיאו מלא",
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
"message": "דילוג {0}?"
},
"mute_category": {
"message": "השתק {0}?"
},
"skip_to_category": {
"message": "דילוג אל {0}?",
"description": "Used for skipping to things (Skip to Highlight)"
},
"skipped": {
"message": "{0} דולג",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} מושתק",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "דילוג אל {0}",
"description": "Used for skipping to things (Skipped to Highlight)"
},
"disableAutoSkip": {
"message": "השבתת דילוג אוטומטי"
},
"enableAutoSkip": {
"message": "הפעלת דילוג אוטומטי"
},
"audioNotification": {
"message": "הודעת שמע בעת דילוג"
},
"youHaveSkipped": {
"message": "דילגת "
},
"minLower": {
"message": "דקה"
},
"minsLower": {
"message": "דקות"
},
"hourLower": {
"message": "שעה"
},
"hoursLower": {
"message": "שעות"
},
"youHaveSavedTime": {
"message": "חסכת לאנשים",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": " מחייהם",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"createdBy": {
"message": "נוצר על ידי"
},
"supportedSites": {
"message": "אתרים נתמכים: "
},
"add": {
"message": "הוסף"
},
"showUploadButton": {
"message": "הצגת כפתור העלאה"
},
"save": {
"message": "שמירה"
},
"reset": {
"message": "איתחול"
},
"exportOptionsCopy": {
"message": "עריכה/העתקה"
},
"exportOptionsDownload": {
"message": "שמירה לקובץ"
},
"exportOptionsUpload": {
"message": "טעינה מקובץ"
},
"setOptions": {
"message": "הגדרת אפשרויות"
},
"confirmNoticeTitle": {
"message": "הגשת מקטע"
},
"submit": {
"message": "הגשה"
},
"cancel": {
"message": "ביטול"
},
"delete": {
"message": "מחיקה"
},
"preview": {
"message": "תצוגה מקדימה"
},
"unsubmitted": {
"message": "לא מוגש"
},
"inspect": {
"message": "סקירה"
},
"edit": {
"message": "עריכה"
},
"to": {
"message": "עד ל",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"CopiedExclamation": {
"message": "הועתק!",
"description": "Used after something has been copied to the clipboard. Example: 'Copied!'"
},
"category_sponsor": {
"message": "נותן חסות"
},
"category_exclusive_access": {
"message": "גישה אקסקלוסיבית"
},
"category_filler_short": {
"message": "מסנן"
},
"category_music_offtopic": {
"message": "מוזיקה: קטעים ללא מוזיקה"
},
"category_music_offtopic_short": {
"message": "ללא מוזיקה"
},
"category_poi_highlight": {
"message": "קטע חשוב"
},
"category_chapter": {
"message": "פרק"
},
"autoSkip": {
"message": "דילוג אוטומטי"
},
"manualSkip": {
"message": "דילוג ידני"
},
"showOverlay": {
"message": "הראה בשורת חיפוש"
},
"disable": {
"message": "מושבת"
},
"showOverlay_POI": {
"message": "הראה בשורת חיפוש"
},
"showOverlay_full": {
"message": "הצגת תוית"
},
"showOverlay_chapter": {
"message": "הצגת פרקים"
},
"category": {
"message": "קטגוריה"
},
"skipOption": {
"message": "אפשרות דילוג",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"bracketNow": {
"message": "(עכשיו)"
},
"moreCategories": {
"message": "עוד קטגוריות"
},
"chooseACategory": {
"message": "בחירת קטגוריה"
},
"bracketEnd": {
"message": "(סוף)"
},
"End": {
"message": "סוף",
"description": "Button that skips to the end of a segment"
},
"downvoteDescription": {
"message": "זמן שגוי/לא נכון"
},
"incorrectVote": {
"message": "שגוי"
},
"incorrectCategory": {
"message": "שינוי קטגוריה"
},
"multipleSegments": {
"message": "מספר מקטעים"
},
"guidelines": {
"message": "הנחיות"
},
"readTheGuidelines": {
"message": "קראו את ההנחיות!!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"categoryUpdate1": {
"message": "קטגוריות נמצאות כאן!"
},
"help": {
"message": "עזרה"
},
"GotIt": {
"message": "הבנתי",
"description": "Used as the button to dismiss a tooltip"
},
"experiementOptOut": {
"message": "לא מעוניין להשתתף בניסויים עתידיים",
"description": "This is used in a popup about a new experiment to get a list of unlisted videos to back up since all unlisted videos uploaded before 2017 will be set to private."
},
"hideForever": {
"message": "הסתרה לעד"
},
"questionButton": {
"message": "יש לי שאלה נוספת"
},
"warningConfirmButton": {
"message": "הבנתי את הסיכונים"
},
"warningError": {
"message": "שגיאה בעת ניסיון לאשר אזהרה:"
},
"Donate": {
"message": "תרומה"
},
"considerDonating": {
"message": "עזרו לממן את הפיתוח"
},
"hideDonationLink": {
"message": "הסתרת כפתור תרומה"
},
"darkModeOptionsPage": {
"message": "מצב כהה בדף האפשרויות"
},
"helpPageThanksForInstalling": {
"message": "תודה שהתקנת את ספונסרבלוק."
},
"helpPageReviewOptions": {
"message": "נא לסקור את האפשרויות הבאות"
},
"helpPageHowSkippingWorks": {
"message": "כיצד דילוג עובד"
},
"Submitting": {
"message": "שולח"
},
"Editing": {
"message": "עריכה"
},
"helpPageTooSlow": {
"message": "הקצב איטי מדי"
},
"helpPageCopyOfDatabase2": {
"message": "קוד המקור זמין באופן חופשי ובחינם. אז, אפילו אם משהו יקרה לי, המקטעים שהגשתם לא יאבדו."
},
"helpPageNews": {
"message": "חדשות וכיצד זה נעשה"
},
"helpPageSourceCode": {
"message": "היכן אוכל להשיג את קוד המקור?"
},
"Credits": {
"message": "קרדיטים"
},
"LearnMore": {
"message": "למידע נוסף"
},
"FullDetails": {
"message": "פרטים מלאים"
},
"CopyDownvoteButtonInfo": {
"message": "הצבעה שלילית ויצירת עותק מקומי שניתן לשלוח מחדש"
},
"OpenCategoryWikiPage": {
"message": "פתיחת דף הוויקי של קטגוריה זו."
},
"CopyAndDownvote": {
"message": "העתקה ודירוג שלילי"
},
"ContinueVoting": {
"message": "המשך הצבעה"
},
"ChangeCategoryTooltip": {
"message": "זה מיידית ישפיע על כל המקטעים שלך"
},
"downvote": {
"message": "דירוג שלילי"
},
"upvote": {
"message": "דירוג חיובי"
},
"hideSegment": {
"message": "הסתרת מקטע"
},
"skipSegment": {
"message": "דילוכ מקטע"
},
"playChapter": {
"message": "הפעלת פרק"
},
"SponsorTimeEditScrollNewFeature": {
"message": "השתמש בגלגלת בזמן שהעכבר מעל הזמן בשלב העריכה על מנת לשנות את הזמן יותר מהר. שילוב של הלחצן Ctrl/Shift יכולים לשנות את מהירות השינוי."
},
"categoryPillNewFeature": {
"message": "חדש! ראה מתי וידאו בשלמותו הוא פרסומת או פרסום עצמי"
},
"dayAbbreviation": {
"message": "י",
"description": "100d"
},
"hourAbbreviation": {
"message": "ש'",
"description": "100h"
},
"optionsTabBehavior": {
"message": "התנהגות",
"description": "Appears in Options as a tab header for options related to categories and skipping behavior. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabInterface": {
"message": "ממשק",
"description": "Appears in Options as a tab header for options related to GUI and sounds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabKeyBinds": {
"message": "קיצורי מקלדת",
"description": "Appears in Options as a tab header for keybinds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabBackup": {
"message": "גיבוי/שחזור",
"description": "Appears in Options as a tab header for options related to saving/restoring your settings. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabAdvanced": {
"message": "שונות",
"description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"noticeVisibilityLabel": {
"message": "דילוג על הופעת הודעה",
"description": "Option label"
},
"unbind": {
"message": "ביטול איגוד",
"description": "Unbind keyboard shortcut"
},
"notSet": {
"message": "לא הוגדר"
},
"change": {
"message": "שנה"
},
"youtubeKeybindWarning": {
"message": "זה הוא קיצור דרך מובנה ביוטיוב. האם אתה בטוח שאתה רוצה להשתמש בו?"
},
"betaServerWarning": {
"message": "שרת ביטא מופעל!"
},
"openOptionsPage": {
"message": "פתיחת דף האפשרויות"
},
"resetToDefault": {
"message": "איפוס הגדרות לברירת המחדל"
},
"confirmResetToDefault": {
"message": "האם בוודאות ברצונך לאפס את כל ההגדרות לערכי ברירת המחדל שלהן? אי אפשר לבטל את זה."
},
"exportSegments": {
"message": "ייצוא מקטעים"
},
"importSegments": {
"message": "ייבוא מקטעים"
},
"Import": {
"message": "ייבוא",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
},
"redeemSuccess": {
"message": "המימוש הצליח!"
},
"redeemFailed": {
"message": "רשיון מפתח שגוי"
},
"hideUpsells": {
"message": "הסתרת אפשרויות שאינן זמינות ללא תשלום נוסף"
},
"chooseACountry": {
"message": "בחירת מדינה"
},
"noDiscount": {
"message": "לא נמצאה זכאות להנחה"
},
"discountLink": {
"message": "קישור להנחה (ראה מחיר ורוד)"
},
"selectYourCountry": {
"message": "בחירת מדינתך"
},
"alreadyDonated": {
"message": "אם תרמת סכום כלשהו בעבר, ניתן לממש גישה בחינם באמצעות דואר אלקטרוני:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "אם אינך יכול להרשות לעצמך לרכוש רישיון, יש ללחוץ {here} כדי לראות אם קיימת זכאות להנחה",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
"message": "כניסה באמצעות Patreon"
},
"redeem": {
"message": "מימוש"
},
"joinOnPatreon": {
"message": "מינוי באמצעות Patreon"
},
"oneTimePurchase": {
"message": "רכישה חד פעמית"
},
"enterLicenseKey": {
"message": "הזנת מפתח רישיון"
},
"chaptersPage1": {
"message": "התכונה חסימת פרקים במקור המונים זמינה רק לאנשים שרוכשים רישיון, או לאנשים שקיבלו גישה בחינם עקב תרומותיהם בעבר"
},
"chaptersPage2": {
"message": "הערה: ההרשאה להגשת פרקים עדיין מבוססת על מוניטין מחושב. רכישת רישיון מאפשרת לך לראות רק פרקים שהוגשו על ידי אחרים",
"description": "On the chapters page for getting access to the paid chapters feature"
},
"chapterNewFeature": {
"message": "תכונה חדשה: פרקים מותאמים אישית ממקור המונים. אלו הם מקטעים בעלי שמות מותאמים אישית בסרטונים שניתן לערום כדי לקבל יותר ויותר דיוק. רכישת רישיון לצפייה בפרקים שנשלחו בסרטון זה כגון: ",
"description": "After the comma, a list of chapters for this video will appear"
},
"chapterNewFeature2": {
"message": "תכונה חדשה: פרקים מותאמים אישית ממקור המונים. אלו הם קטעים בעלי שמות מותאמים אישית בסרטונים שניתן לערום כדי לקבל יותר ויותר דיוק. יש לך גישה בחינם, יש להפעיל באפשרויות."
},
"unsubmittedSegmentCounts": {
"message": "כרגע יש לך {0} ב-{1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
},
"unsubmittedSegmentCountsZero": {
"message": "אין לך כרגע מקטעים שלא הוגשו",
"description": "Replaces 'unsubmittedSegmentCounts' string when there are no unsubmitted segments"
},
"unsubmittedSegmentsSingular": {
"message": "מקטע שלא הוגש",
"description": "Example: You currently have 1 *unsubmitted segment* on 1 video"
},
"unsubmittedSegmentsPlural": {
"message": "מקטעים שלא הוגשו",
"description": "Example: You currently have 12 *unsubmitted segments* on 5 videos"
},
"videosSingular": {
"message": "סרטון",
"description": "Example: You currently have 3 unsubmitted segments on 1 *video*"
},
"videosPlural": {
"message": "סרטונים",
"description": "Example: You currently have 12 unsubmitted segments on 5 *videos*"
},
"clearUnsubmittedSegments": {
"message": "ניקוי כל המקטעים",
"description": "Label for a button in settings"
},
"clearUnsubmittedSegmentsConfirm": {
"message": "האם בוודאות ברצונך למחוק את כל המקטעים שלא הוגשוו?",
"description": "Confirmation message for the Clear unsubmitted segments button"
},
"showUnsubmittedSegments": {
"message": "הצגת מקטעים",
"description": "Show/hide button for the unsubmitted segments list"
},
"hideUnsubmittedSegments": {
"message": "הסתרת מקטעים",
"description": "Show/hide button for the unsubmitted segments list"
},
"videoID": {
"message": "מזהה סרטון",
"description": "Header of the unsubmitted segments list"
},
"segmentCount": {
"message": "ספירת מקטעים",
"description": "Header of the unsubmitted segments list"
},
"actions": {
"message": "פעולות",
"description": "Header of the unsubmitted segments list"
},
"exportSegmentsAsURL": {
"message": "שיתוף כקישור"
},
"segmentFetchFailureWarning": {
"message": "אזהרה: השרת עדיין לא הגיב עם מקטעים. ייתכן שלמעשה יש מקטעים בסרטון הזה שכבר נשלחו אבל פשוט לא קיבלת אותם בגלל בעיות בשרת."
}
}

View File

@@ -1,168 +0,0 @@
{
"fullName": {
"message": "YouTube के लिए SponsorBlock - प्रायोजन छोड़ें",
"description": "Name of the extension."
},
"Description": {
"message": "YouTube वीडियो पर प्रायोजन, सदस्यता भीख और अधिक छोड़ें। दूसरों के समय को बचाने के लिए आपके द्वारा देखे जाने वाले वीडियो पर प्रायोजकों की रिपोर्ट करें।",
"description": "Description of the extension."
},
"400": {
"message": "सर्वर ने कहा कि यह अनुरोध अमान्य था"
},
"429": {
"message": "आपने इस एक वीडियो के लिए बहुत सारे प्रायोजक बार प्रस्तुत किए हैं, क्या आप सुनिश्चित हैं कि यह कई हैं?"
},
"409": {
"message": "यह पहले भी प्रस्तुत किया जा चुका है"
},
"channelWhitelisted": {
"message": "चैनल श्वेतसूची में!"
},
"Segment": {
"message": "खंड"
},
"Segments": {
"message": "खंडों"
},
"SegmentsCap": {
"message": "खंड"
},
"Chapters": {
"message": "चैप्टर"
},
"renderAsChapters": {
"message": "खंडो को चैप्टर के रूप में दिखाएँ",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "वीडियो समय के अलावा वर्तमान खंड दिखाएँ"
},
"upvoteButtonInfo": {
"message": "इस प्रस्तुतीकरण को वॉट दें"
},
"reportButtonTitle": {
"message": "रिपोर्ट"
},
"reportButtonInfo": {
"message": "इस प्रस्तुतीकरण को गलत रिपोर्ट करें"
},
"Dismiss": {
"message": "रद्द करें"
},
"Loading": {
"message": "लोड कर रहा है..."
},
"Hide": {
"message": "कभी नही दिखाएँ"
},
"hitGoBack": {
"message": "जहाँ से आप आये थी वहां पर जाने के लिए अनस्किप दबाएं।"
},
"unskip": {
"message": "अनस्किप"
},
"reskip": {
"message": "रिस्किप"
},
"unmute": {
"message": "अनम्यूट"
},
"paused": {
"message": "रुका हुआ"
},
"manualPaused": {
"message": "टाइम रुका"
},
"confirmMSG": {
"message": "अलग-अलग मानों को संपादित करने या हटाने के लिए, जानकारी बटन पर क्लिक करें या ऊपरी दाएं कोने में एक्सटेंशन आइकन पर क्लिक करके एक्सटेंशन पॉपअप खोलें।"
},
"clearThis": {
"message": "क्या आप वाकई इसे साफ़ करना चाहते हैं?\n\n"
},
"Unknown": {
"message": "आपका प्रायोजक समय सबमिट करने में एक त्रुटि हुई, कृपया बाद में पुन: प्रयास करें।"
},
"sponsorFound": {
"message": "इस वीडियो के खंड डेटाबेस में हैं!"
},
"sponsor404": {
"message": "कोई खंड नहीं मिले"
},
"sponsorStart": {
"message": "खंड अभी शुरू करें"
},
"sponsorEnd": {
"message": "खंड अब समाप्त होता है"
},
"sponsorCancel": {
"message": "खंड बनाना रद्द करें"
},
"noVideoID": {
"message": "कोई YouTube वीडियो नही मिली।\nअगर यह गलत है, तो इस तब को रिफ्रेश कीजिये।"
},
"refreshSegments": {
"message": "खंड रिफ्रेश करें"
},
"success": {
"message": "सफल!"
},
"voted": {
"message": "वॉट किया!"
},
"serverDown": {
"message": "ऐसा लगता है की सर्वर डाउन है। कृपया डेवलपर से तुरंत संपर्क करें।"
},
"connectionError": {
"message": "एक संपर्क गलती हो गयी है। गलती कूट: "
},
"clearTimes": {
"message": "खंड हटाएँ"
},
"openPopup": {
"message": "SponsorBlock पॉपअप खोलें"
},
"closePopup": {
"message": "पॉपअप बंद करें"
},
"closeIcon": {
"message": "आइकॉन बंद करें"
},
"SubmitTimes": {
"message": "खंड दर्ज करें"
},
"sortSegments": {
"message": "खंड छांटें"
},
"submitCheck": {
"message": "क्या आप वाकई इसे दर्ज करना चाहते हैं?"
},
"whitelistChannel": {
"message": "चैनल व्हाइटलिस्ट करें"
},
"removeFromWhitelist": {
"message": "चैनल को व्हाइटलिस्ट से हटाएँ"
},
"voteOnTime": {
"message": "एक खंड को वॉट करें"
},
"Submissions": {
"message": "प्रविष्टियां"
},
"savedPeopleFrom": {
"message": "आपने लोगो को बचाया है "
},
"viewLeaderboard": {
"message": "लीडरबोर्ड"
},
"recordTimesDescription": {
"message": "दर्ज करें"
},
"submissionEditHint": {
"message": "सबमिट पर क्लिक करने के बाद अनुभाग सम्पादन दिखाई देगा",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"Options": {
"message": "विकल्प"
}
}

View File

@@ -1,856 +0,0 @@
{
"fullName": {
"message": "SponsorBlock za YouTube - preskoči sponzore",
"description": "Name of the extension."
},
"Description": {
"message": "Preskoči sponzore, zamolbe za pretplatu i drugo na YouTube videima. Prijavi sponzore na videima koje gledaš kako bi uštedio drugima vrijeme.",
"description": "Description of the extension."
},
"400": {
"message": "Server je rekao da je zahtjev neispravan"
},
"429": {
"message": "Unio si previše vremena sponzora za ovaj video, jesi li siguran da ih ima toliko?"
},
"409": {
"message": "Ovo je već unešeno prije"
},
"channelWhitelisted": {
"message": "Kanal je dodan na popis dopuštenih!"
},
"Segment": {
"message": "odsječak"
},
"Segments": {
"message": "odsječci"
},
"SegmentsCap": {
"message": "Odsječci"
},
"Chapters": {
"message": "Poglavlja"
},
"renderAsChapters": {
"message": "Iscrtaj isječke kao poglavlja",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"upvoteButtonInfo": {
"message": "Glasaj za ovaj unos"
},
"reportButtonTitle": {
"message": "Prijavi"
},
"reportButtonInfo": {
"message": "Prijavi unos kao nesipravan."
},
"Dismiss": {
"message": "Odbaci"
},
"Loading": {
"message": "Učitavanje..."
},
"Hide": {
"message": "Nikad ne prikazuj"
},
"hitGoBack": {
"message": "Klikni unskip kako bi se vratio otkuda si došao."
},
"unskip": {
"message": "Ne preskači"
},
"reskip": {
"message": "Preskoči opet"
},
"unmute": {
"message": "Uključi zvuk"
},
"paused": {
"message": "Pauzirano"
},
"manualPaused": {
"message": "Timer zaustavljen"
},
"confirmMSG": {
"message": "Kako bi uredio ili obrisao pojedinačne vrijednosti, klikni na gumb info ili otvori okvir dodatka klikom na ikonu dodatka u gornjem desnom kutu."
},
"clearThis": {
"message": "Jesi li siguran da želiš očistiti ovo?\n\n"
},
"Unknown": {
"message": "Dogodila se pogreška pri unošenju tvojih vremena sponzora, molim te probaj ponovno kasnije."
},
"sponsorFound": {
"message": "Ovaj video ima isječke u bazi podataka!"
},
"sponsor404": {
"message": "Nije pronađen isječak"
},
"sponsorStart": {
"message": "Isječak započinje sada"
},
"sponsorEnd": {
"message": "Isječak završava sada"
},
"sponsorCancel": {
"message": "Otkaži Kreiranje Segmenta"
},
"noVideoID": {
"message": "Nijedan YouTube video nije pronađen.\nAko ovo nije točno, osvježite karticu."
},
"refreshSegments": {
"message": "Osvježi segmente"
},
"success": {
"message": "Uspjeh!"
},
"voted": {
"message": "Glas podnešen!"
},
"serverDown": {
"message": "Čini se da server ne radi. Kontaktiraj razvojne programere odmah."
},
"connectionError": {
"message": "Dogodija se greška u povezivanju. Kod pogreške: "
},
"clearTimes": {
"message": "Očisti isječke"
},
"openPopup": {
"message": "Otvori okvir SponsorBlock"
},
"closePopup": {
"message": "Zatvori izbornik"
},
"SubmitTimes": {
"message": "Podnesi isječke"
},
"sortSegments": {
"message": "Razvrstaj isječke"
},
"submitCheck": {
"message": "Jesi li siguran da želiš unijeti ovo?"
},
"whitelistChannel": {
"message": "Dopusti kanal"
},
"removeFromWhitelist": {
"message": "Izbaci kanal iz bijele liste"
},
"voteOnTime": {
"message": "Glasaj za isječak"
},
"Submissions": {
"message": "Prijava"
},
"savedPeopleFrom": {
"message": "Spasili ste ljude od "
},
"viewLeaderboard": {
"message": "Ljestvica"
},
"recordTimesDescription": {
"message": "Pošalji"
},
"submissionEditHint": {
"message": "Uređivanje dijela prikazat će se nakon što pritisneš gumb za slanje",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "Savjet: Možete namjestiti tipke za podnošenje u opcijama"
},
"clearTimesButton": {
"message": "Očisti vremena"
},
"submitTimesButton": {
"message": "Unesi vremena"
},
"publicStats": {
"message": "Ovo se koristi na stranici sa javnim statistikama da se pokaže koliko se pridonijeli. Pogledajte"
},
"Username": {
"message": "Korisničko ime"
},
"setUsername": {
"message": "Postavi korisničko ime"
},
"copyPublicID": {
"message": "Kopiraj javni UserID"
},
"copySegmentID": {
"message": "Kopiraj ID odsječka"
},
"discordAdvert": {
"message": "Pridružite nam se u službenoj Discord zajednici i pošaljite svoje prijedloge i povrate informacije!"
},
"hideThis": {
"message": "Sakrij ovo"
},
"Options": {
"message": "Opcije"
},
"showButtons": {
"message": "Prikaži gumbe na YouTube Playeru"
},
"hideButtons": {
"message": "Sakrij gumbe na YouTube playeru"
},
"hideButtonsDescription": {
"message": "Ovo skriva gumbe koji se pojavljuju na YouTube playeru za slanje odsječaka za preskakanje."
},
"showSkipButton": {
"message": "Zadržite gumb za preskakanje i označavanje na playeru"
},
"showInfoButton": {
"message": "Prikaži gumb za informacije na YouTube Playeru"
},
"hideInfoButton": {
"message": "Sakrij gumb za informacije na YouTube Playeru"
},
"autoHideInfoButton": {
"message": "Automatski sakrij info gumb"
},
"hideDeleteButton": {
"message": "Sakrij gumb za brisanje na YouTube playeru"
},
"showDeleteButton": {
"message": "Pokaži gumb za brisanje na YouTube sviraču"
},
"enableViewTracking": {
"message": "Omogući brojanje preskakanja"
},
"whatViewTracking": {
"message": "Ova značajka prati koje dijelove ste preskočili, kako bi korisnicima dali doznanja koliko je njihova prijava pomogla drugima, koristi se kao mjerni podatak zajedni s goreglasom, kako bi se osiguralo da spam ne ulazi u bazu podataka. Proširenje šalje poruku poslužitelju svaki put kada preskočite dio. Nadamo se da puno ljudi neće mijenjati ovu postavku, kako bi broj pregleda bio točan. :)"
},
"enableViewTrackingInPrivate": {
"message": "Omogući praćenje broja preskakanja u Privatnim/Incognito karticama"
},
"enableTrackDownvotes": {
"message": "Pohranjuj doljeglasove dijelova"
},
"whatTrackDownvotes": {
"message": "Svaki odjeljak koji doljeglasate ostati će skriven čak i nakon osvježavanja"
},
"trackDownvotesWarning": {
"message": "Upozorenje: Onemogućavanjem ovoga izbrisati će svi prijašnje spremljeni doljeglasovi"
},
"enableQueryByHashPrefix": {
"message": "Upit po prefiksu kontrolnog identifikacijskog broja"
},
"whatQueryByHashPrefix": {
"message": "Umjesto zahtijeva za odjeljke sa poslužitelja koristeći videoID, prva 4 znaka sigurnosnog kontrolnog broja videoID-a su poslani. Taj poslužitelj poslat će nazad podatke za sva videa sa sličnim sigurnosnim kontrolnim brojevima."
},
"enableRefetchWhenNotFound": {
"message": "Ponovno dohvati odjeljke za nova videa"
},
"whatRefetchWhenNotFound": {
"message": "Ukoliko je video nov, a nisu pronađeni novi odjeljci, nastavit će s dohvaćanjem svako par minuta dok gledate."
},
"showNotice": {
"message": "Prikaži napomenu opet"
},
"showSkipNotice": {
"message": "Pokaži obavijest nakon preskakanja isječka"
},
"showCategoryGuidelines": {
"message": "Prikaži pomoć za kategorije"
},
"website": {
"message": "Web-stranica",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Izvorni kod",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "Napomena je nadograđena!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "Ako ti se i dalje ne sviđa, pritisni gumb „Nikad ne prikazuj”.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setSkipShortcut": {
"message": "Preskoči odsječak",
"description": "Keybind label"
},
"setStartSponsorShortcut": {
"message": "Pokreni/prekini odsječak",
"description": "Keybind label"
},
"setSubmitKeybind": {
"message": "Pošalji odsječke",
"description": "Keybind label"
},
"nextChapterKeybind": {
"message": "Sljedeće poglavlje",
"description": "Keybind label"
},
"previousChapterKeybind": {
"message": "Prethodno poglavlje",
"description": "Keybind label"
},
"keybindDescription": {
"message": "Odaberi tipku upisom tipke i odaberi modifikatorske tipke koje želiš koristiti."
},
"0": {
"message": "Veza istekla. Provjerite svoju internetski vezu. Ako vaš internet radi, poslužitelj je vjerojatno preopterećen ili nedostupan."
},
"disableSkipping": {
"message": "Preskakanje je aktivirano"
},
"enableSkipping": {
"message": "Preskakanje je deaktivirano"
},
"yourWork": {
"message": "Tvoja slanja",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "Čini se da je poslužitelj preopterećen. Pokušajte ponovno za nekoliko sekundi."
},
"errorCode": {
"message": "Kȏd greške: "
},
"skip": {
"message": "Preskoči"
},
"mute": {
"message": "Isključi zvuk"
},
"full": {
"message": "Cijeli video",
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
"message": "Preskočiti {0}?"
},
"mute_category": {
"message": "Utišati {0}?"
},
"skip_to_category": {
"message": "Preskočiti na {0}?",
"description": "Used for skipping to things (Skip to Highlight)"
},
"skipped": {
"message": "Preskočeno: {0}",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "Isključen zvuk: {0}",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "Preskočeno na {0}",
"description": "Used for skipping to things (Skipped to Highlight)"
},
"disableAutoSkip": {
"message": "Deaktiviraj automatsko preskakanje"
},
"enableAutoSkip": {
"message": "Aktiviraj automatsko preskakanje"
},
"audioNotification": {
"message": "Zvučna obavijest pri preskakanju"
},
"audioNotificationDescription": {
"message": "Zvučna obavijest o preskakanju reproducirat će zvuk kad god se odsječak preskoči. Ako je deaktivirano (ili je automatsko preskakanje deaktivirano), zvuk se neće reproducirati."
},
"youHaveSkipped": {
"message": "Do sad ste preskočili "
},
"minLower": {
"message": "min"
},
"minsLower": {
"message": "min"
},
"hourLower": {
"message": "h"
},
"hoursLower": {
"message": "h"
},
"youHaveSavedTime": {
"message": "Spasili ste ljude od",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": " njihova života",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "Provjerite status.sponsor.ajay.app za status poslužitelja."
},
"createdBy": {
"message": "Izradio"
},
"supportedSites": {
"message": "Podržane stranice: "
},
"optionsInfo": {
"message": "Omogući podržavanje Invidiousa, onemogući automatsko preskakanje, sakrij gumbe i drugo."
},
"add": {
"message": "Dodaj"
},
"addInvidiousInstanceError": {
"message": "Ova domena je neispravna. Trebaš unijeti SAMO domenu. Primjer: invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "Resetiraj popis instanci Invidiousa"
},
"resetInvidiousInstanceAlert": {
"message": "Upravo ćeš resetirati popis instanci Invidiousa"
},
"currentInstances": {
"message": "Trenutne instance:"
},
"minDuration": {
"message": "Minimalno trajanje (u sekundama):"
},
"minDurationDescription": {
"message": "Isječci kraći od postavljene vrijednosti neće biti preskočeni ili prikazani u playeru."
},
"enableManualSkipOnFullVideo": {
"message": "Koristi ručno preskakanje kad postoji etiketa za potuni video"
},
"whatManualSkipOnFullVideo": {
"message": "Za osobe koji žele gledati video bez prekida ako je u potpunosti sponzoriran ili samopromocija."
},
"skipNoticeDuration": {
"message": "Duljina trajanja obavijesti o preskakanju (sekunde):"
},
"skipNoticeDurationDescription": {
"message": "Obavijest o preskakanju ostat će na zaslonu barem ovoliko dugo. Za ručno preskakanje može biti duže vidljivo."
},
"showUploadButton": {
"message": "Prikaži gumb za prijenos"
},
"customServerAddress": {
"message": "Adresa SponsorBlock poslužitelja"
},
"save": {
"message": "Spremi"
},
"reset": {
"message": "Resetiraj"
},
"mobileUpdateInfo": {
"message": "Sada se podržava m.youtube.com"
},
"exportOptions": {
"message": "Uvezi/Izvezi sve postavke"
},
"exportOptionsCopy": {
"message": "Uredi/kopiraj"
},
"exportOptionsDownload": {
"message": "Spremi u datoteku"
},
"exportOptionsUpload": {
"message": "Učitaj iz datoteke"
},
"setOptions": {
"message": "Postavi opcije"
},
"incorrectlyFormattedOptions": {
"message": "Ovaj JSON nije ispravno formatiran. Tvoje opcije nisu promijenjene."
},
"confirmNoticeTitle": {
"message": "Pošalji segment"
},
"submit": {
"message": "Pošalji"
},
"cancel": {
"message": "Odustani"
},
"delete": {
"message": "Izbriši"
},
"preview": {
"message": "Pregledaj"
},
"unsubmitted": {
"message": "Neposlano"
},
"inspect": {
"message": "Provjeri"
},
"edit": {
"message": "Uredi"
},
"copyDebugInformationOptions": {
"message": "Kopira informacije u međuspremnik koje treba dati razvojnom programeru kada otkrije grešku / kada to programer zatraži. Osjetljive informacije kao što su vaš korisnički ID, kanali s popisa dopuštenih i prilagođena adresa poslužitelja uklonjeni su. Međutim, sadrži informacije kao što su vaš korisnički agent, preglednik, operativni sustav i broj verzije proširenja. "
},
"to": {
"message": "do",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"CopiedExclamation": {
"message": "Kopirano!",
"description": "Used after something has been copied to the clipboard. Example: 'Copied!'"
},
"generic_guideline1": {
"message": "Uključi glatke prijelaze"
},
"generic_guideline2": {
"message": "Reproducira kao da ništa nije preskočeno"
},
"category_sponsor": {
"message": "Sponzor"
},
"category_sponsor_description": {
"message": "Plaćene promocije, plaćene preporuke i izravne reklame. Nije za samopromociju ili besplatno pozivanje na događaje/kreatore/web stranice/proizvode koji im se sviđaju."
},
"category_sponsor_guideline1": {
"message": "Plaćeni oglasi"
},
"category_sponsor_guideline2": {
"message": "Ne za donacije ili proizvode"
},
"category_selfpromo": {
"message": "Neplaćena promocija ili samopromocija"
},
"category_selfpromo_description": {
"message": "Slično kao „sponzor”, osim za neplaćenu promociju i samopromociju. To uključuje odlomke marketinga, donacija ili informacija o tome, s kim su surađivali."
},
"category_exclusive_access": {
"message": "Eksluzivni pristup"
},
"category_exclusive_access_description": {
"message": "Samo za označavanje cijelih videa. Koristi se kad video prikazuje proizvod, uslugu ili lokaciju za koje su dobili besplatan ili subvencionirani pristup."
},
"category_interaction": {
"message": "Podsjetnik interakcije (Pretplati se)"
},
"category_interaction_short": {
"message": "Podsjetnik interakcije"
},
"category_intro": {
"message": "Stanka/Uvodna animacija"
},
"category_intro_description": {
"message": "Interval bez stvarnog sadržaja. Može biti stanka, statični kadar, ponavljajuća animacija. Ovo se ne bi trebalo koristiti za prijelaze koji sadrže informacije."
},
"category_intro_short": {
"message": "Stanka"
},
"category_outro": {
"message": "Završni kadrovi/Zasluge"
},
"category_preview": {
"message": "Pregled/Sažetak"
},
"category_preview_description": {
"message": "Zbirka isječaka koji pokazuju što dolazi u ovom videu ili drugim videima u nizu gdje se sve informacije kasnije ponavljaju u videu."
},
"category_filler_short": {
"message": "Popuna"
},
"category_music_offtopic": {
"message": "Glazba: Ne-glazbeni dio"
},
"category_music_offtopic_description": {
"message": "Samo za videospotove. Ovo bi se trebalo koristiti samo za dijelove videospotova koji još nisu obuhvaćeni drugom kategorijom."
},
"category_music_offtopic_short": {
"message": "Ne-glazbeni"
},
"category_poi_highlight": {
"message": "Istaknuto"
},
"category_chapter": {
"message": "Poglavlje"
},
"category_chapter_description": {
"message": "Prilagođeno imenovana poglavlja koja opisuju glavne dijelove videa."
},
"category_chapter_guideline1": {
"message": "Ne spominji imena brendova sponzora"
},
"category_chapter_guideline2": {
"message": "Koristi veća poglavlja za opće dijelove"
},
"category_chapter_guideline3": {
"message": "Manja poglavlja se mogu smjestiti unutar većih"
},
"category_livestream_messages": {
"message": "Livestream: čitanje donacija/poruka"
},
"category_livestream_messages_short": {
"message": "Čitanje poruka"
},
"autoSkip": {
"message": "Automatsko preskakanje"
},
"manualSkip": {
"message": "Ručno preskakanje"
},
"disable": {
"message": "Deaktiviraj"
},
"autoSkip_POI": {
"message": "Automatski skoči na početak"
},
"manualSkip_POI": {
"message": "Pitaj kad se učitava video"
},
"showOverlay_full": {
"message": "Prikaži oznaku"
},
"showOverlay_chapter": {
"message": "Prikaži poglavlja"
},
"muteSegments": {
"message": "Dopustite isječke koji isključuju zvuk umjesto da ga preskaču"
},
"previewColor": {
"message": "Boja neposlanog",
"description": "Referring to submissions that have not been sent to the server yet."
},
"category": {
"message": "Kategorija"
},
"skipOption": {
"message": "Preskoči opciju",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "Omogućite poslužitelj za beta testiranje"
},
"testingServerWarning": {
"message": "Svi podnesci i glasovi NEĆE BROJATI u glavnom poslužitelju dok se povezuješ s testnim poslužiteljem. Obavezno deaktiviraj ovo kada želiš slati podneske."
},
"bracketNow": {
"message": "(sada)"
},
"moreCategories": {
"message": "Više kategorija"
},
"chooseACategory": {
"message": "Odaberi kategoriju"
},
"enableThisCategoryFirst": {
"message": "Za slanje odsječaka kategorije „{0}”, moraš je aktivirati u postavkama. Sada ćemo te preusmjeriti na postavke.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"youMustSelectACategory": {
"message": "Moraš odabrati kategoriju za sve segmente koje šalješ!"
},
"bracketEnd": {
"message": "(kraj)"
},
"End": {
"message": "Kraj",
"description": "Button that skips to the end of a segment"
},
"manuallyHidden": {
"message": "ručno skriveno"
},
"invidiousPermissionRefresh": {
"message": "Preglednik je opozvao dopuštenje potrebno za funkcioniranje na Invidiousu i drugim stranicama trećih strana. Pritisni donji gumb za ponovno aktiviranje ove dozvole."
},
"downvoteDescription": {
"message": "Neispravno/krivo vrijeme"
},
"incorrectVote": {
"message": "Neispravno"
},
"harmfulVote": {
"message": "Štetno",
"description": "Used for chapter segments when the text is harmful/offensive to remove it faster"
},
"incorrectCategory": {
"message": "Promijenite kategoriju"
},
"nonMusicCategoryOnMusic": {
"message": "Ovaj je video kategoriziran kao glazba. Je li stvarno ima sponzora? Ako je ovo zapravo „Ne-glazbeni segment”, otvori opcije proširenja i aktiviraj ovu kategoriju. Zatim ovaj segment možeš posalti kao „Ne-glazbeni” umjesto sponzora. Pročitaj smjernice ako nešto nije jasno."
},
"multipleSegments": {
"message": "Više segmenata"
},
"guidelines": {
"message": "Smjernice"
},
"readTheGuidelines": {
"message": "Pročitaj Smjernice!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"categoryUpdate1": {
"message": "Stigle su kategorije!"
},
"categoryUpdate2": {
"message": "Otvori opcije za preskakanje uvoda, kraja, proizvoda itd."
},
"help": {
"message": "Pomoć"
},
"GotIt": {
"message": "Razumijem",
"description": "Used as the button to dismiss a tooltip"
},
"categoryPillTitleText": {
"message": "Ovaj cijeli video označen je kao ova kategorija i previše je integriran da bi se mogao odvojiti"
},
"chapterNameTooltipWarning": {
"message": "Jedno od tvojih imena poglavlja je slično kategoriji. Kad god moguće koristi kategorije."
},
"hideForever": {
"message": "Sakrij zauvijek"
},
"Donate": {
"message": "Doniraj"
},
"helpPageThanksForInstalling": {
"message": "Hvala na instaliranju SponsorBlocka."
},
"helpPageFeatureDisclaimer": {
"message": "Mnoge funkcije su standardno deaktivirane. Ako želiš preskočiti uvode, završne dijelove, koristiti Invidious, itd., aktiviraj ih niže dolje. Također možeš sakriti/prikazati elemente korisničkog sučelja."
},
"Submitting": {
"message": "Slanje"
},
"helpPageSubmitting2": {
"message": "Klikom na gumb za reprodukciju označava se početak segmenta, a klik na ikonu za zaustavljanje označava kraj. Možete pripremiti više sponzora prije nego što pritisnete \"Pošalji\". Klikom na gumb za slanje bit će poslano. Klikom na kantu za smeće izbrisat će se."
},
"Editing": {
"message": "Uređivanje"
},
"helpPageTooSlow": {
"message": "Ovo je presporo"
},
"helpPageSourceCode": {
"message": "Gdje mogu pronaći izvorni kod?"
},
"Credits": {
"message": "Zasluge"
},
"LearnMore": {
"message": "Saznajte više"
},
"OpenCategoryWikiPage": {
"message": "Otvorite wiki stranicu ove kategorije."
},
"CopyAndDownvote": {
"message": "Kopiraj i glasaj protiv"
},
"ContinueVoting": {
"message": "Nastavite glasati"
},
"ChangeCategoryTooltip": {
"message": "Ovo će se odmah primijeniti na vaše isječke"
},
"hideSegment": {
"message": "Sakri odsječak"
},
"dayAbbreviation": {
"message": "d",
"description": "100d"
},
"hourAbbreviation": {
"message": "h",
"description": "100h"
},
"optionsTabBehavior": {
"message": "Ponašanje",
"description": "Appears in Options as a tab header for options related to categories and skipping behavior. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabInterface": {
"message": "Sučelje",
"description": "Appears in Options as a tab header for options related to GUI and sounds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabKeyBinds": {
"message": "Tipkovni prečaci",
"description": "Appears in Options as a tab header for keybinds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabBackup": {
"message": "Sigurnosna kopija/Obnova",
"description": "Appears in Options as a tab header for options related to saving/restoring your settings. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabAdvanced": {
"message": "Razno",
"description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"noticeVisibilityLabel": {
"message": "Izgled napomene preskakanja",
"description": "Option label"
},
"notSet": {
"message": "Nije postavljeno"
},
"change": {
"message": "Promijeni"
},
"youtubeKeybindWarning": {
"message": "Ovo je ugrađeni YouTube prečac. Stvarno ga želiš koristiti?"
},
"betaServerWarning": {
"message": "BETA poslužitelj je aktiviran!"
},
"openOptionsPage": {
"message": "Otvori stranicu opcija"
},
"resetToDefault": {
"message": "Vrati standardne postavke"
},
"confirmResetToDefault": {
"message": "Stvarno želiš vratiti sve postavke na standardne vrijednosti? To je nepovratna radnja."
},
"exportSegments": {
"message": "Izvezi odsječke"
},
"importSegments": {
"message": "Uvezi odsječke"
},
"Import": {
"message": "Uvezi",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
},
"redeemSuccess": {
"message": "Uspješno korištenje kupona!"
},
"redeemFailed": {
"message": "Licencni ključ je neispravan"
},
"hideUpsells": {
"message": "Sakrij opcije koje nisu dostupne bez dodatnog plaćanja"
},
"chooseACountry": {
"message": "Odaberi zemlju"
},
"noDiscount": {
"message": "Ne ispunjavaš uvjete za popust"
},
"discountLink": {
"message": "Poveznica za popust (pogledaj ružičastu cijenu)"
},
"selectYourCountry": {
"message": "Odaberi svoju zemlju"
},
"alreadyDonated": {
"message": "Ako si već donirao/la, možeš iskoristiti kupon za besplatan pristup putem e-pošte:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Ako si ne možeš priuštiti kupnju licence, pritisni {here} da vidiš imaš li pravo na popust",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
"message": "Prijavi se putem Patreona"
},
"redeem": {
"message": "Iskoristi kupon"
},
"joinOnPatreon": {
"message": "Pretplati se na Patreon"
},
"oneTimePurchase": {
"message": "Jednokratna kupnja"
},
"enterLicenseKey": {
"message": "Upiši licencni ključ"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
{}

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
{}

View File

@@ -1,25 +0,0 @@
{
"fullName": {
"message": "SponsorBlock priekš YouTube - Izlaid sponsorus",
"description": "Name of the extension."
},
"Description": {
"message": "Izlaidiet sponsorus, abonēšanas lūgumus un vairāk, skatoties YouTube video. Ziņojiet par sponsoriem video, kurus jūs skatāties, lai ietaupītu citu laiku.",
"description": "Description of the extension."
},
"400": {
"message": "Serveris ziņo, ka šis pieprasījums ir nederīgs"
},
"429": {
"message": "Jūs esat aizsūtījis pārāk daudz sponsoru laika sprīžus šim video; vai esat pārliecināts, ka šeit ir tik daudz?"
},
"409": {
"message": "Šis jau ir ticis aizsūtīts iepriekš"
},
"channelWhitelisted": {
"message": "Kanāls iekļauts baltajā sarakstā!"
},
"Segment": {
"message": "segments"
}
}

View File

@@ -1,539 +0,0 @@
{
"fullName": {
"message": "YouTube- നായുള്ള സ്പോൺസർബ്ലോക്ക് - സ്പോൺസർഷിപ്പുകൾ ഒഴിവാക്കുക",
"description": "Name of the extension."
},
"Description": {
"message": "YouTube വീഡിയോകളിൽ സ്പോൺസർഷിപ്പുകൾ, സബ്സ്ക്രിപ്ഷൻ ഭിക്ഷാടനം എന്നിവയും അതിലേറെയും ഒഴിവാക്കുക. മറ്റുള്ളവരുടെ സമയം ലാഭിക്കാൻ നിങ്ങൾ കാണുന്ന വീഡിയോകളിൽ സ്പോൺസർമാരെ റിപ്പോർട്ടുചെയ്യുക.",
"description": "Description of the extension."
},
"400": {
"message": "ഈ അഭ്യർത്ഥന അസാധുവാണെന്ന് സെർവർ പറഞ്ഞു"
},
"429": {
"message": "ഈ ഒരു വീഡിയോയ്‌ക്കായി നിങ്ങൾ വളരെയധികം സ്‌പോൺസർ തവണ സമർപ്പിച്ചു, ഇതിൽ ധാരാളം ഉണ്ടെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?"
},
"409": {
"message": "ഇത് ഇതിനകം സമർപ്പിച്ചു"
},
"channelWhitelisted": {
"message": "ചാനൽ വൈറ്റ്‌ലിസ്റ്റ് ചെയ്‌തു!"
},
"Segment": {
"message": "സെഗ്മെന്റ്"
},
"Segments": {
"message": "സെഗ്‌മെന്റുകൾ"
},
"upvoteButtonInfo": {
"message": "ഈ സമർപ്പണം ഉയർത്തുക"
},
"reportButtonTitle": {
"message": "റിപ്പോർട്ട് ചെയ്യുക"
},
"reportButtonInfo": {
"message": "ഈ സമർപ്പിക്കൽ തെറ്റാണെന്ന് റിപ്പോർട്ടുചെയ്യുക."
},
"Dismiss": {
"message": "നിരസിക്കുക"
},
"Loading": {
"message": "ലോഡിംഗ്..."
},
"Hide": {
"message": "ഒരിക്കലും കാണിക്കരുത്"
},
"hitGoBack": {
"message": "നിങ്ങൾ എവിടെ നിന്നാണ് വന്നതെന്ന് അൺസ്‌കിപ്പ് അമർത്തുക."
},
"unskip": {
"message": "അൺ‌സ്കിപ്പ്"
},
"reskip": {
"message": "റെസ്കിപ്പ്"
},
"paused": {
"message": "താൽക്കാലികമായി നിർത്തി"
},
"manualPaused": {
"message": "ടൈമർ നിർത്തി"
},
"confirmMSG": {
"message": "വ്യക്തിഗത മൂല്യങ്ങൾ എഡിറ്റുചെയ്യാനോ ഇല്ലാതാക്കാനോ, മുകളിൽ വലത് കോണിലുള്ള വിപുലീകരണ ഐക്കണിൽ ക്ലിക്കുചെയ്‌ത് വിവര ബട്ടൺ ക്ലിക്കുചെയ്യുക അല്ലെങ്കിൽ വിപുലീകരണ പോപ്പ്അപ്പ് തുറക്കുക."
},
"clearThis": {
"message": "ഇത് മായ്‌ക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?\n\n"
},
"Unknown": {
"message": "നിങ്ങളുടെ സ്പോൺസർ സമയം സമർപ്പിക്കുന്നതിൽ ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക."
},
"sponsorFound": {
"message": "ഈ വീഡിയോയ്ക്ക് ഡാറ്റാബേസിൽ സെഗ്‌മെന്റുകളുണ്ട്!"
},
"sponsor404": {
"message": "സെഗ്‌മെന്റുകളൊന്നും കണ്ടെത്തിയില്ല"
},
"sponsorStart": {
"message": "സെഗ്മെന്റ് ഇപ്പോൾ ആരംഭിക്കുന്നു"
},
"sponsorEnd": {
"message": "സെഗ്മെന്റ് ഇപ്പോൾ അവസാനിക്കുന്നു"
},
"noVideoID": {
"message": "YouTube വീഡിയോകളൊന്നും കണ്ടെത്തിയില്ല.\nഇത് തെറ്റാണെങ്കിൽ, ടാബ് പുതുക്കുക."
},
"success": {
"message": "വിജയം!"
},
"voted": {
"message": "വോട്ട് ചെയ്തു!"
},
"serverDown": {
"message": "സെർവർ പ്രവർത്തനരഹിതമാണെന്ന് തോന്നുന്നു. ദേവിനെ ഉടൻ ബന്ധപ്പെടുക."
},
"connectionError": {
"message": "ഒരു കണക്ഷൻ പിശക് സംഭവിച്ചു. പിശക് കോഡ്: "
},
"clearTimes": {
"message": "സെഗ്‌മെന്റുകൾ മായ്‌ക്കുക"
},
"openPopup": {
"message": "സ്പോൺസർബ്ലോക്ക് പോപ്പ്അപ്പ് തുറക്കുക"
},
"closePopup": {
"message": "പോപ്പ്അപ്പ് അടയ്‌ക്കുക"
},
"SubmitTimes": {
"message": "സെഗ്‌മെന്റുകൾ സമർപ്പിക്കുക"
},
"submitCheck": {
"message": "ഇത് സമർപ്പിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?"
},
"whitelistChannel": {
"message": "വൈറ്റ്‌ലിസ്റ്റ് ചാനൽ"
},
"removeFromWhitelist": {
"message": "വൈറ്റ്‌ലിസ്റ്റിൽ നിന്ന് ചാനൽ നീക്കംചെയ്യുക"
},
"voteOnTime": {
"message": "ഒരു സെഗ്‌മെന്റിൽ വോട്ടുചെയ്യുക"
},
"Submissions": {
"message": "സമർപ്പിക്കലുകൾ"
},
"savedPeopleFrom": {
"message": "നിങ്ങൾ ആളുകളെ സംരക്ഷിച്ചു "
},
"viewLeaderboard": {
"message": "ലീഡർബോർഡ്"
},
"recordTimesDescription": {
"message": "സമർപ്പിക്കുക"
},
"submissionEditHint": {
"message": "സമർപ്പിക്കുക ക്ലിക്കുചെയ്‌തതിനുശേഷം വിഭാഗം എഡിറ്റിംഗ് ദൃശ്യമാകും",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "സൂചന: ഓപ്ഷനുകളിൽ സമർപ്പിക്കുന്നതിന് നിങ്ങൾക്ക് കീബൈൻഡുകൾ സജ്ജമാക്കാൻ കഴിയും"
},
"clearTimesButton": {
"message": "ടൈംസ് മായ്‌ക്കുക"
},
"submitTimesButton": {
"message": "സമയം സമർപ്പിക്കുക"
},
"publicStats": {
"message": "നിങ്ങൾ എത്രമാത്രം സംഭാവന നൽകി എന്ന് കാണിക്കുന്നതിന് ഇത് പൊതു സ്ഥിതിവിവരക്കണക്ക് പേജിൽ ഉപയോഗിക്കുന്നു. അത് കാണുക"
},
"Username": {
"message": "ഉപയോക്തൃനാമം"
},
"setUsername": {
"message": "ഉപയോക്തൃനാമം സജ്ജമാക്കുക"
},
"discordAdvert": {
"message": "നിർദ്ദേശങ്ങളും ഫീഡ്‌ബാക്കും നൽകാൻ disc ദ്യോഗിക ഡിസ്കോർഡ് സെർവറിൽ ചേരുക!"
},
"hideThis": {
"message": "ഇത് മറയ്ക്കുക"
},
"Options": {
"message": "ഓപ്ഷനുകൾ"
},
"showButtons": {
"message": "YouTube പ്ലെയറിൽ ബട്ടണുകൾ കാണിക്കുക"
},
"hideButtons": {
"message": "YouTube പ്ലെയറിൽ ബട്ടണുകൾ മറയ്‌ക്കുക"
},
"hideButtonsDescription": {
"message": "ഒഴിവാക്കൽ സെഗ്‌മെന്റുകൾ സമർപ്പിക്കുന്നതിന് ഇത് YouTube പ്ലെയറിൽ ദൃശ്യമാകുന്ന ബട്ടണുകൾ മറയ്ക്കുന്നു."
},
"showInfoButton": {
"message": "YouTube പ്ലെയറിൽ വിവര ബട്ടൺ കാണിക്കുക"
},
"hideInfoButton": {
"message": "YouTube പ്ലെയറിൽ വിവര ബട്ടൺ മറയ്‌ക്കുക"
},
"hideDeleteButton": {
"message": "YouTube പ്ലെയറിൽ ഇല്ലാതാക്കുക ബട്ടൺ മറയ്‌ക്കുക"
},
"showDeleteButton": {
"message": "YouTube പ്ലെയറിൽ ഇല്ലാതാക്കുക ബട്ടൺ കാണിക്കുക"
},
"enableViewTracking": {
"message": "ക Count ണ്ട് ട്രാക്കിംഗ് ഒഴിവാക്കുക പ്രാപ്തമാക്കുക"
},
"whatViewTracking": {
"message": "ഡേറ്റാബേസിലേക്ക് സ്പാം വരില്ലെന്ന് ഉറപ്പുവരുത്തുന്നതിനായി ഉപയോക്താക്കളുടെ സമർപ്പിക്കൽ മറ്റുള്ളവരെ എത്രമാത്രം സഹായിച്ചിട്ടുണ്ടെന്നും അപ്‌വോട്ടുകൾക്കൊപ്പം ഒരു മെട്രിക്കായി ഉപയോഗിച്ചുവെന്നും ഉപയോക്താക്കളെ അറിയിക്കുന്നതിന് നിങ്ങൾ ഒഴിവാക്കിയ സെഗ്‌മെന്റുകൾ ഈ സവിശേഷത ട്രാക്കുചെയ്യുന്നു. നിങ്ങൾ ഒരു സെഗ്മെന്റ് ഒഴിവാക്കുമ്പോഴെല്ലാം വിപുലീകരണം സെർവറിലേക്ക് ഒരു സന്ദേശം അയയ്ക്കുന്നു. കാഴ്ച നമ്പറുകൾ കൃത്യമാകുന്നതിനായി മിക്ക ആളുകളും ഈ ക്രമീകരണം മാറ്റില്ലെന്ന് കരുതുന്നു. :)"
},
"enableQueryByHashPrefix": {
"message": "ഹാഷ് പ്രിഫിക്‌സ് പ്രകാരം അന്വേഷണം"
},
"whatQueryByHashPrefix": {
"message": "വീഡിയോ ഐഡി ഉപയോഗിച്ച് സെർവറിൽ നിന്ന് സെഗ്‌മെന്റുകൾ അഭ്യർത്ഥിക്കുന്നതിനുപകരം, വീഡിയോ ഐഡിയുടെ ഹാഷിന്റെ ആദ്യ 4 പ്രതീകങ്ങൾ അയയ്‌ക്കുന്നു. സമാന ഹാഷുകളുള്ള എല്ലാ വീഡിയോകൾക്കുമായുള്ള ഡാറ്റ ഈ സെർവർ തിരികെ അയയ്ക്കും."
},
"enableRefetchWhenNotFound": {
"message": "പുതിയ വീഡിയോകളിൽ സെഗ്‌മെന്റുകൾ വീണ്ടും കാണുക"
},
"whatRefetchWhenNotFound": {
"message": "വീഡിയോ പുതിയതാണെങ്കിൽ, സെഗ്‌മെന്റുകളൊന്നും കണ്ടെത്തിയില്ലെങ്കിൽ, നിങ്ങൾ കാണുമ്പോൾ ഓരോ മിനിറ്റിലും ഇത് വീണ്ടും പുതുക്കുന്നു."
},
"showNotice": {
"message": "അറിയിപ്പ് വീണ്ടും കാണിക്കുക"
},
"showSkipNotice": {
"message": "ഒരു സെഗ്മെന്റ് ഒഴിവാക്കിയതിനുശേഷം അറിയിപ്പ് കാണിക്കുക"
},
"longDescription": {
"message": "സ്പോൺസർമാർ, ആമുഖങ്ങൾ, ros ട്ട്‌ട്രോകൾ, സബ്‌സ്‌ക്രിപ്‌ഷൻ ഓർമ്മപ്പെടുത്തലുകൾ, YouTube വീഡിയോകളുടെ മറ്റ് ശല്യപ്പെടുത്തുന്ന ഭാഗങ്ങൾ എന്നിവ ഒഴിവാക്കാൻ സ്‌പോൺസർബ്ലോക്ക് നിങ്ങളെ അനുവദിക്കുന്നു. സ്പോൺ‌സർ‌ബ്ലോക്ക് ഒരു ക്ര crow ഡ്സോഴ്സ്ഡ് ബ്ര browser സർ എക്സ്റ്റൻഷനാണ്, ഇത് സ്പോൺസർ ചെയ്ത സെഗ്‌മെന്റുകളുടെയും YouTube വീഡിയോകളുടെ മറ്റ് സെഗ്‌മെൻറുകളുടെയും ആരംഭ, അവസാന സമയങ്ങൾ സമർപ്പിക്കാൻ ആരെയും അനുവദിക്കുക. ഒരു വ്യക്തി ഈ വിവരങ്ങൾ‌ സമർപ്പിച്ചുകഴിഞ്ഞാൽ‌, ഈ വിപുലീകരണമുള്ള മറ്റെല്ലാവരും സ്പോൺ‌സർ‌ ചെയ്‌ത സെഗ്‌മെൻറിനെ മറികടക്കും. സംഗീത വീഡിയോകളുടെ സംഗീതേതര വിഭാഗങ്ങളും നിങ്ങൾക്ക് ഒഴിവാക്കാം.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "വെബ്സൈറ്റ്",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "സോഴ്സ് കോഡ്",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "അറിയിപ്പ് അപ്‌ഗ്രേഡുചെയ്‌തു!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "നിങ്ങൾക്ക് ഇപ്പോഴും ഇഷ്‌ടമായില്ലെങ്കിൽ, ഒരിക്കലും കാണിക്കരുത് ബട്ടൺ അമർത്തുക.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"0": {
"message": "കണക്ഷൻ കാലഹരണപ്പെട്ടു. നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക. നിങ്ങളുടെ ഇൻറർനെറ്റ് പ്രവർത്തിക്കുന്നുണ്ടെങ്കിൽ, സെർവർ ഓവർലോഡ് അല്ലെങ്കിൽ ഡ. ൺ ആയിരിക്കാം."
},
"disableSkipping": {
"message": "ഒഴിവാക്കൽ പ്രാപ്തമാക്കി"
},
"enableSkipping": {
"message": "ഒഴിവാക്കുന്നത് പ്രവർത്തനരഹിതമാക്കി"
},
"yourWork": {
"message": "നിങ്ങളുടെ ജോലി",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "സെർവർ ഓവർലോഡ് ചെയ്തതായി തോന്നുന്നു. കുറച്ച് നിമിഷങ്ങൾക്കുള്ളിൽ വീണ്ടും ശ്രമിക്കുക."
},
"errorCode": {
"message": "പിശക് കോഡ്: "
},
"skip": {
"message": "ഒഴിവാക്കുക"
},
"skip_category": {
"message": "{0} ഒഴിവാക്കുക?"
},
"disableAutoSkip": {
"message": "യാന്ത്രിക ഒഴിവാക്കൽ പ്രവർത്തനരഹിതമാക്കുക"
},
"enableAutoSkip": {
"message": "യാന്ത്രിക ഒഴിവാക്കൽ പ്രവർത്തനക്ഷമമാക്കുക"
},
"audioNotification": {
"message": "ഒഴിവാക്കുന്ന ഓഡിയോ അറിയിപ്പ്"
},
"audioNotificationDescription": {
"message": "ഒരു സെഗ്മെന്റ് ഒഴിവാക്കുമ്പോഴെല്ലാം സ്കിപ്പിലെ ഓഡിയോ അറിയിപ്പ് ശബ്‌ദം പ്ലേ ചെയ്യും. അപ്രാപ്‌തമാക്കിയിട്ടുണ്ടെങ്കിൽ (അല്ലെങ്കിൽ യാന്ത്രിക ഒഴിവാക്കൽ പ്രവർത്തനരഹിതമാക്കി), ശബ്‌ദമൊന്നും പ്ലേ ചെയ്യില്ല."
},
"showTimeWithSkips": {
"message": "നീക്കംചെയ്‌ത സ്‌കിപ്പുകൾ ഉപയോഗിച്ച് സമയം കാണിക്കുക"
},
"showTimeWithSkipsDescription": {
"message": "സീക്ക്ബാറിന് താഴെയുള്ള നിലവിലെ സമയത്തിന് അടുത്തുള്ള ബ്രാക്കറ്റുകളിൽ ഈ സമയം ദൃശ്യമാകുന്നു. ഏത് സെഗ്‌മെന്റുകളുടെയും മൈനസ് മൊത്തം വീഡിയോ ദൈർഘ്യം ഇത് കാണിക്കുന്നു. \"സീക്ക്ബാറിൽ കാണിക്കുക\" എന്ന് മാത്രം അടയാളപ്പെടുത്തിയ സെഗ്‌മെന്റുകൾ ഇതിൽ ഉൾപ്പെടുന്നു."
},
"youHaveSkipped": {
"message": "നിങ്ങൾ ഒഴിവാക്കി "
},
"minLower": {
"message": "മിനിറ്റ്"
},
"minsLower": {
"message": "മിനിറ്റ്"
},
"hourLower": {
"message": "മണിക്കൂർ"
},
"hoursLower": {
"message": "മണിക്കൂറുകൾ"
},
"youHaveSavedTime": {
"message": "നിങ്ങൾ ആളുകളെ സംരക്ഷിച്ചു",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": " അവരുടെ ജീവിതത്തിന്റെ",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "സെർവർ നിലയ്ക്കായി status.sponsor.ajay.app പരിശോധിക്കുക."
},
"createdBy": {
"message": "ഉണ്ടാക്കിയത്"
},
"optionsInfo": {
"message": "ആക്രമണാത്മക പിന്തുണ പ്രാപ്തമാക്കുക, ഓട്ടോസ്കിപ്പ് അപ്രാപ്തമാക്കുക, ബട്ടണുകൾ മറയ്ക്കുക എന്നിവയും അതിലേറെയും."
},
"add": {
"message": "ചേർക്കുക"
},
"addInvidiousInstanceError": {
"message": "ഇതൊരു അസാധുവായ ഡൊമെയ്‌നാണ്. ഇതിൽ ഡൊമെയ്ൻ ഭാഗം ഉൾപ്പെടുത്തണം. ഉദാഹരണം: invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "ആക്രമണാത്മക ഉദാഹരണ പട്ടിക പുന reset സജ്ജമാക്കുക"
},
"resetInvidiousInstanceAlert": {
"message": "നിങ്ങൾ ഇൻ‌വിഡിയസ് ഇൻസ്റ്റൻസ് ലിസ്റ്റ് പുന reset സജ്ജമാക്കാൻ പോകുന്നു"
},
"currentInstances": {
"message": "നിലവിലെ സംഭവങ്ങൾ:"
},
"minDuration": {
"message": "കുറഞ്ഞ ദൈർഘ്യം (സെക്കൻഡ്):"
},
"minDurationDescription": {
"message": "സെറ്റ് മൂല്യത്തേക്കാൾ കുറവുള്ള സെഗ്‌മെന്റുകൾ ഒഴിവാക്കുകയോ പ്ലെയറിൽ കാണിക്കുകയോ ചെയ്യില്ല."
},
"shortCheck": {
"message": "ഇനിപ്പറയുന്ന സമർപ്പിക്കൽ നിങ്ങളുടെ മിനിമം ദൈർഘ്യ ഓപ്‌ഷനേക്കാൾ ചെറുതാണ്. ഇത് ഇതിനകം സമർപ്പിച്ചുവെന്നും ഈ ഓപ്ഷൻ കാരണം അവഗണിക്കപ്പെടുന്നുവെന്നും ഇതിനർത്ഥം. സമർപ്പിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെന്ന് ഉറപ്പാണോ?"
},
"showUploadButton": {
"message": "അപ്‌ലോഡ് ബട്ടൺ കാണിക്കുക"
},
"customServerAddress": {
"message": "സ്പോൺസർബ്ലോക്ക് സെർവർ വിലാസം"
},
"customServerAddressDescription": {
"message": "സെർവറിലേക്ക് കോളുകൾ ചെയ്യാൻ സ്പോൺസർബ്ലോക്ക് ഉപയോഗിക്കുന്ന വിലാസം.\nനിങ്ങൾക്ക് സ്വന്തമായി സെർവർ ഇൻസ്റ്റൻസ് ഇല്ലെങ്കിൽ, ഇത് മാറ്റാൻ പാടില്ല."
},
"save": {
"message": "രക്ഷിക്കും"
},
"reset": {
"message": "പുന et സജ്ജമാക്കുക"
},
"customAddressError": {
"message": "ഈ വിലാസം ശരിയായ രൂപത്തിലല്ല. നിങ്ങൾക്ക് തുടക്കത്തിൽ http: // അല്ലെങ്കിൽ https: // ഉണ്ടെന്നും പിന്നിൽ സ്ലാഷുകളൊന്നുമില്ലെന്നും ഉറപ്പാക്കുക."
},
"areYouSureReset": {
"message": "ഇത് പുന reset സജ്ജമാക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?"
},
"mobileUpdateInfo": {
"message": "m.youtube.com ഇപ്പോൾ പിന്തുണയ്ക്കുന്നു"
},
"exportOptions": {
"message": "എല്ലാ ഓപ്ഷനുകളും ഇറക്കുമതി ചെയ്യുക / കയറ്റുമതി ചെയ്യുക"
},
"setOptions": {
"message": "ഓപ്ഷനുകൾ സജ്ജമാക്കുക"
},
"exportOptionsWarning": {
"message": "മുന്നറിയിപ്പ്: ഓപ്ഷനുകൾ മാറ്റുന്നത് ശാശ്വതമായതിനാൽ നിങ്ങളുടെ ഇൻസ്റ്റാൾ തകർക്കാൻ കഴിയും. ഇത് ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെന്ന് ഉറപ്പാണോ? നിങ്ങളുടെ പഴയത് ബാക്കപ്പ് ചെയ്യുന്നത് ഉറപ്പാക്കുക."
},
"incorrectlyFormattedOptions": {
"message": "ഈ JSON ശരിയായി ഫോർമാറ്റ് ചെയ്തിട്ടില്ല. നിങ്ങളുടെ ഓപ്ഷനുകൾ മാറ്റിയിട്ടില്ല."
},
"confirmNoticeTitle": {
"message": "സെഗ്മെന്റ് സമർപ്പിക്കുക"
},
"submit": {
"message": "സമർപ്പിക്കുക"
},
"cancel": {
"message": "റദ്ദാക്കുക"
},
"delete": {
"message": "ഇല്ലാതാക്കുക"
},
"preview": {
"message": "പ്രിവ്യൂ"
},
"inspect": {
"message": "പരിശോധിക്കുക"
},
"edit": {
"message": "എഡിറ്റുചെയ്യുക"
},
"copyDebugInformation": {
"message": "ഡീബഗ് വിവരങ്ങൾ ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തുക"
},
"copyDebugInformationFailed": {
"message": "ക്ലിപ്പ്ബോർഡിലേക്ക് എഴുതുന്നതിൽ പരാജയപ്പെട്ടു"
},
"copyDebugInformationOptions": {
"message": "ഒരു ബഗ് ഉയർത്തുമ്പോൾ / ഒരു ഡവലപ്പർ ആവശ്യപ്പെടുമ്പോൾ ഒരു ഡവലപ്പർക്ക് നൽകേണ്ട വിവരങ്ങൾ ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തുന്നു. നിങ്ങളുടെ ഉപയോക്തൃ ഐഡി, വൈറ്റ്‌ലിസ്റ്റ് ചെയ്‌ത ചാനലുകൾ, ഇഷ്‌ടാനുസൃത സെർവർ വിലാസം എന്നിവ പോലുള്ള സെൻസിറ്റീവ് വിവരങ്ങൾ നീക്കംചെയ്‌തു. എന്നിരുന്നാലും നിങ്ങളുടെ ഉപയോഗശൂന്യമായ, ബ്ര browser സർ, ഓപ്പറേറ്റിംഗ് സിസ്റ്റം, വിപുലീകരണ പതിപ്പ് നമ്പർ എന്നിവ പോലുള്ള വിവരങ്ങൾ ഇതിൽ അടങ്ങിയിരിക്കുന്നു. "
},
"copyDebugInformationComplete": {
"message": "ഡീബഗ് വിവരങ്ങൾ ക്ലിപ്പ് ബോർഡിലേക്ക് പകർത്തി. നിങ്ങൾ പങ്കിടാൻ ആഗ്രഹിക്കാത്ത ഏതെങ്കിലും വിവരങ്ങൾ നീക്കംചെയ്യാൻ മടിക്കേണ്ട. ഇത് ഒരു ടെക്സ്റ്റ് ഫയലിൽ സംരക്ഷിക്കുക അല്ലെങ്കിൽ ബഗ് റിപ്പോർട്ടിൽ ഒട്ടിക്കുക."
},
"to": {
"message": "ടു",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"category_sponsor": {
"message": "സ്പോൺസർ"
},
"category_sponsor_description": {
"message": "പണമടച്ചുള്ള പ്രമോഷൻ, പണമടച്ചുള്ള റഫറലുകൾ, നേരിട്ടുള്ള പരസ്യങ്ങൾ. സ്വയം പ്രൊമോഷനോ അല്ലെങ്കിൽ കാരണങ്ങൾ / സ്രഷ്‌ടാക്കൾ / വെബ്‌സൈറ്റുകൾ / ഉൽപ്പന്നങ്ങൾ എന്നിവയ്‌ക്ക് സ shout ജന്യ ശബ്ദമുയർത്തുന്നതിനോ അല്ല."
},
"category_selfpromo": {
"message": "പണമടയ്ക്കാത്ത / സ്വയം പ്രമോഷൻ"
},
"category_selfpromo_description": {
"message": "പണമടയ്ക്കാത്ത അല്ലെങ്കിൽ സ്വയം പ്രമോഷൻ ഒഴികെ \"സ്പോൺസർ\" എന്നതിന് സമാനമാണ്. ചരക്കുകൾ, സംഭാവനകൾ, അല്ലെങ്കിൽ അവർ ആരുമായി സഹകരിച്ചു എന്നതിനെക്കുറിച്ചുള്ള വിവരങ്ങൾ എന്നിവ ഇതിൽ ഉൾപ്പെടുന്നു."
},
"category_interaction": {
"message": "ഇന്ററാക്ഷൻ ഓർമ്മപ്പെടുത്തൽ (സബ്‌സ്‌ക്രൈബുചെയ്യുക)"
},
"category_interaction_description": {
"message": "ഉള്ളടക്കത്തിന്റെ മധ്യത്തിൽ ഇഷ്‌ടപ്പെടാനോ സബ്‌സ്‌ക്രൈബുചെയ്യാനോ പിന്തുടരാനോ ഒരു ഹ്രസ്വ ഓർമ്മപ്പെടുത്തൽ ഉണ്ടാകുമ്പോൾ. ഇത് ദൈർഘ്യമേറിയതോ നിർദ്ദിഷ്ടമായതോ ആയ കാര്യങ്ങളാണെങ്കിൽ, അത് സ്വയം പ്രൊമോഷന് കീഴിലായിരിക്കണം."
},
"category_interaction_short": {
"message": "ഇടപെടൽ ഓർമ്മപ്പെടുത്തൽ"
},
"category_intro": {
"message": "ഇടവേള / ആമുഖ ആനിമേഷൻ"
},
"category_intro_description": {
"message": "യഥാർത്ഥ ഉള്ളടക്കമില്ലാത്ത ഇടവേള. ഒരു താൽക്കാലികമായി നിർത്താം, സ്റ്റാറ്റിക് ഫ്രെയിം, ആവർത്തിക്കുന്ന ആനിമേഷൻ. വിവരങ്ങൾ അടങ്ങിയ സംക്രമണങ്ങൾക്ക് ഇത് ഉപയോഗിക്കരുത്."
},
"category_intro_short": {
"message": "ഇടവേള"
},
"category_outro": {
"message": "എൻഡ്‌കാർഡുകൾ / ക്രെഡിറ്റുകൾ"
},
"category_outro_description": {
"message": "ക്രെഡിറ്റുകൾ അല്ലെങ്കിൽ YouTube എൻഡ്‌കാർഡുകൾ ദൃശ്യമാകുമ്പോൾ. വിവരങ്ങളുമായുള്ള നിഗമനങ്ങളിൽ അല്ല."
},
"category_music_offtopic": {
"message": "സംഗീതം: സംഗീതേതര വിഭാഗം"
},
"category_music_offtopic_description": {
"message": "സംഗീത വീഡിയോകളിൽ മാത്രം ഉപയോഗിക്കുന്നതിന് മാത്രം. ഇതിനകം മറ്റൊരു വിഭാഗത്തിൽ ഉൾപ്പെടാത്ത സംഗീത വീഡിയോകളുടെ വിഭാഗങ്ങൾക്കായി മാത്രമേ ഉപയോഗിക്കാവൂ."
},
"category_music_offtopic_short": {
"message": "നോൺ-മ്യൂസിക്"
},
"category_livestream_messages": {
"message": "ലൈവ്സ്ട്രീം: സംഭാവന / സന്ദേശ വായന"
},
"category_livestream_messages_short": {
"message": "സന്ദേശ വായന"
},
"autoSkip": {
"message": "യാന്ത്രിക ഒഴിവാക്കുക"
},
"manualSkip": {
"message": "സ്വമേധയാലുള്ള ഒഴിവാക്കൽ"
},
"showOverlay": {
"message": "സീക്ക് ബാറിൽ കാണിക്കുക"
},
"disable": {
"message": "പ്രവർത്തനരഹിതമാക്കുക"
},
"seekBarColor": {
"message": "ബാർ കളർ തേടുക"
},
"category": {
"message": "വിഭാഗം"
},
"skipOption": {
"message": "ഓപ്ഷൻ ഒഴിവാക്കുക",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "ബീറ്റ ടെസ്റ്റിംഗ് സെർവർ പ്രാപ്തമാക്കുക"
},
"whatEnableTestingServer": {
"message": "നിങ്ങളുടെ സമർപ്പിക്കലുകളും വോട്ടുകളും പ്രധാന സെർവറിലേക്ക് കണക്കാക്കില്ല. പരിശോധനയ്ക്കായി മാത്രം ഇത് ഉപയോഗിക്കുക."
},
"testingServerWarning": {
"message": "ടെസ്റ്റ് സെർവറിലേക്ക് കണക്റ്റുചെയ്യുമ്പോൾ എല്ലാ സമർപ്പിക്കലുകളും വോട്ടുകളും പ്രധാന സെർവറിലേക്ക് കണക്കാക്കില്ല. നിങ്ങൾക്ക് യഥാർത്ഥ സമർപ്പിക്കലുകൾ നടത്താൻ താൽപ്പര്യപ്പെടുമ്പോൾ ഇത് പ്രവർത്തനരഹിതമാക്കുന്നത് ഉറപ്പാക്കുക."
},
"bracketNow": {
"message": "(ഇപ്പോൾ)"
},
"moreCategories": {
"message": "കൂടുതൽ വിഭാഗങ്ങൾ"
},
"chooseACategory": {
"message": "ഒരു വിഭാഗം തിരഞ്ഞെടുക്കുക"
},
"enableThisCategoryFirst": {
"message": "\"{0}\" വിഭാഗത്തിൽ സെഗ്‌മെന്റുകൾ സമർപ്പിക്കുന്നതിന്, നിങ്ങൾ ഇത് ഓപ്ഷനുകളിൽ പ്രവർത്തനക്ഷമമാക്കണം. നിങ്ങളെ ഇപ്പോൾ ഓപ്ഷനുകളിലേക്ക് റീഡയറക്ട് ചെയ്യും.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"youMustSelectACategory": {
"message": "നിങ്ങൾ സമർപ്പിക്കുന്ന എല്ലാ സെഗ്‌മെന്റുകൾക്കും നിങ്ങൾ ഒരു വിഭാഗം തിരഞ്ഞെടുക്കണം!"
},
"bracketEnd": {
"message": "(അവസാനിക്കുന്നു)"
},
"hiddenDueToDownvote": {
"message": "മറഞ്ഞിരിക്കുന്നു: താഴേക്ക്"
},
"hiddenDueToDuration": {
"message": "മറഞ്ഞിരിക്കുന്നു: വളരെ ചെറുതാണ്"
},
"forceChannelCheck": {
"message": "ഒഴിവാക്കുന്നതിനുമുമ്പ് ചാനൽ പരിശോധന നിർബന്ധിക്കുക"
},
"whatForceChannelCheck": {
"message": "സ്ഥിരസ്ഥിതിയായി, ചാനൽ എന്താണെന്ന് അറിയുന്നതിന് മുമ്പായി അത് സെഗ്‌മെന്റുകൾ ഉടൻ തന്നെ ഒഴിവാക്കും. സ്ഥിരസ്ഥിതിയായി, വീഡിയോയുടെ തുടക്കത്തിലെ ചില സെഗ്‌മെന്റുകൾ വൈറ്റ്‌ലിസ്റ്റ് ചെയ്‌ത ചാനലുകളിൽ ഒഴിവാക്കാം. ഈ ഓപ്‌ഷൻ പ്രവർത്തനക്ഷമമാക്കുന്നത് ഇത് തടയും എന്നാൽ ചാനൽ ഐഡി ലഭിക്കാൻ കുറച്ച് സമയമെടുക്കുന്നതിനാൽ എല്ലാ ഒഴിവാക്കലിനും ചെറിയ കാലതാമസം നേരിടുന്നു. നിങ്ങൾക്ക് വേഗതയേറിയ ഇന്റർനെറ്റ് ഉണ്ടെങ്കിൽ ഈ കാലതാമസം ശ്രദ്ധിക്കപ്പെടില്ല."
},
"forceChannelCheckPopup": {
"message": "\"ഒഴിവാക്കുന്നതിനുമുമ്പ് ഫോഴ്‌സ് ചാനൽ പരിശോധന\" പ്രവർത്തനക്ഷമമാക്കുന്നത് പരിഗണിക്കുക"
},
"downvoteDescription": {
"message": "തെറ്റായ / തെറ്റായ സമയം"
},
"nonMusicCategoryOnMusic": {
"message": "ഈ വീഡിയോയെ സംഗീതമായി വർഗ്ഗീകരിച്ചിരിക്കുന്നു. ഇതിന് ഒരു സ്പോൺസർ ഉണ്ടെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ഇത് യഥാർത്ഥത്തിൽ \"സംഗീതേതര വിഭാഗമാണ്\" എങ്കിൽ, വിപുലീകരണ ഓപ്ഷനുകൾ തുറന്ന് ഈ വിഭാഗം പ്രാപ്തമാക്കുക. തുടർന്ന്, സ്പോൺസറിന് പകരം \"നോൺ-മ്യൂസിക്\" എന്ന് നിങ്ങൾക്ക് ഈ സെഗ്മെന്റ് സമർപ്പിക്കാൻ കഴിയും. നിങ്ങൾ ആശയക്കുഴപ്പത്തിലാണെങ്കിൽ ദയവായി മാർഗ്ഗനിർദ്ദേശങ്ങൾ വായിക്കുക."
},
"multipleSegments": {
"message": "ഒന്നിലധികം സെഗ്‌മെന്റുകൾ"
},
"guidelines": {
"message": "മാർഗ്ഗനിർദ്ദേശങ്ങൾ"
},
"readTheGuidelines": {
"message": "മാർഗ്ഗനിർദ്ദേശങ്ങൾ വായിക്കുക!!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"categoryUpdate1": {
"message": "വിഭാഗങ്ങൾ ഇവിടെയുണ്ട്!"
},
"categoryUpdate2": {
"message": "ആമുഖങ്ങൾ, ഉൽ‌പ്പന്നങ്ങൾ‌, ചരക്കുകൾ‌ മുതലായവ ഒഴിവാക്കുന്നതിനുള്ള ഓപ്ഷനുകൾ‌ തുറക്കുക."
}
}

View File

@@ -1 +0,0 @@
{}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,902 +0,0 @@
{
"fullName": {
"message": "SponsorBlock for YouTube - Hopp over sponsinger",
"description": "Name of the extension."
},
"Description": {
"message": "Hopp over sponsinger, abonnementstigging og mer på YouTube-videoer. Rapporter inn sponsorer på videoer du ser på for å spare andre sin tid.",
"description": "Description of the extension."
},
"400": {
"message": "Tjeneren sa at denne forespørselen var ugyldig"
},
"429": {
"message": "Du har sendt inn for mange sponsortidspunkter på denne ene videoen, er du sikker på at det er såpass mange?"
},
"409": {
"message": "Dette har allerede blitt sendt inn tidligere"
},
"channelWhitelisted": {
"message": "Kanalen ble hvitelistet!"
},
"Segment": {
"message": "segment"
},
"Segments": {
"message": "segmenter"
},
"upvoteButtonInfo": {
"message": "Gi plusstemme til denne innsendingen"
},
"reportButtonTitle": {
"message": "Rapporter"
},
"reportButtonInfo": {
"message": "Rapporter inn denne innsendingen som en feil."
},
"Dismiss": {
"message": "Lukk"
},
"Loading": {
"message": "Laster..."
},
"Hide": {
"message": "Aldri vis"
},
"hitGoBack": {
"message": "Klikk \"Angre hopp\" for å gå til dit du hoppet fra."
},
"unskip": {
"message": "Angre hopp"
},
"reskip": {
"message": "Hopp igjen"
},
"unmute": {
"message": "Skru av demping"
},
"paused": {
"message": "På pause"
},
"manualPaused": {
"message": "Tidtaker stoppet"
},
"confirmMSG": {
"message": "For å redigere eller slette individuelle verdier, klikk på infoknappen eller åpne utvidelsens oppsprett ved å klikke på utvidelsesikonet i øvre høyre hjørne."
},
"clearThis": {
"message": "Er du sikker på at du vil tømme dette?\n\n"
},
"Unknown": {
"message": "Det oppstod en feil under innsending av sponsortidene dine, vennligst prøv igjen senere."
},
"sponsorFound": {
"message": "Denne videoen har segmenter i databasen!"
},
"sponsor404": {
"message": "Ingen segmenter ble funnet"
},
"sponsorStart": {
"message": "Segmentet starter nå"
},
"sponsorEnd": {
"message": "Segmentet slutter nå"
},
"sponsorCancel": {
"message": "Avbryt opprettelse av segment"
},
"noVideoID": {
"message": "Ingen YouTube-video ble funnet.\nHvis dette er feil, oppfrisk fanen."
},
"refreshSegments": {
"message": "Oppdater segmenter"
},
"success": {
"message": "Suksess!"
},
"voted": {
"message": "Du har stemt!"
},
"serverDown": {
"message": "Det ser ut til at tjeneren er nede. Kontakt utvikleren umiddelbart."
},
"connectionError": {
"message": "En tilkoblingsfeil har oppstått. Feilkode: "
},
"clearTimes": {
"message": "Tøm segmenter"
},
"openPopup": {
"message": "Åpne SponsorBlock-oppsprett"
},
"closePopup": {
"message": "Lukk oppsprett"
},
"SubmitTimes": {
"message": "Send inn segmenter"
},
"submitCheck": {
"message": "Er du sikker på at du vil sende inn dette?"
},
"whitelistChannel": {
"message": "Hvitelist kanalen"
},
"removeFromWhitelist": {
"message": "Fjern kanalen fra hvitelisten"
},
"voteOnTime": {
"message": "Stem på et segment"
},
"Submissions": {
"message": "Innsendinger"
},
"savedPeopleFrom": {
"message": "Du har spart folk fra "
},
"viewLeaderboard": {
"message": "Toppliste"
},
"recordTimesDescription": {
"message": "Send"
},
"submissionEditHint": {
"message": "Seksjonsredigering vil dukke opp etter at du har klikket på «Send inn»",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "Hint: Du kan sette opp hurtigtaster for innsending i innstillingene"
},
"clearTimesButton": {
"message": "Tøm tidspunkter"
},
"submitTimesButton": {
"message": "Send inn tidspunkter"
},
"publicStats": {
"message": "Dette brukes på den offentlige statistikksiden for å vise hvor mye du har bidratt med. Se den"
},
"Username": {
"message": "Brukernavn"
},
"setUsername": {
"message": "Angi brukernavn"
},
"copyPublicID": {
"message": "Kopiér offentlig bruker-ID"
},
"discordAdvert": {
"message": "Bli med i den offisielle Discord-tjeneren for å gi forslag og tilbakemeldinger!"
},
"hideThis": {
"message": "Skjul dette"
},
"Options": {
"message": "Valg"
},
"showButtons": {
"message": "Vis knapper på YouTube-avspilleren"
},
"hideButtons": {
"message": "Skjul knapper på YouTube-avspilleren"
},
"hideButtonsDescription": {
"message": "Dette skjuler knappene som dukker opp på YouTube-avspilleren for å sende inn hoppesegmenter."
},
"showSkipButton": {
"message": "Behold Hopp til høydepunkt-knappen på avspilleren"
},
"showInfoButton": {
"message": "Vis infoknappen på YouTube-avspilleren"
},
"hideInfoButton": {
"message": "Skjul infoknappen på YouTube-avspilleren"
},
"autoHideInfoButton": {
"message": "Skjul infoknappen automatisk"
},
"hideDeleteButton": {
"message": "Skjul Slett-knappen på YouTube-avspilleren"
},
"showDeleteButton": {
"message": "Vis Slett-knappen på YouTube-avspilleren"
},
"enableViewTracking": {
"message": "Skru på telling av hopp"
},
"whatViewTracking": {
"message": "Denne funksjonen sporer hvilke segmenter du har hoppet over, sånn at brukere vet hvor mye bidragene deres har hjulpet andre, og brukes som et målesystem sammen med plusstemmer for å sikre at spam ikke kommer inn i databasen. Utvidelsen sender en melding til tjeneren hver gang du hopper over et segment. Forhåpentligvis endrer ikke de fleste folk på denne innstillingene, sånn at visningstallene er nøyaktige. :)"
},
"enableViewTrackingInPrivate": {
"message": "Aktiver telling av antall hopp i privat/inkognito-faner"
},
"enableQueryByHashPrefix": {
"message": "Forespør ut i fra saltings-prefiks"
},
"whatQueryByHashPrefix": {
"message": "I stedet for å forespørre segmenter fra tjeneren ut i fra video-ID-en, blir de første 4 tegnene i saltingskoden til video-ID-en sendt. Denne tjeneren vil svare tilbake med data for alle videoer med lignende saltingskoder."
},
"enableRefetchWhenNotFound": {
"message": "Innhent segmenter i nye videoer på nytt"
},
"whatRefetchWhenNotFound": {
"message": "Hvis videoen er ny, og ingen segmenter ble funnet, vil den forsøke å innhente på nytt med noen minutters mellomrom mens du ser på videoen."
},
"showNotice": {
"message": "Vis varselet igjen"
},
"showSkipNotice": {
"message": "Vis varsel etter at et segment har blitt hoppet over"
},
"noticeVisibilityMode0": {
"message": "Hopp over-varsel i full størrelse"
},
"noticeVisibilityMode1": {
"message": "Små hopp over-varsler for autohopp"
},
"noticeVisibilityMode2": {
"message": "Alle små hopp over-varsler"
},
"noticeVisibilityMode3": {
"message": "Tonet hopp over-varsel for autohopp"
},
"noticeVisibilityMode4": {
"message": "Alle tonede hopp over-varsler"
},
"longDescription": {
"message": "SponsorBlock lar deg hoppe over sponsorer, introer, outro-er, abonnementspåminnelser, og andre irriterende deler av YouTube-videoer. SponsorBlock er en fellesskapsdrevet nettleserutvidelser som lar alle sende inn start- og sluttidspunktene til sponsede segmenter og andre segmenter i YouTube-videoer. Når en person sender inn denne informasjonen, vil alle andre med denne utvidelsen hoppe rett over det sponsede segmentet. Du kan også hoppe over ikke-musikk-seksjoner i musikkvideoer.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Nettsted",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Kildekode",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "Varselet har blitt oppgradert!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "Hvis du fortsatt ikke liker det, klikk på «Aldri vis»-knappen.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setSkipShortcut": {
"message": "Hopp over segment",
"description": "Keybind label"
},
"setStartSponsorShortcut": {
"message": "Start/stopp segment",
"description": "Keybind label"
},
"setSubmitKeybind": {
"message": "Send inn segmenter",
"description": "Keybind label"
},
"keybindDescription": {
"message": "Velg en tast ved å trykke på den, velg deretter hvilke modifikasjonstaster du ønsker å bruke."
},
"0": {
"message": "Tidsavbrudd for tilkobling. Sjekk internettilkoblingen din. Hvis internettet ditt virker, er tjeneren sannsynligvis overbelastet eller nede."
},
"disableSkipping": {
"message": "Hopping er skrudd på"
},
"enableSkipping": {
"message": "Hopping er skrudd av"
},
"yourWork": {
"message": "Arbeidet ditt",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "Tjeneren ser ut til å være overbelastet. Prøv igjen om noen sekunder."
},
"errorCode": {
"message": "Feilkode: "
},
"skip": {
"message": "Hopp over"
},
"mute": {
"message": "Lydløs"
},
"full": {
"message": "Full video",
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
"message": "Vil du hoppe over {0}?"
},
"mute_category": {
"message": "Gjør {0} lydløs?"
},
"skip_to_category": {
"message": "Hopp til {0}?",
"description": "Used for skipping to things (Skip to Highlight)"
},
"skipped": {
"message": "{0} hoppet over",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} lydløs",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "Hoppet til {0}",
"description": "Used for skipping to things (Skipped to Highlight)"
},
"disableAutoSkip": {
"message": "Skru av autohopping"
},
"enableAutoSkip": {
"message": "Skru på autohopping"
},
"audioNotification": {
"message": "Lydvarsel ved hopp"
},
"audioNotificationDescription": {
"message": "Lydvarsling ved hopp vil spille av en lyd når enn et segment blir hoppet over. Hvis det er skrudd av (eller at autohopping er skrudd av), vil det ikke bli spilt av en slik lyd."
},
"showTimeWithSkips": {
"message": "Vis tiden der hoppene er trukket fra"
},
"showTimeWithSkipsDescription": {
"message": "Denne tiden vises i parentes ved siden av den nåværende tiden under tidsstripen. Dette viser den totale videolengden minus evt. segmenter. Dette inkluderer segmenter som kun er markert som «Vis i tidsstripen»."
},
"youHaveSkipped": {
"message": "Du har hoppet over "
},
"minLower": {
"message": "minutt"
},
"minsLower": {
"message": "minutter"
},
"hourLower": {
"message": "time"
},
"hoursLower": {
"message": "timer"
},
"youHaveSavedTime": {
"message": "Du har spart folk for",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": "av sine liv",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "Sjekk status.sponsor.ajay.app for tjenerstatus."
},
"whatChangeUserID": {
"message": "Dette bør holdes privat. Det er som et passord og bør ikke deles med noen. Hvis noen har dette kan de utgi seg som deg. Hvis du leter etter din offentlige bruker-ID, klikker du på utklippstavlen i oppsprettsvinduet."
},
"createdBy": {
"message": "Opprettet av"
},
"supportOtherSites": {
"message": "Støtt tredjeparts YouTube-nettsteder"
},
"supportOtherSitesDescription": {
"message": "Støtt tredjeparts YouTube-klienter. For å aktivere støtte må du akseptere ytterlige vilkår. Dette fungerer IKKE i inkognitomodus i Chrome og andre Chromium-varianter.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
"message": "Støttede nettsteder: "
},
"optionsInfo": {
"message": "Skru på Invidious-støtte, skru av autohopp, skjul knapper, og mer."
},
"addInvidiousInstance": {
"message": "Legg til tredjeparts klientinstans"
},
"addInvidiousInstanceDescription": {
"message": "Legg til en egendefinert instans. Den må formatteres med KUN domenet. Eksempel: invidious.ajay.app"
},
"add": {
"message": "Legg til"
},
"addInvidiousInstanceError": {
"message": "Dette er et ugyldig domene. Dette skal BARE inkludere domenedelen. Eksempel: invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "Tilbakestill Invidious-instansliste"
},
"resetInvidiousInstanceAlert": {
"message": "Du er i ferd med å tilbakestille Invidious-instanslisten"
},
"currentInstances": {
"message": "Gjeldende instanser:"
},
"minDuration": {
"message": "Minimumsvarighet (i sekunder):"
},
"minDurationDescription": {
"message": "Segmenter som er kortere enn den valgte verdien, vil ikke bli hoppet over eller vises i avspilleren."
},
"skipNoticeDuration": {
"message": "Varighet for hopp over-varsel (sekunder):"
},
"skipNoticeDurationDescription": {
"message": "Hopp over-varselet vil bli værende på skjermen i minst så mange sekunder. For manuell hopping kan det være synlig lenger."
},
"shortCheck": {
"message": "Den følgende innsendingen er kortere enn din valgte minimumsvarighetsinnstilling. Dette kan bety at den allerede er sendt inn, og at den simpelthen blir ignorert på grunn av denne innstillingen. Er du sikker på at du vil sende den inn?"
},
"liveOrPremiere": {
"message": "Innsendelse på en aktiv direktesending eller premiere er ikke tillatt. Vennligst vent til den er ferdig, last så siden på nytt og kontroller at segmentene fortsatt er gyldige."
},
"showUploadButton": {
"message": "Vis opplastingsknapp"
},
"customServerAddress": {
"message": "SponsorBlock-tjeneradresse"
},
"customServerAddressDescription": {
"message": "Adressen som SponsorBlock bruker til å kalle på tjeneren.\nMed mindre du har din egen tjenerinstans, burde du ikke endre på det."
},
"save": {
"message": "Lagre"
},
"reset": {
"message": "Nullstill"
},
"customAddressError": {
"message": "Adressen har ikke riktig format. Sørg for at du har https:// eller http:// i starten, og at det ikke slutter med en skråstrek."
},
"areYouSureReset": {
"message": "Er du sikker på at du vil tilbakestille dette?"
},
"mobileUpdateInfo": {
"message": "m.youtube.com er nå støttet"
},
"exportOptions": {
"message": "Importer/Eksporter alle innstillinger"
},
"exportOptionsCopy": {
"message": "Rediger/kopiér"
},
"exportOptionsDownload": {
"message": "Lagre til fil"
},
"exportOptionsUpload": {
"message": "Last fra fil"
},
"setOptions": {
"message": "Angi innstillinger"
},
"exportOptionsWarning": {
"message": "Advarsel: Å endre på innstillingene er permanent og kan knekke installasjonen din. Er du sikker på at du vil gjøre dette? Sørg for å ta sikkerhetskopi av de gamle for sikkerhets skyld."
},
"incorrectlyFormattedOptions": {
"message": "Denne JSON-koden er ikke formattert riktig. Dine innstillinger har ikke blitt endret på."
},
"confirmNoticeTitle": {
"message": "Send inn segment"
},
"submit": {
"message": "Send"
},
"cancel": {
"message": "Avbryt"
},
"delete": {
"message": "Slett"
},
"preview": {
"message": "Forhåndsvisning"
},
"unsubmitted": {
"message": "Ikke innsendt"
},
"inspect": {
"message": "Inspiser"
},
"edit": {
"message": "Rediger "
},
"copyDebugInformation": {
"message": "Kopier avlusingsinformasjon til utklippstavlen"
},
"copyDebugInformationFailed": {
"message": "Klarte ikke å skrive til utklippstavlen"
},
"copyDebugInformationOptions": {
"message": "Kopierer informasjon til utklippstavlen som skal gis til en utvikler i feilrapporter eller når en utvikler ber om det. Sensitiv informasjon som bruker-ID-en din, hvitelistede kanaler, og tilpassede tjeneradresser har blitt fjernet. Men det inneholder informasjon som brukeragenten din, nettleseren, operativsystemet, og utvidelsesversjonsnummeret. "
},
"copyDebugInformationComplete": {
"message": "Avlusingsinformasjonen har blitt kopiert til utklippstavlen. Du er velkommen til å fjerne det av informasjon som du helst ikke vil dele. Lagre dette i en tekstfil, eller lim det inn i feilrapporten."
},
"keyAlreadyUsed": {
"message": "Denne hurtigtasten er knyttet til en annen handling. Vennligst velg en annen kombinasjon."
},
"to": {
"message": "til",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"category_sponsor": {
"message": "Sponsor"
},
"category_sponsor_description": {
"message": "Betalt promotering, betalte henvisninger, og reklamer direkte til seerne. Ikke for selvpromotering eller gratis hyllester av saker/skapere/nettsteder/produkter som de liker."
},
"category_selfpromo": {
"message": "Ubetalt/Selvpromotering"
},
"category_selfpromo_description": {
"message": "Minner om «Sponsor», men er ubetalt eller selvpromotering. Dette inkluderer segmenter om merchandise, donasjoner, eller info om hvem de samarbeidet med."
},
"category_exclusive_access": {
"message": "Ekslusiv tilgang"
},
"category_exclusive_access_description": {
"message": "Kun for merking av hele videoer. Brukes når en video demonstrerer et produkt, tjeneste eller sted de har fått gratis eller subsidiert tilgang til."
},
"category_exclusive_access_pill": {
"message": "Denne videoen demonstrerer et produkt, tjeneste eller sted som de har fått gratis eller subsidiert tilgang til",
"description": "Short description for this category"
},
"category_interaction": {
"message": "Samhandlingspåminnelse (Abonner)"
},
"category_interaction_description": {
"message": "Når det er en kort påminnelse om å like, abonnere på eller følge dem midt i innholdet. Hvis det er langt eller handler om noe spesifikt, burde det føres opp som selvpromotering i stedet."
},
"category_interaction_short": {
"message": "Samhandlingspåminnelse"
},
"category_intro": {
"message": "Midtpause-/Introanimasjon"
},
"category_intro_description": {
"message": "En intervall uten noe faktisk innhold. Kan være en pause, statisk bilde, eller repetitiv animasjon. Dette burde ikke brukes til overgangsanimasjoner som inneholder informasjon."
},
"category_intro_short": {
"message": "Midtpause"
},
"category_outro": {
"message": "Rulletekster"
},
"category_outro_description": {
"message": "Rulletekster eller når YouTube-sluttkortene dukker opp. Ikke for avslutninger med informasjon."
},
"category_preview": {
"message": "Forhåndsvisning/Oppsummering"
},
"category_filler_short": {
"message": "Fyllstoff"
},
"category_music_offtopic": {
"message": "Musikk: Seksjon uten musikk"
},
"category_music_offtopic_description": {
"message": "Kun for bruk i musikkvideoer. Dette burde kun brukes for seksjoner i musikkvideoer som ikke allerede dekkes av en annen kategori."
},
"category_music_offtopic_short": {
"message": "Ikke-musikk"
},
"category_poi_highlight": {
"message": "Høydepunkt"
},
"category_poi_highlight_description": {
"message": "Den del av videoen som de fleste er interessert i. Tilsvarende kommentarer som \"Videoen begynner på x\"."
},
"category_livestream_messages": {
"message": "Direktesending: Donasjons-/Meldingshøytlesninger"
},
"category_livestream_messages_short": {
"message": "Høytlesning av meldinger"
},
"autoSkip": {
"message": "Hopp over automatisk"
},
"manualSkip": {
"message": "Manuelt hopp"
},
"showOverlay": {
"message": "Vis i tidsstripen"
},
"disable": {
"message": "Deaktiver"
},
"autoSkip_POI": {
"message": "Autohopp til starten"
},
"manualSkip_POI": {
"message": "Spør når videoen laster"
},
"showOverlay_POI": {
"message": "Vis i tidsstripen"
},
"showOverlay_full": {
"message": "Vis merke"
},
"autoSkipOnMusicVideos": {
"message": "Autohopp over alle segmenter når det er et segment uten musikk"
},
"muteSegments": {
"message": "Tillat segmenter som slår av lyden i stedet for å hoppe over"
},
"fullVideoSegments": {
"message": "Vis et ikon når en video utelukkende er reklame",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"previewColor": {
"message": "Ikke innsendt-farge",
"description": "Referring to submissions that have not been sent to the server yet."
},
"seekBarColor": {
"message": "Tidsstripefarge"
},
"category": {
"message": "Kategori"
},
"skipOption": {
"message": "Hoppinnstilling",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "Skru på betatestingstjeneren"
},
"whatEnableTestingServer": {
"message": "Dine innsendinger og stemmer BLIR IKKE REGNET MED med tanke på hovedtjeneren. Kun bruk dette til testing."
},
"testingServerWarning": {
"message": "Alle innsendinger og stemmer BLIR IKKE REGNET MED med tanke på hovedtjeneren når du kobler til testtjeneren. Sørg for å skru dette av når du vil sende inn ekte innsendinger."
},
"bracketNow": {
"message": "(Nå)"
},
"moreCategories": {
"message": "Flere kategorier"
},
"chooseACategory": {
"message": "Velg en kategori"
},
"enableThisCategoryFirst": {
"message": "For å sende inn segmenter i «{0}»-kategorien, må du skru det på i innstillingene. Du vil nå bli omdirigert til innstillingene.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Advarsel: Denne type segment kan ha maksimalt én aktiv om gangen. Å legge inn flere vil forårsake en tilfeldig framvisning."
},
"youMustSelectACategory": {
"message": "Du må velge en kategori for alle segmentene du sender inn!"
},
"bracketEnd": {
"message": "(Slutt)"
},
"hiddenDueToDownvote": {
"message": "skjult: stemt ned"
},
"hiddenDueToDuration": {
"message": "skjult: for kort"
},
"channelDataNotFound": {
"description": "This error appears in an alert when they try to whitelist a channel and the extension is unable to determine what channel they are looking at.",
"message": "Kanal-ID er ikke lastet enda. Hvis du bruker en innebygd video, prøv å bruke YouTube-hjemmesiden i stedet. Dette kan også forårsakes av endringer i YouTube-oppsett, hvis du mistenker det, kommenter her:"
},
"acceptPermission": {
"message": "Godta tillatelse"
},
"permissionRequestSuccess": {
"message": "Tillatelsesforespørselen lyktes!"
},
"permissionRequestFailed": {
"message": "Tillatelsesforespørselen mislyktes, klikket du på Avvis?"
},
"adblockerIssueWhitelist": {
"message": "Om du ikke er i stand til å løse dette, forsøk å deaktiver innstillingen 'Fremtving kanalsjekk før hopp', siden SponsorBlock ikke kan hente kanalinformasjon for denne videoen"
},
"forceChannelCheck": {
"message": "Fremtving kanalsjekk før hopp"
},
"whatForceChannelCheck": {
"message": "Som standard, vil den hoppe over segmenter umiddelbart før den engang vet hvilken kanal det er. Som standard vil noen segmenter i begynnelsen av videoen bli hoppet over på hvitelistede kanaler. Å skru på denne innstillingen vil forhindre dette, men også føre til at all hopping har en liten forsinkelse siden innhentingen av kanal-ID-en kan ta litt tid. Denne forsinkelsen vil kanskje ikke bli lagt merke til hvis du har raskt internett."
},
"forceChannelCheckPopup": {
"message": "Vurder å skru på «Fremtving kanalsjekk før hopp»"
},
"downvoteDescription": {
"message": "Feil tidtaking"
},
"incorrectCategory": {
"message": "Endre kategori"
},
"nonMusicCategoryOnMusic": {
"message": "Denne videoen er kategorisert som musikk. Er du sikker på at dette har en sponsor? Hvis det egentlig er et \"Ikke-musikk-segment\", åpne opp innstillingene til utvidelsen og skru på denne kategorien. Deretter kan du sende dette segmentet som \"Ikke-musikk\" i stedet for som sponsing. Vennligst les retningslinjene hvis du er forvirret."
},
"multipleSegments": {
"message": "Flere segmenter"
},
"guidelines": {
"message": "Retningslinjer"
},
"readTheGuidelines": {
"message": "Les retningslinjene!!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"categoryUpdate1": {
"message": "Kategorier er her!"
},
"categoryUpdate2": {
"message": "Åpne innstillingene for å hoppe over introer, outro-er, merchandise, osv."
},
"help": {
"message": "Hjelp"
},
"GotIt": {
"message": "Jeg forstår",
"description": "Used as the button to dismiss a tooltip"
},
"fullVideoTooltipWarning": {
"message": "Dette segmentet er stort. Dersom hele videoen er omtrent ett emne, så endre fra \"Hopp Over\" til \"Full Video\". Se retningslinjene for mer informasjon."
},
"categoryPillTitleText": {
"message": "Hele denne videoen er merket som denne kategorien og er for tett knyttet til å kunne separeres"
},
"experiementOptOut": {
"message": "Reservér deg mot alle fremtidige eksperimenter",
"description": "This is used in a popup about a new experiment to get a list of unlisted videos to back up since all unlisted videos uploaded before 2017 will be set to private."
},
"hideForever": {
"message": "Skjul for alltid"
},
"questionButton": {
"message": "SpørsmålsKnapp"
},
"Donate": {
"message": "Donér"
},
"hideDonationLink": {
"message": "Skjul donasjonslenke"
},
"darkModeOptionsPage": {
"message": "Mørk modus på instillingssiden"
},
"helpPageThanksForInstalling": {
"message": "Takk for at du installerte SponsorBlock."
},
"helpPageReviewOptions": {
"message": "Vennligst se gjennom innstillingene nedenfor"
},
"helpPageFeatureDisclaimer": {
"message": "Mange funksjoner er deaktivert som standard. Om du vil hoppe over introer, outro-er, benytte Invidious osv., aktiver dem nedenfor. Du kan også vise eller skjule UI-elementer."
},
"helpPageHowSkippingWorks": {
"message": "Hvordan hopping fungerer"
},
"helpPageHowSkippingWorks1": {
"message": "Videosegmenter vil automatisk bli hoppet over hvis de finnes i databasen. Du kan åpne oppsprettsvinduet ved å klikke på utvidelsesikonet for å få en forhåndsvisning av hva de er."
},
"helpPageHowSkippingWorks2": {
"message": "Hver gang du hopper over et segment vil du få et varsel. Hvis tidtakingen ser feil ut stem ned ved å klikke på nedstemme! Du kan også stemme i oppsprettsvinduet."
},
"Submitting": {
"message": "Innsending"
},
"helpPageSubmitting1": {
"message": "Innsending kan enten gjøres i oppsprettsvinduet ved å klikke på \"Segmentet starter nå\"-knappen eller i videoavspilleren ved å klikke på knappene på avspilleren."
},
"helpPageSubmitting2": {
"message": "Klikk på avspillingsknappen angir starten av et segment og klikk på stopp-ikonet angir slutten. Du kan gjøre klar flere sponsorer før du sender inn. Klikk på opplastningsknappen for å sende inn. Klikk på papirkurven for å slette."
},
"Editing": {
"message": "Redigering"
},
"helpPageEditing1": {
"message": "Hvis du rotet det til kan du redigere eller slette segmentene dine etter at du har klikket på pil opp-knappen."
},
"helpPageTooSlow": {
"message": "Dette er for tidkrevende"
},
"helpPageTooSlow1": {
"message": "Om du vil kan du bruke hurtigtaster. Trykk på semikolon-tasten for å angi start/stopp av et sponsorsegment og klikk på apostrof for å sende inn. Disse kan endres i innstillinger. Om du ikke bruker QWERTY bør du sannsynligvis endre hurtigtastene."
},
"helpPageCopyOfDatabase": {
"message": "Kan jeg få en kopi av databasen? Hva hender hvis du forsvinner?"
},
"helpPageCopyOfDatabase1": {
"message": "Databasen er offentlig og tilgjengelig på"
},
"helpPageCopyOfDatabase2": {
"message": "Kildekoden er fritt tilgjengelig. Så selv om noe skulle skje med meg vil ikke dine bidrag gå tapt."
},
"helpPageNews": {
"message": "Nyheter og hvordan det er laget"
},
"helpPageSourceCode": {
"message": "Hvor kan jeg finne kildekoden?"
},
"Credits": {
"message": "Anerkjennelser"
},
"LearnMore": {
"message": "Les mer"
},
"CopyDownvoteButtonInfo": {
"message": "Stemmer ned og oppretter en lokal kopi som du kan sende inn på nytt"
},
"OpenCategoryWikiPage": {
"message": "Åpne denne kategoriens wiki-side."
},
"CopyAndDownvote": {
"message": "Kopiér og stem ned"
},
"ContinueVoting": {
"message": "Fortsett å stemme"
},
"ChangeCategoryTooltip": {
"message": "Dette vil umiddelbart gjelde for dine segmenter"
},
"hideSegment": {
"message": "Skjul segment"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Bruk musehjulet mens du peker over redigeringsboksen for å raskt justere tiden. Kombinasjoner av ctrl- eller shift-tasten kan brukes til å finjustere endringene."
},
"categoryPillNewFeature": {
"message": "Nyhet! Se om en video er fullstendig sponset eller selvpromotert"
},
"dayAbbreviation": {
"message": "d",
"description": "100d"
},
"hourAbbreviation": {
"message": "t",
"description": "100h"
},
"optionsTabBehavior": {
"message": "Oppførsel",
"description": "Appears in Options as a tab header for options related to categories and skipping behavior. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabInterface": {
"message": "Grensesnitt",
"description": "Appears in Options as a tab header for options related to GUI and sounds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabKeyBinds": {
"message": "Hurtigtaster",
"description": "Appears in Options as a tab header for keybinds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabBackup": {
"message": "Sikkerhetskopiér/gjenskap",
"description": "Appears in Options as a tab header for options related to saving/restoring your settings. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabAdvanced": {
"message": "Diverse",
"description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"noticeVisibilityLabel": {
"message": "Hopp over-varselutseende",
"description": "Option label"
},
"unbind": {
"message": "Fjern",
"description": "Unbind keyboard shortcut"
},
"notSet": {
"message": "Ikke angitt"
},
"change": {
"message": "Endre"
},
"youtubeKeybindWarning": {
"message": "Dette er en innebygget YouTube-hurtigtast. Er du sikker på at du vil bruke den?"
},
"betaServerWarning": {
"message": "BETA Server er aktivert!"
},
"openOptionsPage": {
"message": "Åpne innstillingsside"
},
"resetToDefault": {
"message": "Tilbakestill innstillinger til standard"
},
"confirmResetToDefault": {
"message": "Er du sikker på at du vil tilbakestille alle innstillingene til standardverdiene? Dette kan ikke angres."
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,549 +0,0 @@
{
"fullName": {
"message": "SponsorBlock para o YouTube - Salte patrocínios",
"description": "Name of the extension."
},
"Description": {
"message": "Salte patrocinios, pedidos de subscrição e mais em videos do YouTube. Submeta anúncios nos videos que visualiza para poupar tempo a outros.",
"description": "Description of the extension."
},
"400": {
"message": "O servidor disse que este pedido foi inválido"
},
"429": {
"message": "Enviou muitos segmentos para este vídeo, tem certeza que tem assim tantos?"
},
"409": {
"message": "Isso já foi enviado antes"
},
"channelWhitelisted": {
"message": "Canal adicionado à lista de autorizados!"
},
"Segment": {
"message": "segmento"
},
"Segments": {
"message": "segmentos"
},
"SegmentsCap": {
"message": "Segmentos"
},
"Chapters": {
"message": "Capítulos"
},
"renderAsChapters": {
"message": "Renderizar segmentos como capítulos",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Mostrar segmento atual ao lado do tempo do vídeo"
},
"upvoteButtonInfo": {
"message": "Votar positivamente esta submissão"
},
"reportButtonTitle": {
"message": "Reportar"
},
"reportButtonInfo": {
"message": "Reportar esta submissão como incorrecta."
},
"Dismiss": {
"message": "Ignorar"
},
"Loading": {
"message": "A carregar..."
},
"Hide": {
"message": "Nunca mostrar"
},
"hitGoBack": {
"message": "Carregue em reverter salto para voltar a onde estava"
},
"unskip": {
"message": "Reverter salto"
},
"reskip": {
"message": "Saltar novamente"
},
"unmute": {
"message": "Ativar som"
},
"paused": {
"message": "Pausado"
},
"manualPaused": {
"message": "Temporizador parado"
},
"confirmMSG": {
"message": "\n\nPara editar ou remover linhas individuais, carregue com o botão direito ou abra o popup da extensão pelo icone no canto superior direito."
},
"clearThis": {
"message": "Tem certeza que deseja limpar isto?\n\n"
},
"Unknown": {
"message": "Erro ao enviar os seus segmentos, tente novamente mais tarde."
},
"sponsorFound": {
"message": "Este vídeo tem segmentos na base de dados!"
},
"sponsor404": {
"message": "Nenhum segmento encontrado"
},
"sponsorStart": {
"message": "O Segmento Começa Agora"
},
"sponsorEnd": {
"message": "O Segmento Acaba Agora"
},
"sponsorCancel": {
"message": "Cancelar Criação de Segmento"
},
"noVideoID": {
"message": "Nenhum vídeo do YouTube encontrado.\nSe isto não estiver correto, atualize o separador."
},
"refreshSegments": {
"message": "Atualizar segmentos"
},
"success": {
"message": "Sucesso!"
},
"voted": {
"message": "Votado!"
},
"serverDown": {
"message": "Parece que o servidor está em baixo. Contacte o desenvolvedor imediatamente."
},
"connectionError": {
"message": "Deu-se um erro de conecção: Código: "
},
"segmentsStillLoading": {
"message": "Segmentos ainda a carregar..."
},
"clearTimes": {
"message": "Limpar Segmentos"
},
"openPopup": {
"message": "Abrir o Popup SponsorBlock"
},
"closePopup": {
"message": "Fechar Popup"
},
"SubmitTimes": {
"message": "Submeter Segmentos"
},
"sortSegments": {
"message": "Ordenar Segmentos"
},
"submitCheck": {
"message": "Tem a certeza que pretende submeter?"
},
"whitelistChannel": {
"message": "Meter canal na Lista Branca"
},
"removeFromWhitelist": {
"message": "Remover canal da Lista Branca"
},
"voteOnTime": {
"message": "Votar em um segmento"
},
"Submissions": {
"message": "Submissões"
},
"savedPeopleFrom": {
"message": "Salvaste pessoas de "
},
"viewLeaderboard": {
"message": "Tabela de Classificação"
},
"recordTimesDescription": {
"message": "Enviar"
},
"submissionEditHint": {
"message": "A edição da seção aparecerá depois que você clicar em enviar",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "Dica: Você pode configurar atalhos de teclado para enviar nas opções"
},
"clearTimesButton": {
"message": "Limpar Intervalos"
},
"submitTimesButton": {
"message": "Submeter Intervalos"
},
"publicStats": {
"message": "Isto é usado na página pública de estatísticas que mostra o quanto já contríbuíu. Veje-a"
},
"Username": {
"message": "Nome de Utilizador"
},
"setUsername": {
"message": "Criar nome de utilizador"
},
"copyPublicID": {
"message": "Copiar ID público de utilizador"
},
"copySegmentID": {
"message": "Copiar ID do segmento"
},
"discordAdvert": {
"message": "Junte-se ao discord oficial para sugerir dicas e sugestões!"
},
"hideThis": {
"message": "Esconder isto"
},
"Options": {
"message": "Opções"
},
"showButtons": {
"message": "Mostrar botões no player do Youtube"
},
"hideButtons": {
"message": "Esconder botões no player do Youtube"
},
"hideButtonsDescription": {
"message": "Isto esconde os botões que aparecem no player do Youtube para submeter patrocínios. Entendemos que possa ser\n incómodo a algumas pessoas. Em vez de usar esses botões pode usar os do popup. Para esconder a mensagem que aparece, \n ususe o botão na mesma que diz \"Don't show this again\". Pode sempre reactivar estas definições novamente."
},
"showSkipButton": {
"message": "Mantenha o Botão Saltar para Destaque no Player"
},
"showInfoButton": {
"message": "Mostrar botão de Informações no player do Youtube"
},
"hideInfoButton": {
"message": "Esconder botão de Informações no player do Youtube"
},
"autoHideInfoButton": {
"message": "Ocultar automaticamente o Botão de Informação"
},
"hideDeleteButton": {
"message": "Esconder botão de Apagar no player do Youtube"
},
"showDeleteButton": {
"message": "Mostrar botão de Apagar no player do Youtube"
},
"enableViewTracking": {
"message": "Ativar Rastreamento de Contagem de Saltos"
},
"whatViewTracking": {
"message": "Esse recurso rastreia quais segmentos você pulou para permitir que os usuários saibam o quanto seu envio ajudou outras pessoas e é usado como métrica junto com votos positivos para garantir que o spam não entre no banco de dados. A extensão envia uma mensagem ao servidor cada vez que você pular um segmento. Espero que a maioria das pessoas não altere essa configuração para que os números de visualização sejam precisos. :)"
},
"enableViewTrackingInPrivate": {
"message": "Ativar o Rastreamento de Contagem de Saltos nas Guias Privadas/Anônimas"
},
"enableTrackDownvotes": {
"message": "Guardar segmentos de votos negativos"
},
"whatTrackDownvotes": {
"message": "Quaisquer segmentos que você votar negativo permanecerão ocultos mesmo após a atualização"
},
"trackDownvotesWarning": {
"message": "Aviso: Ao desabilitar isso excluirá todos os votos negativos armazenados anteriormente"
},
"enableQueryByHashPrefix": {
"message": "Consulta por Prefixo de Hash"
},
"whatQueryByHashPrefix": {
"message": "Em vez de solicitar segmentos do servidor usando o ID do Vídeo, são enviados os primeiros 4 caracteres do hash do ID do Vídeo. Este servidor enviará de volta dados para todos os vídeos com hashes semelhantes."
},
"enableRefetchWhenNotFound": {
"message": "Recuperar segmentos em novos vídeos"
},
"whatRefetchWhenNotFound": {
"message": "Se o vídeo for novo e nenhum segmento for encontrado, continuaremos a monitorizar enquanto assiste."
},
"showNotice": {
"message": "Mostrar notificação outra vez"
},
"showSkipNotice": {
"message": "Mostrar aviso após um segmento ser ignorado"
},
"noticeVisibilityMode0": {
"message": "Avisos de ignorar em tamanho inteiro"
},
"noticeVisibilityMode1": {
"message": "Avisos pequenos quando ignorado automaticamente"
},
"noticeVisibilityMode2": {
"message": "Todos os avisos de ignorar em tamanho pequeno"
},
"website": {
"message": "Site",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Código-fonte",
"description": "Used on Firefox Store Page"
},
"setStartSponsorShortcut": {
"message": "Iniciar/parar segmento",
"description": "Keybind label"
},
"nextChapterKeybind": {
"message": "Próximo capítulo",
"description": "Keybind label"
},
"previousChapterKeybind": {
"message": "Capítulo anterior",
"description": "Keybind label"
},
"502": {
"message": "O servidor parece estar sobrecarregado. Tente novamente em alguns segundos."
},
"errorCode": {
"message": "Código de erro: "
},
"skip": {
"message": "Saltar"
},
"mute": {
"message": "Silenciar"
},
"full": {
"message": "Vídeo completo",
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
"message": "Saltar {0}?"
},
"mute_category": {
"message": "Silenciar {0}?"
},
"skip_to_category": {
"message": "Avançar para {0}?",
"description": "Used for skipping to things (Skip to Highlight)"
},
"skipped": {
"message": "{0} ignorado",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} silenciado",
"description": "Example: Sponsor Muted"
},
"minLower": {
"message": "minuto"
},
"minsLower": {
"message": "minutos"
},
"hourLower": {
"message": "hora"
},
"hoursLower": {
"message": "horas"
},
"youHaveSavedTime": {
"message": "Poupou pessoas de",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": " das suas vidas",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"setUserID": {
"message": "Definir UserID Privado"
},
"createdBy": {
"message": "Criado por"
},
"supportedSites": {
"message": "Sites suportados: "
},
"addInvidiousInstanceDescription": {
"message": "Adicione uma instância personalizada. Isso deve ser formatado APENAS com o domínio. Exemplo: invidious.ajay.app"
},
"addInvidiousInstanceError": {
"message": "Este é um domínio inválido. Isto deve APENAS incluir a parte do domínio. Exemplo: invidious.ajay.app"
},
"areYouSureReset": {
"message": "Tem certeza que deseja redefinir?"
},
"mobileUpdateInfo": {
"message": "m.youtube.com é agora suportado"
},
"exportOptions": {
"message": "Importar/Exportar todas as opções"
},
"exportOptionsCopy": {
"message": "Editar/copiar"
},
"exportOptionsDownload": {
"message": "Guardar num ficheiro"
},
"exportOptionsUpload": {
"message": "Carregar a partir de ficheiro"
},
"setOptions": {
"message": "Definir opções"
},
"submit": {
"message": "Enviar"
},
"cancel": {
"message": "Cancelar"
},
"delete": {
"message": "Eliminar"
},
"preview": {
"message": "Pré-visualizar"
},
"inspect": {
"message": "Inspecionar"
},
"edit": {
"message": "Editar"
},
"copyDebugInformation": {
"message": "Copiar informações de depuração para a área de transferência"
},
"copyDebugInformationFailed": {
"message": "Falha ao copiar para a área de transferência"
},
"to": {
"message": "até",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"generic_guideline2": {
"message": "Reproduz como se nada tivesse sido ignorado"
},
"category_sponsor": {
"message": "Patrocinador"
},
"category_exclusive_access": {
"message": "Acesso exclusivo"
},
"category_interaction_short": {
"message": "Lembrete de interação"
},
"category_livestream_messages_short": {
"message": "Leitura de mensagens"
},
"autoSkip": {
"message": "Saltar automaticamente"
},
"manualSkip": {
"message": "Saltar manualmente"
},
"disable": {
"message": "Desativar"
},
"category": {
"message": "Categoria"
},
"bracketNow": {
"message": "(agora)"
},
"moreCategories": {
"message": "Mais categorias"
},
"chooseACategory": {
"message": "Escolher uma categoria"
},
"bracketEnd": {
"message": "(fim)"
},
"manuallyHidden": {
"message": "ocultado manualmente"
},
"incorrectCategory": {
"message": "Alterar categoria"
},
"guidelines": {
"message": "Orientações"
},
"readTheGuidelines": {
"message": "Leia as nossas orientações!!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"darkModeOptionsPage": {
"message": "Modo escuro na página de opções"
},
"helpPageThanksForInstalling": {
"message": "Obrigado por instalar o SponsorBlock."
},
"helpPageReviewOptions": {
"message": "Por favor, reveja as opções abaixo"
},
"helpPageHowSkippingWorks": {
"message": "Como a função saltar funciona"
},
"Submitting": {
"message": "A enviar"
},
"Editing": {
"message": "A editar"
},
"helpPageTooSlow": {
"message": "Está demasiado lento"
},
"Credits": {
"message": "Créditos"
},
"LearnMore": {
"message": "Saber mais"
},
"FullDetails": {
"message": "Todos os detalhes"
},
"CopyAndDownvote": {
"message": "Copiar e dar voto negativo"
},
"ContinueVoting": {
"message": "Continuar a votar"
},
"downvote": {
"message": "Voto negativo"
},
"upvote": {
"message": "Voto positivo"
},
"hideSegment": {
"message": "Ocultar segmento"
},
"dayAbbreviation": {
"message": "d",
"description": "100d"
},
"hourAbbreviation": {
"message": "h",
"description": "100h"
},
"optionsTabBehavior": {
"message": "Comportamento",
"description": "Appears in Options as a tab header for options related to categories and skipping behavior. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabInterface": {
"message": "Interface",
"description": "Appears in Options as a tab header for options related to GUI and sounds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabKeyBinds": {
"message": "Atalhos de teclado",
"description": "Appears in Options as a tab header for keybinds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabBackup": {
"message": "Cópia de seg./restauro",
"description": "Appears in Options as a tab header for options related to saving/restoring your settings. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabAdvanced": {
"message": "Diversos",
"description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"unbind": {
"message": "Desvincular",
"description": "Unbind keyboard shortcut"
},
"notSet": {
"message": "Não definido"
},
"change": {
"message": "Alterar"
},
"betaServerWarning": {
"message": "O servidor BETA está ativado!"
},
"openOptionsPage": {
"message": "Abrir página de opções"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
{}

View File

@@ -1,30 +0,0 @@
{
"Options": {
"message": "Подешавања"
},
"sourceCode": {
"message": "Изворни код",
"description": "Used on Firefox Store Page"
},
"errorCode": {
"message": "Код грешке: "
},
"skip": {
"message": "Прескочи"
},
"add": {
"message": "Додај"
},
"save": {
"message": "Сачувај"
},
"cancel": {
"message": "Откажи"
},
"edit": {
"message": "Измени"
},
"help": {
"message": "Помоћ"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
{}

View File

@@ -1,776 +0,0 @@
{
"fullName": {
"message": "YouTube க்கான SponsorBlock - ஸ்பான்சர்ஷிப்களைத் தவிர்",
"description": "Name of the extension."
},
"Description": {
"message": "YouTube வீடியோக்களில் ஸ்பான்சர்ஷிப்கள், சந்தா பிச்சை மற்றும் பலவற்றைத் தவிர்க்கவும். மற்றவர்களின் நேரத்தைச் சேமிக்க நீங்கள் பார்க்கும் வீடியோக்களில் ஸ்பான்சர்களைப் புகாரளிக்கவும்.",
"description": "Description of the extension."
},
"400": {
"message": "இந்த கோரிக்கை தவறானது என்று சர்வர் கூறினார்"
},
"429": {
"message": "இந்த ஒரு வீடியோவிற்கு நீங்கள் பல ஸ்பான்சர் நேரங்களை சமர்ப்பித்துள்ளீர்கள், இது பல உள்ளன என்று நீங்கள் உறுதியாக நம்புகிறீர்களா?"
},
"409": {
"message": "இது ஏற்கனவே சமர்ப்பிக்கப்பட்டுள்ளது"
},
"channelWhitelisted": {
"message": "சேனல் அனுமதிப்பட்டியல்!"
},
"Segment": {
"message": "பிரிவு"
},
"Segments": {
"message": "பிரிவுகள்"
},
"upvoteButtonInfo": {
"message": "இந்த சமர்ப்பிப்பை மேம்படுத்துங்கள்"
},
"reportButtonTitle": {
"message": "அறிக்கை"
},
"reportButtonInfo": {
"message": "இந்த சமர்ப்பிப்பு தவறானது என புகாரளிக்கவும்."
},
"Dismiss": {
"message": "நீக்கு"
},
"Loading": {
"message": "ஏற்றுகிறது..."
},
"Hide": {
"message": "ஒருபோதும் அனுமதிக்காதே"
},
"hitGoBack": {
"message": "நீங்கள் எங்கிருந்து வந்தீர்கள் என்பதைத் தட்டவும்."
},
"unskip": {
"message": "அன்ஸ்கிப்"
},
"reskip": {
"message": "ரெஸ்கிப்"
},
"unmute": {
"message": "ஒலியடக்கு"
},
"paused": {
"message": "இடைநிறுத்தப்பட்டது"
},
"manualPaused": {
"message": "டைமர் நிறுத்தப்பட்டது"
},
"confirmMSG": {
"message": "தனிப்பட்ட மதிப்புகளைத் திருத்த அல்லது நீக்க, தகவல் பொத்தானைக் கிளிக் செய்யவும் அல்லது மேல் வலது மூலையில் உள்ள நீட்டிப்பு ஐகானைக் கிளிக் செய்வதன் மூலம் நீட்டிப்பு பாப்அப்பைத் திறக்கவும்."
},
"clearThis": {
"message": "இதை அழிக்க விரும்புகிறீர்களா?\n\n"
},
"Unknown": {
"message": "உங்கள் ஸ்பான்சர் நேரங்களைச் சமர்ப்பிப்பதில் பிழை ஏற்பட்டது, தயவுசெய்து பின்னர் மீண்டும் முயற்சிக்கவும்."
},
"sponsorFound": {
"message": "இந்த வீடியோவில் தரவுத்தளத்தில் பகுதிகள் உள்ளன!"
},
"sponsor404": {
"message": "எந்தப் பகுதியும் கிடைக்கவில்லை"
},
"sponsorStart": {
"message": "பிரிவு இப்போது தொடங்குகிறது"
},
"sponsorEnd": {
"message": "பிரிவு இப்போது முடிகிறது"
},
"sponsorCancel": {
"message": "உருவாக்கும் பகுதியை ரத்து செய்"
},
"noVideoID": {
"message": "YouTube வீடியோ எதுவும் கிடைக்கவில்லை.\nஇது தவறாக இருந்தால், தாவலைப் புதுப்பிக்கவும்."
},
"refreshSegments": {
"message": "பிரிவுகளைப் புதுப்பிக்கவும்"
},
"success": {
"message": "வெற்றி!"
},
"voted": {
"message": "வாக்களித்தார்!"
},
"serverDown": {
"message": "சேவையகம் செயலிழந்துவிட்டதாகத் தெரிகிறது. டெவலப்பரை உடனடியாக தொடர்பு கொள்ளவும்."
},
"connectionError": {
"message": "இணைப்பு பிழை ஏற்பட்டது. பிழை குறியீடு: "
},
"clearTimes": {
"message": "பிரிவுகளை அழிக்கவும்"
},
"openPopup": {
"message": "ஸ்பான்சர் பிளாக் பாப்அப்பைத் திறக்கவும்"
},
"closePopup": {
"message": "பாப்அப்பை மூடு"
},
"SubmitTimes": {
"message": "பிரிவுகளைச் சமர்ப்பிக்கவும்"
},
"submitCheck": {
"message": "இதை நிச்சயமாக சமர்ப்பிக்க விரும்புகிறீர்களா?"
},
"whitelistChannel": {
"message": "அனுமதிப்பட்டியல் சேனல்"
},
"removeFromWhitelist": {
"message": "அனுமதிப்பட்டியலில் இருந்து சேனலை அகற்று"
},
"voteOnTime": {
"message": "ஒரு பிரிவில் வாக்களியுங்கள்"
},
"Submissions": {
"message": "சமர்ப்பிப்புகள்"
},
"savedPeopleFrom": {
"message": "நீங்கள் மக்களை காப்பாற்றியுள்ளீர்கள் "
},
"viewLeaderboard": {
"message": "லீடர்போர்டு"
},
"recordTimesDescription": {
"message": "சமர்ப்பிக்கவும்"
},
"submissionEditHint": {
"message": "நீங்கள் சமர்ப்பி என்பதைக் கிளிக் செய்த பிறகு பிரிவு எடிட்டிங் தோன்றும்",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "குறிப்பு: விருப்பங்களில் சமர்ப்பிக்க விசைப்பலகைகளை அமைக்கலாம்"
},
"clearTimesButton": {
"message": "நேரங்களை அழி"
},
"submitTimesButton": {
"message": "நேரங்களைச் சமர்ப்பிக்கவும்"
},
"publicStats": {
"message": "நீங்கள் எவ்வளவு பங்களித்தீர்கள் என்பதைக் காட்ட இது பொது புள்ளிவிவரங்கள் பக்கத்தில் பயன்படுத்தப்படுகிறது. அதை பார்"
},
"Username": {
"message": "பயனர்பெயர்"
},
"setUsername": {
"message": "பயனர்பெயரை அமைக்கவும்"
},
"copyPublicID": {
"message": "பொது பயனர் IDயை நகலெடுக்கவும்"
},
"copySegmentID": {
"message": "துண்டத்தின் IDஐ நகலெடு"
},
"discordAdvert": {
"message": "பரிந்துரைகள் மற்றும் கருத்துக்களை வழங்க அதிகாரப்பூர்வ டிஸ்கார்ட் சேவையகத்தில் சேர வாருங்கள்!"
},
"hideThis": {
"message": "இதை மறை"
},
"Options": {
"message": "விருப்பங்கள்"
},
"showButtons": {
"message": "YouTube பிளேயரில் பொத்தான்களைக் காட்டு"
},
"hideButtons": {
"message": "YouTube பிளேயரில் பொத்தான்களை மறைக்கவும்"
},
"hideButtonsDescription": {
"message": "ஸ்கிப் பிரிவுகளைச் சமர்ப்பிக்க YouTube பிளேயரில் தோன்றும் பொத்தான்களை இது மறைக்கிறது."
},
"showSkipButton": {
"message": "பிளேயரில் Skip To Highlight பொத்தானை வைக்கவும்"
},
"showInfoButton": {
"message": "YouTube பிளேயரில் தகவல் பொத்தானைக் காட்டு"
},
"hideInfoButton": {
"message": "YouTube பிளேயரில் தகவல் பொத்தானை மறைக்கவும்"
},
"autoHideInfoButton": {
"message": "தகவல் பொத்தானை தானாக மறைக்கவும்"
},
"hideDeleteButton": {
"message": "YouTube பிளேயரில் நீக்கு பொத்தானை மறைக்க"
},
"showDeleteButton": {
"message": "YouTube பிளேயரில் நீக்கு பொத்தானைக் காட்டு"
},
"enableViewTracking": {
"message": "ஸ்கிப் கவுண்ட் டிராக்கிங்கை இயக்கு"
},
"whatViewTracking": {
"message": "இந்த அம்சம் பயனர்கள் தங்கள் சமர்ப்பிப்பு மற்றவர்களுக்கு எவ்வளவு உதவியது மற்றும் ஸ்பேம் தரவுத்தளத்தில் வரவில்லை என்பதை உறுதிப்படுத்த அப்வோட்களுடன் ஒரு மெட்ரிக்காகப் பயன்படுத்தப்படுவதை பயனர்களுக்குத் தெரியப்படுத்த நீங்கள் எந்த பகுதிகளைத் தவிர்த்துவிட்டீர்கள் என்பதைக் கண்காணிக்கிறது. ஒவ்வொரு முறையும் நீங்கள் ஒரு பகுதியைத் தவிர்க்கும்போது நீட்டிப்பு சேவையகத்திற்கு ஒரு செய்தியை அனுப்புகிறது. பார்வை எண்கள் துல்லியமாக இருக்க பெரும்பாலான மக்கள் இந்த அமைப்பை மாற்ற மாட்டார்கள் என்று நம்புகிறோம். :)"
},
"enableViewTrackingInPrivate": {
"message": "தனிப்பட்ட/மறைநிலை தாவல்களில் ஸ்கிப் கவுண்ட் டிராக்கிங்கை இயக்கவும்"
},
"enableTrackDownvotes": {
"message": "துண்டத்தின் வாக்கிறக்கங்களைச் சேமி"
},
"whatTrackDownvotes": {
"message": "புதுப்பித்தப் பின் நீங்கள் வாக்கிறக்கிய துண்டங்கள் மறைந்தே இருக்கும்"
},
"trackDownvotesWarning": {
"message": "எச்சரிக்கை: இதை முடக்குதல் முன்னர் சேமித்த எல்லா வாக்கிறக்கங்களையும் அழிக்கும்"
},
"enableQueryByHashPrefix": {
"message": "ஹாஷ் முன்னொட்டு மூலம் வினவல்"
},
"whatQueryByHashPrefix": {
"message": "வீடியோஐடியைப் பயன்படுத்தி சேவையகத்திலிருந்து பிரிவுகளைக் கோருவதற்கு பதிலாக, வீடியோஐடியின் ஹாஷின் முதல் 4 எழுத்துக்கள் அனுப்பப்படுகின்றன. இந்த சேவையகம் எல்லா வீடியோக்களுக்கும் ஒத்த ஹாஷ்கள் கொண்ட தரவை திருப்பி அனுப்பும்."
},
"enableRefetchWhenNotFound": {
"message": "புதிய வீடியோக்களில் பிரிவுகளை மீண்டும் பெறுக"
},
"whatRefetchWhenNotFound": {
"message": "வீடியோ புதியது மற்றும் எந்தப் பகுதியும் காணப்படவில்லை என்றால், நீங்கள் பார்க்கும் போது ஒவ்வொரு சில நிமிடங்களுக்கும் இது மீண்டும் புதுப்பிக்கப்படும்."
},
"showNotice": {
"message": "அறிவிப்பை மீண்டும் காட்டு"
},
"showSkipNotice": {
"message": "ஒரு பிரிவு தவிர்க்கப்பட்ட பிறகு அறிவிப்பைக் காட்டு"
},
"noticeVisibilityMode0": {
"message": "முழு அளவு தவிர்க்கும் அறிவிப்புகள்"
},
"noticeVisibilityMode1": {
"message": "ஆட்டோ ஸ்கிப்பிற்கான சிறிய ஸ்கிப் அறிவிப்புகள்"
},
"noticeVisibilityMode2": {
"message": "அனைத்து சிறிய தவிர்க்கும் அறிவிப்புகள்"
},
"noticeVisibilityMode3": {
"message": "ஆட்டோ ஸ்கிப்பிற்கான மங்கலான தவிர்க்கும் அறிவிப்புகள்"
},
"noticeVisibilityMode4": {
"message": "அனைத்து மங்கலான தவிர்க்கும் அறிவிப்புகள்"
},
"longDescription": {
"message": "ஸ்பான்சர்கள், அறிமுகங்கள், அவுட்ரோஸ், சந்தா நினைவூட்டல்கள் மற்றும் YouTube வீடியோக்களின் பிற எரிச்சலூட்டும் பகுதிகளைத் தவிர்க்க ஸ்பான்சர் பிளாக் உங்களை அனுமதிக்கிறது. ஸ்பான்சர் பிளாக் என்பது ஒரு கூட்ட நெரிசலான உலாவி நீட்டிப்பாகும், இது ஸ்பான்சர் செய்யப்பட்ட பிரிவுகளின் தொடக்க மற்றும் இறுதி நேரங்களையும் YouTube வீடியோக்களின் பிற பிரிவுகளையும் எவரும் சமர்ப்பிக்கலாம். ஒரு நபர் இந்த தகவலைச் சமர்ப்பித்தவுடன், இந்த நீட்டிப்பு உள்ள மற்றவர்கள் ஸ்பான்சர் செய்யப்பட்ட பிரிவைத் தவிர்த்து விடுவார்கள். இசை வீடியோக்களின் இசை அல்லாத பிரிவுகளையும் நீங்கள் தவிர்க்கலாம்.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "இணையதளம்",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "மூல குறியீடு",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "அறிவிப்பு மேம்படுத்தப்பட்டது!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "உங்களுக்கு இன்னும் பிடிக்கவில்லை என்றால், ஒருபோதும் காண்பி பொத்தானை அழுத்தவும்.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setSkipShortcut": {
"message": "துண்டத்தைக் கெந்து",
"description": "Keybind label"
},
"setStartSponsorShortcut": {
"message": "துண்டத்தை ஆரம்பி/நிறுத்து",
"description": "Keybind label"
},
"setSubmitKeybind": {
"message": "துண்டங்களைச் சமர்ப்பி",
"description": "Keybind label"
},
"0": {
"message": "இணைப்பு நேரம் முடிந்தது. உங்கள் இணைய இணைப்பைச் சரிபார்க்கவும். உங்கள் இணையம் இயங்கினால், சேவையகம் அதிக சுமை அல்லது கீழே இருக்கும்."
},
"disableSkipping": {
"message": "ஸ்கிப்பிங் இயக்கப்பட்டது"
},
"enableSkipping": {
"message": "ஸ்கிப்பிங் முடக்கப்பட்டுள்ளது"
},
"yourWork": {
"message": "உங்கள் வேலை",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "சேவையகம் அதிக சுமை கொண்டதாக தெரிகிறது. சில நொடிகளில் மீண்டும் முயற்சிக்கவும்."
},
"errorCode": {
"message": "பிழை குறியீடு: "
},
"skip": {
"message": "தவிர்"
},
"mute": {
"message": "ஒலியடக்கு"
},
"full": {
"message": "முழு காணொளி",
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
"message": "{0} ஐ தவிர்?"
},
"mute_category": {
"message": "{0} ஐ ஒலியடக்கவா?"
},
"skip_to_category": {
"message": "{0} க்குச் செல்லவா?",
"description": "Used for skipping to things (Skip to Highlight)"
},
"skipped": {
"message": "{0} தவிர்க்கப்பட்டது",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} ஒலியடக்கப்பட்டது",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "{0} தவிர்க்கப்பட்டது",
"description": "Used for skipping to things (Skipped to Highlight)"
},
"disableAutoSkip": {
"message": "ஆட்டோ ஸ்கிப்பை முடக்கு"
},
"enableAutoSkip": {
"message": "ஆட்டோ ஸ்கிப்பை இயக்கு"
},
"audioNotification": {
"message": "தவிர்க்க ஆடியோ அறிவிப்பு"
},
"audioNotificationDescription": {
"message": "ஒரு பகுதியைத் தவிர்க்கும்போதெல்லாம் ஸ்கிப்பில் ஆடியோ அறிவிப்பு ஒலிக்கும். முடக்கப்பட்டிருந்தால் (அல்லது தானாகத் தவிர் முடக்கப்பட்டுள்ளது), ஒலி எதுவும் இயக்கப்படாது."
},
"showTimeWithSkips": {
"message": "அகற்றப்பட்ட ஸ்கிப்களுடன் நேரத்தைக் காட்டு"
},
"showTimeWithSkipsDescription": {
"message": "இந்த நேரம் தற்போதைய நேரத்திற்கு அடுத்த அடைப்புக்குறிக்குள் தோன்றும். இது எந்தவொரு வீடியோவிற்கும் கழித்த மொத்த வீடியோ கால அளவைக் காட்டுகிறது. இதில் \"சீக்பாரில் காண்பி\" என்று மட்டுமே குறிக்கப்பட்ட பகுதிகள் அடங்கும்."
},
"youHaveSkipped": {
"message": "நீங்கள் தவிர்த்துவிட்டீர்கள் "
},
"minLower": {
"message": "நிமிடம்"
},
"minsLower": {
"message": "நிமிடங்கள்"
},
"hourLower": {
"message": "மணி"
},
"hoursLower": {
"message": "மணி"
},
"youHaveSavedTime": {
"message": "நீங்கள் மக்களைக் காப்பாற்றியுள்ளீர்கள்",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": " அவர்களின் வாழ்க்கையில்",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "சேவையக நிலைக்கு status.sponsor.ajay.app ஐச் சரிபார்க்கவும்."
},
"whatChangeUserID": {
"message": "இதை தனிப்பட்டதாக வைத்திருக்க வேண்டும். இது கடவுச்சொல் போன்றது, அதை யாருடனும் பகிரக்கூடாது. யாரிடமாவது இது இருந்தால், அவர் உங்களைப் போல் ஆள்மாறாட்டம் செய்யலாம். உங்கள் பொது பயனர் IDயை நீங்கள் தேடுகிறீர்களானால், பாப்அப்பில் உள்ள கிளிப்போர்டு ஐகானைக் கிளிக் செய்யவும்."
},
"createdBy": {
"message": "உருவாக்கியது"
},
"supportOtherSites": {
"message": "3 வது தரப்பு YouTube-தளங்களை ஆதரிக்கவும்"
},
"supportOtherSitesDescription": {
"message": "மூன்றாம் தரப்பு YouTube தளங்களை ஆதரிக்கவும். ஆதரவை இயக்க, நீங்கள் கூடுதல் அனுமதிகளை ஏற்க வேண்டும். இது Chrome மற்றும் பிற Chromium வகைகளில் தனிப்பட்ட தாவல்களில் வேலை செய்யாது.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
"message": "ஆதரிக்கப்படும் தளங்கள்: "
},
"optionsInfo": {
"message": "ஆக்கிரமிப்பு ஆதரவை இயக்கு, ஆட்டோஸ்கிப்பை முடக்கு, பொத்தான்களை மறை மற்றும் பலவற்றை."
},
"addInvidiousInstance": {
"message": "3 வது தரப்பு தளங்களை சேர்க்கவும்"
},
"addInvidiousInstanceDescription": {
"message": "தனிப்பட்ட தளங்களை சேர்க்கவும். இது Domain வடிவமைப்பில் இருக்க வேண்டும். உதாரணம்: invidious.ajay.app"
},
"add": {
"message": "சேர்"
},
"addInvidiousInstanceError": {
"message": "இது தவறான களமாகும். இது டொமைன் பகுதியை மட்டுமே கொண்டிருக்க வேண்டும். எடுத்துக்காட்டு: invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "Invidous நிகழ்வு பட்டியலை மீட்டமைக்கவும்"
},
"resetInvidiousInstanceAlert": {
"message": "Invidous நிகழ்வு பட்டியலை மீட்டமைக்கவும்"
},
"currentInstances": {
"message": "தற்போதைய நிகழ்வுகள்:"
},
"minDuration": {
"message": "குறைந்தபட்ச காலம் (விநாடிகள்):"
},
"minDurationDescription": {
"message": "தொகுப்பு மதிப்பை விடக் குறைவான பகுதிகள் தவிர்க்கப்படாது அல்லது பிளேயரில் காண்பிக்கப்படாது."
},
"skipNoticeDuration": {
"message": "அறிவிப்பு காலத்தை தவிர்க்கவும் (வினாடிகள்):"
},
"skipNoticeDurationDescription": {
"message": "தவிர்க்கும் அறிவிப்பு குறைந்தபட்சம் இவ்வளவு நேரம் திரையில் இருக்கும். மேனுவல் ஸ்கிப்பிங்கிற்கு, இது நீண்ட நேரம் தெரியும்."
},
"shortCheck": {
"message": "பின்வரும் சமர்ப்பிப்பு உங்கள் குறைந்தபட்ச கால விருப்பத்தை விட குறைவாக உள்ளது. இது ஏற்கனவே சமர்ப்பிக்கப்பட்டுள்ளது என்பதையும், இந்த விருப்பத்தின் காரணமாக புறக்கணிக்கப்படுவதையும் இது குறிக்கலாம். நீங்கள் சமர்ப்பிக்க விரும்புகிறீர்களா?"
},
"showUploadButton": {
"message": "பதிவேற்ற பொத்தானைக் காட்டு"
},
"customServerAddress": {
"message": "ஸ்பான்சர் பிளாக் சேவையக முகவரி"
},
"customServerAddressDescription": {
"message": "சேவையகத்திற்கு அழைப்புகளைச் செய்ய ஸ்பான்சர் பிளாக் பயன்படுத்தும் முகவரி.\nஉங்களிடம் உங்கள் சொந்த சேவையக நிகழ்வு இல்லையென்றால், இதை மாற்றக்கூடாது."
},
"save": {
"message": "சேமி"
},
"reset": {
"message": "மீட்டமை"
},
"customAddressError": {
"message": "இந்த முகவரி சரியான வடிவத்தில் இல்லை. உங்களிடம் ஆரம்பத்தில் http: // அல்லது https: // இருப்பதை உறுதிசெய்து கொள்ளுங்கள்."
},
"areYouSureReset": {
"message": "இதை மீட்டமைக்க விரும்புகிறீர்களா?"
},
"mobileUpdateInfo": {
"message": "m.youtube.com இப்போது துணைபுரிகிறது"
},
"exportOptions": {
"message": "அனைத்து விருப்பங்களையும் இறக்குமதி / ஏற்றுமதி"
},
"exportOptionsCopy": {
"message": "திருத்து/நகலெடு"
},
"exportOptionsDownload": {
"message": "கோப்பிற்கு சேமி"
},
"exportOptionsUpload": {
"message": "கோப்பிலிருந்து ஏற்று"
},
"setOptions": {
"message": "விருப்பங்களை அமைக்கவும்"
},
"exportOptionsWarning": {
"message": "எச்சரிக்கை: விருப்பங்களை மாற்றுவது நிரந்தரமானது மற்றும் உங்கள் நிறுவலை உடைக்கலாம். இதை நிச்சயமாக செய்ய விரும்புகிறீர்களா? உங்கள் பழையதை காப்புப்பிரதி எடுக்க உறுதிசெய்க."
},
"incorrectlyFormattedOptions": {
"message": "இந்த JSON சரியாக வடிவமைக்கப்படவில்லை. உங்கள் விருப்பங்கள் மாற்றப்படவில்லை."
},
"confirmNoticeTitle": {
"message": "பகுதியை சமர்ப்பிக்கவும்"
},
"submit": {
"message": "சமர்ப்பிக்கவும்"
},
"cancel": {
"message": "ரத்துசெய்"
},
"delete": {
"message": "அழி"
},
"preview": {
"message": "முன்னோட்ட"
},
"unsubmitted": {
"message": "சமர்ப்பிக்கப்படவில்லை"
},
"inspect": {
"message": "ஆய்வு செய்யுங்கள்"
},
"edit": {
"message": "தொகு"
},
"copyDebugInformation": {
"message": "பிழைத்திருத்த தகவலை கிளிப்போர்டுக்கு நகலெடுக்கவும்"
},
"copyDebugInformationFailed": {
"message": "கிளிப்போர்டுக்கு எழுத முடியவில்லை"
},
"copyDebugInformationOptions": {
"message": "ஒரு பிழையை எழுப்பும்போது / ஒரு டெவலப்பர் கோருகையில் ஒரு டெவலப்பருக்கு வழங்க வேண்டிய தகவலை கிளிப்போர்டுக்கு நகலெடுக்கிறது. உங்கள் பயனர் ஐடி, அனுமதிப்பட்டியல் சேனல்கள் மற்றும் தனிப்பயன் சேவையக முகவரி போன்ற உணர்திறன் தகவல்கள் அகற்றப்பட்டுள்ளன. இருப்பினும் இது உங்கள் பயனர், உலாவி, இயக்க முறைமை மற்றும் நீட்டிப்பு பதிப்பு எண் போன்ற தகவல்களைக் கொண்டுள்ளது. "
},
"copyDebugInformationComplete": {
"message": "பிழைத்திருத்த தகவல்கள் கிளிப் போர்டில் நகலெடுக்கப்பட்டுள்ளன. நீங்கள் பகிர விரும்பாத எந்த தகவலையும் அகற்ற தயங்க. இதை உரை கோப்பில் சேமிக்கவும் அல்லது பிழை அறிக்கையில் ஒட்டவும்."
},
"to": {
"message": "க்கு",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"category_sponsor": {
"message": "ஸ்பான்சர்"
},
"category_sponsor_description": {
"message": "கட்டண பதவி உயர்வு, கட்டண பரிந்துரைகள் மற்றும் நேரடி விளம்பரங்கள். சுய விளம்பரத்திற்காகவோ அல்லது அவர்கள் விரும்பும் காரணங்கள் / படைப்பாளிகள் / வலைத்தளங்கள் / தயாரிப்புகளுக்கு இலவசக் கூச்சலுக்காகவோ அல்ல."
},
"category_selfpromo": {
"message": "செலுத்தப்படாத / சுய ஊக்குவிப்பு"
},
"category_selfpromo_description": {
"message": "செலுத்தப்படாத அல்லது சுய விளம்பரத்தைத் தவிர \"ஸ்பான்சர்\" போன்றது. பொருட்கள், நன்கொடைகள் அல்லது அவர்கள் யாருடன் ஒத்துழைத்தார்கள் என்பது பற்றிய தகவல்கள் இதில் அடங்கும்."
},
"category_exclusive_access": {
"message": "பிரத்யேக அணுகல்"
},
"category_interaction": {
"message": "தொடர்பு நினைவூட்டல் (குழுசேர்)"
},
"category_interaction_description": {
"message": "உள்ளடக்கத்தின் நடுவில் அவற்றைப் பிடிக்க, குழுசேர அல்லது பின்பற்ற ஒரு குறுகிய நினைவூட்டல் இருக்கும்போது. இது நீண்டதாகவோ அல்லது குறிப்பிட்ட ஒன்றைப் பற்றியோ இருந்தால், அதற்கு பதிலாக அது சுய விளம்பரத்தின் கீழ் இருக்க வேண்டும்."
},
"category_interaction_short": {
"message": "தொடர்பு நினைவூட்டல்"
},
"category_intro": {
"message": "இடைமறிப்பு / அறிமுக அனிமேஷன்"
},
"category_intro_description": {
"message": "உண்மையான உள்ளடக்கம் இல்லாத இடைவெளி. இடைநிறுத்தம், நிலையான சட்டகம், மீண்டும் மீண்டும் அனிமேஷன் இருக்கலாம். தகவல்களைக் கொண்ட மாற்றங்களுக்கு இது பயன்படுத்தப்படக்கூடாது."
},
"category_intro_short": {
"message": "இடைமறிப்பு"
},
"category_outro": {
"message": "எண்ட்கார்டுகள் / வரவு"
},
"category_outro_description": {
"message": "வரவுகளை அல்லது YouTube எண்ட்கார்டுகள் தோன்றும் போது. தகவலுடன் முடிவுகளுக்கு அல்ல."
},
"category_preview": {
"message": "முன்னோட்டம்/மறுபரிசீலனை"
},
"category_filler_short": {
"message": "நிரப்பி"
},
"category_music_offtopic": {
"message": "இசை: இசை அல்லாத பிரிவு"
},
"category_music_offtopic_description": {
"message": "இசை வீடியோக்களில் மட்டுமே பயன்படுத்த வேண்டும். இது ஏற்கனவே மற்றொரு வகையால் மூடப்பட்டிருக்கும் இசை வீடியோக்களின் பிரிவுகளுக்கு மட்டுமே பயன்படுத்தப்பட வேண்டும்."
},
"category_music_offtopic_short": {
"message": "இசை அல்லாதது"
},
"category_poi_highlight": {
"message": "முன்னிலைப்படுத்த"
},
"category_poi_highlight_description": {
"message": "பெரும்பாலான மக்கள் தேடும் வீடியோவின் பகுதி. \"வீடியோ x இல் தொடங்குகிறது\" போன்றது."
},
"category_livestream_messages": {
"message": "லைவ்ஸ்ட்ரீம்: நன்கொடை / செய்தி அளவீடுகள்"
},
"category_livestream_messages_short": {
"message": "செய்தி வாசிப்பு"
},
"autoSkip": {
"message": "ஆட்டோ ஸ்கிப்"
},
"manualSkip": {
"message": "கையேடு தவிர்"
},
"showOverlay": {
"message": "சீக் பட்டியில் காட்டு"
},
"disable": {
"message": "முடக்கு"
},
"autoSkip_POI": {
"message": "துவக்கத்திற்கு தானாகக் கெந்து"
},
"manualSkip_POI": {
"message": "காணொளி ஏறுகையில் கேள்"
},
"previewColor": {
"message": "சமர்ப்பிக்கப்படாதவை நிறம்",
"description": "Referring to submissions that have not been sent to the server yet."
},
"seekBarColor": {
"message": "பார் வண்ணத்தைத் தேடுங்கள்"
},
"category": {
"message": "வகை"
},
"skipOption": {
"message": "விருப்பத்தைத் தவிர்",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "பீட்டா சோதனை சேவையகத்தை இயக்கு"
},
"whatEnableTestingServer": {
"message": "உங்கள் சமர்ப்பிப்புகள் மற்றும் வாக்குகள் பிரதான சேவையகத்தை நோக்கி வராது. சோதனைக்கு மட்டுமே இதைப் பயன்படுத்தவும்."
},
"testingServerWarning": {
"message": "சோதனை சேவையகத்துடன் இணைக்கும்போது அனைத்து சமர்ப்பிப்புகளும் வாக்குகளும் பிரதான சேவையகத்தை நோக்கி வராது. நீங்கள் உண்மையான சமர்ப்பிப்புகளை செய்ய விரும்பும்போது இதை முடக்க உறுதிப்படுத்தவும்."
},
"bracketNow": {
"message": "(இப்போது)"
},
"moreCategories": {
"message": "மேலும் வகைகள்"
},
"chooseACategory": {
"message": "ஒரு வகையைத் தேர்வுசெய்க"
},
"enableThisCategoryFirst": {
"message": "\"{0}\" வகையுடன் பிரிவுகளைச் சமர்ப்பிக்க, நீங்கள் அதை விருப்பங்களில் இயக்க வேண்டும். நீங்கள் இப்போது விருப்பங்களுக்கு திருப்பி விடப்படுவீர்கள்.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"youMustSelectACategory": {
"message": "நீங்கள் சமர்ப்பிக்கும் அனைத்து பிரிவுகளுக்கும் ஒரு வகையைத் தேர்ந்தெடுக்க வேண்டும்!"
},
"bracketEnd": {
"message": "(முடிவு)"
},
"hiddenDueToDownvote": {
"message": "மறைக்கப்பட்ட: கீழ்நோக்கி"
},
"hiddenDueToDuration": {
"message": "மறைக்கப்பட்ட: மிகக் குறுகிய"
},
"manuallyHidden": {
"message": "கைமுறையாக மறைக்கப்பட்டது"
},
"acceptPermission": {
"message": "அனுமதியை ஏற்றுக்கொள்"
},
"permissionRequestSuccess": {
"message": "அனுமதி கோரிக்கை வெற்றி!"
},
"forceChannelCheck": {
"message": "தவிர்ப்பதற்கு முன் சேனல் சோதனை கட்டாயப்படுத்தவும்"
},
"whatForceChannelCheck": {
"message": "இயல்பாக, சேனல் என்னவென்று கூடத் தெரிவதற்கு முன்பே அது பிரிவுகளைத் தவிர்க்கும். இயல்பாக, வீடியோவின் தொடக்கத்தில் சில பகுதிகள் அனுமதிப்பட்டியல் சேனல்களில் தவிர்க்கப்படலாம். இந்த விருப்பத்தை இயக்குவது இதைத் தடுக்கும், ஆனால் சேனல் ஐடியைப் பெறுவதற்கு சிறிது நேரம் ஆகலாம் என்பதால் எல்லா ஸ்கிப்பிங்கையும் சிறிது தாமதப்படுத்துகிறது. உங்களிடம் வேகமான இணையம் இருந்தால் இந்த தாமதம் கவனிக்கப்படாமல் இருக்கலாம்."
},
"forceChannelCheckPopup": {
"message": "\"தவிர்க்கும் முன் சேனல் சரிபார்ப்பை\" இயக்குவதைக் கருத்தில் கொள்ளுங்கள்"
},
"downvoteDescription": {
"message": "தவறான / தவறான நேரம்"
},
"incorrectCategory": {
"message": "வகையை மாற்று"
},
"nonMusicCategoryOnMusic": {
"message": "இந்த வீடியோ இசை என வகைப்படுத்தப்பட்டுள்ளது. இதற்கு ஒரு ஸ்பான்சர் இருப்பதை நீங்கள் உறுதியாக நம்புகிறீர்களா? இது உண்மையில் \"இசை அல்லாத பிரிவு\" என்றால், நீட்டிப்பு விருப்பங்களைத் திறந்து இந்த வகையை இயக்கவும். பின்னர், நீங்கள் இந்த பகுதியை ஸ்பான்சருக்கு பதிலாக \"இசை அல்லாதது\" என்று சமர்ப்பிக்கலாம். நீங்கள் குழப்பமாக இருந்தால் வழிகாட்டுதல்களைப் படிக்கவும்."
},
"multipleSegments": {
"message": "பல பிரிவுகள்"
},
"guidelines": {
"message": "வழிகாட்டுதல்கள்"
},
"readTheGuidelines": {
"message": "வழிகாட்டுதல்களைப் படியுங்கள்!!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"categoryUpdate1": {
"message": "வகைகள் இங்கே!"
},
"categoryUpdate2": {
"message": "அறிமுகங்கள், அவுட்ரோஸ், மெர்ச் போன்றவற்றைத் தவிர்க்க விருப்பங்களைத் திறக்கவும்."
},
"help": {
"message": "உதவி"
},
"GotIt": {
"message": "புரிந்தது",
"description": "Used as the button to dismiss a tooltip"
},
"hideForever": {
"message": "என்றென்றும் மறை"
},
"Donate": {
"message": "கொடையளி"
},
"hideDonationLink": {
"message": "நன்கொடை இணைப்பை மறை"
},
"darkModeOptionsPage": {
"message": "தெரிவுகள் பக்கத்தில் இருண்ட பயன்முறை"
},
"helpPageThanksForInstalling": {
"message": "ஸ்பான்சர்ப்ளாக் நிறுவியதற்கு நன்றி."
},
"ContinueVoting": {
"message": "தொடர்ந்து வாக்களி"
},
"ChangeCategoryTooltip": {
"message": "இது உம் துண்டங்களை உடனடியாகச் செயல்படுத்தும்"
},
"downvote": {
"message": "வாக்கிறக்கு"
},
"upvote": {
"message": "வாக்கேற்று"
},
"hideSegment": {
"message": "துண்டத்தை மறை"
},
"dayAbbreviation": {
"message": "நா",
"description": "100d"
},
"hourAbbreviation": {
"message": "ம",
"description": "100h"
},
"optionsTabBehavior": {
"message": "நடத்தை",
"description": "Appears in Options as a tab header for options related to categories and skipping behavior. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabInterface": {
"message": "இடைமுகம்",
"description": "Appears in Options as a tab header for options related to GUI and sounds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabKeyBinds": {
"message": "விசைப்பலகை குறுக்குவழிகள்",
"description": "Appears in Options as a tab header for keybinds. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabBackup": {
"message": "காப்புநகல்/மீட்டெடுப்பு",
"description": "Appears in Options as a tab header for options related to saving/restoring your settings. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"optionsTabAdvanced": {
"message": "இதர",
"description": "Appears in Options as a tab header for advanced/niche options. To fit inside the button, it should not be longer than ~20-25 characters (depending on their width)."
},
"notSet": {
"message": "அமைக்கவில்லை"
},
"change": {
"message": "மாற்று"
},
"betaServerWarning": {
"message": "பீட்டா சேவையகம் இயக்கப்பட்டுள்ளது!"
},
"openOptionsPage": {
"message": "தெரிவுகள் பக்கத்தைத் திற"
}
}

View File

@@ -1,539 +0,0 @@
{
"fullName": {
"message": "YouTube కోసం SponsorBlock - స్పాన్సర్‌షిప్‌లను దాటవేయి",
"description": "Name of the extension."
},
"Description": {
"message": "YouTube వీడియోలలో స్పాన్సర్‌షిప్‌లు, సభ్యత్వ యాచన మరియు మరిన్ని దాటవేయండి. ఇతరుల సమయాన్ని ఆదా చేయడానికి మీరు చూసే వీడియోలపై స్పాన్సర్‌లను నివేదించండి.",
"description": "Description of the extension."
},
"400": {
"message": "ఈ అభ్యర్థన చెల్లదని సర్వర్ తెలిపింది"
},
"429": {
"message": "ఈ ఒక వీడియో కోసం మీరు చాలా స్పాన్సర్ సమయాలను సమర్పించారు, ఈ చాలా ఉన్నాయి అని మీరు ఖచ్చితంగా అనుకుంటున్నారా?"
},
"409": {
"message": "ఇది ఇప్పటికే ముందు సమర్పించబడింది"
},
"channelWhitelisted": {
"message": "ఛానెల్ వైట్‌లిస్ట్!"
},
"Segment": {
"message": "విభాగం"
},
"Segments": {
"message": "విభాగాలు"
},
"upvoteButtonInfo": {
"message": "ఈ సమర్పణను పెంచండి"
},
"reportButtonTitle": {
"message": "నివేదిక"
},
"reportButtonInfo": {
"message": "ఈ సమర్పణ తప్పు అని నివేదించండి."
},
"Dismiss": {
"message": "రద్దుచేసే"
},
"Loading": {
"message": "లోడ్ అవుతుంది..."
},
"Hide": {
"message": "నెవర్ షో"
},
"hitGoBack": {
"message": "మీరు ఎక్కడి నుండి వచ్చారో అన్‌స్కిప్ నొక్కండి."
},
"unskip": {
"message": "అన్‌స్కిప్"
},
"reskip": {
"message": "రెస్కిప్"
},
"paused": {
"message": "పాజ్ చేయబడింది"
},
"manualPaused": {
"message": "టైమర్ ఆగిపోయింది"
},
"confirmMSG": {
"message": "వ్యక్తిగత విలువలను సవరించడానికి లేదా తొలగించడానికి, ఎగువ కుడి మూలలోని పొడిగింపు చిహ్నాన్ని క్లిక్ చేయడం ద్వారా సమాచార బటన్‌ను క్లిక్ చేయండి లేదా పొడిగింపు పాపప్‌ను తెరవండి."
},
"clearThis": {
"message": "మీరు దీన్ని ఖచ్చితంగా క్లియర్ చేయాలనుకుంటున్నారా?\n\n"
},
"Unknown": {
"message": "మీ స్పాన్సర్ సమయాన్ని సమర్పించడంలో లోపం ఉంది, దయచేసి తర్వాత మళ్లీ ప్రయత్నించండి."
},
"sponsorFound": {
"message": "ఈ వీడియో డేటాబేస్లో విభాగాలు ఉన్నాయి!"
},
"sponsor404": {
"message": "విభాగాలు ఏవీ కనుగొనబడలేదు"
},
"sponsorStart": {
"message": "విభాగం ఇప్పుడు ప్రారంభమవుతుంది"
},
"sponsorEnd": {
"message": "సెగ్మెంట్ ఇప్పుడు ముగుస్తుంది"
},
"noVideoID": {
"message": "YouTube వీడియో కనుగొనబడలేదు.\nఇది తప్పు అయితే, టాబ్‌ను రిఫ్రెష్ చేయండి."
},
"success": {
"message": "విజయం!"
},
"voted": {
"message": "ఓటు వేశారు!"
},
"serverDown": {
"message": "సర్వర్ డౌన్ అయిందనిపిస్తోంది. వెంటనే డెవలపర్‌ను సంప్రదించండి."
},
"connectionError": {
"message": "కనెక్షన్ లోపం సంభవించింది. లోపం కోడ్: "
},
"clearTimes": {
"message": "విభాగాలను క్లియర్ చేయండి"
},
"openPopup": {
"message": "స్పాన్సర్బ్లాక్ పాపప్‌ను తెరవండి"
},
"closePopup": {
"message": "పాపప్ మూసివేయండి"
},
"SubmitTimes": {
"message": "విభాగాలను సమర్పించండి"
},
"submitCheck": {
"message": "మీరు దీన్ని ఖచ్చితంగా సమర్పించాలనుకుంటున్నారా?"
},
"whitelistChannel": {
"message": "వైట్‌లిస్ట్ ఛానెల్"
},
"removeFromWhitelist": {
"message": "వైట్‌లిస్ట్ నుండి ఛానెల్‌ని తొలగించండి"
},
"voteOnTime": {
"message": "ఒక విభాగంలో ఓటు వేయండి"
},
"Submissions": {
"message": "సమర్పణలు"
},
"savedPeopleFrom": {
"message": "మీరు ప్రజలను రక్షించారు "
},
"viewLeaderboard": {
"message": "లీడర్‌బోర్డ్"
},
"recordTimesDescription": {
"message": "సమర్పించండి"
},
"submissionEditHint": {
"message": "మీరు సమర్పించు క్లిక్ చేసిన తర్వాత విభాగం సవరణ కనిపిస్తుంది",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "సూచన: మీరు ఎంపికలలో సమర్పించడానికి కీబైండ్లను సెటప్ చేయవచ్చు"
},
"clearTimesButton": {
"message": "టైమ్స్ క్లియర్"
},
"submitTimesButton": {
"message": "టైమ్స్ సమర్పించండి"
},
"publicStats": {
"message": "మీరు ఎంత సహకరించారో చూపించడానికి ఇది పబ్లిక్ గణాంకాల పేజీలో ఉపయోగించబడుతుంది. ఇది చూడు"
},
"Username": {
"message": "వినియోగదారు పేరు"
},
"setUsername": {
"message": "వినియోగదారు పేరును సెట్ చేయండి"
},
"discordAdvert": {
"message": "సూచనలు మరియు అభిప్రాయాలను ఇవ్వడానికి అధికారిక అసమ్మతి సర్వర్‌లో చేరండి!"
},
"hideThis": {
"message": "దీన్ని దాచండి"
},
"Options": {
"message": "ఎంపికలు"
},
"showButtons": {
"message": "YouTube ప్లేయర్‌లో బటన్లను చూపించు"
},
"hideButtons": {
"message": "YouTube ప్లేయర్‌లో బటన్లను దాచండి"
},
"hideButtonsDescription": {
"message": "దాటవేసే విభాగాలను సమర్పించడానికి ఇది YouTube ప్లేయర్‌లో కనిపించే బటన్లను దాచిపెడుతుంది."
},
"showInfoButton": {
"message": "YouTube ప్లేయర్‌లో సమాచారం బటన్‌ను చూపించు"
},
"hideInfoButton": {
"message": "YouTube ప్లేయర్‌లో సమాచారం బటన్‌ను దాచండి"
},
"hideDeleteButton": {
"message": "YouTube ప్లేయర్‌లో తొలగించు బటన్‌ను దాచండి"
},
"showDeleteButton": {
"message": "YouTube ప్లేయర్‌లో తొలగించు బటన్‌ను చూపించు"
},
"enableViewTracking": {
"message": "స్కిప్ కౌంట్ ట్రాకింగ్‌ను ప్రారంభించండి"
},
"whatViewTracking": {
"message": "ఈ ఫీచర్ మీరు సమర్పించిన విభాగాలు వినియోగదారులకు వారి సమర్పణ ఇతరులకు ఎంతవరకు సహాయపడిందో తెలియజేయడానికి మరియు స్పామ్ డేటాబేస్లోకి రాకుండా చూసుకోవటానికి అప్‌వోట్‌లతో పాటు మెట్రిక్‌గా ఉపయోగించబడుతుందని ట్రాక్ చేస్తుంది. మీరు ప్రతి విభాగాన్ని దాటవేసిన ప్రతిసారీ పొడిగింపు సర్వర్‌కు సందేశాన్ని పంపుతుంది. వీక్షణ సంఖ్యలు ఖచ్చితమైనవి కాబట్టి చాలా మంది ఈ సెట్టింగ్‌ను మార్చరు. :)"
},
"enableQueryByHashPrefix": {
"message": "హాష్ ఉపసర్గ ద్వారా ప్రశ్న"
},
"whatQueryByHashPrefix": {
"message": "వీడియోఐడిని ఉపయోగించి సర్వర్ నుండి విభాగాలను అభ్యర్థించే బదులు, వీడియోఐడి యొక్క హాష్ యొక్క మొదటి 4 అక్షరాలు పంపబడతాయి. ఈ సర్వర్ సారూప్య హాష్‌లతో ఉన్న అన్ని వీడియోల కోసం డేటాను తిరిగి పంపుతుంది."
},
"enableRefetchWhenNotFound": {
"message": "క్రొత్త వీడియోలలో విభాగాలను తిరిగి పొందండి"
},
"whatRefetchWhenNotFound": {
"message": "వీడియో క్రొత్తది మరియు విభాగాలు ఏవీ కనుగొనబడకపోతే, మీరు చూసేటప్పుడు ప్రతి కొన్ని నిమిషాలకు ఇది రీఫెట్ చేస్తూనే ఉంటుంది."
},
"showNotice": {
"message": "మళ్ళీ నోటీసు చూపించు"
},
"showSkipNotice": {
"message": "ఒక విభాగం దాటవేయబడిన తర్వాత నోటీసు చూపించు"
},
"longDescription": {
"message": "స్పాన్సర్లు, పరిచయాలు, ros ట్రోలు, చందా రిమైండర్‌లు మరియు YouTube వీడియోల యొక్క ఇతర బాధించే భాగాలను దాటవేయడానికి స్పాన్సర్‌బ్లాక్ మిమ్మల్ని అనుమతిస్తుంది. స్పాన్సర్బ్లాక్ అనేది క్రౌడ్ సోర్స్డ్ బ్రౌజర్ పొడిగింపు, ఇది ఎవరైనా స్పాన్సర్ చేసిన విభాగాలు మరియు యూట్యూబ్ వీడియోల యొక్క ప్రారంభ మరియు ముగింపు సమయాన్ని సమర్పించనివ్వండి. ఒక వ్యక్తి ఈ సమాచారాన్ని సమర్పించిన తర్వాత, ఈ పొడిగింపు ఉన్న ప్రతి ఒక్కరూ ప్రాయోజిత విభాగంలో దాటవేస్తారు. మీరు మ్యూజిక్ వీడియోల యొక్క నాన్-మ్యూజిక్ విభాగాలను కూడా దాటవేయవచ్చు.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "వెబ్‌సైట్",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "మూల కోడ్",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "నోటీసు అప్‌గ్రేడ్ చేయబడింది!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "మీకు ఇంకా నచ్చకపోతే, ఎప్పుడూ చూపించు బటన్ నొక్కండి.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"0": {
"message": "అనుసంధాన సమయం సమాప్తం. మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేయండి. మీ ఇంటర్నెట్ పనిచేస్తుంటే, సర్వర్ ఓవర్‌లోడ్ లేదా డౌన్ అయి ఉండవచ్చు."
},
"disableSkipping": {
"message": "దాటవేయడం ప్రారంభించబడింది"
},
"enableSkipping": {
"message": "దాటవేయడం నిలిపివేయబడింది"
},
"yourWork": {
"message": "నీ పని",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "సర్వర్ ఓవర్‌లోడ్ అయినట్లు ఉంది. కొన్ని సెకన్లలో మళ్ళీ ప్రయత్నించండి."
},
"errorCode": {
"message": "లోపం కోడ్: "
},
"skip": {
"message": "దాటవేయి"
},
"skip_category": {
"message": "{0} ని దాటవేయాలా?"
},
"disableAutoSkip": {
"message": "ఆటో దాటవేయిని ఆపివేయి"
},
"enableAutoSkip": {
"message": "ఆటో దాటవేయిని ప్రారంభించండి"
},
"audioNotification": {
"message": "దాటవేసిన ఆడియో నోటిఫికేషన్"
},
"audioNotificationDescription": {
"message": "ఒక విభాగం దాటవేయబడినప్పుడల్లా స్కిప్‌లోని ఆడియో నోటిఫికేషన్ ధ్వనిని ప్లే చేస్తుంది. నిలిపివేయబడితే (లేదా ఆటో స్కిప్ నిలిపివేయబడింది), శబ్దం ప్లే చేయబడదు."
},
"showTimeWithSkips": {
"message": "తొలగించబడిన స్కిప్‌లతో సమయాన్ని చూపించు"
},
"showTimeWithSkipsDescription": {
"message": "ఈ సమయం సీక్ బార్ క్రింద ప్రస్తుత సమయం పక్కన బ్రాకెట్లలో కనిపిస్తుంది. ఇది మొత్తం వీడియో వ్యవధి మైనస్ ఏదైనా విభాగాలను చూపుతుంది. ఇందులో \"సీక్బార్లో చూపించు\" అని మాత్రమే గుర్తించబడిన విభాగాలు ఉన్నాయి."
},
"youHaveSkipped": {
"message": "మీరు దాటవేశారు "
},
"minLower": {
"message": "నిమిషం"
},
"minsLower": {
"message": "నిమిషాలు"
},
"hourLower": {
"message": "గంట"
},
"hoursLower": {
"message": "గంటలు"
},
"youHaveSavedTime": {
"message": "మీరు ప్రజలను రక్షించారు",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": " వారి జీవితాల",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "సర్వర్ స్థితి కోసం status.sponsor.ajay.app ని తనిఖీ చేయండి."
},
"createdBy": {
"message": "సృష్టికర్త"
},
"optionsInfo": {
"message": "ఇన్విడియస్ మద్దతును ప్రారంభించండి, ఆటోస్కిప్‌ను డిసేబుల్ చేయండి, బటన్లను దాచు మరియు మరిన్ని చేయండి."
},
"add": {
"message": "జోడించు"
},
"addInvidiousInstanceError": {
"message": "ఇది చెల్లని డొమైన్. ఇది డొమైన్ భాగాన్ని కలిగి ఉండాలి. ఉదాహరణ: invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "ఇన్విడియస్ ఇన్‌స్టాన్స్ జాబితాను రీసెట్ చేయండి"
},
"resetInvidiousInstanceAlert": {
"message": "మీరు ఇన్విడియస్ ఉదాహరణ జాబితాను రీసెట్ చేయబోతున్నారు"
},
"currentInstances": {
"message": "ప్రస్తుత సందర్భాలు:"
},
"minDuration": {
"message": "కనిష్ట వ్యవధి (సెకన్లు):"
},
"minDurationDescription": {
"message": "సెట్ విలువ కంటే తక్కువ విభాగాలు దాటవేయబడవు లేదా ప్లేయర్‌లో చూపబడవు."
},
"shortCheck": {
"message": "కింది సమర్పణ మీ కనీస వ్యవధి ఎంపిక కంటే తక్కువగా ఉంటుంది. ఇది ఇప్పటికే సమర్పించబడిందని మరియు ఈ ఎంపిక కారణంగా విస్మరించబడిందని దీని అర్థం. మీరు ఖచ్చితంగా సమర్పించాలనుకుంటున్నారా?"
},
"showUploadButton": {
"message": "అప్‌లోడ్ బటన్ చూపించు"
},
"customServerAddress": {
"message": "స్పాన్సర్బ్లాక్ సర్వర్ చిరునామా"
},
"customServerAddressDescription": {
"message": "స్పాన్సర్‌బ్లాక్ చిరునామా సర్వర్‌కు కాల్ చేయడానికి ఉపయోగిస్తుంది.\nమీకు మీ స్వంత సర్వర్ ఉదాహరణ లేకపోతే, ఇది మార్చబడదు."
},
"save": {
"message": "సేవ్ చేయండి"
},
"reset": {
"message": "రీసెట్ చేయండి"
},
"customAddressError": {
"message": "ఈ చిరునామా సరైన రూపంలో లేదు. మీకు ప్రారంభంలో http: // లేదా https: // ఉందని మరియు వెనుకంజలో స్లాష్‌లు లేవని నిర్ధారించుకోండి."
},
"areYouSureReset": {
"message": "మీరు దీన్ని రీసెట్ చేయాలనుకుంటున్నారా?"
},
"mobileUpdateInfo": {
"message": "m.youtube.com కి ఇప్పుడు మద్దతు ఉంది"
},
"exportOptions": {
"message": "అన్ని ఎంపికలను దిగుమతి / ఎగుమతి చేయండి"
},
"setOptions": {
"message": "ఎంపికలను సెట్ చేయండి"
},
"exportOptionsWarning": {
"message": "హెచ్చరిక: ఎంపికలను మార్చడం శాశ్వతం మరియు మీ ఇన్‌స్టాల్‌ను విచ్ఛిన్నం చేస్తుంది. మీరు దీన్ని ఖచ్చితంగా చేయాలనుకుంటున్నారా? ఒకవేళ మీ పాతదాన్ని బ్యాకప్ చేయాలని నిర్ధారించుకోండి."
},
"incorrectlyFormattedOptions": {
"message": "ఈ JSON సరిగ్గా ఆకృతీకరించబడలేదు. మీ ఎంపికలు మార్చబడలేదు."
},
"confirmNoticeTitle": {
"message": "విభాగాన్ని సమర్పించండి"
},
"submit": {
"message": "సమర్పించండి"
},
"cancel": {
"message": "రద్దు చేయండి"
},
"delete": {
"message": "తొలగించు"
},
"preview": {
"message": "పరిదృశ్యం"
},
"inspect": {
"message": "పరిశీలించండి"
},
"edit": {
"message": "సవరించండి"
},
"copyDebugInformation": {
"message": "డీబగ్ సమాచారాన్ని క్లిప్‌బోర్డ్‌కు కాపీ చేయండి"
},
"copyDebugInformationFailed": {
"message": "క్లిప్‌బోర్డ్‌కు వ్రాయడంలో విఫలమైంది"
},
"copyDebugInformationOptions": {
"message": "బగ్‌ను పెంచేటప్పుడు / డెవలపర్ అభ్యర్థించినప్పుడు డెవలపర్‌కు అందించాల్సిన సమాచారాన్ని క్లిప్‌బోర్డ్‌కు కాపీ చేస్తుంది. మీ యూజర్ ఐడి, వైట్‌లిస్ట్ చేసిన ఛానెల్‌లు మరియు అనుకూల సర్వర్ చిరునామా వంటి సున్నితమైన సమాచారం తొలగించబడింది. అయితే ఇది మీ ఉపయోగకరమైన, బ్రౌజర్, ఆపరేటింగ్ సిస్టమ్ మరియు పొడిగింపు సంస్కరణ సంఖ్య వంటి సమాచారాన్ని కలిగి ఉంటుంది. "
},
"copyDebugInformationComplete": {
"message": "డీబగ్ సమాచారం క్లిప్ బోర్డ్‌కు కాపీ చేయబడింది. మీరు భాగస్వామ్యం చేయని సమాచారాన్ని తొలగించడానికి సంకోచించకండి. దీన్ని టెక్స్ట్ ఫైల్‌లో సేవ్ చేయండి లేదా బగ్ రిపోర్ట్‌లో అతికించండి."
},
"to": {
"message": "కు",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"category_sponsor": {
"message": "స్పాన్సర్"
},
"category_sponsor_description": {
"message": "చెల్లింపు ప్రమోషన్, చెల్లింపు సూచనలు మరియు ప్రత్యక్ష ప్రకటనలు. స్వీయ-ప్రమోషన్ కోసం లేదా వారు ఇష్టపడే కారణాలు / సృష్టికర్తలు / వెబ్‌సైట్లు / ఉత్పత్తులకు ఉచిత అరవడం కోసం కాదు."
},
"category_selfpromo": {
"message": "చెల్లించని / స్వీయ ప్రమోషన్"
},
"category_selfpromo_description": {
"message": "చెల్లించని లేదా స్వీయ ప్రమోషన్ మినహా \"స్పాన్సర్\" మాదిరిగానే. వాణిజ్య వస్తువులు, విరాళాలు లేదా వారు ఎవరితో సహకరించారు అనే సమాచారం గురించి విభాగాలు ఇందులో ఉన్నాయి."
},
"category_interaction": {
"message": "ఇంటరాక్షన్ రిమైండర్ (సబ్‌స్క్రయిబ్)"
},
"category_interaction_description": {
"message": "కంటెంట్ మధ్యలో వాటిని ఇష్టపడటానికి, సభ్యత్వాన్ని పొందటానికి లేదా అనుసరించడానికి చిన్న రిమైండర్ ఉన్నప్పుడు. ఇది పొడవైనది లేదా ఏదైనా ప్రత్యేకమైనది అయితే, అది బదులుగా స్వీయ ప్రమోషన్ కింద ఉండాలి."
},
"category_interaction_short": {
"message": "ఇంటరాక్షన్ రిమైండర్"
},
"category_intro": {
"message": "ఇంటర్‌మిషన్ / ఇంట్రో యానిమేషన్"
},
"category_intro_description": {
"message": "అసలు కంటెంట్ లేని విరామం. విరామం, స్టాటిక్ ఫ్రేమ్, పునరావృత యానిమేషన్ కావచ్చు. సమాచారాన్ని కలిగి ఉన్న పరివర్తనలకు ఇది ఉపయోగించరాదు."
},
"category_intro_short": {
"message": "అంతరాయం"
},
"category_outro": {
"message": "ఎండ్ కార్డులు / క్రెడిట్స్"
},
"category_outro_description": {
"message": "క్రెడిట్స్ లేదా YouTube ఎండ్‌కార్డ్‌లు కనిపించినప్పుడు. సమాచారంతో తీర్మానాల కోసం కాదు."
},
"category_music_offtopic": {
"message": "సంగీతం: నాన్-మ్యూజిక్ విభాగం"
},
"category_music_offtopic_description": {
"message": "మ్యూజిక్ వీడియోలలో మాత్రమే ఉపయోగం కోసం. ఇది ఇప్పటికే మరొక వర్గం ద్వారా కవర్ చేయని సంగీతం వీడియోల విభాగాలకు మాత్రమే ఉపయోగించాలి."
},
"category_music_offtopic_short": {
"message": "నాన్-మ్యూజిక్"
},
"category_livestream_messages": {
"message": "లైవ్ స్ట్రీమ్: విరాళం / సందేశ రీడింగులు"
},
"category_livestream_messages_short": {
"message": "సందేశ పఠనం"
},
"autoSkip": {
"message": "ఆటో దాటవేయి"
},
"manualSkip": {
"message": "మాన్యువల్ దాటవేయి"
},
"showOverlay": {
"message": "సీక్ బార్‌లో చూపించు"
},
"disable": {
"message": "డిసేబుల్"
},
"seekBarColor": {
"message": "బార్ కలర్ కోరుకుంటారు"
},
"category": {
"message": "వర్గం"
},
"skipOption": {
"message": "ఎంపికను దాటవేయి",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "బీటా టెస్టింగ్ సర్వర్‌ను ప్రారంభించండి"
},
"whatEnableTestingServer": {
"message": "మీ సమర్పణలు మరియు ఓట్లు ప్రధాన సర్వర్ వైపు లెక్కించబడవు. పరీక్ష కోసం మాత్రమే దీన్ని ఉపయోగించండి."
},
"testingServerWarning": {
"message": "అన్ని సమర్పణలు మరియు ఓట్లు పరీక్ష సర్వర్‌కు కనెక్ట్ చేసేటప్పుడు ప్రధాన సర్వర్ వైపు లెక్కించబడవు. మీరు నిజమైన సమర్పణలు చేయాలనుకున్నప్పుడు దీన్ని నిలిపివేయాలని నిర్ధారించుకోండి."
},
"bracketNow": {
"message": "(ఇప్పుడు)"
},
"moreCategories": {
"message": "మరిన్ని వర్గాలు"
},
"chooseACategory": {
"message": "వర్గాన్ని ఎంచుకోండి"
},
"enableThisCategoryFirst": {
"message": "\"{0}\" వర్గంతో విభాగాలను సమర్పించడానికి, మీరు దీన్ని ఎంపికలలో ప్రారంభించాలి. మీరు ఇప్పుడు ఎంపికలకు మళ్ళించబడతారు.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"youMustSelectACategory": {
"message": "మీరు సమర్పించే అన్ని విభాగాల కోసం మీరు తప్పనిసరిగా ఒక వర్గాన్ని ఎంచుకోవాలి!"
},
"bracketEnd": {
"message": "(ముగింపు)"
},
"hiddenDueToDownvote": {
"message": "దాచిన: డౌన్ వోట్"
},
"hiddenDueToDuration": {
"message": "దాచబడింది: చాలా చిన్నది"
},
"forceChannelCheck": {
"message": "దాటవేయడానికి ముందు ఛానెల్ తనిఖీ చేయమని బలవంతం చేయండి"
},
"whatForceChannelCheck": {
"message": "అప్రమేయంగా, ఛానెల్ ఏమిటో తెలియక ముందే ఇది విభాగాలను దాటవేస్తుంది. అప్రమేయంగా, వీడియో ప్రారంభంలో కొన్ని విభాగాలు వైట్‌లిస్ట్ చేసిన ఛానెల్‌లలో దాటవేయబడవచ్చు. ఈ ఎంపికను ప్రారంభించడం దీనిని నిరోధిస్తుంది, కాని ఛానెల్ ఐడిని పొందడానికి కొంత సమయం పట్టవచ్చు కాబట్టి అన్ని దాటవేయడం కొంచెం ఆలస్యం అవుతుంది. మీకు వేగవంతమైన ఇంటర్నెట్ ఉంటే ఈ ఆలస్యం గుర్తించబడదు."
},
"forceChannelCheckPopup": {
"message": "\"దాటవేయడానికి ముందు ఫోర్స్ ఛానల్ చెక్\" ప్రారంభించడం పరిగణించండి"
},
"downvoteDescription": {
"message": "తప్పు / తప్పు సమయం"
},
"nonMusicCategoryOnMusic": {
"message": "ఈ వీడియోను సంగీతంగా వర్గీకరించారు. దీనికి స్పాన్సర్ ఉందని మీరు ఖచ్చితంగా అనుకుంటున్నారా? ఇది వాస్తవానికి \"నాన్-మ్యూజిక్ సెగ్మెంట్\" అయితే, పొడిగింపు ఎంపికలను తెరిచి ఈ వర్గాన్ని ప్రారంభించండి. అప్పుడు, మీరు ఈ విభాగాన్ని స్పాన్సర్‌కు బదులుగా \"నాన్-మ్యూజిక్\" గా సమర్పించవచ్చు. మీరు గందరగోళంలో ఉంటే దయచేసి మార్గదర్శకాలను చదవండి."
},
"multipleSegments": {
"message": "బహుళ విభాగాలు"
},
"guidelines": {
"message": "మార్గదర్శకాలు"
},
"readTheGuidelines": {
"message": "మార్గదర్శకాలను చదవండి!!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"categoryUpdate1": {
"message": "వర్గాలు ఇక్కడ ఉన్నాయి!"
},
"categoryUpdate2": {
"message": "పరిచయాలు, ros ట్రోస్, మెర్చ్ మొదలైనవాటిని దాటవేయడానికి ఎంపికలను తెరవండి."
}
}

View File

@@ -1,73 +0,0 @@
{
"fullName": {
"message": "SponsorBlock สำหรับ YouTube - ข้ามสปอนเซอร์",
"description": "Name of the extension."
},
"Description": {
"message": "ข้ามสปอนเซอร์, การก่อการติดตาม, ฯลฯ ในวีดีโอ YouTube. รายงานสปอนเซอร์ในวีดีโอเพื่อประหยัดเวลาคนอื่น",
"description": "Description of the extension."
},
"400": {
"message": "เซิร์ฟเวอร์รายงานว่าคำขอนี้ไม่ถูกต้อง"
},
"429": {
"message": "คุณรายงานสปอนเซอร์มากเกินไปในวิดีโอนี้ คุณมั่นใจว่ามีมากเท่านี้จริงหรือไม่?"
},
"409": {
"message": "สปอนเซอร์นี้ได้รับการรายงานมาก่อน"
},
"channelWhitelisted": {
"message": "ช่องนี้ถูกนำเข้ารายการอนุญาตพิเศษแล้ว"
},
"Segment": {
"message": "ส่วน"
},
"Segments": {
"message": "ส่วน"
},
"upvoteButtonInfo": {
"message": "เห็นด้วยกับรายงานนี้"
},
"reportButtonTitle": {
"message": "รายงาน"
},
"reportButtonInfo": {
"message": "รายงานส่วนนี้ว่าไม่ถูกต้อง"
},
"Dismiss": {
"message": "ปฏิเสธ"
},
"Loading": {
"message": "กำลังโหลด..."
},
"Hide": {
"message": "ไม่แสดงเสมอ"
},
"hitGoBack": {
"message": "กด \"ยกเลิกการข้าม\" เพื่อกลับไปที่เดิม"
},
"unskip": {
"message": "ยกเลิกการข้าม"
},
"reskip": {
"message": "ข้ามใหม่"
},
"unmute": {
"message": "เปิดเสียง"
},
"paused": {
"message": "กำลังหยุดชั่วคราว"
},
"manualPaused": {
"message": "หยุดการจับเวลาแล้ว"
},
"clearThis": {
"message": "คุณมั่นใจว่าจะลบส่วนนี้หรือไม่?\n\n"
},
"sponsor404": {
"message": "ไม่พบส่วนในวีดีโอนี้"
},
"clearTimesButton": {
"message": "ล้างเวลา"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,680 +0,0 @@
{
"fullName": {
"message": "SponsorBlock for YouTube - 跳过赞助商广告",
"description": "Name of the extension."
},
"Description": {
"message": "跳过 YouTube 视频中的赞助广告、订阅提醒等片段。标记视频中的赞助广告来节约大家的时间。",
"description": "Description of the extension."
},
"400": {
"message": "服务器说此请求无效"
},
"429": {
"message": "您为这个视频提交了太长的赞助商广告时间,您确定有这么多吗?"
},
"409": {
"message": "它之前已经被提交过了"
},
"channelWhitelisted": {
"message": "频道已加入白名单!"
},
"Segment": {
"message": "片段"
},
"Segments": {
"message": "片段"
},
"SegmentsCap": {
"message": "片段"
},
"Chapters": {
"message": "章节"
},
"renderAsChapters": {
"message": "将片段显示为章节",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "在视频时间旁显示当前片段"
},
"upvoteButtonInfo": {
"message": "为这个提交点赞"
},
"reportButtonTitle": {
"message": "报告"
},
"reportButtonInfo": {
"message": "报告此提交不正确。"
},
"Dismiss": {
"message": "忽略"
},
"Loading": {
"message": "加载中..."
},
"Hide": {
"message": "不再显示"
},
"hitGoBack": {
"message": "点击取消跳过以回到您原来的样子。"
},
"unskip": {
"message": "取消跳过"
},
"reskip": {
"message": "继续跳过"
},
"unmute": {
"message": "取消静音"
},
"paused": {
"message": "已暂停"
},
"manualPaused": {
"message": "计时器已停止"
},
"confirmMSG": {
"message": "要编辑或删除个别值,请点击信息按钮或通过点击右上角的扩展图标打开扩展弹窗。"
},
"clearThis": {
"message": "您确定要清空它吗?\n\n"
},
"Unknown": {
"message": "提交您的赞助商广告时间时出错。请稍后再试。"
},
"sponsorFound": {
"message": "此视频在数据库中存在可跳片段!"
},
"sponsor404": {
"message": "未找到可跳片段"
},
"sponsorStart": {
"message": "片段现在开始"
},
"sponsorEnd": {
"message": "片段现在结束"
},
"sponsorCancel": {
"message": "取消创建片段"
},
"noVideoID": {
"message": "未找到 YouTube 视频。\n如果识别错误请刷新此页面。"
},
"refreshSegments": {
"message": "刷新片段"
},
"success": {
"message": "成功 "
},
"voted": {
"message": "已投票!"
},
"serverDown": {
"message": "服务器似乎已宕机。请立即联系开发者。"
},
"connectionError": {
"message": "连接错误。错误代码: "
},
"segmentsStillLoading": {
"message": "片段仍在加载中..."
},
"clearTimes": {
"message": "清除片段"
},
"openPopup": {
"message": "打开 SponsorBlock 弹窗"
},
"closePopup": {
"message": "关闭弹窗"
},
"closeIcon": {
"message": "关闭图标"
},
"SubmitTimes": {
"message": "提交片段"
},
"sortSegments": {
"message": "分类段"
},
"submitCheck": {
"message": "您确定要提交它吗?"
},
"whitelistChannel": {
"message": "将频道列入白名单"
},
"removeFromWhitelist": {
"message": "将频道移出白名单"
},
"voteOnTime": {
"message": "对片段投票"
},
"Submissions": {
"message": "提交数"
},
"savedPeopleFrom": {
"message": "您为大家节省了 "
},
"viewLeaderboard": {
"message": "排行榜"
},
"recordTimesDescription": {
"message": "提交"
},
"submissionEditHint": {
"message": "片段编辑将在您单击提交后显示",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "提示:您可以在选项中为提交动作绑定按键"
},
"clearTimesButton": {
"message": "清除时间"
},
"submitTimesButton": {
"message": "提交时间"
},
"publicStats": {
"message": "这被用于在公开统计页面上展示您的贡献。查看它"
},
"Username": {
"message": "用户名"
},
"setUsername": {
"message": "设定用户名"
},
"copyPublicID": {
"message": "复制公共用户ID"
},
"copySegmentID": {
"message": "复制片段 ID"
},
"discordAdvert": {
"message": "快加入官方 Discord 服务器来提供建议与反馈!"
},
"hideThis": {
"message": "隐藏它"
},
"Options": {
"message": "选项"
},
"showButtons": {
"message": "在 Youtube 播放器上显示按钮"
},
"hideButtons": {
"message": "在 Youtube 播放器上隐藏按钮"
},
"hideButtonsDescription": {
"message": "这将隐藏在 YouTube 播放器上提交赞助商广告的按钮。我了解这个东西打扰到了某些人。除了使用那个按钮,这个弹窗也可以用来提交赞助商广告。 要隐藏出现的通知,请使用通知中显示的写着 ”不再显示“ 的按钮。您可以在以后再次启用这些设置。"
},
"showSkipButton": {
"message": "保持播放器上的跳过高亮按钮"
},
"showInfoButton": {
"message": "在 Youtube 播放器上显示信息按钮"
},
"hideInfoButton": {
"message": "在 Youtube 播放器上隐藏信息按钮"
},
"autoHideInfoButton": {
"message": "自动隐藏信息按钮"
},
"hideDeleteButton": {
"message": "在 Youtube 播放器上隐藏删除按钮"
},
"showDeleteButton": {
"message": "在 Youtube 播放器上显示删除按钮"
},
"enableViewTracking": {
"message": "启用跳过次数统计跟踪"
},
"whatViewTracking": {
"message": "此功能追踪您跳过了哪些片段,以让用户知道他们提交的信息帮助了多少人,并与点赞一同作为依据,来确保垃圾信息不会进入数据库。在您每次跳过片段时,此扩展都会向服务器发送一条消息。希望大部分人不要改变此设置,以使观看数字准确。:)"
},
"enableViewTrackingInPrivate": {
"message": "在私人/隐身标签中启用跳过计数跟踪"
},
"enableTrackDownvotes": {
"message": "商店部分的下线"
},
"whatTrackDownvotes": {
"message": "任何被你降权的片段,即使在刷新后也会保持隐藏状态"
},
"trackDownvotesWarning": {
"message": "警告。禁用此功能将删除所有先前存储的降级投票"
},
"enableQueryByHashPrefix": {
"message": "按哈希前缀查询"
},
"whatQueryByHashPrefix": {
"message": "使用视频 ID 哈希值的前 4 个字符而非整个视频 ID 向服务器查询片段。服务器将返回所有具有类似哈希值的视频数据。"
},
"enableRefetchWhenNotFound": {
"message": "在新视频中再次获取片段"
},
"whatRefetchWhenNotFound": {
"message": "如果视频是新的且没有发现可跳片段,将在您观看时每隔几分钟再次获取信息。"
},
"enableShowCategoryWithoutPermission": {
"message": "在提交菜单中显示类别,即使没有提交权限"
},
"whatShowCategoryWithoutPermission": {
"message": "一些类别由于有最低信誉要求,需要得到许可才能提交"
},
"showNotice": {
"message": "重新显示通知"
},
"showSkipNotice": {
"message": "在跳过片段后显示通知"
},
"showCategoryGuidelines": {
"message": "显示类别帮助"
},
"noticeVisibilityMode0": {
"message": "全尺寸的跳过通知"
},
"noticeVisibilityMode1": {
"message": "自动跳车的小跳车通知"
},
"noticeVisibilityMode2": {
"message": "所有的小跳槽通知"
},
"noticeVisibilityMode3": {
"message": "褪色的自动跳车通知书"
},
"noticeVisibilityMode4": {
"message": "所有褪色的跳过通知"
},
"longDescription": {
"message": "SponsorBlock 可帮您跳过 YouTube 视频中的赞助商广告、开场、结尾、订阅提醒和其他烦人片段。SponsorBlock 是一个众包的浏览器扩展,可以让任何人提交 YouTube 视频的赞助商广告和其他片段的开始和结束时间。若有一人提交了信息,其他所有使用此扩展的人都能直接跳过赞助商广告片段。您也可以跳过音乐视频中的非音乐部分。",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "网站",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "源代码",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "通知已升级!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "如果您依然不喜欢它,请按下不再显示按钮。",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setSkipShortcut": {
"message": "跳过部分",
"description": "Keybind label"
},
"setStartSponsorShortcut": {
"message": "启动/停止部分",
"description": "Keybind label"
},
"setSubmitKeybind": {
"message": "提交片段",
"description": "Keybind label"
},
"0": {
"message": "连接超时。请检查您的网络连接。如果您的网络运行正常,则可能是服务器过载或宕机。"
},
"disableSkipping": {
"message": "已开启跳过"
},
"enableSkipping": {
"message": "已关闭跳过"
},
"yourWork": {
"message": "您的成果",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "服务器似乎已过载。请稍后再试。"
},
"errorCode": {
"message": "错误代码: "
},
"skip": {
"message": "跳过"
},
"mute": {
"message": "静音"
},
"full": {
"message": "整个视频",
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
"message": "跳过{0}"
},
"disableAutoSkip": {
"message": "禁用自动跳过"
},
"enableAutoSkip": {
"message": "启用自动跳过"
},
"audioNotification": {
"message": "跳过时音频通知"
},
"audioNotificationDescription": {
"message": "在跳过片段时播放声音。如果禁用(或禁用自动跳过),则不会播放声音。"
},
"showTimeWithSkips": {
"message": "显示减去可跳片段后的时间"
},
"showTimeWithSkipsDescription": {
"message": "此时间位于进度条下方的当前时间旁边,用括号框住。 显示的是视频减去所有可跳片段后的时间,可跳片段包括标记为“在进度条中显示”的片段。"
},
"youHaveSkipped": {
"message": "您已跳过 "
},
"minLower": {
"message": "分钟"
},
"minsLower": {
"message": "分钟"
},
"hourLower": {
"message": "小时"
},
"hoursLower": {
"message": "小时"
},
"youHaveSavedTime": {
"message": "您为大家节省了",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": " 的生命",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "在 status.sponsor.ajay.app 检查服务器状态。"
},
"createdBy": {
"message": "创建者"
},
"supportOtherSites": {
"message": "支持第三方 YouTube 网站"
},
"supportedSites": {
"message": "支持的站点: "
},
"optionsInfo": {
"message": "启用 Invidious 支持,禁用自动跳过,隐藏按钮等等。"
},
"add": {
"message": "添加"
},
"addInvidiousInstanceError": {
"message": "这是一个无效的域名。它应该只包括域名部分。例如invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "重置 Invidious 实例列表"
},
"resetInvidiousInstanceAlert": {
"message": "您将会重置 Invidious 实例列表"
},
"currentInstances": {
"message": "当前实例:"
},
"minDuration": {
"message": "最小持续时间(秒)"
},
"minDurationDescription": {
"message": "短于设定值的片段将不会被跳过或显示在播放器中。"
},
"shortCheck": {
"message": "以下的提交短于您的最小持续时间选项。这代表它们可能已经被提交,只是由于该选项被忽略了。您确定要提交吗?"
},
"showUploadButton": {
"message": "显示上传按钮"
},
"customServerAddress": {
"message": "SponsorBlock 服务器地址"
},
"customServerAddressDescription": {
"message": "SponsorBlock 用于联系服务器的地址。\n除非您有自己的服务器实例否则这不应该更改。"
},
"save": {
"message": "保存"
},
"reset": {
"message": "重置"
},
"customAddressError": {
"message": "此地址格式不正确。请确保开头有 http:// 或 https:// ,结尾没有斜杠 / 。"
},
"areYouSureReset": {
"message": "您确定要重置它吗?"
},
"mobileUpdateInfo": {
"message": "现已支持 m.youtube.com"
},
"exportOptions": {
"message": "导入/导出所有选项"
},
"exportOptionsCopy": {
"message": "编辑/复制"
},
"exportOptionsDownload": {
"message": "保存到文件"
},
"exportOptionsUpload": {
"message": "从文件加载"
},
"setOptions": {
"message": "设定选项"
},
"exportOptionsWarning": {
"message": "警告:更改选项是永久性的且可能破坏您安装的东西。您确定要这么做吗?请确保已备份旧文件以防万一。"
},
"incorrectlyFormattedOptions": {
"message": "此 JSON 格式不正确。您的选项尚未更改。"
},
"confirmNoticeTitle": {
"message": "提交片段"
},
"submit": {
"message": "提交"
},
"cancel": {
"message": "取消"
},
"delete": {
"message": "删除"
},
"preview": {
"message": "预览"
},
"unsubmitted": {
"message": "未提交"
},
"inspect": {
"message": "检查"
},
"edit": {
"message": "编辑"
},
"copyDebugInformation": {
"message": "复制调试信息到剪贴板"
},
"copyDebugInformationFailed": {
"message": "复制到剪贴板失败"
},
"copyDebugInformationOptions": {
"message": "复制信息到剪贴板,在提交错误或开发者需要时提供给他。 敏感信息如您的用户ID白名单频道和自定义服务器地址等已被删除。然而它仍然包含诸如您的 useragent ,浏览器,操作系统和扩展版本号等信息。 "
},
"copyDebugInformationComplete": {
"message": "调试信息已复制到剪切板中。 您可以随意移除任何您不想分享的信息。请将其另存为 .txt 文件或粘贴到错误报告中。"
},
"keyAlreadyUsed": {
"message": "此快捷键已绑定到另一个动作。请选择其他快捷键。"
},
"to": {
"message": "到",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"CopiedExclamation": {
"message": "复制成功!",
"description": "Used after something has been copied to the clipboard. Example: 'Copied!'"
},
"category_sponsor": {
"message": "赞助商广告"
},
"category_sponsor_description": {
"message": "付费推广、付费推荐和直接广告。不应用于自我推广或免费提及、推荐他们喜欢的事物/创作者/网站/产品。"
},
"category_sponsor_guideline1": {
"message": "付费推广"
},
"category_sponsor_guideline2": {
"message": "捐赠或自制周边不属于此项"
},
"category_selfpromo": {
"message": "未收钱的/自我推销"
},
"category_selfpromo_description": {
"message": "类似于 “赞助商广告” ,但为无报酬或自我推广。包括有关商品、捐赠的部分或合作者的信息。"
},
"category_selfpromo_guideline1": {
"message": "捐赠、会员和自制周边"
},
"category_interaction": {
"message": "互动提醒(订阅)"
},
"category_interaction_description": {
"message": "视频中间简短提醒观众来点赞、订阅或关注。 如果片段较长,或是关于某个具体事物,则应分类为自我推广。"
},
"category_interaction_short": {
"message": "互动提醒"
},
"category_intro": {
"message": "过场/开场动画"
},
"category_intro_description": {
"message": "没有实际内容的间隔片段。可以是暂停、静态帧或重复动画。不应用于包含信息的过渡。"
},
"category_intro_short": {
"message": "过场"
},
"category_outro": {
"message": "结束画面/结尾职员表"
},
"category_outro_description": {
"message": "鸣谢画面或出现 YouTube 片尾画面。不应用于包含信息的结尾。"
},
"category_music_offtopic": {
"message": "音乐:非音乐部分"
},
"category_music_offtopic_description": {
"message": "仅用于音乐视频。此分类只能用于音乐视频中未包括于其他分类的部分。"
},
"category_music_offtopic_short": {
"message": "无音乐"
},
"category_livestream_messages": {
"message": "直播:捐赠/消息阅读"
},
"category_livestream_messages_short": {
"message": "阅读消息"
},
"autoSkip": {
"message": "自动跳过"
},
"manualSkip": {
"message": "手动跳过"
},
"showOverlay": {
"message": "在搜索栏中显示"
},
"disable": {
"message": "禁用"
},
"seekBarColor": {
"message": "拖动条颜色"
},
"category": {
"message": "类别"
},
"skipOption": {
"message": "跳过选项",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "启用 Beta 测试服务器"
},
"whatEnableTestingServer": {
"message": "您的提交和投票将不会计入主服务器。它只被用于测试。"
},
"testingServerWarning": {
"message": "当连接到测试服务器时,所有的提交和投票将不会计入主服务器。当您想要进行真实提交时,请确保禁用了此选项。"
},
"bracketNow": {
"message": "(现在)"
},
"moreCategories": {
"message": "更多类别"
},
"chooseACategory": {
"message": "选择类别"
},
"enableThisCategoryFirst": {
"message": "要提交“{0}”类别的片段,您必须在选项中启用此类别。现在将重定向到选项。",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"youMustSelectACategory": {
"message": "您必须为所有您要提交的片段选择类别!"
},
"bracketEnd": {
"message": "(结束)"
},
"hiddenDueToDownvote": {
"message": "隐藏:差评"
},
"hiddenDueToDuration": {
"message": "隐藏:过短"
},
"acceptPermission": {
"message": "接受权限"
},
"permissionRequestSuccess": {
"message": "权限请求成功!"
},
"forceChannelCheck": {
"message": "跳过前强制进行频道检查"
},
"whatForceChannelCheck": {
"message": "默认情况下,即使还未检测出当前是什么频道,也会立即跳过片段。即使在白名单中的频道,一些在开头的片段也可能被跳过。启用此选项将防止这种情况,但所有的跳过将会产生轻微的延迟,因为获取频道 ID 需要一点时间。如果您的网速很快,那延迟可能非常短。"
},
"forceChannelCheckPopup": {
"message": "请考虑启用“跳过前强制进行频道检查”"
},
"downvoteDescription": {
"message": "不正确/错误的时间"
},
"nonMusicCategoryOnMusic": {
"message": "此视频的分类为音乐。 您确定其中包含赞助商广告吗?如果这是“非音乐片段”,请打开扩展选项并启用此类别。 之后,您可以以“非音乐”而不是赞助商广告类别提交此片段。如果您不太明白,请阅读指南。"
},
"multipleSegments": {
"message": "多个片段"
},
"guidelines": {
"message": "指南"
},
"readTheGuidelines": {
"message": "阅读指南!!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"categoryUpdate1": {
"message": "类别在这里!"
},
"categoryUpdate2": {
"message": "打开选项,跳过开头,结尾,商业等。"
},
"help": {
"message": "帮助"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -45,6 +45,7 @@ div:hover > #previewbar.sbNotInvidious {
.previewbar {
display: inline-block;
height: 100%;
min-width: 1px;
}
.previewbar.requiredSegment {
@@ -187,6 +188,10 @@ div:hover > .sponsorBlockChapterBar {
margin-right: var(--skip-notice-margin);
}
.sponsorSkipObjectFirst {
margin-left: 0;
}
.sponsorSkipLogo {
height: 18px;
@@ -250,7 +255,7 @@ div:hover > .sponsorBlockChapterBar {
}
.exportCopiedNotice .sponsorSkipNoticeTableContainer {
background-color: transparent;
background-color: transparent;
}
.sponsorSkipNotice {
@@ -585,6 +590,7 @@ input::-webkit-inner-spin-button {
font-size: 14px;
-moz-appearance: textfield;
appearance: textfield;
}
.sponsorTimeEditInput {
@@ -724,11 +730,12 @@ input::-webkit-inner-spin-button {
border-radius: 5px;
padding: 10px;
max-width: 300px;
width: max-content;
white-space: normal;
line-height: 1.5em;
color: white;
font-size: 12px;
z-index: 1000;
z-index: 10000;
}
.sponsorBlockTooltip a {
@@ -782,6 +789,10 @@ input::-webkit-inner-spin-button {
align-items: center;
}
.sponsorBlockCategoryPillTitle {
white-space: nowrap;
}
.categoryPillClose {
display: none;
height: 10px;
@@ -802,3 +813,44 @@ input::-webkit-inner-spin-button {
color: #fff;
opacity: .7;
}
/* full video labels on thumbnails */
.sponsorThumbnailLabel {
display: none;
position: absolute;
top: 0;
left: 0;
padding: 0.5em;
margin: 0.5em;
border-radius: 2em;
z-index: 1000;
background-color: var(--category-color, #000);
opacity: 0.7;
box-shadow: 0 0 8px 2px #333;
font-size: 10px;
}
.sponsorThumbnailLabel.sponsorThumbnailLabelVisible {
display: flex;
}
.sponsorThumbnailLabel svg {
height: 2em;
fill: var(--category-text-color, #fff);
}
.sponsorThumbnailLabel span {
display: none;
padding-left: 0.25em;
font-size: 1.5em;
color: var(--category-text-color, #fff);
}
.sponsorThumbnailLabel:hover {
border-radius: 0.25em;
opacity: 1;
}
.sponsorThumbnailLabel:hover span {
display: inline;
}

View File

@@ -8,7 +8,6 @@
<link href="styles.css" rel="stylesheet"/>
<script src="../js/vendor.js"></script>
<script src="../js/help.js"></script>
</head>

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

54
public/icons/dearrow.svg Normal file
View File

@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="800px"
height="800px"
viewBox="0 0 36 36"
aria-hidden="true"
role="img"
class="iconify iconify--twemoji"
preserveAspectRatio="xMidYMid meet"
version="1.1"
id="svg10"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs14" />
<sodipodi:namedview
id="namedview12"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="0.65479573"
inkscape:cx="493.2836"
inkscape:cy="514.66432"
inkscape:window-width="1920"
inkscape:window-height="983"
inkscape:window-x="435"
inkscape:window-y="768"
inkscape:window-maximized="1"
inkscape:current-layer="svg10" />
<path
fill="#1213BD"
d="M36 18.302c0 4.981-2.46 9.198-5.655 12.462s-7.323 5.152-12.199 5.152s-9.764-1.112-12.959-4.376S0 23.283 0 18.302s2.574-9.38 5.769-12.644S13.271 0 18.146 0s9.394 2.178 12.589 5.442C33.931 8.706 36 13.322 36 18.302z"
id="path2" />
<path
fill="#ffffff"
d="m 30.394282,18.410186 c 0,3.468849 -1.143025,6.865475 -3.416513,9.137917 -2.273489,2.272442 -5.670115,2.92874 -9.137918,2.92874 -3.467803,0 -6.373515,-1.147212 -8.6470033,-3.419654 -2.2734888,-2.272442 -3.5871299,-5.178154 -3.5871299,-8.647003 0,-3.46885 0.9420533,-6.746149 3.2144954,-9.0196379 2.2724418,-2.2734888 5.5507878,-3.9513905 9.0196378,-3.9513905 3.46885,0 6.492841,1.9322561 8.76633,4.204698 2.273489,2.2724424 3.788101,5.2974804 3.788101,8.7663304 z"
id="path4"
style="fill:#88c9f9;fill-opacity:1;stroke-width:1.04673" />
<path
fill="#292f33"
d="m 23.95823,17.818306 c 0,3.153748 -2.644888,5.808102 -5.798635,5.808102 -3.153748,0 -5.599825,-2.654354 -5.599825,-5.808102 0,-3.153747 2.446077,-5.721714 5.599825,-5.721714 3.153747,0 5.798635,2.567967 5.798635,5.721714 z"
id="path8"
style="stroke-width:1.18339;fill:#0a62a5;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

View File

@@ -3,7 +3,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lqDY.woff2) format('woff2');
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lqDY.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@@ -11,7 +11,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lqDY.woff2) format('woff2');
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lqDY.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@@ -19,7 +19,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lqDY.woff2) format('woff2');
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lqDY.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@@ -27,7 +27,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lqDY.woff2) format('woff2');
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lqDY.woff2) format('woff2');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@@ -35,7 +35,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lqDY.woff2) format('woff2');
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lqDY.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@@ -43,7 +43,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lqDY.woff2) format('woff2');
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lqDY.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@@ -51,7 +51,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 400;
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2) format('woff2');
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@@ -59,7 +59,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhduz8A.woff2) format('woff2');
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhduz8A.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@@ -67,7 +67,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxduz8A.woff2) format('woff2');
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxduz8A.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@@ -75,7 +75,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxduz8A.woff2) format('woff2');
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxduz8A.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
}
/* greek */
@@ -83,7 +83,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBduz8A.woff2) format('woff2');
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBduz8A.woff2) format('woff2');
unicode-range: U+0370-03FF;
}
/* vietnamese */
@@ -91,7 +91,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBduz8A.woff2) format('woff2');
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBduz8A.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@@ -99,7 +99,7 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRduz8A.woff2) format('woff2');
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRduz8A.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@@ -107,6 +107,6 @@
font-family: 'Source Sans Pro';
font-style: normal;
font-weight: 700;
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(https://fonts.gstatic.com/s/sourcesanspro/v13/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu.woff2) format('woff2');
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
}

View File

@@ -38,7 +38,7 @@
--white: black;
}
.medium-description, .switch-container, .optionLabel, .categoryTableElement {
.medium-description, .switch-container, .optionLabel, .categoryTableElement, .promotion-description {
color: var(--white);
}
@@ -696,4 +696,25 @@ svg {
.upsellButton {
cursor: pointer;
vertical-align: middle;
}
.no-bottom-border {
border: none !important;
padding: 20px 0px 0px 0px !important;
}
#deArrowPromotion {
width: fit-content;
}
.dearrow-link {
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
}
.dearrow-link > img {
width: 40px;
margin-right: 4px;
}

View File

@@ -9,7 +9,6 @@
<link href="options.css" rel="stylesheet"/>
<script src="../js/vendor.js"></script>
<script src="../js/options.js"></script>
</head>
@@ -66,6 +65,19 @@
</div>
<div id="deArrowPromotion" class="hidden">
<a class="dearrow-link"
href="https://dearrow.ajay.app"
target="_blank"
rel="noreferrer">
<img src="/icons/dearrow.svg"/>
<span class="promotion-description">
__MSG_DeArrowPromotionMessage__
</span>
</a>
</div>
<div data-type="toggle" data-sync="muteSegments">
<div class="switch-container">
<label class="switch">
@@ -78,7 +90,7 @@
</div>
</div>
<div data-type="toggle" data-sync="fullVideoSegments">
<div data-type="toggle" data-sync="fullVideoSegments" class="no-bottom-border">
<div class="switch-container">
<label class="switch">
<input id="fullVideoSegments" type="checkbox" checked>
@@ -90,6 +102,19 @@
</div>
</div>
<div data-type="toggle" data-sync="fullVideoLabelsOnThumbnails"
data-dependent-on="fullVideoSegments">
<div class="switch-container">
<label class="switch">
<input id="fullVideoLabelsOnThumbnails" type="checkbox" checked>
<span class="slider round"></span>
</label>
<label class="switch-label" for="fullVideoLabelsOnThumbnails">
__MSG_fullVideoLabelsOnThumbnails__
</label>
</div>
</div>
<div data-type="number-change" data-sync="minDuration">
<label class="number-container">
<span class="optionLabel">__MSG_minDuration__</span>
@@ -330,6 +355,18 @@
</div>
</div>
<div data-type="toggle" data-toggle-type="reverse" data-sync="showNewFeaturePopups">
<div class="switch-container">
<label class="switch">
<input id="showNewFeaturePopups" type="checkbox" checked>
<span class="slider round"></span>
</label>
<label class="switch-label" for="showNewFeaturePopups">
__MSG_hideNewFeatureUpdates__
</label>
</div>
</div>
<div data-type="toggle" data-toggle-type="reverse" data-sync="showDonationLink" data-no-safari="true">
<div class="switch-container">
<label class="switch">
@@ -442,7 +479,7 @@
<div id="advanced" class="option-group hidden">
<div id="support-invidious" data-type="toggle" data-sync="supportInvidious" data-no-safari="true">
<div id="support-invidious" data-type="toggle" data-sync="supportInvidious">
<div class="switch-container">
<label class="switch">
<input id="supportInvidious" type="checkbox">
@@ -453,11 +490,11 @@
</label>
</div>
<div class="small-description">(__MSG_supportedSites__ Invidious, CloudTube)</div>
<div class="small-description">(__MSG_supportedSites__ Invidious, CloudTube, Piped)</div>
<div class="small-description">__MSG_supportOtherSitesDescription__ </div>
</div>
<div data-type="private-text-change" data-sync="invidiousInstances" data-no-safari="true" data-dependent-on="supportInvidious">
<div data-type="private-text-change" data-sync="invidiousInstances" data-dependent-on="supportInvidious">
<div class="option-button trigger-button">
__MSG_addInvidiousInstance__
</div>

View File

@@ -1,3 +1,204 @@
@ajayyy/maze-utils
1.1.7 <https://github.com/ajayyy/SponsorBlock>
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
******************************
content-scripts-register-polyfill
4.0.2 <https://github.com/fregante/content-scripts-register-polyfill>
MIT License
Copyright (c) Federico Brigante <me@fregante.com> (https://fregante.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************
escape-string-regexp
5.0.0 <https://github.com/sindresorhus/escape-string-regexp>
MIT License
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************
js-tokens
4.0.0 <https://github.com/lydell/js-tokens>
The MIT License (MIT)
@@ -129,3 +330,48 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
******************************
webext-content-scripts
2.5.2 <https://github.com/fregante/webext-content-scripts>
MIT License
Copyright (c) Federico Brigante <me@fregante.com> (https://fregante.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************
webext-patterns
1.3.0 <https://github.com/fregante/webext-patterns>
MIT License
Copyright (c) Federico Brigante <me@fregante.com> (https://fregante.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************
webext-polyfill-kinda
1.0.0 <https://github.com/fregante/webext-polyfill-kinda>
MIT License
Copyright (c) Federico Brigante <me@fregante.com> (https://fregante.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -6,7 +6,6 @@
<link href="styles.css" rel="stylesheet"/>
<script src="../js/vendor.js"></script>
<script src="../js/permissions.js"></script>
</head>

View File

@@ -40,7 +40,7 @@
color: var(--sb-main-fg-color);
background: transparent;
width: fit-content;
padding: none;
padding: 0;
border: none;
}
@@ -498,6 +498,7 @@
}
#setUsernameContainer {
display: flex;
align-items: center;
width: fit-content;
}
#setUsernameContainer > button {
@@ -522,7 +523,7 @@
white-space: nowrap;
overflow: hidden;
margin: 0 8px 0 0;
max-width: 130px;
max-width: 165px;
}
/*
* Set username form container with "expanded" state

View File

@@ -105,7 +105,7 @@
<sub class="sponsorStartHint grey-text">__MSG_popupHint__</sub>
<div style="text-align: center; margin: 8px 0;">
<button id="sponsorStart" class="sbMediumButton" style="margin-right: 8px">__MSG_sponsorStart__</button>
<button id="submitTimes" class="sbMediumButton" style="display: none">__MSG_submitTimesButton__</button>
<button id="submitTimes" class="sbMediumButton" style="display: none">__MSG_OpenSubmissionMenu__</button>
</div>
<span id="submissionHint" style="display: none">__MSG_submissionEditHint__</span>
</div>
@@ -202,7 +202,6 @@
</div>
<!-- Scripts that need to load after the html -->
<script src="./js/vendor.js" async></script>
<script src="./js/popup.js" async></script>
</body>
</html>

View File

@@ -1,101 +0,0 @@
<!DOCTYPE html>
<head>
<title>Upsell - SponsorBlock</title>
<meta charset="utf-8">
<link href="styles.css" rel="stylesheet" />
<script src="../js/vendor.js"></script>
<script src="../js/upsell.js"></script>
</head>
<body class="sponsorBlockPageBody">
<div id="title" class="titleBar">
<img src="../icons/LogoSponsorBlocker256px.png" height="80" class="profilepic" />
SponsorBlock
</div>
<br />
<div class="center">
<p>
__MSG_chaptersPage1__
</p>
<p class="smaller">
__MSG_chaptersPage2__
</p>
</div>
<div class="center">
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/H_mP7bpbA_c?modestbranding=1&rel=0" title="Demo Video"
frameborder="0" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture"
allowfullscreen>
</iframe>
</div>
<br />
<div class="center row-item">
<a href="https://buy.ajay.app/l/sponsorblock" class="option-link side-by-side" target="_blank" rel="noreferrer">
<div id="oneTimePurchase" class="option-button inline">
__MSG_oneTimePurchase__
</div>
</a>
<a href="https://www.patreon.com/ajayyy" class="option-link side-by-side" target="_blank" rel="noreferrer">
<div class="option-button side-by-side inline">
__MSG_joinOnPatreon__
</div>
</a>
</div>
<div class="center row-item">
<input id="redeemCodeInput" class="option-text-box" type="text" placeholder="__MSG_enterLicenseKey__">
<div id="redeemButton" class="option-button inline">
__MSG_redeem__
</div>
</div>
<div class="center row-item">
<a href="https://www.patreon.com/oauth2/authorize?response_type=code&client_id=-W7ib8J-LB3jowb1fqE07A7RDUovy45_pOoWcjby6yr5upo6At8Jlg2BPhWDXO2k&redirect_uri=https%3A%2F%2Fsponsor.ajay.app%2Fapi%2FgenerateToken%2Fpatreon"
class="option-link" target="_blank" rel="noreferrer">
<div class="option-button inline">
__MSG_patreonSignIn__
</div>
</a>
</div>
<div class="center">
<p id="cantAfford" class="smaller no-margin">
</p>
</div>
<div class="center">
<p class="smaller no-margin">
__MSG_alreadyDonated__ sponsorblock-free@ajay.app
</p>
</div>
<div id="subsidizedPrice" class="center hidden">
__MSG_selectYourCountry__
</div>
<div id="subsidizedLink" class="center hidden">
<a href="https://buy.ajay.app/l/sponsorblock/purchasing-power" class="option-link" target="_blank"
rel="noreferrer">
<div class="option-button inline">
__MSG_discountLink__
</div>
</a>
</div>
<div id="noSubsidizedLink" class="center hidden">
__MSG_noDiscount__
</div>
</body>

View File

@@ -1,397 +0,0 @@
/* Based on options page CSS */
html {
color-scheme: dark;
}
body {
font-family: sans-serif;
}
.center {
text-align: center;
}
.center p {
margin: auto;
}
.inline {
display: inline-block;
}
.bold {
font-weight: bold;
}
.hidden {
display: none !important;
}
.row-item {
margin-top: 10px;
margin-bottom: 10px;
}
.keybind-status {
display: inline;
}
.small-description {
color: white;
font-size: 13px;
}
.medium-description {
color: white;
font-size: 15px;
}
.option-text-box {
width: 300px;
}
.option-button {
cursor: pointer;
background-color: #c00000;
padding: 10px;
color: white;
border-radius: 5px;
font-size: 14px;
width: max-content;
}
.option-link {
text-decoration: none;
}
.option-link.side-by-side {
padding: 50px;
}
.option-button:hover {
background-color: #fc0303;
}
.option-button.disabled {
cursor: default;
background-color: #520000;
color: grey;
}
#options {
max-width: 60%;
text-align: left;
display: inline-block;
}
.switch-container:after {
content: attr(label-name);
position: absolute;
padding: 4px;
width: max-content;
font-size: 14px;
color: white;
}
.text-label-container {
font-size: 14px;
color: white;
}
.switch {
position: relative;
display: inline-block;
width: 40px;
height: 24px;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #707070;
}
.animated * {
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: 16px;
width: 16px;
left: 4px;
bottom: 4px;
background-color: white;
}
.animated .slider:before {
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .slider {
background-color: #fc0303;
}
input:checked + .slider:before {
-webkit-transform: translateX(16px);
-ms-transform: translateX(16px);
transform: translateX(16px);
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
/* Boilerplate CSS from https://ajay.app */
body {
background-color: #333333;
}
.projectPreview {
position: relative;
}
.projectPreviewImage {
position: absolute;
left: -90px;
width: 80px;
top: 50%;
transform: translateY(-50%);
}
.projectPreviewImageLarge {
position: absolute;
left: -210px;
width: 200px;
top: 50%;
transform: translateY(-20%);
}
.projectPreviewImageLargeRight {
position: absolute;
right: -210px;
width: 200px;
top: 50%;
transform: translateY(-50%);
}
.createdBy {
font-size: 14px;
text-align: center;
padding-top: 0px;
padding-bottom: 0px;
display: inline-block;
}
#title {
background-color: #636363;
text-align: center;
vertical-align: middle;
font-size: 50px;
color: #212121;
padding: 20px;
text-decoration: none;
transition: font-size 1s;
}
.subtitle {
font-size: 40px;
color: #dad8d8;
padding-top: 10px;
transition: font-size 0.4s;
}
.subtitle:hover {
font-size: 45px;
transition: font-size 0.4s;
}
.profilepic {
background-color: #636363 !important;
vertical-align: middle;
}
.profilepiccircle {
vertical-align: middle;
overflow: hidden;
border-radius: 50%;
}
a {
text-decoration: underline;
color: inherit;
}
.link {
padding: 20px;
height: 80px;
transition: height 0.2s;
}
.link:hover {
height: 95px;
transition: height 0.2s;
}
#contact,.smalllink {
font-size: 25px;
color: #e8e8e8;
text-align: center;
padding: 10px;
}
#contact {
text-decoration: none;
}
p,li {
font-size: 20px;
color: #c4c4c4;
padding: 10px;
}
.smaller {
font-size: 12px;
text-align: center;
}
.no-margin {
padding: 0;
margin: 0;
}
p,li,code,a {
max-width: 60%;
text-align: left;
overflow-wrap: break-word;
}
@media screen and (orientation:portrait) {
p,li,code,a {
max-width: 100%;
}
.projectPreviewImage {
position: unset;
width: 130px;
display: block;
margin: auto;
transform: none;
}
}
.previewImage {
max-height: 200px;
}
img {
max-width: 100%;
text-align: center;
}
#recentPostTitle {
font-size: 30px;
color: #dad8d8;
}
#recentPostDate {
font-size: 15px;
color: #dad8d8;
}
h1,h2,h3,h4,h5,h6 {
color: #dad8d8;
}
svg {
text-decoration: none;
}
.number-container:before {
content: attr(label-name);
padding-right: 4px;
width: max-content;
font-size: 14px;
color: white;
}
/* React styles */
.categoryTableElement {
font-size: 16px;
color: white;
}
.categoryTableElement > * {
padding-right: 15px;
padding-bottom: 15px;
}
.optionsSelector {
background-color: #c00000;
color: white;
border: none;
font-size: 14px;
padding: 5px;
border-radius: 5px;
}
.categoryColorTextBox {
width: 60px;
background: none;
border: none;
}
#subsidizedPrice {
margin-top: 5px;
margin-bottom: 5px;
}
#discountButton {
text-decoration: underline;
cursor: pointer;
}

View File

@@ -2,13 +2,17 @@ import * as CompileConfig from "../config.json";
import Config from "./config";
import { Registration } from "./types";
import "content-scripts-register-polyfill";
import { sendRealRequestToCustomServer, setupBackgroundRequestProxy } from "@ajayyy/maze-utils/lib/background-request-proxy";
import { setupTabUpdates } from "@ajayyy/maze-utils/lib/tab-updates";
import { generateUserID } from "@ajayyy/maze-utils/lib/setup";
// Make the config public for debugging purposes
window.SB = Config;
import Utils from "./utils";
import { GenericUtils } from "./utils/genericUtils";
import { getExtensionIdsToImportFrom } from "./utils/crossExtension";
const utils = new Utils({
registerFirefoxContentScript,
unregisterFirefoxContentScript
@@ -20,40 +24,12 @@ const popupPort: Record<string, chrome.runtime.Port> = {};
const contentScriptRegistrations = {};
// Register content script if needed
if (utils.isFirefox()) {
utils.wait(() => Config.config !== null).then(function() {
if (Config.config.supportInvidious) utils.setupExtraSiteContentScripts();
});
}
function onTabUpdatedListener(tabId: number) {
chrome.tabs.sendMessage(tabId, {
message: 'update',
}, () => void chrome.runtime.lastError ); // Suppress error on Firefox
}
function onNavigationApiAvailableChange(changes: {[key: string]: chrome.storage.StorageChange}) {
if (changes.navigationApiAvailable) {
if (changes.navigationApiAvailable.newValue) {
chrome.tabs.onUpdated.removeListener(onTabUpdatedListener);
} else {
chrome.tabs.onUpdated.addListener(onTabUpdatedListener);
}
}
}
// If Navigation API is not supported, then background has to inform content script about video change.
// This happens on Safari, Firefox, and Chromium 101 (inclusive) and below.
chrome.tabs.onUpdated.addListener(onTabUpdatedListener);
utils.wait(() => Config.local !== null).then(() => {
if (Config.local.navigationApiAvailable) {
chrome.tabs.onUpdated.removeListener(onTabUpdatedListener);
}
utils.wait(() => Config.config !== null).then(function() {
if (Config.config.supportInvidious) utils.setupExtraSiteContentScripts();
});
if (!Config.configSyncListeners.includes(onNavigationApiAvailableChange)) {
Config.configSyncListeners.push(onNavigationApiAvailableChange);
}
setupBackgroundRequestProxy();
setupTabUpdates(Config);
chrome.runtime.onMessage.addListener(function (request, sender, callback) {
switch(request.message) {
@@ -63,22 +39,9 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
case "openHelp":
chrome.tabs.create({url: chrome.runtime.getURL('help/index.html')});
return false;
case "openUpsell":
chrome.tabs.create({url: chrome.runtime.getURL('upsell/index.html')});
return false;
case "openPage":
chrome.tabs.create({url: chrome.runtime.getURL(request.url)});
return false;
case "sendRequest":
sendRequestToCustomServer(request.type, request.url, request.data).then(async (response) => {
callback({
responseText: await response.text(),
status: response.status,
ok: response.ok
});
});
return true;
case "submitVote":
submitVote(request.type, request.UUID, request.category).then(callback);
@@ -117,6 +80,20 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
}
});
chrome.runtime.onMessageExternal.addListener((request, sender, callback) => {
if (getExtensionIdsToImportFrom().includes(sender.id)) {
if (request.message === "requestConfig") {
callback({
userID: Config.config.userID,
allowExpirements: Config.config.allowExpirements,
showDonationLink: Config.config.showDonationLink,
showUpsells: Config.config.showUpsells,
darkMode: Config.config.darkMode,
})
}
}
});
chrome.runtime.onConnect.addListener((port) => {
if (port.name === "popup") {
chrome.tabs.query({
@@ -141,7 +118,7 @@ chrome.runtime.onInstalled.addListener(function () {
chrome.tabs.create({url: chrome.extension.getURL("/help/index.html")});
//generate a userID
const newUserID = GenericUtils.generateUserID();
const newUserID = generateUserID();
//save this UUID
Config.config.userID = newUserID;
@@ -167,7 +144,7 @@ function registerFirefoxContentScript(options: Registration) {
const oldRegistration = contentScriptRegistrations[options.id];
if (oldRegistration) oldRegistration.unregister();
browser.contentScripts.register({
chrome.contentScripts.register({
allFrames: options.allFrames,
js: options.js,
css: options.css,
@@ -181,8 +158,10 @@ function registerFirefoxContentScript(options: Registration) {
*
*/
function unregisterFirefoxContentScript(id: string) {
contentScriptRegistrations[id].unregister();
delete contentScriptRegistrations[id];
if (contentScriptRegistrations[id]) {
contentScriptRegistrations[id].unregister();
delete contentScriptRegistrations[id];
}
}
async function submitVote(type: number, UUID: string, category: string) {
@@ -190,7 +169,7 @@ async function submitVote(type: number, UUID: string, category: string) {
if (userID == undefined || userID === "undefined") {
//generate one
userID = GenericUtils.generateUserID();
userID = generateUserID();
Config.config.userID = userID;
}
@@ -221,35 +200,9 @@ async function submitVote(type: number, UUID: string, category: string) {
}
}
async function asyncRequestToServer(type: string, address: string, data = {}) {
const serverAddress = Config.config.testingServer ? CompileConfig.testingServerAddress : Config.config.serverAddress;
return await (sendRequestToCustomServer(type, serverAddress + address, data));
}
/**
* Sends a request to the specified url
*
* @param type The request type "GET", "POST", etc.
* @param address The address to add to the SponsorBlock server address
* @param callback
*/
async function sendRequestToCustomServer(type: string, url: string, data = {}) {
// If GET, convert JSON to parameters
if (type.toLowerCase() === "get") {
url = GenericUtils.objectToURI(url, data, true);
data = null;
}
const response = await fetch(url, {
method: type,
headers: {
'Content-Type': 'application/json'
},
redirect: 'follow',
body: data ? JSON.stringify(data) : null
});
return response;
}
return await (sendRealRequestToCustomServer(type, serverAddress + address, data));
}

View File

@@ -7,8 +7,8 @@ import ThumbsDownSvg from "../svg-icons/thumbs_down_svg";
import { downvoteButtonColor, SkipNoticeAction } from "../utils/noticeUtils";
import { VoteResponse } from "../messageTypes";
import { AnimationUtils } from "../utils/animationUtils";
import { GenericUtils } from "../utils/genericUtils";
import { Tooltip } from "../render/Tooltip";
import { getErrorMessage } from "@ajayyy/maze-utils/lib/formating";
export interface CategoryPillProps {
vote: (type: number, UUID: SegmentUUID, category?: Category) => Promise<VoteResponse>;
@@ -43,7 +43,7 @@ class CategoryPillComponent extends React.Component<CategoryPillProps, CategoryP
return (
<span style={style}
className={"sponsorBlockCategoryPill"}
className={"sponsorBlockCategoryPill"}
aria-label={this.getTitleText()}
onClick={(e) => this.toggleOpen(e)}
onMouseEnter={() => this.openTooltip()}
@@ -104,39 +104,26 @@ class CategoryPillComponent extends React.Component<CategoryPillProps, CategoryP
await stopAnimation();
if (response.successType == 1 || (response.successType == -1 && response.statusCode == 429)) {
this.setState({
open: false,
this.setState({
open: false,
show: type === 1
});
} else if (response.statusCode !== 403) {
alert(GenericUtils.getErrorMessage(response.statusCode, response.responseText));
alert(getErrorMessage(response.statusCode, response.responseText));
}
}
}
private getColor(): string {
const configObject = Config.config.barTypes["preview-" + this.state.segment?.category]
|| Config.config.barTypes[this.state.segment?.category];
return configObject?.color;
// Handled by setCategoryColorCSSVariables() of content.ts
const category = this.state.segment?.category;
return category == null ? null : `var(--sb-category-preview-${category}, var(--sb-category-${category}))`;
}
private getTextColor(): string {
const color = this.getColor();
if (!color) return null;
const existingCalculatedColor = Config.config.categoryPillColors[this.state.segment?.category];
if (existingCalculatedColor && existingCalculatedColor.lastColor === color) {
return existingCalculatedColor.textColor;
} else {
const luminance = GenericUtils.getLuminance(color);
const textColor = luminance > 128 ? "black" : "white";
Config.config.categoryPillColors[this.state.segment?.category] = {
lastColor: color,
textColor
};
return textColor;
}
// Handled by setCategoryColorCSSVariables() of content.ts
const category = this.state.segment?.category;
return category == null ? null : `var(--sb-category-text-preview-${category}, var(--sb-category-text-${category}))`;
}
private openTooltip(): void {

View File

@@ -1,14 +1,14 @@
import * as React from "react";
import Config from "../config";
import { Category, SegmentUUID, SponsorTime } from "../types";
import { ActionType, Category, SegmentUUID, SponsorTime } from "../types";
import ThumbsUpSvg from "../svg-icons/thumbs_up_svg";
import ThumbsDownSvg from "../svg-icons/thumbs_down_svg";
import { downvoteButtonColor, SkipNoticeAction } from "../utils/noticeUtils";
import { VoteResponse } from "../messageTypes";
import { AnimationUtils } from "../utils/animationUtils";
import { GenericUtils } from "../utils/genericUtils";
import { Tooltip } from "../render/Tooltip";
import { getErrorMessage } from "@ajayyy/maze-utils/lib/formating";
export interface ChapterVoteProps {
vote: (type: number, UUID: SegmentUUID, category?: Category) => Promise<VoteResponse>;
@@ -65,35 +65,39 @@ class ChapterVoteComponent extends React.Component<ChapterVoteProps, ChapterVote
this.tooltip.close();
this.tooltip = null;
} else {
const referenceNode = chapterNode?.parentElement?.parentElement;
if (referenceNode) {
const outerBounding = referenceNode.getBoundingClientRect();
const buttonBounding = (e.target as HTMLElement)?.parentElement?.getBoundingClientRect();
this.tooltip = new Tooltip({
referenceNode: chapterNode?.parentElement?.parentElement,
prependElement: chapterNode?.parentElement,
showLogo: false,
showGotIt: false,
bottomOffset: `${outerBounding.height + 25}px`,
leftOffset: `${buttonBounding.x - outerBounding.x}px`,
extraClass: "centeredSBTriangle",
buttons: [
{
name: chrome.i18n.getMessage("incorrectVote"),
listener: (event) => this.vote(event, 0, e.target as HTMLElement).then(() => {
this.tooltip?.close();
this.tooltip = null;
})
}, {
name: chrome.i18n.getMessage("harmfulVote"),
listener: (event) => this.vote(event, 30, e.target as HTMLElement).then(() => {
this.tooltip?.close();
this.tooltip = null;
})
}
]
});
if (this.state.segment?.actionType === ActionType.Chapter) {
const referenceNode = chapterNode?.parentElement?.parentElement;
if (referenceNode) {
const outerBounding = referenceNode.getBoundingClientRect();
const buttonBounding = (e.target as HTMLElement)?.parentElement?.getBoundingClientRect();
this.tooltip = new Tooltip({
referenceNode: chapterNode?.parentElement?.parentElement,
prependElement: chapterNode?.parentElement,
showLogo: false,
showGotIt: false,
bottomOffset: `${outerBounding.height + 25}px`,
leftOffset: `${buttonBounding.x - outerBounding.x}px`,
extraClass: "centeredSBTriangle",
buttons: [
{
name: chrome.i18n.getMessage("incorrectVote"),
listener: (event) => this.vote(event, 0, e.target as HTMLElement).then(() => {
this.tooltip?.close();
this.tooltip = null;
})
}, {
name: chrome.i18n.getMessage("harmfulVote"),
listener: (event) => this.vote(event, 30, e.target as HTMLElement).then(() => {
this.tooltip?.close();
this.tooltip = null;
})
}
]
});
}
} else {
this.vote(e, 0, e.target as HTMLElement)
}
}
}}>
@@ -120,7 +124,7 @@ class ChapterVoteComponent extends React.Component<ChapterVoteProps, ChapterVote
show: type === 1
});
} else if (response.statusCode !== 403) {
alert(GenericUtils.getErrorMessage(response.statusCode, response.responseText));
alert(getErrorMessage(response.statusCode, response.responseText));
}
}
}

View File

@@ -195,7 +195,7 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
id={"skipNoticeTimerText" + this.idSuffix}
key="skipNoticeTimerText"
className={this.state.countdownMode !== CountdownMode.Timer ? "hidden" : ""} >
{this.state.countdownTime + "s"}
{chrome.i18n.getMessage("NoticeTimeAfterSkip").replace("{seconds}", this.state.countdownTime.toString())}
</span>
),(
<img

View File

@@ -7,13 +7,13 @@ import NoticeTextSelectionComponent from "./NoticeTextSectionComponent";
import Utils from "../utils";
const utils = new Utils();
import { getSkippingText } from "../utils/categoryUtils";
import { keybindToString } from "../utils/configUtils";
import ThumbsUpSvg from "../svg-icons/thumbs_up_svg";
import ThumbsDownSvg from "../svg-icons/thumbs_down_svg";
import PencilSvg from "../svg-icons/pencil_svg";
import { downvoteButtonColor, SkipNoticeAction } from "../utils/noticeUtils";
import { GenericUtils } from "../utils/genericUtils";
import { generateUserID } from "@ajayyy/maze-utils/lib/setup";
import { keybindToString } from "@ajayyy/maze-utils/lib/config";
enum SkipButtonState {
Undo, // Unskip
@@ -542,7 +542,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
const sponsorVideoID = this.props.contentContainer().sponsorVideoID;
const sponsorTimesSubmitting : SponsorTime = {
segment: this.segments[index].segment,
UUID: GenericUtils.generateUserID() as SegmentUUID,
UUID: generateUserID() as SegmentUUID,
category: this.segments[index].category,
actionType: this.segments[index].actionType,
source: SponsorSourceType.Local

View File

@@ -6,10 +6,8 @@ import Utils from "../utils";
import SubmissionNoticeComponent from "./SubmissionNoticeComponent";
import { RectangleTooltip } from "../render/RectangleTooltip";
import SelectorComponent, { SelectorOption } from "./SelectorComponent";
import { GenericUtils } from "../utils/genericUtils";
import { noRefreshFetchingChaptersAllowed } from "../utils/licenseKey";
import { DEFAULT_CATEGORY } from "../utils/categoryUtils";
import { getFormattedTime, getFormattedTimeToSeconds } from "@ajayyy/maze-utils/lib/formating";
const utils = new Utils();
@@ -181,9 +179,9 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
style={timeDisplayStyle}
className="sponsorTimeDisplay"
onClick={this.toggleEditTime.bind(this)}>
{GenericUtils.getFormattedTime(segment[0], true) +
{getFormattedTime(segment[0], true) +
((!isNaN(segment[1]) && sponsorTime.actionType !== ActionType.Poi)
? " " + chrome.i18n.getMessage("to") + " " + GenericUtils.getFormattedTime(segment[1], true) : "")}
? " " + chrome.i18n.getMessage("to") + " " + getFormattedTime(segment[1], true) : "")}
</div>
);
}
@@ -308,8 +306,8 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
const sponsorTimeEdits = this.state.sponsorTimeEdits;
// check if change is small engough to show tooltip
const before = GenericUtils.getFormattedTimeToSeconds(sponsorTimeEdits[index]);
const after = GenericUtils.getFormattedTimeToSeconds(targetValue);
const before = getFormattedTimeToSeconds(sponsorTimeEdits[index]);
const after = getFormattedTimeToSeconds(targetValue);
const difference = Math.abs(before - after);
if (0 < difference && difference < 0.5) this.showScrollToEditToolTip();
@@ -333,7 +331,7 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
}
const sponsorTimeEdits = this.state.sponsorTimeEdits;
let timeAsNumber = GenericUtils.getFormattedTimeToSeconds(this.state.sponsorTimeEdits[index]);
let timeAsNumber = getFormattedTimeToSeconds(this.state.sponsorTimeEdits[index]);
if (timeAsNumber !== null && e.deltaY != 0) {
if (e.deltaY < 0) {
timeAsNumber += step;
@@ -343,7 +341,7 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
timeAsNumber = 0;
}
sponsorTimeEdits[index] = GenericUtils.getFormattedTime(timeAsNumber, true);
sponsorTimeEdits[index] = getFormattedTime(timeAsNumber, true);
if (sponsorTime.actionType === ActionType.Poi) sponsorTimeEdits[1] = sponsorTimeEdits[0];
this.setState({sponsorTimeEdits});
@@ -421,7 +419,7 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
// If permission not loaded, treat it like we have permission except chapter
const defaultBlockCategories = ["chapter"];
const permission = (Config.config.showCategoryWithoutPermission
|| Config.config.permissions[category as Category]) && (category !== "chapter" || noRefreshFetchingChaptersAllowed());
|| Config.config.permissions[category as Category]);
if ((defaultBlockCategories.includes(category)
|| (permission !== undefined && !Config.config.showCategoryWithoutPermission)) && !permission) continue;
@@ -575,8 +573,8 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
/** Returns an array in the sponsorTimeEdits form (formatted time string) from a normal seconds sponsor time */
getFormattedSponsorTimesEdits(sponsorTime: SponsorTime): [string, string] {
return [GenericUtils.getFormattedTime(sponsorTime.segment[0], true),
GenericUtils.getFormattedTime(sponsorTime.segment[1], true)];
return [getFormattedTime(sponsorTime.segment[0], true),
getFormattedTime(sponsorTime.segment[1], true)];
}
saveEditTimes(): void {
@@ -584,8 +582,8 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
const category = this.categoryOptionRef.current.value as Category
if (this.state.editing) {
const startTime = GenericUtils.getFormattedTimeToSeconds(this.state.sponsorTimeEdits[0]);
const endTime = GenericUtils.getFormattedTimeToSeconds(this.state.sponsorTimeEdits[1]);
const startTime = getFormattedTimeToSeconds(this.state.sponsorTimeEdits[0]);
const endTime = getFormattedTimeToSeconds(this.state.sponsorTimeEdits[1]);
// Change segment time only if the format was correct
if (startTime !== null && endTime !== null) {
@@ -688,13 +686,13 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
descriptionUpdate(description: string): void {
this.setState({
description
}, () => {
this.saveEditTimes();
});
if (!this.fetchingSuggestions) {
this.fetchSuggestions(description);
}
this.saveEditTimes();
}
async fetchSuggestions(description: string): Promise<void> {

View File

@@ -6,8 +6,6 @@ import { Category, CategorySkipOption } from "../../types";
import { getCategorySuffix } from "../../utils/categoryUtils";
import ToggleOptionComponent from "./ToggleOptionComponent";
import { fetchingChaptersAllowed } from "../../utils/licenseKey";
import LockSvg from "../../svg-icons/lock_svg";
export interface CategorySkipOptionsProps {
category: Category;
@@ -19,7 +17,6 @@ export interface CategorySkipOptionsProps {
export interface CategorySkipOptionsState {
color: string;
previewColor: string;
hideChapter: boolean;
}
export interface ToggleOption {
@@ -37,29 +34,11 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
// Setup state
this.state = {
color: props.defaultColor || Config.config.barTypes[this.props.category]?.color,
previewColor: props.defaultPreviewColor || Config.config.barTypes["preview-" + this.props.category]?.color,
hideChapter: true
previewColor: props.defaultPreviewColor || Config.config.barTypes["preview-" + this.props.category]?.color
};
fetchingChaptersAllowed().then((allowed) => {
this.setState({
hideChapter: !allowed
});
});
}
render(): React.ReactElement {
if (this.state.hideChapter) {
// Ensure force update refreshes this
fetchingChaptersAllowed().then((allowed) => {
if (allowed) {
this.setState({
hideChapter: !allowed
});
}
});
}
let defaultOption = "disable";
// Set the default opton properly
for (const categorySelection of Config.config.categorySelections) {
@@ -80,20 +59,10 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
}
}
let extraClasses = "";
const disabled = this.props.category === "chapter" && this.state.hideChapter;
if (disabled) {
extraClasses += " disabled";
if (!Config.config.showUpsells) {
return <></>;
}
}
return (
<>
<tr id={this.props.category + "OptionsRow"}
className={`categoryTableElement${extraClasses}`} >
className={`categoryTableElement`} >
<td id={this.props.category + "OptionName"}
className="categoryTableLabel">
{chrome.i18n.getMessage("category_" + this.props.category)}
@@ -104,14 +73,9 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
<select
className="optionsSelector"
defaultValue={defaultOption}
disabled={disabled}
onChange={this.skipOptionSelected.bind(this)}>
{this.getCategorySkipOptions()}
</select>
{disabled &&
<LockSvg className="upsellButton" onClick={() => chrome.tabs.create({url: chrome.runtime.getURL('upsell/index.html')})}/>
}
</td>
{this.props.category !== "chapter" &&
@@ -120,7 +84,6 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
<input
className="categoryColorTextBox option-text-box"
type="color"
disabled={disabled}
onChange={(event) => this.setColorState(event, false)}
value={this.state.color} />
</td>
@@ -140,7 +103,7 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
</tr>
<tr id={this.props.category + "DescriptionRow"}
className={`small-description categoryTableDescription${extraClasses}`}>
className={`small-description categoryTableDescription`}>
<td
colSpan={2}>
{chrome.i18n.getMessage("category_" + this.props.category + "_description")}
@@ -151,7 +114,7 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
</td>
</tr>
{this.getExtraOptionComponents(this.props.category, extraClasses, disabled)}
{this.getExtraOptionComponents(this.props.category)}
</>
);
@@ -176,6 +139,12 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
case "autoSkip":
option = CategorySkipOption.AutoSkip;
if (this.props.category === "filler" && !Config.config.isVip) {
if (!confirm(chrome.i18n.getMessage("FillerWarning"))) {
event.target.value = "disable";
}
}
break;
}
@@ -235,16 +204,15 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
}, 50);
}
getExtraOptionComponents(category: string, extraClasses: string, disabled: boolean): JSX.Element[] {
getExtraOptionComponents(category: string): JSX.Element[] {
const result = [];
for (const option of this.getExtraOptions(category)) {
result.push(
<tr key={option.configKey} className={extraClasses}>
<tr key={option.configKey}>
<td id={`${category}_${option.configKey}`} className="categoryExtraOptions">
<ToggleOptionComponent
configKey={option.configKey}
label={option.label}
disabled={!option.dontDisable && disabled}
style={{width: "inherit"}}
/>
</td>

View File

@@ -1,9 +1,8 @@
import * as React from "react";
import { createRoot, Root } from 'react-dom/client';
import Config from "../../config";
import { Keybind } from "../../types";
import KeybindDialogComponent from "./KeybindDialogComponent";
import { keybindEquals, keybindToString, formatKey } from "../../utils/configUtils";
import { formatKey, Keybind, keybindEquals, keybindToString } from "@ajayyy/maze-utils/lib/config";
export interface KeybindProps {
option: string;

View File

@@ -1,8 +1,7 @@
import * as React from "react";
import { ChangeEvent } from "react";
import Config from "../../config";
import { Keybind } from "../../types";
import { keybindEquals, formatKey } from "../../utils/configUtils";
import { Keybind, formatKey, keybindEquals } from "@ajayyy/maze-utils/lib/config";
export interface KeybindDialogProps {
option: string;
@@ -124,7 +123,7 @@ class KeybindDialogComponent extends React.Component<KeybindDialogProps, Keybind
let youtubeShortcuts: Keybind[];
if (/[a-zA-Z0-9,.+\-\][:]/.test(this.state.key.key)) {
youtubeShortcuts = [{key: "k"}, {key: "j"}, {key: "l"}, {key: "p", shift: true}, {key: "n", shift: true}, {key: ","}, {key: "."}, {key: ",", shift: true}, {key: ".", shift: true},
{key: "ArrowRight"}, {key: "ArrowLeft"}, {key: "ArrowUp"}, {key: "ArrowDown"}, {key: "ArrowRight", ctrl: true}, {key: "ArrowLeft", ctrl: true}, {key: "c"}, {key: "o"},
{key: "ArrowRight"}, {key: "ArrowLeft"}, {key: "ArrowUp"}, {key: "ArrowDown"}, {key: "c"}, {key: "o"},
{key: "w"}, {key: "+"}, {key: "-"}, {key: "f"}, {key: "t"}, {key: "i"}, {key: "m"}, {key: "a"}, {key: "s"}, {key: "d"}, {key: "Home"}, {key: "End"},
{key: "0"}, {key: "1"}, {key: "2"}, {key: "3"}, {key: "4"}, {key: "5"}, {key: "6"}, {key: "7"}, {key: "8"}, {key: "9"}, {key: "]"}, {key: "["}];
} else {

View File

@@ -1,7 +1,8 @@
import * as CompileConfig from "../config.json";
import * as invidiousList from "../ci/invidiouslist.json";
import { Category, CategorySelection, CategorySkipOption, NoticeVisbilityMode, PreviewBarOption, SponsorTime, StorageChangesObject, Keybind, HashedValue, VideoID, SponsorHideType } from "./types";
import { keybindEquals } from "./utils/configUtils";
import { Category, CategorySelection, CategorySkipOption, NoticeVisbilityMode, PreviewBarOption, SponsorTime, VideoID, SponsorHideType } from "./types";
import { Keybind, ProtoConfig, keybindEquals } from "@ajayyy/maze-utils/lib/config";
import { HashedValue } from "@ajayyy/maze-utils/lib/hash";
export interface Permission {
canSubmit: boolean;
@@ -25,6 +26,7 @@ interface SBConfig {
disableSkipping: boolean;
muteSegments: boolean;
fullVideoSegments: boolean;
fullVideoLabelsOnThumbnails: boolean;
manualSkipOnFullVideo: boolean;
trackViewCount: boolean;
trackViewCountInPrivate: boolean;
@@ -52,6 +54,7 @@ interface SBConfig {
showDonationLink: boolean;
showPopupDonationCount: number;
showUpsells: boolean;
showNewFeaturePopups: boolean;
donateClicked: number;
autoHideInfoButton: boolean;
autoSkipOnMusicVideos: boolean;
@@ -70,6 +73,8 @@ interface SBConfig {
useVirtualTime: boolean;
showSegmentFailedToFetchWarning: boolean;
allowScrollingToEdit: boolean;
deArrowInstalled: boolean;
showDeArrowPromotion: boolean;
// Used to cache calculated text color info
categoryPillColors: {
@@ -121,7 +126,7 @@ interface SBConfig {
};
}
export type VideoDownvotes = { segments: { uuid: HashedValue; hidden: SponsorHideType }[] ; lastAccess: number };
export type VideoDownvotes = { segments: { uuid: HashedValue; hidden: SponsorHideType }[]; lastAccess: number };
interface SBStorage {
/* VideoID prefixes to UUID prefixes */
@@ -129,339 +134,32 @@ interface SBStorage {
navigationApiAvailable: boolean;
}
export interface SBObject {
configLocalListeners: Array<(changes: StorageChangesObject) => unknown>;
configSyncListeners: Array<(changes: StorageChangesObject) => unknown>;
syncDefaults: SBConfig;
localDefaults: SBStorage;
cachedSyncConfig: SBConfig;
cachedLocalStorage: SBStorage;
config: SBConfig;
local: SBStorage;
forceSyncUpdate(prop: string): void;
forceLocalUpdate(prop: string): void;
resetToDefault(): void;
}
const Config: SBObject = {
/**
* Callback function when an option is updated
*/
configLocalListeners: [],
configSyncListeners: [],
syncDefaults: {
userID: null,
isVip: false,
permissions: {},
unsubmittedSegments: {},
defaultCategory: "chooseACategory" as Category,
renderSegmentsAsChapters: false,
whitelistedChannels: [],
forceChannelCheck: false,
minutesSaved: 0,
skipCount: 0,
sponsorTimesContributed: 0,
submissionCountSinceCategories: 0,
showTimeWithSkips: true,
disableSkipping: false,
muteSegments: true,
fullVideoSegments: true,
manualSkipOnFullVideo: false,
trackViewCount: true,
trackViewCountInPrivate: true,
trackDownvotes: true,
dontShowNotice: false,
noticeVisibilityMode: NoticeVisbilityMode.FadedForAutoSkip,
hideVideoPlayerControls: false,
hideInfoButtonPlayerControls: false,
hideDeleteButtonPlayerControls: false,
hideUploadButtonPlayerControls: false,
hideSkipButtonPlayerControls: false,
hideDiscordLaunches: 0,
hideDiscordLink: false,
invidiousInstances: ["invidious.snopyta.org"], // leave as default
supportInvidious: false,
serverAddress: CompileConfig.serverAddress,
minDuration: 0,
skipNoticeDuration: 4,
audioNotificationOnSkip: false,
checkForUnlistedVideos: false,
testingServer: false,
refetchWhenNotFound: true,
ytInfoPermissionGranted: false,
allowExpirements: true,
showDonationLink: true,
showPopupDonationCount: 0,
showUpsells: true,
donateClicked: 0,
autoHideInfoButton: true,
autoSkipOnMusicVideos: false,
scrollToEditTimeUpdate: false, // false means the tooltip will be shown
categoryPillUpdate: false,
showChapterInfoMessage: true,
darkMode: true,
showCategoryGuidelines: true,
showCategoryWithoutPermission: false,
showSegmentNameInChapterBar: true,
useVirtualTime: true,
showSegmentFailedToFetchWarning: true,
allowScrollingToEdit: true,
categoryPillColors: {},
/**
* Default keybinds should not set "code" as that's gonna be different based on the user's locale. They should also only use EITHER ctrl OR alt modifiers (or none).
* Using ctrl+alt, or shift may produce a different character that we will not be able to recognize in different locales.
* The exception for shift is letters, where it only capitalizes. So shift+A is fine, but shift+1 isn't.
* Don't forget to add the new keybind to the checks in "KeybindDialogComponent.isKeybindAvailable()" and in "migrateOldFormats()"!
* TODO: Find a way to skip having to update these checks. Maybe storing keybinds in a Map?
*/
skipKeybind: {key: "Enter"},
startSponsorKeybind: {key: ";"},
submitKeybind: {key: "'"},
nextChapterKeybind: {key: "]", ctrl: true},
previousChapterKeybind: {key: "[", ctrl: true},
categorySelections: [{
name: "sponsor" as Category,
option: CategorySkipOption.AutoSkip
}, {
name: "poi_highlight" as Category,
option: CategorySkipOption.ManualSkip
}, {
name: "exclusive_access" as Category,
option: CategorySkipOption.ShowOverlay
}],
payments: {
licenseKey: null,
lastCheck: 0,
lastFreeCheck: 0,
freeAccess: false,
chaptersAllowed: false
},
colorPalette: {
red: "#780303",
white: "#ffffff",
locked: "#ffc83d"
},
// Preview bar
barTypes: {
"preview-chooseACategory": {
color: "#ffffff",
opacity: "0.7"
},
"sponsor": {
color: "#00d400",
opacity: "0.7"
},
"preview-sponsor": {
color: "#007800",
opacity: "0.7"
},
"selfpromo": {
color: "#ffff00",
opacity: "0.7"
},
"preview-selfpromo": {
color: "#bfbf35",
opacity: "0.7"
},
"exclusive_access": {
color: "#008a5c",
opacity: "0.7"
},
"interaction": {
color: "#cc00ff",
opacity: "0.7"
},
"preview-interaction": {
color: "#6c0087",
opacity: "0.7"
},
"intro": {
color: "#00ffff",
opacity: "0.7"
},
"preview-intro": {
color: "#008080",
opacity: "0.7"
},
"outro": {
color: "#0202ed",
opacity: "0.7"
},
"preview-outro": {
color: "#000070",
opacity: "0.7"
},
"preview": {
color: "#008fd6",
opacity: "0.7"
},
"preview-preview": {
color: "#005799",
opacity: "0.7"
},
"music_offtopic": {
color: "#ff9900",
opacity: "0.7"
},
"preview-music_offtopic": {
color: "#a6634a",
opacity: "0.7"
},
"poi_highlight": {
color: "#ff1684",
opacity: "0.7"
},
"preview-poi_highlight": {
color: "#9b044c",
opacity: "0.7"
},
"filler": {
color: "#7300FF",
opacity: "0.9"
},
"preview-filler": {
color: "#2E0066",
opacity: "0.7"
}
}
},
localDefaults: {
downvotedSegments: {},
navigationApiAvailable: null
},
cachedSyncConfig: null,
cachedLocalStorage: null,
config: null,
local: null,
forceSyncUpdate,
forceLocalUpdate,
resetToDefault
};
// Function setup
function configProxy(): { sync: SBConfig; local: SBStorage } {
chrome.storage.onChanged.addListener((changes: {[key: string]: chrome.storage.StorageChange}, areaName) => {
if (areaName === "sync") {
for (const key in changes) {
Config.cachedSyncConfig[key] = changes[key].newValue;
}
for (const callback of Config.configSyncListeners) {
callback(changes);
}
} else if (areaName === "local") {
for (const key in changes) {
Config.cachedLocalStorage[key] = changes[key].newValue;
}
for (const callback of Config.configLocalListeners) {
callback(changes);
}
}
});
const syncHandler: ProxyHandler<SBConfig> = {
set<K extends keyof SBConfig>(obj: SBConfig, prop: K, value: SBConfig[K]) {
Config.cachedSyncConfig[prop] = value;
chrome.storage.sync.set({
[prop]: value
});
return true;
},
get<K extends keyof SBConfig>(obj: SBConfig, prop: K): SBConfig[K] {
const data = Config.cachedSyncConfig[prop];
return obj[prop] || data;
},
deleteProperty(obj: SBConfig, prop: keyof SBConfig) {
chrome.storage.sync.remove(<string> prop);
return true;
}
};
const localHandler: ProxyHandler<SBStorage> = {
set<K extends keyof SBStorage>(obj: SBStorage, prop: K, value: SBStorage[K]) {
Config.cachedLocalStorage[prop] = value;
chrome.storage.local.set({
[prop]: value
});
return true;
},
get<K extends keyof SBStorage>(obj: SBStorage, prop: K): SBStorage[K] {
const data = Config.cachedLocalStorage[prop];
return obj[prop] || data;
},
deleteProperty(obj: SBStorage, prop: keyof SBStorage) {
chrome.storage.local.remove(<string> prop);
return true;
}
};
return {
sync: new Proxy<SBConfig>({ handler: syncHandler } as unknown as SBConfig, syncHandler),
local: new Proxy<SBStorage>({ handler: localHandler } as unknown as SBStorage, localHandler)
};
}
function forceSyncUpdate(prop: string): void {
const value = Config.cachedSyncConfig[prop];
if (prop === "unsubmittedSegments") {
// Early to be safe
if (JSON.stringify(value).length + prop.length > 8000) {
for (const key in value) {
if (!value[key] || value[key].length <= 0) {
delete value[key];
}
}
}
class ConfigClass extends ProtoConfig<SBConfig, SBStorage> {
resetToDefault() {
chrome.storage.sync.set({
...this.syncDefaults,
userID: this.config.userID,
minutesSaved: this.config.minutesSaved,
skipCount: this.config.skipCount,
sponsorTimesContributed: this.config.sponsorTimesContributed
});
}
chrome.storage.sync.set({
[prop]: value
});
}
function forceLocalUpdate(prop: string): void {
chrome.storage.local.set({
[prop]: Config.cachedLocalStorage[prop]
});
}
async function fetchConfig(): Promise<void> {
await Promise.all([new Promise<void>((resolve) => {
chrome.storage.sync.get(null, function(items) {
Config.cachedSyncConfig = <SBConfig> <unknown> items;
resolve();
});
}), new Promise<void>((resolve) => {
chrome.storage.local.get(null, function(items) {
Config.cachedLocalStorage = <SBStorage> <unknown> items;
resolve();
});
})]);
}
function migrateOldSyncFormats(config: SBConfig) {
if (!config["chapterCategoryAdded"]) {
config["chapterCategoryAdded"] = true;
if (!config.categorySelections.some((s) => s.name === "chapter")) {
config.categorySelections.push({
name: "chapter" as Category,
option: CategorySkipOption.ShowOverlay
});
config.categorySelections = config.categorySelections;
}
}
if (config["segmentTimes"]) {
const unsubmittedSegments = {};
for (const item of config["segmentTimes"]) {
@@ -471,15 +169,8 @@ function migrateOldSyncFormats(config: SBConfig) {
chrome.storage.sync.remove("segmentTimes", () => config.unsubmittedSegments = unsubmittedSegments);
}
if (!config["exclusive_accessCategoryAdded"] && !config.categorySelections.some((s) => s.name === "exclusive_access")) {
config["exclusive_accessCategoryAdded"] = true;
config.categorySelections.push({
name: "exclusive_access" as Category,
option: CategorySkipOption.ShowOverlay
});
config.categorySelections = config.categorySelections;
if (config["exclusive_accessCategoryAdded"] !== undefined) {
chrome.storage.sync.remove("exclusive_accessCategoryAdded");
}
if (config["fillerUpdate"] !== undefined) {
@@ -500,7 +191,7 @@ function migrateOldSyncFormats(config: SBConfig) {
config["autoSkipOnMusicVideosUpdate"] = true;
for (const selection of config.categorySelections) {
if (selection.name === "music_offtopic"
&& selection.option === CategorySkipOption.AutoSkip) {
&& selection.option === CategorySkipOption.AutoSkip) {
config.autoSkipOnMusicVideos = true;
break;
@@ -519,20 +210,20 @@ function migrateOldSyncFormats(config: SBConfig) {
}
if (typeof config["skipKeybind"] == "string") {
config["skipKeybind"] = {key: config["skipKeybind"]};
config["skipKeybind"] = { key: config["skipKeybind"] };
}
if (typeof config["startSponsorKeybind"] == "string") {
config["startSponsorKeybind"] = {key: config["startSponsorKeybind"]};
config["startSponsorKeybind"] = { key: config["startSponsorKeybind"] };
}
if (typeof config["submitKeybind"] == "string") {
config["submitKeybind"] = {key: config["submitKeybind"]};
config["submitKeybind"] = { key: config["submitKeybind"] };
}
// Unbind key if it matches a previous one set by the user (should be ordered oldest to newest)
const keybinds = ["skipKeybind", "startSponsorKeybind", "submitKeybind"];
for (let i = keybinds.length-1; i >= 0; i--) {
for (let i = keybinds.length - 1; i >= 0; i--) {
for (let j = 0; j < keybinds.length; j++) {
if (i == j)
continue;
@@ -550,59 +241,209 @@ function migrateOldSyncFormats(config: SBConfig) {
}
// populate invidiousInstances with new instances if 3p support is **DISABLED**
if (!config["supportInvidious"] && config["invidiousInstances"].length !== invidiousList.length) {
config["invidiousInstances"] = invidiousList;
if (!config["supportInvidious"] && config["invidiousInstances"].length < invidiousList.length) {
config["invidiousInstances"] = [...new Set([...invidiousList, ...config["invidiousInstances"]])];
}
if (config["lastIsVipUpdate"]) {
chrome.storage.sync.remove("lastIsVipUpdate");
}
}
async function setupConfig() {
if (typeof(chrome) === "undefined") return;
const syncDefaults = {
userID: null,
isVip: false,
permissions: {},
unsubmittedSegments: {},
defaultCategory: "chooseACategory" as Category,
renderSegmentsAsChapters: false,
whitelistedChannels: [],
forceChannelCheck: false,
minutesSaved: 0,
skipCount: 0,
sponsorTimesContributed: 0,
submissionCountSinceCategories: 0,
showTimeWithSkips: true,
disableSkipping: false,
muteSegments: true,
fullVideoSegments: true,
fullVideoLabelsOnThumbnails: true,
manualSkipOnFullVideo: false,
trackViewCount: true,
trackViewCountInPrivate: true,
trackDownvotes: true,
dontShowNotice: false,
noticeVisibilityMode: NoticeVisbilityMode.FadedForAutoSkip,
hideVideoPlayerControls: false,
hideInfoButtonPlayerControls: false,
hideDeleteButtonPlayerControls: false,
hideUploadButtonPlayerControls: false,
hideSkipButtonPlayerControls: false,
hideDiscordLaunches: 0,
hideDiscordLink: false,
invidiousInstances: ["invidious.snopyta.org"], // leave as default
supportInvidious: false,
serverAddress: CompileConfig.serverAddress,
minDuration: 0,
skipNoticeDuration: 4,
audioNotificationOnSkip: false,
checkForUnlistedVideos: false,
testingServer: false,
refetchWhenNotFound: true,
ytInfoPermissionGranted: false,
allowExpirements: true,
showDonationLink: true,
showPopupDonationCount: 0,
showUpsells: true,
showNewFeaturePopups: true,
donateClicked: 0,
autoHideInfoButton: true,
autoSkipOnMusicVideos: false,
scrollToEditTimeUpdate: false, // false means the tooltip will be shown
categoryPillUpdate: false,
showChapterInfoMessage: true,
darkMode: true,
showCategoryGuidelines: true,
showCategoryWithoutPermission: false,
showSegmentNameInChapterBar: true,
useVirtualTime: true,
showSegmentFailedToFetchWarning: true,
allowScrollingToEdit: true,
deArrowInstalled: false,
showDeArrowPromotion: true,
await fetchConfig();
addDefaults();
const config = configProxy();
migrateOldSyncFormats(config.sync);
categoryPillColors: {},
Config.config = config.sync;
Config.local = config.local;
}
/**
* Default keybinds should not set "code" as that's gonna be different based on the user's locale. They should also only use EITHER ctrl OR alt modifiers (or none).
* Using ctrl+alt, or shift may produce a different character that we will not be able to recognize in different locales.
* The exception for shift is letters, where it only capitalizes. So shift+A is fine, but shift+1 isn't.
* Don't forget to add the new keybind to the checks in "KeybindDialogComponent.isKeybindAvailable()" and in "migrateOldFormats()"!
* TODO: Find a way to skip having to update these checks. Maybe storing keybinds in a Map?
*/
skipKeybind: { key: "Enter" },
startSponsorKeybind: { key: ";" },
submitKeybind: { key: "'" },
nextChapterKeybind: { key: "ArrowRight", ctrl: true },
previousChapterKeybind: { key: "ArrowLeft", ctrl: true },
// Add defaults
function addDefaults() {
for (const key in Config.syncDefaults) {
if(!Object.prototype.hasOwnProperty.call(Config.cachedSyncConfig, key)) {
Config.cachedSyncConfig[key] = Config.syncDefaults[key];
} else if (key === "barTypes") {
for (const key2 in Config.syncDefaults[key]) {
if(!Object.prototype.hasOwnProperty.call(Config.cachedSyncConfig[key], key2)) {
Config.cachedSyncConfig[key][key2] = Config.syncDefaults[key][key2];
}
}
categorySelections: [{
name: "sponsor" as Category,
option: CategorySkipOption.AutoSkip
}, {
name: "poi_highlight" as Category,
option: CategorySkipOption.ManualSkip
}, {
name: "exclusive_access" as Category,
option: CategorySkipOption.ShowOverlay
}, {
name: "chapter" as Category,
option: CategorySkipOption.ShowOverlay
}],
payments: {
licenseKey: null,
lastCheck: 0,
lastFreeCheck: 0,
freeAccess: false,
chaptersAllowed: false
},
colorPalette: {
red: "#780303",
white: "#ffffff",
locked: "#ffc83d"
},
// Preview bar
barTypes: {
"preview-chooseACategory": {
color: "#ffffff",
opacity: "0.7"
},
"sponsor": {
color: "#00d400",
opacity: "0.7"
},
"preview-sponsor": {
color: "#007800",
opacity: "0.7"
},
"selfpromo": {
color: "#ffff00",
opacity: "0.7"
},
"preview-selfpromo": {
color: "#bfbf35",
opacity: "0.7"
},
"exclusive_access": {
color: "#008a5c",
opacity: "0.7"
},
"interaction": {
color: "#cc00ff",
opacity: "0.7"
},
"preview-interaction": {
color: "#6c0087",
opacity: "0.7"
},
"intro": {
color: "#00ffff",
opacity: "0.7"
},
"preview-intro": {
color: "#008080",
opacity: "0.7"
},
"outro": {
color: "#0202ed",
opacity: "0.7"
},
"preview-outro": {
color: "#000070",
opacity: "0.7"
},
"preview": {
color: "#008fd6",
opacity: "0.7"
},
"preview-preview": {
color: "#005799",
opacity: "0.7"
},
"music_offtopic": {
color: "#ff9900",
opacity: "0.7"
},
"preview-music_offtopic": {
color: "#a6634a",
opacity: "0.7"
},
"poi_highlight": {
color: "#ff1684",
opacity: "0.7"
},
"preview-poi_highlight": {
color: "#9b044c",
opacity: "0.7"
},
"filler": {
color: "#7300FF",
opacity: "0.9"
},
"preview-filler": {
color: "#2E0066",
opacity: "0.7"
}
}
};
for (const key in Config.localDefaults) {
if(!Object.prototype.hasOwnProperty.call(Config.cachedLocalStorage, key)) {
Config.cachedLocalStorage[key] = Config.localDefaults[key];
}
}
}
const localDefaults = {
downvotedSegments: {},
navigationApiAvailable: null
};
function resetToDefault() {
chrome.storage.sync.set({
...Config.syncDefaults,
userID: Config.config.userID,
minutesSaved: Config.config.minutesSaved,
skipCount: Config.config.skipCount,
sponsorTimesContributed: Config.config.sponsorTimesContributed
});
}
// Sync config
setupConfig();
export default Config;
const Config = new ConfigClass(syncDefaults, localDefaults, migrateOldSyncFormats);
export default Config;

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