Compare commits

...

296 Commits
5.0.4 ... 5.4.2

Author SHA1 Message Date
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
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
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
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
Ajay
7bf17e1746 bump version 2022-12-22 02:20:32 -05:00
Ajay
3f7f671a3b Fix early skips on firefox when seeking while playing 2022-12-22 02:20:19 -05:00
Ajay
f764869cc8 Add another test case 2022-12-19 16:19:01 -05:00
Ajay
2ba5fa6954 bump version 2022-12-19 16:14:41 -05:00
Ajay
35b8a34162 Don't remove trailing end bracket when not starting with bracket 2022-12-19 16:12:51 -05:00
Ajay Ramachandran
3379189ea8 remove serious part of warning message 2022-12-19 13:13:38 -05:00
Ajay Ramachandran
e6be13b583 make warning message nicer 2022-12-19 13:11:03 -05:00
Ajay Ramachandran
ab87afc82b New Crowdin updates (#1580) 2022-12-11 16:59:21 -05:00
Ajay
8798dd29b8 bump version 2022-12-11 16:59:01 -05:00
Ajay
3e3059d79a Fix bar being too long due to time to decimal changing while remaking bar not true 2022-12-11 16:58:40 -05:00
Ajay
16581d39a4 Reverse fast interval to decimal
It doesn't work when there are imported chapters closely or identical to existing chapters. Causes bar to extend too far.
2022-12-11 16:24:53 -05:00
Ajay
3b776991a6 Don't run some chapter init code when not necessary 2022-12-11 15:46:29 -05:00
Ajay
7eb6b3a79d Don't regenerate groups if not needed 2022-12-11 15:20:05 -05:00
Ajay
a5d91c9b57 clarify comment 2022-12-11 14:25:34 -05:00
Ajay
f59665cccb Fix smallest segment cache 2022-12-11 14:21:25 -05:00
Ajay
cf0e91c4ff Use fast time to decimal for non display calculations 2022-12-11 14:10:09 -05:00
Ajay
41a25720d0 Caching for get smallest segment
Hover previews
2022-12-11 13:19:37 -05:00
Ajay
283ec50388 Hide original chapter if similar in name 2022-12-11 12:51:36 -05:00
Ajay
e5794e6685 Fix hover text alignment issue 2022-12-11 12:04:31 -05:00
Ajay
bd3cdb98ac Fix lots of chapters freezing the browser 2022-12-11 11:58:10 -05:00
Ajay
f66d7a9547 Call whitelist check if not still waiting for channel id in window listener 2022-12-09 22:11:57 -05:00
Ajay
7be7b12d52 Generated chapters can now start after 0 seconds, so allow importing them 2022-12-04 21:55:46 -05:00
Ajay Ramachandran
b17cfa4ec2 Merge pull request #1348 from mchangrh/configDiffPlugin
config diff plugin
2022-12-04 15:10:31 -05:00
Ajay Ramachandran
8c185d4b5e Add another key to config diff whitelist 2022-12-04 15:06:16 -05:00
Ajay Ramachandran
ec86d6f99d Merge pull request #1514 from mchangrh/fv-livestream-2
Allow full video labels on livestreams
2022-12-04 15:04:15 -05:00
github-actions[bot]
ffc566c3bc Update Invidious List 2022-11-30 21:46:54 -05:00
Ajay Ramachandran
e7451eca27 Merge pull request #1595 from caneleex/patch/time-mutes
Don't include mutes in time without skips
2022-11-29 18:48:13 -05:00
Ajay Ramachandran
53713cd2e7 Merge pull request #1578 from caneleex/patch/disable-scrolling
Add option to disable scrolling to edit
2022-11-29 16:03:35 -05:00
Ajay
5925d45f74 Add new workaround for improving skipping precision on Firefox 2022-11-26 03:38:48 -05:00
Ajay
43c30bb03d bump version 2022-11-23 23:42:17 -05:00
Ajay
eac2caadce Fix document script sending events when video id not changed 2022-11-23 23:42:06 -05:00
Ajay
8d0a4ec2e6 Fix race condition causing double fetch 2022-11-23 23:37:52 -05:00
Ajay
8b6fb98b3d Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-11-23 23:24:59 -05:00
Ajay
8f13c5b8a5 Disable refetch 2022-11-23 23:24:57 -05:00
Ajay Ramachandran
ec12c1d324 bump version 2022-11-22 17:29:46 -05:00
caneleex
b696902124 why 2022-11-18 20:51:11 +01:00
caneleex
87d1522c41 Don't include mutes in time without skips 2022-11-18 20:50:05 +01:00
Ajay
4447ff3142 Fix issues with mutes ending when highlights start 2022-11-09 12:45:11 -05:00
Ajay
00ef3856ca Fix race condition causing full video label not to display 2022-11-08 13:50:56 -05:00
Ajay
cd7d74fb33 Fix category pill text on new YouTube layout 2022-11-08 13:38:19 -05:00
Ajay
ce3f77ed20 Better key moments check by not importing when no 0 second chapter 2022-11-07 21:15:04 -05:00
Ajay Ramachandran
d347f4e575 bump version 2022-11-06 13:19:56 -05:00
Ajay Ramachandran
1c5802a5e2 New Crowdin updates (#1574) 2022-11-06 13:19:35 -05:00
Ajay Ramachandran
4bc7ce7cd0 Merge pull request #1577 from caneleex/patch/outro-end-time
Don't overwrite endcards time upon submitting
2022-11-06 13:18:14 -05:00
caneleex
3c6989f67d Don't overwrite endcards time upon submitting 2022-11-06 19:15:59 +01:00
caneleex
a1e00b44d5 Add option to disable scrolling to edit 2022-11-06 18:48:42 +01:00
Ajay Ramachandran
b40749717f Merge pull request #1550 from mchangrh/stricter-ts
add noFallThrough, inplicitReturn, update packages
2022-11-04 17:06:36 -04:00
Ajay
4596f3ab0d bump version 2022-11-04 17:04:35 -04:00
mini-bomba
89e87cd74d Don't update the whole segment list on time update (#1569)
Update segment element classes instead.
This probably is more efficient than what we're doing currently.
Also, this seems to fix a bug where the vote confirmation/error msg is removed immediately
2022-11-04 17:02:54 -04:00
Ajay Ramachandran
311c4caf2b New Crowdin updates (#1544) 2022-11-04 17:02:16 -04:00
Ajay
0e0ae9165e Fix segments really close to eachother not skipping
Also combine segments that are closer than skip buffer

Fix #1510
2022-11-04 17:01:23 -04:00
Ajay
ff2cec699f adjust skip to highlight button behavior to attempt to fix issues 2022-11-04 16:18:15 -04:00
Ajay
1775835392 Add hiding skip to highlight
Fix #1530
2022-11-04 16:05:09 -04:00
Ajay
2c5db670a4 Safety on getChapterButton
Fix #1573
2022-11-04 15:44:14 -04:00
Ajay Ramachandran
4b4743f1f7 Merge pull request #1531 from mchangrh/music-progressbar
add YT Music progress bar selector
2022-11-04 15:41:51 -04:00
Ajay Ramachandran
7719ca7eca Merge pull request #1561 from mchangrh/gha-update
bump actions to node 16
2022-11-04 15:40:05 -04:00
Ajay Ramachandran
f4f7df9f2b Merge pull request #1564 from mini-bomba/userinfo-publicID
Use publicID instead of privateID for /userInfo calls
2022-11-04 15:39:44 -04:00
Ajay
95551de09a Fix precise seeking notice offset with hover preview 2022-11-01 14:41:43 -04:00
Ajay Ramachandran
8653059b13 bump version 2022-10-30 22:00:35 -04:00
Ajay
b3afd0403e Add configuration for segment failed to fetch warning 2022-10-30 20:38:48 -04:00
Ajay
6db498ccb1 Fix key moments check not working when multiple videos present 2022-10-30 20:36:05 -04:00
Ajay
ef8c5f58c5 Fix scrubbing bar missing when chapter bar using % widths 2022-10-30 14:49:19 -04:00
Ajay
71998831ee bump version 2022-10-30 13:23:12 -04:00
Ajay
8f19d3e83c Fix segment failed to fetch warning appearing for 404 2022-10-30 13:23:02 -04:00
mini-bomba
ea73a92fb7 Use publicID instead of privateID for /userInfo calls
This should reduce the load on the server a bit, as it will no longer have to compute the publicID for each sponsorblock user.
This also reduces the list of actions that leak the privateID to the server.
2022-10-29 13:20:51 +02:00
Ajay
d68c3659be bump version 2022-10-27 21:47:00 -04:00
Ajay
715bcb6bd3 Added error when segments haven't loaded and improved popup message
Resolves #1553
2022-10-27 21:46:47 -04:00
Ajay
fea8a9a37e Disable virtual time in firefox again 2022-10-27 21:39:06 -04:00
Michael C
01eeb28b60 bump actions to node 16 2022-10-27 03:26:08 -04:00
Michael C
44d4dd54aa return undefined instead of resolving void 2022-10-21 02:41:01 -04:00
Michael C
27bb6045bc make tab open listeners non-async 2022-10-21 02:37:48 -04:00
Michael M. Chang
0610eea53d Update src/popup.ts
Co-authored-by: Ajay Ramachandran <dev@ajay.app>
2022-10-21 01:01:25 -04:00
Michael C
1fcfea9fd5 add noFallThrough, inplicitReturn, update packages 2022-10-20 22:13:51 -04:00
Ajay
aec5845bce Show import button for errors 2022-10-17 09:25:11 -04:00
Ajay
5209c0ea04 Import chapters as chooseACategory if chapters is disabled 2022-10-17 09:23:59 -04:00
Ajay
b52132e311 Open submission men after importing 2022-10-17 08:52:55 -04:00
Ajay
c2e731ef89 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-10-17 08:50:56 -04:00
Ajay
a48269f254 Import short category names too 2022-10-17 08:50:55 -04:00
Ajay Ramachandran
562adb9d55 bump version 2022-10-16 22:41:46 -04:00
Ajay Ramachandran
851ceb553d New translations messages.json (Korean) (#1529) 2022-10-16 22:41:31 -04:00
Ajay
4bd7e9ab34 Fix progress bar with 0px chapters 2022-10-14 18:23:40 -04:00
Michael C
784c1db0c1 add YT Music progress bar selector 2022-10-13 00:55:55 -04:00
Ajay
97fc8174b9 Add flag to disable virtual time 2022-10-12 23:48:20 -04:00
Ajay
9849c34ed3 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-10-12 23:46:02 -04:00
Ajay
56be762686 Add back virtual time to firefox and fix it with playback speed 2022-10-12 23:46:00 -04:00
Ajay Ramachandran
1648e104e1 bump version 2022-10-11 20:57:54 -04:00
Ajay Ramachandran
c4d7c4511e New Crowdin updates (#1511) 2022-10-11 20:57:36 -04:00
Ajay Ramachandran
cd78c46ef8 Merge pull request #1521 from mini-bomba/popup
Update popup on segment updates + some code cleanup
2022-10-11 20:57:21 -04:00
Ajay
758b6f18db update buttons when single time segment is edited 2022-10-11 18:30:53 -04:00
Ajay
6d05b2a849 Set endtime by default for outro 2022-10-11 18:24:52 -04:00
Ajay
4729268083 Reimport chapters if they are found to have changed 2022-10-11 17:59:46 -04:00
mini-bomba
b7a574fc16 Clear segment list & show loading animation in popup on video change
also removed the creatingSegment variable - results in "Start/End Segment Now" correctly updating when using buttons on the controls panel instead
also the "refreshSegments" message no longer sends a response, as we send an update manually now
2022-10-11 18:38:00 +02:00
mini-bomba
c8cbd893f7 Don't hide the popup on video change
also hide the info button if the popup was open when setting up buttons
2022-10-11 16:08:07 +02:00
mini-bomba
11b01fd3dd revert reordering of imports 2022-10-11 15:41:19 +02:00
Ajay
85e3d3bc18 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-10-11 00:08:16 -04:00
Ajay
47ea8cd017 Fix unused import 2022-10-11 00:08:14 -04:00
Ajay Ramachandran
61e78eb668 Merge pull request #1524 from caneleex/patch/full-type-skip
don't append skip button for full video labels
2022-10-11 00:07:38 -04:00
Ajay
5ebd44c0c7 update category pill for react 18 2022-10-11 00:04:02 -04:00
Ajay
9888dcc323 Fix chapter import not working with 0 time 2022-10-10 23:37:48 -04:00
Ajay
49a166a6b2 Fix key moments importing as chapters 2022-10-10 23:34:34 -04:00
caneleex
2bd1271575 don't append skip button for full video labels 2022-10-10 21:21:57 +02:00
Ajay
5d62b11a6d Enable chapters if not enabled after redeem successful 2022-10-10 00:38:09 -04:00
Ajay
f4cac58322 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-10-09 16:44:55 -04:00
Ajay
4a532e751c Add class for other extensions when displaying non chapter title 2022-10-09 16:44:53 -04:00
mini-bomba
4a3b33cb85 Dedupe & clean up popup -> content script communication code 2022-10-08 19:07:58 +02:00
mini-bomba
78e9f41854 Update popup when new segments are fetched 2022-10-08 18:34:20 +02:00
mini-bomba
48cfee57b7 Return null on fails in getYouTubeVideoID and add type annotations to videoIDChange 2022-10-08 16:40:48 +02:00
Ajay Ramachandran
b2ef9e5d6e Merge pull request #1518 from mchangrh/interface-delimiter
Interface delimiter
2022-10-08 10:07:58 -04:00
Ajay Ramachandran
c42ebce6e3 Merge pull request #1520 from mini-bomba/fix/empty-unsubmitted-video
Remove the unsubmittedSegments entry when removing the last segment
2022-10-08 10:07:14 -04:00
mini-bomba
bc1d6006eb Remove the unsubmittedSegments entry when removing the last segment 2022-10-08 13:10:25 +02:00
Ajay Ramachandran
727d925879 Merge pull request #1519 from ajayyy/ci/oss_attribution
Update OSS Attribution
2022-10-07 22:56:46 -04:00
github-actions[bot]
5d48d9ac74 Update OSS Attribution 2022-10-08 02:55:47 +00:00
Ajay Ramachandran
83ea183f58 Merge pull request #1517 from mchangrh/react-18
React 18
2022-10-07 22:54:51 -04:00
Michael C
a098858035 force delimiters to follow semi 2022-10-07 20:51:58 -04:00
Michael C
81e85c19ae fix typings and revert spacing 2022-10-07 20:06:03 -04:00
Michael C
fda4a03541 fix more components 2022-10-07 19:51:05 -04:00
Michael C
55c84662c0 add some changes that are rendering properly 2022-10-07 19:28:29 -04:00
Ajay Ramachandran
5c9e06468e Merge pull request #1515 from mchangrh/dependency-update
update dependencies (skips react (again))
2022-10-07 17:24:58 -04:00
Ajay
a3d38c57d7 Fix chapter icon with ytp big mode 2022-10-07 17:20:19 -04:00
Michael C
7ec09dd385 update dependencies (skips react) 2022-10-07 17:19:36 -04:00
Michael C
bf8003891c add configDiffPlugin 2022-10-07 17:12:16 -04:00
Michael C
adb8c4c5f9 only allow full video labels on livestreams 2022-10-07 16:37:10 -04:00
Ajay
bb7f069254 Only check import duplicates against unsubmitted segments 2022-10-07 12:22:39 -04:00
Ajay
61fc1d2ed3 Fix zero start time breaking 2022-10-07 12:19:42 -04:00
Ajay
dabc63af73 Deletew all custom chapter bars we don't know about when clearing preview bar 2022-10-07 12:02:14 -04:00
Ajay
08181c1d5f Clear bote buttons when clearing preview bar 2022-10-07 11:59:56 -04:00
Ajay
03cd1b535b Count skips for chapters when viewed 2022-10-05 15:39:51 -04:00
Ajay
8cc3843ada Run chapters clear when preview bar cleared 2022-10-05 02:19:32 -04:00
Ajay
c4701092f4 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-10-05 02:15:32 -04:00
Ajay
63ef9b44c7 Make sure chapters are invalid if regex fails 2022-10-05 02:15:31 -04:00
Ajay Ramachandran
d564742339 bump version 2022-10-05 01:42:04 -04:00
Ajay Ramachandran
6477e4c1f8 New Crowdin updates (#1495) 2022-10-05 01:41:15 -04:00
Ajay Ramachandran
eb8a0ae307 Merge pull request #1498 from mchangrh/1496-fix
fix #1496
2022-10-05 01:02:37 -04:00
Ajay
5296c437cc Make the clip ignore less sketchy 2022-10-05 00:55:19 -04:00
Ajay
36efe139ba Fix wait for element not working on embed, causing segments not to load
Fix #1497
2022-10-04 22:08:19 -04:00
Ajay
eaabd3149e Fixing stacking timeout issue 2022-10-04 17:50:23 -04:00
Ajay
6166ab3006 Fix spamming user info on options page and improve popup values 2022-10-03 16:59:49 -04:00
Ajay
f1498d51fa Disable show info message if chapter enabled 2022-10-02 21:45:00 -04:00
Ajay
3aabc0d051 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-09-30 21:00:46 -04:00
Ajay
28904935da Remove chance from chapter tooltip 2022-09-30 21:00:45 -04:00
Ajay Ramachandran
35d83d257c bump version 2022-09-30 14:51:43 -04:00
Ajay Ramachandran
92e078b87c Merge pull request #1501 from mchangrh/fix-vip-lockcategories
fix VIP LockCategories
2022-09-29 00:01:15 -04:00
Michael C
75accad06e locked colour is important 2022-09-28 18:49:45 -04:00
Ajay
a99823d487 Fix import menu hidden with no segments
Fix #1499
2022-09-28 15:17:05 -04:00
Ajay
1ba1595d0e Swap inspect and preview back 2022-09-27 14:47:11 -04:00
Michael C
8f7408d815 fix #1496
- force return bad videoID on clip
- don't createbuttons on video ready, updateVisibility with more checks
- don't switch to falsy videoIDs if already available
2022-09-27 00:59:24 -04:00
Ajay
3337fa04b9 bump version 2022-09-24 22:48:08 -04:00
Ajay Ramachandran
1a0dd19cf0 Merge pull request #1450 from AlecRust/refine-popup
Tidy/simplify popup
2022-09-24 22:46:40 -04:00
Ajay
b45434b374 i18n 2022-09-24 22:46:10 -04:00
Ajay Ramachandran
a214fd416e Merge pull request #1483 from mchangrh/x-overflow
wrap popup in #secondary-inner
2022-09-24 22:42:34 -04:00
Ajay Ramachandran
38266be174 New Crowdin updates (#1489) 2022-09-24 22:41:08 -04:00
FlorianZahn
f96419d14c popup votebuttons disappear fix (#1493)
Co-authored-by: Ajay <dev@ajay.app>
2022-09-24 22:40:56 -04:00
Ajay
280127c9af Add tooltip to skip segment button 2022-09-24 22:33:12 -04:00
Ajay
da35e889f2 Add option to disable segment names beside timestamp in video player 2022-09-24 22:29:07 -04:00
Ajay
bb8975e93a Swap preview and inspect 2022-09-24 21:17:57 -04:00
Ajay
36e8300427 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-09-24 00:39:30 -04:00
Ajay
fc160e1d09 Fix chapter suggestions disappearing on click 2022-09-24 00:39:28 -04:00
Ajay Ramachandran
1ace5ea50c fix broken funding file 2022-09-23 17:13:28 -04:00
Ajay Ramachandran
911ff9b784 update links 2022-09-23 17:11:56 -04:00
Ajay
e1688c3f58 reset custom chapters bar to null when deleting 2022-09-23 11:04:55 -04:00
Ajay
e11a320c3f Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-09-23 11:01:03 -04:00
Ajay
0d6a40b9fc Fix custom chapter bar sometimes sticking around 2022-09-23 11:01:01 -04:00
Alec Rust
bbab712a79 Revert 50/50 columns, improve width when editing username 2022-09-23 09:32:49 +01:00
Alec Rust
d9f03a62ee Tidy/simplify popup 2022-09-23 09:32:49 +01:00
Ajay Ramachandran
577994cc95 Merge pull request #1490 from mchangrh/private-userid
update UserID to be Private UserID
2022-09-23 01:57:28 -04:00
Michael C
d573dabf15 update UserID to be Private UserID 2022-09-23 01:42:00 -04:00
Ajay
4c903456ff Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-09-23 01:24:28 -04:00
Ajay
6d1a29019b Default to chapters tab if no normal segments 2022-09-23 01:24:27 -04:00
Ajay Ramachandran
a91025ac23 Merge pull request #1454 from AlecRust/start-stop-segment-copy
Improve copy of start/end segment button
2022-09-23 01:17:50 -04:00
Ajay
ca931f18f6 Warning on filler description 2022-09-23 01:13:12 -04:00
Michael C
1d2122c2df wrap popup in #secondary-inner 2022-09-19 02:18:56 -04:00
Alec Rust
5b080874f2 Improve copy of start/end segment button 2022-08-22 10:51:02 +01:00
131 changed files with 11814 additions and 8007 deletions

View File

@@ -23,7 +23,8 @@
"@typescript-eslint/no-unused-vars": "error",
"no-self-assign": "off",
"@typescript-eslint/no-empty-interface": "off",
"react/prop-types": [2, { "ignore": ["children"] }]
"react/prop-types": [2, { "ignore": ["children"] }],
"@typescript-eslint/member-delimiter-style": "warn"
},
"settings": {
"react": {

2
.github/FUNDING.yml vendored
View File

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

View File

@@ -10,8 +10,8 @@ jobs:
steps:
# Initialization
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
@@ -25,7 +25,7 @@ jobs:
# Create Chrome artifacts
- name: Create Chrome artifacts
run: npm run build:chrome
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v3
with:
name: ChromeExtension
path: dist
@@ -37,7 +37,7 @@ jobs:
# Create Firefox artifacts
- name: Create Firefox artifacts
run: npm run build:firefox
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v3
with:
name: FirefoxExtension
path: dist
@@ -48,7 +48,7 @@ jobs:
# 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@v2
- uses: actions/upload-artifact@v3
with:
name: ChromeExtensionBeta
path: dist
@@ -58,7 +58,7 @@ jobs:
- name: Create Firefox Beta artifacts
run: npm run build:firefox -- --env stream=beta
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v3
with:
name: FirefoxExtensionBeta
path: dist

View File

@@ -12,8 +12,8 @@ jobs:
steps:
# Initialization
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
@@ -23,7 +23,7 @@ jobs:
# Create Chrome artifacts
- name: Create Chrome artifacts
run: npm run build:chrome
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v3
with:
name: ChromeExtension
path: dist
@@ -34,7 +34,7 @@ jobs:
# Create Firefox artifacts
- name: Create Firefox artifacts
run: npm run build:firefox
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v3
with:
name: FirefoxExtension
path: dist
@@ -44,7 +44,7 @@ jobs:
# 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@v2
- uses: actions/upload-artifact@v3
with:
name: ChromeExtensionBeta
path: dist
@@ -55,7 +55,7 @@ jobs:
# Create Safari artifacts
- name: Create Safari artifacts
run: npm run build:safari
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v3
with:
name: SafariExtension
path: dist
@@ -66,7 +66,7 @@ jobs:
run: rm -rf ./dist
- name: Create Edge artifacts
run: npm run build:edge
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v3
with:
name: EdgeExtension
path: dist
@@ -75,35 +75,35 @@ jobs:
# Upload each release asset
- name: Upload ChromeExtension to release
uses: Shopify/upload-to-release@master
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
args: builds/ChromeExtension.zip
name: ChromeExtension.zip
path: ./builds/ChromeExtension.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload ChromeExtensionBeta to release
uses: Shopify/upload-to-release@master
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
args: builds/ChromeExtensionBeta.zip
name: ChromeExtensionBeta.zip
path: ./builds/ChromeExtensionBeta.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload FirefoxExtension to release
uses: Shopify/upload-to-release@master
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
args: builds/FirefoxExtension.zip
name: FirefoxExtension.zip
path: ./builds/FirefoxExtension.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload SafariExtension to release
uses: Shopify/upload-to-release@master
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
args: builds/SafariExtension.zip
name: SafariExtension.zip
path: ./builds/SafariExtension.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload EdgeExtension to release
uses: Shopify/upload-to-release@master
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
args: builds/EdgeExtension.zip
name: EdgeExtension.zip
@@ -113,7 +113,7 @@ jobs:
# Firefox Beta
- name: Create Firefox Beta artifacts
run: npm run build:firefox -- --env stream=beta
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v3
with:
name: FirefoxExtensionBeta
path: dist
@@ -130,13 +130,13 @@ jobs:
run: sudo apt-get install rename
- name: Rename signed file
run: cd ./web-ext-artifacts ; rename 's/.*/FirefoxSignedInstaller.xpi/' *
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v3
with:
name: FirefoxExtensionSigned.xpi
path: ./web-ext-artifacts/FirefoxSignedInstaller.xpi
- name: Upload FirefoxSignedInstaller.xpi to release
uses: Shopify/upload-to-release@master
uses: Shopify/upload-to-release@07611424e04f1475ddf550e1c0dd650b867d5467
with:
args: web-ext-artifacts/FirefoxSignedInstaller.xpi
name: FirefoxSignedInstaller.xpi

View File

@@ -9,8 +9,8 @@ jobs:
steps:
# Initialization
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci

View File

@@ -12,9 +12,8 @@ jobs:
update-oss:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install and generate attribution
@@ -23,9 +22,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@923ad837f191474af6b1721408744feb989a4c27
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

@@ -8,8 +8,7 @@ jobs:
check-list:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Download instance list
run: |
wget https://api.invidious.io/instances.json -O ci/data.json
@@ -19,7 +18,8 @@ jobs:
run: npm run ci:invidious
- name: Create pull request to update list
uses: peter-evans/create-pull-request@923ad837f191474af6b1721408744feb989a4c27
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>

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.cthd.icu","inv.riverside.rocks","invidio.xamh.de","invidious.kavin.rocks","invidious.namazso.eu","invidious.osi.kr","invidious.snopyta.org","vid.puffyan.us","yewtu.be","youtube.076.ne.jp","yt.artemislena.eu"]
["inv.bp.projectsegfau.lt","inv.odyssey346.dev","inv.riverside.rocks","inv.vern.cc","invidious.baczek.me","invidious.epicsite.xyz","invidious.esmailelbob.xyz","invidious.flokinet.to","invidious.lidarshield.cloud","invidious.nerdvpn.de","invidious.privacydev.net","invidious.snopyta.org","invidious.tiekoetter.com","invidious.weblibre.org","iv.melmac.space","vid.puffyan.us","watch.thekitty.zone","y.com.sb","yewtu.be","yt.artemislena.eu","yt.funami.tech","yt.oelrichsgarcia.de"]

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

@@ -1,7 +1,7 @@
{
"name": "__MSG_fullName__",
"short_name": "SponsorBlock",
"version": "5.0.4",
"version": "5.4.2",
"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": [
@@ -69,15 +68,23 @@
"icons/PlayerInfoIconSponsorBlocker.svg",
"icons/PlayerDeleteIconSponsorBlocker.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 +92,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 +107,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

7651
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": {
"react": "^17.0.2",
"react-dom": "^17.0.2"
"@ajayyy/maze-utils": "1.1.22",
"content-scripts-register-polyfill": "^4.0.2",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@types/chrome": "^0.0.193",
"@types/firefox-webext-browser": "^94.0.1",
"@types/jest": "^28.1.6",
"@types/react": "^17.0.47",
"@types/react-dom": "^17.0.17",
"@types/selenium-webdriver": "^4.1.2",
"@types/wicg-mediasession": "^1.1.3",
"@typescript-eslint/eslint-plugin": "^5.31.0",
"@typescript-eslint/parser": "^5.31.0",
"chromedriver": "^103.0.0",
"concurrently": "^7.3.0",
"@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.54.1",
"@typescript-eslint/parser": "^5.54.1",
"chromedriver": "^110.0.0",
"concurrently": "^7.6.0",
"copy-webpack-plugin": "^11.0.0",
"eslint": "^8.20.0",
"eslint-plugin-react": "^7.30.1",
"fork-ts-checker-webpack-plugin": "^7.2.13",
"jest": "^28.1.3",
"jest-environment-jsdom": "^28.1.0",
"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.3.1",
"speed-measure-webpack-plugin": "^1.5.0",
"ts-jest": "^28.0.7",
"ts-loader": "^9.3.1",
"selenium-webdriver": "^4.8.1",
"ts-jest": "^29.0.5",
"ts-loader": "^9.4.2",
"ts-node": "^10.9.1",
"typescript": "4.7",
"web-ext": "^7.1.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"
},

View File

@@ -25,6 +25,12 @@
"Segments": {
"message": "أجزاء"
},
"SegmentsCap": {
"message": "أجزاء من المقطع"
},
"Chapters": {
"message": "الفصول"
},
"upvoteButtonInfo": {
"message": "التصويت على هذا الإرسال"
},
@@ -112,8 +118,11 @@
"closePopup": {
"message": "إغلاق النافذة المنبثقة"
},
"SubmitTimes": {
"message": "إرسال الأجزاء"
"closeIcon": {
"message": "أيقونة الإغلاق"
},
"sortSegments": {
"message": "ترتيب الأجزاء"
},
"submitCheck": {
"message": "هل أنت متأكد أنك تريد إرسال هذا؟"
@@ -149,9 +158,6 @@
"clearTimesButton": {
"message": "مسح الأوقات"
},
"submitTimesButton": {
"message": "إرسال الأوقات"
},
"publicStats": {
"message": "يستخدم هذا في صفحة الإحصائيات العامة لإظهار مقدار مساهمتك. قم برؤيتها"
},
@@ -318,12 +324,24 @@
"add": {
"message": "أضِف"
},
"showUploadButton": {
"message": "إظهار زر الرفع"
},
"save": {
"message": "حفظ"
},
"reset": {
"message": "إعادة تعيين"
},
"areYouSureReset": {
"message": "هل أنت متيقِّن من رغبتك في إعادة تعيين هذا؟"
},
"mobileUpdateInfo": {
"message": "m.youtube.com مدعوم الآن"
},
"exportOptions": {
"message": "إستيراد/تصدير جميع الإعدادات"
},
"exportOptionsCopy": {
"message": "تعديل/نسخ"
},
@@ -391,6 +409,9 @@
"category_preview": {
"message": "معاينة/خلاصة"
},
"category_preview_guideline2": {
"message": "موجز الفيديو السابق"
},
"category_filler_short": {
"message": "حشو"
},
@@ -403,6 +424,15 @@
"category_poi_highlight": {
"message": "ابراز"
},
"category_poi_highlight_guideline3": {
"message": "يمكن التخطي إلى عنوان المقطع أو الصورة المصغرة"
},
"category_chapter": {
"message": "فصل"
},
"category_chapter_guideline1": {
"message": "لا تذكر أسماء العلامة التجارية الراعية"
},
"category_livestream_messages_short": {
"message": "قراءة الرسالة"
},
@@ -459,6 +489,10 @@
"bracketEnd": {
"message": "(النهاية)"
},
"End": {
"message": "النهاية",
"description": "Button that skips to the end of a segment"
},
"hiddenDueToDownvote": {
"message": "مخفي: تصويت سلبي"
},
@@ -468,15 +502,31 @@
"manuallyHidden": {
"message": "مخفي يدوياً"
},
"acceptPermission": {
"message": "قَبُول الإذن"
},
"permissionRequestSuccess": {
"message": "نجح طلب الإذن!"
},
"permissionRequestFailed": {
"message": "فشل طلب الإذن ، هل نقرت على رفض؟"
},
"adblockerIssueWhitelist": {
"message": "إذا كنت غير قادر على حل هذا، عطل إعداد \"فرض قناة التحقق قبل التخطي\"، لأن SponsorBlock غير قادر على استرداد معلومات القناة لهذا المقطع"
},
"forceChannelCheck": {
"message": "إجبار القناة على التحقق قبل التخطي"
},
"downvoteDescription": {
"message": "خاطئ/التوقيت غير صحيح"
},
"incorrectVote": {
"message": "غير صحيح"
},
"harmfulVote": {
"message": "ضار",
"description": "Used for chapter segments when the text is harmful/offensive to remove it faster"
},
"incorrectCategory": {
"message": "تغيير الفئة"
},
@@ -530,6 +580,9 @@
"helpPageReviewOptions": {
"message": "يرجى مراجعة الخيارات أدناه"
},
"helpPageFeatureDisclaimer": {
"message": "العديد من الميزات معطلة بشكل تلقائي. إذا كنت ترغب في تخطي المقدمة و الخاتمة و استخدام الدعوات و إلخ. يمكنك تمكين هذه الميزات بالأسفل. يمكنك أيضًا إخفاء و إظهار عناصر واجهة المستخدم."
},
"helpPageHowSkippingWorks": {
"message": "كيف يعمل التخطي"
},
@@ -554,6 +607,9 @@
"helpPageSourceCode": {
"message": "أين يمكنني الحصول على شفرة المصدر؟"
},
"Credits": {
"message": "المساهمون في العمل"
},
"LearnMore": {
"message": "معرفة المزيد"
},
@@ -578,6 +634,9 @@
"hideSegment": {
"message": "إخفاء المقطع"
},
"playChapter": {
"message": "شغل الفصل"
},
"SponsorTimeEditScrollNewFeature": {
"message": "استخدم عجلة الماوس أثناء التمرير فوق مربع التعديل لضبط الوقت بسرعة. يمكن استخدام مجموعات مفتاح ctrl أو Shift لضبط التغييرات."
},
@@ -637,5 +696,51 @@
},
"confirmResetToDefault": {
"message": "هل أنت متأكد من أنك تريد إعادة تعيين كافة الإعدادات إلى حالتها الافتراضية؟ لا يمكنك التراجع عن ذلك."
},
"Import": {
"message": "استورد",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
},
"chooseACountry": {
"message": "اختر البلد"
},
"noDiscount": {
"message": "أنت لست مؤهلاً للحصول على خصم"
},
"discountLink": {
"message": "رابط الخصم (انظر إلى السعر الوردي)"
},
"selectYourCountry": {
"message": "اختر بلدك"
},
"patreonSignIn": {
"message": "سجل مع بيتريون (Patreon)"
},
"unsubmittedSegmentCounts": {
"message": "لديك حاليا {0} على {1}",
"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*"
},
"showUnsubmittedSegments": {
"message": "أظهر الأجزاء",
"description": "Show/hide button for the unsubmitted segments list"
},
"videoID": {
"message": "معرف المقطع",
"description": "Header of the unsubmitted segments list"
},
"actions": {
"message": "قائمة الأوامر",
"description": "Header of the unsubmitted segments list"
},
"exportSegmentsAsURL": {
"message": "شارك كرابط"
}
}

View File

@@ -35,6 +35,9 @@
"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": "Одобряване на това предложение"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Възникна грешка с връзката. Код на грешката: "
},
"segmentsStillLoading": {
"message": "Сегментите все още се зареждат..."
},
"clearTimes": {
"message": "Изчистване на сегментите"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Затваряне на прозореца"
},
"SubmitTimes": {
"message": зпращане на сегментите"
"closeIcon": {
"message": кона - затваряне"
},
"OpenSubmissionMenu": {
"message": "Отваряне на менюто за изпращане"
},
"sortSegments": {
"message": "Сортиране на сегментите"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Изчистване на времената"
},
"submitTimesButton": {
"message": "Изпращане на времената"
},
"publicStats": {
"message": "Това се използва на страницата с публичната статистика, за да покаже колко сте допринесли. Вижте го"
},
@@ -415,16 +421,16 @@
"message": "Проверете status.sponsor.ajay.app за състоянието на сървъра."
},
"changeUserID": {
"message": "Импортиране/експортиране на вашия UserID"
"message": "Импортиране/експортиране на вашия личен UserID"
},
"whatChangeUserID": {
"message": "Това трябва да се пази в тайна. То е като парола и не трябва да се споделя с никого. Ако някой го има, може да се представи за вас. Ако търсите своя публичен потребителски идентификатор, щракнете върху иконата на клипборда в изскачащия прозорец."
},
"setUserID": {
"message": "Задаване на UserID"
"message": "Задаване на личен UserID"
},
"userIDChangeWarning": {
"message": "Внимание: Промяната на UserID е постоянна. Наистина ли искате да направите това? Не забравяйте да архивирате стария си за всеки случай."
"message": "Внимание: Промяната на личния UserID е постоянна. Наистина ли искате да направите това? Не забравяйте да архивирате стария си за всеки случай."
},
"createdBy": {
"message": "Създаден от"
@@ -433,7 +439,7 @@
"message": "Поддръжка на YouTube-сайтове на трети страни"
},
"supportOtherSitesDescription": {
"message": "Поддръжка на клиенти за YouTube на трети страни. За да активирате поддръжката, трябва да приемете допълнителните разрешения. Това НЕ работи в режим инкогнито в Chrome и други варианти на Chromium.",
"message": "Поддръжка на клиенти на трети страни за YouTube. За да активирате поддръжката, трябва да приемете допълнителните разрешения.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -524,7 +530,7 @@
"message": "Зареждане от файл"
},
"whatExportOptions": {
"message": "Това е цялата ви конфигурация в JSON. Това включва вашия userID, така че се уверете, че споделяте това разумно."
"message": "Това е цялата ви конфигурация в JSON. Това включва вашия личен userID, така че се уверете, че споделяте това разумно."
},
"setOptions": {
"message": "Задаване на опции"
@@ -689,7 +695,7 @@
"message": "Пълнеж/Шеги"
},
"category_filler_description": {
"message": "Съпътстващи сцени, добавени само за пълнеж или хумор, които не са необходими за разбирането на основното съдържание на видеоклипа. Това не трябва да включва сегменти, предоставящи контекст или справочни данни."
"message": "Съпътстващи сцени, добавени само за пълнеж или хумор, които не са необходими за разбирането на основното съдържание на видеоклипа. Това не трябва да включва сегменти, предоставящи контекст или справочни данни. Това е много агресивна категория, предназначена за случаите, когато не сте в настроение за „забавление“."
},
"category_filler_short": {
"message": "Пълнеж"
@@ -791,6 +797,10 @@
"message": "Показване на икона, когато видеоклипът е изцяло реклама",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Показване на етикети на миниатюрите на видеоклиповете",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Цвят на неизпратен сегмент",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -933,7 +943,7 @@
"message": "Скриване завинаги"
},
"warningChatInfo": {
"message": "Забелязахме, че правите някои често срещани грешки, които не са злонамерени"
"message": "Забелязахме, че допускате някои често срещани грешки. Оценяваме високо досегашната ви работа, но тук се стремим към съвършенство, така че дори и много малките грешки са от значение :)"
},
"warningTitle": {
"message": "Имате предупреждение"
@@ -1046,6 +1056,12 @@
"hideSegment": {
"message": "Скриване на сегмента"
},
"skipSegment": {
"message": "Пропускане на сегмент"
},
"playChapter": {
"message": "Пускане на главата"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Използвайте колелото на мишката, докато държите курсора върху полето за редактиране, за да коригирате бързо времето. Комбинации с клавиша ctrl или shift могат да се използват за фина настройка на промените."
},
@@ -1140,10 +1156,6 @@
"selectYourCountry": {
"message": "Изберете вашата държава"
},
"alreadyDonated": {
"message": "Ако сте дарили някаква сума преди, можете да осребрите безплатен достъп чрез имейл:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Ако не можете да си позволите да закупите лиценз, щракнете {тук}, за да видите дали отговаряте на условията за отстъпка",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1163,17 +1175,6 @@
"enterLicenseKey": {
"message": "Въведете лицензния ключ"
},
"chaptersPage1": {
"message": "Функцията за групови глави на SponsorBlock е достъпна само за хора, закупили лиценз, или за хора, на които е предоставен безплатен достъп поради техния минал принос"
},
"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"
},
"unsubmittedSegmentCounts": {
"message": "В момента имате {0} в {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1228,5 +1229,11 @@
},
"exportSegmentsAsURL": {
"message": "Споделяне като URL"
},
"segmentFetchFailureWarning": {
"message": "Внимание: сървърът все още не е отговорил със сегменти. В действителност може да има вече изпратени сегменти в този видеоклип, но просто не сте ги получили поради проблеми със сървъра."
},
"allowScrollingToEdit": {
"message": "Разрешаване на превъртане за редактиране на времената"
}
}

View File

@@ -25,6 +25,19 @@
"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": "এই জমাটিকে সমর্থন করুন"
},
@@ -103,6 +116,9 @@
"connectionError": {
"message": "একটি সংযোগ ত্রুটি ঘটেছে. ভুল সংকেত: "
},
"segmentsStillLoading": {
"message": "সেগমেন্ট এখনো লোড হচ্ছে..."
},
"clearTimes": {
"message": "বিভাগগুলি পরিষ্কার করুন"
},
@@ -112,8 +128,14 @@
"closePopup": {
"message": "পপআপ বন্ধ করুন"
},
"SubmitTimes": {
"message": "সেগমেন্ট জমা দিন"
"closeIcon": {
"message": "বন্ধ করার চিহ্ন"
},
"OpenSubmissionMenu": {
"message": "সাবমিশন মেন্যু খুলুন"
},
"sortSegments": {
"message": "সংক্ষিপ্ত অংশ"
},
"submitCheck": {
"message": "আপনি কি এটি জমা দেওয়ার বিষয়ে নিশ্চিত?"
@@ -149,9 +171,6 @@
"clearTimesButton": {
"message": "সময় মুছুন"
},
"submitTimesButton": {
"message": "সময় জমা দিন"
},
"publicStats": {
"message": "আপনি কতটা অবদান রেখেছেন তা দেখানোর জন্য এটি সর্বজনীন পরিসংখ্যান পৃষ্ঠায় ব্যবহার করা হয়। এটা দেখ"
},
@@ -233,12 +252,21 @@
"whatRefetchWhenNotFound": {
"message": "যদি ভিডিওটি নতুন হয়, এবং কোন অংশ পাওয়া না যায়, আপনার দেখার সময় কয়েক মিনিট পর পরই এটি তথ্য আনতে থাকবে।"
},
"enableShowCategoryWithoutPermission": {
"message": "জমার অনুমতি ছাড়াই বিভাগসমূহকে জমা মেনুতে দেখান"
},
"whatShowCategoryWithoutPermission": {
"message": "নূন্যতম খ্যাতি প্রয়োজনীয়তার কারণে কিছু বিভাগ জমা দিতে অনুমতি প্রয়োজন"
},
"showNotice": {
"message": "নোটিশ পুনরায় প্রদর্শন করুন"
},
"showSkipNotice": {
"message": "একটি অংশ এড়ানোর পরে নোটিস প্রদর্শন করুন"
},
"showCategoryGuidelines": {
"message": "বিভাগের সাহায্য দেখান"
},
"noticeVisibilityMode0": {
"message": "পূর্ণ আকারের স্কিপ নোটিস"
},
@@ -286,6 +314,14 @@
"message": "সেগমেন্ট জমা দিন",
"description": "Keybind label"
},
"nextChapterKeybind": {
"message": "পরবর্তী অধ্যায়",
"description": "Keybind label"
},
"previousChapterKeybind": {
"message": "পূর্ববর্তী অধ্যায়",
"description": "Keybind label"
},
"keybindDescription": {
"message": "এটি টাইপ করে একটি কী নির্বাচন করুন এবং আপনি যে কোনও সংশোধক কীগুলি ব্যবহার করতে চান তা চয়ন করুন।"
},
@@ -385,16 +421,16 @@
"message": "সার্ভারের স্ট্যাটাস এর জন্য status.sponsor.ajay.app দেখুন করুন।"
},
"changeUserID": {
"message": "আপনার ইউজার আইডি ইম্পোর্ট/এক্সপোর্ট করুন"
"message": "আপনার ব্যক্তিগত ব্যবহারকার আইডি ইম্পোর্ট/এক্সপোর্ট করুন"
},
"whatChangeUserID": {
"message": "এটি ব্যক্তিগত রাখা উচিত। এটি একটি পাসওয়ার্ডের মতো এবং কারও সাথে ভাগ করা উচিত নয়। কারও যদি এটি থাকে তবে তারা আপনার ছদ্মবেশ ধারণ করতে পারে। আপনি যদি আপনার পাবলিক ইউজারআইডি খুঁজছেন তবে পপআপে ক্লিপবোর্ড আইকনটি ক্লিক করুন।"
},
"setUserID": {
"message": "ইউজার আইডি দিন"
"message": "ব্যক্তিগত ব্যবহারকার আইডি সেট করুন"
},
"userIDChangeWarning": {
"message": "সতর্কতা: ইউজারআইডি পরিবর্তন করা চিরস্থায়ী। আপনি কি নিশ্চিত যে আপনি এটি করত চান? আপনার পুরানোটিকে সাবধানতার সার্থে ব্যাকআপ করার বিষয়টি নিশ্চিত করুন।"
"message": "সতর্কতা: ব্যক্তিগত ব্যবহারকারী আইডি পরিবর্তন চিরস্থাী। আপনি কি নিশ্চিত যে আপনি এটি করত চান? এক্ষেত্রে আপনার পুরাতন আইডির ব্যাকআপ নিশ্চিত করুন। "
},
"createdBy": {
"message": "সৃষ্টি করেছেন"
@@ -403,7 +439,7 @@
"message": "এটি ৩য় পক্ষের ইউটইউব সাইট সাপোর্ট করে"
},
"supportOtherSitesDescription": {
"message": "তৃতীয় পক্ষের ইউটিউব ক্লায়েন্টদের সমর্থন করুন। সমর্থন সক্ষম করতে, আপনাকে অবশ্যই অতিরিক্ত অনুমতিগুলি গ্রহণ করতে হবে। এটি ক্রোম এবং অন্যান্য ক্রোমিয়াম ভেরিয়েন্টগুলিতে ছদ্মবেশে কাজ করে না।",
"message": "তৃতী পক্ষ YouTube ক্লােন্ট সমর্থন করে। এটি চালু করার জন্য আপনাকে কিছু অতিরিক্ত পারমিশনে সম্মতি দিতে হবে।",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -439,6 +475,9 @@
"minDurationDescription": {
"message": "সেট করা মান (সেকেন্ডে) থেকে ছোট সেগমেন্টগুলি প্লেয়ারে এড়িয়ে যাওয়া হবে বা দেখানো হবে না"
},
"enableManualSkipOnFullVideo": {
"message": "সম্পূর্ণ ভিডিওর লেবেল যুক্ত থাকলে ম্যানুয়াল স্কিপ দেখান"
},
"skipNoticeDuration": {
"message": "নোটিশ প্রদর্শন করার দৈর্ঘ্য (সেকেন্ড):"
},
@@ -487,9 +526,6 @@
"exportOptionsUpload": {
"message": "ফাইল থেকে লোড করুন"
},
"whatExportOptions": {
"message": "এটি আপনার সম্পূর্ণ কনফিগারেশন এতে আপনার ইউজারআইডি অন্তর্ভুক্ত রয়েছে, তাই বিজ্ঞতার সাথে শেয়ার করতে ভুলবেন না।."
},
"setOptions": {
"message": "অপশন সেট করুন"
},
@@ -542,12 +578,19 @@
"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_selfpromo": {
"message": "বিনা অর্থপ্রাপ্ত/স্ব-প্রচার"
},
@@ -582,6 +625,9 @@
"category_intro_short": {
"message": "ইন্টারমিশন"
},
"category_intro_guideline1": {
"message": "মূল কনটেন্ট ব্যতীত ব্যবধান"
},
"category_outro": {
"message": "এন্ডকার্ডস/ক্রেডিট"
},
@@ -591,12 +637,12 @@
"category_preview": {
"message": "প্রিভিউ/রিক্যাপ"
},
"category_preview_guideline2": {
"message": "আগের ভিডিওর রিক্যাপ"
},
"category_filler": {
"message": "ফিলার ট্যানজেন্ট/জোকস"
},
"category_filler_description": {
"message": "স্পর্শকাতর দৃশ্য যেগুলি কেবল ফিলার বা হাস্যরসের জন্য যুক্ত হয়েছে যা ভিডিওর মূল বিষয়বস্তু বোঝার জন্য প্রয়োজন হয় না। এর মধ্যে প্রসঙ্গ বা পটভূমির বিশদ সরবরাহকারী বিভাগগুলি অন্তর্ভুক্ত করা উচিত নয়।"
},
"category_filler_short": {
"message": "ফিলার"
},
@@ -615,6 +661,9 @@
"category_poi_highlight_description": {
"message": "ভিডিওর অংশটি যা বেশিরভাগ লোকেরা খুঁজছেন। \"ভিডিওটি x এ শুরু হয়\" মন্তব্যের মতো।"
},
"category_chapter": {
"message": "অধ্যায়"
},
"category_livestream_messages": {
"message": "লাইভস্ট্রিম: অনুদান/বার্তা পাঠ"
},
@@ -645,6 +694,9 @@
"showOverlay_full": {
"message": "লেবেল দেখান"
},
"showOverlay_chapter": {
"message": "অধ্যায়গুলো দেখান"
},
"autoSkipOnMusicVideos": {
"message": "যখন অ-সংগীত বিভাগ থাকে তখন স্বয়ংক্রিয়ভাবে সমস্ত বিভাগগুলি এড়িয়ে যান"
},
@@ -700,6 +752,10 @@
"bracketEnd": {
"message": "(শেষ)"
},
"End": {
"message": "সমাপ্ত",
"description": "Button that skips to the end of a segment"
},
"hiddenDueToDownvote": {
"message": "লুক্কায়িতঃ ডাউনভোট"
},
@@ -737,6 +793,13 @@
"downvoteDescription": {
"message": "সময় ভুল দেওয়া হয়েছে"
},
"incorrectVote": {
"message": "সঠিক নয়"
},
"harmfulVote": {
"message": "ক্ষতিকর",
"description": "Used for chapter segments when the text is harmful/offensive to remove it faster"
},
"incorrectCategory": {
"message": "বিভাগ পরিবর্তন করুন"
},
@@ -779,6 +842,12 @@
"hideForever": {
"message": "চিরকালের জন্য এই বিষয়বস্তু লুকান"
},
"questionButton": {
"message": "আমার একটি প্রশ্ন আছে"
},
"warningConfirmButton": {
"message": "আমি কারণ বুঝেছি"
},
"Donate": {
"message": "অনুদান"
},
@@ -851,6 +920,9 @@
"LearnMore": {
"message": "আরও জানুন"
},
"FullDetails": {
"message": "সম্পূর্ণ বিস্তারিত"
},
"CopyDownvoteButtonInfo": {
"message": "ডাউনভোট করে আপনার জন্য পুনরায় জমা দেওয়ার জন্য একটি স্থানীয় অনুলিপি তৈরি করে"
},
@@ -875,6 +947,12 @@
"hideSegment": {
"message": "অংশ আড়াল করুন"
},
"skipSegment": {
"message": "সেগমেন্ট এড়িয়ে যান"
},
"playChapter": {
"message": "অধ্যায় চালু করুন"
},
"SponsorTimeEditScrollNewFeature": {
"message": "দ্রুত সময়টি পরিবর্কতন করতে সম্পাদনা বাক্সে ঘুরে দেখার সময় আপনার মাউস এর হুইয়িলটি ব্যবহার করুন। কন্ট্রল বা শিফট কী এর সংমিশ্রণগুলি পরিবর্তনগুলি আরো নিখুতভাবে টিউন করতে ব্যবহার করা যেতে পারে।"
},
@@ -931,5 +1009,42 @@
},
"openOptionsPage": {
"message": "বিকল্প পাতা খুলুন"
},
"resetToDefault": {
"message": "সেটিংস ডিফল্টে ফিরিয়ে নিন"
},
"exportSegments": {
"message": "সেগমেন্ট রপ্তানি করুন"
},
"importSegments": {
"message": "সেগমেন্ট আমদানী করুন"
},
"Import": {
"message": "আমদানী",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
},
"redeemFailed": {
"message": "লাইসেন্স কী অবৈধ"
},
"chooseACountry": {
"message": "দেশ নির্বাচন করুন"
},
"discountLink": {
"message": "মূল্যছাড় লিঙ্ক (পিংক মূল্য দেখুন)"
},
"selectYourCountry": {
"message": "আপনার দেশ নির্বাচন করুন"
},
"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"
}
}

View File

@@ -112,9 +112,6 @@
"closePopup": {
"message": "Tanca la finestra"
},
"SubmitTimes": {
"message": "Envia els segments"
},
"submitCheck": {
"message": "Segur que voleu enviar això?"
},
@@ -149,9 +146,6 @@
"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"
},
@@ -217,9 +211,6 @@
"statusReminder": {
"message": "Visiteu status.sponsor.ajay.app per conèixer l'estat del servidor."
},
"changeUserID": {
"message": "Importa/exporta la vostra identificació d'usuari"
},
"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."
},

View File

@@ -4,7 +4,7 @@
"description": "Name of the extension."
},
"Description": {
"message": "Přeskoč sponzorství, žadonění o odběr a další v YouTube videích. Nahlaš sponzorované segmenty na videích co sleduješ a ušetři ostatním čas.",
"message": "Přeskočte sponzorství, žádosti o odběr a další ve videích na YouTube. Nahlaste sponzorované segmenty ve videích, která sledujete a ušetřete ostatním čas.",
"description": "Description of the extension."
},
"400": {
@@ -35,6 +35,9 @@
"message": "Zobrazit segmenty jako kapitoly",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Zobrazit aktuální segment vedle času videa"
},
"upvoteButtonInfo": {
"message": "Hlasovat pro tento příspěvek"
},
@@ -96,7 +99,7 @@
"message": "Zrušit vytváření segmentu"
},
"noVideoID": {
"message": "Nebylo nalezeno žádné YouTube video.\nPokud je to špatně, obnovte záložku."
"message": "Nebylo nalezeno žádné YouTube video.\nPokud je to špatně, obnovte kartu."
},
"refreshSegments": {
"message": "Aktualizovat segmenty"
@@ -108,11 +111,14 @@
"message": "Hlasováno!"
},
"serverDown": {
"message": "Zdá se, že server nefunguje. Obraťte se okamžitě na vývojáře."
"message": "Zdá se, že server je offline. Okamžitě kontaktujte vývojáře."
},
"connectionError": {
"message": "Došlo k chybě připojení. Kód chyby: "
},
"segmentsStillLoading": {
"message": "Segmenty se stále načítají..."
},
"clearTimes": {
"message": "Vymazat segmenty"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Zavřít vyskakovací okno"
},
"SubmitTimes": {
"message": "Odeslat segmenty"
"closeIcon": {
"message": "Ikona pro zavření"
},
"OpenSubmissionMenu": {
"message": "Otevřít nabídku příspěvků"
},
"sortSegments": {
"message": "Seřadit segmenty"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Vymazat časy"
},
"submitTimesButton": {
"message": "Odeslat časy"
},
"publicStats": {
"message": "Toto se používá ve veřejném žebříčku k ukázání jak moc jste přispěli. Podívejte se na něj"
},
@@ -241,7 +247,7 @@
"message": "Místo žádání o segmenty ze serveru pomocí videoID jsou poslány první 4 charaktery hashe ve videoID. Tento server odešle zpět data pro všechna videa s podobnými hashy."
},
"enableRefetchWhenNotFound": {
"message": "Refetovat segmenty na nových videích"
"message": "Automaticky znovu načítat segmenty na nových videích"
},
"whatRefetchWhenNotFound": {
"message": "Pokud je video nové a nejsou nalezeny žádné segmenty, bude rozšíření každých několik minut refetchovat data, zatímco sledujete video."
@@ -415,16 +421,16 @@
"message": "Podívejte se na status.sponsor.ajay.app pro stav serverů."
},
"changeUserID": {
"message": "Importovat / exportovat vaše UserID"
"message": "Importovat / exportovat vaše soukromé UserID"
},
"whatChangeUserID": {
"message": "Toto by mělo být ponecháno v soukromí. Je to jako heslo a nemělo by být s nikým sdíleno. Pokud to někdo má, může se za vás vydávat. Pokud hledáte vaše veřejné uživatelské ID, klikněte na ikonu schránky ve vyskakovacím okně."
},
"setUserID": {
"message": "Nastavit UserID"
"message": "Nastavit soukromé UserID"
},
"userIDChangeWarning": {
"message": "Varování: Změna UserID je nevratná. Opravdu to chcete udělat? Pro jistotu si zálohujte vaše staré ID, jen kdyby něco."
"message": "Varování: Změna soukromého UserID je nevratná. Opravdu to chcete udělat? Pro jistotu si zálohujte vaše staré ID, jen kdyby něco."
},
"createdBy": {
"message": "Vytvořil"
@@ -433,7 +439,7 @@
"message": "Podpora pro weby YouTube třetích stran"
},
"supportOtherSitesDescription": {
"message": "Podpora pro YouTube klienty třetích stran. Chcete-li povolit podporu, musíte přijmout další oprávnění. Toto NEFUNGUJE v anonymním režimu v Chromu a dalších Chromium prohlížečích.",
"message": "Podporovat klienty YouTube třetích stran. Pro povolení podpory musíte přijmout dodatečná oprávnění.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -524,7 +530,7 @@
"message": "Načíst ze souboru"
},
"whatExportOptions": {
"message": "Toto je celá vaše konfigurace ve formátu JSON. Zahrnuje vaše userID, takže s ní nakládejte opatrně."
"message": "Toto je celá vaše konfigurace ve formátu JSON. Zahrnuje vaše soukromé UserID, takže s ní nakládejte opatrně."
},
"setOptions": {
"message": "Nastavit možnosti"
@@ -689,7 +695,7 @@
"message": "Výplň / vtipy"
},
"category_filler_description": {
"message": "Výplňové scény přidané jen jako přídavek nebo humor, které nejsou vyžadovány pro pochopení hlavního obsahu videa. Toto by nemělo zahrnovat segmenty poskytující kontext nebo podrobnosti na pozadí."
"message": "Scény přidané pouze jako výplň nebo humor, které nejsou nutné k pochopení hlavního obsahu videa. Kategorie by neměla zahrnovat segmenty poskytující podrobnosti o kontextu nebo pozadí. Jedná se o velmi agresivní kategorii myšlenou pro chvíle, kdy nemáte náladu na „zábavu“."
},
"category_filler_short": {
"message": "Výplň"
@@ -791,6 +797,10 @@
"message": "Zobrazit ikonu, když je celé video reklama",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Zobrazit štítky i u náhledů videí",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Barva neodeslaného segmentu",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -933,7 +943,7 @@
"message": "Skrýt napořád"
},
"warningChatInfo": {
"message": "Všimli jsme si, že děláte některé běžné chyby, které nejsou úmyslně zlé"
"message": "Všimli jsme si, že děláte některé běžné chyby. Velmi si vážíme vaší dosavadní práce, ale snažíme se zde o dokonalost, takže i na velmi malých chybách záleží :)"
},
"warningTitle": {
"message": "Dostali jste varování"
@@ -1046,6 +1056,12 @@
"hideSegment": {
"message": "Skrýt segment"
},
"skipSegment": {
"message": "Přeskočit segment"
},
"playChapter": {
"message": "Přehrát kapitolu"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Použijte kolečko myši při přechodu přes editační okno pro rychlou úpravu času. Kombinace kláves Ctrl nebo Shift mohou být použity k doladění změn."
},
@@ -1140,10 +1156,6 @@
"selectYourCountry": {
"message": "Vyberte vaši zemi"
},
"alreadyDonated": {
"message": "Pokud jste již přispěli jakoukoli částkou, můžete získat bezplatný přístup odesláním e-mailu na:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Pokud si nemůžete dovolit zakoupení licence, klikněte {sem}, abyste zjistili, zda máte nárok na slevu",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1163,17 +1175,6 @@
"enterLicenseKey": {
"message": "Zadejte licenční klíč"
},
"chaptersPage1": {
"message": "Funkce komunitních kapitol je dostupná pouze lidem, kteří si zakoupili licenci, nebo lidem, kteří získali přístup zdarma díky jejich příspěvkům"
},
"chaptersPage2": {
"message": "Poznámka: Oprávnění k odesílání kapitol je stále založené na vypočítané reputaci. Zakoupení licence vám pouze umožní zobrazit si kapitoly odeslané ostatními uživateli",
"description": "On the chapters page for getting access to the paid chapters feature"
},
"chapterNewFeature": {
"message": "Nová funkce: komunitní vlastní kapitoly. Jedná se o komunitou vytvořené sekce ve videích, které lze slučovat, aby byly stále přesnější. Zakupte si licenci pro zobrazení kapitol u tohoto videa, jako například: ",
"description": "After the comma, a list of chapters for this video will appear"
},
"unsubmittedSegmentCounts": {
"message": "Momentálně máte {0} na {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1228,5 +1229,11 @@
},
"exportSegmentsAsURL": {
"message": "Sdílet jako URL"
},
"segmentFetchFailureWarning": {
"message": "Varování: Server zatím neodpověděl se segmenty. U tohoto videa se již mohou nacházet odeslané segmenty, ale vy jste je neobdrželi kvůli chybě na serveru."
},
"allowScrollingToEdit": {
"message": "Povolit skrolování k časům úprav"
}
}

View File

@@ -35,6 +35,9 @@
"message": "Render segmenter som kapitler",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Vis nuværende segmenter ved siden af videotid"
},
"upvoteButtonInfo": {
"message": "Stem for dette forslag"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Der opstod en forbindelsesfejl. Fejlkode: "
},
"segmentsStillLoading": {
"message": "Segmenter indlæses stadig..."
},
"clearTimes": {
"message": "Ryd Segmenter"
},
@@ -122,8 +128,8 @@
"closePopup": {
"message": "Luk Pop-op"
},
"SubmitTimes": {
"message": "Indsend Segmenter"
"closeIcon": {
"message": "Luk ikon"
},
"sortSegments": {
"message": "Sortér Segmenter"
@@ -162,9 +168,6 @@
"clearTimesButton": {
"message": "Ryd Tider"
},
"submitTimesButton": {
"message": "Indsend Tider"
},
"publicStats": {
"message": "Dette bruges på siden med offentlige statistikker til at vise, hvor meget du har bidraget. Se det"
},
@@ -415,16 +418,16 @@
"message": "Tjek status.sponsor.ajay.app for serverstatus."
},
"changeUserID": {
"message": "Importer/Eksporter Dit Bruger-ID"
"message": "Importer/Eksporter Dit Private User-ID"
},
"whatChangeUserID": {
"message": "Dette bør holdes privat. Det er ligesom en adgangskode og bør ikke deles med nogen. Hvis nogen har dette, kan de udgive sig for at være dig. Hvis du leder efter dit offentlige bruger-ID, skal du klikke på udklipsholderikonet i popup-vinduet."
},
"setUserID": {
"message": "Indstil Bruger-ID"
"message": "Set Privat Bruger-ID"
},
"userIDChangeWarning": {
"message": "Advarsel: Ændring af Bruger-IDet er permanent. Er du sikker på, at du vil gøre det? Sørg for at sikkerhedskopiere din gamle for en sikkerheds skyld."
"message": "Advarsel: Ændring af private Bruger-IDet er permanent. Er du sikker på, at du vil gøre det? Sørg for at sikkerhedskopiere din gamle for en sikkerheds skyld."
},
"createdBy": {
"message": "Oprettet Af"
@@ -432,10 +435,6 @@
"supportOtherSites": {
"message": "Understøtter tredjeparts YouTube sider"
},
"supportOtherSitesDescription": {
"message": "Understøt tredjeparts YouTube klienter. For at aktivere understøttelse, skal du acceptere de ekstra tilladelser. Dette virker IKKE i inkognito på 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": "Understøttede Sider: "
},
@@ -524,7 +523,7 @@
"message": "Indlæs fra fil"
},
"whatExportOptions": {
"message": "Dette er hele din konfiguration i JSON. Dette inkluderer dit bruger-ID, så sørg for at dele dette med omtanke."
"message": "Dette er hele din konfiguration i JSON. Dette inkluderer dit private bruger-ID, så sørg for at dele dette med omtanke."
},
"setOptions": {
"message": "Indstil Indstillinger"
@@ -689,7 +688,7 @@
"message": "Fyldningstangent/Jokes"
},
"category_filler_description": {
"message": "Tangential scener kun tilføjet for fyldstof eller humor, som ikke er nødvendige for at forstå videoens hovedindhold. Dette bør ikke omfatte segmenter, der gtiver kontekst eller bagrundsoplysninger."
"message": "Tangential scener kun tilføjet for fyldstof eller humor, som ikke er nødvendige for at forstå videoens hovedindhold. Dette bør ikke omfatte segmenter, der gtiver kontekst eller bagrundsoplysninger\"."
},
"category_filler_short": {
"message": "Fyldstof"
@@ -932,9 +931,6 @@
"hideForever": {
"message": "Skjul for evigt"
},
"warningChatInfo": {
"message": "Vi bemærkede, at du lavede nogle almindelige fejl, som ikke er ondsindede"
},
"warningTitle": {
"message": "Du fik en advarsel"
},
@@ -1046,6 +1042,12 @@
"hideSegment": {
"message": "Skjul segment"
},
"skipSegment": {
"message": "Spring segment over"
},
"playChapter": {
"message": "Afspil kapitel"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Brug musehjulet, mens du holder musen over redigeringsfeltet for hurtigt at justere tiden. Kombinationer af ctrl eller shift-tastenerne kan bruges til at finjustere ændringerne."
},
@@ -1140,10 +1142,6 @@
"selectYourCountry": {
"message": "Vælg dit land"
},
"alreadyDonated": {
"message": "Hvis du har doneret et beløb før, kan du indløse gratis adgang via e-mail:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Hvis du ikke har råd til at købe en licens, så klik på {here} for at se, om du er berettiget til en rabat",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1163,9 +1161,6 @@
"enterLicenseKey": {
"message": "Indtast Licensnøgle"
},
"chaptersPage1": {
"message": "SponsorBlock crowd-sourced kapitler funktion er kun tilgængelig for personer, der køber en licens, eller for personer, der har fået gratis adgang på grund af deres tidligere bidrag"
},
"unsubmittedSegmentCounts": {
"message": "Du har lige nu {0} på {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"

View File

@@ -35,6 +35,9 @@
"message": "Zeige Segmente als Kapitel",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Aktuelles Segment neben der Videozeit anzeigen"
},
"upvoteButtonInfo": {
"message": "Diese Einreichung positiv bewerten"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Ein Verbindungsfehler ist aufgetreten. Fehlermeldung: "
},
"segmentsStillLoading": {
"message": "Segmente werden noch geladen..."
},
"clearTimes": {
"message": "Alle Segmente löschen"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Pop-up schließen"
},
"SubmitTimes": {
"message": "Senden"
"closeIcon": {
"message": "Symbol schließen"
},
"OpenSubmissionMenu": {
"message": "Einreichungsmenü öffnen"
},
"sortSegments": {
"message": "Segmente sortieren"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Zeiten löschen"
},
"submitTimesButton": {
"message": "Zeiten übermitteln"
},
"publicStats": {
"message": "So wirst du in der öffentlichen Rangliste angezeigt. Siehe"
},
@@ -232,7 +238,7 @@
"message": "Alle von dir negativ bewerteten Segmente bleiben auch nach neu laden der Seite verborgen"
},
"trackDownvotesWarning": {
"message": "Warnung: Das Deaktivieren wird alle zuvor gespeicherten negativen Bewertungen löschen"
"message": "Warnung: Das Deaktivieren dieser Option wird alle zuvor gespeicherten negativen Bewertungen löschen"
},
"enableQueryByHashPrefix": {
"message": "Abfrage nach Hash-Präfix"
@@ -250,7 +256,7 @@
"message": "Zeige Kategorien im Einsendungsmenü auch ohne Einreichungsberechtigungen"
},
"whatShowCategoryWithoutPermission": {
"message": "Einige Kategorien benötigen Erlaubnis zum übermitteln aufgrund von einem Mindestmass an Reputation"
"message": "Einige Kategorien erfordern eine Freigabe zur Einreichung aufgrund von Mindestanforderungen an die Reputation"
},
"showNotice": {
"message": "Hinweis erneut anzeigen"
@@ -363,7 +369,7 @@
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} stumm geschaltet",
"message": "{0} stummgeschaltet",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
@@ -415,16 +421,16 @@
"message": "Prüfe status.sponsor.ajay.app für den Serverstatus."
},
"changeUserID": {
"message": "Benutzer-ID importieren/exportieren"
"message": "Private Benutzer-ID importieren/exportieren"
},
"whatChangeUserID": {
"message": "Dies sollte geheim gehalten und wie ein Passwort behandelt, also mit niemandem geteilt werden. Andere könnten sich damit als dich ausgeben. Wenn du nach deiner öffentlichen Profilkennung suchst, klicke auf das „Kopieren“-Symbol neben deinem Anmeldenamen im Pop-up."
},
"setUserID": {
"message": "Interne Benutzer-ID festlegen"
"message": "Private Benutzer-ID festlegen"
},
"userIDChangeWarning": {
"message": "Warnung: Das Ändern der Benutzer-ID ist permanent. Bist du dir sicher, dass du das tun möchtest? Lege dir zur Sicherheit erst eine Sicherheitskopie deiner alten ID an."
"message": "Warnung: Das Ändern deiner privaten Benutzer-ID ist permanent. Bist du dir sicher, dass du das tun möchtest? Zur Sicherheit solltest du vorher ein Backup deiner alten ID erstellen."
},
"createdBy": {
"message": "Erstellt von"
@@ -433,7 +439,7 @@
"message": "Unterstütze Drittanbieter YouTube-Seiten"
},
"supportOtherSitesDescription": {
"message": "Unterstütze Drittanbieter YouTube Clients. Zum unterstützen müssen zusätzlichliche Berechtigungen akzeptiert werden. Dies funktioniert NICHT im Incognitomodus auf Chrome oder anderen Chromium Varianten.",
"message": "Unterstütze YouTube-Clients von Drittanbietern. Um die Unterstützung zu aktivieren, müssen Sie die zusätzlichen Berechtigungen akzeptieren.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -470,10 +476,10 @@
"message": "Videosegmente, die kürzer als der festgelegte Wert sind, werden nicht übersprungen oder im Player angezeigt."
},
"enableManualSkipOnFullVideo": {
"message": "Verwende manuelles überspringen wenn ein vollständiges Video Label existiert"
"message": "Verwende manuelles Überspringen, wenn ein vollständiges Video Label existiert"
},
"whatManualSkipOnFullVideo": {
"message": "Für Personen, welche ein Video ohne unterbrechungen schauen wollen, während es eine komplette Eigenwerbung oder gesponsert ist."
"message": "Für Personen, welche ein Video ohne Unterbrechungen schauen wollen, während es vollständig gesponsert oder Eigenwerbung ist."
},
"skipNoticeDuration": {
"message": "Dauer des Überspringenhinweises (Sekunden):"
@@ -515,7 +521,7 @@
"message": "Alle Einstellungen importieren/exportieren"
},
"exportOptionsCopy": {
"message": "Bearbeiten/kopieren"
"message": "Bearbeiten/Kopieren"
},
"exportOptionsDownload": {
"message": "Als Datei speichern"
@@ -524,7 +530,7 @@
"message": "Aus Datei laden"
},
"whatExportOptions": {
"message": "Dies ist deine gesamte Konfiguration im JSON-Format. Da diese auch deine Benutzer-ID enthält, solltest du dir genau überlegen, mit wem du diese teilen möchtest."
"message": "Dies ist deine gesamte Konfiguration in JSON. Sie enthält deine private Benutzer-ID, stelle also sicher, sie nicht mit jedem zu teilen."
},
"setOptions": {
"message": "Optionen ändern"
@@ -689,7 +695,7 @@
"message": "Füller/Witze"
},
"category_filler_description": {
"message": "Nebensächliche Szenen, die nur als Füller oder Witz dienen und nicht benötigt sind um den Hauptinhalt des Videos zu verstehen. Dies bezieht sich nicht auf Segmente, die Kontext oder Hintergrunddetails liefern."
"message": "Nebensächliche Szenen, die nur als Füller oder Witz dienen und nicht benötigt sind, um den Hauptinhalt des Videos zu verstehen. Dies bezieht sich nicht auf Segmente, die Kontext oder Hintergrunddetails liefern. Dies ist eine sehr aggressive Kategorie, die dafür gedacht ist, wenn du nicht in der Stimmung für \"Spaß\" bist."
},
"category_filler_short": {
"message": "Füller"
@@ -737,7 +743,7 @@
"message": "Kapitel"
},
"category_chapter_description": {
"message": "Benutzerdefinierte Kapitel, welche grosse Bereiche eines Videos beschreiben."
"message": "Benutzerdefiniert benannte Kapitel, welche große Abschnitte eines Videos beschreiben."
},
"category_chapter_guideline1": {
"message": "Sponsor-Markennamen nicht erwähnen"
@@ -788,9 +794,13 @@
"message": "Segmente zulassen, die den Ton ausschalten anstatt zu überspringen"
},
"fullVideoSegments": {
"message": "Zeige ein Icon, wenn ein ganzes Video Werbung ist",
"message": "Ein Symbol anzeigen, wenn ein Video vollständig aus Werbung besteht",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Label auch auf Video-Thumbnails anzeigen",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Nicht eingereichte Farbe",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -933,7 +943,7 @@
"message": "Dauerhaft verbergen"
},
"warningChatInfo": {
"message": "Wir haben bemerkt, dass du einige häufige Fehler machst welche nicht bösartig sind"
"message": "Wir haben festgestellt, dass du einige häufig gemacht Fehler machst. Wir schätzen deine bisherige Arbeit sehr, streben aber hier aber auch nach Perfektion, sodass es auch wichtig ist kleine Fehler zu korrigieren :)"
},
"warningTitle": {
"message": "Du hast eine Verwarnung erhalten"
@@ -1046,6 +1056,12 @@
"hideSegment": {
"message": "Segment verbergen"
},
"skipSegment": {
"message": "Segment überspringen"
},
"playChapter": {
"message": "Kapitel abspielen"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Benutze das Mausrad während der Mauszeiger über dem Eingabefeld schwebt um die Zeit schnell anzupassen. Benutze Strg bzw. Shift für gröbere/genauere Änderungen."
},
@@ -1140,10 +1156,6 @@
"selectYourCountry": {
"message": "Wähle dein Land"
},
"alreadyDonated": {
"message": "Wenn du zuvor etwas gespendet hast, kannst du einen kostenlosen Zugang per E-Mail einlösen:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Wenn du dir keine Lizenz leisten kannst, klicke {hier} um zu sehen, ob du für einen Rabatt in Frage kommen",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1163,17 +1175,6 @@
"enterLicenseKey": {
"message": "Lizenzschlüssel eingeben"
},
"chaptersPage1": {
"message": "Die Crowd-sourced Kapitel-Funktion von SponsorBlock ist nur für Personen verfügbar, welche eine Lizenz kaufen, oder gratis Zugriff für Ihre bisherigen Beiträge erhalten haben"
},
"chaptersPage2": {
"message": "Hinweis: Erlaubnis zum Einreichen von Kapiteln basiert immer noch auf dem berechneten Ruf. Der kauf einer Lizenz berechtigt dich nur, die eingereichten Kapitel der anderen zu sehen",
"description": "On the chapters page for getting access to the paid chapters feature"
},
"chapterNewFeature": {
"message": "Neues Feature: Crowdsourced benutzerdefinierte Kapitel. Dies sind benutzerdefinierte Abschnitte in Videos, die gestapelt werden können, um mehr und mehr präzise zu werden. Kauf eine Lizenz, um Kapitel, die in diesem Video eingereicht wurden, anzusehen: ",
"description": "After the comma, a list of chapters for this video will appear"
},
"unsubmittedSegmentCounts": {
"message": "Du hast derzeit {0} in {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1199,7 +1200,7 @@
"description": "Example: You currently have 12 unsubmitted segments on 5 *videos*"
},
"clearUnsubmittedSegments": {
"message": "Alle Segmente löschen",
"message": "Lösche alle Segmente",
"description": "Label for a button in settings"
},
"clearUnsubmittedSegmentsConfirm": {
@@ -1228,5 +1229,11 @@
},
"exportSegmentsAsURL": {
"message": "Als URL teilen"
},
"segmentFetchFailureWarning": {
"message": "Warnung: Der Server hat noch nicht mit Segmenten geantwortet. Möglicherweise gibt es in diesem Video bereits übermittelte Segmente, aber du hast sie aufgrund von Serverproblemen noch nicht erhalten."
},
"allowScrollingToEdit": {
"message": "Scrollen zum Bearbeiten von Zeiten erlauben"
}
}

View File

@@ -122,9 +122,6 @@
"closePopup": {
"message": "Κλείσιμο αναδυόμενου παραθύρου"
},
"SubmitTimes": {
"message": "Υποβολή Τμημάτων"
},
"sortSegments": {
"message": "Ταξινόμηση Τμημάτων"
},
@@ -162,9 +159,6 @@
"clearTimesButton": {
"message": "Σβήσιμο τμημάτων"
},
"submitTimesButton": {
"message": "Υποβολή τμημάτων"
},
"publicStats": {
"message": "Χρησιμοποιείται στη δημόσια σελίδα στατιστικών για να αναδειχθεί πόσο έχετε συμβάλει. Δείτε το"
},
@@ -400,28 +394,15 @@
"statusReminder": {
"message": "Ελέγξτε το status.sponsor.ajay.app για την κατάσταση διακομιστή."
},
"changeUserID": {
"message": "Εισαγωγή/Εξαγωγή της Ταυτότητας Χρήστη σας"
},
"whatChangeUserID": {
"message": "Κρατείστε το μυστικό. Αυτό είναι σαν ένα κωδικό πρόσβασης όπου δε θα έπρεπε να μοιράζεστε με κανένα. Εάν το αποκτήσει κάποιος, μπορεί να σας υποδυθεί. Εάν ψάχνετε για τη δημόσια ταυτότητα χρήστη σας, πατήστε πάνω στο αναδυόμενο εικονίδιο πρόχειρου."
},
"setUserID": {
"message": "Ορισμός Ταυτότητας Χρήστη"
},
"userIDChangeWarning": {
"message": "Προσοχή: Η αλλαγή της Ταυτότητας Χρήστη είναι μόνιμη. Είστε βέβαιοι ότι θέλετε να το κάνετε; Βεβαιωθείτε ότι έχετε δημιουργήσει αντίγραφο ασφαλείας του παλιού σας για παν ενδεχόμενο."
},
"createdBy": {
"message": "Δημιουργήθηκε από"
},
"supportOtherSites": {
"message": "Υποστήριξη 3των ιστοσελίδων τύπου YouTube"
},
"supportOtherSitesDescription": {
"message": "Υποστήριξη 3των πελατών διακομιστή YouTube. Για να ενεργοποιήσετε την υποστήριξη πρέπει να αποδεχτείτε επιπλέον άδειες. Αυτό ΔΕ λειτουργεί σε καρτέλες ανώνυμης περιήγησης του Chrome ή άλλων Chromium εκδοχών.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
"message": "Υποστηριζόμενες Ιστοσελίδες: "
},
@@ -503,9 +484,6 @@
"exportOptionsUpload": {
"message": "Φόρτωση από αρχείο"
},
"whatExportOptions": {
"message": "Αυτές είναι όλες σας οι ρυθμίσεις σε αρχείο JSON. Αυτό περιλαμβάνει και την Ταυτότητα Χρήστη, οπότε μοιραστείτε το με προσοχή."
},
"setOptions": {
"message": "Ορισμός Επιλογών"
},
@@ -661,9 +639,6 @@
"category_filler": {
"message": "Σπατάλη Χρόνου/Περιττό σχόλιο"
},
"category_filler_description": {
"message": "Σκηνές εκτός θέματος προστίθενται μόνο για σπατάλη χρόνου και περιττά σχόλια τα οποία δεν απαιτούνται για να κατανοήσετε το κύριο περιεχόμενο του βίντεο. Δεν πρέπει να περιλαμβάνονται τμήματα που συμβάλουν στην κατανόηση του θέματος του βίντεο ή επιπλέον πληροφορίες."
},
"category_filler_short": {
"message": "Περιττό"
},
@@ -870,9 +845,6 @@
"hideForever": {
"message": "Απόκρυψη για πάντα"
},
"warningChatInfo": {
"message": "Παρατηρήσαμε ότι κάνατε συνηθισμένα μη κακόβουλα λάθη"
},
"warningTitle": {
"message": "Λάβατε προειδοποίηση"
},

View File

@@ -35,6 +35,9 @@
"message": "Render segments as chapters",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Show Current Segment Beside Video Time"
},
"upvoteButtonInfo": {
"message": "Upvote this submission"
},
@@ -87,10 +90,10 @@
"message": "No segments found"
},
"sponsorStart": {
"message": "Segment Starts Now"
"message": "Start Segment Now"
},
"sponsorEnd": {
"message": "Segment Ends Now"
"message": "End Segment Now"
},
"sponsorCancel": {
"message": "Cancel Creating Segment"
@@ -113,6 +116,9 @@
"connectionError": {
"message": "A connection error has occurred. Error code: "
},
"segmentsStillLoading": {
"message": "Segments still loading..."
},
"clearTimes": {
"message": "Clear Segments"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Close Popup"
},
"SubmitTimes": {
"message": "Submit Segments"
"closeIcon": {
"message": "Close Icon"
},
"OpenSubmissionMenu": {
"message": "Open Submission Menu"
},
"sortSegments": {
"message": "Sort Segments"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Clear Times"
},
"submitTimesButton": {
"message": "Submit Times"
},
"publicStats": {
"message": "This is used on the public stats page to show off how much you've contributed. See it"
},
@@ -415,16 +421,16 @@
"message": "Check status.sponsor.ajay.app for server status."
},
"changeUserID": {
"message": "Import/Export Your UserID"
"message": "Import/Export Your Private UserID"
},
"whatChangeUserID": {
"message": "This should be kept private. This is like a password and should not be shared with anyone. If someone has this, they can impersonate you. If you are looking for your public userID, click the clipboard icon in the popup."
},
"setUserID": {
"message": "Set UserID"
"message": "Set Private UserID"
},
"userIDChangeWarning": {
"message": "Warning: Changing the UserID is permanent. Are you sure you would like to do this? Make sure to backup your old one just in case."
"message": "Warning: Changing the Private UserID is permanent. Are you sure you would like to do this? Make sure to backup your old one just in case."
},
"createdBy": {
"message": "Created By"
@@ -433,7 +439,7 @@
"message": "Support 3rd Party YouTube-Sites"
},
"supportOtherSitesDescription": {
"message": "Support third party YouTube clients. To enable support, you must accept the extra permissions. This does NOT work in incognito on Chrome and other Chromium variants.",
"message": "Support third party YouTube clients. To enable support, you must accept the extra permissions.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -524,7 +530,7 @@
"message": "Load from file"
},
"whatExportOptions": {
"message": "This is your entire configuration in JSON. This includes your userID, so be sure to share this wisely."
"message": "This is your entire configuration in JSON. This includes your Private UserID, so be sure to share this wisely."
},
"setOptions": {
"message": "Set Options"
@@ -689,7 +695,7 @@
"message": "Filler Tangent/Jokes"
},
"category_filler_description": {
"message": "Tangential scenes added only for filler or humor that are not required to understand the main content of the video. This should not include segments providing context or background details."
"message": "Tangential scenes added only for filler or humor that are not required to understand the main content of the video. This should not include segments providing context or background details. This is a very aggressive category meant for when you aren't in the mood for \"fun\"."
},
"category_filler_short": {
"message": "Filler"
@@ -791,6 +797,10 @@
"message": "Show an icon when a video is entirely an advertisement",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Show labels on video thumbnails as well",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Unsubmitted Color",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -933,7 +943,7 @@
"message": "Hide forever"
},
"warningChatInfo": {
"message": "We noticed you were making some common mistakes that are not malicious"
"message": "We noticed you were making some common mistakes. We very much appreciate your work so far, but we strive towards perfection here, so even very small mistakes matter :)"
},
"warningTitle": {
"message": "You got a warning"
@@ -1046,6 +1056,12 @@
"hideSegment": {
"message": "Hide segment"
},
"skipSegment": {
"message": "Skip segment"
},
"playChapter": {
"message": "Play chapter"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Use your mousewheel while hovering over the edit box to quickly adjust the time. Combinations of the ctrl or shift key can be used to fine tune the changes."
},
@@ -1140,10 +1156,6 @@
"selectYourCountry": {
"message": "Select your country"
},
"alreadyDonated": {
"message": "If you've donated any amount before now, you may redeem free access by emailing:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "If you can't afford to purchase a license, click {here} to see if you are eligible for a discount",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1163,20 +1175,6 @@
"enterLicenseKey": {
"message": "Enter License Key"
},
"chaptersPage1": {
"message": "SponsorBlock crowd-sourced chapters feature is only available to people who purchase a license, or for people who are granted access for free due their past contributions"
},
"chaptersPage2": {
"message": "Note: Permission to submit chapters is still based on calculated reputation. Purchasing a license only allows you to view chapters submitted by others",
"description": "On the chapters page for getting access to the paid chapters feature"
},
"chapterNewFeature": {
"message": "New Feature: Crowd-sourced custom chapters. These are custom-named sections in videos that can be stacked to get more and more precise. Purchase a license to view the chapters submitted on this video such as: ",
"description": "After the comma, a list of chapters for this video will appear"
},
"chapterNewFeature2": {
"message": "New Feature: Crowd-sourced custom chapters. These are custom-named sections in videos that can be stacked to get more and more precise. You have access for free, enable in options."
},
"unsubmittedSegmentCounts": {
"message": "You currently have {0} on {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1231,5 +1229,11 @@
},
"exportSegmentsAsURL": {
"message": "Share as URL"
},
"segmentFetchFailureWarning": {
"message": "Warning: The server hasn't responded with segments yet. There might actually be segments on this video already submitted but you just haven't received them due to issues with the server."
},
"allowScrollingToEdit": {
"message": "Allow Scrolling To Edit Times"
}
}

View File

@@ -17,7 +17,7 @@
"message": "Esto ya ha sido enviado antes"
},
"channelWhitelisted": {
"message": "¡Canal Permitido!"
"message": "¡Canal permitido!"
},
"Segment": {
"message": "segmento"
@@ -35,6 +35,9 @@
"message": "Procesar 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 actual al lado del tiempo del video"
},
"upvoteButtonInfo": {
"message": "Votar positivamente este envío"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Ha ocurrido un error de conexión. Código de error: "
},
"segmentsStillLoading": {
"message": "Los segmentos aún se están cargando..."
},
"clearTimes": {
"message": "Borrar Segmentos"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Cerrar la ventana"
},
"SubmitTimes": {
"message": "Enviar Segmentos"
"closeIcon": {
"message": "Icono de cerrar"
},
"OpenSubmissionMenu": {
"message": "Abrir Menú de Envíos"
},
"sortSegments": {
"message": "Ordenar Segmentos"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Eliminar Tiempos"
},
"submitTimesButton": {
"message": "Enviar Tiempos"
},
"publicStats": {
"message": "Esto se utiliza en la página de estadísticas públicas para mostrar cuánto has contribuido. Véala"
},
@@ -175,7 +181,7 @@
"message": "Escoger Nombre De Usuario"
},
"copyPublicID": {
"message": "Copiar el ID de usuario público"
"message": "Copiar el ID de usuario Público"
},
"copySegmentID": {
"message": "Copiar ID de Segmento"
@@ -415,16 +421,16 @@
"message": "Comprueba status.sponsor.ajay.app para ver el estado del servidor."
},
"changeUserID": {
"message": "Importar/Exportar tu ID de usuario"
"message": "Importar/Exportar su ID de usuario privado"
},
"whatChangeUserID": {
"message": "Esto se debería mantener privado. Esto es como una contraseña y no debe ser compartido con nadie. Si alguien tiene esto, puede suplantarte. Si estás buscando tu ID de usuario público, haz clic en el icono de portapapeles en la ventana emergente."
"message": "Esto se debería mantener privado. Esto es como una contraseña y no debe ser compartido con nadie. Si alguien tiene esto, puede suplantarte. Si estás buscando tu ID de usuario Público, haz clic en el icono de portapapeles en la ventana emergente."
},
"setUserID": {
"message": "Establecer el ID de usuario"
"message": "Establecer ID de usuario privado"
},
"userIDChangeWarning": {
"message": "Advertencia: El cambio del ID de usuario es irreversible. ¿Está seguro de que le desea hacerlo? Asegúrese de hacer una copia de respaldo de la anterior por si acaso."
"message": "Advertencia: El cambio del ID de usuario privado es permanente. ¿Está seguro/a de que desea hacer esto? Asegúrese de respaldar el antiguo por si acaso."
},
"createdBy": {
"message": "Creado Por"
@@ -433,7 +439,7 @@
"message": "Soportar sitios de YouTube de terceros"
},
"supportOtherSitesDescription": {
"message": "Soportar clientes de YouTube de terceros. Para habilitar el soporte, debes aceptar los permisos extra. Esto NO funciona en incógnito en Chrome y otras variantes de Chromium.",
"message": "Admite clientes de YouTube de terceros. Para activar la compatibilidad, debes aceptar los permisos adicionales.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -524,7 +530,7 @@
"message": "Cargar desde archivo"
},
"whatExportOptions": {
"message": "Esta es toda su configuración en JSON. Esto incluye tu ID de usuario, así que asegúrate de compartir esto sabiamente."
"message": "Esta es toda su configuración en JSON. Esto incluye tu ID de usuario Privado, asegúrese de compartir esto con prudencia."
},
"setOptions": {
"message": "Configurar opciones"
@@ -586,7 +592,7 @@
"message": "Incluye transiciones entre segmentos"
},
"generic_guideline2": {
"message": "Se reproduce como si no se hubiera omitido nada"
"message": "Reproduce como si nada se omitiera"
},
"category_sponsor": {
"message": "Sponsor"
@@ -635,7 +641,7 @@
"message": "Cuando hay un breve recordatorio para dar me gusta, suscribirse o seguirlos en medio del contenido. Si es largo o sobre algo específico, debería estar bajo promoción propia en su lugar."
},
"category_interaction_guideline1": {
"message": "Breve recordatorio para dar me gusta, suscribirse o seguir"
"message": "Recordatorios breves para darle me gusta, suscribirse o seguir"
},
"category_interaction_guideline2": {
"message": "Incluye recordatorios indirectos para comentar"
@@ -668,7 +674,7 @@
"message": "Créditos o cuando aparecen las tarjetas finales de YouTube. No para conclusiones con información."
},
"category_outro_guideline1": {
"message": "No incluyas contenido, aun si las tarjetas finales están en pantalla"
"message": "No incluyas contenido, aunque se estén mostrando las tarjetas finales"
},
"category_preview": {
"message": "Vista previa/Recapitulación"
@@ -689,7 +695,7 @@
"message": "Tangentes de Relleno/Chistes"
},
"category_filler_description": {
"message": "Escenas tangenciales añadidas solo para relleno o humor que no son necesarias para entender el contenido principal del video. Esto no debe incluir segmentos que proporcionen contexto o detalles de fondo."
"message": "Escenas tangenciales añadidas solo como relleno o humor que no son necesarias para entender el contenido principal del vídeo. Esto no debería incluir segmentos que proporcionen contexto o detalles de fondo. Es una categoría muy agresiva pensada para cuando no se está de humor para «divertirse»."
},
"category_filler_short": {
"message": "Relleno"
@@ -698,7 +704,7 @@
"message": "Escenas tangenciales solo de relleno o humor"
},
"category_filler_guideline2": {
"message": "Distracciones, bloopers, repeticiones"
"message": "Distracciones, meteduras de pata, repeticiones"
},
"category_filler_guideline3": {
"message": "No para escenas requeridas para entender el tema"
@@ -725,7 +731,7 @@
"message": "La parte del video que la mayoría de gente está buscando. Similar a los comentarios que dicen \"El video comienza en x\"."
},
"category_poi_highlight_guideline1": {
"message": "La sección que la mayoría de personas están buscando"
"message": "Sección que busca la mayoría"
},
"category_poi_highlight_guideline2": {
"message": "Puede omitir contexto"
@@ -791,6 +797,10 @@
"message": "Mostrar un icono cuando un video es enteramente un anuncio",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "También mostrar etiquetas en las miniaturas de los vídeos",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Color No Enviado",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -933,7 +943,7 @@
"message": "Ocultar para siempre"
},
"warningChatInfo": {
"message": "Hemos notado que has estado cometiendo algunos errores comunes que no son maliciosos"
"message": "Nos hemos dado cuenta de que cometías algunos errores comunes. Apreciamos mucho tu trabajo hasta ahora, pero aquí nos esforzamos por alcanzar la perfección, así que incluso los errores más pequeños importan :)"
},
"warningTitle": {
"message": "Tienes una advertencia"
@@ -1046,6 +1056,12 @@
"hideSegment": {
"message": "Ocultar segmento"
},
"skipSegment": {
"message": "Omitir segmento"
},
"playChapter": {
"message": "Reproducir capítulo"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Utilice la rueda del ratón mientras pasa el cursor por encima del cuadro de edición para ajustar el tiempo. Se pueden utilizar combinaciones de la tecla ctrl o shift para afinar los cambios."
},
@@ -1123,7 +1139,7 @@
"message": "¡Canje exitoso!"
},
"redeemFailed": {
"message": "La clave de la licencia no es válida"
"message": "La clave de la licencia es inválida"
},
"hideUpsells": {
"message": "Ocultar opciones no disponibles sin pago extra"
@@ -1140,22 +1156,18 @@
"selectYourCountry": {
"message": "Seleccione su país"
},
"alreadyDonated": {
"message": "Si has donado cualquier cantidad antes del presente, puedes canjear el acceso gratuito vía correo electrónico:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Si no puedes permitirte comprar una licencia, haz clic en {here} para ver si eres elegible para un descuento",
"message": "Si no puedes permitirte comprar una licencia, haz clic {aquí} para ver si eres elegible para un descuento",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
"message": "Iniciar sesión con Patreon"
},
"redeem": {
"message": "Canje"
"message": "Canjear"
},
"joinOnPatreon": {
"message": "Danos tu apoyo en Patreon"
"message": "Suscríbete en Patreon"
},
"oneTimePurchase": {
"message": "Compra única"
@@ -1163,23 +1175,12 @@
"enterLicenseKey": {
"message": "Ingresar clave de licencia"
},
"chaptersPage1": {
"message": "La característica de los capítulos de origen de SponsorBlock sólo está disponible para personas que compran una licencia, o para las personas a las que se les concede acceso gratis debido a sus contribuciones anteriores"
},
"chaptersPage2": {
"message": "Nota: El permiso para enviar capítulos todavía está basado en la reputación calculada. Comprar una licencia solo le permite ver los capítulos enviados por otros",
"description": "On the chapters page for getting access to the paid chapters feature"
},
"chapterNewFeature": {
"message": "Nueva Función: Capítulos personalizados marcados por la comunidad. Estos son secciones con nombres personalizados en los videos que pueden ser acumulados para ser cada vez más precisos. Compre una licencia para ver los capítulos enviados en este video, como: ",
"description": "After the comma, a list of chapters for this video will appear"
},
"unsubmittedSegmentCounts": {
"message": "Actualmente tienes {0} en {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
},
"unsubmittedSegmentCountsZero": {
"message": "Actualmente no tiene segmentos no enviados",
"message": "Actualmente, no tiene segmentos sin enviar",
"description": "Replaces 'unsubmittedSegmentCounts' string when there are no unsubmitted segments"
},
"unsubmittedSegmentsSingular": {
@@ -1228,5 +1229,11 @@
},
"exportSegmentsAsURL": {
"message": "Compartir como URL"
},
"segmentFetchFailureWarning": {
"message": "Advertencia: El servidor aún no ha respondido con segmentos. Es posible que haya segmentos en este video ya enviados, pero no los ha recibido debido a problemas con el servidor."
},
"allowScrollingToEdit": {
"message": "Permitir desplazamiento para editar tiempos"
}
}

View File

@@ -35,6 +35,9 @@
"message": "Kuva segmendid peatükkidena",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Kuva praegune segment video aja kõrval"
},
"upvoteButtonInfo": {
"message": "Anna segmendile poolthääl"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Ühendusega esines tõrge. Veakood: "
},
"segmentsStillLoading": {
"message": "Segmente veel laetakse..."
},
"clearTimes": {
"message": "Tühjenda segmendid"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Sulge hüpik"
},
"SubmitTimes": {
"message": "Esita segmendid"
"closeIcon": {
"message": "Sulgemisikoon"
},
"OpenSubmissionMenu": {
"message": "Ava saatmise menüü"
},
"sortSegments": {
"message": "Sorteeri segmendid"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Tühjenda ajad"
},
"submitTimesButton": {
"message": "Saada ajad"
},
"publicStats": {
"message": "Seda kasutatakse avaliku statistika lehel, et näidata välja, kui palju oled panustanud. Vaata seda"
},
@@ -246,6 +252,12 @@
"whatRefetchWhenNotFound": {
"message": "Kui video on uus ning segmente ei leitud, proovitakse vaatamise ajal iga paari minuti tagant uuesti segmente tuua."
},
"enableShowCategoryWithoutPermission": {
"message": "Näita segmentide menüüs ka ilma saatmise loata kategooriaid"
},
"whatShowCategoryWithoutPermission": {
"message": "Osade kategooriate esitamiseks on minimaalse reputatsiooni nõuete tõttu vajalik luba"
},
"showNotice": {
"message": "Kuva märkus uuesti"
},
@@ -310,6 +322,9 @@
"message": "Eelmine peatükk",
"description": "Keybind label"
},
"keybindDescription": {
"message": "Valige klahv vajutades sellele, seejärel valige need teisendklahvid, mida soovite kasutada."
},
"0": {
"message": "Ühenduse ajalõpp. Kontrolli oma võrguühendust. Kui internet töötab, on ilmselt server ülekoormatud või maas."
},
@@ -406,16 +421,16 @@
"message": "Serveri oleku saamiseks vaata status.sponsor.ajay.app"
},
"changeUserID": {
"message": "Impordi/ekspordi oma UserID"
"message": "Impordi/ekspordi oma privaatne UserID"
},
"whatChangeUserID": {
"message": "Seda tuleks privaatsena hoida. See on nagu parool ning seda ei tohiks kellegagi jagada. Kui kellelgi see on, saavad nad sinuna esineda.\nKui otsid avalikku UserID'd, klõpsa hüpikus olevat lõikelaua ikooni."
},
"setUserID": {
"message": "Seadista UserID"
"message": "Määra privaatne UserID"
},
"userIDChangeWarning": {
"message": "Hoiatus: UserID muutmine on püsiv. Kas soovid kindlasti seda teha? Igaks juhuks soovitame eelmise UserID varundada."
"message": "Tähelepanu: privaatse UserID muutmine on lõplik. Kas soovid kindlasti seda teha? Igaks juhuks soovitame eelmise UserID varundada."
},
"createdBy": {
"message": "Autor"
@@ -424,7 +439,7 @@
"message": "Toeta 3. osapoole YouTube-saite"
},
"supportOtherSitesDescription": {
"message": "Kolmanda osapoole YouTube'i klientide tugi. Selle toe lubamiseks pead nõustuma lisalubadega. See EI tööta inkognito-režiimis nii Chromes kui ka teistes Chromiumi brauserites.",
"message": "Kolmanda osapoole YouTube'i klientide tugi. Selle toe lubamiseks pead nõustuma lisalubadega.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -460,6 +475,12 @@
"minDurationDescription": {
"message": "Segmendid, mis on lühemad kui määratud väärtus ei jäeta vahele või ei kuvata mängijal."
},
"enableManualSkipOnFullVideo": {
"message": "Jäta käsitsi vahele, kui eksisteerib terve video silt"
},
"whatManualSkipOnFullVideo": {
"message": "Inimestele, kes soovivad vaadata (enese-)reklaami sisaldavat videot segamatult."
},
"skipNoticeDuration": {
"message": "Vahelejätmise teavituse kestus (sekundites):"
},
@@ -469,6 +490,9 @@
"shortCheck": {
"message": "See saadetav segment on lühem, kui sinu lühima pikkuse valik. See võib tähendada, et see on juba saadetud ning on selle valiku tõttu lihtsalt ignoreeritud. Kas soovid kindlasti seda saata?"
},
"liveOrPremiere": {
"message": "Käimasolevale otseülekandele segmentide esitamine pole lubatud. Palun oodake kuni otseülekanne lõpeb, värskendage lehte ja kontrollige siis, kas segmendid on jätkuvalt kehtivad."
},
"showUploadButton": {
"message": "Kuva üleslaadimisnupp"
},
@@ -506,7 +530,7 @@
"message": "Laadi failist"
},
"whatExportOptions": {
"message": "See on sinu kogu seadistus JSON-formaadis. Selle hulgas on ka UserID, seega jaga seda targalt."
"message": "See on sinu terve seadistus JSON-formaadis. See sisaldab sinu privaatset UserID-d, seega ole tähelepanelik, kellega seda jagad."
},
"setOptions": {
"message": "Määra valikud"
@@ -553,6 +577,9 @@
"copyDebugInformationComplete": {
"message": "Silumisinfo on lõikelauale kopeeritud. Võid sellelt vabalt eemaldada mistahes info, mida ei soovi jagada. Salvesta see tekstifaili või kleebi vearaportisse."
},
"keyAlreadyUsed": {
"message": "See kiirkombinatsioon on juba kasutuses teise toimingu poolt. Palun valige teine kiirkombinatsioon."
},
"to": {
"message": "kuni",
"description": "Used between segments. Example: 1:20 to 1:30"
@@ -668,7 +695,7 @@
"message": "Täitesisu/naljad"
},
"category_filler_description": {
"message": "Video täiteks või huumori eesmärgil lisatud sisu, mis ei ole vajalik video põhieesmärgi mõistmiseks. Selle alla ei kuulu segmendid, mis annavad kontekstiteavet või taustainfot."
"message": "Video täiteks või huumori eesmärgil lisatud sisu, mis ei ole vajalik video põhieesmärgi mõistmiseks. Selle alla ei kuulu segmendid, mis annavad kontekstiteavet või taustainfot. See on väga agressiivne kategooria, mis on mõeldud olukorraks, kui te pole \"parimas tujus\"."
},
"category_filler_short": {
"message": "Täide"
@@ -715,6 +742,18 @@
"category_chapter": {
"message": "Peatükk"
},
"category_chapter_description": {
"message": "Isikupärastatava pealkirjaga peatükid, mis kirjeldavad tähtsamaid video osi."
},
"category_chapter_guideline1": {
"message": "Ära maini sponsorite brändi nimesid"
},
"category_chapter_guideline2": {
"message": "Kasutage suuri peatükke peamiste osade jaoks"
},
"category_chapter_guideline3": {
"message": "Lühikesemaid peatükke saab paigutada suurtemate peatükkide sisse"
},
"category_livestream_messages": {
"message": "Otseülekanne: annetuste ja sõnumite lugemine"
},
@@ -758,6 +797,10 @@
"message": "Kuva ikoon, kui terve video on reklaam",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Kuva silte ka videote pisipiltidel",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Saatmata värv",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -820,6 +863,9 @@
"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": "Kanali ID pole veel laaditud. Kui vaatad manustatud videot, proovi seda vaadata YouTube'i kodulehelt. See võib olla põhjustatud ka YouTube'i paigutuse muudatustest - kui arvad et see nii on, kommenteeri siin:"
},
"invidiousPermissionRefresh": {
"message": "Teie veebilehitseja on eemaldanud loa, mis on vajalik korrektseks tööks Invidious platformil ja muudel kolmandate osapoolte lehtedel. Vajutage allolevat nuppu, et taaskäivitada see luba."
},
"acceptPermission": {
"message": "Nõustu loaga"
},
@@ -880,9 +926,15 @@
"message": "Sain aru",
"description": "Used as the button to dismiss a tooltip"
},
"fullVideoTooltipWarning": {
"message": "See segment on üsna suur. Kui kogu video vältel käsitletakse üht teemat, muutke seade \"jäta vahele\" seadeks \"Täis video\". Vaadake juhiseid rohkema info jaoks."
},
"categoryPillTitleText": {
"message": "See terve video on selle kategooriaga sildistatud ning on liiga tihedalt integreeritud, et eraldada saaks"
},
"chapterNameTooltipWarning": {
"message": "Üks teie peatükkidest sarnaneb kategooriaga. Kui võimalik, kasutage kategooriaid."
},
"experiementOptOut": {
"message": "Keeldu kõigist tulevikus tehtavatatest eksperimentidest",
"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."
@@ -891,7 +943,7 @@
"message": "Peida igaveseks"
},
"warningChatInfo": {
"message": "Panime tähele, et tegid teatud sagedasi vigu, mis ei olnud pahatahtlikud"
"message": "Märkasime, et olete teinud paar üsna tavalist viga. Oleme teie töö eest väga tänulikud, aga me püüdleme täiuslikkuse poole, seega iga väike viga loeb :)"
},
"warningTitle": {
"message": "Sa said hoiatuse"
@@ -923,18 +975,39 @@
"helpPageReviewOptions": {
"message": "Palun vaata allolevad valikud üle"
},
"helpPageFeatureDisclaimer": {
"message": "Paljud funktsioonid on vaikimisi välja lülitatud. Kui te soovite jätta vahele sissejutatused, kokkuvõtted, kasutada Invidioust jms, lülitage need allpool sisse. Te saate ka peita/kuvada kasutajaliidese elemente."
},
"helpPageHowSkippingWorks": {
"message": "Kuidas vahelejätmine töötab"
},
"helpPageHowSkippingWorks1": {
"message": "Video segmendid jäetakse automaatselt vahele, kui nendele vastavad segmendid leitakse andmebaasist. Saate avada hüpikakna vajutades SponsorBlock-i logo peale - nii saate näha eelvaadet nendest segmentidest."
},
"helpPageHowSkippingWorks2": {
"message": "Iga kord, kui jätate segmendi vahele, saadetakse teie teavitus. Kui segmendi ajastus tundub vale või ebatäpsena - hääletage see valeks vajutades vastuhäälele. Hääletamine on võimalik ka hüpikakna abil."
},
"Submitting": {
"message": "Saatmine"
},
"helpPageSubmitting1": {
"message": "Segmentide esitamine on võimalik kas käsitsi hüpikakna abil, vajutades \"Segment algab siit\" või läbi videopleieri kasutades pleieriribas olevaid kahte nuppu."
},
"helpPageSubmitting2": {
"message": "Vajutades play-nuppu märgite segmendi alguse ning stop-nuppu vajutades märgite segmendi lõpu. Võite märkida mitu sponsorit enne \"saada\" vajutamist. Vajutades üleslaadimisnupule laetakse teie loodud segmendid andmebaasi. Vajutades prügikastile kustutatakse teie märgitud segmendid."
},
"Editing": {
"message": "Redigeerimine"
},
"helpPageEditing1": {
"message": "Juhul, kui tegite vea, saate muuta või kustutada oma segmente vajutades üles näitavat noolt."
},
"helpPageTooSlow": {
"message": "See on liiga aeglane"
},
"helpPageTooSlow1": {
"message": "Kiirklahvid on saadaval, kui soovite neid kasutada. Vajutage semikooloniga klahvi, et märkida segmendi algus või lõpp ning vajutage ülakomaga klahvi, et oma segmendid esitada. Need kiirklahvid on muudetavad seadetest. Kui te ei kasuta QWERTY-klaviatuuri, tuleb teil tõenäoliselt muuta klahviseoseid."
},
"helpPageCopyOfDatabase": {
"message": "Kas ma saaksin andmebaasist koopia? Mis juhtub, kui sa kaod?"
},
@@ -983,6 +1056,12 @@
"hideSegment": {
"message": "Peida segment"
},
"skipSegment": {
"message": "Jäta segment vahele"
},
"playChapter": {
"message": "Esita peatükk"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Kiireks aja reguleerimiseks keri hiirega muutmiskasti kohal. Täpsemaks reguleerimiseks hoia kerimise ajal all Ctrl või Shift klahvi."
},
@@ -1062,15 +1141,25 @@
"redeemFailed": {
"message": "Litsentsivõti on sobimatu"
},
"hideUpsells": {
"message": "Peida valikud, mis on saadaval vaid lisatasu eest"
},
"chooseACountry": {
"message": "Vali riik"
},
"noDiscount": {
"message": "Te ei kvalifitseeru allahindluse saamiseks"
},
"discountLink": {
"message": "Soodushinna link (vaata roosat hinda)"
},
"selectYourCountry": {
"message": "Vali oma riik"
},
"cantAfford": {
"message": "Kui te ei saa lubada endale litsensi soetamist, vajutage {here}, et uurida, kas kvalifitseerute allahindluse saamisele",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
"message": "Logi Patreoniga sisse"
},
@@ -1086,9 +1175,6 @@
"enterLicenseKey": {
"message": "Sisesta litsentsivõti"
},
"chaptersPage1": {
"message": "SponsorBlocki kogukonna-loodud peatükkide funktsioon on saadaval vaid inimestele, kes ostavad litsentsi või neile, kes saavad tasuta ligipääsu varasemate panuste tõttu"
},
"unsubmittedSegmentCounts": {
"message": "Sul on hetkel {0} {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1143,5 +1229,8 @@
},
"exportSegmentsAsURL": {
"message": "Jaga URLina"
},
"allowScrollingToEdit": {
"message": "Luba aegade muutmiseks kerimine"
}
}

View File

@@ -109,9 +109,6 @@
"closePopup": {
"message": "بستن پنجره"
},
"SubmitTimes": {
"message": "ثبت بخش‌ها"
},
"submitCheck": {
"message": "مطمئن هستید که میخواهید این را ثبت کنید؟"
},
@@ -139,9 +136,6 @@
"clearTimesButton": {
"message": "حذف دفعات"
},
"submitTimesButton": {
"message": "ثبت دفعات"
},
"Username": {
"message": "نام‌کاربری"
},

View File

@@ -23,18 +23,21 @@
"message": "osio"
},
"Segments": {
"message": "osiot"
"message": "osiota"
},
"SegmentsCap": {
"message": "Osiot"
},
"Chapters": {
"message": "Osiot"
"message": "Kappaleet"
},
"renderAsChapters": {
"message": "Piirrä osiot kappaleina",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Näytä nykyinen osio videon ajan vieressä"
},
"upvoteButtonInfo": {
"message": "Äänestä lähetystä"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Yhteysvirhe on tapahtunut. Virhekoodi: "
},
"segmentsStillLoading": {
"message": "Osioita ladataan yhä..."
},
"clearTimes": {
"message": "Tyhjennä osiot"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Sulje ponnahdusikkuna"
},
"SubmitTimes": {
"message": "Lähetä osiot"
"closeIcon": {
"message": "Sulkukuvake"
},
"OpenSubmissionMenu": {
"message": "Avaa Lähetykset-valikko"
},
"sortSegments": {
"message": "Järjestä osiot"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Tyhjennä ajat"
},
"submitTimesButton": {
"message": "Lähetä ajat"
},
"publicStats": {
"message": "Tätä käytetään julkisella tilastosivulla näyttääksesi kuinka paljon olet osallistunut. Näytä"
},
@@ -175,7 +181,7 @@
"message": "Aseta käyttäjänimi"
},
"copyPublicID": {
"message": "Kopio julkinen UserID"
"message": "Kopioi julkinen UserID"
},
"copySegmentID": {
"message": "Kopioi osion ID"
@@ -232,7 +238,7 @@
"message": "Negatiivisesti äänestämäsi osiot pysyvät piilotettuina myös päivityksen jälkeen"
},
"trackDownvotesWarning": {
"message": "Varoitus: Tämän käytöstä poisto poistaa kaikki negatiiviset äänet"
"message": "Varoitus: Tämän käytöstä poisto poistaa kaikki aiemmat negatiiviset äänet"
},
"enableQueryByHashPrefix": {
"message": "Kysely tiiviste-etuliittellä"
@@ -309,11 +315,11 @@
"description": "Keybind label"
},
"nextChapterKeybind": {
"message": "Seuraava osio",
"message": "Seuraava kappale",
"description": "Keybind label"
},
"previousChapterKeybind": {
"message": "Edellinen osio",
"message": "Edellinen kappale",
"description": "Keybind label"
},
"keybindDescription": {
@@ -415,16 +421,16 @@
"message": "Tarkista palvelimen tila osoitteessa status.sponsor.ajay.app."
},
"changeUserID": {
"message": "Tuo/vie UserID:si"
"message": "Tuo/vie yksityinen UserID"
},
"whatChangeUserID": {
"message": "Tämä pitäisi pitää yksityisenä. Tämä on kuin salasana, eikä sitä pitäisi jakaa kenenkään kanssa. Jos jollakulla on tämä, he voivat esiintyä sinuna. Jos etsit julkista userID:täsi, napsauta leikepöydän kuvaketta ponnahdusikkunassa."
},
"setUserID": {
"message": "Aseta UserID"
"message": "Määritä yksityinen UserID"
},
"userIDChangeWarning": {
"message": "Varoitus: UserID:n vaihtaminen on pysyvää. Oletko varma, että haluat tehdä tämän? Varmuuskopioi vanha UserID:si varmuuden vuoksi."
"message": "Varoitus: Yksityisen UserID:n vaihto on pysyvää. Haluatko varmasti tehdä tämän? Varmuuskopioi vanha UserID varmuuden vuoksi."
},
"createdBy": {
"message": "Luonut"
@@ -433,7 +439,7 @@
"message": "Tue kolmansien osapuolien YouTube-sivustoja"
},
"supportOtherSitesDescription": {
"message": "Tue kolmannen osapuolen YouTube-asiakasohjelmia. Jotta voit ottaa käyttöön tuen, sinun täytyy hyväksyä lisäkäyttöoikeudet. Tämä EI toimi incognitossa Chromessa ja muissa Chromium varianteissa.",
"message": "Tue kolmannen osapuolen YouTube-sovelluksia. Ottaaksesi tuen käyttöön, sinun on hyväksyttävä tarvittavat käyttöoikeudet.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -524,7 +530,7 @@
"message": "Lataa tiedostosta"
},
"whatExportOptions": {
"message": "Tämä on koko konfiguraatiosi JSON-tiedostona. Tämä sisältää userID:si, joten jaa sitä viisaasti."
"message": "Tässä ovat kaikki määrityksesi JSON-muodossa. Myös yksityinen UserID sisältyy näihin tietoihin, joten jaa tiedostoa harkiten."
},
"setOptions": {
"message": "Käytä asetuksia"
@@ -689,7 +695,7 @@
"message": "Epäolennainen täytesisältö/Vitsit"
},
"category_filler_description": {
"message": "Täytteeksi tai huumoriksi lisättyjä toissijaisia kohtauksia, joita videon pääsisällön ymmärrys ei edellytä. Tämän ei tulisi sisältää aiheeseen liittyviä tai taustatietoja tarjoavia osioita."
"message": "Täytteeksi tai huumoriksi lisättyjä toissijaisia kohtauksia, joita videon pääsisällön ymmärrys ei edellytä. Tämän ei tulisi sisältää aiheeseen liittyviä tai taustatietoja tarjoavia osioita. Tämä on erittäin aggressiivinen kategoria niihin hetkiin, kun et välitä \"huvituksista\"."
},
"category_filler_short": {
"message": "Täytesisältö"
@@ -734,19 +740,19 @@
"message": "Voi ohittaa otsikon tai pikkukuvan viittaamaan kohtaan"
},
"category_chapter": {
"message": "Osio"
"message": "Kappale"
},
"category_chapter_description": {
"message": "Nimetyt osiot, jotka kuvaavat videon merkittäviä jaksoja."
"message": "Nimetyt kappaleet, jotka kuvaavat videon merkittäviä osia."
},
"category_chapter_guideline1": {
"message": "Älä mainitse sponsoreiden tuotemerkkejä"
},
"category_chapter_guideline2": {
"message": "Käytä yleisille jaksoille suurempia osioita"
"message": "Käytä yleisille osille suurempia kappaleita"
},
"category_chapter_guideline3": {
"message": "Pienemmät osiot voidaan sijoittaa suurempien osioiden sisään"
"message": "Pienemmät kappaleet voidaan sijoittaa suurempien kappaleiden sisälle"
},
"category_livestream_messages": {
"message": "Livestream: lahjoitusten/viestien lukeminen"
@@ -779,7 +785,7 @@
"message": "Näytä merkki"
},
"showOverlay_chapter": {
"message": "Näytä osiot"
"message": "Näytä kappaleet"
},
"autoSkipOnMusicVideos": {
"message": "Ohita kaikki osiot automaattisesti, kun videossa on \"Musiikiton\" osio"
@@ -791,6 +797,10 @@
"message": "Näytä kuvake, kun video on kokonaan mainos",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Näytä tunnisteet myös videoiden pienoiskuvissa",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Lähettämättömien väri",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -881,7 +891,7 @@
"message": "Virheellinen/väärä aika"
},
"incorrectVote": {
"message": "Väärä"
"message": "Virheellinen"
},
"harmfulVote": {
"message": "Haitallinen",
@@ -923,7 +933,7 @@
"message": "Koko video on merkitty tällä kategorialla ja on erotettavaksi liian tiiviisti integroitu"
},
"chapterNameTooltipWarning": {
"message": "Jonkin osion ja kategorian nimet ovat samankaltaisia. Kun mahdollista, osioiden sijaan on suositeltavaa käyttää kategorioita."
"message": "Jonkin kappaleesi nimi on samankaltainen kategorian kanssa. Kun mahdollista, kappaleiden sijaan on suositeltavaa käyttää kategorioita."
},
"experiementOptOut": {
"message": "Jättäydy pois kaikista tulevista kokeiluista",
@@ -933,7 +943,7 @@
"message": "Piilota ikuisesti"
},
"warningChatInfo": {
"message": "Huomasimme, että teit joitakin yleisiä virheitä, jotka eivät ole pahansuopia"
"message": "Huomasimme, että teit joitakin yleisiä virheitä. Arvostamme työtäsi erittäin paljon, mutta pyrimme täydellisyyteen, joten pienilläkin virheillä on väliä :)"
},
"warningTitle": {
"message": "Sait varoituksen"
@@ -1046,6 +1056,12 @@
"hideSegment": {
"message": "Piilota osio"
},
"skipSegment": {
"message": "Ohita osio"
},
"playChapter": {
"message": "Toista kappale"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Käytä hiiren rullaa samalla kun osoitin on muokkauslaatikon päällä säätääksesi aikaa nopeasti. Ctrl- tai Shift-näppäimen yhdistelmiä voi käyttää muutoksien hienosäätelyyn."
},
@@ -1085,7 +1101,7 @@
"description": "Option label"
},
"unbind": {
"message": "Poista kytkös",
"message": "Poista liitos",
"description": "Unbind keyboard shortcut"
},
"notSet": {
@@ -1135,15 +1151,11 @@
"message": "Et ole oikeutettu alennukseen"
},
"discountLink": {
"message": "Alennuslinkki (ks. vaaleanpunainen hinta)"
"message": "Alennuslinkki (ks. pinkki hinta)"
},
"selectYourCountry": {
"message": "Valitse maasi"
},
"alreadyDonated": {
"message": "Jos olet aiemmin lahjoittanut jonkin summan, voit lunastaa käyttöoikeuden veloituksetta sähköpostitse:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Jos sinulla ei ole varaa lisenssiin, paina {tästä} nähdäksesi oletko oikeutettu alennukseen",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1163,13 +1175,6 @@
"enterLicenseKey": {
"message": "Syötä lisenssiavain"
},
"chaptersPage1": {
"message": "SponsorBlockin joukkolähteinen osiotoiminto on vain lisenssin ostaneiden tai aiempien tukien perusteella veloituksettoman käyttöoikeuden saaneiden henkilöiden käytettävissä"
},
"chaptersPage2": {
"message": "Huomioi: Osioiden lähetysoikeus perustuu edelleen laskettuun maineeseen. Lisenssin hankinta sallii sinun ainoastaan tarkastella muiden lähettämiä osioita",
"description": "On the chapters page for getting access to the paid chapters feature"
},
"unsubmittedSegmentCounts": {
"message": "Sinulla on tällä hetkellä {0} {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1211,7 +1216,7 @@
"description": "Show/hide button for the unsubmitted segments list"
},
"videoID": {
"message": "Videon tunniste",
"message": "Videon ID",
"description": "Header of the unsubmitted segments list"
},
"segmentCount": {
@@ -1223,6 +1228,12 @@
"description": "Header of the unsubmitted segments list"
},
"exportSegmentsAsURL": {
"message": "Jaa URLina"
"message": "Jaa URL-osoitteena"
},
"segmentFetchFailureWarning": {
"message": "Varoitus: Palvelin ei ole vielä toimittanut osiotietoja. Video saattaa sisältää jo ilmoitettuja osioita, mutta et vain ole vielä vastaanottanut niitä palvelinongelmien takia."
},
"allowScrollingToEdit": {
"message": "Salli aikojen muokkaaminen skrollaamalla"
}
}

View File

@@ -106,9 +106,6 @@
"closePopup": {
"message": "Isara ang Popup"
},
"SubmitTimes": {
"message": "I-submit ang mga segments"
},
"submitCheck": {
"message": "Sigurado ka bang gusto mong isumite ito?"
},

View File

@@ -8,10 +8,10 @@
"description": "Description of the extension."
},
"400": {
"message": "Soumission invalide"
"message": "Le serveur indique que cette requête est invalide"
},
"429": {
"message": "Vous cherchez à envoyer beaucoup de segments, y en a-t-il vraiment autant ?"
"message": "Vous cherchez à soummettre trop de segments pour cette vidéo, êtes vous sûr-e de ne pas avoir fait une erreur ?"
},
"409": {
"message": "Ce segment a déjà été soumis auparavant"
@@ -35,6 +35,9 @@
"message": "Affiche les segments en tant que chapitre",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Afficher le segment actuel à côté de du temps de la vidéo"
},
"upvoteButtonInfo": {
"message": "Voter pour cette entrée"
},
@@ -60,7 +63,7 @@
"message": "Revenir en arrière"
},
"reskip": {
"message": "Sauter"
"message": "Passer"
},
"unmute": {
"message": "Réactiver le son"
@@ -72,16 +75,16 @@
"message": "Minuteur arrêté"
},
"confirmMSG": {
"message": "Pour modifier ou supprimer des soumissions, cliquez sur le bouton d'info ou ouvrez la fenêtre de l'extension en cliquant sur son icône dans le coin en haut à droite."
"message": "Pour modifier ou supprimer des soumissions, cliquez sur le bouton d'information ou ouvrez la fenêtre de l'extension en cliquant sur son icône dans le coin en haut à droite."
},
"clearThis": {
"message": "Êtes-vous certain(e) de vouloir supprimer vos soumissions ?\n\n"
"message": "Êtes-vous certain-e de vouloir supprimer ceci ?\n\n"
},
"Unknown": {
"message": "Une erreur s'est produite lors de la soumission, veuillez réessayer plus tard."
},
"sponsorFound": {
"message": "Cette vidéo a des segments dans la base de données!"
"message": "Cette vidéo a des segments dans la base de données !"
},
"sponsor404": {
"message": "Aucun segment trouvé"
@@ -93,13 +96,13 @@
"message": "Fin du segment"
},
"sponsorCancel": {
"message": "Annuler la création de segment"
"message": "Annuler la création du segment"
},
"noVideoID": {
"message": "Aucune vidéo YouTube trouvée.\nActualisez l'onglet s'il s'agit d'une erreur."
},
"refreshSegments": {
"message": "Rafraîchir les segments"
"message": "Actualiser les segments"
},
"success": {
"message": "Succès !"
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Erreur de connexion. Code d'erreur : "
},
"segmentsStillLoading": {
"message": "Segments toujours en cours de chargement..."
},
"clearTimes": {
"message": "Effacer les segments"
},
@@ -120,28 +126,31 @@
"message": "Ouvrir l'encart SponsorBlock"
},
"closePopup": {
"message": "Fermer le Popup"
"message": "Fermer l'encart"
},
"SubmitTimes": {
"message": "Soumettre des segments"
"closeIcon": {
"message": "Icône \"Fermer\""
},
"OpenSubmissionMenu": {
"message": "Ouvrir le menu Contribution"
},
"sortSegments": {
"message": "Trier les segments"
},
"submitCheck": {
"message": "Êtes-vous sûr de vouloir soumettre ces segments?"
"message": "Êtes-vous sûr de vouloir soumettre ces segments ?"
},
"whitelistChannel": {
"message": "Ajouter la chaîne à la liste blanche"
},
"removeFromWhitelist": {
"message": "Enlever la chaîne de la liste blanche"
"message": "Retirer la chaîne de la liste blanche"
},
"voteOnTime": {
"message": "Voter pour un segment"
},
"Submissions": {
"message": "Contributions"
"message": "Soumissions"
},
"savedPeopleFrom": {
"message": "Vous avez sauvé les utilisateurs de "
@@ -150,23 +159,20 @@
"message": "Classement"
},
"recordTimesDescription": {
"message": "Envoyer"
"message": "Soumettre"
},
"submissionEditHint": {
"message": "Le menu d'édition apparaîtra après que vous avez cliqué sur envoyer",
"message": "Le menu d'édition du segment apparaîtra après que vous ayez cliqué sur envoyer",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "Astuce : vous pouvez configurer des raccourcis clavier dans les options"
"message": "Astuce : vous pouvez configurer les raccourcis clavier de l'extension dans les options"
},
"clearTimesButton": {
"message": "Supprimer les temps"
},
"submitTimesButton": {
"message": "Soumettre les temps"
},
"publicStats": {
"message": "Votre pseudo est inscrit dans le classement public pour afficher vos contributions. Le consulter"
"message": "Votre pseudo est inscrit dans le classement public permettant de présenter vos soumissions. Le consulter"
},
"Username": {
"message": "Pseudo"
@@ -175,13 +181,13 @@
"message": "Choisir un pseudonyme"
},
"copyPublicID": {
"message": "Copier l'ID utilisateur"
"message": "Copier le UserID"
},
"copySegmentID": {
"message": "Copier l'identifiant du segment"
},
"discordAdvert": {
"message": "Rejoignez le serveur Discord officiel pour toutes suggestions ou remarques!"
"message": "Rejoignez le serveur Discord officiel pour partager vos suggestions et remarques !"
},
"hideThis": {
"message": "Cacher"
@@ -190,7 +196,7 @@
"message": "Options"
},
"showButtons": {
"message": "Montrer les boutons sur le lecteur YouTube"
"message": "Afficher les boutons sur le lecteur YouTube"
},
"hideButtons": {
"message": "Cacher les boutons sur le lecteur YouTube"
@@ -220,13 +226,13 @@
"message": "Activer le suivi du nombre de sauts de segments"
},
"whatViewTracking": {
"message": "Cette fonctionnalité permet de suivre les segments que vous avez sautés pour faire savoir aux utilisateurs à quel point leur soumission a aidé les autres et est utilisée comme donnée avec les votes positifs pour s'assurer que des spams n'entrent pas dans la base de données. L'extension envoie un message au serveur chaque fois que vous sautez un segment. Il est à espérer que la plupart des gens ne modifient pas ce paramètre pour que les données sur le nombre d'affichages soient exactes. :)"
"message": "Cette fonctionnalité enregistre les segments que vous avez sautés afin d'informer leur auteur à quel point leur soumission a été utile. Elle est aussi utilisée en complément des votes positifs pour empêcher la soumission de spams dans la base de données. SponsorBlock envoie un message au serveur à chaque fois que vous passez un segment. Nous espérons que la plupart des utilisateurs ne modifieront pas ce paramètre afin de conserver des statistiques aussi représentatives que possible. :)"
},
"enableViewTrackingInPrivate": {
"message": "Activer le suivi du nombre de sauts dans les onglets privés/incognito"
"message": "Activer le décompte du nombre de segments sautés dans les onglets de navigation privée/incognito"
},
"enableTrackDownvotes": {
"message": "Enregistrer les segments contre lesquels vous avez voté"
"message": "Enregistrer les segments votés négativement"
},
"whatTrackDownvotes": {
"message": "Tous les segments votés négativement resteront cachés même après rafraîchissement de la page"
@@ -238,7 +244,7 @@
"message": "Requête par préfixe du hash"
},
"whatQueryByHashPrefix": {
"message": "Au lieu de demander des segments au serveur à l'aide de l'identifiant de la vidéo, les 4 premiers caractères du hash de l'identifiant de la vidéo sont envoyés. Ce serveur renverra les données pour toutes les vidéos ayant des hash similaires."
"message": "Plutôt que de récupérer depuis le serveur les segments à sauter à l'aide de l'identifiant de la vidéo, les 4 premiers caractères du hash de l'identifiant de la vidéo sont envoyés. Le serveur renverra les données pour toutes les vidéos ayant des hash similaires."
},
"enableRefetchWhenNotFound": {
"message": "Récupérer les segments sur les nouvelles vidéos"
@@ -246,32 +252,38 @@
"whatRefetchWhenNotFound": {
"message": "Si la vidéo vient de sortir et qu'aucun segment n'a été encore trouvé, SponsorBlock en cherchera durant la lecture de la vidéo."
},
"enableShowCategoryWithoutPermission": {
"message": "Afficher les catégories dans le menu des contributions, même celles sans autorisation"
},
"whatShowCategoryWithoutPermission": {
"message": "Certaines catégories nécessitent une autorisation en raison d'exigences minimales de réputation"
},
"showNotice": {
"message": "Afficher la notification"
"message": "Afficher à nouveau la notification"
},
"showSkipNotice": {
"message": "Notifier après qu'un segment ait été sauté"
"message": "Notifier après qu'un segment a été sauté"
},
"showCategoryGuidelines": {
"message": "Affiche l'aide de la catégorie"
},
"noticeVisibilityMode0": {
"message": "Notifications de passage"
"message": "Cacher les notifications en mode plein écran"
},
"noticeVisibilityMode1": {
"message": "Petite notifications de passage pour l'auto skip"
"message": "Petite notification lors du passage automatique"
},
"noticeVisibilityMode2": {
"message": "Toute les petites notifications de passage"
},
"noticeVisibilityMode3": {
"message": "Notifications de passage qui disparaissent pour l'auto skip"
"message": "Notifications estompées lors du passage automatique"
},
"noticeVisibilityMode4": {
"message": "Toute les notifications de passage qui disparaissent"
"message": "Toute les notifications de passage sont estompées"
},
"longDescription": {
"message": "SponsorBlock vous permet de passer les sponsors, les intros, les outros, les rappels d'abonnement et autres parties ennuyeuses des vidéos YouTube. SponsorBlock est une extension de navigateur qui permet à n'importe qui de soumettre les temps de début et de fin des segments sponsorisés et d'autres segments de vidéos YouTube. Une fois qu'une personne a soumis ces informations, toutes les autres personnes possédant cette extension passeront directement les segments sponsorisés. Vous pouvez également sauter les sections non musicales des vidéos musicales.",
"message": "SponsorBlock vous permet de passer les messages sponsorisés, les introductions, les postfaces, les rappels d'abonnement et autres passages ennuyeux des vidéos YouTube. SponsorBlock est une extension de navigateur web qui permet à tout le monde de soumettre les temps de début et de fin des passages sponsorisés et d'autres segments de vidéos YouTube. Dès que quelqu'un-e soumet ces informations, toutes les autres personnes possédant l'extension passeront directement les segments sponsorisés. Vous pouvez également sauter les sections non musicales des vidéos musicales.",
"description": "Full description of the extension on the store pages."
},
"website": {
@@ -374,13 +386,13 @@
"message": "Notification audio lors du passage"
},
"audioNotificationDescription": {
"message": "Une notification audio sera jouée chaque fois qu'un segment est passé. Si désactivé (ou si le passage automatique est désactivé), aucun son ne sera joué."
"message": "Une notification audio sera jouée chaque fois qu'un segment sera passé. Si désactivé (ou si le passage automatique est désactivé), aucun son ne sera joué."
},
"showTimeWithSkips": {
"message": "Afficher le temps avec les passages supprimés"
"message": "Afficher la durée en supprimant les segments"
},
"showTimeWithSkipsDescription": {
"message": "Ce temps apparaît entre crochets à côté du temps actuel sous la barre de défilement. Cela indique la durée totale de la vidéo après déduction de tous les segments. Ceci comprend les segments marqués comme étant uniquement à \"Afficher dans la barre de recherche\"."
"message": "Cette durée apparaît entre crochets à côté de la durée actuelle, sous la barre de défilement. Il s'agit de la durée totale de la vidéo après déduction de tous les segments. Les segments marqués comme étant uniquement à \"Afficher dans la barre de recherche\" sont inclus dans le calcul."
},
"youHaveSkipped": {
"message": "Vous avez passé "
@@ -398,7 +410,7 @@
"message": "heures"
},
"youHaveSavedTime": {
"message": "Vous avez fait économiser les utilisateurs",
"message": "Vous avez sauvé les autres de",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
@@ -406,19 +418,19 @@
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "Vérifiez status.sponsor.ajay.app pour le status du serveur."
"message": "Consultez status.sponsor.ajay.app pour connaître le statut du serveur."
},
"changeUserID": {
"message": "Importer/Exporter Votre ID d'Utilisateur"
"message": "Importer/Exporter Votre ID privé d'utilisateur"
},
"whatChangeUserID": {
"message": "Il doit rester privé. 0 l'instar d'un mot de passe, il ne doit être partagé avec personne. Si une autre personne est en possession de cette information, elle peut usurper votre identité SponsorBlock. Si vous cherchez votre UserID public, cliquez sur l'icône du presse-papiers dans l'encart."
"message": "Cela doit rester privé. À l'instar d'un mot de passe, il ne doit être partagé avec personne. Si une autre personne est en possession de cette donnée, elle peut usurper votre identité SponsorBlock. Si vous cherchez votre UserID public, cliquez sur l'icône du presse-papiers dans l'encart."
},
"setUserID": {
"message": "Définir \"UserID\""
"message": "Définir l'ID privé d'utilisateur"
},
"userIDChangeWarning": {
"message": "Avertissement : La modification de \"UserID\" est permanente. Êtes-vous sûr de vouloir faire ça ? Assurez-vous de sauvegarder votre ancien au cas où."
"message": "Avertissement : La modification de l'ID privé d'utilisateur est permanente. Êtes-vous sûr de vouloir faire ça ? Assurez-vous de sauvegarder l'ancien au cas où."
},
"createdBy": {
"message": "Créé par"
@@ -427,7 +439,7 @@
"message": "Support de sites tiers YouTube"
},
"supportOtherSitesDescription": {
"message": "Support de clients YouTube tierces. Pour habiliter le support, vous devez accepter les autorisations supplémentaires. Cela ne fonctionne PAS en incognito sur Chrome et d'autres variantes de Chromium.",
"message": "Soutenez les clients tiers pour YouTube. Pour activer le soutien, vous devez accepter les autorisations supplémentaires.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -440,13 +452,13 @@
"message": "Ajouter une instance de client tiers"
},
"addInvidiousInstanceDescription": {
"message": "Ajouter une instance personnalisée. Elle doit être formaté avec SEULEMENT le domaine. Exemple: invidious.ajay.app"
"message": "Ajouter une instance personnalisée. Contient UNIQUEMENT son nom de domaine. Par exemple : invidious.ajay.app"
},
"add": {
"message": "Ajouter"
},
"addInvidiousInstanceError": {
"message": "Ce domaine n'est pas valide. Il devrait JUSTE inclure le domaine. Exemple: invidious.ajay.app"
"message": "Ce domaine n'est pas valide. Vérifiez que vous avez UNIQUEMENT noté le nom de domaine. Par exemple : invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "Réinitialiser la liste d'instances Invidious"
@@ -455,13 +467,13 @@
"message": "Vous êtes sur le point de réinitialiser la liste des instances Invidious"
},
"currentInstances": {
"message": "Instances actuelles:"
"message": "Instances actuelles :"
},
"minDuration": {
"message": "Durée minimale (en secondes):"
"message": "Durée minimale (en secondes) :"
},
"minDurationDescription": {
"message": "Les segments plus courts que la valeur fixée ne seront pas sautés ou affichés dans le lecteur."
"message": "Les segments plus courts que la valeur fixée ne seront pas sautés ni affichés dans le lecteur."
},
"enableManualSkipOnFullVideo": {
"message": "Utiliser le saut manuel quand une étiquette vidéo complète existe"
@@ -470,10 +482,10 @@
"message": "Pour les personnes qui veulent regarder la vidéo sans interruptions si elle est complétement sponsorisée ou auto-promu."
},
"skipNoticeDuration": {
"message": "Durée du saut de segment (secondes):"
"message": "Durée de l'affichage de la notification de saut de segment (en secondes) :"
},
"skipNoticeDurationDescription": {
"message": "L'avis du saut restera à l'écran pendant au moins aussi longtemps. Pour passer manuellement, il peut être visible plus longtemps."
"message": "La notification du passage restera à l'écran pendant au moins le temps défini. Pour passer manuellement un segment, il est possible qu'il reste visible plus longtemps."
},
"shortCheck": {
"message": "Le segment suivant est plus court que votre option de durée minimale. Cela pourrait signifier qu'il a déjà été soumis et est simplement ignoré à cause de cette option. Êtes-vous sûr de vouloir soumettre ce segment ?"
@@ -482,13 +494,13 @@
"message": "La soumission de segments sur un direct en cours ou une première n'est pas autorisée. Veuillez attendre qu'il soit terminé puis actualisez la page et vérifiez que les segments sont toujours valides."
},
"showUploadButton": {
"message": "Afficher le bouton de téléchargement"
"message": "Afficher le bouton de téléversement"
},
"customServerAddress": {
"message": "Adresse du serveur SponsorBlock"
},
"customServerAddressDescription": {
"message": "L'adresse que SponsorBlock utilise pour faire des appels au serveur.\nSauf si vous avez votre propre instance de serveur, cela ne devrait pas être changé."
"message": "L'adresse que SponsorBlock utilise pour faire des appels au serveur.\nCe réglage ne doit pas être modifié à moins que vous hébergiez votre propre instance."
},
"save": {
"message": "Sauvegarder"
@@ -500,7 +512,7 @@
"message": "Le format de l'adresse est incorrect. Assurez-vous qu'elle commence bien par http:// ou https:// et ne termine pas par un slash."
},
"areYouSureReset": {
"message": "Voulez-vous vraiment remettre à zéro ?"
"message": "Voulez-vous vraiment réinitialiser ?"
},
"mobileUpdateInfo": {
"message": "m.youtube.com est maintenant pris en charge"
@@ -518,7 +530,7 @@
"message": "Charger à partir du fichier"
},
"whatExportOptions": {
"message": "Contient toute votre configuration au format JSON. Inclut votre UserID privé, donc ne partagez pas ce fichier."
"message": "Contient toute votre configuration au format JSON. Inclut votre ID privé d'utilisateur, donc ne le partagez pas."
},
"setOptions": {
"message": "Définir les options"
@@ -527,7 +539,7 @@
"message": "Attention : La modification des options est définitive et peut rendre instable voire planter votre installation. Êtes-vous sûr de vouloir faire ça ? Faites une sauvegarde de votre ancienne configuration au cas où."
},
"incorrectlyFormattedOptions": {
"message": "Ce JSON n'est pas formaté correctement. Vos options n'ont pas été modifiées."
"message": "Ce fichier JSON n'est pas formaté correctement. Vos options n'ont pas été modifiées."
},
"confirmNoticeTitle": {
"message": "Soumettre le segment"
@@ -586,7 +598,7 @@
"message": "Message sponsorisé"
},
"category_sponsor_description": {
"message": "Promotion rémunérée, parrainage rémunéré et publicité directe. Pas pour l'autopromotion ou les présentations gratuites de causes, de créateurs, de sites web ou de produits qu'ils aiment."
"message": "Promotion rémunérée, parrainage rémunéré et publicité directe. Ne concerne pas l'autopromotion ou le partage gratuit de causes, créateurices, sites web ou produits appréciés."
},
"category_sponsor_guideline1": {
"message": "Promotions rémunérées"
@@ -641,7 +653,7 @@
"message": "Rappel d'interaction"
},
"category_intro": {
"message": "Entracte/Animation d'intro"
"message": "Entracte/Animation d'introduction"
},
"category_intro_description": {
"message": "Un intervalle sans réel contenu, par exemple une pause, une image statique ou une animation répétitive. N'utilisez pas cette catégorie pour les transitions contenant de l'information."
@@ -656,10 +668,10 @@
"message": "Pas pour les transitions avec des informations"
},
"category_outro": {
"message": "Générique de fin"
"message": "Écrans de fin/Crédits"
},
"category_outro_description": {
"message": "Crédits ou écrans de fin YouTube. Pas pour les conclusions contenant des informations."
"message": "Crédits ou écran de fin YouTube. Pas pour les conclusions contenant des informations."
},
"category_outro_guideline1": {
"message": "Ne dois pas inclure de contenu, même si les écrans de fin sont apparus"
@@ -683,7 +695,7 @@
"message": "Digressions/Blagues"
},
"category_filler_description": {
"message": "Digressions ajoutées uniquement dans un but de remplissage ou de l'humour non requis pour comprendre le sujet principal de la vidéo. Ne doit pas inclure des segments fournissant du contexte ou des détails de fond."
"message": "Digressions ajoutées uniquement dans un but de remplissage ou de l'humour non requis pour comprendre le sujet principal de la vidéo. Ne dois pas inclure des segments fournissant du contexte ou des détails de fond. Il s'agit d'une catégorie très agressive destinée aux moments qui ne sont pas \"pour le fun\"."
},
"category_filler_short": {
"message": "Remplissage"
@@ -701,10 +713,10 @@
"message": "Musique : Segment non musical"
},
"category_music_offtopic_description": {
"message": "A utiliser seulement pour les vidéos de musiques. Ceci ne devrait qu'être utilisé que pour des morceaux de vidéos de musiques qui ne sont pas couvert par d'autres catégories."
"message": "A utiliser seulement dans les vidéos de musique. Doit être uniquement utilisé pour les sections qui ne sont pas couverte par une autre catégorie plus spécifique."
},
"category_music_offtopic_short": {
"message": "Hors musique"
"message": "Section non musicale"
},
"category_music_offtopic_guideline1": {
"message": "Sections qui ne sont pas dans la musique officielle"
@@ -716,7 +728,7 @@
"message": "Point essentiel"
},
"category_poi_highlight_description": {
"message": "La partie de la vidéo que la plupart des gens veulent voir. Similaire à \"la vidéo commence à x mins\"."
"message": "La partie de la vidéo que la plupart des gens veut voir. Similaire aux commentaires de type « La vidéo commence à x minutes »."
},
"category_poi_highlight_guideline1": {
"message": "Section la plus regardée"
@@ -776,15 +788,19 @@
"message": "Montre les chapitres"
},
"autoSkipOnMusicVideos": {
"message": "Ignorer automatiquement tous les segments lorsqu'il y a un segment non-musical"
"message": "Passer automatiquement tous les segments lorsqu'il y a un segment non musical"
},
"muteSegments": {
"message": "Autoriser les segments qui bloquent l'audio au lieu de le passer"
"message": "Autoriser les segments qui mettent l'audio en sourdine plutôt que de les passer"
},
"fullVideoSegments": {
"message": "Afficher une icône lorsqu'une vidéo est entièrement promotionnelle",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Afficher également les étiquettes sur les vignettes de la vidéo",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Couleur non soumise",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -796,17 +812,17 @@
"message": "Catégorie"
},
"skipOption": {
"message": "Option de saut",
"message": "Option de passage",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "Activer le serveur de test bêta"
},
"whatEnableTestingServer": {
"message": "Vos soumissions et votes NE COMPTERONT PAS sur le serveur principal. Utilisez ceci uniquement pour faire des tests."
"message": "Vos soumissions et votes NE SERONT PAS COMPTÉES par serveur principal. À n'utiliser que lors de vos tests."
},
"testingServerWarning": {
"message": "AUCUNE SOUMISSION OU VOTE NE COMPTERA sur le serveur principal tant que vous serez connecté au serveur de test. Désactivez ceci quand vous voudrez réellement soumettre ou voter."
"message": "Aucune soumission ou vote NE SERA COMPTÉE par le serveur principal tant que vous serez connecté-e au serveur de test. À désactiver quand vous voudrez réellement soumettre des segments ou voter."
},
"bracketNow": {
"message": "(Maintenant)"
@@ -851,19 +867,19 @@
"message": "Le navigateur a refusé l'autorisation nécessaire pour pouvoir fonctionner sur Invidious et d'autres sites tiers. Veuillez cliquer sur le bouton ci-dessous pour réactiver cette autorisation."
},
"acceptPermission": {
"message": "Accepter l'autorisation"
"message": "Donner la permission"
},
"permissionRequestSuccess": {
"message": "Demande de permission réussie !"
},
"permissionRequestFailed": {
"message": "La demande d'autorisation a échoué, avez-vous cliqué sur refuser ?"
"message": "La demande de permission a échoué, avez-vous cliqué sur refuser ?"
},
"adblockerIssueWhitelist": {
"message": "Si vous ne parvenez pas à résoudre ce problème, désactivez le paramètre 'Force Channel Check Before Skipping' car SponsorBlock est incapable de récupérer les informations de la chaine pour cette vidéo"
"message": "Si vous ne parvenez pas à résoudre ce problème, désactivez le paramètre \"Forcer la vérification de la chaîne avant de passer\" car SponsorBlock ne parvient pas à récupérer les informations de la chaine pour cette vidéo"
},
"forceChannelCheck": {
"message": "Forcer la vérification du canal avant de passer"
"message": "Forcer la vérification de la chaîne avant de passer"
},
"whatForceChannelCheck": {
"message": "Par défaut, les segments sont passés avant même de savoir à quelle chaîne la vidéo appartient. Par défaut, certains segments en début de vidéo des chaînes sur liste blanche peuvent être involontairement passés. Activer cette option évitera ce problème mais le passage des segments aura un léger retard, du fait que l'obtention du ChannelID prend du temps. Ce retard devrait être imperceptible si vous avez un haut débit internet."
@@ -885,7 +901,7 @@
"message": "Changer de catégorie"
},
"nonMusicCategoryOnMusic": {
"message": "Cette vidéo est catégorisée comme de la musique. Êtes-vous sûr qu'elle est sponsorisée? S'il s'agit en fait d'un \"Segment non musical\", allez dans les options de l'extension et activez cette catégorie. Ensuite, vous pourrez soumettre ce segment en tant que \"Segment non musical\" au lieu de sponsor. Lisez les instructions en cas de confusion."
"message": "Cette vidéo est catégorisée comme musicale. Êtes-vous sûr-e qu'elle est sponsorisée ? S'il s'agit d'un segment non musical, activez cette catégorie dans les options de SponsorBlock. Vous pourez ensuite soumettre ce segment en tant que \"segment non musical\" plutôt que \"message commercial\". Lisez les instructions pour plus de détails."
},
"multipleSegments": {
"message": "Plusieurs segments"
@@ -901,13 +917,13 @@
"message": "Les catégories sont là !"
},
"categoryUpdate2": {
"message": "Ouvrir les options pour sauter les intros, outros, marchandises, etc."
"message": "Ouvrir les options pour sauter les introductions, postfaces, produits dérivés, etc."
},
"help": {
"message": "Aide"
},
"GotIt": {
"message": "Compris",
"message": "C'est compris",
"description": "Used as the button to dismiss a tooltip"
},
"fullVideoTooltipWarning": {
@@ -927,7 +943,7 @@
"message": "Cacher pour toujours"
},
"warningChatInfo": {
"message": "Nous avons remarqué que vous faisiez des erreurs courantes qui ne sont pas intentionnelles"
"message": "Nous avons remarqué que vous commettiez des erreurs courantes. Nous apprécions votre travail jusqu'à présent, mais nous recherchons la perfection, donc même de petites erreurs comptent :)"
},
"warningTitle": {
"message": "Vous avez reçu un avertissement"
@@ -960,22 +976,22 @@
"message": "Veuillez vérifier les options ci-dessous"
},
"helpPageFeatureDisclaimer": {
"message": "De nombreuses fonctionnalités sont désactivées par défaut. Si vous voulez ignorer les intros, outros, utiliser Invidious, etc., activez-les ci-dessous. Vous pouvez également masquer/afficher les éléments de l'interface."
"message": "De nombreuses fonctionnalités sont désactivées par défaut. Si vous voulez ignorer les introductions, postfaces, utiliser Invidious, etc., définissez-le ci-dessous. Vous pouvez également masquer ou afficher les éléments de l'interface."
},
"helpPageHowSkippingWorks": {
"message": "Comment fonctionne le saut d'un segment"
"message": "Comment fonctionne le passage d'un segment"
},
"helpPageHowSkippingWorks1": {
"message": "Les segments vidéo seront automatiquement ignorés s'ils sont trouvés dans la base de données. Vous pouvez ouvrir le popup en cliquant sur l'icône de l'extension pour obtenir un aperçu de ces segments."
"message": "Les segments vidéo seront automatiquement ignorés s'ils sont trouvés dans la base de données. Vous pouvez ouvrir un encart en cliquant sur l'icône de l'extension pour en avoir un aperçu."
},
"helpPageHowSkippingWorks2": {
"message": "À chaque fois que vous sautez un segment, vous en serez averti. Si le timing semble incorrect, vous pouvez disliker le segment, vous pouvez également voter dans le popup."
"message": "À chaque fois que vous passez un segment, vous en êtes averti-e. Si le timing semble incorrect, vous pouvez voter contre le segment ! Vous pouvez également voter dans l'encart d'aperçu."
},
"Submitting": {
"message": "Soumission en cours"
},
"helpPageSubmitting1": {
"message": "La soumission peut être effectuée dans le popup en appuyant sur le bouton \"le segment commence maintenant\" ou dans le lecteur vidéo avec les boutons du lecteur."
"message": "La soumission peut être effectuée dans l'encart d'aperçu en appuyant sur le bouton \"Début du segment\" ou dans le lecteur vidéo avec les boutons."
},
"helpPageSubmitting2": {
"message": "Cliquer sur le bouton de lecture indique le début d'un segment et cliquer sur l'icône d'arrêt indique sa fin. Vous pouvez préparer plusieurs messages commerciaux avant d'appuyer sur Soumettre. Cliquer sur le bouton Téléverser soumettra vos segments. Cliquer sur la poubelle supprimera vos segments."
@@ -984,13 +1000,13 @@
"message": "Édition en cours"
},
"helpPageEditing1": {
"message": "Si vous avez fait une erreur, vous pouvez modifier ou supprimer vos segments après avoir cliqué sur le bouton avec la flèche vers le haut."
"message": "Si vous avez fait une erreur, vous pouvez modifier ou supprimer vos segments en cliquant sur le bouton avec la flèche vers le haut."
},
"helpPageTooSlow": {
"message": "Ceci est trop lent"
},
"helpPageTooSlow1": {
"message": "Il y a des raccourcis clavier si vous voulez les utiliser. Appuyez sur la touche point-virgule pour indiquer le début / la fin d'un segment sponsorisé et cliquez sur l'apostrophe pour soumettre. Cela peut être modifié dans les options. Si vous n'utilisez pas un clavier QWERTY, vous devriez probablement changer la touche assignée de base."
"message": "Il y a des raccourcis clavier si vous voulez les utiliser. Appuyez sur la touche point-virgule pour indiquer le début et la fin d'un segment sponsorisé, et cliquez sur l'apostrophe pour soumettre. Vous pouvez les modifier dans les options. Si vous n'utilisez pas un clavier QWERTY, vous devriez probablement changer les racourcis par défaut."
},
"helpPageCopyOfDatabase": {
"message": "Puis-je obtenir une copie de la base de données ? Que se passe-t-il si vous disparaissez ?"
@@ -999,10 +1015,10 @@
"message": "La base de données est publique et disponible à"
},
"helpPageCopyOfDatabase2": {
"message": "Le code source est librement disponible. Donc, même si il m'arrive quelque chose, vos soumissions ne seront pas perdues."
"message": "Le code source est en accès libre. Donc, même si il m'arrive quelque chose, vos soumissions ne seront pas perdues."
},
"helpPageNews": {
"message": "Nouvelles et comment elles sont faites"
"message": "Nouveautés et comment l'extension est fabriquée"
},
"helpPageSourceCode": {
"message": "Où puis-je obtenir le code source ?"
@@ -1040,6 +1056,12 @@
"hideSegment": {
"message": "Cacher le segment"
},
"skipSegment": {
"message": "Passer le segment"
},
"playChapter": {
"message": "Jouer le chapitre"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Utilisez la molette de votre souris en survolant la boîte d'édition pour ajuster rapidement le minutage. Les combinaisons de touches ctrl ou maj peuvent être utilisées pour affiner les modifications."
},
@@ -1134,10 +1156,6 @@
"selectYourCountry": {
"message": "Sélectionne ton pays"
},
"alreadyDonated": {
"message": "Si tu as fait un don de n'importe quel montant avant, tu peux avoir un accès gratuit en envoyant un e-mail :",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Si vous ne pouvez pas vous permettre d'acheter une licence, cliquez sur {here} pour voir si vous êtes admissible à une réduction",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1157,13 +1175,6 @@
"enterLicenseKey": {
"message": "Entrer la clé de licence"
},
"chaptersPage1": {
"message": "La fonctionnalité participative des chapitres de SponsorBlock n'est disponible que pour les personnes qui achètent une licence, ou pour les personnes qui en ont l'accès gratuitement grâce à leurs contributions passées"
},
"chapterNewFeature": {
"message": "Nouvelle fonctionnalité : Chapitres personnalisés crowd-sourcés. Ce sont des sections dans les vidéos avec un nom personnalisé qui s'améliore au fur et à mesure. Achetez une licence pour voir les chapitres soumis sur cette vidéo tels que: ",
"description": "After the comma, a list of chapters for this video will appear"
},
"unsubmittedSegmentCounts": {
"message": "Vous avez actuellement {0} sur {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1218,5 +1229,8 @@
},
"exportSegmentsAsURL": {
"message": "Partager un URL"
},
"allowScrollingToEdit": {
"message": "Autoriser l'utilisation de la molette pour modifier les temps"
}
}

View File

@@ -25,6 +25,19 @@
"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": "הצבע לדיווח הזה"
},
@@ -83,13 +96,13 @@
"message": "מקטע נגמר עכשיו"
},
"sponsorCancel": {
"message": "ביטול יצירת מקטע"
"message": "ביטול יצירת קטע"
},
"noVideoID": {
"message": "לא נמצא סרטון יוטיוב.\nאם זה לא נכון, רענן את הכרטיסייה."
},
"refreshSegments": {
"message": "רענן מקטעים"
"message": יענון קטעים"
},
"success": {
"message": "הצלחה!"
@@ -103,6 +116,9 @@
"connectionError": {
"message": "התקבלה שגיאת חיבור. קוד השגיאה: "
},
"segmentsStillLoading": {
"message": "קטעים עדיין נטענים..."
},
"clearTimes": {
"message": "נקה מקטעים"
},
@@ -112,8 +128,14 @@
"closePopup": {
"message": "סגור חלון"
},
"SubmitTimes": {
"message": "הגש מקטעים"
"closeIcon": {
"message": "סגירת סמליל"
},
"OpenSubmissionMenu": {
"message": "פתיחת תפריט הגשה"
},
"sortSegments": {
"message": "מיון מקטעים"
},
"submitCheck": {
"message": "אתה בטוח שאתה רוצה להזין את זה?"
@@ -147,43 +169,43 @@
"message": "רמז: אתה יכול להגדיר קיצורים מהמקלדת דרך תפריט אפשרויות כדי להזין זמנים"
},
"clearTimesButton": {
"message": קה זמנים"
},
"submitTimesButton": {
"message": "הגש זמנים"
"message": יקוי זמנים"
},
"publicStats": {
"message": "זה משומש בעמוד הסטטים הפומביים כדי להראות כמה תרמת. צפה בזה"
"message": "זה משמש בדף הסטטיסטיקה הציבורי כדי להראות כמה תרמת. ניתן לצפות בזה"
},
"Username": {
"message": "שם משתמש"
},
"setUsername": {
"message": "הגדר שם משתמש"
"message": "הגדרת שם משתמש"
},
"copyPublicID": {
"message": "העתק קוד משתמש פומבי"
"message": "העתקת מזהה משתמש פומבי"
},
"copySegmentID": {
"message": "העתקת מזהה מקטע"
},
"discordAdvert": {
"message": "הצטרף לשרת הדיסקורד הרשמי כדי לביא הצעות וחוות דעת!"
"message": "הצטרפות לשרת הדיסקורד הרשמי כדי לביא הצעות וחוות דעת!"
},
"hideThis": {
"message": "הסתר"
"message": "להסתיר את זה"
},
"Options": {
"message": "אפשרויות"
},
"showButtons": {
"message": ראה כפתורים על הנגן של יוטיוב"
"message": צגת כפתורים על הנגן של יוטיוב"
},
"hideButtons": {
"message": "הסתר כפתורים על הנגן של יוטיוב"
"message": "הסתרת כפתורים על הנגן של יוטיוב"
},
"hideButtonsDescription": {
"message": "זה מחביא את הכפתורים שמופיעים בנגן YouTube להגיש מקטעי דילוג."
},
"showSkipButton": {
"message": "השאר את כפתור הדילוג לשיא הסרטון על הנגן באופן קבוע"
"message": "השארת כפתור הדילוג להדגשה על הנגן"
},
"showInfoButton": {
"message": "הראה כפתור מידע בנגן YouTube"
@@ -192,16 +214,55 @@
"message": "החבא כפתור מידע בנגן YouTube"
},
"autoHideInfoButton": {
"message": "הסתר אוטומטית כפתורי אינפורמציה"
"message": "הסתרה אוטומטית של כפתורי אינפורמציה"
},
"hideDeleteButton": {
"message": "הסתר כפתור מחיקה על הנגן של יוטיוב"
"message": "הסתרת כפתור מחיקה על הנגן של יוטיוב"
},
"showDeleteButton": {
"message": "הצג כפתור מחיקה על הנגן של יוטיוב"
"message": "הצגת כפתור מחיקה על הנגן של יוטיוב"
},
"enableViewTracking": {
"message": "אפשר מעקב ספירת דילוגים"
},
"whatViewTracking": {
"message": "הפיצ'ר הזה עוקב אחרי מקטעים שדילגת עליהם בכדי ליידע משתמשים אחרים כמה ההגשות שלך עזרו לאחרים ושומשו כמטריקה יחד עם ההצבעות בעד בכדי להבטיח שלא ייכנס ספאם אל תוך המערכת. ההרחבה שולחת הודעה לשרת בכל פעם שאתה מדלג על מקטע. התקווה היא שרוב האנשים לא ישנו את ההגדרה הזו כדי שהמספרי צפייה יהיו מדוייקים :)"
"message": "תכונה זו עוקבת אחר אילו מקטעים דילגת כדי לאפשר למשתמשים לדעת עד כמה ההגשה שלהם עזרה לאחרים והשתמשה כמדד יחד עם הצבעות בעד כדי להבטיח שספאם לא ייכנס למסד הנתונים. התוסף שולח הודעה לשרת בכל פעם שאתה מדלג על קטע. אני מקווה שרוב האנשים לא ישנו את ההגדרה הזו כדי שמספרי התצוגה יהיו מדויקים. :)"
},
"enableViewTrackingInPrivate": {
"message": "אפשר מעקב ספירת דילוגים בכרטיסיות גלישה פרטית/גלישה בסתר"
},
"enableTrackDownvotes": {
"message": "שמור דירוג קטעים"
},
"whatTrackDownvotes": {
"message": "כל קטע שידורג על ידך יישאר חבוי, גם לאחר רענון"
},
"trackDownvotesWarning": {
"message": "אזהרה: ביטול השמירה ימחק את הדירוגים שנשמרו"
},
"whatQueryByHashPrefix": {
"message": "במקום לבקש מקטעים מהשרת לפי מזהה סרטון, נשלחים ארבעת התווים הראשונים של ה-hash של מזהה הסרטון. שרת זה ישלח בחזרה נתונים לכל הסרטונים עם hash מתאים."
},
"enableRefetchWhenNotFound": {
"message": "השג מקטעים של סרטונים חדשים"
},
"whatRefetchWhenNotFound": {
"message": "אם הסרטון חדש, ואין בו אף מקטע, הוא יחפש מחדש מקטעים כל כמה דקות בהן תצפה/י בסרטון."
},
"enableShowCategoryWithoutPermission": {
"message": "הצג קטגוריה בתפריט ההגשה גם ללא הרשאת הגשה"
},
"whatShowCategoryWithoutPermission": {
"message": "ישנן קטגוריות שדורשות הרשאת הגשה בגלל דרישות מינימום נקודות רפוטציה"
},
"showNotice": {
"message": "הראה הודעה שוב"
},
"showSkipNotice": {
"message": "הצג הודעה לאחר דילוג על מקטע"
},
"showCategoryGuidelines": {
"message": "הצג עזרה לקטגוריה"
},
"website": {
"message": "אתר",
@@ -211,18 +272,70 @@
"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": לג"
"message": ילוג"
},
"mute": {
"message": "השתק"
"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": "דקה"
},
@@ -252,35 +365,38 @@
"add": {
"message": "הוסף"
},
"showUploadButton": {
"message": "הצגת כפתור העלאה"
},
"save": {
"message": "שמור"
"message": "שמירה"
},
"reset": {
"message": "אתחל"
"message": יתחול"
},
"exportOptionsCopy": {
"message": "ערוך/העתק"
"message": "עריכה/העתקה"
},
"exportOptionsDownload": {
"message": "שמור לקובץ"
"message": "שמירה לקובץ"
},
"exportOptionsUpload": {
"message": "טען מקובץ"
"message": "טעינה מקובץ"
},
"setOptions": {
"message": "הגדר אפשרויות"
"message": "הגדרת אפשרויות"
},
"confirmNoticeTitle": {
"message": "הגש מקטע"
"message": "הגשת מקטע"
},
"submit": {
"message": "הגש"
"message": "הגשה"
},
"cancel": {
"message": "ביטול"
},
"delete": {
"message": "מחק"
"message": "מחיקה"
},
"preview": {
"message": "תצוגה מקדימה"
@@ -289,7 +405,7 @@
"message": "לא מוגש"
},
"inspect": {
"message": "סקור"
"message": "סקירה"
},
"edit": {
"message": "עריכה"
@@ -298,12 +414,19 @@
"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": "מוזיקה: קטעים ללא מוזיקה"
},
@@ -313,17 +436,29 @@
"category_poi_highlight": {
"message": "קטע חשוב"
},
"category_chapter": {
"message": "פרק"
},
"autoSkip": {
"message": "דילוג אוטומטי"
},
"manualSkip": {
"message": לג ידנית"
"message": ילוג ידני"
},
"showOverlay": {
"message": "הראה בטיימליין"
"message": "הראה בשורת חיפוש"
},
"disable": {
"message": "מושבת"
},
"showOverlay_POI": {
"message": "הראה בטיימליין"
"message": "הראה בשורת חיפוש"
},
"showOverlay_full": {
"message": "הצגת תוית"
},
"showOverlay_chapter": {
"message": "הצגת פרקים"
},
"category": {
"message": "קטגוריה"
@@ -339,16 +474,23 @@
"message": "עוד קטגוריות"
},
"chooseACategory": {
"message": "בחר קטגוריה"
"message": "בחירת קטגוריה"
},
"bracketEnd": {
"message": "(סוף)"
},
"End": {
"message": "סוף",
"description": "Button that skips to the end of a segment"
},
"downvoteDescription": {
"message": "זמן שגוי/לא נכון"
},
"incorrectVote": {
"message": "שגוי"
},
"incorrectCategory": {
"message": נה קטגוריה"
"message": ינוי קטגוריה"
},
"multipleSegments": {
"message": "מספר מקטעים"
@@ -375,22 +517,34 @@
"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": "הסתר לעד"
"message": "הסתרה לעד"
},
"questionButton": {
"message": "יש לי שאלה נוספת"
},
"warningConfirmButton": {
"message": "הבנתי את הסיכונים"
},
"warningError": {
"message": "שגיאה בעת ניסיון לאשר אזהרה:"
},
"Donate": {
"message": "תרום"
"message": "תרומה"
},
"considerDonating": {
"message": "עזרו לממן את הפיתוח"
},
"hideDonationLink": {
"message": "הסתר כפתור תרומה"
"message": "הסתרת כפתור תרומה"
},
"darkModeOptionsPage": {
"message": "מצב כהה בדף האפשרויות"
},
"helpPageThanksForInstalling": {
"message": "תודה שהתקנת את ספונסרבלוק."
},
"helpPageReviewOptions": {
"message": "אנא סקור את האפשרויות הבאות"
"message": "נא לסקור את האפשרויות הבאות"
},
"helpPageHowSkippingWorks": {
"message": "כיצד דילוג עובד"
@@ -419,15 +573,39 @@
"LearnMore": {
"message": "למידע נוסף"
},
"FullDetails": {
"message": "פרטים מלאים"
},
"CopyDownvoteButtonInfo": {
"message": "הצבעה שלילית ויצירת עותק מקומי שניתן לשלוח מחדש"
},
"OpenCategoryWikiPage": {
"message": "פתיחת דף הוויקי של קטגוריה זו."
},
"CopyAndDownvote": {
"message": "העתק ועשה דיסלייק"
"message": "העתקה ודירוג שלילי"
},
"ContinueVoting": {
"message": "המשך להצביע"
"message": "המשך הצבעה"
},
"ChangeCategoryTooltip": {
"message": "זה מיידית ישפיע על כל המקטעים שלך"
},
"downvote": {
"message": "דירוג שלילי"
},
"upvote": {
"message": "דירוג חיובי"
},
"hideSegment": {
"message": "הסתרת מקטע"
},
"skipSegment": {
"message": "דילוכ מקטע"
},
"playChapter": {
"message": "הפעלת פרק"
},
"SponsorTimeEditScrollNewFeature": {
"message": "השתמש בגלגלת בזמן שהעכבר מעל הזמן בשלב העריכה על מנת לשנות את הזמן יותר מהר. שילוב של הלחצן Ctrl/Shift יכולים לשנות את מהירות השינוי."
},
@@ -435,11 +613,11 @@
"message": "חדש! ראה מתי וידאו בשלמותו הוא פרסומת או פרסום עצמי"
},
"dayAbbreviation": {
"message": "ימים",
"message": "י",
"description": "100d"
},
"hourAbbreviation": {
"message": עות",
"message": '",
"description": "100h"
},
"optionsTabBehavior": {
@@ -458,6 +636,18 @@
"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": "לא הוגדר"
},
@@ -466,5 +656,122 @@
},
"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": "בחירת מדינתך"
},
"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": "הזנת מפתח רישיון"
},
"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": "שיתוף כקישור"
}
}

View File

@@ -25,24 +25,140 @@
"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": "आइकॉन बंद करें"
},
"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

@@ -113,6 +113,9 @@
"connectionError": {
"message": "Dogodija se greška u povezivanju. Kod pogreške: "
},
"segmentsStillLoading": {
"message": "Segmenti se učitavaju..."
},
"clearTimes": {
"message": "Očisti isječke"
},
@@ -122,8 +125,8 @@
"closePopup": {
"message": "Zatvori izbornik"
},
"SubmitTimes": {
"message": "Podnesi isječke"
"closeIcon": {
"message": "Ikona za zatvaranje"
},
"sortSegments": {
"message": "Razvrstaj isječke"
@@ -162,9 +165,6 @@
"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"
},
@@ -384,13 +384,10 @@
"message": "Provjerite status.sponsor.ajay.app za status poslužitelja."
},
"changeUserID": {
"message": "Uvezi/Izvezi svoj korisnički ID"
"message": "Uvezi/Izvezi svoj privatni UserID"
},
"setUserID": {
"message": "Postavi UserID"
},
"userIDChangeWarning": {
"message": "Oprez: Promjena UserID-a je trajna. Jesi li siguran da želiš ovo napraviti? Napravi kopiju starog UserID-a za svaki slučaj."
"message": "Postavi Privatni UserID"
},
"createdBy": {
"message": "Izradio"
@@ -491,6 +488,12 @@
"edit": {
"message": "Uredi"
},
"copyDebugInformation": {
"message": "Kopiraj Informaciju Za Otklanjanje Pogrešaka U Međuspremnik"
},
"copyDebugInformationFailed": {
"message": "Pisanje u međuspremnik nije uspjelo"
},
"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. "
},
@@ -526,6 +529,9 @@
"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_selfpromo_guideline1": {
"message": "Donacije, članarine i roba"
},
"category_exclusive_access": {
"message": "Eksluzivni pristup"
},
@@ -547,6 +553,9 @@
"category_intro_short": {
"message": "Stanka"
},
"category_intro_guideline1": {
"message": "Interval bez stvarnog sadržaja"
},
"category_outro": {
"message": "Završni kadrovi/Zasluge"
},
@@ -556,6 +565,9 @@
"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": {
"message": "Nepotrebna Popuna/Šale"
},
"category_filler_short": {
"message": "Popuna"
},
@@ -656,6 +668,9 @@
"message": "Kraj",
"description": "Button that skips to the end of a segment"
},
"hiddenDueToDuration": {
"message": "sakriveno: redak je prekratak"
},
"manuallyHidden": {
"message": "ručno skriveno"
},
@@ -710,15 +725,33 @@
"hideForever": {
"message": "Sakrij zauvijek"
},
"warningChatInfo": {
"message": "Primjetili smo da ste radili neke uobičajene pogreške. Mi cijenimo vaš trud, ali ovdje težimo perfekciji, pa i jako male pogreške su važne :)"
},
"warningTitle": {
"message": "Dobili ste upozorenje"
},
"questionButton": {
"message": "Imam pitanje"
},
"warningConfirmButton": {
"message": "Razumijem razlog"
},
"Donate": {
"message": "Doniraj"
},
"darkModeOptionsPage": {
"message": "Tamni Način Na Stranici Opcija"
},
"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."
},
"helpPageHowSkippingWorks": {
"message": "Kako preskakanje radi"
},
"Submitting": {
"message": "Slanje"
},
@@ -752,9 +785,18 @@
"ChangeCategoryTooltip": {
"message": "Ovo će se odmah primijeniti na vaše isječke"
},
"downvote": {
"message": "Glasaj protiv"
},
"upvote": {
"message": "Glasaj za"
},
"hideSegment": {
"message": "Sakri odsječak"
},
"skipSegment": {
"message": "Preskoči odsječak"
},
"dayAbbreviation": {
"message": "d",
"description": "100d"
@@ -839,10 +881,6 @@
"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."
@@ -861,5 +899,28 @@
},
"enterLicenseKey": {
"message": "Upiši licencni ključ"
},
"videosSingular": {
"message": "video",
"description": "Example: You currently have 3 unsubmitted segments on 1 *video*"
},
"videosPlural": {
"message": "videa",
"description": "Example: You currently have 12 unsubmitted segments on 5 *videos*"
},
"videoID": {
"message": "ID videa",
"description": "Header of the unsubmitted segments list"
},
"segmentCount": {
"message": "Broj segmenata",
"description": "Header of the unsubmitted segments list"
},
"actions": {
"message": "Radnje",
"description": "Header of the unsubmitted segments list"
},
"exportSegmentsAsURL": {
"message": "Dijeli kao URL"
}
}

View File

@@ -35,6 +35,9 @@
"message": "Szegmensek megjelenítése fejezetekként",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Aktuális szegmens megjelenítése a videó ideje mellett"
},
"upvoteButtonInfo": {
"message": "Részlet felszavazása"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Kapcsolódási probléma merült fel. Hibakód: "
},
"segmentsStillLoading": {
"message": "Szegmensek betöltése folyamatban..."
},
"clearTimes": {
"message": "Szegmensek törlése"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Felugró ablak bezárása"
},
"SubmitTimes": {
"message": "Szegmensek beküldése"
"closeIcon": {
"message": "Bezárás ikon"
},
"OpenSubmissionMenu": {
"message": "Beküldés menü megnyitása"
},
"sortSegments": {
"message": "Szegmensek rendezése"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Időpontok törlése"
},
"submitTimesButton": {
"message": "Időpontok beküldése"
},
"publicStats": {
"message": "Ez a nyilvános ranglistán használatos, ami mutatja, mennyit segítettél. Nézd meg"
},
@@ -415,16 +421,16 @@
"message": "A szerver állapotához tekintsd meg a status.sponsor.ajay.app oldalt."
},
"changeUserID": {
"message": "UserID importálása / exportálása"
"message": "Titkos UserID importálása / exportálása"
},
"whatChangeUserID": {
"message": "Ez privát információnak minősül. Ez olyan, mint egy jelszó, így nem ajánlott megosztani senkivel. Ha valakinek birtokában van, megszemélyesíthet téged. Ha a nyilvános userID-dat keresed, kattints a vágólap ikonra a felugró ablakban."
},
"setUserID": {
"message": "UserID beállítása"
"message": "Titkos UserID beállítása"
},
"userIDChangeWarning": {
"message": "Figyelem: A UserID megváltoztatása végleges. Biztosan szeretnéd megtenni? Minden esetben készíts biztonsági másolatot a régiről!"
"message": "Figyelem: A Titkos UserID megváltoztatása végleges. Biztosan szeretnéd megtenni? Minden esetben készíts biztonsági másolatot a régiről!"
},
"createdBy": {
"message": "Készítette"
@@ -433,7 +439,7 @@
"message": "Harmadik fél Youtube oldalainak támogatása"
},
"supportOtherSitesDescription": {
"message": "Harmadik fél YouTube oldalainak támogatása. A támogatás bekapcsolásához el kell fogadnod az extra engedélyeket. NEM működik inkognitó módban Chrome-ban és egyéb Chromium változatokban.",
"message": "Harmadik fél YouTube klienseineik támogatása. A támogatáshoz el kell fogadni az extra engedélyeket.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -524,7 +530,7 @@
"message": "Betöltés fájlból"
},
"whatExportOptions": {
"message": "Ez az összes beállításod JSON formátumban. Ebbe bele tartozik a userID-d is, úgyhogy csak elővigyázatosan oszd meg."
"message": "Ez az összes beállításod JSON formátumban. Ebbe bele tartozik a Titkos UserID-d is, úgyhogy csak elővigyázatosan oszd meg."
},
"setOptions": {
"message": "Beállítások módosítása"
@@ -689,7 +695,7 @@
"message": "Témától eltérő töltelék/viccek"
},
"category_filler_description": {
"message": "Csak töltelékként, vagy humornak hozzáadott részek, amik nem szükségesek a videó fő tartalmának megértéséhez. Ne tartalmazzon olyan szegmenseket, amik kontextust, vagy alapvető információkat szolgáltatnak."
"message": "Csak töltelékként, vagy humornak hozzáadott részek, amik nem szükségesek a videó fő tartalmának megértéséhez. Ne tartalmazzon olyan szegmenseket, amik kontextust, vagy alapvető információkat szolgáltatnak\". Ez egy nagyon agresszív kategória arra, amikor nincs kedved a \"szórakozáshoz\"."
},
"category_filler_short": {
"message": "Töltelék"
@@ -791,6 +797,10 @@
"message": "Mutasson egy ikont, amikor egy videó egésze reklám",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Címkék megjelenítése a videók indexképein is",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Beküldetlen színe",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -933,7 +943,7 @@
"message": "Eltüntetés örökre"
},
"warningChatInfo": {
"message": "Észrevettük, hogy néhány nem rossz szándékú, gyakran előforduló hibát ejtettél"
"message": "Észrevettük, hogy néhány gyakran előforduló hibát vétettél. Nagyra értékeljük az eddigi munkádat, de a tökéletességre törekszünk, úgyhogy a legkisebb hibák is számítanak :)"
},
"warningTitle": {
"message": "Figyelmeztetést kaptál"
@@ -1046,6 +1056,12 @@
"hideSegment": {
"message": "Szegmens elrejtése"
},
"skipSegment": {
"message": "Szegmens átugrása"
},
"playChapter": {
"message": "Fejezet lejátszása"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Használd egérgörgődet a szerkesztő mező fölött, hogy gyorsan módosíthasd az időt. A ctrl vagy shift billentyűk kombinációjával finomhangolhatod a változás mértékét."
},
@@ -1140,10 +1156,6 @@
"selectYourCountry": {
"message": "Válaszd ki az országodat"
},
"alreadyDonated": {
"message": "Ha korábban már támogattad a bővítményt, kérhetsz ingyenes hozzáférést emailben:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Ha nem engedheted meg magadnak a licenc megvásárlását, kattints {ide}, hogy megtudd, jogosult vagy-e kedvezményre",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1163,17 +1175,6 @@
"enterLicenseKey": {
"message": "Add meg a licenc kulcsot"
},
"chaptersPage1": {
"message": "A SponsorBlock közösség által karbantartott fejezetek funkció csak azok számára érhető el, akik licencet vásárolnak, vagy ingyenes hozzáférést kaptak múltbeli hozzájárulásaikért"
},
"chaptersPage2": {
"message": "Fontos: A fejezetek beküldésére való engedély még mindig a számolt hírnévtől függ. A megvásárolt licenc csak a mások által beküldött fejezetek megtekintésére vonatkozik.",
"description": "On the chapters page for getting access to the paid chapters feature"
},
"chapterNewFeature": {
"message": "Új funkció: Közösség által karbantartott fejezetek. Ezek egyedileg elnevezett részei a videóknak, amiket egymásba is lehet ágyazni, hogy egyre pontosabbak lehessenek. Vásárolj licencet, hogy láthasd az ezen a videón beküldött fejezeteket, mint: ",
"description": "After the comma, a list of chapters for this video will appear"
},
"unsubmittedSegmentCounts": {
"message": "Jelenleg {0} van {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1228,5 +1229,11 @@
},
"exportSegmentsAsURL": {
"message": "Megosztás linkként"
},
"segmentFetchFailureWarning": {
"message": "Figyelem: A szerver még nem válaszolt szegmensekkel. Elképzelhető, hogy már vannak beküldött szegmensek ezen a videón, csak még nem töltődtek be szerver-problémák miatt."
},
"allowScrollingToEdit": {
"message": "Görgő használatának engedélyezése az idők szerkesztéséhez"
}
}

View File

@@ -25,6 +25,19 @@
"Segments": {
"message": "segmen"
},
"SegmentsCap": {
"message": "Segmen"
},
"Chapters": {
"message": "Bab"
},
"renderAsChapters": {
"message": "Jadikan segmen sebagai bab",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Tampilkan Segmen Saat Ini di Samping Waktu Video"
},
"upvoteButtonInfo": {
"message": "Upvote submisi ini"
},
@@ -103,6 +116,9 @@
"connectionError": {
"message": "Kesalahan koneksi terjadi. Kode kesalahan: "
},
"segmentsStillLoading": {
"message": "Segmen masih dimuat..."
},
"clearTimes": {
"message": "Hapus Segmen"
},
@@ -112,8 +128,11 @@
"closePopup": {
"message": "Tutup Popup"
},
"SubmitTimes": {
"message": "Kirim Segmen"
"closeIcon": {
"message": "Tutup Ikon"
},
"sortSegments": {
"message": "Urutkan Segmen"
},
"submitCheck": {
"message": "Apakah anda yakin ingin mengirim ini?"
@@ -149,9 +168,6 @@
"clearTimesButton": {
"message": "Hapus Waktu"
},
"submitTimesButton": {
"message": "Kirim Waktu"
},
"publicStats": {
"message": "Ini digunakan di halaman statistik publik untuk menampilkan berapa banyak anda berkontribusi. Lihat disini"
},
@@ -186,7 +202,7 @@
"message": "Ini akan menyembunyikan tombol yang muncul di pemutar YouTube untuk mengirimkan segmen yang dilewati."
},
"showSkipButton": {
"message": "Tetap lewati ke tombol Highlight di Pemutar"
"message": "Biarkan Tombol Lewati ke Sorotan Tetap Tampil di Pemutar"
},
"showInfoButton": {
"message": "Tampilkan Tombol Info Di Pemutar Video YouTube"
@@ -233,6 +249,12 @@
"whatRefetchWhenNotFound": {
"message": "Jika ini merupakan video baru, dan tidak ada segmen yang ditemukan, SponsorBlock akan terus merefetch setiap beberapa menit saat anda menonton."
},
"enableShowCategoryWithoutPermission": {
"message": "Tampilkan kategori di dalam menu submisi bahkan tanpa izin submisi"
},
"whatShowCategoryWithoutPermission": {
"message": "Beberapa kategori memerlukan izin untuk mengirim karena persyaratan reputasi minimum"
},
"showNotice": {
"message": "Tampilkan Pemberitahuan Lagi"
},
@@ -243,19 +265,19 @@
"message": "Tampilkan Bantuan Kategori"
},
"noticeVisibilityMode0": {
"message": "Lewati maklumat ukuran penuh"
"message": "Pemberitahuan Lewati Ukuran Penuh"
},
"noticeVisibilityMode1": {
"message": "Maklumat lewati kecil untuk lewati otomatis"
"message": "Pemberitahuan Lewati Kecil untuk Lewati Otomatis"
},
"noticeVisibilityMode2": {
"message": "Lewati semua maklumat kecil"
"message": "Semua Pemberitahuan Lewati Kecil"
},
"noticeVisibilityMode3": {
"message": "Pudar maklumat lewati untuk semua lewati otomatis"
"message": "Pemberitahuan Lewati Pudar untuk Lewati Otomatis"
},
"noticeVisibilityMode4": {
"message": "Lewati semua maklumat pudar"
"message": "Semua Pemberitahuan Lewati Pudar"
},
"longDescription": {
"message": "SponsorBlock membuat anda melewati sponsor, intro, outro, pengingat berlangganan dan segmen mengganggu lainnya di video YouTube. SponsorBlock adalah ekstensi browser crowdsourced yang membolehkan siapa saja mengirim waktu awal dan akhir dari segmen sponsor dan segmen video YouTube lainnya. Setelah seseorang mengirim informasi ini, orang lain yang memakai ekstensi ini akan melewati segmen sponsor di video yang sama. Anda juga dapat melewati bagian non-musik di musik video.",
@@ -289,6 +311,14 @@
"message": "Kirim segmen",
"description": "Keybind label"
},
"nextChapterKeybind": {
"message": "Bab selanjutnya",
"description": "Keybind label"
},
"previousChapterKeybind": {
"message": "Bab sebelumnya",
"description": "Keybind label"
},
"keybindDescription": {
"message": "Pilih sebuah tombol dengan mengetikkannya dan pilih tombol modifier apa saja yang Anda ingin gunakan."
},
@@ -388,16 +418,16 @@
"message": "Cek status.sponsor.ajay.app untuk status server."
},
"changeUserID": {
"message": "Impor/Ekspor UserID"
"message": "Impor/Ekspor UserID Pribadi Anda"
},
"whatChangeUserID": {
"message": "Ini harus dirahasiakan. Ini seperti kata sandi dan tidak boleh dibagikan kepada siapa pun. Jika seseorang mempunyai ini, mereka bisa menyamar jadi anda. Jika anda mencari UserID publik anda, klik ikon papan tulis di popup."
"message": "Ini harus dirahasiakan. Ini seperti kata sandi dan tidak boleh dibagikan kepada siapa pun. Jika seseorang mempunyai ini, mereka bisa menyamar jadi Anda. Jika Anda mencari userID publik Anda, klik ikon papan tulis di popup."
},
"setUserID": {
"message": "Atur UserID"
"message": "Atur UserID pribadi"
},
"userIDChangeWarning": {
"message": "Peringatan: Pengubahan UserID bersifat permanen. Apakah anda yakin ingin melakukan ini? Pastikan kamu sudah mencadangkan yang lama untuk berjaga."
"message": "Peringatan: Mengubah UserID Pribadi bersifat permanen. Apakah Anda yakin ingin melakukan ini? Pastikan Anda telah mencadangkan yang lama untuk berjaga-jaga."
},
"createdBy": {
"message": "Dibuat Oleh"
@@ -405,10 +435,6 @@
"supportOtherSites": {
"message": "Dukung Situs Youtube Pihak Ketiga"
},
"supportOtherSitesDescription": {
"message": "Dukung klien YouTube pihak ketiga. Untuk mengaktifkan dukungan, anda harus menerima izin tambahan. Ini tidak akan bekerja di Mode Samaran di Chrome dan varian Chromium lainnya.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
"message": "Situs yang didukung: "
},
@@ -442,6 +468,9 @@
"minDurationDescription": {
"message": "Segmen yang lebih kecil dari nilai yang diatur tidak akan dilewati atau tampil di pemutar."
},
"enableManualSkipOnFullVideo": {
"message": "Gunakan lewati manual jika ada label seluruh video"
},
"whatManualSkipOnFullVideo": {
"message": "Untuk yang ingin menonton video tanpa gangguan jika sepenuhnya disponsori atau promosi sendiri."
},
@@ -494,7 +523,7 @@
"message": "Muat dari file"
},
"whatExportOptions": {
"message": "Ini adalah seluruh konfigurasi anda di JSON. Ini mencakup userID anda, maka pastikan anda membagikan ini dengan bijak."
"message": "Ini adalah seluruh konfigurasi Anda di JSON. Ini mencakup UserID Pribadi Anda, maka pastikan Anda membagikan ini dengan bijak."
},
"setOptions": {
"message": "Atur Opsi"
@@ -548,6 +577,10 @@
"message": "sampai",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"CopiedExclamation": {
"message": "Tersalin!",
"description": "Used after something has been copied to the clipboard. Example: 'Copied!'"
},
"generic_guideline1": {
"message": "Tampilkan transisi segue"
},
@@ -639,6 +672,9 @@
"category_preview": {
"message": "Pratinjau/Rekap"
},
"category_preview_description": {
"message": "Koleksi klip yang menampilkan hal yang akan hadir di video ini atau video lain dalam suatu seri, di mana segala informasinya diulang dalam video tersebut."
},
"category_preview_guideline1": {
"message": "Klip yang ditampilkan nanti, atau di video di masa mendatang"
},
@@ -652,7 +688,7 @@
"message": "Pengisi Tak berkaitan/Lawakan"
},
"category_filler_description": {
"message": "Adegan tangensial ditambahkan hanya untuk pengisi atau humor yang tidak diperlukan untuk memahami isi utama video. Ini tidak boleh mencakup segmen yang memberikan detail konteks atau latar belakang."
"message": "Adegan tangensial ditambahkan hanya untuk pengisi atau humor yang tidak diperlukan untuk memahami isi utama video. Ini tidak boleh mencakup segmen yang memberikan detail konteks atau latar belakang. Ini adalah kategori sangat agresif yang ditujukan saat Anda tidak sedang ingin \"bersenang-senang\"."
},
"category_filler_short": {
"message": "Isian"
@@ -696,6 +732,21 @@
"category_poi_highlight_guideline3": {
"message": "Dapat melewati ke judul atau thumbnail"
},
"category_chapter": {
"message": "Bab"
},
"category_chapter_description": {
"message": "Bab bernama khusus yang menjelaskan bagian utama video."
},
"category_chapter_guideline1": {
"message": "Jangan menyebutkan nama merek sponsor"
},
"category_chapter_guideline2": {
"message": "Gunakan bab yang lebih besar untuk bagian umum"
},
"category_chapter_guideline3": {
"message": "Bab yang lebih kecil dapat ditempatkan di dalam yang lebih besar"
},
"category_livestream_messages": {
"message": "Livestream: Baca Pesan/Donasi"
},
@@ -726,6 +777,9 @@
"showOverlay_full": {
"message": "Tampilkan Label"
},
"showOverlay_chapter": {
"message": "Tampilkan Bab"
},
"autoSkipOnMusicVideos": {
"message": "Lewati semua segmen secara otomatis ketika ada segmen non-music"
},
@@ -781,6 +835,10 @@
"bracketEnd": {
"message": "(Selesai)"
},
"End": {
"message": "Akhir",
"description": "Button that skips to the end of a segment"
},
"hiddenDueToDownvote": {
"message": "disembunyikan: voting rendah"
},
@@ -794,6 +852,9 @@
"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": "ID Channel belum dimuat. Apabila anda menggunakan video yang tersematkan, coba menggunakan halaman utama YouTube. Hal ini juga dapat disebabkan oleh perubahan yang ada pada tampilan YouTUbe, apabila anda mengira seperti itu, buat komentar disini:"
},
"invidiousPermissionRefresh": {
"message": "Peramban telah mencabut izin yang diperlukan untuk berfungsi di Invidious dan situs pihak ketiga lainnya. Klik tombol di bawah untuk mengaktifkan kembali izin ini."
},
"acceptPermission": {
"message": "Terima permintaan izin"
},
@@ -818,6 +879,13 @@
"downvoteDescription": {
"message": "Salah, Waktu Tidak Tepat"
},
"incorrectVote": {
"message": "Salah"
},
"harmfulVote": {
"message": "Berbahaya",
"description": "Used for chapter segments when the text is harmful/offensive to remove it faster"
},
"incorrectCategory": {
"message": "Ubah Kategori"
},
@@ -853,6 +921,9 @@
"categoryPillTitleText": {
"message": "Seluruh video ini ditandai sebagai kategori ini dan terlalu terintegrasi untuk dapat dipisahkan"
},
"chapterNameTooltipWarning": {
"message": "Salah satu nama bab Anda mirip dengan sebuah kategori. Anda harus menggunakan kategori jika memungkinkan sebagai gantinya."
},
"experiementOptOut": {
"message": "Tidak ikut eksperimen masa depan",
"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."
@@ -860,6 +931,21 @@
"hideForever": {
"message": "Sembunyikan selamanya"
},
"warningChatInfo": {
"message": "Kami perhatikan Anda membuat beberapa kesalahan umum. Kami hargai sekali yang Anda kerjakan sejauh ini, tapi di sini kami berjuang mencapai sempurna, sehingga kesalahan sangat kecil pun berarti :)"
},
"warningTitle": {
"message": "Anda mendapatkan peringatan"
},
"questionButton": {
"message": "Saya memiliki pertanyaan"
},
"warningConfirmButton": {
"message": "Saya mengerti alasannya"
},
"warningError": {
"message": "Terjadi kesalahan ketika mengakui peringatan:"
},
"Donate": {
"message": "Donasi"
},
@@ -879,16 +965,16 @@
"message": "Haram ditinjau opsi di bawah ini"
},
"helpPageFeatureDisclaimer": {
"message": "Banyak fitur yang dinonaktifkan secara bawaan. Jika kamu ingin lewati mula, akhir, gunakan Invidious, dll, aktifkan mereka dibawah ini.\nKamu bisa menyembunyikan/menghadirkan elemen UI."
"message": "Banyak fitur yang dinonaktifkan secara bawaan. Jika Anda ingin melewati intro, outro, mengunakan Invidious, dll, aktifkan mereka dibawah ini. Anda juga bisa menyembunyikan/menampilkan elemen UI."
},
"helpPageHowSkippingWorks": {
"message": "Cara kerja melewati segmen"
},
"helpPageHowSkippingWorks1": {
"message": "Segmen video akan otomatis dilewati jika ditemukan di databasis. Kamu bisa buka munculan dengan klik ikon ekstensi untuk mendapatkan pratinjau apa adanya."
"message": "Segmen video akan otomatis dilewati jika ditemukan di basis data. Anda bisa mumbuka popup dengan mengklik ikon ekstensi untuk mendapatkan pratinjau tersebut."
},
"helpPageHowSkippingWorks2": {
"message": "Kapanpun kamu melewati segmen, kamu akan mendapatkan maklumat. Jika waktu terlihat salah dapat menyuarakan turun dengan klik turun-suara! Kamu juga bisa menyuarakan di maklumat."
"message": "Kapanpun Anda melewati segmen, Anda akan mendapatkan pemberitahuan. Jika pengaturan waktu terlihat salah tolak dengan mengklik jempol bawah! Anda juga dapat memilih dalam popup."
},
"Submitting": {
"message": "Mengirim"
@@ -959,6 +1045,12 @@
"hideSegment": {
"message": "Sembunyikan segmen"
},
"skipSegment": {
"message": "Lewati segmen"
},
"playChapter": {
"message": "Mulai bab"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Gunakan roda mouse ketika berada di kotak edit untuk mengatur waktu dengan cepat. Kombinasi dengan tombol [Ctrl + Shift] bisa digunakan untuk perubahan yang halus."
},
@@ -1021,5 +1113,113 @@
},
"confirmResetToDefault": {
"message": "Apakah Anda yakin ingin mengatur ulang semua pengaturan ke nilai bawaan?\nTindakan ini tidak dapat diurungkan."
},
"exportSegments": {
"message": "Ekspor segmen"
},
"importSegments": {
"message": "Impor segmen"
},
"Import": {
"message": "Impor",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
},
"redeemSuccess": {
"message": "Penukaran Berhasil!"
},
"redeemFailed": {
"message": "Kunci lisensi tidak valid"
},
"hideUpsells": {
"message": "Sembunyikan opsi yang tidak tersedia tanpa pembayaran tambahan"
},
"chooseACountry": {
"message": "Pilih negara"
},
"noDiscount": {
"message": "Anda tidak memenuhi syarat untuk mendapatkan diskon"
},
"discountLink": {
"message": "Tautan Diskon (Lihat harga pink)"
},
"selectYourCountry": {
"message": "Pilih negaramu"
},
"cantAfford": {
"message": "Jika Anda tidak mampu membeli lisensi, klik {here} untuk melihat jika Anda memenuhi syarat untuk mendapatkan diskon",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
"message": "Masuk dengan Patreon"
},
"redeem": {
"message": "Tukar"
},
"joinOnPatreon": {
"message": "Gabung di Patreon"
},
"oneTimePurchase": {
"message": "Pembelian satu kali"
},
"enterLicenseKey": {
"message": "Masukkan Kode Lisensi"
},
"unsubmittedSegmentCounts": {
"message": "Kamu mempunyai {0} dalam {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
},
"unsubmittedSegmentCountsZero": {
"message": "Anda tidak mempunyai segmen yang belum dikirim",
"description": "Replaces 'unsubmittedSegmentCounts' string when there are no unsubmitted segments"
},
"unsubmittedSegmentsSingular": {
"message": "segmen yang belum dikirim",
"description": "Example: You currently have 1 *unsubmitted segment* on 1 video"
},
"unsubmittedSegmentsPlural": {
"message": "segmen yang belum dikirim",
"description": "Example: You currently have 12 *unsubmitted segments* on 5 videos"
},
"videosSingular": {
"message": "video",
"description": "Example: You currently have 3 unsubmitted segments on 1 *video*"
},
"videosPlural": {
"message": "video",
"description": "Example: You currently have 12 unsubmitted segments on 5 *videos*"
},
"clearUnsubmittedSegments": {
"message": "Hapus semua segmen",
"description": "Label for a button in settings"
},
"clearUnsubmittedSegmentsConfirm": {
"message": "Yakin ingin menghapus semua segmen yang belum disubmit?",
"description": "Confirmation message for the Clear unsubmitted segments button"
},
"showUnsubmittedSegments": {
"message": "Tampilkan Segmen",
"description": "Show/hide button for the unsubmitted segments list"
},
"hideUnsubmittedSegments": {
"message": "Sembunyikan segmen",
"description": "Show/hide button for the unsubmitted segments list"
},
"videoID": {
"message": "ID Video",
"description": "Header of the unsubmitted segments list"
},
"segmentCount": {
"message": "Jumlah Segmen",
"description": "Header of the unsubmitted segments list"
},
"actions": {
"message": "Tindakan",
"description": "Header of the unsubmitted segments list"
},
"exportSegmentsAsURL": {
"message": "Bagikan sebagai Tautan"
},
"allowScrollingToEdit": {
"message": "Izinkan Menggulir Untuk Menyunting Waktu"
}
}

View File

@@ -35,6 +35,9 @@
"message": "Visualizza segmenti come capitoli",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Mostra il Segmento Corrente Affianco alla Durata del Video"
},
"upvoteButtonInfo": {
"message": "Vota questo contributo"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Si è verificato un errore durante la connessione. Codice errore: "
},
"segmentsStillLoading": {
"message": "Segmenti in caricamento..."
},
"clearTimes": {
"message": "Rimuovi i segmenti"
},
@@ -122,11 +128,14 @@
"closePopup": {
"message": "Chiudi il popup"
},
"SubmitTimes": {
"message": "Invia i segmenti"
"closeIcon": {
"message": "Icona Chiudi"
},
"OpenSubmissionMenu": {
"message": "Apri Menu Invio"
},
"sortSegments": {
"message": "Ordina segmenti"
"message": "Ordina Segmenti"
},
"submitCheck": {
"message": "Sei sicuro di volerlo inviare?"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Cancella minutaggio"
},
"submitTimesButton": {
"message": "Invia minutaggio"
},
"publicStats": {
"message": "Questo è usato nelle pagine pubbliche delle statistiche per mostrare quanto hai contribuito. Vedilo"
},
@@ -229,7 +235,7 @@
"message": "Memorizza i voti negativi del segmento"
},
"whatTrackDownvotes": {
"message": "Segmenti votati negativamente rimarranno nascosti anche dopo aver ricaricato la pagina"
"message": "I segmenti votati negativamente rimarranno nascosti anche dopo aver ricaricato la pagina"
},
"trackDownvotesWarning": {
"message": "Attenzione: Disabilitarlo eliminerà tutti i voti negativi precedentemente memorizzati"
@@ -250,7 +256,7 @@
"message": "Mostra le categorie nel menu d'invio anche senza l'autorizzazione all'invio"
},
"whatShowCategoryWithoutPermission": {
"message": "Alcune categorie richiedono l'autorizzazione all'invio a causa dei requisiti di reputazione minimi"
"message": "Alcune categorie richiedono l'autorizzazione all'invio a causa dei requisiti sulla reputazione minima"
},
"showNotice": {
"message": "Mostra di nuovo l'avviso"
@@ -301,11 +307,11 @@
"description": "Keybind label"
},
"setStartSponsorShortcut": {
"message": "Inizia/Finisci segmento",
"message": "Inizio/Fine segmento",
"description": "Keybind label"
},
"setSubmitKeybind": {
"message": "Invia i segmenti",
"message": "Invia segmenti",
"description": "Keybind label"
},
"nextChapterKeybind": {
@@ -317,7 +323,7 @@
"description": "Keybind label"
},
"keybindDescription": {
"message": "Seleziona un tasto digitandolo e scegli qualsiasi tasto modificatore che desideri utilizzare."
"message": "Seleziona un tasto digitandolo e spunta qualsiasi tasto modificatore che desideri utilizzare."
},
"0": {
"message": "Timeout della connessione. Controlla la tua connessione a Internet. Se internet sta funzionando, il server è probabilmente sovraccarico oppure giù."
@@ -415,16 +421,16 @@
"message": "Controlla status.sponsor.ajay.app per lo stato del server."
},
"changeUserID": {
"message": "Importa/Esporta Il Tuo ID Utente"
"message": "Importa/Esporta il Tuo UserID Privato"
},
"whatChangeUserID": {
"message": "Questo dovrebbe esser mantenuto privato. È come una password e non dovrebbe esser condiviso con nessuno. Se qualcuno lo possiede, può impersonarti. Se stai cercando il tuo userID pubblico, clicca l'icona degli appunti nel popup."
},
"setUserID": {
"message": "Imposta ID utente"
"message": "Imposta UserID Privato"
},
"userIDChangeWarning": {
"message": "Attenzione: cambiare l'ID utente è permanente. Sei sicuro di volerlo fare? Assicurati di eseguire il backup del tuo vecchio nel caso."
"message": "Attenzione: La modifica dell'UserID Privato è permanente. Sei sicuro di volerlo fare? Assicurati di effettuare il backup di quello precedente."
},
"createdBy": {
"message": "Creato da"
@@ -433,7 +439,7 @@
"message": "Supporta siti di YouTube di terze parti"
},
"supportOtherSitesDescription": {
"message": "Supporta client YouTube di terze parti. Per abilitare il supporto, devi accettare i permessi aggiuntivi. Questo NON funziona in incognito su Chrome e altre varianti di Chromium.",
"message": "Supporta client YouTube di terze parti. Per abilitare il supporto, devi accettare i permessi aggiuntivi.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -473,7 +479,7 @@
"message": "Usa il salto manuale quando esiste un'etichetta del video completo"
},
"whatManualSkipOnFullVideo": {
"message": "Per le persone che vogliono guardare il video senza interruzioni se contiene sponsorizzazioni o auto-promozioni."
"message": "Per le persone che vogliono guardare il video senza interruzioni se contiene sponsorizzazioni o autopromozioni."
},
"skipNoticeDuration": {
"message": "Salta durata avviso (secondi):"
@@ -524,7 +530,7 @@
"message": "Carica da file"
},
"whatExportOptions": {
"message": "Questa è la tua intera configurazione in formaro JSON. Questo include il tuo ID utente, quindi presta attenzione se vuoi condividerlo."
"message": "Questa è la tua intera configurazione in JSON. Ciò include il tuo UserID Privato, quindi assicurati di condividerla saggiamente."
},
"setOptions": {
"message": "Imposta Opzioni"
@@ -572,7 +578,7 @@
"message": "Le informazioni di debug sono state copiate nel clip board. Sentiti libero di rimuovere tutte le informazioni che preferisci non condividere. Salva in un file di testo o incollale nella segnalazione di bug."
},
"keyAlreadyUsed": {
"message": "Questa scorciatoia è associata ad un'altra azione. Selezionane una diversa."
"message": "Questa scorciatoia è associata a un'altra azione. Selezionane una diversa."
},
"to": {
"message": "a",
@@ -586,7 +592,7 @@
"message": "Includi transizioni"
},
"generic_guideline2": {
"message": "Riproduci come se nulla fosse stato saltato"
"message": "Riprodotto come se non ci fossero salti"
},
"category_sponsor": {
"message": "Sponsorizzazione"
@@ -607,22 +613,22 @@
"message": "Simile alle \"sponsorizzazioni\" tranne che per promozioni non pagate o autopromozioni. Ciò include sezioni riguardanti vendita di merce, donazioni o informazioni in merito a collaboratori."
},
"category_selfpromo_guideline1": {
"message": "Donazioni, abbonamenti e merce personalizzata"
"message": "Donazioni, abbonamenti e merchandise personalizzato"
},
"category_selfpromo_guideline2": {
"message": "Shoutout non pagati che non aggiungono nulla al video"
},
"category_selfpromo_guideline3": {
"message": "Non per prodotti progettati da aziende e merce"
"message": "Non per prodotti aziendali e merchandise"
},
"category_exclusive_access": {
"message": "Accesso Esclusivo"
},
"category_exclusive_access_description": {
"message": "Solo per etichettare interi video. Usato quando un video mostra un prodotto, un servizio o un posto che hanno ricevuto gratuitamente o a cui hanno avuto un accesso sovvenzionato."
"message": "Solo per etichettare interi video. Usato quando un video mostra un prodotto, un servizio o un luogo che è stato ricevuto gratuitamente o a cui si ha avuto un accesso sovvenzionato."
},
"category_exclusive_access_pill": {
"message": "Questo video mostra un prodotto, un servizio o un posto che hanno ricevuto gratuitamente o a cui hanno avuto un accesso sovvenzionato",
"message": "Questo video mostra un prodotto, un servizio o un luogo che è stato ricevuto gratuitamente o a cui si ha avuto un accesso sovvenzionato",
"description": "Short description for this category"
},
"category_exclusive_access_guideline1": {
@@ -635,13 +641,13 @@
"message": "Quando nel punto centrale del contenuto è presente un breve promemoria per like, iscrizione o follow. Se dovesse risultare esteso o riguardante qualcosa di specifico, potrebbe essere auto-promozione."
},
"category_interaction_guideline1": {
"message": "Brevi promemoria per mi piace, iscrizioni o follow"
"message": "Brevi inviti a mettere mi piace, follow o iscriversi"
},
"category_interaction_guideline2": {
"message": "Include promemoria indiretti al commento"
"message": "Include inviti indiretti a commentare"
},
"category_interaction_guideline3": {
"message": "Non per promozione generale, solo chiamata all'azione"
"message": "Non per promozione generale, solo inviti all'interazione"
},
"category_interaction_short": {
"message": "Promemoria d'Interazione"
@@ -656,7 +662,7 @@
"message": "Intermezzo"
},
"category_intro_guideline1": {
"message": "Intervallo senza contenuto effettivo"
"message": "Sezione senza contenuto effettivo"
},
"category_intro_guideline2": {
"message": "Non per transizioni con informazioni"
@@ -674,13 +680,13 @@
"message": "Anteprima/Riepilogo"
},
"category_preview_description": {
"message": "Raccolta di clip che mostra cosa succederà in questo video o altri video in una serie, in cui tutte le informazioni sono ripetute in seguito nel video."
"message": "Raccolta di clip che mostra cosa succederà in questo video o altri video in una serie, tutte le informazioni sono ripetute in seguito nel video."
},
"category_preview_guideline1": {
"message": "Clip che appaiono più tardi in questo video, oppure in un video futuro"
"message": "Clip che appaiono in seguito in questo video, oppure in un video futuro"
},
"category_preview_guideline2": {
"message": "Riepilogo o riassunto di un video precedente"
"message": "Riepilogo di un video precedente"
},
"category_preview_guideline3": {
"message": "Non per sezioni che aggiungono contenuti in più"
@@ -689,16 +695,16 @@
"message": "Riempitivi irrilevanti/Battute"
},
"category_filler_description": {
"message": "Le scene riempitive sono aggiunte solo per riempire o per umorismo che non sono richieste per comprendere il contenuto principale del video. Questo non dovrebbe includere segmenti che forniscono contesto o dettagli di sfondo."
"message": "Scene tangenziali aggiunte solo come riempimento o per umorismo, non necessarie alla comprensione del contenuto principale del video. Non dovrebbe includere i segmenti che forniscono contesto o dettagli di background. Questa è una categoria molto aggressiva, pensata per quanto non si è in un mood \"divertente\"."
},
"category_filler_short": {
"message": "Filler"
},
"category_filler_guideline1": {
"message": "Scene non correlate usate solo per filler o umorismo"
"message": "Scene non correlate usate solo come filler o umorismo"
},
"category_filler_guideline2": {
"message": "Distrazioni, blooper, replay"
"message": "Distrazioni, bloopers, replay"
},
"category_filler_guideline3": {
"message": "Non per scene necessarie a capire l'argomento"
@@ -731,7 +737,7 @@
"message": "Può ignorare il contesto"
},
"category_poi_highlight_guideline3": {
"message": "Può portare al titolo o alla miniatura del video"
"message": "Può saltare al contenuto del titolo o dell'anteprima"
},
"category_chapter": {
"message": "Capitolo"
@@ -746,7 +752,7 @@
"message": "Usa capitoli più grandi per le sezioni generali"
},
"category_chapter_guideline3": {
"message": "I capitoli più piccoli possono essere collocati all'interno di quelli più grandi"
"message": "Dei capitoli più piccoli possono essere collocati all'interno di quelli più grandi"
},
"category_livestream_messages": {
"message": "Livestream: Donazione/Letture dei Messaggi"
@@ -788,9 +794,13 @@
"message": "Silenzia i segmenti invece di saltarli, quando possibile"
},
"fullVideoSegments": {
"message": "Mostra un'icona quando un video è interamente una pubblicità",
"message": "Mostra un'icona quando un video è interamente promozionale",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Mostra le etichette anche sulle copertine dei video",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Segmento non inviato",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -847,7 +857,7 @@
"message": "nascosto: troppo corto"
},
"manuallyHidden": {
"message": "nascosta manualmente"
"message": "nascosto manualmente"
},
"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.",
@@ -872,7 +882,7 @@
"message": "Forza controllo canale prima di andare avanti"
},
"whatForceChannelCheck": {
"message": "Di default, verranno saltati i segmenti subito, anche prima che si sappia il canale. Di default, alcuni segmenti all'inizio del video potrebbero essere saltati sui canali nella whitelist. L'attivazione di questa opzione eviterà che ciò accada, ma ogni salto avrà un leggero ritardo in quanto ottenere l'ID del canale può richiedere un certo tempo. Questo ritardo potrebbe essere impercettibile se si dispone di una connessione internet veloce."
"message": "Di default, verranno saltati i segmenti immediatamente, anche prima di verificare se il canale è in whitelist. Di default, alcuni segmenti all'inizio del video potrebbero essere saltati anche sui canali in whitelist. L'attivazione di questa opzione eviterà che ciò accada, ma ogni salto avrà un leggero ritardo in quanto ottenere l'ID del canale può richiedere un certo tempo. Questo ritardo potrebbe essere impercettibile con una connessione internet veloce."
},
"forceChannelCheckPopup": {
"message": "Considera l'Attivazione dell'opzione \"Forza la Verifica del Canale Prima del Salto\""
@@ -881,10 +891,10 @@
"message": "Tempo Non Corretto/Errato"
},
"incorrectVote": {
"message": "Non corretto"
"message": "Errato"
},
"harmfulVote": {
"message": "Dannoso",
"message": "Offensivo",
"description": "Used for chapter segments when the text is harmful/offensive to remove it faster"
},
"incorrectCategory": {
@@ -917,10 +927,10 @@
"description": "Used as the button to dismiss a tooltip"
},
"fullVideoTooltipWarning": {
"message": "Questo segmento è grande. Se l'intero video è su un argomento, passa da \"Salta\" a \"Video Completo\". Vedi le linee guida per ulteriori informazioni."
"message": "Questo segmento è grande. Se l'intero video è su un unico argomento, passa da \"Salta\" a \"Video Completo\". Vedi le linee guida per ulteriori informazioni."
},
"categoryPillTitleText": {
"message": "Questo intero video è etichettato come questa categoria ed è troppo integrato per poterlo separarare"
"message": "Questo intero video è etichettato con questa categoria ed è troppo integrato per poterlo separare"
},
"chapterNameTooltipWarning": {
"message": "Uno dei nomi dei tuoi capitoli è simile a una categoria. Quando possibile dovresti usare le categorie."
@@ -933,10 +943,10 @@
"message": "Nascondi per sempre"
},
"warningChatInfo": {
"message": "Abbiamo notato che stavi facendo alcuni errori comuni che non sono dannosi"
"message": "Abbiamo notato che hai fatto qualche errore comune. Noi apprezziamo molto il tuo lavoro fin'ora, ma qui puntiamo alla perfezione, quindi ogni errore, anche molto piccolo, conta :)"
},
"warningTitle": {
"message": "Hai ricevuto un avviso"
"message": "Hai ricevuto un avvertimento"
},
"questionButton": {
"message": "Ho una domanda"
@@ -951,7 +961,7 @@
"message": "Dona"
},
"considerDonating": {
"message": "Contribuisci allo sviluppo del fondo"
"message": "Aiuta a finanziare lo sviluppo"
},
"hideDonationLink": {
"message": "Nascondi Link di Donazione"
@@ -1046,6 +1056,12 @@
"hideSegment": {
"message": "Nascondi segmento"
},
"skipSegment": {
"message": "Salta segmento"
},
"playChapter": {
"message": "Riproduci capitolo"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Usa la rotellina del mouse passando sulla casella di modifica per regolare rapidamente il tempo. Le combinazioni dei tasti ctrl o shift sono utilizzabili per perfezionare le modifiche."
},
@@ -1081,7 +1097,7 @@
"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": "Salta l'aspetto del preavviso",
"message": "Aspetto dell'avviso di skip",
"description": "Option label"
},
"unbind": {
@@ -1107,13 +1123,13 @@
"message": "Ripristina le impostazioni predefinite"
},
"confirmResetToDefault": {
"message": "Sei sicuro di voler reimpostare tutte le impostazioni ai valori predefiniti? Questo non può essere annullato."
"message": "Sei sicuro di voler reimpostare tutte le impostazioni ai valori predefiniti? Questa azione è irreversibile."
},
"exportSegments": {
"message": "Esporta segmenti"
},
"importSegments": {
"message": "Importa i segmenti"
"message": "Importa segmenti"
},
"Import": {
"message": "Importa",
@@ -1132,7 +1148,7 @@
"message": "Scegli un paese"
},
"noDiscount": {
"message": "Non ti qualifichi per uno sconto"
"message": "Non hai diritto a uno sconto"
},
"discountLink": {
"message": "Link Sconto (Vedi il prezzo rosa)"
@@ -1140,12 +1156,8 @@
"selectYourCountry": {
"message": "Seleziona il tuo paese"
},
"alreadyDonated": {
"message": "Se hai donato qualsiasi importo prima di ora, puoi riscattare l'accesso gratuito contattando:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Se non puoi permetterti di acquistare una licenza, premi {here} per vedere se hai diritto a uno sconto",
"message": "Se non puoi permetterti di acquistare una licenza, premi {here} per verificare se hai diritto a uno sconto",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
@@ -1163,13 +1175,6 @@
"enterLicenseKey": {
"message": "Inserisci chiave di licenza"
},
"chaptersPage1": {
"message": "La funzionalità dei capitoli in crowd-sourcing di SponsorBlock è disponibile soltanto a coloro che acquistano una licenza o a coloro aventi l'accesso garantito gratuitamente grazie ai loro contributi passati"
},
"chaptersPage2": {
"message": "Nota: L'autorizzazione a inviare i capitoli si basa ancora sulla reputazione calcolata. Acquistare una licenza ti consente di visualizzare soltanto i capitoli inviati dagli altri",
"description": "On the chapters page for getting access to the paid chapters feature"
},
"unsubmittedSegmentCounts": {
"message": "Al momento hai {0} su {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1195,7 +1200,7 @@
"description": "Example: You currently have 12 unsubmitted segments on 5 *videos*"
},
"clearUnsubmittedSegments": {
"message": "Elimina tutti i segmenti",
"message": "Cancella tutti i segmenti",
"description": "Label for a button in settings"
},
"clearUnsubmittedSegmentsConfirm": {
@@ -1224,5 +1229,8 @@
},
"exportSegmentsAsURL": {
"message": "Condividi URL"
},
"allowScrollingToEdit": {
"message": "Usa la Rotella per Modificare i Tempi"
}
}

View File

@@ -1,10 +1,10 @@
{
"fullName": {
"message": "SponserBlock for YouTube - 動画のスポンサーセクションを自動でスキップする",
"message": "SponserBlock for YouTube - 動画の広告セクションを自動でスキップする",
"description": "Name of the extension."
},
"Description": {
"message": "YouTube動画の提供表示や登録要求をスキップします。視聴している動画の当該部分を報告してみんなが時間を節約できるようにしましょう。",
"message": "YouTube動画の提供表示や登録のお願いをスキップします。動画の広告部分を報告してみんなが時間を節約できるようにしましょう。",
"description": "Description of the extension."
},
"400": {
@@ -17,7 +17,7 @@
"message": "これは既に提出されています。"
},
"channelWhitelisted": {
"message": "チャンネルをホワイトリストに登録しました!"
"message": "チャンネルをホワイトリストに登録しました"
},
"Segment": {
"message": "セグメント"
@@ -32,17 +32,20 @@
"message": "チャプター"
},
"renderAsChapters": {
"message": "セグメントをチャプターとしてレンダリングする",
"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": "この提案を支持"
"message": "この提出を高評価"
},
"reportButtonTitle": {
"message": "報告"
},
"reportButtonInfo": {
"message": "この提案が正しくないと報告"
"message": "不正確な提出として報告"
},
"Dismiss": {
"message": "無視"
@@ -57,7 +60,7 @@
"message": "スキップ解除を押すと元の場所へ戻ります"
},
"unskip": {
"message": "スキップ解除"
"message": "スキップしない"
},
"reskip": {
"message": "再スキップ"
@@ -102,10 +105,10 @@
"message": "セグメントを更新"
},
"success": {
"message": "成功しました!"
"message": "成功しました"
},
"voted": {
"message": "投票しました!"
"message": "投票しました\n"
},
"serverDown": {
"message": "サーバーがダウンしているようです。今すぐ開発者にお知らせください。"
@@ -113,6 +116,9 @@
"connectionError": {
"message": "接続エラーが発生しました。 エラーコード: "
},
"segmentsStillLoading": {
"message": "セグメントがまだ読み込み中です..."
},
"clearTimes": {
"message": "セグメントを消去"
},
@@ -122,14 +128,17 @@
"closePopup": {
"message": "ポップアップを閉じる"
},
"SubmitTimes": {
"message": "セグメントを送信"
"closeIcon": {
"message": "閉じるアイコン"
},
"OpenSubmissionMenu": {
"message": "提出メニューを開く"
},
"sortSegments": {
"message": "セグメントを並び替え"
},
"submitCheck": {
"message": "本当に提出してよろしいですか?"
"message": "提出しますか?"
},
"whitelistChannel": {
"message": "チャンネルをホワイトリストに追加"
@@ -141,10 +150,10 @@
"message": "セグメントに投票"
},
"Submissions": {
"message": "提案数"
"message": "合計提出数"
},
"savedPeopleFrom": {
"message": "みんなの時間をこれだけ節約しました: "
"message": "あなたが節約したみんなの時間: "
},
"viewLeaderboard": {
"message": "リーダーボード"
@@ -157,14 +166,11 @@
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
"message": "心得: 利用者設定で提出時のキーバインドを設定できます"
"message": "ヒント: オプションから提出時のキー割り当てを設定できます"
},
"clearTimesButton": {
"message": "時間を消去"
},
"submitTimesButton": {
"message": "時間を提出"
},
"publicStats": {
"message": "これは公開の統計ページであなたがどれだけ貢献したかを示すために使用され、ここで確認することができます: "
},
@@ -190,13 +196,13 @@
"message": "オプション"
},
"showButtons": {
"message": "YouTube プレイヤーにボタンを表示"
"message": "YouTubeプレイヤーにボタンを表示"
},
"hideButtons": {
"message": "YouTube プレイヤーにボタンを表示しない"
"message": "YouTubeプレイヤーにボタンを表示しない"
},
"hideButtonsDescription": {
"message": "YouTube再生画面のセグメント提出ボタンを非表示にします。"
"message": "YouTubeプレイヤーのセグメント提出ボタンを非表示にします。"
},
"showSkipButton": {
"message": "「ハイライトまでスキップ」ボタンをプレイヤーに常に表示する"
@@ -211,10 +217,10 @@
"message": "情報ボタンを自動的に隠す"
},
"hideDeleteButton": {
"message": "YouTube プレイヤーから削除ボタンを隠す"
"message": "YouTubeプレイヤー削除ボタンを表示しない"
},
"showDeleteButton": {
"message": "YouTubeプレヤーに削除ボタンを表示"
"message": "YouTubeプレヤーに削除ボタンを表示"
},
"enableViewTracking": {
"message": "スキップの集計を有効にする"
@@ -238,7 +244,7 @@
"message": "ハッシュプレフィックスを使って要求"
},
"whatQueryByHashPrefix": {
"message": "サーバーに区域を要求する際に動画IDの代わりに動画IDのハッシュから最初の4文字送信ます。それに対してサーバーは類似したハッシュを持つすべての動画の情報を応答します。"
"message": "動画IDを使用してサーバーからセグメントを要求する代わりに動画IDのハッシュから最初の4文字送信されます。それに対してサーバーは類似したハッシュを持つすべての動画のデータを返却します。"
},
"enableRefetchWhenNotFound": {
"message": "新しい動画ではセグメントを再取得する"
@@ -293,7 +299,7 @@
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "もしそれでも気に入らない場合は、再度表示しないボタンをクリックしてください。",
"message": "それでも気に入らない場合、「再び表示しないボタンをしてください。",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setSkipShortcut": {
@@ -323,17 +329,17 @@
"message": "接続がタイムアウトになりました。インターネット接続をご確認ください。接続に問題がない場合、サーバーが混雑またはダウンしている可能性があります。"
},
"disableSkipping": {
"message": "スキップ有効"
"message": "スキップ有効です"
},
"enableSkipping": {
"message": "スキップ無効"
"message": "スキップ無効です"
},
"yourWork": {
"message": "あなたの貢献",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "サーバー側で問題が起きているようです。時間をおいて再び試しください。"
"message": "サーバーが混雑中です。数秒後にもう一度お試しください。"
},
"errorCode": {
"message": "エラーコード: "
@@ -349,7 +355,7 @@
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
"message": "{0} をスキップしますか?"
"message": "{0} をスキップしますか"
},
"mute_category": {
"message": "{0} をミュートしますか?"
@@ -371,10 +377,10 @@
"description": "Used for skipping to things (Skipped to Highlight)"
},
"disableAutoSkip": {
"message": "自動スキップを無効にする"
"message": "自動スキップを無効"
},
"enableAutoSkip": {
"message": "自動スキップを有効にする"
"message": "自動スキップを有効"
},
"audioNotification": {
"message": "スキップ時に通知音を鳴らす"
@@ -408,32 +414,32 @@
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": "彼らの人生のうち)",
"message": "の人生のうち)",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "サーバーの状態についてはstatus.sponsor.ajay.appを確認してください。"
},
"changeUserID": {
"message": "ユーザーIDインポート/エクスポート"
"message": "プライベートユーザーIDインポート/エクスポート"
},
"whatChangeUserID": {
"message": "これは厳重に保管してください。これはパスワードのようなもので、誰とも共有すべきではありません。 他の誰かがこれを使って、あなたになりすますことができてしまいます。なおパブリックユーザーIDを探している場合は、ポップアップ内のクリップボードアイコンをクリックしてください。"
},
"setUserID": {
"message": "ユーザーIDを設定"
"message": "プライベートユーザーIDを設定"
},
"userIDChangeWarning": {
"message": "警告: ユーザーIDの変更は恒久的です。本当に実行しますか? 念のため以前のユーザーIDは控えておいてください。"
"message": "警告: プライベートユーザーIDの変更は恒久的です。本当に実行しますか? 念のため以前のユーザーIDは控えておいてください。"
},
"createdBy": {
"message": "作成者:"
},
"supportOtherSites": {
"message": "第三者製のYouTube関連サイトに対応"
"message": "サードパーティー製のYouTubeサイトに対応"
},
"supportOtherSitesDescription": {
"message": "第三者製のYouTubeクライアントに対応しました。有効するには追加の権限を受け入れる必要があります。これはChromeやその他のChromium系列の匿名閲覧状態では動作しません。",
"message": "第三者が作成した YouTube クライアントに対応します。対応を有効するには追加の権限に承諾する必要があります。",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -467,22 +473,22 @@
"message": "最小持続時間(秒):"
},
"minDurationDescription": {
"message": "設定値より短いセグメントはスキップされず、プレヤーにも表示されません。"
"message": "設定値より短いセグメントはスキップされず、プレヤーにも表示されません。"
},
"enableManualSkipOnFullVideo": {
"message": "動画全体のラベルが存在する場合は手動スキップを使用する"
},
"whatManualSkipOnFullVideo": {
"message": "動画全体がスポンサー付きまたはセルフプロモーションである場合に、動画を邪魔されずに観たい方向け。"
"message": "動画全体が広告または自己宣伝の時に、動画を途切れなく観たい方向け。"
},
"skipNoticeDuration": {
"message": "スキップ通知の表示時間(秒):"
},
"skipNoticeDurationDescription": {
"message": "飛び越し通知が画面上に表示され続ける時間です。手動で飛び越した場合はより長く表示される可能性があります。"
"message": "スキップ通知が画面上に表示される時間です。手動でスキップした場合はより長く表示される可能性があります。"
},
"shortCheck": {
"message": "提出しようとしている区間の長さが個人設定における最短時間よりも短かいです。これは既に当区間提出されており,個人設定によって無されていることを意味します。本当に提出しますか?"
"message": "提出しようとしている区間が個人設定における最短時間よりも短くなっています。これは既に当区間提出されていながらも、単に個人設定によって無効化されているだけという可能性があります。本当に提出しますか?"
},
"liveOrPremiere": {
"message": "ライブ配信中の動画やプレミア公開中の動画ではセグメントの提出はできません。配信が終了するまで待つか、ページを再読み込みしてセグメントがまだ有効かご確認ください。"
@@ -494,7 +500,7 @@
"message": "SponsorBlock サーバーアドレス"
},
"customServerAddressDescription": {
"message": "SponsorBlockがサーバーへの呼び出しに用いるアドレスです。\n自分のサーバー実体を持っていない限りこの設定を変更してはいけません。"
"message": "SponsorBlockがサーバーへの呼び出しに用いるアドレスです。\n自分のサーバーインスタンスを持っていない限りこの設定を変更すべきではありません。"
},
"save": {
"message": "保存"
@@ -503,13 +509,13 @@
"message": "リセット"
},
"customAddressError": {
"message": "このアドレスの形式は正しくありません。最初にhttp://あるいはhttps://があり最後が斜線で終わっていないことを確かめてください。"
"message": "このアドレスの形式は正しくありません。最初にhttp://あるいはhttps://があり最後が斜線で終わっていないことを確かめてください。"
},
"areYouSureReset": {
"message": "初期設定に戻します。よろしいですか?"
},
"mobileUpdateInfo": {
"message": "m.youtube.com は現在サポートされています"
"message": "m.youtube.com に対応しています"
},
"exportOptions": {
"message": "全ての設定をインポート/エクスポート"
@@ -524,13 +530,13 @@
"message": "ファイルから読み込み"
},
"whatExportOptions": {
"message": "JSON形式のすべての個人設定です。これにはあなたのユーザーIDが含まれているので、共有するときは注意してください。"
"message": "これがJSON形式の設定項目全体になります。これにはあなたのプライベートユーザーIDが含まれているので、共有するときは注意してください。"
},
"setOptions": {
"message": "オプション設定"
"message": "オプション設定"
},
"exportOptionsWarning": {
"message": "警告: 設定の変更は恒久的で本拡張機能を破壊する可能性があります。本当に実行しますか? 念のため,旧設定を控えておいてください。"
"message": "警告: 設定の変更は恒久的で本拡張機能を破壊する可能性があります。本当に実行しますか? 念のため、これまでの設定を控えておいてください。"
},
"incorrectlyFormattedOptions": {
"message": "JSONの書式が正しくありません。設定は変更されませんでした。"
@@ -566,10 +572,10 @@
"message": "クリップボードに書き込めませんでした"
},
"copyDebugInformationOptions": {
"message": "不具合があったあるいは開発者から要求があった際に提供する為の情報をクリップボードにします。利用者ID許可表にある番組および個人サーバーのアドレスなどの機密情報は含まれていません。ただし,利用者エージェントWeb閲覧機OSおよび拡張機能の版番などの情報は含まれています。"
"message": "不具合があったあるいは開発者から要求があった際に提供する為の情報をクリップボードにコピーします。ユーザーID、ホワイトリストにあるチャンネル、およびカスタムサーバーのアドレスなどの機密情報は含まれていません。ただし、ユーザーエージェント、ブラウザ、OSおよび拡張機能のバージョンなどの情報は含まれています。 "
},
"copyDebugInformationComplete": {
"message": "診断用情報がクリップボードに複製されました。共有したくない情報があればそこから削除できます。これをファイルに保存したり不具合報告に貼り付けてください。"
"message": "診断用情報がクリップボードにコピーされました。共有したくない情報があればそこから削除できます。これをファイルに保存したり不具合報告に貼り付けてください。"
},
"keyAlreadyUsed": {
"message": "このショートカットは他のアクションに割り当てられています。別のショートカットを選択してください。"
@@ -592,7 +598,7 @@
"message": "スポンサー"
},
"category_sponsor_description": {
"message": "報酬のある販売促進製品紹介および直接広告です。自己販促や好きな運動・製作者・Webサイト・製品に対する無報酬での宣伝とは違います。"
"message": "報酬のある販売促進製品紹介および直接広告です。自己販促や好きな運動・製作者・Webサイト・製品に対する無報酬での宣伝とは異なります。"
},
"category_sponsor_guideline1": {
"message": "有料のプロモーション"
@@ -601,10 +607,10 @@
"message": "寄付やオリジナルグッズには使わない"
},
"category_selfpromo": {
"message": "無報酬 / セルフプロモーション"
"message": "無報酬 / 自己の宣伝"
},
"category_selfpromo_description": {
"message": "無報酬での宣伝あるいは自己販促であるという点を除いては「スポンサー」と同様です。商品、寄付、コラボ情報に関する内容を含みます。"
"message": "無報酬での宣伝あるいは自己販促であるという点を除いては「広告」と同様です。商品、寄付、コラボ情報に関する内容を含みます。"
},
"category_selfpromo_guideline1": {
"message": "寄付、メンバーシップ、オリジナルグッズ"
@@ -626,13 +632,13 @@
"description": "Short description for this category"
},
"category_exclusive_access_guideline1": {
"message": "動画全体が無料または補助金を受けてアクセスしたものを紹介するものである"
"message": "動画全体が無料または補助金を受けてアクセスしたものを紹介している"
},
"category_interaction": {
"message": "行動を促すメッセージ(チャンネル登録)"
"message": "行動を促すメッセージチャンネル登録等)"
},
"category_interaction_description": {
"message": "動画の途中に挟まれる高評価チャンネル登録・通知の有効化を促す短かい場面。長かったり具体的な商品についての場面は,中断ではなく自己販売促進に分類すべきです。"
"message": "動画の途中に挿入される高評価チャンネル登録・通知オンなどを促す短いシーン。長かったり具体的な商品についてのシーンは、セルフプロモーションに分類すべきです。"
},
"category_interaction_guideline1": {
"message": "高評価、登録、フォローの短いお願い"
@@ -644,25 +650,25 @@
"message": "一般的なプロモーションではなく、直接的な呼びかけのみに使用すること"
},
"category_interaction_short": {
"message": "動画の間に挟まる告知"
"message": "動画の間に挿入される告知"
},
"category_intro": {
"message": "インターミッション / イントロアニメーション"
"message": "合間 / 導入アニメーション"
},
"category_intro_description": {
"message": "意味のある内容を含まない場面です。一時停止静止画面繰り返される動作などが相します。意味のある情報を含む転換場面に対しては使ないでください。"
"message": "本編ではない動画の合間部分。一時停止静止画面繰り返しのアニメーションなどが相します。本編の情報を含んだ場面転換に対しては使用しないでください。"
},
"category_intro_short": {
"message": "インターミッション"
"message": "合間"
},
"category_intro_guideline1": {
"message": "実際のコンテンツを含まないインターバル"
"message": "実際のコンテンツではない間の部分"
},
"category_intro_guideline2": {
"message": "情報を含むトランジションには使用しない"
"message": "情報を含む場面転換には使用しない"
},
"category_outro": {
"message": "エンドカード/クレジット"
"message": "エンドカード / クレジット"
},
"category_outro_description": {
"message": "提供表示やYouTubeの終了画面が表示されている場面。動画の内容を結論している場面には使用しないで下さい。"
@@ -689,7 +695,7 @@
"message": "繋ぎの話/冗談"
},
"category_filler_description": {
"message": "動画の本編を理解するのに必要のない、繋ぎの話やユーモアによって脱線したシーン。これには、文脈や背景の詳細を提供しているセグメントを含めないでください。"
"message": "動画の本編を理解するのに必要のない、繋ぎの話やユーモアによって脱線したシーン。これには、文脈や背景にある情報を含むセグメントを含めないでください。これは、あなたが楽しい気分になれないときなどのための、非常にアグレッシブなカテゴリーです。"
},
"category_filler_short": {
"message": "繋ぎの話"
@@ -701,7 +707,7 @@
"message": "逸脱シーン、NGシーン、リプレイ"
},
"category_filler_guideline3": {
"message": "トピックの理解に必要な場面には使用しない"
"message": "主題の理解に必要な場面には使用しない"
},
"category_music_offtopic": {
"message": "音楽: 音楽以外のセクション"
@@ -740,7 +746,7 @@
"message": "動画の主要なセクションを説明するカスタムのチャプター名"
},
"category_chapter_guideline1": {
"message": "スポンサーのブランド名には言及しない"
"message": "広告主のブランド名には言及しない"
},
"category_chapter_guideline2": {
"message": "全般的なセクションには大きなチャプターを使用する"
@@ -752,7 +758,7 @@
"message": "ライブ配信: 寄付/メッセージの読み上げ"
},
"category_livestream_messages_short": {
"message": "寄付などの読み上げ"
"message": "メッセージの読み上げ"
},
"autoSkip": {
"message": "自動スキップ"
@@ -782,7 +788,7 @@
"message": "チャプターを表示"
},
"autoSkipOnMusicVideos": {
"message": "音楽区域がある場合,全区域を自動的に飛び越す"
"message": "音楽以外のセグメントがある場合に全セグメントを自動的にスキップする"
},
"muteSegments": {
"message": "スキップする代わりに音声をミュートしてセグメントを許可"
@@ -791,12 +797,16 @@
"message": "動画全体が広告の場合にアイコンを表示",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "動画のサムネイル上にもラベルを表示",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "未確定の色",
"description": "Referring to submissions that have not been sent to the server yet."
},
"seekBarColor": {
"message": "シークバーのカラー"
"message": "シークバーの"
},
"category": {
"message": "カテゴリ"
@@ -828,7 +838,7 @@
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "警告: このタイプのセグメントは一度に最大一つだけ有効にすることができます。複数送信するとランダムなものが表示されます。"
"message": "警告: この種類のセグメントは一度に最大一つだけ有効にすることができます。複数送信するとランダムなものが表示されます。"
},
"youMustSelectACategory": {
"message": "送信するすべてのセグメントにカテゴリを選択する必要があります!"
@@ -841,7 +851,7 @@
"description": "Button that skips to the end of a segment"
},
"hiddenDueToDownvote": {
"message": "低評価の区間を無視する"
"message": "低評価のセグメントを無視する"
},
"hiddenDueToDuration": {
"message": "あまりに短かい区間を無視する"
@@ -851,19 +861,19 @@
},
"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": "番組IDがまだ読み込まれていません。埋め込み動画でご覧になっている場合は代わりにYouTubeの公式サイトで再生してみてください。この問題はYouTubeの画面構成を変えた際にも発生する可能性があります。その場合はこちらに意見をお書きください:"
"message": "チャンネルIDがまだ読み込まれていません。埋め込み動画でご覧になっている場合は代わりにYouTubeの公式サイトで再生してみてください。この問題はYouTubeがレイアウトを変更した際にも発生する可能性があります。その場合はこちらからお知らせください:"
},
"invidiousPermissionRefresh": {
"message": "Invidiousなどのサードパーティーサイトで機能するために必要な権限をブラウザーが拒否しています。この権限を許可するには下のボタンをクリックしてください。"
},
"acceptPermission": {
"message": "許可を承認する"
"message": "権限を承認する"
},
"permissionRequestSuccess": {
"message": "許可リクエストが成功しました!"
"message": "権限リクエストが成功しました!"
},
"permissionRequestFailed": {
"message": "権限要求に失敗しました。拒否をクリックしましたか?"
"message": "権限要求に失敗しました。承認を拒否しましたか?"
},
"adblockerIssueWhitelist": {
"message": "これを解決できない場合は、設定「スキップする前にチャンネルチェックを強制」を無効にしてください。 SponsorBlockはこのビデオのチャンネル情報を取得できません。"
@@ -872,13 +882,13 @@
"message": "スキップする前にチャンネルチェックを強制する"
},
"whatForceChannelCheck": {
"message": "デフォルト設定では、チャンネル情報を取得する前にセグメントをスキップします。デフォルト設定では、ホワイトリストに追加されているチャンネルでも動画の先頭部分にあるセグメントがスキップされる場合があります。この設定を有効にするとこの挙動が回避されますが、channelIDの取得に時間がかかるため、すべてのスキップに遅延が発生します。高速なインターネット回線を使用している場合は気にならないかもしれません。"
"message": "デフォルト設定では、チャンネル情報を取得する前にセグメントをスキップします。デフォルト設定では、ホワイトリストに追加されているチャンネルでも動画の先頭部分にあるセグメントがスキップされる場合があります。この設定を有効にするとこの挙動が回避されますが、チャンネルIDの取得に時間がかかるため、すべてのスキップに遅延が発生します。高速なインターネット回線を使用している場合は気にならないかもしれません。"
},
"forceChannelCheckPopup": {
"message": "「飛び越し前に強制的に番組を検査する」を有効にすることを検討してください"
"message": "「スキップする前にチャンネルチェックを強制する」を有効にしてみてください"
},
"downvoteDescription": {
"message": "不正確あるいは間違った時刻です"
"message": "不正確/誤った再生時間"
},
"incorrectVote": {
"message": "間違っている"
@@ -891,7 +901,7 @@
"message": "カテゴリーを変更"
},
"nonMusicCategoryOnMusic": {
"message": "この動画は音楽として分類されています。本当にこの動画にスポンサー部分がありますか? このセグメントが実際には「音楽以外のセグメント」である場合、設定画面からこのカテゴリーを有効にしてください。「スポンサー」の代わりに「音楽以外」としてセグメントを提出できます。お困りの場合は、ガイドラインを参照してください。"
"message": "この動画は音楽として分類されています。本当にこの動画にスポンサー部分がありますか? このセグメントが実際には「音楽以外のセグメント」である場合、設定画面からこのカテゴリーを有効にしてください。「広告」の代わりに「音楽以外」としてセグメントを提出できます。お困りの場合は、ガイドラインを参照してください。"
},
"multipleSegments": {
"message": "複数のセグメント"
@@ -900,14 +910,14 @@
"message": "ガイドライン"
},
"readTheGuidelines": {
"message": "ガイドラインを読んでください!!",
"message": "ガイドラインを読んでください",
"description": "Show the first time they submit or if they are \"high risk\""
},
"categoryUpdate1": {
"message": "カテゴリはこちらです!"
"message": "カテゴリはこちらです"
},
"categoryUpdate2": {
"message": "導入画面・終了画面・商品紹介などを飛び越す個人設定を開きます。"
"message": "導入/終了シーン・グッズ紹介などをスキップする設定を開く"
},
"help": {
"message": "ヘルプ"
@@ -917,7 +927,7 @@
"description": "Used as the button to dismiss a tooltip"
},
"fullVideoTooltipWarning": {
"message": "このセグメントは大きすぎます。動画全体が一つのトピックに当てはまる場合は「スキップ」を「動画全体」に変更してください。詳細はガイドラインを参照してください。"
"message": "このセグメントは大きすぎます。動画全体が一つの話題に言及しているなら「スキップ」を「動画全体」に変更してください。詳細はガイドラインを参照してください。"
},
"categoryPillTitleText": {
"message": "この動画は全体がこのカテゴリーとして指定されており、密に結合されているため分割することができません"
@@ -930,13 +940,13 @@
"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": "二度と表示しない"
"message": "再び表示しない"
},
"warningChatInfo": {
"message": "悪意によるものではないよくある間違いを犯してたようです"
"message": "どうやらあなたはよくある間違いを犯してしまったようです。これまでのあなたの協力には大きく感謝しています。ですが、私たちは完璧さを追求しており、小さなミスでも重要であることをご理解ください :)"
},
"warningTitle": {
"message": "警告を付与されました"
"message": "警告を受け取りました"
},
"questionButton": {
"message": "質問があります"
@@ -960,22 +970,22 @@
"message": "オプション画面でダークモードを使用"
},
"helpPageThanksForInstalling": {
"message": "SponsorBlockを導入いただきありがとうございます。"
"message": "SponsorBlockをインストールいただきありがとうございます。"
},
"helpPageReviewOptions": {
"message": "以下の設定を確認してください"
},
"helpPageFeatureDisclaimer": {
"message": "多くの機能がデフォルトでは無効となっています。イントロ・アウトロをスキップしたり、Invidiousで使用したりするにはこの下で有効にしてください。また画面の表示設定を切り替えることもできます。"
"message": "多くの機能がデフォルトでは無効となっています。導入/終了シーンをスキップしたり、Invidiousで使用したりするにはこの下で有効にしてください。また画面の表示設定を切り替えることもできます。"
},
"helpPageHowSkippingWorks": {
"message": "スキップの仕組み"
},
"helpPageHowSkippingWorks1": {
"message": "データベースにある動画区域が自動的に飛び越されます。この拡張機能のアイコンをクリックすると,区域の位置や範囲を確かめることができます。"
"message": "データベースにある動画セグメントが自動的にスキップされます。この拡張機能のアイコンをクリックすると、セグメントの位置や範囲を確かめることができます。"
},
"helpPageHowSkippingWorks2": {
"message": "区域を飛び越すたびに通知されます。区域の範囲がおかしいと思ったらその区域を低評価してください。ポップアップ画面でも同様に投票ができます。"
"message": "セグメントをスキップする度に通知が表示されます。セグメントの範囲がおかしいと思ったらそのセグメントを低評価してください。ポップアップ画面でも同様に投票ができます。"
},
"Submitting": {
"message": "提出する"
@@ -996,7 +1006,7 @@
"message": "こんな操作は面倒?"
},
"helpPageTooSlow1": {
"message": "ショートカットキーが利用可能です。セミコロンキーでスポンサーセグメントを開始/終了し、アポストロフィキーで送信できます。またこれらはオプションで変更できます。QWERTYキーを使わない場合は、キー割り当てを変更したほうがいいでしょう。"
"message": "ショートカットキーが利用可能です。セミコロンキーで広告セグメントを開始/終了し、アポストロフィキーで送信できます。またこれらはオプションで変更できます。QWERTYキーを使わない場合は、キー割り当てを変更したほうがいいでしょう。"
},
"helpPageCopyOfDatabase": {
"message": "データベースのコピーを利用できますか? 作者が失踪した場合はどうなりますか?"
@@ -1005,10 +1015,10 @@
"message": "データベースは公開されており、こちらから利用できます:"
},
"helpPageCopyOfDatabase2": {
"message": "ソースコードは自由に利用できます。運営になにがあろうともあなたの貢献(提出された区域)が失われることはありません。"
"message": "ソースコードは自由に利用できます。運営になにがあろうともあなたの貢献(提出したセグメント)が失われることはありません。"
},
"helpPageNews": {
"message": "お知らせと作成方法"
"message": "最新情報と制作秘話"
},
"helpPageSourceCode": {
"message": "ソースコードの入手先"
@@ -1046,11 +1056,17 @@
"hideSegment": {
"message": "セグメントを表示しない"
},
"skipSegment": {
"message": "セグメントをスキップ"
},
"playChapter": {
"message": "チャプターを再生"
},
"SponsorTimeEditScrollNewFeature": {
"message": "編集ボックスにカーソルを合わせながらマウスホイールを使用すると、時間をすばやく調整できます。 CtrlキーまたはShiftキーの組み合わせを使用して変更を微調整できます。"
},
"categoryPillNewFeature": {
"message": "新機能!動画全体がスポンサー付きもしくはセルフプロモーションかがわかります"
"message": "新機能!動画全体が広告もしくは自己宣伝かがわかります"
},
"dayAbbreviation": {
"message": "日",
@@ -1140,10 +1156,6 @@
"selectYourCountry": {
"message": "国を選択してください"
},
"alreadyDonated": {
"message": "今までにいくらかの寄付をしていただいた方は、メールにて無料アクセスの引き換えが可能です:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "ライセンスを購入する余裕がない方は、{こちら} をクリックして割引が適用されるかどうか確認できます",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1163,17 +1175,6 @@
"enterLicenseKey": {
"message": "ライセンスキーを入力"
},
"chaptersPage1": {
"message": "SponsorBlockのクラウドソーシングによるチャプター機能は、ライセンス購入をされた方、もしくは過去の貢献により許可された方のみが利用できます"
},
"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"
},
"unsubmittedSegmentCounts": {
"message": "現在、{1} に {0} があります",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1228,5 +1229,11 @@
},
"exportSegmentsAsURL": {
"message": "URLとして共有"
},
"segmentFetchFailureWarning": {
"message": "警告: サーバーはまだセグメントへの応答をしていません。実際には、この動画のセグメントは既に送信済みかもしれません。一方、単にサーバーの問題により受信できていない可能性もあります。"
},
"allowScrollingToEdit": {
"message": "スクロールで時間を編集できるようにする"
}
}

View File

@@ -8,7 +8,7 @@
"description": "Description of the extension."
},
"400": {
"message": "서버에서 유효하지 않은 요청이라고 응답했어요"
"message": "서버에서 잘못된 요청이라고 응답했어요"
},
"429": {
"message": "이 영상에 많은 스폰서 광고 구간을 제출했어요. 정말로 확실하신가요?"
@@ -35,6 +35,9 @@
"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": "이 제출을 추천해요"
},
@@ -42,7 +45,7 @@
"message": "신고"
},
"reportButtonInfo": {
"message": "이 제출을 잘못된 제출로 신고해요"
"message": "잘못된 제출로 신고해요"
},
"Dismiss": {
"message": "무시"
@@ -108,11 +111,14 @@
"message": "투표 완료!"
},
"serverDown": {
"message": "서버가 다운된 것 같아요. 개발자분께 연락해주세요."
"message": "서버가 다운된 것 같아요. 개발자에게 연락해주세요."
},
"connectionError": {
"message": "연결 오류가 발생했어요. 오류 코드: "
},
"segmentsStillLoading": {
"message": "구간을 여전히 불러오는 중이에요..."
},
"clearTimes": {
"message": "구간 초기화"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "팝업 닫기"
},
"SubmitTimes": {
"message": "구간 제출"
"closeIcon": {
"message": "닫기 아이콘"
},
"OpenSubmissionMenu": {
"message": "제출 메뉴 열기"
},
"sortSegments": {
"message": "구간 정렬"
@@ -144,7 +153,7 @@
"message": "제출"
},
"savedPeopleFrom": {
"message": "나 덕분에 다른 사람들이 건너뛴 구간: "
"message": "나 덕분에 다른 이 건너뛴 구간: "
},
"viewLeaderboard": {
"message": "순위표"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "구간 초기화"
},
"submitTimesButton": {
"message": "구간 제출"
},
"publicStats": {
"message": "얼마나 기여했는지 확인할 수 있는 공개 통계 페이지로 다음에서 확인하실 수 있어요."
},
@@ -217,13 +223,13 @@
"message": "YouTube 탐색 바에서 삭제 버튼 표시"
},
"enableViewTracking": {
"message": "건너뛴 횟수 추적 활성화"
"message": "건너뛴 횟수 추적 사용"
},
"whatViewTracking": {
"message": "이 기능으로 건너뛴 구간을 추적해서 사용자가 제출한 내용이 다른 분께 얼마나 도움이 되는지 알려주고 잘못된 구간이 데이터베이스에 들어가지 않도록 추천과 함께 분석에 사용해요. 이 확장 프로그램이 구간을 건너뛸 때마다 서버에 메시지를 보낼 거예요. 조회수가 정확하기 위해서는 이 설정을 변경하지 않기를 바라요. :)"
},
"enableViewTrackingInPrivate": {
"message": "시크릿/사생활 보호 탭에서 건너뛴 횟수 추적 활성화"
"message": "시크릿/사생활 보호 탭에서 건너뛴 횟수 추적 사용"
},
"enableTrackDownvotes": {
"message": "비추천한 구간 저장"
@@ -232,7 +238,7 @@
"message": "비추천한 구간을 새로고침 이후에도 계속 숨겨요"
},
"trackDownvotesWarning": {
"message": "경고: 비활성화하면 이전에 저장된 비추천 구간이 삭제돼요"
"message": "경고: 사용하지 않으면 이전에 저장된 비추천 구간이 삭제돼요"
},
"enableQueryByHashPrefix": {
"message": "해시 접두사로 요청 전송"
@@ -317,10 +323,10 @@
"description": "Keybind label"
},
"keybindDescription": {
"message": "등록하고 싶은 키를 눌러주세요. 필요하다면 Ctrl/Alt/Shift 키를 선택하실 수도 있어요."
"message": "등록하고 싶은 키를 눌러주세요. 필요하다면 보조 키를 선택하실 수도 있어요."
},
"0": {
"message": "연결에 오류가 발생했어요. 인터넷 연결을 확인하세요. 인터넷 연결이 되어 있는 경우, 서버가 과부화됐거나 다운된 것일 수도 있어요."
"message": "연결에 실패했어요. 인터넷 연결을 확인하세요. 인터넷 연결이 되어 있는 경우, 서버가 과부화됐거나 다운된 것일 수도 있어요."
},
"disableSkipping": {
"message": "건너뛰기 켜짐"
@@ -367,26 +373,26 @@
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "{0}로 이동했어요",
"message": "{0}로 건너뛰었어요",
"description": "Used for skipping to things (Skipped to Highlight)"
},
"disableAutoSkip": {
"message": "자동 건너뛰기 비활성화"
"message": "자동 건너뛰기 사용 안 함"
},
"enableAutoSkip": {
"message": "자동 건너뛰기 활성화"
"message": "자동 건너뛰기 사용"
},
"audioNotification": {
"message": "건너뛸 때 소리 재생"
},
"audioNotificationDescription": {
"message": "구간을 건너뛸 때마다 소리를 재생해요. 자동 건너뛰기가 비활성화된 경우, 아무 소리도 재생되지 않아요."
"message": "구간을 건너뛸 때마다 소리를 재생해요. 자동 건너뛰기를 사용하지 않는 경우, 아무 소리도 재생되지 않아요."
},
"showTimeWithSkips": {
"message": "건너뛰기로 제외된 시간 표시"
},
"showTimeWithSkipsDescription": {
"message": "탐색 바 아래에 있는 동영상 시간 옆 괄호에 시간이 표시돼요. 건너뛸 구간을 제외할 실제로 재생하게 될 동영상의 길이를 보여줘요. \"탐색 바에 표시\"로만 지정된 구간도 포함해요."
"message": "이 시간은 탐색 바 아래에 있고 현재 시간 옆에 있는 대괄호로 표시돼요. 건너뛸 구간을 제외할 실제로 재생하게 될 동영상의 길이를 보여줘요. \"탐색 바에 표시\"로만 지정된 구간도 포함해요."
},
"youHaveSkipped": {
"message": "건너뛴 구간: "
@@ -404,27 +410,27 @@
"message": "시간"
},
"youHaveSavedTime": {
"message": "나 덕분에 다른 사람들이 건너뛴 구간:",
"message": "나 덕분에 다른 이 건너뛴 구간:",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
"message": "의 시간을 절약함",
"message": " 정도를 절약함",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "Status.sponsor.ajay.app 사이트를 확인하여 서버 상태를 확인하세요."
},
"changeUserID": {
"message": "사용자 ID 가져오기/내보내기"
"message": "비공개 사용자 ID 가져오기/내보내기"
},
"whatChangeUserID": {
"message": "이 정보를 다른 분께 공개하지 마세요. 비밀번호처럼 알려주면 위험한 정보랍니다. 다른 분이 이 정보를 가지고 나를 사칭할 수도 있어요. 공개 사용자 ID를 찾고 있다면, 팝업 내 클립보드 아이콘을 눌러주세요."
"message": "이 정보를 다른 분께 공개하지 마세요. 이건 비밀번호와 같으며 누구와도 공유해서는 안 되는 정보랍니다. 다른 분이 이 정보를 습득한다면, 나를 사칭할 수도 있어요. 공개 사용자 ID를 찾고 있다면, 팝업 내 클립보드 아이콘을 눌러주세요."
},
"setUserID": {
"message": "사용자 ID 설정"
"message": "비공개 사용자 ID 설정"
},
"userIDChangeWarning": {
"message": "경고: 사용자 ID를 변경하면 되돌릴 수 없어요. 정말로 확실한가요? 혹시 모르니 예전 사용자 ID를 백업해두는 걸 권장해요."
"message": "경고: 비공개 사용자 ID를 변경하면 되돌릴 수 없어요. 정말로 확실한가요? 혹시 모르니 예전 사용자 ID를 백업해두는 걸 권장해요."
},
"createdBy": {
"message": "개발자: "
@@ -433,14 +439,14 @@
"message": "제3자 YouTube 사이트 지원"
},
"supportOtherSitesDescription": {
"message": "제3자 YouTube 클라이언트에서도 기능을 지원하도록 해요. 이 기능을 사용하려면 추가 권한을 허용해야 해요. Chrome 및 다른 Chromium 계열 브라우저의 시크릿 모드에서는 작동하지 않아요. ",
"message": "제자 YouTube 클라이언트에서도 기능을 지원하도록 해요. 이 기능을 사용하려면 추가 권한을 허용해야 해요.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
"message": "지원되는 사이트: "
},
"optionsInfo": {
"message": "Invidious 지원 활성화하고, 자동 건너뛰기 기능을 끄거나, 사용하지 않는 버튼겨보세요."
"message": "Invidious 지원 활성화, 자동 건너뛰기 사용 안 함, 버튼 숨기기 등이 있어요."
},
"addInvidiousInstance": {
"message": "제3자 클라이언트 인스턴스 추가"
@@ -452,13 +458,13 @@
"message": "추가"
},
"addInvidiousInstanceError": {
"message": "유효하지 않은 도메인이에요. 도메인 형식으로 되어있어야 해요. 예: invious.ajay.app"
"message": "잘못된 도메인이에요. 도메인 부분만 포함해야 해요. 예: invious.ajay.app"
},
"resetInvidiousInstance": {
"message": "Invidious 인스턴스 목록 초기화"
},
"resetInvidiousInstanceAlert": {
"message": "Invidious 인스턴스 목록을 초기화할까요?"
"message": "Invidious 인스턴스 목록을 초기화하시겠어요?"
},
"currentInstances": {
"message": "현재 인스턴스:"
@@ -524,7 +530,7 @@
"message": "파일에서 불러오기"
},
"whatExportOptions": {
"message": "JSON의 전체 구성 파일이에요. 사용자 ID가 포함되어 있으니, 공유할 때 주의하세요."
"message": "JSON의 전체 구성 파일이에요. 나의 비공개 사용자 ID가 포함되어 있으니, 공유할 때 주의하세요."
},
"setOptions": {
"message": "옵션 저장"
@@ -539,7 +545,7 @@
"message": "구간 제출"
},
"submit": {
"message": "제출"
"message": "제출하기"
},
"cancel": {
"message": "취소"
@@ -689,7 +695,7 @@
"message": "주제와 관련 없는 구간"
},
"category_filler_description": {
"message": "이 구간은 전반적인 동영상의 주제를 이해하는 데 필요 없는 내용이 포함됐어요. 상세한 배경지식이나 맥락을 설명하는 구간은 여기에 해당하지 않아요."
"message": "이 구간은 전반적인 동영상의 주제를 이해하는 데 필요 없는 내용이 포함됐어요. 상세한 배경지식이나 맥락을 설명하는 구간은 여기에 해당하지 않아요. \"재미\"가 없다는 걸 의미하는 적극적인 카테고리예요."
},
"category_filler_short": {
"message": "주제와 관련 없는 구간"
@@ -791,6 +797,10 @@
"message": "동영상 전체가 광고인 경우 아이콘 표시",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "동영상 미리 보기 사진에도 라벨 표시",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "미제출 색상",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -815,16 +825,16 @@
"message": "제출과 투표가 테스트 서버에 연결하는 동안은 메인 서버에 반영되지 않을 거예요. 실제 제출을 원하시면 비활성화하는 걸 잊지 마세요."
},
"bracketNow": {
"message": "(지금)"
"message": "(현재)"
},
"moreCategories": {
"message": "많은 카테고리"
"message": "추가 카테고리"
},
"chooseACategory": {
"message": "카테고리 선택"
},
"enableThisCategoryFirst": {
"message": "\"{0}\" 카테고리의 구간을 제출하려면, 설정에서 활성화를 해주셔야 해요. 설정 창으로 이동할까요?",
"message": "\"{0}\" 카테고리의 구간을 제출하려면, 설정에서 사용을 해주셔야 해요. 바로 설정 창으로 이동하실 거예요.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
@@ -866,7 +876,7 @@
"message": "권한 요청에 실패했어요. 거부를 누르셨나요?"
},
"adblockerIssueWhitelist": {
"message": "이 문제를 해결할 수 없는 경우 SponsorBlock이 이 동영상의 채널 정보를 찾을 수 없는 것일 수 있으니, '건너뛰기 전 채널 강제 확인' 설정을 비활성화해주세요."
"message": "이 문제를 해결할 수 없는 경우 SponsorBlock이 이 동영상의 채널 정보를 찾을 수 없는 것일 수 있으니, '건너뛰기 전 채널 강제 확인' 설정을 사용하지 않아야 해요"
},
"forceChannelCheck": {
"message": "건너뛰기 전 채널 강제 확인"
@@ -888,10 +898,10 @@
"description": "Used for chapter segments when the text is harmful/offensive to remove it faster"
},
"incorrectCategory": {
"message": "카테고리 변경해요"
"message": "카테고리 변경"
},
"nonMusicCategoryOnMusic": {
"message": "이 동영상은 음악 동영상으로 분류되어 있어요. 동영상에 스폰서 광고 구간이 있나요? \"음악이 아닌 구간\"으로 지정된 카테고리인 경우, 확장 프로그램 설정을 열어 이 카테고리를 활성화하세요. 그리고, 이 구간을 \"스폰서 광고 구간\" 대신 \"음악이 아닌 구간\"으로 지정하세요. 혼동된다면 가이드라인을 읽어주세요."
"message": "이 동영상은 음악 동영상으로 분류되어 있어요. 동영상에 스폰서 광고 구간이 있나요? \"음악이 아닌 구간\"으로 지정된 카테고리인 경우, 확장 프로그램 설정을 열어 이 카테고리를 사용하세요. 그리고, 이 구간을 \"스폰서 광고 구간\" 대신 \"음악이 아닌 구간\"으로 지정하세요. 혼동된다면 가이드라인을 읽어주세요."
},
"multipleSegments": {
"message": "여러 구간"
@@ -920,7 +930,7 @@
"message": "제출될 구간이 길어요. 전반적인 동영상의 내용이 한 주제에 대한 것이라면, \"건너뛰기\"를 \"동영상 전체\"로 변경해주세요. 자세한 정보는 가이드라인을 확인하세요."
},
"categoryPillTitleText": {
"message": "동영상 전체가 해당 카테고리로 지정됐고 부분적으로 나누기 어려워요."
"message": "동영상 전체가 해당 카테고리로 지정됐고 부분적으로 나누기 어려워요"
},
"chapterNameTooltipWarning": {
"message": "챕터의 이름 중 하나가 카테고리와 유사해요. 가능한 경우 카테고리를 대신 사용해 주세요."
@@ -933,16 +943,16 @@
"message": "다시 보지 않음"
},
"warningChatInfo": {
"message": "악의적인 의도는 없었던 듯 보이지만 제출하신 구간 중에 일부 문제가 있는 것 같아요."
"message": "현재 일반적인 실수들을 저지르고 계셔서 알려드려요. 지금까지 작업해주신 것은 감사드리지만, 저희는 완벽을 추구하고 있기 때문에 아주 작은 실수라도 문제가 될 수 있어요 :)"
},
"warningTitle": {
"message": "경고를 받으셨어요"
},
"questionButton": {
"message": "아직 질문이 있어요"
"message": "질문이 있어요"
},
"warningConfirmButton": {
"message": "네, 이해했어요"
"message": "사유를 이해했어요"
},
"warningError": {
"message": "경고를 확인하던 도중 오류가 발생했어요:"
@@ -966,7 +976,7 @@
"message": "아래 설정을 확인해 보세요"
},
"helpPageFeatureDisclaimer": {
"message": "기본값으로 많은 기능이 비활성화되어 있어요. 인트로, 아웃트로 같은 부분을 건너뛰고 싶으시다면 아래 설정을 야 해요. 또한 UI 요소를 숨기거나 표시할 수 있답니다."
"message": "기본값으로 많은 기능이 사용되지 않아요. 인트로, 아웃트로 같은 부분을 건너뛰고 싶으시다면 아래 설정을 사용해야 해요. 또한 UI 요소를 숨기거나 표시할 수 있답니다."
},
"helpPageHowSkippingWorks": {
"message": "건너뛰기가 작동하는 방법"
@@ -993,10 +1003,10 @@
"message": "구간을 잘못 설정했다면, 위쪽 화살표 버튼을 누른 다음 구간을 수정하거나 삭제할 수 있어요."
},
"helpPageTooSlow": {
"message": "구간 수정이 오래 걸리시나요?"
"message": "이건 너무 느린 거 같아요"
},
"helpPageTooSlow1": {
"message": "원하는 경우 단축키를 용할 수 있어요. 쌍반점(세미콜론) 키를 눌러 스폰서 광고 구간의 시점/종점을 설정할 수 있으며 작은따옴표 키를 눌러 구간을 제출할 수 있답니다. 언제든지 설정에서 변경할 수 있어요. QWERTY 자판을 사용하지 않는 경우, 단축키를 변경해야 할 수도 있어요."
"message": "원하는 경우 단축키를 용할 수 있어요. 쌍반점(세미콜론) 키를 눌러 스폰서 광고 구간의 시점/종점을 설정할 수 있으며 작은따옴표 키를 눌러 구간을 제출할 수 있답니다. 언제든지 설정에서 변경할 수 있어요. QWERTY 자판을 사용하지 않는 경우, 단축키를 변경해야 할 수도 있어요."
},
"helpPageCopyOfDatabase": {
"message": "데이터베이스의 복사본을 구할 수 있나요? 개발자분께 무슨 일이 생기면 어떻게 되는 거죠?"
@@ -1005,7 +1015,7 @@
"message": "데이터베이스는 여기에서 확인하실 수 있어요:"
},
"helpPageCopyOfDatabase2": {
"message": "또한 소스 코드는 자유롭게 용할 수 있어요. 따라서 데이터베이스에 무슨 일이 생기더라도, 제출된 구간이 사라지는 일은 없을 거예요."
"message": "또한 소스 코드는 자유롭게 용할 수 있어요. 따라서 데이터베이스에 무슨 일이 생기더라도, 제출된 구간이 사라지는 일은 없을 거예요."
},
"helpPageNews": {
"message": "새로운 변경 사항은 어디에서 확인하나요?"
@@ -1020,7 +1030,7 @@
"message": "자세히 보기"
},
"FullDetails": {
"message": "자세한 정보"
"message": "전체 세부 정보"
},
"CopyDownvoteButtonInfo": {
"message": "비추천 후 다시 제출할 수 있는 제출되지 않은 복사본을 생성해요"
@@ -1046,6 +1056,12 @@
"hideSegment": {
"message": "구간 숨기기"
},
"skipSegment": {
"message": "구간 건너뛰기"
},
"playChapter": {
"message": "챕터 재생"
},
"SponsorTimeEditScrollNewFeature": {
"message": "편집 상자 위에 마우스 커서를 올린 채 스크롤해서 시간을 빠르게 조정해 보세요. Ctrl이나 Shift 키를 누른 채로 스크롤하면 세밀하게 조정할 수 있어요."
},
@@ -1095,10 +1111,10 @@
"message": "변경"
},
"youtubeKeybindWarning": {
"message": "설정한 키와 기존 YouTube 단축키가 중복돼요. 그래도 진행하시겠어요?"
"message": "설정한 키와 기존 YouTube 단축키가 중복돼요. 그래도 사용하시겠어요?"
},
"betaServerWarning": {
"message": "현재 테스트 서버를 이용 중이에요!"
"message": "테스트 서버가 활성화됐어요!"
},
"openOptionsPage": {
"message": "설정 페이지 열기"
@@ -1107,7 +1123,7 @@
"message": "기본 설정으로 초기화"
},
"confirmResetToDefault": {
"message": "모든 설정을 기본값으로 초기화할까요? 되돌릴 수 없어요!"
"message": "모든 설정을 기본값으로 초기화하시겠어요? 되돌릴 수 없어요."
},
"exportSegments": {
"message": "구간 내보내기"
@@ -1126,7 +1142,7 @@
"message": "라이선스 키가 유효하지 않아요"
},
"hideUpsells": {
"message": "추가 결제 없이는 숨김 설정을 이용하실 수 없어요"
"message": "(추가 결제 없이는 숨김 설정을 사용할 수 없어요)"
},
"chooseACountry": {
"message": "국가 선택"
@@ -1140,12 +1156,8 @@
"selectYourCountry": {
"message": "국가를 선택하세요"
},
"alreadyDonated": {
"message": "이전에 후원한 이력이 있다면, 메일을 보내 라이선스를 등록하실 수 있어요. 문의 주소:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "요금을 결제할 여력이 아니시라면, {여기}서 할인 혜택을 받을 수 있는지 확인해보세요",
"message": "요금을 결제할 여력이 아니시라면, {여기}서 할인 혜택을 받을 수 있는지 확인해 보세요",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
@@ -1163,16 +1175,29 @@
"enterLicenseKey": {
"message": "라이선스 키를 입력하세요"
},
"chaptersPage1": {
"message": "SponsorBlock 사용자 참여 챕터 기능은 라이선스 결제 사용자나, 이전 기여를 통해 접근을 허가받은 사용자만 이용할 수 있어요"
"unsubmittedSegmentCounts": {
"message": "You currently have {0} on {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
},
"chaptersPage2": {
"message": "참고: 여전히 챕터 제출 권한은 산정된 평판만을 바탕으로 부여돼요. 라이선스를 결제하면 다른 분이 제출한 챕터를 확인하는 기능만 추가로 이용할 수 있어요",
"description": "On the chapters page for getting access to the paid chapters feature"
"unsubmittedSegmentCountsZero": {
"message": "You currently have no unsubmitted segments",
"description": "Replaces 'unsubmittedSegmentCounts' string when there are no unsubmitted segments"
},
"chapterNewFeature": {
"message": "새로운 기능: 사용자 참여 챕터 기능. 챕터는 사용자가 직접 이름을 지정할 수 있고 중첩시킬 수 있어 더욱 더 정확해요. 이 동영상에 제출된 챕터를 보려면 라이선스를 결제하세요. 챕터 목록 미리보기: ",
"description": "After the comma, a list of chapters for this video will appear"
"unsubmittedSegmentsSingular": {
"message": "unsubmitted segment",
"description": "Example: You currently have 1 *unsubmitted segment* on 1 video"
},
"unsubmittedSegmentsPlural": {
"message": "unsubmitted segments",
"description": "Example: You currently have 12 *unsubmitted segments* on 5 videos"
},
"videosSingular": {
"message": "video",
"description": "Example: You currently have 3 unsubmitted segments on 1 *video*"
},
"videosPlural": {
"message": "videos",
"description": "Example: You currently have 12 unsubmitted segments on 5 *videos*"
},
"clearUnsubmittedSegments": {
"message": "모든 구간 초기화",
@@ -1204,5 +1229,11 @@
},
"exportSegmentsAsURL": {
"message": "URL로 공유"
},
"segmentFetchFailureWarning": {
"message": "경고: 서버에서 구간 정보를 불러오지 못했어요. 동영상에 이미 제출된 구간이 있을 수 있지만 서버의 문제로 인해 수신되지 않았을 수도 있어요."
},
"allowScrollingToEdit": {
"message": "스크롤하여 구간 편집 허용"
}
}

View File

@@ -103,9 +103,6 @@
"closePopup": {
"message": "പോപ്പ്അപ്പ് അടയ്‌ക്കുക"
},
"SubmitTimes": {
"message": "സെഗ്‌മെന്റുകൾ സമർപ്പിക്കുക"
},
"submitCheck": {
"message": "ഇത് സമർപ്പിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?"
},
@@ -140,9 +137,6 @@
"clearTimesButton": {
"message": "ടൈംസ് മായ്‌ക്കുക"
},
"submitTimesButton": {
"message": "സമയം സമർപ്പിക്കുക"
},
"publicStats": {
"message": "നിങ്ങൾ എത്രമാത്രം സംഭാവന നൽകി എന്ന് കാണിക്കുന്നതിന് ഇത് പൊതു സ്ഥിതിവിവരക്കണക്ക് പേജിൽ ഉപയോഗിക്കുന്നു. അത് കാണുക"
},
@@ -295,15 +289,6 @@
"statusReminder": {
"message": "സെർവർ നിലയ്ക്കായി status.sponsor.ajay.app പരിശോധിക്കുക."
},
"changeUserID": {
"message": "നിങ്ങളുടെ യൂസർ ഐഡി ഇറക്കുമതി ചെയ്യുക / കയറ്റുമതി ചെയ്യുക"
},
"setUserID": {
"message": "യൂസർ ഐഡി സജ്ജമാക്കുക"
},
"userIDChangeWarning": {
"message": "മുന്നറിയിപ്പ്: യൂസർ ഐഡി മാറ്റുന്നത് ശാശ്വതമാണ്. ഇത് ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെന്ന് ഉറപ്പാണോ? നിങ്ങളുടെ പഴയത് ബാക്കപ്പ് ചെയ്യുന്നത് ഉറപ്പാക്കുക."
},
"createdBy": {
"message": "ഉണ്ടാക്കിയത്"
},
@@ -361,9 +346,6 @@
"exportOptions": {
"message": "എല്ലാ ഓപ്ഷനുകളും ഇറക്കുമതി ചെയ്യുക / കയറ്റുമതി ചെയ്യുക"
},
"whatExportOptions": {
"message": "JSON ലെ നിങ്ങളുടെ മുഴുവൻ കോൺഫിഗറേഷനും ഇതാണ്. ഇതിൽ നിങ്ങളുടെ യൂസർ ഐഡി ഉൾപ്പെടുന്നു, അതിനാൽ ഇത് വിവേകത്തോടെ പങ്കിടുന്നത് ഉറപ്പാക്കുക."
},
"setOptions": {
"message": "ഓപ്ഷനുകൾ സജ്ജമാക്കുക"
},

View File

@@ -25,6 +25,19 @@
"Segments": {
"message": "segmen"
},
"SegmentsCap": {
"message": "Segmen"
},
"Chapters": {
"message": "Bab"
},
"renderAsChapters": {
"message": "Render segmen sebagai bab",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Tunjukkan Segmen Semasa Di Sebelah Masa Video"
},
"upvoteButtonInfo": {
"message": "Sokong penyerahan ini"
},
@@ -52,6 +65,9 @@
"reskip": {
"message": "Reskip"
},
"unmute": {
"message": "Nyahredam"
},
"paused": {
"message": "Dijeda"
},
@@ -79,9 +95,15 @@
"sponsorEnd": {
"message": "Segmen Berakhir Sekarang"
},
"sponsorCancel": {
"message": "Batalkan Membuat Segmen"
},
"noVideoID": {
"message": "Tiada video YouTube dijumpai.\nSekiranya ini tidak betul, muat semula tab."
},
"refreshSegments": {
"message": "Muat semula segmen"
},
"success": {
"message": "Berjaya!"
},
@@ -94,6 +116,9 @@
"connectionError": {
"message": "Ralat sambungan telah berlaku. Kod salah: "
},
"segmentsStillLoading": {
"message": "Segmen masih dimuatkan..."
},
"clearTimes": {
"message": "Kosongkan Segmen"
},
@@ -103,8 +128,11 @@
"closePopup": {
"message": "Tutup Pop timbul"
},
"SubmitTimes": {
"message": "Hantar Segmen"
"closeIcon": {
"message": "Tutup Ikon"
},
"sortSegments": {
"message": "Susun Segmen"
},
"submitCheck": {
"message": "Adakah anda pasti mahu menghantarnya?"
@@ -140,9 +168,6 @@
"clearTimesButton": {
"message": "Jelas Masa"
},
"submitTimesButton": {
"message": "Hantar Masa"
},
"publicStats": {
"message": "Ini digunakan di halaman statistik awam untuk menunjukkan berapa banyak yang anda sumbangkan. Lihatlah"
},
@@ -152,6 +177,12 @@
"setUsername": {
"message": "Tetapkan Nama Pengguna"
},
"copyPublicID": {
"message": "Salin PenggunaID Awam"
},
"copySegmentID": {
"message": "Salin ID Segmen"
},
"discordAdvert": {
"message": "Mari sertai pelayan perselisihan rasmi untuk memberi cadangan dan maklum balas!"
},
@@ -170,12 +201,18 @@
"hideButtonsDescription": {
"message": "Ini menyembunyikan butang yang muncul di pemain YouTube untuk menyerahkan segmen langkau."
},
"showSkipButton": {
"message": "Simpan Butang Langkau Ke Sorotan Di Pemain"
},
"showInfoButton": {
"message": "Tunjukkan Butang Maklumat Pada Pemain YouTube"
},
"hideInfoButton": {
"message": "Sembunyikan Butang Maklumat Pada Pemain YouTube"
},
"autoHideInfoButton": {
"message": "Auto-sembunyikan Butang Maklumat"
},
"hideDeleteButton": {
"message": "Sembunyikan Butang Padam Pada Pemain YouTube"
},
@@ -188,6 +225,18 @@
"whatViewTracking": {
"message": "Fungsi ini mengesan segmen mana yang telah anda lewati untuk memberi tahu pengguna seberapa banyak penyerahan mereka telah membantu orang lain dan digunakan sebagai metrik bersama dengan suara positif untuk memastikan bahawa spam tidak masuk ke dalam pangkalan data. Sambungan tersebut menghantar mesej ke pelayan setiap kali anda melewatkan segmen. Mudah-mudahan kebanyakan orang tidak mengubah tetapan ini supaya nombor paparan tepat. :)"
},
"enableViewTrackingInPrivate": {
"message": "Bolehkan Penjejakan kiraan Langkau Di Dalam Tab Persendirian/Inkognito"
},
"enableTrackDownvotes": {
"message": "Simpan segmen undi turun"
},
"whatTrackDownvotes": {
"message": "Segmen yang anda undi turun akan kekal tersembunyi walaupun selepas memuat semulakan"
},
"trackDownvotesWarning": {
"message": "Amaran: Melumpuhkan ini akan padam semua undi turun yang tersimpan sebelum ini"
},
"enableQueryByHashPrefix": {
"message": "Pertanyaan Oleh Awalan Hash"
},
@@ -200,12 +249,36 @@
"whatRefetchWhenNotFound": {
"message": "Sekiranya videonya baru, dan tidak ada segmen yang dijumpai, video akan terus diambil setiap beberapa minit semasa anda menonton."
},
"enableShowCategoryWithoutPermission": {
"message": "Tunjuk kategori dalam menu penghantaran walaupun tanpa kebenaran penghantaran"
},
"whatShowCategoryWithoutPermission": {
"message": "Beberapa kategori memerlukan kebenaran untuk hantar disebabkan keperluan reputasi minimum"
},
"showNotice": {
"message": "Tunjukkan Notis Lagi"
},
"showSkipNotice": {
"message": "Tunjukkan Makluman Setelah Segmen Dilangkau"
},
"showCategoryGuidelines": {
"message": "Tunjukkan Bantuan Kategori"
},
"noticeVisibilityMode0": {
"message": "Saiz Penuh Langkau Notis"
},
"noticeVisibilityMode1": {
"message": "Notis Langkau Kecil untuk Auto Langkau"
},
"noticeVisibilityMode2": {
"message": "Semua Kecil Notis Langkau"
},
"noticeVisibilityMode3": {
"message": "Notis Langkau Pudar untuk Auto Langkau"
},
"noticeVisibilityMode4": {
"message": "Semua Pudar Notis Langkau"
},
"longDescription": {
"message": "SponsorBlock membolehkan anda melewati penaja, intro, outro, peringatan langganan, dan bahagian lain dari video YouTube yang menjengkelkan. SponsorBlock adalah pelanjutan penyemak imbas yang banyak untuk membolehkan sesiapa sahaja menghantar segmen tajaan dan masa tayangan dari segmen video YouTube yang lain. Setelah satu orang menyerahkan maklumat ini, semua orang yang mempunyai pelanjutan ini akan melangkau segmen yang ditaja. Anda juga boleh melangkau bahagian muzik video muzik bukan.",
"description": "Full description of the extension on the store pages."
@@ -226,6 +299,29 @@
"message": "Sekiranya anda masih tidak menyukainya, tekan butang jangan tunjukkan.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setSkipShortcut": {
"message": "Langkau segmen",
"description": "Keybind label"
},
"setStartSponsorShortcut": {
"message": "Mula/berhenti segmen",
"description": "Keybind label"
},
"setSubmitKeybind": {
"message": "Hantar segmen",
"description": "Keybind label"
},
"nextChapterKeybind": {
"message": "Bab seterusnya",
"description": "Keybind label"
},
"previousChapterKeybind": {
"message": "Bab sebelumnya",
"description": "Keybind label"
},
"keybindDescription": {
"message": "Pilih kekunci dengan menaipnya dan pilih mana-mana kekunci pengubah suai yang anda ingin gunakan."
},
"0": {
"message": "Masa sambungan telah tamat. Periksa sambungan internet anda. Sekiranya internet anda berfungsi, pelayan mungkin berlebihan atau tidak berfungsi."
},
@@ -248,9 +344,35 @@
"skip": {
"message": "Langkau"
},
"mute": {
"message": "Redam"
},
"full": {
"message": "Seluruh Video",
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
"message": "Langkau {0}?"
},
"mute_category": {
"message": "Redam {0}?"
},
"skip_to_category": {
"message": "Langkau kepada {0}?",
"description": "Used for skipping to things (Skip to Highlight)"
},
"skipped": {
"message": "{0} Melangkau",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} Diredam",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "Melangkau kepada {0}",
"description": "Used for skipping to things (Skipped to Highlight)"
},
"disableAutoSkip": {
"message": "Lumpuhkan Langkau Auto"
},
@@ -296,20 +418,35 @@
"message": "Periksa status.sponsor.ajay.app untuk status pelayan."
},
"changeUserID": {
"message": "Import / Eksport Id Pengguna Anda"
"message": "Import/Eksport PenggunaID Persendirian Anda"
},
"whatChangeUserID": {
"message": "Ini patut dirahsiakan. Ini seperti kata laluan dan tidak patut untuk dikongsi dengan sesiapa. Jika seseorang mempunyai ini, mereka boleh menyamar sebagai anda. Jika anda sedang mencari untuk penggunaID awam anda, tekan ikon papan keratan di dalam pop timbul."
},
"setUserID": {
"message": "Tetapkan Id Pengguna"
"message": "Tetapkan PenggunaanID Peribadi"
},
"userIDChangeWarning": {
"message": "Amaran: Mengubah UserID adalah kekal. Adakah anda pasti mahu melakukan ini? Pastikan untuk membuat sandaran lama anda sekiranya berlaku."
"message": "Amaran: Mengubah PenggunaanID Peribadi adalah kekal. Adakah anda pasti anda mahu melakukan ini? Pastikan untuk membuat sandaran anda yang lama untuk berjaga-jaga."
},
"createdBy": {
"message": "Dicipta oleh"
},
"supportOtherSites": {
"message": "Sokong Pihak Ke-3 Laman YouTube"
},
"supportedSites": {
"message": "Laman Disokong: "
},
"optionsInfo": {
"message": "Dayakan sokongan Invidious, lumpuhkan autoskip, sembunyikan butang dan banyak lagi."
},
"addInvidiousInstance": {
"message": "Tambah Pihak Ke-3 Contoh Klien"
},
"addInvidiousInstanceDescription": {
"message": "Tambah contoh tersuai. Ini mesti diformat HANYA dengan domain. Contoh: invidious.ajay.app"
},
"add": {
"message": "Tambah"
},
@@ -331,9 +468,24 @@
"minDurationDescription": {
"message": "Segmen yang lebih pendek daripada nilai yang ditetapkan tidak akan dilangkau atau ditunjukkan dalam pemain."
},
"enableManualSkipOnFullVideo": {
"message": "Gunakan langkau manual apabila label video penuh wujud"
},
"whatManualSkipOnFullVideo": {
"message": "Untuk orang yang ingin menonton video penuh tanpa gangguan jika ia adalah ditaja sepenuhnya atau promosi diri."
},
"skipNoticeDuration": {
"message": "Tenpoh masa notis langkau (saat):"
},
"skipNoticeDurationDescription": {
"message": "Notis langkau akan kekal di skrin untuk sekurang-kurangnya beberapa saat ini. Untuk melangkau secara manual, ia mungkin dilihat lebih lama."
},
"shortCheck": {
"message": "Penyerahan berikut lebih pendek daripada pilihan tempoh minimum anda. Ini mungkin bermaksud ini sudah dihantar, dan hanya diabaikan kerana pilihan ini. Adakah anda pasti mahu menghantar?"
},
"liveOrPremiere": {
"message": "Menghantar pada siaran langsung aktif atau tayangan perdana tidak dibenarkan. Sila tunggu sehingga ia selesai, kemudian muat semula halaman dan mengesahkan yang segmen masih sah."
},
"showUploadButton": {
"message": "Tunjukkan Butang Muat Naik"
},
@@ -361,8 +513,17 @@
"exportOptions": {
"message": "Import / Eksport Semua Pilihan"
},
"exportOptionsCopy": {
"message": "Sunting/salin"
},
"exportOptionsDownload": {
"message": "Simpan ke fail"
},
"exportOptionsUpload": {
"message": "Muatkan dari fail"
},
"whatExportOptions": {
"message": "Ini adalah keseluruhan konfigurasi anda di JSON. Ini termasuk ID pengguna anda, jadi pastikan untuk membagikannya dengan bijak."
"message": "Ini adalah keseluruhan konfigurasi anda dalam JSON. Ini termasuk PenggunaanID Persendirian anda, jadi pastikan untuk kongsi ini dengan bijak."
},
"setOptions": {
"message": "Tetapkan Pilihan"
@@ -388,6 +549,9 @@
"preview": {
"message": "Pratonton"
},
"unsubmitted": {
"message": "Belum Diserahkan"
},
"inspect": {
"message": "Periksa"
},
@@ -406,28 +570,78 @@
"copyDebugInformationComplete": {
"message": "Maklumat debug telah disalin ke papan klip. Jangan ragu untuk membuang maklumat yang anda tidak mahu kongsi Simpan ini dalam fail teks atau tampal ke laporan pepijat."
},
"keyAlreadyUsed": {
"message": "Pintasan ini terikat kepada tindakan lain. Sila pilih yang lain."
},
"to": {
"message": "ke",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"CopiedExclamation": {
"message": "Disalin!",
"description": "Used after something has been copied to the clipboard. Example: 'Copied!'"
},
"generic_guideline1": {
"message": "Termasuk peralihan segue"
},
"generic_guideline2": {
"message": "Main seperti seolah-olahnya tiada apa-apa yang melangkau"
},
"category_sponsor": {
"message": "Penaja"
},
"category_sponsor_description": {
"message": "Promosi berbayar, rujukan berbayar dan iklan langsung. Bukan untuk promosi diri atau sapaan percuma kepada penyebab / pencipta / laman web / produk yang mereka suka."
},
"category_sponsor_guideline1": {
"message": "Promosi dibayar"
},
"category_sponsor_guideline2": {
"message": "Bukan untuk derma atau barangan tersuai"
},
"category_selfpromo": {
"message": "Promosi Tanpa Bayaran / Diri"
},
"category_selfpromo_description": {
"message": "Sama dengan \"penaja\" kecuali untuk promosi tanpa gaji atau diri. Ini merangkumi bahagian mengenai barang dagangan, sumbangan, atau maklumat tentang siapa mereka bekerjasama."
},
"category_selfpromo_guideline1": {
"message": "Dermaan, keahlian dan barangan tersuai"
},
"category_selfpromo_guideline2": {
"message": "Shoutout percuma yang tidak menambah kepada video"
},
"category_selfpromo_guideline3": {
"message": "Bukan untuk produk reka bentuk korporat dan barang dagangan"
},
"category_exclusive_access": {
"message": "Akses Eksklusif"
},
"category_exclusive_access_description": {
"message": "Hanya untuk melabelkan keseluruhan video. Digunakan apabila video menunjukkan sesuatu produk, servis atau lokasi yang mereka menerima dengan percuma atau akses bersubsidi kepada."
},
"category_exclusive_access_pill": {
"message": "Video ini menunjukkan sesuatu produk, servis atau lokasi yang mereka menerima dengan percuma atau akses bersubsidi kepada",
"description": "Short description for this category"
},
"category_exclusive_access_guideline1": {
"message": "Keseluruhan video menunjukkan benda yang percuma atau akses bersubsidi"
},
"category_interaction": {
"message": "Peringatan Interaksi (Langgan)"
},
"category_interaction_description": {
"message": "Apabila ada peringatan pendek untuk menyukai, melanggan atau mengikutinya di tengah-tengah kandungan. Sekiranya ia panjang atau mengenai sesuatu yang spesifik, ia harus dipromosikan sendiri."
},
"category_interaction_guideline1": {
"message": "Peringatan pendek untuk suka, melanggan atau ikut"
},
"category_interaction_guideline2": {
"message": "Termasuk peringatan tidak langsung untuk komen"
},
"category_interaction_guideline3": {
"message": "Bukan untuk promosi umum, hanya seruan untuk bertindak"
},
"category_interaction_short": {
"message": "Peringatan Interaksi"
},
@@ -440,12 +654,54 @@
"category_intro_short": {
"message": "Selang"
},
"category_intro_guideline1": {
"message": "Selang waktu tanpa kandungan sebenar"
},
"category_intro_guideline2": {
"message": "Bukan untuk transisi dengan maklumat"
},
"category_outro": {
"message": "Kad Akhir / Kredit"
},
"category_outro_description": {
"message": "Kredit atau ketika kad akhir YouTube muncul. Bukan untuk kesimpulan dengan maklumat."
},
"category_outro_guideline1": {
"message": "Jangan termasuk kandungan, walaupun kad akhir pada skrin"
},
"category_preview": {
"message": "Pratonton/Imbas Kembali"
},
"category_preview_description": {
"message": "Koleksi klip yang menunjukkan apa yang akan datang di dalam video ini atau video lain di dalam siri di mana semua maklumat diulang kemudian di dalam video."
},
"category_preview_guideline1": {
"message": "Klip yang muncul kemudian, atau di dalam video masa depan"
},
"category_preview_guideline2": {
"message": "Imbas kembali video sebelum ini"
},
"category_preview_guideline3": {
"message": "Bukan untuk bahagian yang menambah kandungan tambahan"
},
"category_filler": {
"message": "Tangen Pengisi/Lawak"
},
"category_filler_description": {
"message": "Adegan tangensial ditambah hanya untuk pengisi atau jenaka yang tidak diperlukan untuk memahami kandungan utama daripada video tersebut. Ini tidak patutnya termasuk segmen yang menyediakan konteks atau butiran latar belakang. Ini kategori yang sangat aggresif dimaksudkan apabila kamu tiada mood untuk \"seronok\"."
},
"category_filler_short": {
"message": "Pengisi"
},
"category_filler_guideline1": {
"message": "Adegan tangensial hanya untuk pengisi atau humor"
},
"category_filler_guideline2": {
"message": "Gangguan, blooper, ulang tayang"
},
"category_filler_guideline3": {
"message": "Bukan untuk adegan diperlukan untuk memahami topik"
},
"category_music_offtopic": {
"message": "Muzik: Bahagian Bukan Muzik"
},
@@ -455,6 +711,42 @@
"category_music_offtopic_short": {
"message": "Bukan Muzik"
},
"category_music_offtopic_guideline1": {
"message": "Bahagian bukan dalam keluaran rasmi"
},
"category_music_offtopic_guideline2": {
"message": "Bukan muzik di dalam persembahan secara langsung"
},
"category_poi_highlight": {
"message": "Sorotan"
},
"category_poi_highlight_description": {
"message": "Bahagian video yang kebanyakan orang sedang mencari. Sama seperti komen \"Video bermula pada x\"."
},
"category_poi_highlight_guideline1": {
"message": "Bahagian kebanyakan orang sedang mencari"
},
"category_poi_highlight_guideline2": {
"message": "Boleh langkau konteks"
},
"category_poi_highlight_guideline3": {
"message": "Boleh langkau ke tajuk atau thumbnail"
},
"category_chapter": {
"message": "Bab"
},
"category_chapter_description": {
"message": "Nama bab tersuai menerangkan bahagian utama video."
},
"category_chapter_guideline1": {
"message": "Jangan menyebut nama jenama penaja"
},
"category_chapter_guideline2": {
"message": "Gunakan bab lebih besar untuk bahagian umum"
},
"category_chapter_guideline3": {
"message": "Kandungan yang lebih kecil boleh diletakkan di dalam yang lebih besar"
},
"category_livestream_messages": {
"message": "Strim Langsung: Bacaan Derma / Mesej"
},
@@ -473,6 +765,35 @@
"disable": {
"message": "Nyahaktifkan"
},
"autoSkip_POI": {
"message": "Langkau ke permulaan secara automatik"
},
"manualSkip_POI": {
"message": "Tanya apabila video dimuatkan"
},
"showOverlay_POI": {
"message": "Tunjuk Dalam Bar Mencari"
},
"showOverlay_full": {
"message": "Tunjuk Label"
},
"showOverlay_chapter": {
"message": "Tunjukkan bab"
},
"autoSkipOnMusicVideos": {
"message": "Auto langkau semua segmen apabila terdapat segmen bukan-muzik"
},
"muteSegments": {
"message": "Benarkan segmen yang meredamkan audio sebaliknya langkau"
},
"fullVideoSegments": {
"message": "Tunjukkan ikon apabila video ialah iklan sepenuhnya",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"previewColor": {
"message": "Warna Belum Diserahkan",
"description": "Referring to submissions that have not been sent to the server yet."
},
"seekBarColor": {
"message": "Cari Warna Bar"
},
@@ -505,18 +826,47 @@
"message": "Untuk menghantar segmen dengan kategori \"{0}\", anda mesti mengaktifkannya dalam pilihan. Anda akan diarahkan ke pilihan sekarang.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Amaran: Segmen jenis ini hanya boleh mempunyai maksimum satu aktif pada satu masa. Menghantar pelbagai lagi akan menyebabkan satu ditunjukkan secara rawak."
},
"youMustSelectACategory": {
"message": "Anda mesti memilih kategori untuk semua segmen yang anda kirimkan!"
},
"bracketEnd": {
"message": "(Tamat)"
},
"End": {
"message": "Tamat",
"description": "Button that skips to the end of a segment"
},
"hiddenDueToDownvote": {
"message": "tersembunyi: undi"
},
"hiddenDueToDuration": {
"message": "tersembunyi: terlalu pendek"
},
"manuallyHidden": {
"message": "disembunyikan secara manual"
},
"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": "ID saluran tidak dimuatkan lagi. Jika anda menggunakan video terbenam, cuba gunakan laman utama YouTube sebaliknya. Ini juga boleh disebabkan perubahan di dalam susun atur YouTube, jika anda fikir begitu, buat komen di sini:"
},
"invidiousPermissionRefresh": {
"message": "Pelayar telah membatalkan kebenaran diperlukan untuk berfungsi di Invidious dan laman pihak ke-3 yang lain. Sila tekan butang di bawah untuk aktifkan semula kebenaran ini."
},
"acceptPermission": {
"message": "Terima kebenaran"
},
"permissionRequestSuccess": {
"message": "Permintaan kebenaran berjaya!"
},
"permissionRequestFailed": {
"message": "Permintaan kebenaran gagal, adakah anda menekan menafikan?"
},
"adblockerIssueWhitelist": {
"message": "Jika anda tidak dapat menyelesaikan perkara ini, kemudian lumpuhkan tetapan 'Paksa Semak Saluran Sebelum Langkau', kerana SponsorBlock tidak dapat mengambil semula maklumat saluran untuk video ini"
},
"forceChannelCheck": {
"message": "Pakai Pemeriksaan Saluran Sebelum Melangkau"
},
@@ -529,6 +879,16 @@
"downvoteDescription": {
"message": "Pemasaan Tidak Betul / Salah"
},
"incorrectVote": {
"message": "Salah"
},
"harmfulVote": {
"message": "Memudaratkan",
"description": "Used for chapter segments when the text is harmful/offensive to remove it faster"
},
"incorrectCategory": {
"message": "Tukar Kategori"
},
"nonMusicCategoryOnMusic": {
"message": "Video ini dikategorikan sebagai muzik. Adakah anda pasti ini mempunyai penaja? Sekiranya ini sebenarnya adalah \"Segmen Bukan Muzik\", buka pilihan peluasan dan aktifkan kategori ini. Kemudian, anda boleh menghantar segmen ini sebagai \"Bukan Muzik\" dan bukannya penaja. Sila baca panduan sekiranya anda keliru."
},
@@ -547,5 +907,313 @@
},
"categoryUpdate2": {
"message": "Buka pilihan untuk melangkau perkenalan, pengeluaran luar, barang dagangan, dll."
},
"help": {
"message": "Bantuan"
},
"GotIt": {
"message": "Dah dapat",
"description": "Used as the button to dismiss a tooltip"
},
"fullVideoTooltipWarning": {
"message": "Segmen ini besar. Jika seluruh video adalah mengenai satu topik, kemudian tukar daripada \"Langkau\" ke \"Seluruh Video\". Lihat garis panduan untuk maklumat lanjut."
},
"categoryPillTitleText": {
"message": "Keseluruhan video ini dilabel sebagai kategori ini dan terlalu bersepadu erat untuk dapat dipisah"
},
"chapterNameTooltipWarning": {
"message": "Sebuah nama bab anda ialah serupa dengan kategori. Anda patut guna kategori apabila mungkin sebaliknya."
},
"experiementOptOut": {
"message": "Menarik diri daripada semua eksperimen masa depan",
"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": "Sembunyikan selamanya"
},
"warningTitle": {
"message": "Anda mendapat amaran"
},
"questionButton": {
"message": "Saya ada soalan"
},
"warningConfirmButton": {
"message": "Saya memahami sebabnya"
},
"warningError": {
"message": "Kesilapan apabila mencuba untuk mengakui amaran:"
},
"Donate": {
"message": "Derma"
},
"considerDonating": {
"message": "Bantu pembangunan dana"
},
"hideDonationLink": {
"message": "Sembunyikan Pautan Derma"
},
"darkModeOptionsPage": {
"message": "Mod Gelap Di Halaman Pilihan"
},
"helpPageThanksForInstalling": {
"message": "Terima kasih kerana memasang SponsorBlock."
},
"helpPageReviewOptions": {
"message": "Tolong semak pilihan di bawah"
},
"helpPageFeatureDisclaimer": {
"message": "Banyak ciri dilumpuhkan secara lalai. Jika anda ingin langkau intro, outro, gunakan Invidious, dll. Bolehkan mereka di bawah. Anda boleh juga sembunyi/tunjuk elemen UI."
},
"helpPageHowSkippingWorks": {
"message": "Bagaimana melangkau berfungsi"
},
"helpPageHowSkippingWorks1": {
"message": "Segmen video akan dilangkau secara automatik jika mereka dijumpa di dalam pangkalan data. Anda boleh membuka pop timbul dengan menekan ikon sambungan untuk mendapat pratonton daripada apa yang mereka ada."
},
"helpPageHowSkippingWorks2": {
"message": "Apabila anda melangkau sebuah segmen, anda akan dapat notis. Jika masa nampak salah mengundi turun dengan menekan undi turun! Anda boleh juga undi di dalam pop timbul."
},
"Submitting": {
"message": "Menghantar"
},
"helpPageSubmitting1": {
"message": "Menghantar boleh dilakukan sama ada di dalam pop timbul dengan menekan butang \"Segmen Bermula Sekarang\" atau di dalam pemain video dengan menggunakan butang di pemain."
},
"helpPageSubmitting2": {
"message": "Menekan butang main menunjukkan permulaan segmen dan menekan ikon berhenti menunjukkan tamat. Anda boleh sediakan berbilang sponsor sebelum menekan hantar. Menekan butang muat turun akan hantar. Menekan tong sampah akan padam."
},
"Editing": {
"message": "Menyunting"
},
"helpPageEditing1": {
"message": "Jika anda tersilap, anda boleh sunting atau padam segmen anda selepas menekan butang anak panah atas."
},
"helpPageTooSlow": {
"message": "Ini terlalu lambat"
},
"helpPageTooSlow1": {
"message": "Terdapat kekunci panas jika anda ingin menggunakannya. Tekan kekunci koma bertitik untuk menunjukkan mula/akhir daripada sesuatu segmen penaja. Ini boleh diubah di dalam pilihan. Jika anda tidak menggunakan QWERTY, anda mungkin patut ubah ikatan kekunci."
},
"helpPageCopyOfDatabase": {
"message": "Bolehkah saya mendapat salinan pangkalan data? Apakah akan terjadi jika anda hilang?"
},
"helpPageCopyOfDatabase1": {
"message": "Pangkalan data ialah awam dan boleh didapati di"
},
"helpPageCopyOfDatabase2": {
"message": "Kod sumber tersedia secara percuma. Jadi, walaupun sesuatu berlaku pada saya, penghantaran anda tidak hilang."
},
"helpPageNews": {
"message": "Berita dan bagaimana ia dibuat"
},
"helpPageSourceCode": {
"message": "Dimana saya boleh mendapat kod sumber?"
},
"Credits": {
"message": "Penghargaan"
},
"LearnMore": {
"message": "Ketahui Lebih Lanjut"
},
"FullDetails": {
"message": "Perincian Penuh"
},
"CopyDownvoteButtonInfo": {
"message": "Undi turun dan membuat salinan tempatan untuk anda hantar semula"
},
"OpenCategoryWikiPage": {
"message": "Buka halaman wiki kategori ini."
},
"CopyAndDownvote": {
"message": "Salin dan undi turun"
},
"ContinueVoting": {
"message": "Teruskan Undian"
},
"ChangeCategoryTooltip": {
"message": "Ini akan serta merta dikenakan pada segmen anda"
},
"downvote": {
"message": "Undi turun"
},
"upvote": {
"message": "Undi naik"
},
"hideSegment": {
"message": "Sembunyikan segmen"
},
"skipSegment": {
"message": "Langkau segmen"
},
"playChapter": {
"message": "Main bab"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Gunakan roda tetikus anda sambil di atas kotak edit untuk melaraskan masa dengan cepat. Gabungan kekunci ctrl atau shift boleh digunakan untuk membaiki perubahan."
},
"categoryPillNewFeature": {
"message": "Baharu! Tengok apabila video ialah penaja atau promosi diri sepenuhnya"
},
"dayAbbreviation": {
"message": "h",
"description": "100d"
},
"hourAbbreviation": {
"message": "j",
"description": "100h"
},
"optionsTabBehavior": {
"message": "Tingkah Laku",
"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": "Antaramuka",
"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": "Pintasan papan kekunci",
"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": "Sandaran/Memulihkan",
"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": "Lain-Lain",
"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": "Langkau notis penampilan",
"description": "Option label"
},
"unbind": {
"message": "Buka Ikatan",
"description": "Unbind keyboard shortcut"
},
"notSet": {
"message": "Tidak ditetapkan"
},
"change": {
"message": "Tukar"
},
"youtubeKeybindWarning": {
"message": "Ini adalah dibina dalam pintasan YouTube. Adakah anda pasti anda mahu menggunakannya?"
},
"betaServerWarning": {
"message": "Pelayan BETA ialah didayakan!"
},
"openOptionsPage": {
"message": "Buka halaman pilihan"
},
"resetToDefault": {
"message": "Set semula tetapan kepada asal"
},
"confirmResetToDefault": {
"message": "Adakah anda pasti anda mahu menetapkan semula semua tetapan kepada nilai asalnya? Perkara ini tidak boleh diubah."
},
"exportSegments": {
"message": "Eksport segmen"
},
"importSegments": {
"message": "Import segmen"
},
"Import": {
"message": "Import",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
},
"redeemSuccess": {
"message": "Tebusan Berjaya!"
},
"redeemFailed": {
"message": "Kunci lesen tidak sah"
},
"hideUpsells": {
"message": "Sembunyikan pilihan tidak tersedia tanpa pembayaran tambahan"
},
"chooseACountry": {
"message": "Pilih negara"
},
"noDiscount": {
"message": "Anda tidak layak untuk diskaun"
},
"discountLink": {
"message": "Pautan Diskaun (Lihat harga pink)"
},
"selectYourCountry": {
"message": "Pilih negara anda"
},
"cantAfford": {
"message": "Jika anda tidak mampu untuk membeli lesen, tekan {sini} untuk melihat sama ada anda layak untuk diskaun",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
"message": "Daftar masuk dengan Patreon"
},
"redeem": {
"message": "Tebus"
},
"joinOnPatreon": {
"message": "Langgan di Patreon"
},
"oneTimePurchase": {
"message": "Pembelian Sekali"
},
"enterLicenseKey": {
"message": "Masukkan Kunci Lesen"
},
"unsubmittedSegmentCounts": {
"message": "Anda pada masa ini mempunyai {0} di {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
},
"unsubmittedSegmentCountsZero": {
"message": "Anda pada masa ini tiada segmen belum dihantar",
"description": "Replaces 'unsubmittedSegmentCounts' string when there are no unsubmitted segments"
},
"unsubmittedSegmentsSingular": {
"message": "segmen belum dihantar",
"description": "Example: You currently have 1 *unsubmitted segment* on 1 video"
},
"unsubmittedSegmentsPlural": {
"message": "segmen belum dihantar",
"description": "Example: You currently have 12 *unsubmitted segments* on 5 videos"
},
"videosSingular": {
"message": "video",
"description": "Example: You currently have 3 unsubmitted segments on 1 *video*"
},
"videosPlural": {
"message": "video",
"description": "Example: You currently have 12 unsubmitted segments on 5 *videos*"
},
"clearUnsubmittedSegments": {
"message": "Kosongkan semua segmen",
"description": "Label for a button in settings"
},
"clearUnsubmittedSegmentsConfirm": {
"message": "Adakah anda pasti anda mahu kosongkan semua segmen belum dihantar anda?",
"description": "Confirmation message for the Clear unsubmitted segments button"
},
"showUnsubmittedSegments": {
"message": "Tunjuk segmen",
"description": "Show/hide button for the unsubmitted segments list"
},
"hideUnsubmittedSegments": {
"message": "Sembunyikan segmen",
"description": "Show/hide button for the unsubmitted segments list"
},
"videoID": {
"message": "ID Video",
"description": "Header of the unsubmitted segments list"
},
"segmentCount": {
"message": "Kiraan Segmen",
"description": "Header of the unsubmitted segments list"
},
"actions": {
"message": "Tindakan",
"description": "Header of the unsubmitted segments list"
},
"exportSegmentsAsURL": {
"message": "Kongsi sebagai URL"
}
}

View File

@@ -35,6 +35,9 @@
"message": "Segmenten weergeven als hoofdstukken",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Huidig segment weergeven naast videotijd"
},
"upvoteButtonInfo": {
"message": "Stemmen op deze inzending"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Er is een verbindingsfout opgetreden. Foutcode: "
},
"segmentsStillLoading": {
"message": "Segmenten worden nog steeds geladen..."
},
"clearTimes": {
"message": "Segmenten verwijderen"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Pop-up sluiten"
},
"SubmitTimes": {
"message": "Segmenten indienen"
"closeIcon": {
"message": "Pictogram voor sluiten"
},
"OpenSubmissionMenu": {
"message": "Inzending-menu openen"
},
"sortSegments": {
"message": "Segmenten sorteren"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Tijdstippen wissen"
},
"submitTimesButton": {
"message": "Tijdstippen indienen"
},
"publicStats": {
"message": "Dit wordt gebruikt op de publieke statistiekenpagina om te laten zien hoeveel u heeft bijgedragen. Bekijk het"
},
@@ -415,16 +421,16 @@
"message": "Controleer status.sponsor.ajay.app voor de serverstatus."
},
"changeUserID": {
"message": "Uw gebruikers-ID importeren/exporteren"
"message": "Uw privé-gebruikers-ID importeren/exporteren"
},
"whatChangeUserID": {
"message": "Dit moet privé gehouden worden. Dit is als een wachtwoord en mag met niemand gedeeld worden. Als iemand dit heeft, kan hij zich voordoen als u. Klik op het klembordpictogram in de pop-up als u op zoek bent naar uw publieke gebruikers-ID."
},
"setUserID": {
"message": "Gebruikers-ID instellen"
"message": "Privé-gebruikers-ID instellen"
},
"userIDChangeWarning": {
"message": "Waarschuwing: wijzigen van de gebruikers-ID is permanent. Weet u zeker dat u dit wilt doen? Zorg ervoor dat u een back-up maakt van uw oude ID, voor het geval dat."
"message": "Waarschuwing: wijzigen van de privé-gebruikers-ID is permanent. Weet u zeker dat u dit wilt doen? Zorg ervoor dat u een back-up maakt van uw oude ID, voor het geval dat."
},
"createdBy": {
"message": "Gemaakt door"
@@ -433,7 +439,7 @@
"message": "Ondersteuning voor YouTube-sites van derden"
},
"supportOtherSitesDescription": {
"message": "Ondersteuning voor YouTube-clients van derden. Om ondersteuning in te schakelen moet u de extra machtigingen accepteren. Dit werkt NIET in incognito in Chrome en andere Chromium-varianten.",
"message": "YouTube-clients van derden ondersteunen. Om ondersteuning in te schakelen, moet u de extra machtigingen accepteren.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -524,7 +530,7 @@
"message": "Laden uit bestand"
},
"whatExportOptions": {
"message": "Dit is uw volledige configuratie in JSON. Dit is inclusief uw gebruikers-ID, dus zorg ervoor dat u dit verstandig deelt."
"message": "Dit is uw volledige configuratie in JSON. Dit is inclusief uw privé-gebruikers-ID, dus zorg ervoor dat u dit verstandig deelt."
},
"setOptions": {
"message": "Opties instellen"
@@ -689,7 +695,7 @@
"message": "Opvulling zijspoor/humor"
},
"category_filler_description": {
"message": "Zijspoor-scènes die alleen ter opvulling of als humor worden toegevoegd en niet noodzakelijk zijn om de hoofdinhoud van de video te begrijpen. Segmenten die context of achtergrondinformatie verschaffen, mogen hier niet onder vallen."
"message": "Zijspoor-scènes die alleen ter opvulling of als humor worden toegevoegd en niet noodzakelijk zijn om de hoofdinhoud van de video te begrijpen. Segmenten die context of achtergrondinformatie verschaffen, mogen hier niet onder vallen. Dit is een zeer agressieve categorie, bedoeld voor als u niet in de stemming bent voor \"plezier\"."
},
"category_filler_short": {
"message": "Opvulling"
@@ -933,7 +939,7 @@
"message": "Voor altijd verbergen"
},
"warningChatInfo": {
"message": "We hebben gemerkt dat u een aantal veelvoorkomende fouten maakte zonder slechte bedoelingen"
"message": "Het viel ons op dat u enkele veel voorkomende fouten maakte. We waarderen uw werk tot nu toe zeer, maar we streven hier naar perfectie, dus zelfs heel kleine foutjes zijn belangrijk :)"
},
"warningTitle": {
"message": "U heeft een waarschuwing gekregen"
@@ -1046,6 +1052,12 @@
"hideSegment": {
"message": "Segment verbergen"
},
"skipSegment": {
"message": "Segment overslaan"
},
"playChapter": {
"message": "Hoofdstuk afspelen"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Gebruik het muiswiel terwijl u over het invoerveld beweegt om de tijd snel aan te passen. Combinaties van de ctrl- of shift-toets kunnen worden gebruikt om de wijzigingen te verfijnen."
},
@@ -1140,10 +1152,6 @@
"selectYourCountry": {
"message": "Selecteer uw land"
},
"alreadyDonated": {
"message": "Als u al eerder een bedrag hebt gedoneerd, kunt u gratis toegang krijgen door een e-mail te sturen:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Als u het zich niet kunt veroorloven om een licentie aan te schaffen, klik dan {hier} om te zien of u in aanmerking komt voor een korting",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1163,17 +1171,6 @@
"enterLicenseKey": {
"message": "Licentiesleutel invoeren"
},
"chaptersPage1": {
"message": "De SponsorBlock-functie voor crowd-sourced hoofdstukken is alleen beschikbaar voor mensen die een licentie kopen of voor mensen die gratis toegang krijgen vanwege hun bijdragen in het verleden"
},
"chaptersPage2": {
"message": "Opmerking: toestemming om hoofdstukken in te dienen is nog steeds gebaseerd op berekende reputatie. Door een licentie te kopen kunt u enkel hoofdstukken bekijken die door anderen zijn ingediend",
"description": "On the chapters page for getting access to the paid chapters feature"
},
"chapterNewFeature": {
"message": "Nieuwe functie: gecrowdsourcete aangepaste hoofdstukken. Dit zijn hoofdstukken met een eigen naam in video's die gestapeld kunnen worden om steeds preciezer te worden. Koop een licentie om de ingezonden hoofdstukken op deze video te bekijken, zoals: ",
"description": "After the comma, a list of chapters for this video will appear"
},
"unsubmittedSegmentCounts": {
"message": "U hebt momenteel {0} in {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1228,5 +1225,8 @@
},
"exportSegmentsAsURL": {
"message": "Delen als URL"
},
"allowScrollingToEdit": {
"message": "Scrollen toestaan om tijdstippen te bewerken"
}
}

View File

@@ -112,9 +112,6 @@
"closePopup": {
"message": "Lukk oppsprett"
},
"SubmitTimes": {
"message": "Send inn segmenter"
},
"submitCheck": {
"message": "Er du sikker på at du vil sende inn dette?"
},
@@ -149,9 +146,6 @@
"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"
},
@@ -372,28 +366,15 @@
"statusReminder": {
"message": "Sjekk status.sponsor.ajay.app for tjenerstatus."
},
"changeUserID": {
"message": "Importer/Eksporter din bruker-ID"
},
"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."
},
"setUserID": {
"message": "Angi bruker-ID"
},
"userIDChangeWarning": {
"message": "Advarsel: Å endre bruker-ID-en din er permanent. Er du sikker på at du vil gjøre dette? Sørg for å ta sikkerhetskopi av din gamle for sikkerhets skyld."
},
"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: "
},
@@ -475,9 +456,6 @@
"exportOptionsUpload": {
"message": "Last fra fil"
},
"whatExportOptions": {
"message": "Dette er hele oppsettet ditt i JSON. Det inkluderer bruker-ID-en din, så sørg for å være beskjeden med å dele det."
},
"setOptions": {
"message": "Angi innstillinger"
},
@@ -579,9 +557,6 @@
"category_preview": {
"message": "Forhåndsvisning/Oppsummering"
},
"category_filler_description": {
"message": "Intetsigende segmenter kun lagt til som fyllstoff eller humor som ikke er nødvendig for å forstå hovedinnholdet i videoen. Dette bør ikke inkludere segmenter som gir kontekst eller bakgrunnsdetaljer."
},
"category_filler_short": {
"message": "Fyllstoff"
},

View File

@@ -35,6 +35,9 @@
"message": "Pokazuj segmenty jako rozdziały",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Pokaż bieżący segment poza czasem wideo"
},
"upvoteButtonInfo": {
"message": "Zagłosuj na ten segment"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Wystąpił błąd połączenia. Kod błędu: "
},
"segmentsStillLoading": {
"message": "Segmenty nadal się ładują..."
},
"clearTimes": {
"message": "Wyczyść segmenty"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Zamknij okno"
},
"SubmitTimes": {
"message": "Prześlij segmenty"
"closeIcon": {
"message": "Wyłącz ikonę"
},
"OpenSubmissionMenu": {
"message": "Otwórz menu zgłoszenia"
},
"sortSegments": {
"message": "Sortuj segmenty"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Usuń czasy"
},
"submitTimesButton": {
"message": "Wyślij czasy"
},
"publicStats": {
"message": "Ten dane są używane na naszej stronie żeby pokazać twój wkład. Zobacz to"
},
@@ -246,6 +252,12 @@
"whatRefetchWhenNotFound": {
"message": "Jeśli film jest nowy i nie znaleziono żadnych segmentów, dane będą pobierane na nowo co kilka minut w czasie oglądania."
},
"enableShowCategoryWithoutPermission": {
"message": "Pokaż kategorie w menu zgłoszeń, nawet bez uprawnień do zgłaszania"
},
"whatShowCategoryWithoutPermission": {
"message": "Niektóre kategorie wymagają specjalnych uprawnień, by przesłać segment ze względu na minimalne wymogi reputacji"
},
"showNotice": {
"message": "Pokaż informacje ponownie"
},
@@ -409,16 +421,16 @@
"message": "Sprawdź status serwera na status.sponsor.ajay.app"
},
"changeUserID": {
"message": "Importuj/Eksportuj swój identyfikator użytkownika"
"message": "Importuj/Eksportuj swój prywatny UserID"
},
"whatChangeUserID": {
"message": "To powinno pozostać prywatne. Jest to niczym hasło i nie powinno zostać nikomu udostępnione. Przy jego użyciu ktoś może się pod ciebie podszywać. Jeśli szukasz publicznego ID użytkownika, kliknij ikonę schowka w wyskakującym oknie."
},
"setUserID": {
"message": "Ustaw identyfikator użytkownika"
"message": "Ustaw prywatny UserID"
},
"userIDChangeWarning": {
"message": "Uwaga: Zmiana identyfikatora użytkownika jest trwała. Czy na pewno chcesz to zrobić? Na wszelki wypadek skopiuj swój poprzedni."
"message": "Uwaga: Zmiana ID użytkownika jest trwała. Czy na pewno chcesz to zrobić? Na wszelki wypadek skopiuj swój poprzedni ID."
},
"createdBy": {
"message": "Stworzony przez"
@@ -427,7 +439,7 @@
"message": "Obsługa stron YouTube firm trzecich"
},
"supportOtherSitesDescription": {
"message": "Wspieraj nieoficjalne klienty YouTube'a. Aby włączyć dla nich wsparcie, musisz przyznać dodatkowe uprawnienia. Ta opcja nie działa w trybie incognito w Chrome i innych przeglądarkach bazujących na Chromium.",
"message": "Obsługa zewnętrznych klientów YouTube. Aby włączyć obsługę, należy zaakceptować dodatkowe uprawnienia.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -463,6 +475,12 @@
"minDurationDescription": {
"message": "Segmenty krótsze niż ustawiona wartość nie będą pomijane ani pokazywane w odtwarzaczu."
},
"enableManualSkipOnFullVideo": {
"message": "Użyj ręcznego pomijania, gdy istnieje etykieta na całym filmie"
},
"whatManualSkipOnFullVideo": {
"message": "Dla osób, które chcą oglądać film nieprzerwanie, jeśli film jest w pełni sponsorowany lub autopromocyjny."
},
"skipNoticeDuration": {
"message": "Czas trwania powiadomienia pominięcia (sekundy):"
},
@@ -512,7 +530,7 @@
"message": "Wczytaj z pliku"
},
"whatExportOptions": {
"message": "Jest to cała twoja konfiguracja w formacie JSON. Zawarty jest w niej twój identyfikator użytkownika, więc uważaj, komu ją udostępniasz."
"message": "Jest to cała twoja konfiguracja w formacie JSON. Zawarty jest w niej twój prywatny UserID, więc uważaj, komu ją udostępniasz."
},
"setOptions": {
"message": "Zapisz ustawienia"
@@ -677,7 +695,7 @@
"message": "Wypełniacz nietematyczny/żart"
},
"category_filler_description": {
"message": "Sceny nietematyczne dodawane tylko jako wypełniacz lub dla humoru, które nie są wymagane do zrozumienia głównej treści filmu. Nie powinno to obejmować segmentów zawierających informacje kontekstowe lub szczegółowe."
"message": "To jest bardzo agresywna kategoria, której możesz użyć, jeżeli nie masz ochoty, by widzieć scenki humorystyczne/wypełniacze."
},
"category_filler_short": {
"message": "Wypełniacz"
@@ -779,6 +797,10 @@
"message": "Pokaż ikonę, gdy film jest w całości reklamą",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Pokaż etykiety również na miniaturach filmów",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Kolor nieprzesłanego segmentu",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -921,7 +943,7 @@
"message": "Schowaj na zawsze"
},
"warningChatInfo": {
"message": "Zauważyliśmy, że popełniałeś pewne powszechne błędy, które nie są złośliwe"
"message": "Zauważyliśmy, że popełniłeś pewne powszechne błędy. Bardzo doceniamy dotychczasową pracę, ale dążymy tutaj do doskonałości, więc nawet bardzo małe błędy mają znaczenie :)"
},
"warningTitle": {
"message": "Otrzymałeś ostrzeżenie"
@@ -1034,6 +1056,12 @@
"hideSegment": {
"message": "Ukryj segment"
},
"skipSegment": {
"message": "Pomiń segment"
},
"playChapter": {
"message": "Odtwórz rozdział"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Użyj scroll'a myszy po najechaniu nad pole edycji, aby szybko dostosować czas. Kombinacje z ctrl'em i shift'em mogą być użyte, aby doszlifować zmiany."
},
@@ -1100,6 +1128,9 @@
"exportSegments": {
"message": "Eksportuj segmenty"
},
"importSegments": {
"message": "Importuj segmenty"
},
"Import": {
"message": "Importuj",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
@@ -1116,9 +1147,19 @@
"chooseACountry": {
"message": "Wybierz kraj"
},
"noDiscount": {
"message": "Nie kwalifikujesz się do przeceny"
},
"discountLink": {
"message": "Link rabatowy"
},
"selectYourCountry": {
"message": "Wybierz swój kraj"
},
"cantAfford": {
"message": "Jeśli nie możesz sobie pozwolić na zakup licencji, kliknij {tutaj} aby sprawdzić, czy kwalifikujesz się do zniżki",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
"message": "Zaloguj się za pomocą Patreon"
},
@@ -1134,10 +1175,6 @@
"enterLicenseKey": {
"message": "Wprowadź klucz licencyjny"
},
"chapterNewFeature": {
"message": "Nowa funkcja: niestandardowe rozdziały ze źródeł społecznościowych. Są to sekcje niestandardowo nazwane w filmach, które mogą być ustawione w sposób bardziej precyzyjny. Kup licencję, aby wyświetlić rozdziały przedstawione na tym filmie, takie jak: ",
"description": "After the comma, a list of chapters for this video will appear"
},
"unsubmittedSegmentCounts": {
"message": "Aktualnie masz {0} na {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1192,5 +1229,11 @@
},
"exportSegmentsAsURL": {
"message": "Udostępnij jako adres URL"
},
"segmentFetchFailureWarning": {
"message": "Ostrzeżenie: Serwer nie odpowiedział jeszcze na segmenty. Być może segmenty na tym filmie są już wysłane, ale po prostu nie otrzymano ich z powodu problemów z serwerem."
},
"allowScrollingToEdit": {
"message": "Zezwalaj na scroll'owanie do edycji czasów"
}
}

View File

@@ -1,17 +1,17 @@
{
"fullName": {
"message": "SponsorBlock para YouTube - Pule patrocínios",
"message": "SponsorBlock para YouTube - Pule Patrocínios",
"description": "Name of the extension."
},
"Description": {
"message": "Pule patrocinadores, pedidos para se inscrever, e outros nos vídeos do YouTube. Reporte patrocinadores nos vídeos que você assistir para economizar o tempo dos outros.",
"message": "Pule patrocinadores, pedidos para se inscrever e mais em vídeos do YouTube. Denuncie patrocinadores em vídeos que você assistir para economizar o tempo dos outros.",
"description": "Description of the extension."
},
"400": {
"message": "O servidor disse que esse pedido foi inválido"
},
"429": {
"message": "Você enviou muitos segmentos para esse vídeo, tem certeza que tem tantos assim?"
"message": "Você enviou muitos segmentos para esse vídeo, tem certeza de que são tantos assim?"
},
"409": {
"message": "Isso já foi enviado antes"
@@ -35,14 +35,17 @@
"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 nesse segmento positivamente"
"message": "Aprovar este segmento"
},
"reportButtonTitle": {
"message": "Reportar"
"message": "Denunciar"
},
"reportButtonInfo": {
"message": "Reportar esse segmento como inválido."
"message": "Denunciar este segmento como inválido."
},
"Dismiss": {
"message": "Ignorar"
@@ -54,7 +57,7 @@
"message": "Nunca mostrar"
},
"hitGoBack": {
"message": "Aperta \"reverter pulo\" para voltar onde estava."
"message": "Aperte \"reverter pulo\" para voltar onde você estava."
},
"unskip": {
"message": "Reverter pulo"
@@ -63,7 +66,7 @@
"message": "Pular novamente"
},
"unmute": {
"message": "Ativar som"
"message": "Reativar o som"
},
"paused": {
"message": "Pausado"
@@ -72,13 +75,13 @@
"message": "Temporizador parado"
},
"confirmMSG": {
"message": "\n\nPara editar ou remover linhas individuais, clique com o botão direito ou abra o popup da extensão pelo icone no canto superior direito."
"message": "Para editar ou remover valores individuais, clique no botão de informações ou abra o pop-up da extensão clicando no ícone no canto superior direito."
},
"clearThis": {
"message": "Tem certeza que quer limpar isso?\n\n"
"message": "Tem certeza de que deseja limpar isso?\n\n"
},
"Unknown": {
"message": "Houve um erro ao enviar seus segmentos, tente novamente mais tarde."
"message": "Ocorreu um erro ao enviar seus segmentos, tente novamente mais tarde."
},
"sponsorFound": {
"message": "Este vídeo tem segmentos no banco de dados!"
@@ -87,16 +90,16 @@
"message": "Nenhum segmento encontrado"
},
"sponsorStart": {
"message": "O Segmento Começa Agora"
"message": "O segmento começa agora"
},
"sponsorEnd": {
"message": "O Segmento Termina Agora"
"message": "O segmento termina agora"
},
"sponsorCancel": {
"message": "Cancelar Criação de Segmento"
"message": "Cancelar criação de segmento"
},
"noVideoID": {
"message": "Nenhum vídeo do YouTube encontrado.\nSe isto estiver incorreto, atualize a aba."
"message": "Nenhum vídeo do YouTube encontrado.\nSe isto estiver errado, atualize a guia."
},
"refreshSegments": {
"message": "Atualizar segmentos"
@@ -108,25 +111,31 @@
"message": "Votado!"
},
"serverDown": {
"message": "Parece que o servidor caiu. Contate o desenvolvedor o quanto antes."
"message": "Parece que o servidor está fora do ar. Entre em contato com o desenvolvedor imediatamente."
},
"connectionError": {
"message": "Ocorreu um erro de conexão. Código de erro: "
},
"segmentsStillLoading": {
"message": "Segmentos ainda carregando..."
},
"clearTimes": {
"message": "Limpar Segmentos"
"message": "Limpar segmentos"
},
"openPopup": {
"message": "Abrir o Popup SponsorBlock"
"message": "Abrir pop-up do SponsorBlock"
},
"closePopup": {
"message": "Fechar Popup"
"message": "Fechar pop-up"
},
"SubmitTimes": {
"message": "Enviar Segmentos"
"closeIcon": {
"message": "Ícone de fechar"
},
"OpenSubmissionMenu": {
"message": "Abrir menu de envio"
},
"sortSegments": {
"message": "Organizar Segmentos"
"message": "Organizar segmentos"
},
"submitCheck": {
"message": "Você tem certeza que deseja enviar isto?"
@@ -138,7 +147,7 @@
"message": "Remover canal da lista branca"
},
"voteOnTime": {
"message": "Votar Em Um Segmento"
"message": "Votar em um segmento"
},
"Submissions": {
"message": "Envios"
@@ -160,13 +169,10 @@
"message": "Dica: Você pode configurar os atalhos de tecla para enviar nas opções"
},
"clearTimesButton": {
"message": "Limpar Intervalos"
},
"submitTimesButton": {
"message": "Enviar Intervalos"
"message": "Limpar intervalos"
},
"publicStats": {
"message": "Isso é usado na página pública de estatísticas que mostra o quanto você já contribuiu. Veja-a"
"message": "Isto é usado na página pública de estatísticas que mostra o quanto você já contribuiu. Veja-a"
},
"Username": {
"message": "Nome de usuário"
@@ -175,7 +181,7 @@
"message": "Definir nome de usuário"
},
"copyPublicID": {
"message": "Copiar ID Pública de Usuário"
"message": "Copiar ID pública de usuário"
},
"copySegmentID": {
"message": "Copiar ID do segmento"
@@ -190,88 +196,94 @@
"message": "Opções"
},
"showButtons": {
"message": "Mostrar botões no player do Youtube"
"message": "Mostrar botões no reprodutor do YouTube"
},
"hideButtons": {
"message": "Esconder botões no player do Youtube"
"message": "Esconder botões no reprodutor do YouTube"
},
"hideButtonsDescription": {
"message": "Esta opção esconde os botões que aparecem para enviar segmentos no player do YouTube."
"message": "Esta opção esconde os botões que aparecem para enviar segmentos no reprodutor do YouTube."
},
"showSkipButton": {
"message": "Manter botão Pular para os Destaques no player"
"message": "Mostrar botão pular para os destaques no reprodutor"
},
"showInfoButton": {
"message": "Mostrar botão de Informações no player do Youtube"
"message": "Mostrar botão de informações no reprodutor do YouTube"
},
"hideInfoButton": {
"message": "Esconder botão de Informações no player do Youtube"
"message": "Ocultar botão de informações no reprodutor do YouTube"
},
"autoHideInfoButton": {
"message": "Esconder Automaticamente o Botão de Informação"
"message": "Ocultar automaticamente o botão de informação"
},
"hideDeleteButton": {
"message": "Esconder botão de Apagar no player do Youtube"
"message": "Ocultar botão de apagar no reprodutor do YouTube"
},
"showDeleteButton": {
"message": "Mostrar botão de Apagar no player do Youtube"
"message": "Mostrar botão de apagar no reprodutor do YouTube"
},
"enableViewTracking": {
"message": "Ativar Contador de Segmentos Pulados"
"message": "Ativar contador de segmentos pulados"
},
"whatViewTracking": {
"message": "Este recurso controla quais segmentos você pulou para permitir que os usuários saibam o quanto a submissão deles ajudou outros e foi usada como métrica, juntamente com votos positivos para garantir que nenhum spam entre no banco de dados. A extensão envia uma mensagem ao servidor cada vez que você pular um segmento. Espera-se que a maioria das pessoas não mude essa configuração, para que os números de exibição estejam corretos. :)"
"message": "Este recurso rastreia quais segmentos você pulou para permitir que os usuários saibam o quanto o envio deles ajudou outras pessoas e é usado como uma métrica junto com votos positivos para garantir que spam não entre no banco de dados. A extensão envia uma mensagem ao servidor toda vez que você pula um segmento. Espera-se que a maioria das pessoas não altere essa configuração para que os números de exibição sejam precisos. :)"
},
"enableViewTrackingInPrivate": {
"message": "Ativar Pular Contagem de Rastreamento em Abas Privadas/Incógnito"
"message": "Ativar rastreamento de contagem de pulos nas guias privadas/anônimas"
},
"enableTrackDownvotes": {
"message": "Armazenar votos negativos de segmentos"
},
"whatTrackDownvotes": {
"message": "Qualquer segmento que você der voto negative permanecerá oculto mesmo após recarregar"
"message": "Quaisquer segmentos em que você votou negativamente permanecerão ocultos mesmo após a atualização"
},
"trackDownvotesWarning": {
"message": "Aviso: Desativar isto excluirá todos os votos negativos armazenados anteriormente"
},
"enableQueryByHashPrefix": {
"message": "Consulta Por Prefixo Hash"
"message": "Consulta por prefixo de hash"
},
"whatQueryByHashPrefix": {
"message": "Em vez de solicitar segmentos do servidor usando o videoID, os 4 primeiros caracteres do hash do videoID foram enviados. Este servidor enviará dados de volta para todos os vídeos com hashes similares."
"message": "Em vez de solicitar segmentos do servidor usando o videoID, são enviados os 4 primeiros caracteres da hash do videoID. Este servidor enviará dados de volta para todos os vídeos com hashes similares."
},
"enableRefetchWhenNotFound": {
"message": "Recuperar Segmentos Em Novos Vídeos"
"message": "Recuperar segmentos em novos vídeos"
},
"whatRefetchWhenNotFound": {
"message": "Se o vídeo for novo e nenhum segmento for encontrado, continuaremos buscando enquanto você assiste."
},
"enableShowCategoryWithoutPermission": {
"message": "Mostrar categorias no menu de envios mesmo sem permissão de envio"
},
"whatShowCategoryWithoutPermission": {
"message": "Algumas categorias exigem autorização de envio devido a requisitos mínimos de reputação"
},
"showNotice": {
"message": "Mostrar notificação outra vez"
},
"showSkipNotice": {
"message": "Mostrar Aviso Após Um Segmento Ser Ignorado"
"message": "Mostrar aviso após um segmento ser ignorado"
},
"showCategoryGuidelines": {
"message": "Mostrar Categoria de Ajuda"
"message": "Mostrar categoria de ajuda"
},
"noticeVisibilityMode0": {
"message": "Avisos de Ignorar em Tamanho Inteiro"
"message": "Avisos de pulo em tamanho completo"
},
"noticeVisibilityMode1": {
"message": "Avisos de Ignorar pequenos quando Pulado Automaticamente"
"message": "Avisos de pulo pequeno no pulo automático"
},
"noticeVisibilityMode2": {
"message": "Todos os Avisos de Ignorar em Tamanho Pequeno"
"message": "Todos os avisos de pulo pequeno"
},
"noticeVisibilityMode3": {
"message": "Avisos de Ignorar semi-transparentes quando Pulado Automaticamente"
"message": "Avisos de pulo semitransparente no pulo automático"
},
"noticeVisibilityMode4": {
"message": "Todos os Avisos de Ignorar semi-transparentes"
"message": "Todos os avisos de pulo semitransparente"
},
"longDescription": {
"message": "O SponsorBlock permite que você pule patrocinadores, introduções, créditos finais, lembretes de inscrição, e outras partes irritantes dos vídeos do YouTube. O SponsorBlock é uma extensão de navegador de crowdsourcing que permite enviar a qualquer um o tempo inicial e final de segmentos patrocinados de vídeos do YouTube. Assim que uma pessoa enviar essa informação, todas as outras pessoas com essa extensão irão pular o segmento patrocinado. Você também pode pular seções que não são de música dos vídeos de música.",
"message": "O SponsorBlock permite que você pule patrocinadores, introduções, créditos finais, lembretes de inscrição, e outras partes irritantes dos vídeos do YouTube. O SponsorBlock é uma extensão de navegador de colaboração coletiva que permite enviar a qualquer um o tempo inicial e final de segmentos patrocinados de vídeos do YouTube. Assim que uma pessoa enviar essa informação, todas as outras pessoas com essa extensão irão pular o segmento patrocinado. Você também pode pular seções sem música em vídeos de música.",
"description": "Full description of the extension on the store pages."
},
"website": {
@@ -299,7 +311,7 @@
"description": "Keybind label"
},
"setSubmitKeybind": {
"message": "Enviar Segmentos",
"message": "Enviar segmentos",
"description": "Keybind label"
},
"nextChapterKeybind": {
@@ -311,10 +323,10 @@
"description": "Keybind label"
},
"keybindDescription": {
"message": "Pressione a tecla desejada e escolha quaisquer teclas modificadoras deseja utilizar."
"message": "Selecione uma tecla, digitando-a e escolha as teclas modificadoras que deseja usar."
},
"0": {
"message": "Tempo limite de conexão excedida. Cheque a sua conexão de internet. Se a sua internet estiver funcionando, o servidor está sobrecarregado ou fora do ar."
"message": "Tempo limite de conexão excedida. Verifique a sua conexão de internet. Se a sua internet estiver funcionando, o servidor está provavelmente sobrecarregado ou fora do ar."
},
"disableSkipping": {
"message": "Pular está habilitado"
@@ -323,7 +335,7 @@
"message": "Pular está desabilitado"
},
"yourWork": {
"message": "Suas submissões",
"message": "Seus envios",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
@@ -339,7 +351,7 @@
"message": "Silenciar"
},
"full": {
"message": "Vídeo completo",
"message": "Vídeo Completo",
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
@@ -353,7 +365,7 @@
"description": "Used for skipping to things (Skip to Highlight)"
},
"skipped": {
"message": "{0} Ignorado",
"message": "{0} Pulado (a)",
"description": "Example: Sponsor Skipped"
},
"muted": {
@@ -365,10 +377,10 @@
"description": "Used for skipping to things (Skipped to Highlight)"
},
"disableAutoSkip": {
"message": "Desativar Salto Automático"
"message": "Desativar pulo automático"
},
"enableAutoSkip": {
"message": "Ativar Salto Automático"
"message": "Ativar pulo automático"
},
"audioNotification": {
"message": "Notificação de áudio ao pular"
@@ -380,7 +392,7 @@
"message": "Mostrar tempo com pulos removidos"
},
"showTimeWithSkipsDescription": {
"message": "Este tempo aparece em parênteses ao lado do tempo atual, abaixo da barra de procura. Isto mostra a duração total do vídeo menos qualquer segmento. Isto inclui segmentos marcados apenas como \"Mostrar na Barra de Procura\"."
"message": "Este tempo aparece em parênteses ao lado do tempo atual, abaixo da barra de progresso. Isto mostra a duração total do vídeo sem qualquer segmento. Isto inclui segmentos marcados apenas como \"Mostrar na barra de progresso\"."
},
"youHaveSkipped": {
"message": "Você pulou "
@@ -398,7 +410,7 @@
"message": "horas"
},
"youHaveSavedTime": {
"message": "Você poupou das pessoas",
"message": "Você poupou as pessoas",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"youHaveSavedTimeEnd": {
@@ -406,38 +418,38 @@
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"statusReminder": {
"message": "Verifique status.sponsor.ajay.app para o status do servidor."
"message": "Verifique status.sponsor.ajay.app para ver o estado do servidor."
},
"changeUserID": {
"message": "Importar/Exportar seu ID de usuário"
"message": "Importar/exportar seu ID de usuário privado"
},
"whatChangeUserID": {
"message": "Esta informação deve se mantida privada. Ela é como uma senha e não deve ser compartilhada. Outras pessoas poderão se passar por você caso obtenham acesso. Se estiver procurando por sua ID Pública de Usuário, clique no ícone de prancheta no popup."
"message": "Esta informação deve se mantida privada. Ela é como uma senha e não deve ser compartilhada. Outras pessoas poderão se passar por você caso obtenham acesso. Se estiver procurando por sua ID pública de usuário, clique no ícone de prancheta no pop-up."
},
"setUserID": {
"message": "Definir ID de usuário"
"message": "Definir ID de usuário privado"
},
"userIDChangeWarning": {
"message": "Atenção: A alteração do ID de usuário é permanente. Você tem certeza que deseja fazer isso? Certifique-se de fazer backup de seu ID antigo por precaução."
"message": "Aviso: A alteração do ID de usuário privado é permanente. Tem certeza de que gostaria de fazer isso? Certifique-se de fazer backup do seu antigo por precaução."
},
"createdBy": {
"message": "Criado por"
},
"supportOtherSites": {
"message": "Suporte a Sites do YouTube de Terceiros"
"message": "Suporte a sites do YouTube de terceiros"
},
"supportOtherSitesDescription": {
"message": "Suporte a clientes de terceiros do YouTube. Para habilitar o suporte, você deve aceitar as permissões extras. Isso NÃO funciona em incógnito no Chrome e outras variantes do Chromium.",
"message": "Suporte a clientes do YouTube de terceiros. Para habilitar o suporte, você deve aceitar as permissões extras.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
"message": "Sites Suportados: "
"message": "Sites suportados: "
},
"optionsInfo": {
"message": "Ativar apoio ao Invidious, desabilitar pular automaticamente, ocultar botões e mais."
"message": "Ativar apoio ao Invidious, desativar pulo automático, ocultar botões e mais."
},
"addInvidiousInstance": {
"message": "Adicionar Instância de Cliente de Terceiros"
"message": "Adicionar instância de cliente de terceiros"
},
"addInvidiousInstanceDescription": {
"message": "Adicionar uma instância personalizada. Isso deve ser formatado APENAS com o domínio. Exemplo: invidious.ajay.app"
@@ -449,13 +461,13 @@
"message": "Este é um domínio inválido. Ele deve incluir APENAS a parte do domínio. Exemplo: invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "Redefinir Lista de Instâncias do Invidious"
"message": "Redefinir lista de instâncias do Invidious"
},
"resetInvidiousInstanceAlert": {
"message": "Você está prestes a redefinir a lista de instâncias do Invidious"
},
"currentInstances": {
"message": "Instâncias Atuais:"
"message": "Instâncias atuais:"
},
"minDuration": {
"message": "Duração mínima (segundos):"
@@ -463,17 +475,23 @@
"minDurationDescription": {
"message": "Segmentos menores do que o valor definido não serão pulados ou mostrados no reprodutor."
},
"enableManualSkipOnFullVideo": {
"message": "Usar o pulo manual quando houver um rótulo de vídeo completo"
},
"whatManualSkipOnFullVideo": {
"message": "Para pessoas que desejam assistir ao vídeo sem interrupção se ele for totalmente patrocinado ou de auto-promoção."
},
"skipNoticeDuration": {
"message": "Duração do aviso prévio de pular (segundos):"
"message": "Duração do aviso prévio de pulo (segundos):"
},
"skipNoticeDurationDescription": {
"message": "O aviso de pular ficará na tela por pelo menos este tempo. Para o pulo manual, pode ser visível por mais tempo."
"message": "O aviso de pulo ficará na tela por pelo menos este tempo. Para o pulo manual, pode ser visível por mais tempo."
},
"shortCheck": {
"message": "A seguinte submissão é mais curta do que sua opção de duração mínima. Isto significa que já foi enviada e que está sendo ignorada devido a esta opção. Tem certeza que deseja enviar mesmo assim?"
"message": "O seguinte envio é mais curto do que sua opção de duração mínima. Isto significa que já foi enviada e está sendo ignorada devido a esta opção. Tem certeza que deseja enviar mesmo assim?"
},
"liveOrPremiere": {
"message": "Não é permitido o envio de segmentos em livestreams ou premieres ainda em andamento. Por favor, aguarde até que terminem, e em seguida, atualize a página e verifique se os segmentos ainda são válidos."
"message": "Não é permitido o envio de segmentos em transmissões ao vivo ou estreias ainda em andamento. Por favor, aguarde até que terminem, e em seguida, atualize a página e verifique se os segmentos ainda são válidos."
},
"showUploadButton": {
"message": "Mostrar botão de envio"
@@ -500,7 +518,7 @@
"message": "m.youtube.com agora é suportado"
},
"exportOptions": {
"message": "Importar/Exportar Todas as Opções"
"message": "Importar/Exportar todas as opções"
},
"exportOptionsCopy": {
"message": "Editar/copiar"
@@ -512,10 +530,10 @@
"message": "Importar de um arquivo"
},
"whatExportOptions": {
"message": "Essas são suas preferências no formato JSON. Isso inclui seu ID de usuário, então lembre-se de compartilhar com cuidado."
"message": "Essa é a sua configuração completa em JSON. Isso inclui seu ID de usuário privado, então tenha certeza de compartilhá-lo com sabedoria."
},
"setOptions": {
"message": "Definir Opções"
"message": "Definir opções"
},
"exportOptionsWarning": {
"message": "Aviso: Alterar as opções é permanente e pode fazer a extensão parar de funcionar. Tem certeza que deseja fazer isso? Certifique-se de fazer um backup por precaução."
@@ -524,7 +542,7 @@
"message": "Este JSON não está formatado corretamente. Suas opções não foram alteradas."
},
"confirmNoticeTitle": {
"message": "Enviar Segmento"
"message": "Enviar segmento"
},
"submit": {
"message": "Enviar"
@@ -548,16 +566,16 @@
"message": "Editar"
},
"copyDebugInformation": {
"message": "Copiar Informações de Depuração Para Área de Transferência"
"message": "Copiar informações de depuração para a área de transferência"
},
"copyDebugInformationFailed": {
"message": "Erro ao copiar para a área de transferência"
},
"copyDebugInformationOptions": {
"message": "Copia informações para a área de transferência para serem fornecidas a um desenvolvedor quando houver um bug / quando um solicitado pelo desenvolvedor. Informações sensíveis como seu ID de usuário, canais na lista de permissões e endereço personalizado do servidor foram removidos. No entanto, ele contém informações como seu useragent, navegador, sistema operacional e número de versão de extensão. "
"message": "Copia informações para a área de transferência para serem fornecidas a um desenvolvedor quando houver um bug / quando solicitado pelo desenvolvedor. Informações sensíveis como seu ID de usuário, canais na lista de permissões e endereço personalizado do servidor foram removidos. No entanto, ele contém informações como seu useragent, navegador, sistema operacional e número de versão da extensão. "
},
"copyDebugInformationComplete": {
"message": "A informação de depuração foi copiada para a área de transferência. Sinta-se à vontade para remover qualquer informação que prefira não compartilhar. Salve em um arquivo de texto ou cole-a no relatório de bug."
"message": "A informação de depuração foi copiada para a área de transferência. Sinta-se à vontade para remover qualquer informação que prefira não compartilhar. Salve em um arquivo de texto ou cole-a no relatório de erro."
},
"keyAlreadyUsed": {
"message": "Este atalho está vinculado a outra ação. Por favor, selecione um atalho diferente."
@@ -580,7 +598,7 @@
"message": "Patrocinador"
},
"category_sponsor_description": {
"message": "Promoção paga, referências pagas e anúncios diretos. Não deve ser usado para Auto promoção ou mensagens grátis para causas/criadores/sites/produtos que eles gostam."
"message": "Promoção paga, referências pagas e anúncios diretos. Não deve ser usado para auto-promoção ou mensagens grátis para causas/criadores/sites/produtos que eles gostam."
},
"category_sponsor_guideline1": {
"message": "Promoções pagas"
@@ -589,10 +607,10 @@
"message": "Não é para doações ou mercadoria personalizada"
},
"category_selfpromo": {
"message": "Não-pago/Auto promoção"
"message": "Não-pago/Auto-promoção"
},
"category_selfpromo_description": {
"message": "Similar a \"patrocinador\", mas para auto promoções e segmentos não-pagos. Isso inclui seções sobre vendas, doações ou informações sobre com quem colaboraram."
"message": "Similar a \"patrocinador\", exceto para não-pago ou auto-promoção. Isso inclui seções sobre mercadorias, doações ou informações sobre com quem eles colaboraram."
},
"category_selfpromo_guideline1": {
"message": "Doações, programa de membros e mercadoria personalizada"
@@ -617,10 +635,10 @@
"message": "Todo o vídeo promove algo de acesso gratuito ou subsidiado"
},
"category_interaction": {
"message": "Lembrete de interação (inscrever-se)"
"message": "Lembrete de Interação (Inscrever-se)"
},
"category_interaction_description": {
"message": "Quando houver um pequeno lembrete para curtir, inscrever-se ou segui-los no meio do conteúdo. Se é longo ou sobre algo em específico, deveria ser sob Não-pago/Auto promoção."
"message": "Quando houver um pequeno lembrete para curtir, inscrever-se ou seguir no meio do conteúdo. Se é longo ou sobre algo em específico, deveria estar sob auto-promoção."
},
"category_interaction_guideline1": {
"message": "Lembretes rápidos para curtir, inscrever ou seguir"
@@ -629,10 +647,10 @@
"message": "Inclui lembretes indiretos para comentar"
},
"category_interaction_guideline3": {
"message": "Não é para promoção geral, apenas chamado à ação"
"message": "Não é para promoção geral, apenas um chamado para à ação"
},
"category_interaction_short": {
"message": "Lembrete de interação"
"message": "Lembrete de Interação"
},
"category_intro": {
"message": "Intervalo/Animação de Introdução"
@@ -656,7 +674,7 @@
"message": "Créditos ou quando os cards finais do YouTube aparecem. Não deve ser usado para conclusões informativas."
},
"category_outro_guideline1": {
"message": "Não inclue conteúdo, mesmo que cartões de finalização estejam na tela"
"message": "Não inclui conteúdo, mesmo que cartões de finalização estejam na tela"
},
"category_preview": {
"message": "Pré-visualização/Recapitulação"
@@ -677,7 +695,7 @@
"message": "Enrolação/Piadas"
},
"category_filler_description": {
"message": "Cenas tangenciais inseridas apenas por enrolação ou humor que não são necessárias para compreender o tópico principal do vídeo. Isto não deve incluir segmentos que fornecem contexto ou detalhes de segundo plano."
"message": "Cenas tangenciais inseridas apenas por enrolação ou humor que não são necessárias para compreender o tópico principal do vídeo. Isto não deve incluir segmentos que fornecem contexto ou detalhes de segundo plano. Esta é uma categoria muito agressiva para quando você não está com disposição para \"diversão\"."
},
"category_filler_short": {
"message": "Enrolação"
@@ -686,19 +704,19 @@
"message": "Cenas tangenciais apenas para enrolação ou humor"
},
"category_filler_guideline2": {
"message": "Distrações, erros de gravação, replays"
"message": "Distrações, erros de gravação, repetições"
},
"category_filler_guideline3": {
"message": "Não é para cenas necessárias para o entendimento do tópico"
},
"category_music_offtopic": {
"message": "Música: Seção sem música"
"message": "Música: Seção Não Musical"
},
"category_music_offtopic_description": {
"message": "Apenas para uso em vídeos musicais. Deve ser usado exclusivamente para seções de vídeos musicais que já não pertençam à outra categoria."
},
"category_music_offtopic_short": {
"message": "Não musical"
"message": "Não Musical"
},
"category_music_offtopic_guideline1": {
"message": "Seções que não estão nos lançamentos oficiais"
@@ -710,7 +728,7 @@
"message": "Destaques"
},
"category_poi_highlight_description": {
"message": "A parte do vídeo que a maioria das pessoas procura. Similar aos comentários \"Vídeo começa aos x\"."
"message": "A parte do vídeo que a maioria das pessoas procura. Similar aos comentários \"Vídeo começa em x\"."
},
"category_poi_highlight_guideline1": {
"message": "A seção que maioria das pessoas está procurando"
@@ -724,11 +742,23 @@
"category_chapter": {
"message": "Capítulo"
},
"category_chapter_description": {
"message": "Capítulos personalizados que descrevem as principais seções de um vídeo."
},
"category_chapter_guideline1": {
"message": "Não mencione os nomes dos patrocinadores"
},
"category_chapter_guideline2": {
"message": "Use capítulos maiores para seções gerais"
},
"category_chapter_guideline3": {
"message": "Capítulos menores podem ser colocados em capítulos maiores"
},
"category_livestream_messages": {
"message": "Livestream: Leituras de Doação/Mensagem"
"message": "Transmissão ao vivo: Leituras de Doação/Mensagem"
},
"category_livestream_messages_short": {
"message": "Leitura de mensagens"
"message": "Leitura de Mensagens"
},
"autoSkip": {
"message": "Pular automaticamente"
@@ -752,10 +782,13 @@
"message": "Mostrar na barra de progresso"
},
"showOverlay_full": {
"message": "Mostrar Rótulo"
"message": "Mostrar rótulo"
},
"showOverlay_chapter": {
"message": "Mostrar capítulos"
},
"autoSkipOnMusicVideos": {
"message": "Pular automaticamente todos os segmentos quando há um segmento que não é música"
"message": "Pular automaticamente todos os segmentos quando há um segmento não musical"
},
"muteSegments": {
"message": "Permitir segmentos que silenciem o áudio ao invés de pular"
@@ -764,12 +797,16 @@
"message": "Mostrar um ícone quando um vídeo é inteiramente um anúncio",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Mostrar rótulos nas miniaturas de vídeo também",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Cor Não Enviada",
"message": "Cor não enviada",
"description": "Referring to submissions that have not been sent to the server yet."
},
"seekBarColor": {
"message": "Cor da barra"
"message": "Cor da barra de progresso"
},
"category": {
"message": "Categoria"
@@ -779,7 +816,7 @@
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "Habilitar Servidor em teste Beta"
"message": "Habilitar servidor de testes beta"
},
"whatEnableTestingServer": {
"message": "Seus envios e votos NÃO SERÃO ENVIADOS para o servidor principal. Use isso apenas para testes."
@@ -788,20 +825,20 @@
"message": "Todas os envios e votos NÃO SERÃO ENVIADOS para o servidor principal enquanto se conecta ao servidor de teste. Certifique-se de desativar isso quando você quiser fazer envios reais."
},
"bracketNow": {
"message": "(agora)"
"message": "(Agora)"
},
"moreCategories": {
"message": "Mais categorias"
},
"chooseACategory": {
"message": "Selecione uma Categoria"
"message": "Selecione uma categoria"
},
"enableThisCategoryFirst": {
"message": "Para enviar os segmentos com a categoria de \"{0}\", você deve ativá-la nas opções. Você será redirecionado para as opções agora.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Aviso: Este tipo de segmento pode ter no máximo um ativo por vez. Enviar múltiplos fará com que um aleatório seja mostrado."
"message": "Aviso: este tipo de segmento pode ter no máximo um ativo por vez. Enviar múltiplos fará com que um aleatório seja mostrado."
},
"youMustSelectACategory": {
"message": "Você deve selecionar uma categoria para todos os segmentos que você está enviando!"
@@ -809,8 +846,12 @@
"bracketEnd": {
"message": "(Fim)"
},
"End": {
"message": "Fim",
"description": "Button that skips to the end of a segment"
},
"hiddenDueToDownvote": {
"message": "oculto: Downvote"
"message": "oculto: voto negativo"
},
"hiddenDueToDuration": {
"message": "oculto: muito curto"
@@ -820,7 +861,10 @@
},
"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": "O ID do canal ainda não foi carregado. Se você estiver usando um vídeo embutido, tente usar a página inicial do YouTube. Isso também pode ser causado por mudanças no layout do YouTube, se você achar que este é o caso, faça um comentário aqui:"
"message": "O ID do canal ainda não foi carregado. Se você estiver usando um vídeo embutido, tente usar a página inicial do YouTube. Isso também pode ser causado por mudanças no layout do YouTube, se você acreditar que este é o caso, faça um comentário aqui:"
},
"invidiousPermissionRefresh": {
"message": "O navegador revogou a permissão necessária para funcionar em Invidious e em outros sites de terceiros. Por favor, clique no botão abaixo para reativar essa permissão."
},
"acceptPermission": {
"message": "Aceitar permissão"
@@ -832,25 +876,32 @@
"message": "Falha na solicitação de permissão, você clicou em negar?"
},
"adblockerIssueWhitelist": {
"message": "Se você não consegue resolver isso, desative a configuração 'Forçar Verificação do Canal Antes de Pular', pois o SponsorBlock não pode recuperar as informações deste vídeo"
"message": "Se você não consegue resolver isso, desative a configuração 'Forçar verificação do canal antes de pular', pois o SponsorBlock não pode recuperar as informações deste vídeo"
},
"forceChannelCheck": {
"message": "Forçar Verificação do Canal Antes de Pular"
"message": "Forçar verificação do canal antes de pular"
},
"whatForceChannelCheck": {
"message": "Por padrão, isso pulará os seguimentos imediatamente, mesmo antes de saber qual é o canal. Por padrão, alguns seguimentos no inicio do vídeo podem ser ignorados nos canais da lista branca. Habilitar esta opção evitará isso, mas fará com que todos os pulos tenham um ligeiro atraso, já que obter o channelID pode levar algum tempo. Este atraso pode não ser perceptível se você tiver internet rápida."
"message": "Por padrão, isso pulará os segmentos imediatamente, mesmo antes de saber qual é o canal. Por padrão, alguns seguimentos no inicio do vídeo podem ser ignorados nos canais da lista branca. Habilitar esta opção evitará isso, mas fará com que todos os pulos tenham um ligeiro atraso, já que obter o ID do canal pode levar algum tempo. Este atraso pode não ser perceptível se você tiver internet rápida."
},
"forceChannelCheckPopup": {
"message": "Considere Ativar a \"Forçar Verificação de Canal Antes de Pular\""
"message": "Considere ativar \"Forçar verificação do canal antes de pular\""
},
"downvoteDescription": {
"message": "Tempo errado ou incorreto"
"message": "Tempo errado/incorreto"
},
"incorrectVote": {
"message": "Incorreto"
},
"harmfulVote": {
"message": "Nocivo",
"description": "Used for chapter segments when the text is harmful/offensive to remove it faster"
},
"incorrectCategory": {
"message": "Mudar Categoria"
"message": "Mudar categoria"
},
"nonMusicCategoryOnMusic": {
"message": "Este vídeo é categorizado como música. Tem certeza de que isto tem um patrocinador? Se este é realmente um \"Segmento Não Musical\", abra as opções da extensão e habilite esta categoria. Assim você pode enviar este segmento como \"Não-Musical\" ao invés de patrocinador. Por favor leia as diretrizes se estiver confuso."
"message": "Este vídeo é categorizado como musical. Tem certeza de que tem um patrocinador? Se este é realmente um \"Segmento Não Musical\", abra as opções da extensão e habilite esta categoria. Assim você pode enviar este segmento como \"Não Musical\" ao invés de patrocinador. Por favor leia as diretrizes se estiver confuso."
},
"multipleSegments": {
"message": "Múltiplos segmentos"
@@ -881,6 +932,9 @@
"categoryPillTitleText": {
"message": "Este vídeo inteiro está rotulado como esta categoria e está muito integrado para poder ser separado"
},
"chapterNameTooltipWarning": {
"message": "Um de seus nomes de capítulo é semelhante a uma categoria. Sempre que possível, você deve usar categorias."
},
"experiementOptOut": {
"message": "Optar por sair de todos os experimentos futuros",
"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."
@@ -888,6 +942,21 @@
"hideForever": {
"message": "Ocultar para sempre"
},
"warningChatInfo": {
"message": "Percebemos que você estava cometendo alguns erros comuns. Apreciamos muito o seu trabalho até agora, mas nos esforçamos para alcançar a perfeição aqui, então mesmo os pequenos erros são importantes :)"
},
"warningTitle": {
"message": "Você recebeu um aviso"
},
"questionButton": {
"message": "Eu tenho uma dúvida"
},
"warningConfirmButton": {
"message": "Eu entendo o motivo"
},
"warningError": {
"message": "Erro ao tentar reconhecer o aviso:"
},
"Donate": {
"message": "Doar"
},
@@ -895,37 +964,37 @@
"message": "Ajude a financiar o desenvolvimento"
},
"hideDonationLink": {
"message": "Ocultar o Link de Doação"
"message": "Ocultar o link de doação"
},
"darkModeOptionsPage": {
"message": "Modo Escuro na página de Opções"
"message": "Modo escuro na página de opções"
},
"helpPageThanksForInstalling": {
"message": "Obrigado por instalar o SponsorBlock."
},
"helpPageReviewOptions": {
"message": "Por favor revise as opções abaixo"
"message": "Por favor, revise as opções abaixo"
},
"helpPageFeatureDisclaimer": {
"message": "Muitoa recursos são desativados por padrão. Se você deseja pular introduções, encerramentos, usar o Invidious, etc, ative as opções abaixo. Você também pode ocultar/mostrar elementos da interface."
"message": "Muitos recursos são desativados por padrão. Se você deseja pular introduções, encerramentos, usar o Invidious, etc., ative as opções abaixo. Você também pode ocultar/mostrar elementos da interface."
},
"helpPageHowSkippingWorks": {
"message": "Como a função pular funciona"
},
"helpPageHowSkippingWorks1": {
"message": "Segmentos do vídeo serão pulados automaticamente se forem encontrados na base de dados. Você pode abrir a pop-up clicando no ícone da extensão para ter uma prévia de quais são."
"message": "Segmentos do vídeo serão pulados automaticamente se forem encontrados na base de dados. Você pode abrir o pop-up clicando no ícone da extensão para ter uma prévia de quais são."
},
"helpPageHowSkippingWorks2": {
"message": "Sempre que você pular um segmento, você receberá um aviso. Se o tempo estiver errado vote contra clicando no voto negativo! Você também pode votar na pop-up."
"message": "Sempre que você pular um segmento, você receberá um aviso. Se o tempo estiver errado vote contra clicando no voto negativo! Você também pode votar no pop-up."
},
"Submitting": {
"message": "Enviando"
},
"helpPageSubmitting1": {
"message": "O envio pode ser feito no pop-up apertando o botão \"Segmento começa Agora\" ou no reprodutor de vídeo com os botões no reprodutor."
"message": "O envio pode ser feito no pop-up apertando o botão \"O segmento começa agora\" ou no reprodutor de vídeo com os botões no reprodutor."
},
"helpPageSubmitting2": {
"message": "Clicar no botão inicio indica o começo de um segmento e clicar no ícone parar indica o fim. Você pode preparar vários patrocinadores antes de clicar em enviar. Clicar no botão upload irá enviar. Clicar no lixo irá excluir."
"message": "Clicar no botão de começar indica o início de um segmento e clicar no ícone de parada indica o fim. Você pode preparar vários patrocinadores antes de enviar. Clicar no botão de enviar enviará. Clicar na lata de lixo excluirá."
},
"Editing": {
"message": "Editando"
@@ -960,20 +1029,23 @@
"LearnMore": {
"message": "Saiba mais"
},
"FullDetails": {
"message": "Detalhes completos"
},
"CopyDownvoteButtonInfo": {
"message": "Dá voto negativo e cria uma cópia local para você reenviar"
"message": "Vota negativamente e cria uma cópia local para você reenviar"
},
"OpenCategoryWikiPage": {
"message": "Abrir a wiki dessa categoria."
"message": "Abrir a página wiki desta categoria."
},
"CopyAndDownvote": {
"message": "Copiar e dar voto negativo"
"message": "Copiar e votar negativamente"
},
"ContinueVoting": {
"message": "Continuar Votando"
"message": "Continuar votando"
},
"ChangeCategoryTooltip": {
"message": "Isto irá aplicar instantaneamente seus segmentos"
"message": "Isto irá aplicar instantaneamente aos seus segmentos"
},
"downvote": {
"message": "Voto negativo"
@@ -984,11 +1056,17 @@
"hideSegment": {
"message": "Ocultar segmento"
},
"skipSegment": {
"message": "Pular segmento"
},
"playChapter": {
"message": "Reproduzir capítulo"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Use a roda do mouse enquanto mantêm o cursor sobre a caixa de edição para ajustar o tempo rapidamente. Combinações das teclas ctrl e shift podem ser usadas para refinar as mudanças."
},
"categoryPillNewFeature": {
"message": "Novo! Veja quando um vídeo é inteiramente patrocinado ou de autopromoção"
"message": "Novo! Veja quando um vídeo é inteiramente patrocinado ou de auto-promoção"
},
"dayAbbreviation": {
"message": "d",
@@ -1007,7 +1085,7 @@
"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",
"message": "Teclas de atalho",
"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": {
@@ -1015,7 +1093,7 @@
"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": "Miscelânea",
"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)."
},
"noticeVisibilityLabel": {
@@ -1036,7 +1114,7 @@
"message": "Este já é um atalho padrão do YouTube. Tem certeza que deseja utilizá-lo?"
},
"betaServerWarning": {
"message": "Os Servidores BETA estão ativos!"
"message": "O servidor BETA está habilitado!"
},
"openOptionsPage": {
"message": "Abrir página de opções"
@@ -1046,5 +1124,113 @@
},
"confirmResetToDefault": {
"message": "Tem certeza de que deseja redefinir todas as configurações para os valores padrão? Essa ação não poderá ser desfeita."
},
"exportSegments": {
"message": "Exportar segmentos"
},
"importSegments": {
"message": "Importar segmentos"
},
"Import": {
"message": "Importar",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
},
"redeemSuccess": {
"message": "Resgatado com sucesso!"
},
"redeemFailed": {
"message": "A chave de licença é inválida"
},
"hideUpsells": {
"message": "Ocultar opções não disponíveis sem pagamento extra"
},
"chooseACountry": {
"message": "Escolha um país"
},
"noDiscount": {
"message": "Você não se qualifica para um desconto"
},
"discountLink": {
"message": "Link para desconto (veja o preço rosa)"
},
"selectYourCountry": {
"message": "Selecione o seu país"
},
"cantAfford": {
"message": "Se você não puder comprar uma licença, clique {aqui} para ver se você tem direito a um desconto",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
"message": "Entrar com Patreon"
},
"redeem": {
"message": "Resgatar"
},
"joinOnPatreon": {
"message": "Inscreva-se no Patreon"
},
"oneTimePurchase": {
"message": "Compra única"
},
"enterLicenseKey": {
"message": "Inserir chave de licença"
},
"unsubmittedSegmentCounts": {
"message": "Você tem atualmente {0} em {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
},
"unsubmittedSegmentCountsZero": {
"message": "No momento, você não tem segmentos não enviados",
"description": "Replaces 'unsubmittedSegmentCounts' string when there are no unsubmitted segments"
},
"unsubmittedSegmentsSingular": {
"message": "segmento não enviado",
"description": "Example: You currently have 1 *unsubmitted segment* on 1 video"
},
"unsubmittedSegmentsPlural": {
"message": "segmentos não enviados",
"description": "Example: You currently have 12 *unsubmitted segments* on 5 videos"
},
"videosSingular": {
"message": "vídeo",
"description": "Example: You currently have 3 unsubmitted segments on 1 *video*"
},
"videosPlural": {
"message": "vídeos",
"description": "Example: You currently have 12 unsubmitted segments on 5 *videos*"
},
"clearUnsubmittedSegments": {
"message": "Limpar todos os segmentos",
"description": "Label for a button in settings"
},
"clearUnsubmittedSegmentsConfirm": {
"message": "Tem certeza de que deseja limpar todos os segmentos não enviados?",
"description": "Confirmation message for the Clear unsubmitted segments button"
},
"showUnsubmittedSegments": {
"message": "Mostrar segmentos",
"description": "Show/hide button for the unsubmitted segments list"
},
"hideUnsubmittedSegments": {
"message": "Ocultar segmentos",
"description": "Show/hide button for the unsubmitted segments list"
},
"videoID": {
"message": "ID do vídeo",
"description": "Header of the unsubmitted segments list"
},
"segmentCount": {
"message": "Contagem de segmentos",
"description": "Header of the unsubmitted segments list"
},
"actions": {
"message": "Ações",
"description": "Header of the unsubmitted segments list"
},
"exportSegmentsAsURL": {
"message": "Compartilhar como URL"
},
"allowScrollingToEdit": {
"message": "Permitir rolagem para editar tempos"
}
}

View File

@@ -25,6 +25,19 @@
"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"
},
@@ -103,6 +116,9 @@
"connectionError": {
"message": "Deu-se um erro de conecção: Código: "
},
"segmentsStillLoading": {
"message": "Segmentos ainda a carregar..."
},
"clearTimes": {
"message": "Limpar Segmentos"
},
@@ -112,8 +128,14 @@
"closePopup": {
"message": "Fechar Popup"
},
"SubmitTimes": {
"message": "Submeter Segmentos"
"closeIcon": {
"message": "Ícone de Fechar"
},
"OpenSubmissionMenu": {
"message": "Abrir Menu de Envio"
},
"sortSegments": {
"message": "Ordenar Segmentos"
},
"submitCheck": {
"message": "Tem a certeza que pretende submeter?"
@@ -149,9 +171,6 @@
"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"
},
@@ -233,12 +252,21 @@
"whatRefetchWhenNotFound": {
"message": "Se o vídeo for novo e nenhum segmento for encontrado, continuaremos a monitorizar enquanto assiste."
},
"enableShowCategoryWithoutPermission": {
"message": "Mostrar categorias no menu de submissão mesmo sem permissão de submissão"
},
"whatShowCategoryWithoutPermission": {
"message": "Algumas categorias requerem permissão para submeter devido aos requisitos mínimos de reputação"
},
"showNotice": {
"message": "Mostrar notificação outra vez"
},
"showSkipNotice": {
"message": "Mostrar aviso após um segmento ser ignorado"
},
"showCategoryGuidelines": {
"message": "Mostrar Categoria de Ajuda"
},
"noticeVisibilityMode0": {
"message": "Avisos de ignorar em tamanho inteiro"
},
@@ -248,6 +276,16 @@
"noticeVisibilityMode2": {
"message": "Todos os avisos de ignorar em tamanho pequeno"
},
"noticeVisibilityMode3": {
"message": "Avisos pequenos quando ignorado automaticamente"
},
"noticeVisibilityMode4": {
"message": "Todos os avisos de ignorar em tamanho pequeno"
},
"longDescription": {
"message": "SponsorBlock permite-lhe ignorar os patrocinadores, intros, outros, lembretes de subscrição, e outras partes irritantes dos vídeos do YouTube. SponsorBlock é uma extensão de browser de origem pública que permite a qualquer pessoa submeter o tempo de início e fim dos segmentos patrocinados e outros segmentos dos vídeos do YouTube. Uma vez que uma pessoa submeta esta informação, todos os outros com esta extensão saltarão diretamente sobre o segmento patrocinado. Também se pode saltar sobre secções não musicais de vídeos musicais.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Site",
"description": "Used on Firefox Store Page"
@@ -256,6 +294,53 @@
"message": "Código-fonte",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "O aviso foi atualizado!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "Se mesmo assim não gostar, carregue no botão nunca mostrar.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setSkipShortcut": {
"message": "Saltar segmento",
"description": "Keybind label"
},
"setStartSponsorShortcut": {
"message": "Iniciar/parar segmento",
"description": "Keybind label"
},
"setSubmitKeybind": {
"message": "Enviar segmentos",
"description": "Keybind label"
},
"nextChapterKeybind": {
"message": "Próximo capítulo",
"description": "Keybind label"
},
"previousChapterKeybind": {
"message": "Capítulo anterior",
"description": "Keybind label"
},
"keybindDescription": {
"message": "Selecione uma chave digitando-a e escolha qualquer chave modificadora que deseje utilizar."
},
"0": {
"message": "Tempo limite de conexão. Verifique a sua conexão com a internet. Se a sua internet está a funcionar, o servidor provavelmente está sobrecarregado ou desligado."
},
"disableSkipping": {
"message": "Saltar está ativado"
},
"enableSkipping": {
"message": "Saltar está desativado"
},
"yourWork": {
"message": "O seu trabalho",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "O servidor parece estar sobrecarregado. Tente novamente em alguns segundos."
},
"errorCode": {
"message": "Código de erro: "
},
@@ -287,6 +372,10 @@
"message": "{0} silenciado",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "Avançar para {0}",
"description": "Used for skipping to things (Skipped to Highlight)"
},
"minLower": {
"message": "minuto"
},
@@ -307,11 +396,27 @@
"message": " das suas vidas",
"description": "You've saved people from 887,362 segments (236d 15h 5.3 minutes of their lives)."
},
"setUserID": {
"message": "Definir ID de utilizador"
"statusReminder": {
"message": "Verificar status.sponsor.ajay.app para estado do servidor."
},
"userIDChangeWarning": {
"message": "Atenção: A alteração do ID de utilizador é permanente. Tem certeza que a deseja? Certifique-se de fazer uma cópia de segurança do seu ID antigo por precaução."
"setUserID": {
"message": "Definir UserID Privado"
},
"createdBy": {
"message": "Criado por"
},
"supportOtherSitesDescription": {
"message": "Apoie clientes de terceiros do YouTube. Para ativar o suporte, deve aceitar as permissões adicionais.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"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?"
@@ -386,6 +491,10 @@
"disable": {
"message": "Desativar"
},
"fullVideoLabelsOnThumbnails": {
"message": "Mostrar etiquetas nas miniaturas de vídeo também",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"category": {
"message": "Categoria"
},

View File

@@ -25,6 +25,19 @@
"Segments": {
"message": "segmente"
},
"SegmentsCap": {
"message": "Segmente"
},
"Chapters": {
"message": "Capitolele"
},
"renderAsChapters": {
"message": "Randarea segmentelor ca, capitole",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Arată ora video din segmentul curent"
},
"upvoteButtonInfo": {
"message": "Votează această înregistrare"
},
@@ -103,6 +116,9 @@
"connectionError": {
"message": "A apărut o eroare de conexiune. Cod de eroare: "
},
"segmentsStillLoading": {
"message": "Încă se încarcă segmentele..."
},
"clearTimes": {
"message": "Curăță segmentele"
},
@@ -112,8 +128,11 @@
"closePopup": {
"message": "Închide pop-up"
},
"SubmitTimes": {
"message": "Trimite segmente"
"closeIcon": {
"message": "Închide pictograma"
},
"sortSegments": {
"message": "Sortare Segmente"
},
"submitCheck": {
"message": "Sunteți sigur că doriți să trimiteți asta?"
@@ -149,9 +168,6 @@
"clearTimesButton": {
"message": "Șterge Timpii"
},
"submitTimesButton": {
"message": "Trimite Timpii"
},
"publicStats": {
"message": "Acest lucru este folosit pe pagina publică de statistici pentru a arăta cât de mult ai contribuit. Vezi pagina"
},
@@ -233,6 +249,12 @@
"whatRefetchWhenNotFound": {
"message": "Dacă videoclipul este nou și nu sunt segmente găsite, va continua să se refeteze la fiecare câteva minute în timp ce vizionați."
},
"enableShowCategoryWithoutPermission": {
"message": "Arată categoriile în meniul de adăugare chiar fără permisiunea de adăugare"
},
"whatShowCategoryWithoutPermission": {
"message": "Unele categorii necesită permisiunea de a depune din cauza cerințelor minime de reputație"
},
"showNotice": {
"message": "Arată Notificarea Din Nou"
},
@@ -289,6 +311,14 @@
"message": "Predă segmentele",
"description": "Keybind label"
},
"nextChapterKeybind": {
"message": "Capitolul următor",
"description": "Keybind label"
},
"previousChapterKeybind": {
"message": "Capitolul anterior",
"description": "Keybind label"
},
"keybindDescription": {
"message": "Selectează o tastă prin a o tasta, și alege orice taste modificatoare pe care dorești să o folosești."
},
@@ -318,7 +348,7 @@
"message": "Mut"
},
"full": {
"message": "Întregul Videoclip",
"message": "Video complet",
"description": "Used for the name of the option to label an entire video as sponsor or self promotion."
},
"skip_category": {
@@ -388,16 +418,16 @@
"message": "Verificați status.sponsor.ajay.app pentru starea serverului."
},
"changeUserID": {
"message": "Importă/Exportă Id-ul Tău De Utilizator"
"message": "Importă/Exportă UserID-ul tău Privat"
},
"whatChangeUserID": {
"message": "Aceste informații sunt private și nu ar trebui să fie dezvăluite nimănui. Dacă cineva are aceste informații, pot fi folosite pentru a vă imita. În cazul în care vă căutați ID-ul public de utilizator, dați click pe icoana de clipboard din popup."
},
"setUserID": {
"message": "Setează Id-ul Utilizatorului"
"message": "Setare UserID privat"
},
"userIDChangeWarning": {
"message": "Atenție: Schimbarea Id-ului Utilizatorului este permanentă. Sunteți sigur că doriți să faceți asta? Asigurați-vă că ați făcut o copie de rezervă."
"message": "Avertisment: Modificarea Id-ului de utilizator privat este permanentă. Sunteți sigur că doriți să faceți acest lucru? Asigurați-vă că ați făcut o copie de rezervă pe cea veche, pentru orice eventualitate."
},
"createdBy": {
"message": "Creat De"
@@ -405,10 +435,6 @@
"supportOtherSites": {
"message": "Sprijină Site-uri YouTube 3rd Party"
},
"supportOtherSitesDescription": {
"message": "Sprijină Clienți YouTube 3rd party. Pentru a activa setarea, trebuie să acceptați permisiunile suprimentare. Această funcție NU funcționează în incognito pe Chrome sau în alte variante Chromium.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
"message": "Site-uri cu Sprijin: "
},
@@ -418,6 +444,9 @@
"addInvidiousInstance": {
"message": "Adaugă Instanță pentru clienți 3rd-party"
},
"addInvidiousInstanceDescription": {
"message": "Adăugați o instanță personalizată. Aceasta trebuie să fie formatată DOAR cu domeniul. Exemplu: invidious.ajay.app"
},
"add": {
"message": "Adaugă"
},
@@ -439,12 +468,24 @@
"minDurationDescription": {
"message": "Segmentele mai scurte decât valoarea setată nu vor fi omise sau afișate în player."
},
"enableManualSkipOnFullVideo": {
"message": "Utilizați omiterea manuală atunci când există o etichetă video completă"
},
"whatManualSkipOnFullVideo": {
"message": "Pentru persoanele care doresc să vizioneze videoclipul neîntrerupt dacă acesta este sponsorizat în totalitate sau dacă este autopromovat."
},
"skipNoticeDuration": {
"message": "Durata notificărilor de omitere (secunde):"
},
"skipNoticeDurationDescription": {
"message": "Notificarea sări peste va rămâne pe ecran cel puțin atâtea secunde. Pentru omiterea manuală, este posibil să fie vizibilă pentru mai mult timp."
},
"shortCheck": {
"message": "Următoarea înregistrare este mai mică decât opțiunea voastră de durată minimă. Acest lucru ar putea însemna că a fost deja trimisă și a fost ignorat datorită acestei opțiuni. Sunteți sigur că doriți să trimiteți?"
},
"liveOrPremiere": {
"message": "Nu este permisă adăugarea pe un live stream sau pe o primă. Vă rugăm să așteptați până se termină, apoi reîmprospătați pagina și verificați dacă segmentele sunt încă valide."
},
"showUploadButton": {
"message": "Arată Butonul De Încărcare"
},
@@ -482,7 +523,7 @@
"message": "Încarcă din fișier"
},
"whatExportOptions": {
"message": "Aceasta este întreaga configurație în format JSON. Asta include si ID-ul tău de utilizator, așa că fi sigur să împărtășești asta cu înțelepciune."
"message": "Aceasta este întreaga configurație în format JSON. Asta include si ID-ul tău privat de utilizator, așa că fi sigur să împărtășești asta cu înțelepciune."
},
"setOptions": {
"message": "Setează Opțiuni"
@@ -529,10 +570,23 @@
"copyDebugInformationComplete": {
"message": "Informația de depanare a fost copiată în clipboard. Puteți elimina orice informație pe care nu doriți să o partajați. Salvați într-un fișier sau lipiți-o în raportul de erori."
},
"keyAlreadyUsed": {
"message": "Această scurtătură este legată de o altă acțiune. Vă rugăm să selectați una diferită."
},
"to": {
"message": "până la",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"CopiedExclamation": {
"message": "Copiat!",
"description": "Used after something has been copied to the clipboard. Example: 'Copied!'"
},
"generic_guideline1": {
"message": "Include tranzițiile segmentului"
},
"generic_guideline2": {
"message": "Reda ca și cum nimic nu a fost omis"
},
"category_sponsor": {
"message": "Sponsor"
},
@@ -557,15 +611,37 @@
"category_selfpromo_guideline2": {
"message": "Mențiuni neplătite care nu ajută videoclipul"
},
"category_selfpromo_guideline3": {
"message": "Nu pentru produsele proiectate și merch"
},
"category_exclusive_access": {
"message": "Acces Exclusiv"
},
"category_exclusive_access_description": {
"message": "Doar pentru etichetarea videoclipurilor întregi. Folosit atunci când un video prezintă un produs, serviciu sau o locație la care au primit acces gratuit sau subvenționat."
},
"category_exclusive_access_pill": {
"message": "Acest videoclip prezintă un produs, serviciu sau o locație la care au primit acces gratuit sau subvenționat",
"description": "Short description for this category"
},
"category_exclusive_access_guideline1": {
"message": "Întreaga înregistrare video prezintă ceva cu acces liber sau subvenționat"
},
"category_interaction": {
"message": "Reamintire de Interactiune (Abonare)"
},
"category_interaction_description": {
"message": "Când există o scurtă remintire pentru like, abonare sau urmărire în mijlocul conținutului. Daca este mai lung sau despre ceva specific, folosiți autopromovarea."
},
"category_interaction_guideline1": {
"message": "Scurte memento-uri pentru a vă abona sau urmări"
},
"category_interaction_guideline2": {
"message": "Include memento-uri indirecte de comentat"
},
"category_interaction_guideline3": {
"message": "Nu pentru promovare generală, se face apel doar la acțiune"
},
"category_interaction_short": {
"message": "Reamintire de Interacțiune"
},
@@ -578,21 +654,99 @@
"category_intro_short": {
"message": "Pauză"
},
"category_intro_guideline1": {
"message": "Interval fără conținut real"
},
"category_intro_guideline2": {
"message": "Nu se efectuează tranziții cu informații"
},
"category_outro": {
"message": "Ecran De Final/Credite"
},
"category_outro_description": {
"message": "Credite sau atunci când apare ecranul de final YouTube. Nu pentru concluzii cu informații."
},
"category_outro_guideline1": {
"message": "Nu include conținutul, chiar dacă end card-urile sunt pe ecran"
},
"category_preview": {
"message": "Previzualizare/Recapitulare"
},
"category_preview_description": {
"message": "Colecția de clipuri care arată ce se află în acest videoclip sau alte videoclipuri într-o serie în care toate informațiile sunt repetate mai târziu în videoclip."
},
"category_preview_guideline1": {
"message": "Clipuri care apar mai târziu sau într-un video viitor"
},
"category_preview_guideline2": {
"message": "Recapitularea unui videoclip anterior"
},
"category_preview_guideline3": {
"message": "Nu pentru secțiunile care adaugă conținut suplimentar"
},
"category_filler": {
"message": "Glume de Umplutură/Tangențiale"
},
"category_filler_description": {
"message": "Scenele tactil adăugate numai pentru umplutură sau umor care nu sunt necesare pentru a înțelege conținutul principal al videoclipului. Aceasta nu ar trebui să includă segmente care să ofere detalii de context sau de fundal. Aceasta este o categorie foarte agresivă, pentru care nu ești în starea de spirit pentru \"distracție\"."
},
"category_filler_short": {
"message": "Materiale de umplutură"
},
"category_filler_guideline1": {
"message": "Scenele tactil numai pentru umplere sau umor"
},
"category_filler_guideline2": {
"message": "Distracții, blooper, reluări"
},
"category_filler_guideline3": {
"message": "Nu sunt necesare scene pentru a înțelege subiectul"
},
"category_music_offtopic": {
"message": "Muzică: Secţiune Non-Muzicală"
},
"category_music_offtopic_description": {
"message": "Doar pentru a fi folosit în videoclipuri muzicale. Acesta ar trebui să fie folosit doar pentru secțiunile de videoclipuri muzicale care nu sunt deja acoperite de o altă categorie."
},
"category_music_offtopic_short": {
"message": "Non-Muzical"
},
"category_music_offtopic_guideline1": {
"message": "Secțiuni care nu sunt în lansări oficiale"
},
"category_music_offtopic_guideline2": {
"message": "Fără muzica într-un spectacol in direct"
},
"category_poi_highlight": {
"message": "Momente importante"
},
"category_poi_highlight_description": {
"message": "Partea din videoclip pe care majoritatea oamenilor o caută. Similar cu \"Videoclipul începe de la x\"."
},
"category_poi_highlight_guideline1": {
"message": "Secțiunea pe care majoritatea persoanelor o caută"
},
"category_poi_highlight_guideline2": {
"message": "Poate sări peste context"
},
"category_poi_highlight_guideline3": {
"message": "Poți sări la titlu sau miniatură"
},
"category_chapter": {
"message": "Capitol"
},
"category_chapter_description": {
"message": "Capitolele cu nume personalizate care descriu secțiuni majore ale unui videoclip."
},
"category_chapter_guideline1": {
"message": "Nu menţiona numele de marcă sponsor"
},
"category_chapter_guideline2": {
"message": "Folosește capitole mai mari pentru secțiunile generale"
},
"category_chapter_guideline3": {
"message": "Capitolele mai mici pot fi plasate în interiorul capitolelor mai mari"
},
"category_livestream_messages": {
"message": "Transmisiune În Direct: Donație/Citirea Mesajelor"
},
@@ -611,6 +765,27 @@
"disable": {
"message": "Dezactivare"
},
"autoSkip_POI": {
"message": "Omitere automată la început"
},
"manualSkip_POI": {
"message": "Întreabă când se încarcă videoclipul"
},
"showOverlay_POI": {
"message": "Arată În Bara de Derulare"
},
"showOverlay_full": {
"message": "Arată eticheta"
},
"showOverlay_chapter": {
"message": "Afișează Capitolele"
},
"autoSkipOnMusicVideos": {
"message": "Omiteți automat toate segmentele atunci când există un segment non-muzical"
},
"muteSegments": {
"message": "Permite segmente care blochează sunetul în loc de a sări peste"
},
"fullVideoSegments": {
"message": "Arată o icoană atunci când un videoclip este în întregime o reclamă",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
@@ -660,6 +835,10 @@
"bracketEnd": {
"message": "(Sfârșit)"
},
"End": {
"message": "Sfârșit",
"description": "Button that skips to the end of a segment"
},
"hiddenDueToDownvote": {
"message": "ascuns: downvote"
},
@@ -669,9 +848,25 @@
"manuallyHidden": {
"message": "ascuns manual"
},
"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": "ID-ul canalului nu este încă încărcat. Dacă utilizați un videoclip încorporat, încercați în schimb să utilizați pagina de pornire YouTube. Acest lucru ar putea fi cauzat și de modificările aduse aspectului YouTube, dacă credeți că faceți un comentariu aici:"
},
"invidiousPermissionRefresh": {
"message": "Browserul a revocat permisiunea necesară pentru a funcționa pe site-urile Invidioase și pe alte site-uri de 3 părți. Vă rugăm să faceți clic pe butonul de mai jos pentru a reactiva această permisiune."
},
"acceptPermission": {
"message": "Acceptă permisiunea"
},
"permissionRequestSuccess": {
"message": "Solicitarea permisiunii reușită!"
},
"permissionRequestFailed": {
"message": "Solicitarea permisiunii a eșuat, ai dat clic pe refuz?"
},
"adblockerIssueWhitelist": {
"message": "Dacă nu puteți rezolva acest lucru, apoi dezactivați setarea 'Forțați verificarea canalului înainte de sărit', deoarece SponsorBlock nu poate prelua informațiile canalului pentru acest videoclip"
},
"forceChannelCheck": {
"message": "Forțează verificarea canalului înainte de a sări"
},
@@ -684,6 +879,16 @@
"downvoteDescription": {
"message": "Timpi Incorecți/Greșiți"
},
"incorrectVote": {
"message": "Incorect"
},
"harmfulVote": {
"message": "Periculos",
"description": "Used for chapter segments when the text is harmful/offensive to remove it faster"
},
"incorrectCategory": {
"message": "Schimbare categorie"
},
"nonMusicCategoryOnMusic": {
"message": "Acest videoclip este categorisit ca muzică. Ești sigur ca există un sponsor? Dacă acesta este defapt un segment non-muzical, deschideți opțiunile extensiei și activați această categorie. Apoi, puteți trimite acest segment ca non-muzical în loc de sponsol. Vă rugăm să citiți ghidul dacă sunteți confuz."
},
@@ -703,6 +908,110 @@
"categoryUpdate2": {
"message": "Deschide opțiunile pentru a sări peste intro-uri, outro-uri, merch, etc."
},
"help": {
"message": "Ajutor"
},
"GotIt": {
"message": "Am înțeles",
"description": "Used as the button to dismiss a tooltip"
},
"fullVideoTooltipWarning": {
"message": "Acest segment este mare. Dacă întregul videoclip este aproximativ un subiect, atunci schimbați de la \"Săriți\" la \"Videoclip întreg\". Vedeți instrucțiunile pentru mai multe informații."
},
"categoryPillTitleText": {
"message": "Acest întreg videoclip este etichetat ca această categorie și este prea strâns integrat pentru a putea separa"
},
"chapterNameTooltipWarning": {
"message": "Unul dintre numele capitolelor tale este similar cu o categorie. Ar trebui să folosești categorii atunci când este posibil."
},
"experiementOptOut": {
"message": "Renunțarea tuturor experimentelor viitoare",
"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": "Ascunde pentru totdeauna"
},
"warningChatInfo": {
"message": "Am observat că faci niște greșeli comune. Apreciem foarte mult munca ta de până acum, însă noi tindem spre perfecțiune aici, așa că fiecare mică greșeală contează :)"
},
"warningTitle": {
"message": "Ai primit o avertizare"
},
"questionButton": {
"message": "Am o întrebare"
},
"warningConfirmButton": {
"message": "Înțeleg motivul"
},
"warningError": {
"message": "Eroare la încercarea de a confirma avertismentul:"
},
"Donate": {
"message": "Donează"
},
"considerDonating": {
"message": "Ajută la dezvoltarea fondului"
},
"hideDonationLink": {
"message": "Ascunde linkul de donare"
},
"darkModeOptionsPage": {
"message": "Modul întunecat pe pagina de opțiuni"
},
"helpPageThanksForInstalling": {
"message": "Vă mulțumim pentru instalarea SponsorBlock."
},
"helpPageReviewOptions": {
"message": "Vă rugăm să analizați opțiunile de mai jos"
},
"helpPageFeatureDisclaimer": {
"message": "Multe caracteristici sunt dezactivate în mod implicit. Dacă doriți să săriți peste introduceri, outros, utilizați Invidios, etc., activați-le mai jos. De asemenea, puteți ascunde/afișa elemente UI."
},
"helpPageHowSkippingWorks": {
"message": "Cum funcționează omiterea"
},
"helpPageHowSkippingWorks1": {
"message": "Segmentele video vor fi omise automat dacă sunt găsite în baza de date. Poți deschide fereastra pop-up făcând clic pe pictograma extensiei pentru a obține o previzualizare a ceea ce sunt."
},
"helpPageHowSkippingWorks2": {
"message": "Ori de câte ori săriți peste un segment, veți primi observație. Dacă sincronizarea pare greșită votând în jos făcând clic pe vot! De asemenea, poți vota în pop-up."
},
"Submitting": {
"message": "Se transmite"
},
"helpPageSubmitting1": {
"message": "Trimiterea poate fi făcută fie în fereastra pop-up prin apăsarea butonului \"Segmentul Incepe Acum\", fie în video player-ul cu butoanele playerului."
},
"helpPageSubmitting2": {
"message": "Făcând clic pe butonul de redare indică începutul unui segment și apăsând pe pictograma de stop indică sfârșitul. Poți pregăti mai mulți sponsori înainte de a apasă pe butonul de încărcare va fi trimis. Click-ul pe gunoi se va șterge."
},
"Editing": {
"message": "Editează"
},
"helpPageEditing1": {
"message": "Dacă ai greșit, poți edita sau șterge segmentele după ce dai click pe butonul săgeată în sus."
},
"helpPageTooSlow": {
"message": "Acest lucru este prea lent"
},
"helpPageTooSlow1": {
"message": "Exista scurtături daca dorești sa le folosești. Apăsați tasta cu punct și virgulă pentru a indica începutul/sfârșitul unui segment de sponsor și faceți clic pe apostrof pentru a trimite. Acestea pot fi schimbate în opțiuni. Dacă nu utilizați QWERTY, probabil ar trebui să schimbați scurtăturile."
},
"helpPageCopyOfDatabase": {
"message": "Pot obține o copie a bazei de date? Ce se întâmplă dacă dispari?"
},
"helpPageCopyOfDatabase1": {
"message": "Baza de date este publică și disponibilă la adresa"
},
"helpPageCopyOfDatabase2": {
"message": "Codul sursă este disponibil gratuit. Deci, chiar dacă ceva mi se întâmplă mie, trimiterile tale nu sunt pierdute."
},
"helpPageNews": {
"message": "Știri și modul în care este făcut"
},
"helpPageSourceCode": {
"message": "Unde pot obține codul sursă?"
},
"Credits": {
"message": "Contribuții"
},
@@ -712,15 +1021,42 @@
"FullDetails": {
"message": "Detalii Complete"
},
"CopyDownvoteButtonInfo": {
"message": "Voturi negative și creați o copie locală pentru a retrimite"
},
"OpenCategoryWikiPage": {
"message": "Deschide pagina wiki a acestei categorii."
},
"CopyAndDownvote": {
"message": "Copiază și dă downvote"
},
"ContinueVoting": {
"message": "Continuă votarea"
},
"ChangeCategoryTooltip": {
"message": "Acest lucru se va aplica instantaneu segmentelor dvs"
},
"downvote": {
"message": "Downvote"
},
"upvote": {
"message": "Upvote"
},
"hideSegment": {
"message": "Ascunde segmentul"
},
"skipSegment": {
"message": "Sari peste segment"
},
"playChapter": {
"message": "Reda capitolul"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Folosește rotița mouse-ului în timp ce ești deasupra casetei de editare pentru a ajusta rapid timpul. Combinațiile dintre ctrl sau Shift pot fi folosite pentru a ajusta modificările."
},
"categoryPillNewFeature": {
"message": "Nou! Vezi când un videoclip este sponsorizat în întregime sau auto-promovat"
},
"dayAbbreviation": {
"message": "zile",
"description": "100d"
@@ -753,10 +1089,137 @@
"message": "Aspectul notificării de omiteri",
"description": "Option label"
},
"unbind": {
"message": "Unbind",
"description": "Unbind keyboard shortcut"
},
"notSet": {
"message": "Nesetat"
},
"change": {
"message": "Schimbă"
},
"youtubeKeybindWarning": {
"message": "Aceasta este o scurtătură YouTube integrată. Ești sigur că vrei să o folosești?"
},
"betaServerWarning": {
"message": "Serverul BETA este activat!"
},
"openOptionsPage": {
"message": "Deschide pagina de opțiuni"
},
"resetToDefault": {
"message": "Resetați setările la valori implicite"
},
"confirmResetToDefault": {
"message": "Ești sigur că vrei sa resetezi toate setările la valorile lor implicite? Această acțiune nu poate fi anulată."
},
"exportSegments": {
"message": "Exportare segmente"
},
"importSegments": {
"message": "Importare segmente"
},
"Import": {
"message": "Importă",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
},
"redeemSuccess": {
"message": "Revendicare cu succes!"
},
"redeemFailed": {
"message": "Cheia de licență nu este validă"
},
"hideUpsells": {
"message": "Ascunde opțiunile indisponibile fără o plată suplimentara"
},
"chooseACountry": {
"message": "Selectați țara"
},
"noDiscount": {
"message": "Nu te califici pentru o reducere"
},
"discountLink": {
"message": "Link de reducere (Vezi prețul roz)"
},
"selectYourCountry": {
"message": "Selectaţi ţara"
},
"cantAfford": {
"message": "Dacă nu vă puteți permite să achiziționați o licență, faceți clic pe {aici} pentru a vedea dacă sunteți eligibil pentru o reducere",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
"message": "Conectează-te cu Patreon"
},
"redeem": {
"message": "Folosește"
},
"joinOnPatreon": {
"message": "Abonează-te pe Patreon"
},
"oneTimePurchase": {
"message": "Achiziție unică"
},
"enterLicenseKey": {
"message": "Introdu cheia de licență"
},
"unsubmittedSegmentCounts": {
"message": "Ai în prezent {0} pe {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
},
"unsubmittedSegmentCountsZero": {
"message": "În prezent nu aveți segmente netrimise",
"description": "Replaces 'unsubmittedSegmentCounts' string when there are no unsubmitted segments"
},
"unsubmittedSegmentsSingular": {
"message": "segment netransmis",
"description": "Example: You currently have 1 *unsubmitted segment* on 1 video"
},
"unsubmittedSegmentsPlural": {
"message": "segmente netransmise",
"description": "Example: You currently have 12 *unsubmitted segments* on 5 videos"
},
"videosSingular": {
"message": "videoclip",
"description": "Example: You currently have 3 unsubmitted segments on 1 *video*"
},
"videosPlural": {
"message": "videoclipuri",
"description": "Example: You currently have 12 unsubmitted segments on 5 *videos*"
},
"clearUnsubmittedSegments": {
"message": "Curăță toate segmentele",
"description": "Label for a button in settings"
},
"clearUnsubmittedSegmentsConfirm": {
"message": "Sigur doriți ștergerea tuturor segmentelor netransmise?",
"description": "Confirmation message for the Clear unsubmitted segments button"
},
"showUnsubmittedSegments": {
"message": "Arată segmentele",
"description": "Show/hide button for the unsubmitted segments list"
},
"hideUnsubmittedSegments": {
"message": "Ascunde segmentele",
"description": "Show/hide button for the unsubmitted segments list"
},
"videoID": {
"message": "ID videoclip",
"description": "Header of the unsubmitted segments list"
},
"segmentCount": {
"message": "Numărul de segmente",
"description": "Header of the unsubmitted segments list"
},
"actions": {
"message": "Acțiuni",
"description": "Header of the unsubmitted segments list"
},
"exportSegmentsAsURL": {
"message": "Distribuie ca URL"
},
"allowScrollingToEdit": {
"message": "Permite derularea la Editarea Timpilor"
}
}

View File

@@ -35,6 +35,9 @@
"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": "Проголосовать за этот сегмент"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Ошибка соединения. Код ошибки: "
},
"segmentsStillLoading": {
"message": "Сегменты всё ещё загружаются..."
},
"clearTimes": {
"message": "Очистить сегменты"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Закрыть окно"
},
"SubmitTimes": {
"message": "Отправить сегменты"
"closeIcon": {
"message": "Кнопка закрытия"
},
"OpenSubmissionMenu": {
"message": "Открыть меню отправки"
},
"sortSegments": {
"message": "Сортировать сегменты"
@@ -153,7 +162,7 @@
"message": "Отправить"
},
"submissionEditHint": {
"message": "Редактирование сегментов появится после нажатия на кнопку \"Отправить\"",
"message": "Редактирование сегментов появится после нажатия на кнопку «Отправить»",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
"popupHint": {
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Очистить время"
},
"submitTimesButton": {
"message": "Отправить сегменты"
},
"publicStats": {
"message": "Оно используется на публичной странице статистики, чтобы показать Ваш вклад. Её можно посмотреть "
},
@@ -199,7 +205,7 @@
"message": "Эта настройка скрывает кнопки для отправки сегментов, расположенные в плеере YouTube."
},
"showSkipButton": {
"message": "Не скрывать кнопку \"Пропустить до важного\" в плеере YouTube"
"message": "Не скрывать кнопку «Пропустить до важного» в плеере YouTube"
},
"showInfoButton": {
"message": "Показывать кнопку информации в плеере YouTube"
@@ -208,7 +214,7 @@
"message": "Скрыть кнопку информации в плеере YouTube"
},
"autoHideInfoButton": {
"message": "Автоматически скрывать кнопку Информация"
"message": "Автоматически скрывать кнопку информации"
},
"hideDeleteButton": {
"message": "Скрыть кнопку удаления в плеере YouTube"
@@ -380,7 +386,7 @@
"message": "Аудио уведомление при пропуске"
},
"audioNotificationDescription": {
"message": "Аудио уведомление о пропуске будет воспроизводиться каждый раз, когда сегмент пропущен. Если отключено (или автоматический пропуск отключён), звук не будет воспроизводиться."
"message": "Звуковое уведомление при пропуске будет воспроизводиться каждый раз, когда сегмент пропущен. Если отключено (или автоматический пропуск отключён), звук не будет воспроизводиться."
},
"showTimeWithSkips": {
"message": "Показывать длительность без сегментов"
@@ -415,16 +421,16 @@
"message": "Смотрите состояние сервера на status.sponsor.ajay.app."
},
"changeUserID": {
"message": "Импорт/Экспорт Вашего идентификатора пользователя"
"message": "Импорт/Экспорт приватного UserID"
},
"whatChangeUserID": {
"message": "Держите его в тайне. Относитесь к нему как к паролю и не передавайте никому. Если кто-то им завладеет, то сможет выдать себя за вас. Если вы ищете публичный ID пользователя, нажмите значок буфера обмена во всплывающем окне."
},
"setUserID": {
"message": "Установить идентификатор пользователя"
"message": "Установить приватный UserID"
},
"userIDChangeWarning": {
"message": "Внимание: изменение идентификатора пользователя необратимо. Вы действительно хотите это сделать? Сделайте резервную копию на всякий случай."
"message": "Внимание: изменение приватного UserID необратимо. Вы действительно хотите это сделать? Сделайте резервную копию на всякий случай."
},
"createdBy": {
"message": "Создано"
@@ -433,7 +439,7 @@
"message": "Поддерживать сторонние YouTube-сайты"
},
"supportOtherSitesDescription": {
"message": "Поддерживать сторонние клиенты для YouTube. Чтобы включить поддержку, Вам понадобится принять дополнительные разрешения. Эта функция НЕ работает в режиме \"инкогнито\" в Chrome и браузерах, основанных на Chromium.",
"message": "Поддержка сторонних клиентов YouTube. Чтобы включить поддержку, вы должны принять дополнительные разрешения.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -524,7 +530,7 @@
"message": "Загрузить из файла"
},
"whatExportOptions": {
"message": "Все настройки в формате JSON. Этот файл содержит Ваш идентификатор пользователя, будьте осторожны когда делитесь этими данными."
"message": "Все настройки в формате JSON. Этот файл содержит Ваш приватный UserID, будьте осторожны когда делитесь этими данными."
},
"setOptions": {
"message": "Параметры установки"
@@ -689,7 +695,7 @@
"message": "Заполнение отвлечёнными темами/шутками"
},
"category_filler_description": {
"message": "Сегменты, которые увеличивают длительность видео за счёт отвлечённых тем или шуток, но не требуются для понимания основного содержания. Не должно иметь сегментов, объясняющие контекст или предысторию."
"message": "Сегменты, которые увеличивают длительность видео за счёт отвлечённых тем или шуток, но не требуются для понимания основного содержания. Не должно иметь сегментов, объясняющих контекст или предысторию. Это очень агрессивная категория, используется тогда, когда вам не до \"веселья\"."
},
"category_filler_short": {
"message": "Заполнитель"
@@ -791,6 +797,10 @@
"message": "Показывать иконку, когда всё видео является рекламой",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Также показывать категории на превью",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Цвет неотправленного сегмента",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -933,7 +943,7 @@
"message": "Скрыть навсегда"
},
"warningChatInfo": {
"message": "Мы заметили, что вы совершаете распространённые и не злонамеренные ошибки"
"message": "Мы заметили, что вы совершаете распространенные ошибки. Мы очень ценим вашу работу, но мы стремимся делать всё идеально, так что даже очень маленькие ошибки имеют большое значение :)"
},
"warningTitle": {
"message": "Вы получили предупреждение"
@@ -1046,6 +1056,12 @@
"hideSegment": {
"message": "Скрыть сегмент"
},
"skipSegment": {
"message": "Пропустить сегмент"
},
"playChapter": {
"message": "Воспроизвести эпизод"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Наведите курсор на поле редактирования и используйте колесо мыши для быстрой настройки времени. Клавиши Ctrl или Shift могут быть использованы для точной настройки."
},
@@ -1073,7 +1089,7 @@
"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": "Бэкап/Восстановление",
"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": {
@@ -1126,7 +1142,7 @@
"message": "Ключ лицензии недействителен"
},
"hideUpsells": {
"message": "Скрыть опции, не доступные без дополнительной платы"
"message": "Скрыть опции, недоступные без дополнительной платы"
},
"chooseACountry": {
"message": "Выберите страну"
@@ -1140,10 +1156,6 @@
"selectYourCountry": {
"message": "Выберите вашу страну"
},
"alreadyDonated": {
"message": "Если вы когда-то жертвовали любую сумму, вы можете получить доступ, отправив электронное письмо сюда:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Если вы не можете позволить себе приобрести лицензию, нажмите {сюда}, чтобы узнать, имеете ли вы право на скидку",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1163,17 +1175,6 @@
"enterLicenseKey": {
"message": "Введите лицензионный ключ"
},
"chaptersPage1": {
"message": "Функция SponsorBlock \"эпизоды от сообщества\" доступна только для тех, кто приобрёл лицензию, и тех, кому был предоставлен бесплатный доступ благодаря их прошлым вкладам"
},
"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"
},
"unsubmittedSegmentCounts": {
"message": "Сейчас у вас есть {0} в {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1228,5 +1229,11 @@
},
"exportSegmentsAsURL": {
"message": "Поделиться ссылкой"
},
"segmentFetchFailureWarning": {
"message": "Внимание: Сервер ещё не прислал существующие сегменты. Для этого видео уже могут быть существующие сегменты, но вы их ещё не получили из-за проблем с сервером."
},
"allowScrollingToEdit": {
"message": "Разрешить прокрутку для редактирования времени"
}
}

View File

@@ -35,6 +35,9 @@
"message": "Zobraziť segmenty ako kapitoly",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Zobraziť aktuálny segment vedľa času videa"
},
"upvoteButtonInfo": {
"message": "Hlasovať pre tento príspevok"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Nastala chyba pripojenia. Kód chyby: "
},
"segmentsStillLoading": {
"message": "Segmenty sa ešte nahrávajú..."
},
"clearTimes": {
"message": "Zmazať segmenty"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Zavrieť okno"
},
"SubmitTimes": {
"message": "Odoslať segmenty"
"closeIcon": {
"message": "Ikona pre zatvorenie"
},
"sortSegments": {
"message": "Triedenie segmentov"
},
"submitCheck": {
"message": "Naozaj to chcete odoslať?"
@@ -159,9 +168,6 @@
"clearTimesButton": {
"message": "Vymazať časy"
},
"submitTimesButton": {
"message": "Odoslať časy"
},
"publicStats": {
"message": "Toto sa používa vo verejnom rebríčku pre zobrazenie vášho príspevku. Pozrite si ho"
},
@@ -222,6 +228,15 @@
"enableViewTrackingInPrivate": {
"message": "Zapnúť počítanie preskočení v inkognito oknách"
},
"enableTrackDownvotes": {
"message": "Uložiť segmenty, ktoré boli downvotované"
},
"whatTrackDownvotes": {
"message": "Všetky segmenty, ktoré znížite, zostanú skryté aj po obnovení"
},
"trackDownvotesWarning": {
"message": "Varovanie: Vypnutím tejto funkcie sa vymažú všetky predtým uložené downvoty"
},
"enableQueryByHashPrefix": {
"message": "Dopyt podľa hash prefixu"
},
@@ -284,6 +299,18 @@
"message": "Ak sa vám to stále nepáčí, stlačte tlačidlo Nikdy nezobrazovať.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setSkipShortcut": {
"message": "Preskočiť segment",
"description": "Keybind label"
},
"setStartSponsorShortcut": {
"message": "Segment štart/stop",
"description": "Keybind label"
},
"setSubmitKeybind": {
"message": "Odoslať segmenty",
"description": "Keybind label"
},
"nextChapterKeybind": {
"message": "Ďalšia kapitola",
"description": "Keybind label"
@@ -292,6 +319,9 @@
"message": "Predošlá kapitola",
"description": "Keybind label"
},
"keybindDescription": {
"message": "Vyberte kláves jeho zadaním a vyberte všetky modifikačné klávesy, ktoré chcete použiť."
},
"0": {
"message": "Spojenie vypršalo. Skontrolujte svoje internetové pripojenie. Ak vám internet funguje, server je pravdepodobne preťažený alebo nefunkčný."
},
@@ -388,16 +418,16 @@
"message": "Stav servera skontrolujete na status.sponsor.ajay.app."
},
"changeUserID": {
"message": "Import/export vášho ID používateľa"
"message": "Import/export vášho súkromného ID používateľa"
},
"whatChangeUserID": {
"message": "Toto si starostlivo uchovajte. Podobne ako heslo by ste to nemali s nikým zdieľať. Ak by to získal niekto ďalší, mohol by vám uškodiť. Ak hľadáte vaše verejné ID používateľa, stlačte ikonu schránky v podokne."
},
"setUserID": {
"message": "Nastaviť Používateľove ID"
"message": "Nastavenie súkromného identifikátora používateľa"
},
"userIDChangeWarning": {
"message": "Varovanie: Zmena ID používateľa je nezvratná. Naozaj to chcete spraviť? Pre istotu si staré ID používateľa zazálohujte."
"message": "Varovanie: Zmena súkromného ID používateľa je trvalá. Ste si istí, že to chcete urobiť? Pre istotu si zálohujte svoje staré."
},
"createdBy": {
"message": "Vytvoril"
@@ -406,7 +436,7 @@
"message": "Podpora alternatívnych Youtube webov"
},
"supportOtherSitesDescription": {
"message": "Podpora alternatívnych Youtube klientov. Pre zapnutie podpory musíte povoliť zvláštne oprávnenia. Nefunguje v anonymnom režime v prehliadači Chrome ani v Chromium variantoch.",
"message": "Podpora Youtube aplikácií tretích strán. Pre jej zapnutie musíte odsúhlasiť zvláštne oprávnenia.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -442,6 +472,12 @@
"minDurationDescription": {
"message": "Segmenty kratšie ako nastavená hodnota nebudú preskočené ani zobrazené v prehrávači."
},
"enableManualSkipOnFullVideo": {
"message": "Používanie manuálneho preskočenia, ak existuje úplný štítok videa"
},
"whatManualSkipOnFullVideo": {
"message": "Pre ľudí, ktorí chcú sledovať video bez prerušenia, ak je plne sponzorované alebo ide o vlastnú propagáciu."
},
"skipNoticeDuration": {
"message": "Trvanie oznámenia o preskočení (v sekundách):"
},
@@ -481,8 +517,17 @@
"exportOptions": {
"message": "Import/export všetkých nastavení"
},
"exportOptionsCopy": {
"message": "Upraviť/kopírovať"
},
"exportOptionsDownload": {
"message": "Uložiť do súboru"
},
"exportOptionsUpload": {
"message": "Načítanie do súboru"
},
"whatExportOptions": {
"message": "Toto vaše kompletné nastavenia vo formáte JSON. Obsahuje aj vaše Používateľské ID, takže s ním narábajte opatrne."
"message": "Toto je celá vaša konfigurácia vo formáte JSON. Zahŕňa vaše súkromné ID používateľa, preto ho nezabudnite rozumne zdieľať."
},
"setOptions": {
"message": "Nastaviť Nastavenia"
@@ -529,6 +574,9 @@
"copyDebugInformationComplete": {
"message": "Debug informácie boli skopírované do schránky. Ak chcete, môžete odstrániť akékoľvek informácie, ktoré nechcete zdieľať. Uložte si ich do textového súboru alebo ich vložte do nahlásenia chyby."
},
"keyAlreadyUsed": {
"message": "Táto skratka je viazaná na inú akciu. Vyberte inú."
},
"to": {
"message": "do",
"description": "Used between segments. Example: 1:20 to 1:30"
@@ -640,8 +688,11 @@
"category_preview_guideline3": {
"message": "Nie pre sekcie, ktoré majú dodatočný obsah"
},
"category_filler": {
"message": "Výplň Tangent / Vtipy"
},
"category_filler_description": {
"message": "Odbočky mimo tému pridané len pre zábavu, nepotrebné pre pochopenie hlavného obsahu videa. Nemalo by zahŕňať segmenty, ktoré vysvetľujú kontext alebo vedľajšie detaily."
"message": "Vedľajšie scény pridané len ako výplň alebo humor, ktoré nie sú potrebné na pochopenie hlavného obsahu videa. Nemali by sem patriť segmenty poskytujúce kontext alebo detaily pozadia. Toto je veľmi agresívna kategória určená na to, keď nemáte náladu na \"zábavu\"."
},
"category_filler_short": {
"message": "Odbočka"
@@ -798,6 +849,9 @@
"hiddenDueToDuration": {
"message": "skryté: príliš krátke"
},
"manuallyHidden": {
"message": "ručne skryté"
},
"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": "ID kanála sa ešte nenačítalo. Ak pozeráte video vložené na stránke, skúste ísť radšej priamo na YouTube. Problém mohli spôsobiť zmeny na YouTube. Ak je tomu tak, zanechajte komentár:"
@@ -882,7 +936,7 @@
"message": "Navždy skryť"
},
"warningChatInfo": {
"message": "Zaznamenali sme, že robíte omylom chyby"
"message": "Zaznamenali sme, že ste urobili obvyklú chybu. Vážime si vašej práce, ale ide nám o presnosť, takže aj na malých chybách záleží."
},
"warningTitle": {
"message": "Dostali ste varovanie"
@@ -894,14 +948,20 @@
"message": "Rozumiem dôvodu"
},
"warningError": {
"message": "Chyb a pri pokuse o súhlas s upozornením:"
"message": "Chyba pri pokuse o súhlas s upozornením:"
},
"Donate": {
"message": "Prispieť"
},
"considerDonating": {
"message": "Zvážte darovanie"
},
"hideDonationLink": {
"message": "Skryť možnosti prispenia"
},
"darkModeOptionsPage": {
"message": "Tmavý režim na stránke s možnosťami"
},
"helpPageThanksForInstalling": {
"message": "Ďakujeme za inštaláciu SponsorBlock-u."
},
@@ -989,6 +1049,12 @@
"hideSegment": {
"message": "Skryť segment"
},
"skipSegment": {
"message": "Preskočiť segment"
},
"playChapter": {
"message": "Prehrať kapitolu"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Čas môžete rýchlo zmeniť kolieskom myši, ak je kurzor nad zadávacím políčkom. Pre jemné zmeny pritom držte kláves ctrl alebo shift."
},
@@ -1003,19 +1069,68 @@
"message": "h",
"description": "100h"
},
"optionsTabBehavior": {
"message": "Správanie",
"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": "Rozhranie",
"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": "Klávesové skratky",
"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": "Zálohovanie/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": "Rôzne",
"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": "Preskočiť vzhľad oznámenia",
"description": "Option label"
},
"unbind": {
"message": "Zrušenie väzby",
"description": "Unbind keyboard shortcut"
},
"notSet": {
"message": "Nie je nastavené"
},
"change": {
"message": "Zmena"
},
"youtubeKeybindWarning": {
"message": "Toto je zabudovaná skratka YouTube. Ste si istí, že ju chcete použiť?"
},
"betaServerWarning": {
"message": "Je zapnutý BETA server!"
},
"openOptionsPage": {
"message": "Otvoriť stránku s nastaveniami"
},
"resetToDefault": {
"message": "Obnovenie predvolených nastavení"
},
"confirmResetToDefault": {
"message": "Ste si istí, že chcete obnoviť všetky nastavenia na predvolené hodnoty? To sa nedá vrátiť späť."
},
"exportSegments": {
"message": "Exportovať segmenty"
},
"importSegments": {
"message": "Import segmentov"
},
"Import": {
"message": "Import",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
},
"redeemSuccess": {
"message": "Úspešne vykúpiť!"
},
"redeemFailed": {
"message": "Licenčný kľúč nie je platný"
},
@@ -1034,10 +1149,6 @@
"selectYourCountry": {
"message": "Vyberte krajinu"
},
"alreadyDonated": {
"message": "Ak ste už v minulosti prispeli, získajte voľný prístup napísaním emailu:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Ak si nemôžete dovoliť kúpiť licenciu, kliknite {sem} a zistite, či máte nárok na zľavu",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1057,11 +1168,48 @@
"enterLicenseKey": {
"message": "Zadajte licenčný kľúč"
},
"chaptersPage1": {
"message": "Crowd-sourcované kapitovly v SponsorBlock-u sú dostupné len po zakúpení licencie alebo zadarmo pre ľudí, ktorí už v minulosti prispeli"
"unsubmittedSegmentCounts": {
"message": "V súčasnosti máte {0} na {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
},
"chapterNewFeature": {
"message": "Nová funkcia: Crowd-sourcované vlastné kapitoly. Toto sú sekcie videa s vlastnými názvami, ktoré môžu byť pre väčšiu presnosť vyskladané. Ak si kúpite licenciu, uvidíte kapitoly v tomto videu, ako napr.: ",
"description": "After the comma, a list of chapters for this video will appear"
"unsubmittedSegmentCountsZero": {
"message": "V súčasnosti nemáte žiadne neodoslané segmenty",
"description": "Replaces 'unsubmittedSegmentCounts' string when there are no unsubmitted segments"
},
"unsubmittedSegmentsSingular": {
"message": "neodoslaný segment",
"description": "Example: You currently have 1 *unsubmitted segment* on 1 video"
},
"unsubmittedSegmentsPlural": {
"message": "nezaslané segmenty",
"description": "Example: You currently have 12 *unsubmitted segments* on 5 videos"
},
"videosSingular": {
"message": "video",
"description": "Example: You currently have 3 unsubmitted segments on 1 *video*"
},
"videosPlural": {
"message": "v",
"description": "Example: You currently have 12 unsubmitted segments on 5 *videos*"
},
"clearUnsubmittedSegments": {
"message": "Vymazať všetky segmenty",
"description": "Label for a button in settings"
},
"clearUnsubmittedSegmentsConfirm": {
"message": "Ste si istí, že chcete vymazať všetky neodoslané segmenty?",
"description": "Confirmation message for the Clear unsubmitted segments button"
},
"showUnsubmittedSegments": {
"message": "Zobraziť segmenty",
"description": "Show/hide button for the unsubmitted segments list"
},
"hideUnsubmittedSegments": {
"message": "Skryť segmenty",
"description": "Show/hide button for the unsubmitted segments list"
},
"videoID": {
"message": "ID videa",
"description": "Header of the unsubmitted segments list"
}
}

View File

@@ -35,6 +35,9 @@
"message": "Gör segment som kapitel",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Visa nuvarande segment bredvid videotid"
},
"upvoteButtonInfo": {
"message": "Rösta på detta inskick"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Anslutningsfel. Felkod: "
},
"segmentsStillLoading": {
"message": "Segmenten laddas fortfarande..."
},
"clearTimes": {
"message": "Rensa segmenten"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Stäng popup"
},
"SubmitTimes": {
"message": "Skicka in segment"
"closeIcon": {
"message": "Stäng ikon"
},
"OpenSubmissionMenu": {
"message": "Öppna inlämningsmenyn"
},
"sortSegments": {
"message": "Sortera segment"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Rensa tider"
},
"submitTimesButton": {
"message": "Skicka in tider"
},
"publicStats": {
"message": "Detta används på den offentliga statistiksidan för att visa hur mycket du har bidragit. Ta en titt"
},
@@ -415,16 +421,16 @@
"message": "Gå till status.sponsor.ajay.app för serverstatus."
},
"changeUserID": {
"message": "Importera/Exportera ditt Användar-ID"
"message": "Importera/Exportera ditt privata Användar-ID"
},
"whatChangeUserID": {
"message": "Detta ska hållas privat. Detta är som ett lösenord och ska inte delas med någon. Om andra får tag i det kan de utge sig för att vara dig. Om du letar efter ditt offentliga Användar-ID kan du klicka på urklippsikonen i popupen."
},
"setUserID": {
"message": "Ange Användar-ID"
"message": "Ange privat Användar-ID"
},
"userIDChangeWarning": {
"message": "Varning: Ändring av Användar-ID är permanent. Är du säker att du vill göra detta? Se till att ta en säkerhetskopia av ditt gamla för säkerhets skull."
"message": "Varning: Ändring av ditt Användar-ID är permanent. Är du säker att du vill göra detta? Se till att ta en säkerhetskopia av ditt gamla för säkerhets skull."
},
"createdBy": {
"message": "Skapad av"
@@ -433,7 +439,7 @@
"message": "Stöd för tredjeparts YouTube-webbplatser"
},
"supportOtherSitesDescription": {
"message": "Stöd tredjeparts YouTube-klienter. För att aktivera support måste du acceptera de extra behörigheterna. Detta fungerar INTE i inkognito på Chrome och andra Chromium-varianter.",
"message": "Stöd tredjeparts YouTube-klienter. För att aktivera stöd måste du acceptera de extra behörigheterna.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -524,7 +530,7 @@
"message": "Ladda från fil"
},
"whatExportOptions": {
"message": "Detta är alla dina alternativ i JSON-format. Det inkluderar ditt Användar-ID, så var noga med hur du hanterar informationen."
"message": "Detta är hela din konfiguration i JSON-format. Det inkluderar ditt Användar-ID, så var noga med hur du hanterar informationen."
},
"setOptions": {
"message": "Ange alternativ"
@@ -689,7 +695,7 @@
"message": "Ämnesavvikelse/Skämt"
},
"category_filler_description": {
"message": "Tangentiella scener endast tillagda för utfyllnad eller humor som inte krävs för att förstå det huvudsakliga innehållet i videon. Detta bör inte omfatta segment som tillhandahåller innehåll eller bakgrundsdetaljer."
"message": "Tangentiella scener endast för utfyllnad eller humor som inte krävs för att förstå det huvudsakliga innehållet i videon. Detta bör inte omfatta segment som tillhandahåller kontext eller bakgrundsdetaljer. Detta är en mycket aggressiv kategori avsedd för när du inte är på humör för \"kul\"."
},
"category_filler_short": {
"message": "Utfyllnad"
@@ -791,6 +797,10 @@
"message": "Visa en ikon när hela videon är en annons",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Visa även etiketter på videominiatyrbilder",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Färg på oinskickade",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -933,7 +943,7 @@
"message": "Dölj för alltid"
},
"warningChatInfo": {
"message": "Vi märkte att du gjorde några vanliga misstag som inte var uppsåtligt"
"message": "Vi märkte att du gjorde några vanliga misstag. Vi uppskattar verkligen ditt arbete hittills, men vi strävar mot perfektion här, så även mycket små misstag spelar roll :)"
},
"warningTitle": {
"message": "Du har fått en varning"
@@ -1046,6 +1056,12 @@
"hideSegment": {
"message": "Dölj segment"
},
"skipSegment": {
"message": "Hoppa över segment"
},
"playChapter": {
"message": "Spela kapitel"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Använd mushjulet medan du håller muspekaren över redigeringsrutan för att snabbt justera tiden. Kombinationer av CTRL- eller SKIFT-tangenten kan användas för att finjustera tiden."
},
@@ -1140,10 +1156,6 @@
"selectYourCountry": {
"message": "Välj ditt land"
},
"alreadyDonated": {
"message": "Om du har donerat tidigare kan du lösa in fri åtkomst genom att skicka e-post till:",
"description": "After the colon is an email address"
},
"cantAfford": {
"message": "Om du inte har råd att köpa en licens kan du klicka {här} för att se om du är berättigad till rabatt",
"description": "Keep the curly braces. The word 'here' should be translated as well."
@@ -1163,17 +1175,6 @@
"enterLicenseKey": {
"message": "Ange licensnyckel"
},
"chaptersPage1": {
"message": "SponsorBlock crowd-sourced kapitelfunktionen är endast tillgänglig för personer som köper en licens eller för de personer som beviljats gratis tillgång på grund av att de bidragit tidigare"
},
"chaptersPage2": {
"message": "Obs: Tillstånd att skicka in kapitel är fortfarande baserat på beräknat rykte. Köpa en licens låter dig bara visa kapitel som lämnats in av andra",
"description": "On the chapters page for getting access to the paid chapters feature"
},
"chapterNewFeature": {
"message": "Ny funktion: Crowd-sourced anpassade kapitel. Dessa är anpassade namngivna avsnitt i videor som kan staplas för att få mer och mer exakt. Köp en licens för att se de kapitel som lämnats på denna video såsom: ",
"description": "After the comma, a list of chapters for this video will appear"
},
"unsubmittedSegmentCounts": {
"message": "Du har för närvarande {0} på {1}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1228,5 +1229,11 @@
},
"exportSegmentsAsURL": {
"message": "Dela som webbadress"
},
"segmentFetchFailureWarning": {
"message": "Varning: Servern har inte skickat ut några segment. Det kan faktiskt finnas segment på den här videon som redan skickats in, men du har inte mottagit dem ännu på grund av problem med servern."
},
"allowScrollingToEdit": {
"message": "Tillåt rullning för att redigera tiden"
}
}

View File

@@ -112,9 +112,6 @@
"closePopup": {
"message": "பாப்அப்பை மூடு"
},
"SubmitTimes": {
"message": "பிரிவுகளைச் சமர்ப்பிக்கவும்"
},
"submitCheck": {
"message": "இதை நிச்சயமாக சமர்ப்பிக்க விரும்புகிறீர்களா?"
},
@@ -149,9 +146,6 @@
"clearTimesButton": {
"message": "நேரங்களை அழி"
},
"submitTimesButton": {
"message": "நேரங்களைச் சமர்ப்பிக்கவும்"
},
"publicStats": {
"message": "நீங்கள் எவ்வளவு பங்களித்தீர்கள் என்பதைக் காட்ட இது பொது புள்ளிவிவரங்கள் பக்கத்தில் பயன்படுத்தப்படுகிறது. அதை பார்"
},
@@ -381,28 +375,15 @@
"statusReminder": {
"message": "சேவையக நிலைக்கு status.sponsor.ajay.app ஐச் சரிபார்க்கவும்."
},
"changeUserID": {
"message": "உங்கள் பயனர் ஐடியை இறக்குமதி / ஏற்றுமதி செய்யுங்கள்"
},
"whatChangeUserID": {
"message": "இதை தனிப்பட்டதாக வைத்திருக்க வேண்டும். இது கடவுச்சொல் போன்றது, அதை யாருடனும் பகிரக்கூடாது. யாரிடமாவது இது இருந்தால், அவர் உங்களைப் போல் ஆள்மாறாட்டம் செய்யலாம். உங்கள் பொது பயனர் IDயை நீங்கள் தேடுகிறீர்களானால், பாப்அப்பில் உள்ள கிளிப்போர்டு ஐகானைக் கிளிக் செய்யவும்."
},
"setUserID": {
"message": "UserID ஐ அமைக்கவும்"
},
"userIDChangeWarning": {
"message": "எச்சரிக்கை: பயனர் ஐடியை மாற்றுவது நிரந்தரமானது. இதை நிச்சயமாக செய்ய விரும்புகிறீர்களா? உங்கள் பழையதை காப்புப்பிரதி எடுக்க உறுதிசெய்க."
},
"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": "ஆதரிக்கப்படும் தளங்கள்: "
},
@@ -481,9 +462,6 @@
"exportOptionsUpload": {
"message": "கோப்பிலிருந்து ஏற்று"
},
"whatExportOptions": {
"message": "இது JSON இல் உங்கள் முழு உள்ளமைவு. இது உங்கள் பயனர் ஐடியை உள்ளடக்கியது, எனவே இதை புத்திசாலித்தனமாக பகிர்ந்து கொள்ளுங்கள்."
},
"setOptions": {
"message": "விருப்பங்களை அமைக்கவும்"
},

View File

@@ -103,9 +103,6 @@
"closePopup": {
"message": "పాపప్ మూసివేయండి"
},
"SubmitTimes": {
"message": "విభాగాలను సమర్పించండి"
},
"submitCheck": {
"message": "మీరు దీన్ని ఖచ్చితంగా సమర్పించాలనుకుంటున్నారా?"
},
@@ -140,9 +137,6 @@
"clearTimesButton": {
"message": "టైమ్స్ క్లియర్"
},
"submitTimesButton": {
"message": "టైమ్స్ సమర్పించండి"
},
"publicStats": {
"message": "మీరు ఎంత సహకరించారో చూపించడానికి ఇది పబ్లిక్ గణాంకాల పేజీలో ఉపయోగించబడుతుంది. ఇది చూడు"
},
@@ -295,15 +289,6 @@
"statusReminder": {
"message": "సర్వర్ స్థితి కోసం status.sponsor.ajay.app ని తనిఖీ చేయండి."
},
"changeUserID": {
"message": "మీ యూజర్‌ఐడిని దిగుమతి / ఎగుమతి చేయండి"
},
"setUserID": {
"message": "UserID ని సెట్ చేయండి"
},
"userIDChangeWarning": {
"message": "హెచ్చరిక: యూజర్‌ఐడిని మార్చడం శాశ్వతం. మీరు దీన్ని ఖచ్చితంగా చేయాలనుకుంటున్నారా? ఒకవేళ మీ పాతదాన్ని బ్యాకప్ చేయాలని నిర్ధారించుకోండి."
},
"createdBy": {
"message": "సృష్టికర్త"
},
@@ -361,9 +346,6 @@
"exportOptions": {
"message": "అన్ని ఎంపికలను దిగుమతి / ఎగుమతి చేయండి"
},
"whatExportOptions": {
"message": "ఇది JSON లో మీ మొత్తం కాన్ఫిగరేషన్. ఇది మీ యూజర్‌ఐడిని కలిగి ఉంది, కాబట్టి దీన్ని తెలివిగా పంచుకోండి."
},
"setOptions": {
"message": "ఎంపికలను సెట్ చేయండి"
},

View File

@@ -25,6 +25,9 @@
"Segments": {
"message": "ส่วน"
},
"SegmentsCap": {
"message": "ส่วน"
},
"upvoteButtonInfo": {
"message": "เห็นด้วยกับรายงานนี้"
},
@@ -69,5 +72,9 @@
},
"clearTimesButton": {
"message": "ล้างเวลา"
},
"supportOtherSitesDescription": {
"message": "สนับสนุนลูกค้า YouTube บุคคลที่สาม.\nในการเปิดใช้งานการสนับสนุน คุณต้องยอมรับการอนุญาตพิเศษ!",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
}
}

View File

@@ -26,11 +26,18 @@
"message": "kısım"
},
"SegmentsCap": {
"message": "Segmentler"
"message": "Kısımlar"
},
"Chapters": {
"message": "Bölümler"
},
"renderAsChapters": {
"message": "Kısımları bölüm olarak göster",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"showSegmentNameInChapterBar": {
"message": "Geçerli kısmı video zamanının yanında göster"
},
"upvoteButtonInfo": {
"message": "Bu öneriye oy ver"
},
@@ -109,6 +116,9 @@
"connectionError": {
"message": "Bağlantı hatası oluştu. Hata kodu: "
},
"segmentsStillLoading": {
"message": "Bölümler hala yükleniyor..."
},
"clearTimes": {
"message": "Kısımları temizle"
},
@@ -118,8 +128,14 @@
"closePopup": {
"message": "Açılır Pencereyi kapat"
},
"SubmitTimes": {
"message": "Kısımları gönder"
"closeIcon": {
"message": "Kapat Simgesi"
},
"OpenSubmissionMenu": {
"message": "Gönderiler Menüsünü Aç"
},
"sortSegments": {
"message": "Kısımları Sırala"
},
"submitCheck": {
"message": "Bunu göndermek istediğinize emin misiniz?"
@@ -155,9 +171,6 @@
"clearTimesButton": {
"message": "Süreleri Temizle"
},
"submitTimesButton": {
"message": "Süreleri Gönder"
},
"publicStats": {
"message": "Bu, ne kadar katkı sağladığınızı göstermek için herkese açık istatistik sayfasında kullanılacaktır. Görün"
},
@@ -239,6 +252,12 @@
"whatRefetchWhenNotFound": {
"message": "Eğer video yeni ve kısımları bulunmuyorsa, sen videoyu izlerken her birkaç dakikada bir kısımları edinmeye çalışır."
},
"enableShowCategoryWithoutPermission": {
"message": "Gönderim izni olmasa bile gönderim menüsünde kategorileri gösterme"
},
"whatShowCategoryWithoutPermission": {
"message": "Bazı kategoriler, minimum itibar gereksinimleri nedeniyle göndermek için izin gerektirir"
},
"showNotice": {
"message": "Uyarıyı Tekrar Göster"
},
@@ -402,16 +421,16 @@
"message": "Sunucu durumu için status.sponsor.ajay.app kontrol edin."
},
"changeUserID": {
"message": "Kullanıcı kimliğini Dışarı/İçeri Aktar"
"message": "Özel Kullanıcı Kimliğini İçe/Dışa Aktar"
},
"whatChangeUserID": {
"message": "Bu gizli tutulmalıdır. Bu bir şifre gibidir ve kimseyle paylaşılmamalıdır. Eğer birisi buna sahipse, seni taklit edebilir. Herkese açık kullanıcı kimliğinizi arıyorsanız, açılır pencerede pano simgesine tıklayın."
},
"setUserID": {
"message": "Kullanıcı kimliği Belirle"
"message": "Özel Kullanıcı Kimliğini Ayarla"
},
"userIDChangeWarning": {
"message": "Uyarı: Kullanıcı kimliği değiştirmek kalıcıdır. Bunu yapmak istediğinizden emin misiniz? Eskisini yedeklediğinizden emin olun."
"message": "Uyarı: Özel Kullanıcı Kimliğini değiştirmek kalıcıdır. Bunu yapmak istediğinizden emin misiniz? Her ihtimale karşı eskisini yedeklediğinizden emin olun."
},
"createdBy": {
"message": "Oluşturan"
@@ -420,7 +439,7 @@
"message": "3. Taraf Youtube Sitelerini Destekle"
},
"supportOtherSitesDescription": {
"message": "Üçüncü taraf YouTube istemci desteği. Desteği etkinleştirmek için özel izinleri kabul etmelisiniz. Bu özellik Chrome ve diğer Chromium tarayıcılarda gizli modda çalışmaz.",
"message": "3. taraflarca yazılmış YouTube istemcileri desteği. Kullanabilmek için ilave izinler vermelisiniz.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -456,6 +475,12 @@
"minDurationDescription": {
"message": "Ayarlanan değerden daha kısa kısımlar atlanmayacak veya oynatıcıda gösterilmeyecektir."
},
"enableManualSkipOnFullVideo": {
"message": "Bütün video etiketi mevcut olduğunda manuel atlama özelliğini kullanın"
},
"whatManualSkipOnFullVideo": {
"message": "Video boyunca sponsorlu veya kendi reklamını yapıyorsa videoyu kesintisiz izlemek isteyenler için."
},
"skipNoticeDuration": {
"message": "Atlandı uyarısı süresi (saniye cinsinden):"
},
@@ -505,7 +530,7 @@
"message": "Dosyadan yükle"
},
"whatExportOptions": {
"message": "Bu, JSON formatında bütün kurulumunuzu gösterir. Kullanıcı kimliğinizi içerir, bu sebeple paylaşırken dikkatli olun."
"message": "Bu, JSON'daki tüm yapılandırmanızdır. Buna Özel Kullanıcı Kimliğiniz de dahildir, bu yüzden bunu paylaşırken dikkatli olun."
},
"setOptions": {
"message": "Seçenekleri Ayarla"
@@ -654,6 +679,9 @@
"category_preview": {
"message": "Ön İzleme/Özet"
},
"category_preview_description": {
"message": "Bu videoda veya diğer videolarda neler olduğunu gösteren, videonun ilerleyen zamanında tüm bilgilerin tekrarlandığı bir dizi klip koleksiyonudur."
},
"category_preview_guideline1": {
"message": "Daha sonra veya gelecekteki bir videoda görünen klipler"
},
@@ -667,7 +695,7 @@
"message": "Konuyla Alakasız / Şaka"
},
"category_filler_description": {
"message": "Videonun ana içeriğini anlamak için gerekli olmayan, yalnızca alakasız konu veya mizah için eklenen sahneler. Bu, alakalı veya arka plan ayrıntısı veren kısımları içermemelidir."
"message": "Videonun ana içeriğini anlamak için gerekli olmayan, yalnızca zaman geçirme veya mizah için eklenen teğet sahnelerdir. Bu, bağlam veya arka plan ayrıntılarını sağlayan kısımları içermemelidir. Bu, \"eğlence\" havasında olmadığınız zamanlar için tasarlanmış çok agresif bir kategoridir."
},
"category_filler_short": {
"message": "Alakasız Konu"
@@ -714,9 +742,18 @@
"category_chapter": {
"message": "Bölüm"
},
"category_chapter_description": {
"message": "Bir videonun ana kısımlarınııklayan özel adlandırılmış bölümler."
},
"category_chapter_guideline1": {
"message": "Sponsor marka isimlerinden bahsetme"
},
"category_chapter_guideline2": {
"message": "Genel kısımlar için daha büyük bölümler kullanın"
},
"category_chapter_guideline3": {
"message": "Daha küçük bölümler daha büyük bölümlerin içine yerleştirilebilir"
},
"category_livestream_messages": {
"message": "Canlı Yayın: Bağış/Mesaj Okuma"
},
@@ -760,6 +797,10 @@
"message": "Video bütünüyle bir reklamsa simge göster",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Etiketleri, video küçük resimlerinde de göster",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Gönderilmemiş Renk",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -822,6 +863,9 @@
"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 kimliği henüz yüklenmedi. Gömülü bir video kullanıyorsanız, bunun yerine YouTube ana sayfasından izlemeyi deneyin. Bu, YouTube düzenindeki değişikliklerden de kaynaklanabilir, eğer öyleyse, buraya bir yorum yazın:"
},
"invidiousPermissionRefresh": {
"message": "Tarayıcınız, eklentinin Invidious ve diğer 3. taraf sitelerde çalışması için gerekli izni kaldırdı. Bu izni yeniden etkinleştirmek için lütfen aşağıdaki butona tıklayın."
},
"acceptPermission": {
"message": "İzni kabul et"
},
@@ -888,6 +932,9 @@
"categoryPillTitleText": {
"message": "Bu videonun bütünü bu şekilde sınıflandırılmış ve kısımları birbirinden ayrılamayacak kadar sıkı bütünleştirilmiş"
},
"chapterNameTooltipWarning": {
"message": "Bölüm adlarınızdan biri bir kategoriye benziyor. Bunun yerine mümkün olduğunda kategorileri kullanmalısınız."
},
"experiementOptOut": {
"message": "Gelecekteki deneylerin hiçbirine katılma",
"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."
@@ -895,6 +942,9 @@
"hideForever": {
"message": "Asla gösterme"
},
"warningChatInfo": {
"message": "Yaygın hataları sıkça yaptığınız anlaşılıyor. Çabalarınız için sağolun fakat burada mükemmel bir sonuç istiyoruz, küçük hatalar bile fark ediyor :)"
},
"warningTitle": {
"message": "Bir uyarı aldın"
},
@@ -904,6 +954,9 @@
"warningConfirmButton": {
"message": "Nedenini anlıyorum"
},
"warningError": {
"message": "Uyarıyı tanımlamaya çalışırken hata oluştu:"
},
"Donate": {
"message": "Bağış Yap"
},
@@ -1003,6 +1056,12 @@
"hideSegment": {
"message": "Segmenti gizleyin"
},
"skipSegment": {
"message": "Kısmı atla"
},
"playChapter": {
"message": "Bölümü oynat"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Zaman aralığını hızlı bir şekilde ayarlamak için düzenleme kutusunun üzerinde fare tekerini kullanın. Değişikliklere ince ayar yapmak için ctrl veya shift tuşunun kombinasyonları kullanılabilir."
},
@@ -1010,11 +1069,11 @@
"message": "Yeni! Videonun bütünü sponsor veya kendi reklamıysa bu uyarıyı görün"
},
"dayAbbreviation": {
"message": "d",
"message": "g",
"description": "100d"
},
"hourAbbreviation": {
"message": "h",
"message": "s",
"description": "100h"
},
"optionsTabBehavior": {
@@ -1069,22 +1128,44 @@
"exportSegments": {
"message": "Segmentleri dışa aktar"
},
"importSegments": {
"message": "Kısımları içe aktar"
},
"Import": {
"message": "İçeri aktar",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
},
"redeemSuccess": {
"message": "Kullanım Başarılı!"
},
"redeemFailed": {
"message": "Lisans anahtarı geçersiz"
},
"hideUpsells": {
"message": "Ekstra ödeme olmadan kullanılamayan özellikleri gizle"
},
"chooseACountry": {
"message": "Bir ülke seçiniz"
},
"noDiscount": {
"message": "İndirim için uygun değilsiniz"
},
"discountLink": {
"message": "İndirim Bağlantısı (Pembe fiyatı gör)"
},
"selectYourCountry": {
"message": "Ülkenizi seçin"
},
"cantAfford": {
"message": "Lisans satın almaya gücünüz yetmiyorsa, indirim almaya uygun olup olmadığınızı görmek için {here} tıklayın",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
"message": "Patreon ile giriş yap"
},
"redeem": {
"message": "Kullan"
},
"joinOnPatreon": {
"message": "Patreon'da Destekle"
},
@@ -1093,5 +1174,66 @@
},
"enterLicenseKey": {
"message": "Lisans Anahtarını Girin"
},
"unsubmittedSegmentCounts": {
"message": "Şu anda {1} da {0} var",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
},
"unsubmittedSegmentCountsZero": {
"message": "Gönderilmemiş kısmınız bulunmamaktadır",
"description": "Replaces 'unsubmittedSegmentCounts' string when there are no unsubmitted segments"
},
"unsubmittedSegmentsSingular": {
"message": "gönderilmemiş kısım",
"description": "Example: You currently have 1 *unsubmitted segment* on 1 video"
},
"unsubmittedSegmentsPlural": {
"message": "gönderilmemiş kısımlar",
"description": "Example: You currently have 12 *unsubmitted segments* on 5 videos"
},
"videosSingular": {
"message": "video",
"description": "Example: You currently have 3 unsubmitted segments on 1 *video*"
},
"videosPlural": {
"message": "videolar",
"description": "Example: You currently have 12 unsubmitted segments on 5 *videos*"
},
"clearUnsubmittedSegments": {
"message": "Tüm kısımları temizle",
"description": "Label for a button in settings"
},
"clearUnsubmittedSegmentsConfirm": {
"message": "Gönderilmemiş tüm kısımları temizlemek istediğinizden emin misiniz?",
"description": "Confirmation message for the Clear unsubmitted segments button"
},
"showUnsubmittedSegments": {
"message": "Kısımları göster",
"description": "Show/hide button for the unsubmitted segments list"
},
"hideUnsubmittedSegments": {
"message": "Kısımları gizle",
"description": "Show/hide button for the unsubmitted segments list"
},
"videoID": {
"message": "Video ID",
"description": "Header of the unsubmitted segments list"
},
"segmentCount": {
"message": "Kısım Sayısı",
"description": "Header of the unsubmitted segments list"
},
"actions": {
"message": "İşlemler",
"description": "Header of the unsubmitted segments list"
},
"exportSegmentsAsURL": {
"message": "URL olarak paylaş"
},
"segmentFetchFailureWarning": {
"message": "Dikkat: Sunucu henüz kısımlarla yanıt vermedi. Aslında bu videoda zaten gönderilmiş bölümler olabilir, ancak sunucudaki sorunlar nedeniyle bunları almadınız."
},
"allowScrollingToEdit": {
"message": "Zamanları Düzenlemek İçin Kaydırmaya İzin Ver"
}
}

View File

@@ -35,6 +35,9 @@
"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": "Проголосувати за цей сегмент"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "Помилка з'єднання. Код помилки: "
},
"segmentsStillLoading": {
"message": "Сегмент все ще завантажується..."
},
"clearTimes": {
"message": "Очистити сегменти"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "Закрити вікно"
},
"SubmitTimes": {
"message": "Надіслати сегменти"
"closeIcon": {
"message": "Закрити іконку"
},
"OpenSubmissionMenu": {
"message": "Відкрити меню надсилання"
},
"sortSegments": {
"message": "Сортувати сегменти"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "Очистити час"
},
"submitTimesButton": {
"message": "Надіслати час"
},
"publicStats": {
"message": "Воно використовується на публічній сторінці статистики, щоб показати Ваш внесок. Її можна подивитися"
},
@@ -246,6 +252,12 @@
"whatRefetchWhenNotFound": {
"message": "Якщо відео нове і для нього не знайдено сегментів, то інформація про них буде оновлюватися кожні пару хвилин, поки ви дивитеся відео."
},
"enableShowCategoryWithoutPermission": {
"message": "Показувати категорії в меню подання навіть без дозволу на подання"
},
"whatShowCategoryWithoutPermission": {
"message": "Деякі категорії потребують дозволу на подання через мінімальні вимоги до репутації"
},
"showNotice": {
"message": "Показувати сповіщення знову"
},
@@ -409,16 +421,16 @@
"message": "Дивіться стан сервера на status.sponsor.ajay.app."
},
"changeUserID": {
"message": "Імпортувати/Експортувати Ваш ідентифікатор користувача"
"message": "Імпорт/експорт вашого приватного UserID"
},
"whatChangeUserID": {
"message": "Тримайте його в таємниці. Ставтеся до нього як до паролю і не передавайте нікому. Якщо хтось їм заволодіє, то зможе видати себе за вас. Якщо ви шукаєте публічний ID користувача, натисніть значок буфера обміну у спливаючому вікні."
},
"setUserID": {
"message": "Встановити ідентифікатор користувача"
"message": "Встан. приватний UserID"
},
"userIDChangeWarning": {
"message": "Увага: зміна ідентифікатора користувача є незворотнім. Ви дійсно хочете це зробити? Зробіть резервну копію вашого старого про всяк випадок."
"message": "Попередження: зміна приватного UserID є постійною. Ви впевнені, що хочете це зробити? Про всяк випадок обов’язково зробіть резервну копію свого старого."
},
"createdBy": {
"message": "Створено"
@@ -427,7 +439,7 @@
"message": "Підтримувати сторонні YouTube-сайти"
},
"supportOtherSitesDescription": {
"message": "Підтримувати сторонні клієнти для YouTube. Щоб включити підтримку, Вам знадобиться прийняти додаткові дозволи. Ця функція НЕ працює в режимі \"інкогніто\" в Chrome і браузерах, заснованих на Chromium.",
"message": "Підтримка сторонніх клієнтів YouTube. Щоб увімкнути підтримку, ви повинні прийняти додаткові дозволи.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
@@ -463,6 +475,12 @@
"minDurationDescription": {
"message": "Сегменти коротше цього значення не будуть пропускатися і не будуть показані в плеєрі."
},
"enableManualSkipOnFullVideo": {
"message": "Використовуйте ручний пропуск, якщо існує повна мітка відео"
},
"whatManualSkipOnFullVideo": {
"message": "Для людей, які хочуть дивитися відео без перерв, якщо воно повністю спонсороване або самореклама."
},
"skipNoticeDuration": {
"message": "Тривалість повідомлення пропуску (в секундах):"
},
@@ -512,7 +530,7 @@
"message": "Завантажити з файлу"
},
"whatExportOptions": {
"message": "Це вся конфігурація в форматі JSON. Цей файл містить Ваш ідентифікатор користувача, тому не забудьте ділитися з цим розумно."
"message": "Вся ваша конфігурація в JSON. Це включає ваш приватний UserID, тому використовуйте з розумом."
},
"setOptions": {
"message": "Встановити параметри"
@@ -585,12 +603,24 @@
"category_sponsor_guideline1": {
"message": "Платні акції"
},
"category_sponsor_guideline2": {
"message": "Не для пожертвувань чи товарів на замовлення"
},
"category_selfpromo": {
"message": "Самореклама/рекомендація"
},
"category_selfpromo_description": {
"message": "Схоже на \"Спонсора\", але для безкоштовної реклами і самореклами. Включає себе вставки про мерчендайз, пожертвування або інформацію про тих, разом з ким було зроблено відео."
},
"category_selfpromo_guideline1": {
"message": "Пожертвування, членства та мерч"
},
"category_selfpromo_guideline2": {
"message": "Безкоштовні вітання, які не додають до відео"
},
"category_selfpromo_guideline3": {
"message": "Не для корпоративних продуктів і мерча"
},
"category_exclusive_access": {
"message": "Ексклюзивний доступ"
},
@@ -601,12 +631,24 @@
"message": "Це відео демонструє продукт, послугу або місцеположення, до яких автори отримали безоплатний або субсидований доступ",
"description": "Short description for this category"
},
"category_exclusive_access_guideline1": {
"message": "У відео демонструють щось із безкоштовним або субсидованим доступом"
},
"category_interaction": {
"message": "Нагадування про взаємодію (підписка)"
},
"category_interaction_description": {
"message": "Коли є коротке нагадування поставити лайк, підписатися на канал або в соцмережах в середині вмісту. Якщо ця вставка тривала або про щось конкретне, вона повинна класифікуватися як самореклама."
},
"category_interaction_guideline1": {
"message": "Короткі нагадування поставити лайк, підписатися"
},
"category_interaction_guideline2": {
"message": "Включає в себе непрямі нагадування про коментарі"
},
"category_interaction_guideline3": {
"message": "Не для загального просування, лише для закликів до дії"
},
"category_interaction_short": {
"message": "Нагадування про взаємодію"
},
@@ -619,27 +661,54 @@
"category_intro_short": {
"message": "Заставка"
},
"category_intro_guideline1": {
"message": "Інтервал без реального змісту"
},
"category_intro_guideline2": {
"message": "Не для переходів з інформацією"
},
"category_outro": {
"message": "Кінцева заставка/титри"
},
"category_outro_description": {
"message": "Титри або час появи кінцевих заставок YouTube. Не для підведення підсумків сказаного у відео."
},
"category_outro_guideline1": {
"message": "Не включайте вміст, навіть якщо на екрані є кінцеві картки"
},
"category_preview": {
"message": "Попередній перегляд/короткий зміст"
},
"category_preview_description": {
"message": "Колекція кліпів, які показують, що відбувається в цьому відео або інших відео в серії, де вся інформація повторюється пізніше у відео."
},
"category_preview_guideline1": {
"message": "Кліпи, які з’являться пізніше або в майбутньому відео"
},
"category_preview_guideline2": {
"message": "Повторення попереднього відео"
},
"category_preview_guideline3": {
"message": "Не для розділів, які додають додатковий вміст"
},
"category_filler": {
"message": "Дотичне наповнення/Жарти"
},
"category_filler_description": {
"message": "Дотичні сцени додані лише для наповнення або гумору, які не потрібні для розуміння основного вмісту відео. Це не повинно включати сегменти, що надають контекст або передісторію."
"message": "Дотичні сцени додані лише для наповнення або гумору, які не потрібні для розуміння основного вмісту відео. Це не повинно включати сегменти, що надають контекст або передісторію\". Це дуже агресивна категорія, призначена для випадків, коли ви не в настрої «розважатися»."
},
"category_filler_short": {
"message": "Наповнення"
},
"category_filler_guideline1": {
"message": "Дотичні сцени лише для наповнення чи гумору"
},
"category_filler_guideline2": {
"message": "Відволікання, ляпи, повтори"
},
"category_filler_guideline3": {
"message": "Не для сцен, які потрібні для розуміння теми"
},
"category_music_offtopic": {
"message": "Музика: Сегмент без музики"
},
@@ -649,6 +718,9 @@
"category_music_offtopic_short": {
"message": "Без музики"
},
"category_music_offtopic_guideline1": {
"message": "Розділів немає в офіційних випусках"
},
"category_music_offtopic_guideline2": {
"message": "Не музика під час виступу наживо"
},
@@ -658,6 +730,9 @@
"category_poi_highlight_description": {
"message": "Частина відео яку шукає більшість людей (Аналогічно коментарю \"Відео починається з Х:ХХ\")."
},
"category_poi_highlight_guideline1": {
"message": "Розділ, який шукають більшість людей"
},
"category_poi_highlight_guideline2": {
"message": "Може пропустити контекст"
},
@@ -667,6 +742,18 @@
"category_chapter": {
"message": "Розділ"
},
"category_chapter_description": {
"message": "Розділи з іменами користувача, що описують основні розділи відео."
},
"category_chapter_guideline1": {
"message": "Не згадуйте про торгові марки спонсорів"
},
"category_chapter_guideline2": {
"message": "Використовуйте більші розділи для загальних розділів"
},
"category_chapter_guideline3": {
"message": "Менші розділи можна розмістити всередині великих"
},
"category_livestream_messages": {
"message": "Прямі трансляції: пожертвування/читання повідомлення"
},
@@ -710,6 +797,10 @@
"message": "Показувати значок, коли все відео є рекламою",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "Показувати мітки на мініатюрах відео",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "Колір не надісланого сегмента",
"description": "Referring to submissions that have not been sent to the server yet."
@@ -841,6 +932,9 @@
"categoryPillTitleText": {
"message": "Все відео позначене цією категорією, воно є її уособленням, тож категорію неможливо виокремити."
},
"chapterNameTooltipWarning": {
"message": "Одна з назв ваших розділів схожа на категорію. Ви повинні використовувати категорії, коли це можливо."
},
"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."
@@ -849,7 +943,7 @@
"message": "Сховати назавжди"
},
"warningChatInfo": {
"message": "Ми помітили, що ви не зловмисно робили деякі поширені помилки"
"message": "Ми помітили, що ви робите деякі типові помилки. Ми дуже цінуємо вашу роботу, але ми прагнемо до досконалості, тому навіть дуже маленькі помилки мають значення :)"
},
"warningTitle": {
"message": "Ви отримали попередження"
@@ -962,6 +1056,12 @@
"hideSegment": {
"message": "Приховати сегмент"
},
"skipSegment": {
"message": "Пропустити сегмент"
},
"playChapter": {
"message": "Відтворити розділ"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Навівши курсор на поле редагування, користуйтеся колесом прокрутки, щоб швидко відрегулювати час. Комбінації клавіш ctrl або shift можуть бути використані для точнішої настройки змін."
},
@@ -1028,22 +1128,44 @@
"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": "Виберіть вашу країну"
},
"cantAfford": {
"message": "Якщо ви не можете дозволити собі придбати ліцензію, натисніть {тут}, щоб дізнатися, чи маєте ви право на знижку",
"description": "Keep the curly braces. The word 'here' should be translated as well."
},
"patreonSignIn": {
"message": "Вхід через Patreon"
},
"redeem": {
"message": "Купон"
},
"joinOnPatreon": {
"message": "Підписатися на Patreon"
},
@@ -1107,5 +1229,8 @@
},
"exportSegmentsAsURL": {
"message": "Поділитися посиланням"
},
"allowScrollingToEdit": {
"message": "Дозволити прокручування для редагування часу"
}
}

View File

@@ -25,6 +25,16 @@
"Segments": {
"message": "phân đoạn"
},
"SegmentsCap": {
"message": "Phân đoạn"
},
"Chapters": {
"message": "Chương"
},
"renderAsChapters": {
"message": "Coi phân đoạn như chương",
"description": "Refers to drawing segments on the YouTube seek bar as split up chapters, similar to the existing chapter system"
},
"upvoteButtonInfo": {
"message": "Tán thành phân đoạn này"
},
@@ -103,6 +113,9 @@
"connectionError": {
"message": "Đã xảy ra lỗi kết nối. Mã lỗi: "
},
"segmentsStillLoading": {
"message": "Phân đoạn vẫn đang tải..."
},
"clearTimes": {
"message": "Xóa các phân đoạn"
},
@@ -112,8 +125,8 @@
"closePopup": {
"message": "Đóng bảng popup"
},
"SubmitTimes": {
"message": "Gửi phân đoạn"
"sortSegments": {
"message": "Sắp xếp phân đoạn"
},
"submitCheck": {
"message": "Bạn có chắc chắn muốn gửi không?"
@@ -149,9 +162,6 @@
"clearTimesButton": {
"message": "Xóa thời gian"
},
"submitTimesButton": {
"message": "Gửi thời gian"
},
"publicStats": {
"message": "Tên này được dùng tại trang thông tin công khai để thể hiện lượng đóng góp của bạn. Xem"
},
@@ -289,6 +299,14 @@
"message": "Gửi phân đoạn",
"description": "Keybind label"
},
"nextChapterKeybind": {
"message": "Chương tiếp",
"description": "Keybind label"
},
"previousChapterKeybind": {
"message": "Chương trước",
"description": "Keybind label"
},
"keybindDescription": {
"message": "Chọn một phím bằng cách nhập nó và chọn bất kỳ phím bổ trợ nào bạn muốn sử dụng."
},
@@ -387,28 +405,15 @@
"statusReminder": {
"message": "Truy cập trang status.sponsor.ajay.app để biết tình trạng máy chủ."
},
"changeUserID": {
"message": "Nhập/Xuất mã người dùng của bạn"
},
"whatChangeUserID": {
"message": "Đây là mã cần được giữ bí mật. Nó giống như mật khẩu và không nên được chia sẻ cho bất kì ai khác. Nếu có ai đó lấy được mã này, họ có thể mạo danh bạn. Còn nếu như bạn đang tìm khoá ID công khai, hãy nhấn vào nút \"Sao chép Public UserID\" trong popup của SponsorBlock."
},
"setUserID": {
"message": "Đặt mã người dùng"
},
"userIDChangeWarning": {
"message": "Cảnh báo: Việc thay đổi mã người dùng có tác dụng vĩnh viễn. Bạn có chắc muốn thay đổi không? Hãy nhớ sao lưu lại mã người dùng cũ để đề phòng."
},
"createdBy": {
"message": "Được tạo bởi"
},
"supportOtherSites": {
"message": "Hỗ trợ các trang web Youtube thuộc bên thứ 3"
},
"supportOtherSitesDescription": {
"message": "Bật hỗ trợ các ứng dụng/trang web Youtube của bên thứ ba. Để bật hỗ trợ cho ứng dụng này, bạn phải chấp nhận các yêu cầu cho phép bổ sung. Nó KHÔNG CÓ tác dụng trong chế độ ẩn danh của Chrome và các trình duyệt có nền tảng Chromium.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
"message": "Các trang web được hỗ trợ: "
},
@@ -490,9 +495,6 @@
"exportOptionsUpload": {
"message": "Tải từ tệp"
},
"whatExportOptions": {
"message": "Đây là toàn bộ cấu hình của bạn trong tệp JSON. Nó chứa cả mã người dùng của bạn, nên hãy chia sẻ cẩn thận."
},
"setOptions": {
"message": "Đặt tùy chọn"
},
@@ -545,6 +547,10 @@
"message": "đến",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"CopiedExclamation": {
"message": "Đã sao chép!",
"description": "Used after something has been copied to the clipboard. Example: 'Copied!'"
},
"generic_guideline2": {
"message": "Chơi như thể không có gì bị bỏ qua"
},
@@ -645,9 +651,6 @@
"category_filler": {
"message": "Cảnh phụ"
},
"category_filler_description": {
"message": "Tập hợp các cảnh không bắt buộc để xem trong video. Điều này không bao gồm các đoạn chứa nội dung hoặc nói về ngữ cảnh của video."
},
"category_filler_short": {
"message": "Cảnh phụ"
},
@@ -684,6 +687,9 @@
"category_poi_highlight_guideline3": {
"message": "Có thể bỏ qua để đến tiêu đề hoặc hình thu nhỏ"
},
"category_chapter": {
"message": "Chương"
},
"category_livestream_messages": {
"message": "Luồng phát trực tiếp: Đọc Quyên góp/Tin nhắn"
},
@@ -769,6 +775,10 @@
"bracketEnd": {
"message": "(Kết thúc)"
},
"End": {
"message": "Kết thúc",
"description": "Button that skips to the end of a segment"
},
"hiddenDueToDownvote": {
"message": "đã ẩn: hạ bình chọn"
},
@@ -806,6 +816,9 @@
"downvoteDescription": {
"message": "Chỉnh thời gian sai/không đúng"
},
"incorrectVote": {
"message": "Sai"
},
"incorrectCategory": {
"message": "Đổi danh mục"
},
@@ -956,6 +969,9 @@
"hideSegment": {
"message": "Ẩn phân đoạn"
},
"skipSegment": {
"message": "Bỏ qua phân đoạn"
},
"SponsorTimeEditScrollNewFeature": {
"message": "Sử dụng con lăn chuột của bạn khi di chuột qua hộp chỉnh sửa để nhanh chóng điều chỉnh thời gian. Kết hợp phím ctrl hoặc shift có thể được sử dụng để tinh chỉnh các thay đổi."
},
@@ -1018,5 +1034,24 @@
},
"confirmResetToDefault": {
"message": "Bạn chắc chắn muốn đặt lại cài đặt về mặc định? Điều này sẽ không thể hoàn tác được."
},
"chooseACountry": {
"message": "Chọn một quốc gia"
},
"selectYourCountry": {
"message": "Chọn quốc gia"
},
"patreonSignIn": {
"message": "Đăng nhập bằng Patreon"
},
"joinOnPatreon": {
"message": "Đăng ký trên Patreon"
},
"enterLicenseKey": {
"message": "Nhập mã bản quyền"
},
"hideUnsubmittedSegments": {
"message": "Ẩn các phân đoạn",
"description": "Show/hide button for the unsubmitted segments list"
}
}

View File

@@ -25,6 +25,19 @@
"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": "为这个提交点赞"
},
@@ -52,6 +65,9 @@
"reskip": {
"message": "继续跳过"
},
"unmute": {
"message": "取消静音"
},
"paused": {
"message": "已暂停"
},
@@ -85,6 +101,9 @@
"noVideoID": {
"message": "未找到 YouTube 视频。\n如果识别错误请刷新此页面。"
},
"refreshSegments": {
"message": "刷新片段"
},
"success": {
"message": "成功 "
},
@@ -97,6 +116,9 @@
"connectionError": {
"message": "连接错误。错误代码: "
},
"segmentsStillLoading": {
"message": "片段仍在加载中..."
},
"clearTimes": {
"message": "清除片段"
},
@@ -106,8 +128,14 @@
"closePopup": {
"message": "关闭弹窗"
},
"SubmitTimes": {
"message": "提交片段"
"closeIcon": {
"message": "关闭图标"
},
"OpenSubmissionMenu": {
"message": "打开提交菜单"
},
"sortSegments": {
"message": "排序片段"
},
"submitCheck": {
"message": "您确定要提交它吗?"
@@ -143,9 +171,6 @@
"clearTimesButton": {
"message": "清除时间"
},
"submitTimesButton": {
"message": "提交时间"
},
"publicStats": {
"message": "这被用于在公开统计页面上展示您的贡献。查看它"
},
@@ -155,6 +180,12 @@
"setUsername": {
"message": "设定用户名"
},
"copyPublicID": {
"message": "复制公开的用户ID"
},
"copySegmentID": {
"message": "复制片段 ID"
},
"discordAdvert": {
"message": "快加入官方 Discord 服务器来提供建议与反馈!"
},
@@ -173,12 +204,18 @@
"hideButtonsDescription": {
"message": "这将隐藏在 YouTube 播放器上提交赞助商广告的按钮。我了解这个东西打扰到了某些人。除了使用那个按钮,这个弹窗也可以用来提交赞助商广告。 要隐藏出现的通知,请使用通知中显示的写着 ”不再显示“ 的按钮。您可以在以后再次启用这些设置。"
},
"showSkipButton": {
"message": "播放器显示跳至精华片段按钮"
},
"showInfoButton": {
"message": "在 Youtube 播放器上显示信息按钮"
},
"hideInfoButton": {
"message": "在 Youtube 播放器上隐藏信息按钮"
},
"autoHideInfoButton": {
"message": "自动隐藏信息按钮"
},
"hideDeleteButton": {
"message": "在 Youtube 播放器上隐藏删除按钮"
},
@@ -191,6 +228,18 @@
"whatViewTracking": {
"message": "此功能追踪您跳过了哪些片段,以让用户知道他们提交的信息帮助了多少人,并与点赞一同作为依据,来确保垃圾信息不会进入数据库。在您每次跳过片段时,此扩展都会向服务器发送一条消息。希望大部分人不要改变此设置,以使观看数字准确。:)"
},
"enableViewTrackingInPrivate": {
"message": "在私人/隐身标签中启用跳过计数跟踪"
},
"enableTrackDownvotes": {
"message": "保存差评片段"
},
"whatTrackDownvotes": {
"message": "任何被你差评的片段,即使在刷新后也会保持隐藏"
},
"trackDownvotesWarning": {
"message": "警告:禁用此功能将删除所有先前保存的差评"
},
"enableQueryByHashPrefix": {
"message": "按哈希前缀查询"
},
@@ -203,12 +252,36 @@
"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."
@@ -229,6 +302,29 @@
"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"
},
"nextChapterKeybind": {
"message": "下一章节",
"description": "Keybind label"
},
"previousChapterKeybind": {
"message": "上一章节",
"description": "Keybind label"
},
"keybindDescription": {
"message": "请按下想绑定的按键。如果您想使用组合快捷键,请勾选左侧的选项。"
},
"0": {
"message": "连接超时。请检查您的网络连接。如果您的网络运行正常,则可能是服务器过载或宕机。"
},
@@ -251,9 +347,35 @@
"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": "禁用自动跳过"
},
@@ -299,13 +421,16 @@
"message": "在 status.sponsor.ajay.app 检查服务器状态。"
},
"changeUserID": {
"message": "导入/导出您的用户 ID"
"message": "导入/导出您的私人用户ID"
},
"whatChangeUserID": {
"message": "这应该被保密。这就像一个密码且不应该告诉任何人。如果有人拥有它他就可以冒充您。如果您要找的是公开用户ID请单击弹出窗口中的剪贴板图标。"
},
"setUserID": {
"message": "设用户 ID"
"message": "设置私人用户ID"
},
"userIDChangeWarning": {
"message": "警告:更改用户 ID 是永久性的。您确定要这么做吗?请务必备份您的旧用户 ID 以防万一。"
"message": "警告:更改私人用户 ID 是永久性的。您确定要这么做吗?请务必备份您的旧用户 ID 以防万一。"
},
"createdBy": {
"message": "创建者"
@@ -313,9 +438,22 @@
"supportOtherSites": {
"message": "支持第三方 YouTube 网站"
},
"supportOtherSitesDescription": {
"message": "支持第三方 YouTube 客户端。要启用支持,您必须允许额外的权限。",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
"message": "支持的站点: "
},
"optionsInfo": {
"message": "启用 Invidious 支持,禁用自动跳过,隐藏按钮等等。"
},
"addInvidiousInstance": {
"message": "添加第三方客户端实例"
},
"addInvidiousInstanceDescription": {
"message": "添加自定义实例。它必须只包含域名。例如invidious.ajay.app"
},
"add": {
"message": "添加"
},
@@ -337,9 +475,24 @@
"minDurationDescription": {
"message": "短于设定值的片段将不会被跳过或显示在播放器中。"
},
"enableManualSkipOnFullVideo": {
"message": "当整个视频都是相同内容时使用手动跳过"
},
"whatManualSkipOnFullVideo": {
"message": "用于在观看整个视频都是赞助商广告或自我推广时不受打扰"
},
"skipNoticeDuration": {
"message": "跳过提醒持续时间(秒):"
},
"skipNoticeDurationDescription": {
"message": "跳过提醒将显示至少这么多秒。手动跳过的提醒可能会显示更久。"
},
"shortCheck": {
"message": "以下的提交短于您的最小持续时间选项。这代表它们可能已经被提交,只是由于该选项被忽略了。您确定要提交吗?"
},
"liveOrPremiere": {
"message": "无法在进行中的直播或首播提交片段。请等待直播结束后刷新页面并确认片段仍然有效,再次提交。"
},
"showUploadButton": {
"message": "显示上传按钮"
},
@@ -367,8 +520,17 @@
"exportOptions": {
"message": "导入/导出所有选项"
},
"exportOptionsCopy": {
"message": "编辑/复制"
},
"exportOptionsDownload": {
"message": "保存到文件"
},
"exportOptionsUpload": {
"message": "从文件加载"
},
"whatExportOptions": {
"message": "这是您全部配置的 JSON 格式。它包含了您的用户 ID ,所以您一定要谨慎的保管它。"
"message": "这是您所有设置的 JSON 格式。它包含了您的私人用户 ID ,所以您一定要谨慎的保管它。"
},
"setOptions": {
"message": "设定选项"
@@ -394,6 +556,9 @@
"preview": {
"message": "预览"
},
"unsubmitted": {
"message": "未提交"
},
"inspect": {
"message": "检查"
},
@@ -407,33 +572,83 @@
"message": "复制到剪贴板失败"
},
"copyDebugInformationOptions": {
"message": "复制信息到剪贴板,在提交错误或开发者需要时提供给他。 敏感信息如您的用户ID白名单频道和自定义服务器地址等已被删除。然而它仍然包含诸如您的 useragent ,浏览器,操作系统和扩展版本号等信息。 "
"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!'"
},
"generic_guideline1": {
"message": "包括衔接转场"
},
"generic_guideline2": {
"message": "装成没有跳过内容一样播放"
},
"category_sponsor": {
"message": "赞助商广告"
},
"category_sponsor_description": {
"message": "付费推广、付费推荐和直接广告。不应用于自我推广或免费提及、推荐他们喜欢的事物/创作者/网站/产品。"
},
"category_sponsor_guideline1": {
"message": "付费推广"
},
"category_sponsor_guideline2": {
"message": "捐赠或自制周边不属于此项"
},
"category_selfpromo": {
"message": "未收钱的/自我推"
"message": "无偿的/自我推广"
},
"category_selfpromo_description": {
"message": "类似于 “赞助商广告” ,但为无报酬或自我推广。包括有关商品、捐赠的部分或合作者的信息。"
},
"category_selfpromo_guideline1": {
"message": "捐赠、会员和自制周边"
},
"category_selfpromo_guideline2": {
"message": "与视频无关的免费推广"
},
"category_selfpromo_guideline3": {
"message": "不是公司设计的产品和周边"
},
"category_exclusive_access": {
"message": "独家限定"
},
"category_exclusive_access_description": {
"message": "仅用于标记整个视频。当视频展示了免费或被帮助以获得产品、服务或访问地点时使用。"
},
"category_exclusive_access_pill": {
"message": "此视频展示了免费或被帮助以获得产品、服务或访问地点",
"description": "Short description for this category"
},
"category_exclusive_access_guideline1": {
"message": "整个视频都在展示免费/受助以获得和访问的事物"
},
"category_interaction": {
"message": "互动提醒(订阅)"
},
"category_interaction_description": {
"message": "视频中间简短提醒观众来点赞、订阅或关注。 如果片段较长,或是关于某个具体事物,则应分类为自我推广。"
},
"category_interaction_guideline1": {
"message": "短暂提醒要喜欢、订阅或关注"
},
"category_interaction_guideline2": {
"message": "包括提醒发表评论,即使是间接的"
},
"category_interaction_guideline3": {
"message": "不是常见的推广互动,只是行动呼吁"
},
"category_interaction_short": {
"message": "互动提醒"
},
@@ -446,12 +661,54 @@
"category_intro_short": {
"message": "过场"
},
"category_intro_guideline1": {
"message": "无实际内容的片段"
},
"category_intro_guideline2": {
"message": "不包括含有信息的转场"
},
"category_outro": {
"message": "结束画面/结尾职员表"
},
"category_outro_description": {
"message": "鸣谢画面或出现 YouTube 片尾画面。不应用于包含信息的结尾。"
},
"category_outro_guideline1": {
"message": "不应包含内容,即使结尾演职员表已经出现。"
},
"category_preview": {
"message": "预览/概要"
},
"category_preview_description": {
"message": "展示此视频或同系列后续视频将出现的画面集锦,所有内容都将在之后再次出现。"
},
"category_preview_guideline1": {
"message": "在之后或未来视频会出现的片段"
},
"category_preview_guideline2": {
"message": "往期视频的回顾总结"
},
"category_preview_guideline3": {
"message": "不含有新添加的内容"
},
"category_filler": {
"message": "离题的闲聊/笑话"
},
"category_filler_description": {
"message": "离题片段标签仅在出现不需要理解视频主要内容的拖时间/无关笑话片段时使用。此标签不能包含有意义的内容或背景细节。这是非常激进的类别,代表您没有心情娱乐。"
},
"category_filler_short": {
"message": "离题"
},
"category_filler_guideline1": {
"message": "拖时间/无意义笑话等离题片段"
},
"category_filler_guideline2": {
"message": "分心、花絮、重播"
},
"category_filler_guideline3": {
"message": "不需要理解主题的片段"
},
"category_music_offtopic": {
"message": "音乐:非音乐部分"
},
@@ -459,7 +716,43 @@
"message": "仅用于音乐视频。此分类只能用于音乐视频中未包括于其他分类的部分。"
},
"category_music_offtopic_short": {
"message": "音乐"
"message": "音乐"
},
"category_music_offtopic_guideline1": {
"message": "不在官方版本中的部分"
},
"category_music_offtopic_guideline2": {
"message": "现场表演中的非音乐片段"
},
"category_poi_highlight": {
"message": "精彩时刻"
},
"category_poi_highlight_description": {
"message": "大部分人都在寻找的视频片段。类似于“封面在12:34”的评论。"
},
"category_poi_highlight_guideline1": {
"message": "大部分人想看的片段"
},
"category_poi_highlight_guideline2": {
"message": "可以帮助略过之前的内容"
},
"category_poi_highlight_guideline3": {
"message": "可以跳到标题或封面"
},
"category_chapter": {
"message": "章节"
},
"category_chapter_description": {
"message": "自定义命名章节描述了视频的主要部分。"
},
"category_chapter_guideline1": {
"message": "不要提到赞助商品牌名称"
},
"category_chapter_guideline2": {
"message": "在一般普通的环节使用较长的章节"
},
"category_chapter_guideline3": {
"message": "小章节可以放在大章节内"
},
"category_livestream_messages": {
"message": "直播:捐赠/消息阅读"
@@ -474,13 +767,46 @@
"message": "手动跳过"
},
"showOverlay": {
"message": "在搜索栏中显示"
"message": "在进度条中显示"
},
"disable": {
"message": "禁用"
},
"autoSkip_POI": {
"message": "跳至开始位置"
},
"manualSkip_POI": {
"message": "视频加载时询问"
},
"showOverlay_POI": {
"message": "在进度条中显示"
},
"showOverlay_full": {
"message": "显示标签"
},
"showOverlay_chapter": {
"message": "显示章节"
},
"autoSkipOnMusicVideos": {
"message": "自动跳过所有非音乐片段"
},
"muteSegments": {
"message": "允许静音的片段而不是跳过"
},
"fullVideoSegments": {
"message": "当整个视频都是广告时显示图标",
"description": "Referring to the category pill that is now shown on videos that are entirely sponsor or entirely selfpromo"
},
"fullVideoLabelsOnThumbnails": {
"message": "在视频缩略图上也显示标签",
"description": "Referring to the category pill that is shown on videos that are entirely sponsor or entirely selfpromo on recommended videos, in searches or on the homepage."
},
"previewColor": {
"message": "未提交颜色",
"description": "Referring to submissions that have not been sent to the server yet."
},
"seekBarColor": {
"message": "拖动条颜色"
"message": "进度条颜色"
},
"category": {
"message": "类别"
@@ -511,24 +837,47 @@
"message": "要提交“{0}”类别的片段,您必须在选项中启用此类别。现在将重定向到选项。",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "警告:此类型的片段一次最多只能使用一个。提交多个片段将随机显示。"
},
"youMustSelectACategory": {
"message": "您必须为所有您要提交的片段选择类别!"
},
"bracketEnd": {
"message": "(结束)"
},
"End": {
"message": "结束",
"description": "Button that skips to the end of a segment"
},
"hiddenDueToDownvote": {
"message": "隐藏:差评"
},
"hiddenDueToDuration": {
"message": "隐藏:过短"
},
"manuallyHidden": {
"message": "手动隐藏"
},
"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": "未检测到频道ID。如果您正在使用嵌入式视频播放器请转到 Youtube 网站观看。也可能是 Youtube 更改了页面布局,如果您认为是此问题,请在此评论:"
},
"invidiousPermissionRefresh": {
"message": "浏览器已撤销在 Invidious 及其他第三方网站运行所需的权限。请点击下方按钮重新激活权限。"
},
"acceptPermission": {
"message": "接受权限"
},
"permissionRequestSuccess": {
"message": "权限请求成功!"
},
"permissionRequestFailed": {
"message": "权限请求失败,您是否点击拒绝?"
},
"adblockerIssueWhitelist": {
"message": "如果您无法解决这个问题,请禁用“跳过前强制进行频道检查”选项,因为 SponsorBlock 无法获得此视频的频道信息"
},
"forceChannelCheck": {
"message": "跳过前强制进行频道检查"
},
@@ -541,6 +890,16 @@
"downvoteDescription": {
"message": "不正确/错误的时间"
},
"incorrectVote": {
"message": "不正确"
},
"harmfulVote": {
"message": "有害的",
"description": "Used for chapter segments when the text is harmful/offensive to remove it faster"
},
"incorrectCategory": {
"message": "更改类别"
},
"nonMusicCategoryOnMusic": {
"message": "此视频的分类为音乐。 您确定其中包含赞助商广告吗?如果这是“非音乐片段”,请打开扩展选项并启用此类别。 之后,您可以以“非音乐”而不是赞助商广告类别提交此片段。如果您不太明白,请阅读指南。"
},
@@ -558,9 +917,323 @@
"message": "类别在这里!"
},
"categoryUpdate2": {
"message": "开选项跳过开头结尾商业等。"
"message": "开选项跳过开头结尾商业等内容。"
},
"help": {
"message": "帮助"
},
"GotIt": {
"message": "明白了",
"description": "Used as the button to dismiss a tooltip"
},
"fullVideoTooltipWarning": {
"message": "片段过长。如果整个视频都是关于同一个主题,请将“跳过”改成“整个视频”标签。查看指南了解详情。"
},
"categoryPillTitleText": {
"message": "整个视频都被标记为此分类且内容过于紧凑,无法分开。"
},
"chapterNameTooltipWarning": {
"message": "提交的章节名称与现有类别名称相似。如果已经存在分类,您应该优先使用它。"
},
"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": "永远隐藏"
},
"warningChatInfo": {
"message": "我们注意到你犯了一些常见错误。我们非常赞赏你迄今所做的工作,但我们努力追求完美,所以即使是非常小的错误,也需要重视:)"
},
"warningTitle": {
"message": "你收到了警告"
},
"questionButton": {
"message": "我有疑问"
},
"warningConfirmButton": {
"message": "我理解原因"
},
"warningError": {
"message": "尝试确认警告时发生错误:"
},
"Donate": {
"message": "捐赠"
},
"considerDonating": {
"message": "资助开发"
},
"hideDonationLink": {
"message": "隐藏捐赠链接"
},
"darkModeOptionsPage": {
"message": "深色模式选项页面"
},
"helpPageThanksForInstalling": {
"message": "感谢安装 SponsorBlock。"
},
"helpPageReviewOptions": {
"message": "请查看下面的选项"
},
"helpPageFeatureDisclaimer": {
"message": "许多功能默认禁用。如果您想跳过开头、结尾或使用 Invidious 等,请在下方开启。您也可以显示/隐藏界面内容。"
},
"helpPageHowSkippingWorks": {
"message": "跳过是如何运作的"
},
"helpPageHowSkippingWorks1": {
"message": "视频片段如果在数据库中存在将被自动跳过。您可以点击插件图标打开弹窗查看预览。"
},
"helpPageHowSkippingWorks2": {
"message": "当跳过片段时,您会收到提醒。如果时间不对,请点击差评!您也可以在插件弹窗中投票。"
},
"Submitting": {
"message": "提交中"
},
"helpPageSubmitting1": {
"message": "您可以使用插件弹窗中的“片段现在开始”按钮或播放器中的按钮提交片段。"
},
"helpPageSubmitting2": {
"message": "点击播放按钮标记片段开始,点击停止按钮标记片段结束。您可以一次提交多个片段。点击上传按钮会提交片段。点击垃圾桶按钮会删除片段。"
},
"Editing": {
"message": "正在编辑"
},
"helpPageEditing1": {
"message": "如果您选错了,您可以点击左侧箭头按钮编辑或删除您的片段。"
},
"helpPageTooSlow": {
"message": "太慢了"
},
"helpPageTooSlow1": {
"message": "常用功能支持快捷键。按下分号键“;”标记赞助商广告片段开始和结束,按下撇号“ ”提交。可以在选项中更改按键。如果您使用的不是QWERTY序列键盘您可能需要更改键位绑定。"
},
"helpPageCopyOfDatabase": {
"message": "我可以下载数据库吗?如果你人没了会怎样?"
},
"helpPageCopyOfDatabase1": {
"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": "这是 Youtube 内置的快捷方式。您确定要使用吗?"
},
"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": "选择所在国家/地区"
},
"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": "输入注册码"
},
"unsubmittedSegmentCounts": {
"message": "您在 {1} 中有 {0}",
"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": "视频ID",
"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": "警告:服务器未响应。片段可能已提交,只是由于服务器问题您未收到回应。"
},
"allowScrollingToEdit": {
"message": "允许滚动编辑时间"
}
}

View File

@@ -35,6 +35,9 @@
"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": "為這個提交按讚"
},
@@ -113,6 +116,9 @@
"connectionError": {
"message": "已發生連線錯誤。錯誤碼: "
},
"segmentsStillLoading": {
"message": "片段還在載入..."
},
"clearTimes": {
"message": "清除片段"
},
@@ -122,8 +128,11 @@
"closePopup": {
"message": "關閉彈出視窗"
},
"SubmitTimes": {
"message": "提交分段"
"closeIcon": {
"message": "關閉圖示"
},
"OpenSubmissionMenu": {
"message": "開啟提交選單"
},
"sortSegments": {
"message": "排序片段"
@@ -162,9 +171,6 @@
"clearTimesButton": {
"message": "清除時間"
},
"submitTimesButton": {
"message": "提交時間"
},
"publicStats": {
"message": "這會被公開的統計頁面來展示您的貢獻。查看它"
},
@@ -409,13 +415,13 @@
"message": "在 status.sponsor.ajay.app 檢查伺服器狀態"
},
"changeUserID": {
"message": "匯入/匯出您的使用者 ID"
"message": "匯入/匯出您的密鑰 ID"
},
"whatChangeUserID": {
"message": "密鑰應被保密。它就像是密碼不應與他人分享。若密鑰落入他人手中他人將可以冒充你。若你在尋找你的公開使用者ID點擊彈出視窗上的剪貼簿圖示"
},
"setUserID": {
"message": "設定使用者 ID"
"message": "設定密鑰 ID"
},
"userIDChangeWarning": {
"message": "警告:更改用戶 ID 是永久性的。您確定要這麼做嗎?請務必備份您的舊用戶 ID 來以防萬一。"
@@ -518,7 +524,7 @@
"message": "從檔案載入"
},
"whatExportOptions": {
"message": "這是您全部設定的 JSON 格式。它包含了您的用戶 ID ,所以您一定要謹慎的保管它。"
"message": "這是您全部設定的 JSON 格式。它包含了您的密鑰 ID ,所以您一定要謹慎的保管它。"
},
"setOptions": {
"message": "設定選項"
@@ -682,9 +688,6 @@
"category_filler": {
"message": "離題閒聊/玩笑"
},
"category_filler_description": {
"message": "與影片主要內容無關的填充詞或笑話,但不應包含與前後或背景有關者"
},
"category_filler_short": {
"message": "填充詞"
},
@@ -848,7 +851,7 @@
"message": "未偵測到頻道ID如果您正在使用嵌入式YouTube播放器請移至YouTube網站上觀看本影片。此問題亦有可能是由於YouTube改變了系統架構如果你認為這是造成此問題的原因請留言告訴我們"
},
"invidiousPermissionRefresh": {
"message": "瀏覽器已收回存取第三方網頁 (例如 Invidious) 的權限請點擊下方按鈕以重新給予此權限。"
"message": "瀏覽器已撤銷在 Invidious 和其他第三方網站上運行所需的權限請點擊下方按鈕以重新給予此權限。"
},
"acceptPermission": {
"message": "允許權限"
@@ -926,9 +929,6 @@
"hideForever": {
"message": "永久隱藏"
},
"warningChatInfo": {
"message": "我們注意到你犯下了一些不帶有惡意的常見錯誤"
},
"warningTitle": {
"message": "你收到了一支警告"
},
@@ -1040,6 +1040,12 @@
"hideSegment": {
"message": "隱藏片段"
},
"skipSegment": {
"message": "略過片段"
},
"playChapter": {
"message": "播放章節"
},
"SponsorTimeEditScrollNewFeature": {
"message": "在滑鼠鼠標放在編輯框上時使用滾輪以快速調製時間。Ctrl和Shift可以用於精密調整"
},
@@ -1106,6 +1112,9 @@
"exportSegments": {
"message": "匯出片段"
},
"importSegments": {
"message": "匯入片段"
},
"Import": {
"message": "匯入",
"description": "Button to initiate importing segments. Appears under the textbox where they paste in the data"
@@ -1126,15 +1135,11 @@
"message": "你不能使用優惠"
},
"discountLink": {
"message": "優惠連結 (看粉色的價格)"
"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."
@@ -1154,9 +1159,6 @@
"enterLicenseKey": {
"message": "請輸入授權金鑰"
},
"chaptersPage1": {
"message": "SponsorBlock 僅供有購買授權或在過去有貢獻者使用"
},
"unsubmittedSegmentCounts": {
"message": "你現在在 {1} 上有 {0}",
"description": "Example: You currently have 12 unsubmitted segments on 5 videos"
@@ -1198,7 +1200,7 @@
"description": "Show/hide button for the unsubmitted segments list"
},
"videoID": {
"message": "影片ID",
"message": "影片 ID",
"description": "Header of the unsubmitted segments list"
},
"segmentCount": {
@@ -1211,5 +1213,8 @@
},
"exportSegmentsAsURL": {
"message": "分享連結"
},
"allowScrollingToEdit": {
"message": "允許在編輯時滾動"
}
}

View File

@@ -30,6 +30,10 @@
transform: scaleY(0.625) translateY(-30%) translateY(1.5px);
}
.ytp-big-mode .sponsorTwoTooltips .sponsorCategoryTooltip {
top: 75px !important;
}
.progress-bar-line > #previewbar {
height: 3px;
}
@@ -62,6 +66,11 @@ div:hover > #previewbar.sbNotInvidious {
transform: translateY(-1em) !important;
}
/* Pull up for precise seeking */
.ytp-tooltip.sponsorCategoryTooltipVisible .ytp-tooltip-edu {
transform: translateY(-1em) !important;
}
.ytp-tooltip.sponsorCategoryTooltipVisible.sponsorTwoTooltips {
transform: translateY(-2em) !important;
}
@@ -82,6 +91,11 @@ div:hover > #previewbar.sbNotInvidious {
transform: translateY(2em) !important;
}
/* Pull up for precise seeking */
.ytp-tooltip.sponsorCategoryTooltipVisible.sponsorTwoTooltips .ytp-tooltip-edu {
transform: translateY(-2em) !important;
}
.ytp-big-mode .ytp-tooltip.sponsorCategoryTooltipVisible > .ytp-tooltip-text-wrapper {
transform: translateY(0.5em) !important;
}
@@ -571,6 +585,7 @@ input::-webkit-inner-spin-button {
font-size: 14px;
-moz-appearance: textfield;
appearance: textfield;
}
.sponsorTimeEditInput {
@@ -738,7 +753,7 @@ input::-webkit-inner-spin-button {
}
.sponsorBlockLockedColor {
color: #ffc83d;
color: #ffc83d !important;
}
.sponsorBlockRectangleTooltip {
@@ -768,6 +783,10 @@ input::-webkit-inner-spin-button {
align-items: center;
}
.sponsorBlockCategoryPillTitle {
white-space: nowrap;
}
.categoryPillClose {
display: none;
height: 10px;
@@ -788,3 +807,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

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

@@ -317,12 +317,12 @@ input[type='number'] {
color: grey;
}
.disabled .slider {
.sb-toggle-option.disabled .slider {
cursor: default;
}
/* To hide everything except upsell button */
.disabled td:not(.skipOption), .disabled td.skipOption > :not(.upsellButton) {
.disabled td:not(.skipOption, .categoryExtraOptions), .disabled td.skipOption > :not(.upsellButton) {
opacity: 0.3;
}
@@ -696,4 +696,9 @@ svg {
.upsellButton {
cursor: pointer;
vertical-align: middle;
}
.no-bottom-border {
border: none !important;
padding: 20px 0px 0px 0px !important;
}

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>
@@ -78,7 +77,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 +89,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>
@@ -277,6 +289,18 @@
</label>
</div>
</div>
<div data-type="toggle" data-sync="allowScrollingToEdit">
<div class="switch-container">
<label class="switch">
<input id="allowScrollingToEdit" type="checkbox" checked>
<span class="slider round"></span>
</label>
<label class="switch-label" for="allowScrollingToEdit">
__MSG_allowScrollingToEdit__
</label>
</div>
</div>
<div data-type="toggle" data-sync="audioNotificationOnSkip">
<div class="switch-container">
@@ -430,7 +454,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">
@@ -441,11 +465,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)
@@ -50,37 +251,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
******************************
object-assign
4.1.1 <https://github.com/sindresorhus/object-assign>
The MIT License (MIT)
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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.
******************************
react
17.0.2 <https://github.com/facebook/react>
18.2.0 <https://github.com/facebook/react>
MIT License
Copyright (c) Facebook, Inc. and its affiliates.
@@ -107,7 +281,7 @@ SOFTWARE.
******************************
react-dom
17.0.2 <https://github.com/facebook/react>
18.2.0 <https://github.com/facebook/react>
MIT License
Copyright (c) Facebook, Inc. and its affiliates.
@@ -134,7 +308,7 @@ SOFTWARE.
******************************
scheduler
0.20.2 <https://github.com/facebook/react>
0.23.0 <https://github.com/facebook/react>
MIT License
Copyright (c) Facebook, Inc. and its affiliates.
@@ -156,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

@@ -403,7 +403,7 @@
*/
#mainControls {
margin: 16px;
padding: 8px 12px;
padding: 8px 14px;
text-align: left;
border-radius: 8px;
border: 2px solid var(--sb-grey-bg-color);
@@ -411,10 +411,11 @@
.sponsorStartHint {
display: block;
text-align: left;
padding-top: 3px;
}
/*
* Generic buttons used for "Segment Starts Now" and "Submit Times"
* Generic red buttons used for "Start Segment Now", "Submit Times" etc.
*/
.sbMediumButton {
border: none;
@@ -448,24 +449,23 @@
/*
* Your Work box
*/
.sbYourWorkCols {
.sbYourWorkBox {
margin: 16px;
margin-bottom: 8px;
border-radius: 8px;
border: 2px solid var(--sb-grey-bg-color);
}
.sbYourWorkCols > div {
.sbYourWorkCols {
display: flex;
border-top: 2px solid var(--sb-grey-bg-color);
border-bottom: 2px solid var(--sb-grey-bg-color);
}
.sbStatsSentence {
padding-top: 5px;
padding-bottom: 5px;
padding: 6px 14px;
}
.sbStatsSentence .sbExtraInfo {
.sbExtraInfo {
display: inline-block;
}
@@ -473,37 +473,28 @@
* Increase font size of username input and display
*/
#usernameValue,
#usernameInput,
#sponsorTimesContributionsDisplay {
#usernameInput {
font-size: 16px;
flex: 1 0;
}
#sponsorTimesContributionsDisplay {
font-size: 16px;
}
/*
* Improve alignment of username and submissions
*/
#usernameElement,
#usernameElement > p,
#sponsorTimesContributionsContainer {
display: flex;
flex-direction: column;
justify-content: start;
}
#usernameElement > span,
#sponsorTimesContributionsContainer {
text-align: start;
}
#sponsorTimesContributionsContainer {
margin-left: 8px;
padding-left: 8px;
border-left: 2px solid var(--sb-grey-bg-color);
text-align: left;
}
/*
* Username
*/
#usernameElement {
padding: 8px;
padding: 8px 14px;
min-width: 50%;
width: 100%;
}
#setUsernameContainer {
display: flex;
@@ -549,14 +540,15 @@
width: calc(100% - 68px);
text-overflow: ellipsis;
color: var(--sb-main-fg-color);
background: var(--sb-grey-bg-color);
background-color: var(--sb-grey-bg-color);
}
/*
* Submissions
*/
#sponsorTimesContributionsContainer {
padding: 8px;
padding: 8px 14px;
border-left: 2px solid var(--sb-grey-bg-color);
}
/*
@@ -571,14 +563,13 @@
display: inline-block;
text-decoration: none;
border-radius: 4px;
background: #333;
cursor: pointer;
background-color: #333;
padding: 4px 8px;
font-weight: 500;
margin: 2px 1px;
}
#sbFooter a:hover {
background: #444;
background-color: #444;
}
#sponsorTimesDonateContainer a {

View File

@@ -13,7 +13,7 @@
<div id="sponsorblockPopup" class="sponsorBlockPageBody sb-preload">
<button id="sbCloseButton" title="__MSG_closePopup__" class="sbCloseButton hidden">
<img src="icons/close.png" width="15" height="15">
<img src="icons/close.png" width="15" height="15" alt="Close icon">
</button>
<div id="sbBetaServerWarning" class="hidden" title="__MSG_openOptionsPage__">
@@ -24,7 +24,7 @@
<img src="icons/IconSponsorBlocker256px.png" alt="SponsorBlock" width="40" height="40" id="sponsorBlockPopupLogo">
<p class="u-mZ">SponsorBlock</p>
</header>
<div id="videoInfo">
<!-- Loading text -->
<p id="loadingIndicator" class="u-mZ grey-text">__MSG_noVideoID__</p>
@@ -64,11 +64,11 @@
</div>
</div>
</div>
<!-- Toggle Box -->
<div class="sbControlsMenu">
<label id="whitelistButton" for="whitelistToggle" class="hidden sbControlsMenu-item">
<input type="checkbox" style="display:none;" id="whitelistToggle">
<input type="checkbox" style="display: none" id="whitelistToggle">
<svg viewBox="0 0 24 24" width="23" height="23" class="SBWhitelistIcon sbControlsMenu-itemIcon">
<path d="M24 10H14V0h-4v10H0v4h10v10h4V14h10z" />
</svg>
@@ -78,7 +78,7 @@
<!--github: mbledkowski/toggle-switch-->
<label id="disableExtension" for="toggleSwitch" class="toggleSwitchContainer sbControlsMenu-item">
<span class="toggleSwitchContainer-switch">
<input type="checkbox" style="display:none;" id="toggleSwitch" checked>
<input type="checkbox" style="display: none" id="toggleSwitch" checked>
<span class="switchBg shadow"></span>
<span class="switchBg white"></span>
<span class="switchBg green"></span>
@@ -99,29 +99,29 @@
<!-- Submit box -->
<div id="mainControls" style="display: none">
<p class="sbHeader">
<h1 class="sbHeader">
__MSG_recordTimesDescription__
</p>
</h1>
<sub class="sponsorStartHint grey-text">__MSG_popupHint__</sub>
<div align="center" style="margin: 8px 0;">
<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>
<span id="submissionHint" style="display: none">__MSG_submissionEditHint__</span>
</div>
<!-- Your Work box -->
<div class="sbYourWorkCols">
<p class="sbHeader" style="padding: 8px 16px;">
<div class="sbYourWorkBox">
<h1 class="sbHeader" style="padding: 8px 15px;">
__MSG_yourWork__
</p>
<div>
</h1>
<div class="sbYourWorkCols">
<!-- Username -->
<div id="usernameElement">
<span class="u-mZ grey-text">__MSG_Username__:
<p class="u-mZ grey-text">__MSG_Username__:
<!-- loading/errors -->
<span id="setUsernameStatus" class="u-mZ white-text" style="display: none"></span>
</span>
</p>
<div id="setUsernameContainer">
<p id="usernameValue"></p>
<button id="setUsernameButton" title="__MSG_setUsername__">
@@ -141,7 +141,7 @@
<!-- Submissions -->
<div id="sponsorTimesContributionsContainer" class="hidden">
<p class="u-mZ grey-text">__MSG_Submissions__:</p>
<span id="sponsorTimesContributionsDisplay">0</span>
<p id="sponsorTimesContributionsDisplay" class="u-mZ">0</p>
</div>
</div>
@@ -184,7 +184,7 @@
<a id="sbConsiderDonateLink" href="https://sponsor.ajay.app/donate" target="_blank" rel="noopener">
__MSG_considerDonating__
</a>
<img id="sbCloseDonate" src="/icons/close.png" alt="Close icon" height="8" style="padding-left: 5px; cursor: pointer;" />
<img id="sbCloseDonate" src="/icons/close.png" alt="__MSG_closeIcon__" height="8" style="padding-left: 5px; cursor: pointer;" />
</div>
<footer id="sbFooter">
@@ -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,16 @@ 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";
const utils = new Utils({
registerFirefoxContentScript,
unregisterFirefoxContentScript
@@ -20,74 +23,33 @@ 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) {
case "openConfig":
chrome.tabs.create({url: chrome.runtime.getURL('options/options.html' + (request.hash ? '#' + request.hash : ''))});
return;
return false;
case "openHelp":
chrome.tabs.create({url: chrome.runtime.getURL('help/index.html')});
return;
case "openUpsell":
chrome.tabs.create({url: chrome.runtime.getURL('upsell/index.html')});
return;
return false;
case "openPage":
chrome.tabs.create({url: chrome.runtime.getURL(request.url)});
return;
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;
return false;
case "submitVote":
submitVote(request.type, request.UUID, request.category).then(callback);
//this allows the callback to be called later
return true;
case "registerContentScript":
case "registerContentScript":
registerFirefoxContentScript(request);
return false;
case "unregisterContentScript":
case "unregisterContentScript":
unregisterFirefoxContentScript(request.id)
return false;
case "tabs": {
@@ -106,10 +68,14 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
return true;
}
case "time":
case "infoUpdated":
case "videoChanged":
if (sender.tab) {
popupPort[sender.tab.id]?.postMessage(request);
}
return false;
default:
return false;
}
});
@@ -137,7 +103,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;
@@ -156,14 +122,14 @@ chrome.runtime.onInstalled.addListener(function () {
/**
* Only works on Firefox.
* Firefox requires that it be applied after every extension restart.
*
* @param {JSON} options
*
* @param {JSON} options
*/
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,
@@ -174,11 +140,13 @@ function registerFirefoxContentScript(options: Registration) {
/**
* Only works on Firefox.
* Firefox requires that this is handled by the background script
*
*
*/
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) {
@@ -186,7 +154,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;
}
@@ -217,35 +185,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

@@ -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,8 +104,8 @@ 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) {
@@ -115,41 +115,29 @@ class CategoryPillComponent extends React.Component<CategoryPillProps, CategoryP
}
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 {
const tooltipMount = document.querySelector("ytd-video-primary-info-renderer > #container") as HTMLElement;
const tooltipMount = document.querySelector("#above-the-fold") as HTMLElement;
if (tooltipMount) {
this.tooltip = new Tooltip({
text: this.getTitleText(),
referenceNode: tooltipMount,
bottomOffset: "70px",
bottomOffset: "0px",
opacity: 0.95,
displayTriangle: false,
showLogo: false,
showGotIt: false
showGotIt: false,
prependElement: tooltipMount.firstElementChild as HTMLElement
});
}
}

View File

@@ -8,41 +8,42 @@ enum CountdownMode {
}
export interface NoticeProps {
noticeTitle: string,
noticeTitle: string;
maxCountdownTime?: () => number,
dontPauseCountdown?: boolean,
amountOfPreviousNotices?: number,
showInSecondSlot?: boolean,
timed?: boolean,
idSuffix?: string,
maxCountdownTime?: () => number;
dontPauseCountdown?: boolean;
amountOfPreviousNotices?: number;
showInSecondSlot?: boolean;
timed?: boolean;
idSuffix?: string;
fadeIn?: boolean,
startFaded?: boolean,
firstColumn?: React.ReactElement[] | React.ReactElement,
firstRow?: React.ReactElement,
bottomRow?: React.ReactElement[],
fadeIn?: boolean;
startFaded?: boolean;
firstColumn?: React.ReactElement[] | React.ReactElement;
firstRow?: React.ReactElement;
bottomRow?: React.ReactElement[];
smaller?: boolean,
limitWidth?: boolean,
extraClass?: string,
hideLogo?: boolean,
hideRightInfo?: boolean,
smaller?: boolean;
limitWidth?: boolean;
extraClass?: string;
hideLogo?: boolean;
hideRightInfo?: boolean;
// Callback for when this is closed
closeListener: () => void,
onMouseEnter?: (e: React.MouseEvent<HTMLElement, MouseEvent>) => void,
closeListener: () => void;
onMouseEnter?: (e: React.MouseEvent<HTMLElement, MouseEvent>) => void;
zIndex?: number,
style?: React.CSSProperties
zIndex?: number;
style?: React.CSSProperties;
biggerCloseButton?: boolean;
children?: React.ReactNode;
}
export interface NoticeState {
maxCountdownTime: () => number,
maxCountdownTime: () => number;
countdownTime: number,
countdownMode: CountdownMode,
countdownTime: number;
countdownMode: CountdownMode;
mouseHovering: boolean;

View File

@@ -1,10 +1,11 @@
import * as React from "react";
export interface NoticeTextSelectionProps {
icon?: string,
text: string,
idSuffix: string,
onClick?: (event: React.MouseEvent) => unknown
icon?: string;
text: string;
idSuffix: string;
onClick?: (event: React.MouseEvent) => unknown;
children?: React.ReactNode;
}
export interface NoticeTextSelectionState {

View File

@@ -8,6 +8,8 @@ export interface SelectorProps {
id: string;
options: SelectorOption[];
onChange: (value: string) => void;
onMouseEnter?: () => void;
onMouseLeave?: () => void;
}
export interface SelectorState {
@@ -30,7 +32,9 @@ class SelectorComponent extends React.Component<SelectorProps, SelectorState> {
<div id={this.props.id}
style={{display: this.props.options.length > 0 ? "inherit" : "none"}}
className="sbSelector">
<div className="sbSelectorBackground">
<div onMouseEnter={this.props.onMouseEnter}
onMouseLeave={this.props.onMouseLeave}
className="sbSelectorBackground">
{this.getOptions()}
</div>
</div>

View File

@@ -13,7 +13,7 @@ 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";
enum SkipButtonState {
Undo, // Unskip
@@ -373,6 +373,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
</span>
);
}
return null;
}
getSubmissionChooser(): JSX.Element[] {
@@ -541,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,23 +6,22 @@ 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();
export interface SponsorTimeEditProps {
index: number,
index: number;
idSuffix: string,
idSuffix: string;
// Contains functions and variables from the content script needed by the skip notice
contentContainer: ContentContainer,
contentContainer: ContentContainer;
submissionNotice: SubmissionNoticeComponent;
categoryList?: Category[];
categoryChangeListener?: (index: number, category: Category) => void;
children?: React.ReactNode;
}
export interface SponsorTimeEditState {
@@ -32,6 +31,7 @@ export interface SponsorTimeEditState {
description: string;
suggestedNames: SelectorOption[];
chapterNameSelectorOpen: boolean;
chapterNameSelectorHovering: boolean;
}
const categoryNamesGrams: string[] = [].concat(...CompileConfig.categoryList.filter((name) => name !== "chapter")
@@ -73,7 +73,8 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
selectedCategory: DEFAULT_CATEGORY as Category,
description: sponsorTime.description || "",
suggestedNames: [],
chapterNameSelectorOpen: false
chapterNameSelectorOpen: false,
chapterNameSelectorHovering: false
};
}
@@ -178,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>
);
}
@@ -230,7 +231,7 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
{/* Chapter Name */}
{sponsorTime.actionType === ActionType.Chapter ? (
<div>
<div onBlur={() => this.setState({chapterNameSelectorOpen: false})}>
<input id={"chapterName" + this.idSuffix}
className="sponsorTimeEdit sponsorTimeEditInput sponsorChapterNameInput"
style={{color: "inherit", backgroundColor: "inherit"}}
@@ -239,13 +240,15 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
value={this.state.description}
onContextMenu={(e) => e.stopPropagation()}
onChange={(e) => this.descriptionUpdate(e.target.value)}
onBlur={() => this.setState({chapterNameSelectorOpen: false})}
onFocus={() => this.setState({chapterNameSelectorOpen: true})}>
</input>
{this.state.chapterNameSelectorOpen && this.state.description &&
{this.state.description
&& (this.state.chapterNameSelectorOpen || this.state.chapterNameSelectorHovering) &&
<SelectorComponent
id={"chapterNameSelector" + this.idSuffix}
options={this.state.suggestedNames}
onMouseEnter={() => this.setState({chapterNameSelectorHovering: true})}
onMouseLeave={() => this.setState({chapterNameSelectorHovering: false})}
onChange={(v) => this.descriptionUpdate(v)}
/>
}
@@ -262,12 +265,12 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
{chrome.i18n.getMessage("delete")}
</span>
{(!isNaN(segment[1]) && ![ActionType.Poi, ActionType.Full].includes(sponsorTime.actionType)) ? (
{(!isNaN(segment[1]) && ![ActionType.Poi, ActionType.Full].includes(sponsorTime.actionType))
&& sponsorTime.actionType !== ActionType.Chapter ? (
<span id={"sponsorTimePreviewButton" + this.idSuffix}
className="sponsorTimeEditButton"
onClick={(e) => this.previewTime(e.ctrlKey, e.shiftKey)}>
{sponsorTime.actionType !== ActionType.Chapter ? chrome.i18n.getMessage("preview")
: chrome.i18n.getMessage("End")}
{chrome.i18n.getMessage("preview")}
</span>
): ""}
@@ -279,6 +282,15 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
</span>
): ""}
{(!isNaN(segment[1]) && ![ActionType.Poi, ActionType.Full].includes(sponsorTime.actionType))
&& sponsorTime.actionType === ActionType.Chapter ? (
<span id={"sponsorTimePreviewButton" + this.idSuffix}
className="sponsorTimeEditButton"
onClick={(e) => this.previewTime(e.ctrlKey, e.shiftKey)}>
{chrome.i18n.getMessage("End")}
</span>
): ""}
{(!isNaN(segment[1]) && sponsorTime.actionType != ActionType.Full) ? (
<span id={"sponsorTimeEditButton" + this.idSuffix}
className="sponsorTimeEditButton"
@@ -294,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();
@@ -306,6 +318,7 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
}
changeTimesWhenScrolling(index: number, e: React.WheelEvent, sponsorTime: SponsorTime): void {
if (!Config.config.allowScrollingToEdit) return;
let step = 0;
// shift + ctrl = 1
// ctrl = 0.1
@@ -318,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;
@@ -328,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});
@@ -406,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;
@@ -527,9 +540,14 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
const sponsorTime = this.props.contentContainer().sponsorTimesSubmitting[this.props.index];
if (time === null) time = sponsorTime.segment[0];
const addedTime = sponsorTime.segment.length === 1;
sponsorTime.segment[index] = time;
if (sponsorTime.actionType === ActionType.Poi) sponsorTime.segment[1] = time;
if (addedTime) {
this.props.contentContainer().updateEditButtonsOnPlayer();
}
this.setState({
sponsorTimeEdits: this.getFormattedSponsorTimesEdits(sponsorTime)
}, () => this.saveEditTimes());
@@ -555,24 +573,32 @@ 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 {
const sponsorTimesSubmitting = this.props.contentContainer().sponsorTimesSubmitting;
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) {
const addingTime = sponsorTimesSubmitting[this.props.index].segment.length === 1;
sponsorTimesSubmitting[this.props.index].segment = [startTime, endTime];
if (addingTime) {
this.props.contentContainer().updateEditButtonsOnPlayer();
}
}
} else if (this.state.sponsorTimeEdits[1] === null && category === "outro" && !sponsorTimesSubmitting[this.props.index].segment[1]) {
sponsorTimesSubmitting[this.props.index].segment[1] = this.props.contentContainer().v.duration;
this.props.contentContainer().updateEditButtonsOnPlayer();
}
const category = this.categoryOptionRef.current.value as Category
sponsorTimesSubmitting[this.props.index].category = category;
const actionType = this.getNextActionType(category, this.actionTypeOptionRef?.current?.value as ActionType);

View File

@@ -20,8 +20,8 @@ export interface SubmissionNoticeProps {
}
export interface SubmissionNoticeState {
noticeTitle: string,
messages: string[],
noticeTitle: string;
messages: string[];
idSuffix: string;
}

View File

@@ -5,20 +5,24 @@ import * as CompileConfig from "../../../config.json";
import { Category, CategorySkipOption } from "../../types";
import { getCategorySuffix } from "../../utils/categoryUtils";
import ToggleOptionComponent, { ToggleOptionProps } from "./ToggleOptionComponent";
import { fetchingChaptersAllowed } from "../../utils/licenseKey";
import LockSvg from "../../svg-icons/lock_svg";
import ToggleOptionComponent from "./ToggleOptionComponent";
export interface CategorySkipOptionsProps {
category: Category;
defaultColor?: string;
defaultPreviewColor?: string;
children?: React.ReactNode;
}
export interface CategorySkipOptionsState {
color: string;
previewColor: string;
hideChapter: boolean;
}
export interface ToggleOption {
configKey: string;
label: string;
dontDisable?: boolean;
}
class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsProps, CategorySkipOptionsState> {
@@ -30,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) {
@@ -73,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)}
@@ -97,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" &&
@@ -113,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>
@@ -133,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")}
@@ -144,7 +114,7 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
</td>
</tr>
{this.getExtraOptionComponents(this.props.category, extraClasses, disabled)}
{this.getExtraOptionComponents(this.props.category)}
</>
);
@@ -228,16 +198,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={disabled}
style={{width: "inherit"}}
/>
</td>
@@ -248,12 +217,17 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
return result;
}
getExtraOptions(category: string): ToggleOptionProps[] {
getExtraOptions(category: string): ToggleOption[] {
switch (category) {
case "chapter":
return [{
configKey: "renderSegmentsAsChapters",
label: chrome.i18n.getMessage("renderAsChapters"),
dontDisable: true
}, {
configKey: "showSegmentNameInChapterBar",
label: chrome.i18n.getMessage("showSegmentNameInChapterBar"),
dontDisable: true
}];
case "music_offtopic":
return [{

View File

@@ -1,5 +1,5 @@
import * as React from "react";
import * as ReactDOM from "react-dom";
import { createRoot, Root } from 'react-dom/client';
import Config from "../../config";
import { Keybind } from "../../types";
import KeybindDialogComponent from "./KeybindDialogComponent";
@@ -14,6 +14,7 @@ export interface KeybindState {
}
let dialog;
let root: Root;
class KeybindComponent extends React.Component<KeybindProps, KeybindState> {
constructor(props: KeybindProps) {
@@ -56,11 +57,12 @@ class KeybindComponent extends React.Component<KeybindProps, KeybindState> {
dialog = parent.document.createElement("div");
dialog.id = "keybind-dialog";
parent.document.body.prepend(dialog);
ReactDOM.render(<KeybindDialogComponent option={this.props.option} closeListener={(updateWith) => this.closeEditDialog(updateWith)} />, dialog);
root = createRoot(dialog);
root.render(<KeybindDialogComponent option={this.props.option} closeListener={(updateWith) => this.closeEditDialog(updateWith)} />);
}
closeEditDialog(updateWith: Keybind): void {
ReactDOM.unmountComponentAtNode(dialog);
root.unmount();
dialog.remove();
if (updateWith != null)
this.setState({keybind: updateWith});

View File

@@ -124,7 +124,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

@@ -26,7 +26,7 @@ class ToggleOptionComponent extends React.Component<ToggleOptionProps, ToggleOpt
render(): React.ReactElement {
return (
<div>
<div className={`sb-toggle-option ${this.props.disabled ? "disabled" : ""}`}>
<div className="switch-container" style={this.props.style}>
<label className="switch">
<input id={this.props.configKey}

View File

@@ -5,6 +5,7 @@ import { exportTimes, exportTimesAsHashParam } from "../../utils/exporter";
export interface UnsubmittedVideosListItemProps {
videoID: string;
children?: React.ReactNode;
}
export interface UnsubmittedVideosListItemState {

View File

@@ -7,7 +7,7 @@ export interface UnsubmittedVideosProps {
}
export interface UnsubmittedVideosState {
tableVisible: boolean,
tableVisible: boolean;
}
class UnsubmittedVideosComponent extends React.Component<UnsubmittedVideosProps, UnsubmittedVideosState> {

View File

@@ -1,457 +1,163 @@
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 { Category, CategorySelection, CategorySkipOption, NoticeVisbilityMode, PreviewBarOption, SponsorTime, Keybind, VideoID, SponsorHideType } from "./types";
import { keybindEquals } from "./utils/configUtils";
import { ProtoConfig } from "@ajayyy/maze-utils/lib/config";
import { HashedValue } from "@ajayyy/maze-utils/lib/hash";
export interface Permission {
canSubmit: boolean;
}
interface SBConfig {
userID: string,
isVip: boolean,
permissions: Record<Category, Permission>,
userID: string;
isVip: boolean;
permissions: Record<Category, Permission>;
/* Contains unsubmitted segments that the user has created. */
unsubmittedSegments: Record<string, SponsorTime[]>,
defaultCategory: Category,
renderSegmentsAsChapters: boolean,
whitelistedChannels: string[],
forceChannelCheck: boolean,
minutesSaved: number,
skipCount: number,
sponsorTimesContributed: number,
submissionCountSinceCategories: number, // New count used to show the "Read The Guidelines!!" message
showTimeWithSkips: boolean,
disableSkipping: boolean,
muteSegments: boolean,
fullVideoSegments: boolean,
manualSkipOnFullVideo: boolean,
trackViewCount: boolean,
trackViewCountInPrivate: boolean,
trackDownvotes: boolean,
dontShowNotice: boolean,
noticeVisibilityMode: NoticeVisbilityMode,
hideVideoPlayerControls: boolean,
hideInfoButtonPlayerControls: boolean,
hideDeleteButtonPlayerControls: boolean,
hideUploadButtonPlayerControls: boolean,
hideSkipButtonPlayerControls: boolean,
hideDiscordLaunches: number,
hideDiscordLink: boolean,
invidiousInstances: string[],
supportInvidious: boolean,
serverAddress: string,
minDuration: number,
skipNoticeDuration: number,
audioNotificationOnSkip: boolean,
checkForUnlistedVideos: boolean,
testingServer: boolean,
refetchWhenNotFound: boolean,
ytInfoPermissionGranted: boolean,
allowExpirements: boolean,
showDonationLink: boolean,
showPopupDonationCount: number,
showUpsells: boolean,
donateClicked: number,
autoHideInfoButton: boolean,
autoSkipOnMusicVideos: boolean,
unsubmittedSegments: Record<string, SponsorTime[]>;
defaultCategory: Category;
renderSegmentsAsChapters: boolean;
whitelistedChannels: string[];
forceChannelCheck: boolean;
minutesSaved: number;
skipCount: number;
sponsorTimesContributed: number;
submissionCountSinceCategories: number; // New count used to show the "Read The Guidelines!!" message
showTimeWithSkips: boolean;
disableSkipping: boolean;
muteSegments: boolean;
fullVideoSegments: boolean;
fullVideoLabelsOnThumbnails: boolean;
manualSkipOnFullVideo: boolean;
trackViewCount: boolean;
trackViewCountInPrivate: boolean;
trackDownvotes: boolean;
dontShowNotice: boolean;
noticeVisibilityMode: NoticeVisbilityMode;
hideVideoPlayerControls: boolean;
hideInfoButtonPlayerControls: boolean;
hideDeleteButtonPlayerControls: boolean;
hideUploadButtonPlayerControls: boolean;
hideSkipButtonPlayerControls: boolean;
hideDiscordLaunches: number;
hideDiscordLink: boolean;
invidiousInstances: string[];
supportInvidious: boolean;
serverAddress: string;
minDuration: number;
skipNoticeDuration: number;
audioNotificationOnSkip: boolean;
checkForUnlistedVideos: boolean;
testingServer: boolean;
refetchWhenNotFound: boolean;
ytInfoPermissionGranted: boolean;
allowExpirements: boolean;
showDonationLink: boolean;
showPopupDonationCount: number;
showUpsells: boolean;
donateClicked: number;
autoHideInfoButton: boolean;
autoSkipOnMusicVideos: boolean;
colorPalette: {
red: string,
white: string,
locked: string
},
scrollToEditTimeUpdate: boolean,
categoryPillUpdate: boolean,
showChapterInfoMessage: boolean,
darkMode: boolean,
showCategoryGuidelines: boolean,
showCategoryWithoutPermission: boolean,
red: string;
white: string;
locked: string;
};
scrollToEditTimeUpdate: boolean;
categoryPillUpdate: boolean;
showChapterInfoMessage: boolean;
darkMode: boolean;
showCategoryGuidelines: boolean;
showCategoryWithoutPermission: boolean;
showSegmentNameInChapterBar: boolean;
useVirtualTime: boolean;
showSegmentFailedToFetchWarning: boolean;
allowScrollingToEdit: boolean;
// Used to cache calculated text color info
categoryPillColors: {
[key in Category]: {
lastColor: string,
textColor: string
lastColor: string;
textColor: string;
}
}
};
skipKeybind: Keybind,
startSponsorKeybind: Keybind,
submitKeybind: Keybind,
nextChapterKeybind: Keybind,
previousChapterKeybind: Keybind,
skipKeybind: Keybind;
startSponsorKeybind: Keybind;
submitKeybind: Keybind;
nextChapterKeybind: Keybind;
previousChapterKeybind: Keybind;
// What categories should be skipped
categorySelections: CategorySelection[],
categorySelections: CategorySelection[];
payments: {
licenseKey: string,
lastCheck: number,
freeAccess: boolean,
chaptersAllowed: boolean
}
licenseKey: string;
lastCheck: number;
lastFreeCheck: number;
freeAccess: boolean;
chaptersAllowed: boolean;
};
// Preview bar
barTypes: {
"preview-chooseACategory": PreviewBarOption,
"sponsor": PreviewBarOption,
"preview-sponsor": PreviewBarOption,
"selfpromo": PreviewBarOption,
"preview-selfpromo": PreviewBarOption,
"exclusive_access": PreviewBarOption,
"interaction": PreviewBarOption,
"preview-interaction": PreviewBarOption,
"intro": PreviewBarOption,
"preview-intro": PreviewBarOption,
"outro": PreviewBarOption,
"preview-outro": PreviewBarOption,
"preview": PreviewBarOption,
"preview-preview": PreviewBarOption,
"music_offtopic": PreviewBarOption,
"preview-music_offtopic": PreviewBarOption,
"poi_highlight": PreviewBarOption,
"preview-poi_highlight": PreviewBarOption,
"filler": PreviewBarOption,
"preview-filler": PreviewBarOption,
}
"preview-chooseACategory": PreviewBarOption;
"sponsor": PreviewBarOption;
"preview-sponsor": PreviewBarOption;
"selfpromo": PreviewBarOption;
"preview-selfpromo": PreviewBarOption;
"exclusive_access": PreviewBarOption;
"interaction": PreviewBarOption;
"preview-interaction": PreviewBarOption;
"intro": PreviewBarOption;
"preview-intro": PreviewBarOption;
"outro": PreviewBarOption;
"preview-outro": PreviewBarOption;
"preview": PreviewBarOption;
"preview-preview": PreviewBarOption;
"music_offtopic": PreviewBarOption;
"preview-music_offtopic": PreviewBarOption;
"poi_highlight": PreviewBarOption;
"preview-poi_highlight": PreviewBarOption;
"filler": PreviewBarOption;
"preview-filler": PreviewBarOption;
};
}
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 */
downvotedSegments: Record<VideoID & HashedValue, VideoDownvotes>,
navigationApiAvailable: boolean,
downvotedSegments: Record<VideoID & HashedValue, VideoDownvotes>;
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,
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,
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"]) {
@@ -461,15 +167,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) {
@@ -490,7 +189,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;
@@ -509,20 +208,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;
@@ -540,59 +239,206 @@ 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,
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,
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;

File diff suppressed because it is too large Load Diff

View File

@@ -1,93 +1,3 @@
/*
Content script are run in an isolated DOM so it is not possible to access some key details that are sanitized when passed cross-dom
This script is used to get the details from the page and make them available for the content script by being injected directly into the page
*/
import { init } from "@ajayyy/maze-utils/lib/injected/document";
import { PageType } from "./types";
interface StartMessage {
type: "navigation",
pageType: PageType
videoID: string | null,
}
interface FinishMessage extends StartMessage {
channelID: string,
channelTitle: string
}
interface AdMessage {
type: "ad",
playing: boolean
}
interface VideoData {
type: "data",
videoID: string,
isLive: boolean,
isPremiere: boolean
}
type WindowMessage = StartMessage | FinishMessage | AdMessage | VideoData;
// global playerClient - too difficult to type
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let playerClient: any;
const sendMessage = (message: WindowMessage): void => {
window.postMessage({ source: "sponsorblock", ...message }, "/");
}
function setupPlayerClient(e: CustomEvent): void {
if (playerClient) return; // early exit if already defined
playerClient = e.detail;
sendVideoData(); // send playerData after setup
e.detail.addEventListener('onAdStart', () => sendMessage({ type: "ad", playing: true } as AdMessage));
e.detail.addEventListener('onAdFinish', () => sendMessage({ type: "ad", playing: false } as AdMessage));
}
document.addEventListener("yt-player-updated", setupPlayerClient);
document.addEventListener("yt-navigate-start", navigationStartSend);
document.addEventListener("yt-navigate-finish", navigateFinishSend);
function navigationParser(event: CustomEvent): StartMessage {
const pageType: PageType = event.detail.pageType;
if (pageType) {
const result: StartMessage = { type: "navigation", pageType, videoID: null };
if (pageType === "shorts" || pageType === "watch") {
const endpoint = event.detail.endpoint
if (!endpoint) return null;
result.videoID = (pageType === "shorts" ? endpoint.reelWatchEndpoint : endpoint.watchEndpoint).videoId;
}
return result;
} else {
return null;
}
}
function navigationStartSend(event: CustomEvent): void {
const message = navigationParser(event) as StartMessage;
if (message) {
sendMessage(message);
}
}
function navigateFinishSend(event: CustomEvent): void {
sendVideoData(); // arrived at new video, send video data
const videoDetails = event.detail?.response?.playerResponse?.videoDetails;
if (videoDetails) {
sendMessage({ channelID: videoDetails.channelId, channelTitle: videoDetails.author, ...navigationParser(event) } as FinishMessage);
}
}
function sendVideoData(): void {
if (!playerClient) return;
const videoData = playerClient.getVideoData();
if (videoData) {
sendMessage({ type: "data", videoID: videoData.video_id, isLive: videoData.isLive, isPremiere: videoData.isPremiere } as VideoData);
}
}
init();

2
src/globals.d.ts vendored
View File

@@ -1,6 +1,6 @@
import { SBObject } from "./config";
declare global {
interface Window { SB: SBObject; }
interface Window { SB: SBObject }
// Remove this once the API becomes stable and types are shipped in @types/chrome
namespace chrome {
namespace declarativeContent {

View File

@@ -2,14 +2,14 @@ import Config from "./config";
import { showDonationLink } from "./utils/configUtils";
import { localizeHtmlPage } from "./utils/pageUtils";
import { GenericUtils } from "./utils/genericUtils";
import { waitFor } from "@ajayyy/maze-utils";
window.addEventListener('DOMContentLoaded', init);
async function init() {
localizeHtmlPage();
await GenericUtils.wait(() => Config.config !== null);
await waitFor(() => Config.config !== null);
if (!Config.config.darkMode) {
document.documentElement.setAttribute("data-theme", "light");

View File

@@ -10,8 +10,9 @@ import { ChapterVote } from "../render/ChapterVote";
import { ActionType, Category, SegmentContainer, SponsorHideType, SponsorSourceType, SponsorTime } from "../types";
import { partition } from "../utils/arrayUtils";
import { DEFAULT_CATEGORY, shortCategoryName } from "../utils/categoryUtils";
import { GenericUtils } from "../utils/genericUtils";
import { findValidElement } from "../utils/pageUtils";
import { normalizeChapterName } from "../utils/exporter";
import { getFormattedTimeToSeconds } from "@ajayyy/maze-utils/lib/formating";
import { findValidElement } from "@ajayyy/maze-utils/lib/dom";
const TOOLTIP_VISIBLE_CLASS = 'sponsorCategoryTooltipVisible';
const MIN_CHAPTER_SIZE = 0.003;
@@ -37,6 +38,10 @@ class PreviewBar {
categoryTooltip?: HTMLDivElement;
categoryTooltipContainer?: HTMLElement;
chapterTooltip?: HTMLDivElement;
lastSmallestSegment: Record<string, {
index: number;
segment: PreviewBarSegment;
}> = {};
parent: HTMLElement;
onMobileYouTube: boolean;
@@ -46,6 +51,8 @@ class PreviewBar {
segments: PreviewBarSegment[] = [];
existingChapters: PreviewBarSegment[] = [];
videoDuration = 0;
updateExistingChapters: () => void;
lastChapterUpdate = 0;
// For chapter bar
hoveredSection: HTMLElement;
@@ -55,10 +62,11 @@ class PreviewBar {
originalChapterBar: HTMLElement;
originalChapterBarBlocks: NodeListOf<HTMLElement>;
chapterMargin: number;
lastRenderedSegments: PreviewBarSegment[];
unfilteredChapterGroups: ChapterGroup[];
chapterGroups: ChapterGroup[];
constructor(parent: HTMLElement, onMobileYouTube: boolean, onInvidious: boolean, chapterVote: ChapterVote, test=false) {
constructor(parent: HTMLElement, onMobileYouTube: boolean, onInvidious: boolean, chapterVote: ChapterVote, updateExistingChapters: () => void, test=false) {
if (test) return;
this.container = document.createElement('ul');
this.container.id = 'previewbar';
@@ -67,6 +75,7 @@ class PreviewBar {
this.onMobileYouTube = onMobileYouTube;
this.onInvidious = onInvidious;
this.chapterVote = chapterVote;
this.updateExistingChapters = updateExistingChapters;
this.updatePageElements();
this.createElement(parent);
@@ -89,6 +98,7 @@ class PreviewBar {
this.chapterTooltip.className = "ytp-tooltip-title sponsorCategoryTooltip";
const tooltipTextWrapper = document.querySelector(".ytp-tooltip-text-wrapper");
const originalTooltip = tooltipTextWrapper.querySelector(".ytp-tooltip-title:not(.sponsorCategoryTooltip)") as HTMLElement;
if (!tooltipTextWrapper || !tooltipTextWrapper.parentElement) return;
// Grab the tooltip from the text wrapper as the tooltip doesn't have its classes on init
@@ -115,8 +125,8 @@ class PreviewBar {
const observer = new MutationObserver((mutations) => {
if (!mouseOnSeekBar || !this.categoryTooltip || !this.categoryTooltipContainer) return;
// If the mutation observed is only for our tooltip text, ignore
if (mutations.some((mutation) => (mutation.target as HTMLElement).classList.contains("sponsorCategoryTooltip"))) {
// Only care about mutations to time tooltip
if (!mutations.some((mutation) => (mutation.target as HTMLElement).classList.contains("ytp-tooltip-text"))) {
return;
}
@@ -130,19 +140,23 @@ class PreviewBar {
const tooltipText = tooltipTextElement.textContent;
if (tooltipText === null || tooltipText.length === 0) continue;
timeInSeconds = GenericUtils.getFormattedTimeToSeconds(tooltipText);
timeInSeconds = getFormattedTimeToSeconds(tooltipText);
if (timeInSeconds !== null) break;
}
if (timeInSeconds === null) return;
if (timeInSeconds === null) {
originalTooltip.style.removeProperty("display");
return;
}
// Find the segment at that location, using the shortest if multiple found
const [normalSegments, chapterSegments] =
partition(this.segments.filter((s) => s.source !== SponsorSourceType.YouTube),
const [normalSegments, chapterSegments] =
partition(this.segments.filter((s) => s.source !== SponsorSourceType.YouTube),
(segment) => segment.actionType !== ActionType.Chapter);
let mainSegment = this.getSmallestSegment(timeInSeconds, normalSegments);
let secondarySegment = this.getSmallestSegment(timeInSeconds, chapterSegments);
let mainSegment = this.getSmallestSegment(timeInSeconds, normalSegments, "normal");
let secondarySegment = this.getSmallestSegment(timeInSeconds, chapterSegments, "chapter");
if (mainSegment === null && secondarySegment !== null) {
mainSegment = secondarySegment;
secondarySegment = this.getSmallestSegment(timeInSeconds, chapterSegments.filter((s) => s !== secondarySegment));
@@ -150,6 +164,7 @@ class PreviewBar {
if (mainSegment === null && secondarySegment === null) {
this.categoryTooltipContainer.classList.remove(TOOLTIP_VISIBLE_CLASS);
originalTooltip.style.removeProperty("display");
} else {
this.categoryTooltipContainer.classList.add(TOOLTIP_VISIBLE_CLASS);
if (mainSegment !== null && secondarySegment !== null) {
@@ -161,6 +176,14 @@ class PreviewBar {
this.setTooltipTitle(mainSegment, this.categoryTooltip);
this.setTooltipTitle(secondarySegment, this.chapterTooltip);
if (normalizeChapterName(originalTooltip.textContent) === normalizeChapterName(this.categoryTooltip.textContent)
|| normalizeChapterName(originalTooltip.textContent) === normalizeChapterName(this.chapterTooltip.textContent)) {
if (originalTooltip.style.display !== "none") originalTooltip.style.display = "none";
noYoutubeChapters = true;
} else if (originalTooltip.style.display === "none") {
originalTooltip.style.removeProperty("display");
}
// Used to prevent overlapping
this.categoryTooltip.classList.toggle("ytp-tooltip-text-no-title", noYoutubeChapters);
this.chapterTooltip.classList.toggle("ytp-tooltip-text-no-title", noYoutubeChapters);
@@ -168,6 +191,8 @@ class PreviewBar {
// To prevent offset issue
this.categoryTooltip.style.right = titleTooltip.style.right;
this.chapterTooltip.style.right = titleTooltip.style.right;
this.categoryTooltip.style.textAlign = titleTooltip.style.textAlign;
this.chapterTooltip.style.textAlign = titleTooltip.style.textAlign;
}
});
@@ -214,6 +239,16 @@ class PreviewBar {
while (this.container.firstChild) {
this.container.removeChild(this.container.firstChild);
}
if (this.customChaptersBar) this.customChaptersBar.style.display = "none";
this.originalChapterBar?.style?.removeProperty("display");
this.chapterVote?.setVisibility(false);
document.querySelectorAll(`.sponsorBlockChapterBar`).forEach((e) => {
if (e !== this.customChaptersBar) {
e.remove();
}
});
}
set(segments: PreviewBarSegment[], videoDuration: number): void {
@@ -257,7 +292,7 @@ class PreviewBar {
if (this.originalChapterBar) {
this.originalChapterBarBlocks = this.originalChapterBar.querySelectorAll(":scope > div") as NodeListOf<HTMLElement>
this.existingChapters = this.segments.filter((s) => s.source === SponsorSourceType.YouTube).sort((a, b) => a.segment[0] - b.segment[0]);
if (this.existingChapters?.length > 0) {
const margin = parseFloat(this.originalChapterBarBlocks?.[0]?.style?.marginRight?.replace("px", ""));
if (margin) this.chapterMargin = margin;
@@ -279,7 +314,7 @@ class PreviewBar {
if (chapterChevron) {
if (this.segments.some((segment) => segment.source === SponsorSourceType.YouTube)) {
chapterChevron.style.removeProperty("display");
} else {
} else if (this.segments) {
chapterChevron.style.display = "none";
}
}
@@ -296,35 +331,47 @@ class PreviewBar {
const fullCategoryName = (unsubmitted ? 'preview-' : '') + category;
bar.setAttribute('sponsorblock-category', fullCategoryName);
bar.style.backgroundColor = Config.config.barTypes[fullCategoryName]?.color;
// Handled by setCategoryColorCSSVariables() of content.ts
bar.style.backgroundColor = `var(--sb-category-${fullCategoryName})`;
if (!this.onMobileYouTube) bar.style.opacity = Config.config.barTypes[fullCategoryName]?.opacity;
bar.style.position = "absolute";
const duration = Math.min(segment[1], this.videoDuration) - segment[0];
const startTime = segment[1] ? Math.min(this.videoDuration, segment[0]) : segment[0];
const endTime = Math.min(this.videoDuration, segment[1]);
bar.style.left = this.timeToPercentage(startTime);
if (duration > 0) {
bar.style.width = `calc(${this.intervalToPercentage(segment[0], segment[1])}${
this.chapterFilter(barSegment) && segment[1] < this.videoDuration ? ` - ${this.chapterMargin}px` : ''})`;
bar.style.right = this.timeToPercentage(this.videoDuration - endTime);
}
if (this.chapterFilter(barSegment) && segment[1] < this.videoDuration) {
bar.style.marginRight = `${this.chapterMargin}px`;
}
const time = segment[1] ? Math.min(this.videoDuration, segment[0]) : segment[0];
bar.style.left = this.timeToPercentage(time);
return bar;
}
createChaptersBar(segments: PreviewBarSegment[]): void {
if (!this.progressBar || !this.originalChapterBar || this.originalChapterBar.childElementCount <= 0) {
if (this.customChaptersBar) this.customChaptersBar.style.display = "none";
if (this.originalChapterBar) this.originalChapterBar.style.removeProperty("display");
// Make sure other video types lose their chapter bar
document.querySelectorAll(".sponsorBlockChapterBar").forEach((element) => element.remove());
this.customChaptersBar = null;
return;
}
// Merge overlapping chapters
this.unfilteredChapterGroups = this.createChapterRenderGroups(segments);
const remakingBar = segments !== this.lastRenderedSegments;
if (remakingBar) {
this.lastRenderedSegments = segments;
if (segments.every((segments) => segments.source === SponsorSourceType.YouTube)
|| (!Config.config.renderSegmentsAsChapters
&& segments.every((segment) => segment.actionType !== ActionType.Chapter
// Merge overlapping chapters
this.unfilteredChapterGroups = this.createChapterRenderGroups(segments);
}
if (segments.every((segments) => segments.source === SponsorSourceType.YouTube)
|| (!Config.config.renderSegmentsAsChapters
&& segments.every((segment) => segment.actionType !== ActionType.Chapter
|| segment.source === SponsorSourceType.YouTube))) {
if (this.customChaptersBar) this.customChaptersBar.style.display = "none";
this.originalChapterBar.style.removeProperty("display");
@@ -407,7 +454,9 @@ class PreviewBar {
}
}
this.updateChapterAllMutation(this.originalChapterBar, this.progressBar, true);
if (remakingBar) {
this.updateChapterAllMutation(this.originalChapterBar, this.progressBar, true);
}
}
createChapterRenderGroups(segments: PreviewBarSegment[]): ChapterGroup[] {
@@ -417,7 +466,7 @@ class PreviewBar {
const latestChapter = result[result.length - 1];
if (latestChapter && latestChapter.segment[1] > segment.segment[0]) {
const segmentDuration = segment.segment[1] - segment.segment[0];
if (segment.segment[0] < latestChapter.segment[0]
if (segment.segment[0] < latestChapter.segment[0]
|| segmentDuration < latestChapter.originalDuration) {
// Remove latest if it starts too late
let latestValidChapter = latestChapter;
@@ -565,6 +614,7 @@ class PreviewBar {
for (const mutation of mutations) {
if (mutation.type === "childList") {
this.update();
break;
}
}
@@ -618,7 +668,7 @@ class PreviewBar {
if (changedData.scale !== null) {
const transformScale = (changedData.scale) / progressBar.clientWidth;
customChangedElement.style.transform =
customChangedElement.style.transform =
`scaleX(${Math.max(0, Math.min(1 - calculatedLeft, (transformScale - cursor) / fullSectionWidth - calculatedLeft))}`;
if (firstUpdate) {
customChangedElement.style.transition = "none";
@@ -634,11 +684,17 @@ class PreviewBar {
cursor += sectionWidthDecimal;
}
if (sections.length !== 0 && sections.length !== this.existingChapters?.length
&& Date.now() - this.lastChapterUpdate > 3000) {
this.lastChapterUpdate = Date.now();
this.updateExistingChapters();
}
}
}
private findLeftAndScale(selector: string, currentElement: HTMLElement, progressBar: HTMLElement):
{ left: number, scale: number } {
private findLeftAndScale(selector: string, currentElement: HTMLElement, progressBar: HTMLElement):
{ left: number; scale: number } {
const sections = currentElement.parentElement.parentElement.parentElement.children;
let currentWidth = 0;
let lastWidth = 0;
@@ -654,8 +710,8 @@ class PreviewBar {
for (let i = 0; i < sections.length; i++) {
const section = sections[i] as HTMLElement;
const checkElement = section.querySelector(selector) as HTMLElement;
const currentSectionWidthNoMargin = this.getPartialChapterSectionStyle(section, "width") || progressBar.clientWidth;
const currentSectionWidth = currentSectionWidthNoMargin
const currentSectionWidthNoMargin = this.getPartialChapterSectionStyle(section, "width") ?? progressBar.clientWidth;
const currentSectionWidth = currentSectionWidthNoMargin
+ this.getPartialChapterSectionStyle(section, "marginRight");
// First check for left
@@ -698,41 +754,43 @@ class PreviewBar {
currentWidth += lastWidth;
}
return {
left: left + leftPosition,
return {
left: left + leftPosition,
scale: scale !== null ? scale * scaleWidth + scalePosition : null
};
}
private getPartialChapterSectionStyle(element: HTMLElement, param: string): number {
const data = element.style[param];
if (data?.includes("100%")) {
return 0;
if (data?.includes("%")) {
return this.customChaptersBar.clientWidth * (parseFloat(data.replace("%", "")) / 100);
} else {
return parseInt(element.style[param].match(/\d+/g)?.[0]) || 0;
}
}
updateChapterText(segments: SponsorTime[], submittingSegments: SponsorTime[], currentTime: number): void {
if ((!segments || segments.length <= 0) && submittingSegments?.length <= 0) {
updateChapterText(segments: SponsorTime[], submittingSegments: SponsorTime[], currentTime: number): SponsorTime[] {
if (!Config.config.showSegmentNameInChapterBar
|| ((!segments || segments.length <= 0) && submittingSegments?.length <= 0)) {
const chaptersContainer = this.getChaptersContainer();
const chapterButton = this.getChapterButton(chaptersContainer);
if (chapterButton.classList.contains("ytp-chapter-container-disabled")) {
if (chapterButton && chapterButton.classList.contains("ytp-chapter-container-disabled")) {
chaptersContainer.style.display = "none";
}
return;
return [];
}
segments ??= [];
if (submittingSegments?.length > 0) segments = segments.concat(submittingSegments);
const activeSegments = segments.filter((segment) => {
return segment.hidden === SponsorHideType.Visible
return segment.hidden === SponsorHideType.Visible
&& segment.segment[0] <= currentTime && segment.segment[1] > currentTime
&& segment.category !== DEFAULT_CATEGORY;
});
this.setActiveSegments(activeSegments);
return activeSegments;
}
/**
@@ -760,16 +818,30 @@ class PreviewBar {
chapterButton.disabled = false;
const chapterTitle = chaptersContainer.querySelector(".ytp-chapter-title-content") as HTMLDivElement;
chapterTitle.innerText = chosenSegment.description || shortCategoryName(chosenSegment.category);
chapterTitle.innerText = "";
const chapterCustomText = (chapterTitle.querySelector(".sponsorChapterText") || (() => {
const elem = document.createElement("div");
chapterTitle.appendChild(elem);
elem.classList.add("sponsorChapterText");
return elem;
})()) as HTMLDivElement;
chapterCustomText.innerText = chosenSegment.description || shortCategoryName(chosenSegment.category);
if (chosenSegment.actionType !== ActionType.Chapter) {
chapterTitle.classList.add("sponsorBlock-segment-title");
} else {
chapterTitle.classList.remove("sponsorBlock-segment-title");
}
const chapterVoteContainer = this.chapterVote.getContainer();
if (chosenSegment.source === SponsorSourceType.Server) {
const chapterVoteContainer = this.chapterVote.getContainer();
if (!chapterButton.contains(chapterVoteContainer)) {
const oldVoteContainers = document.querySelectorAll("#chapterVote");
if (oldVoteContainers.length > 0) {
oldVoteContainers.forEach((oldVoteContainer) => oldVoteContainer.remove());
}
chapterButton.insertBefore(chapterVoteContainer, this.getChapterChevron());
}
@@ -779,7 +851,13 @@ class PreviewBar {
this.chapterVote.setVisibility(false);
}
} else {
chaptersContainer.style.display = "none";
chaptersContainer.querySelector(".sponsorChapterText")?.remove();
const chapterTitle = chaptersContainer.querySelector(".ytp-chapter-title-content") as HTMLDivElement;
if (chapterTitle.innerText === "") {
chaptersContainer.style.display = "none";
} else {
chaptersContainer.style.removeProperty("display");
}
this.chapterVote.setVisibility(false);
}
}
@@ -791,7 +869,7 @@ class PreviewBar {
private getChapterButton(chaptersContainer: HTMLElement): HTMLButtonElement {
return (chaptersContainer ?? this.getChaptersContainer())
.querySelector("button.ytp-chapter-title") as HTMLButtonElement;
?.querySelector("button.ytp-chapter-title") as HTMLButtonElement;
}
remove(): void {
@@ -839,7 +917,7 @@ class PreviewBar {
for (let i = 0; i < this.originalChapterBarBlocks.length; i++) {
const chapterElement = this.originalChapterBarBlocks[i];
const widthPixels = parseFloat(chapterElement.style.width.replace("px", ""));
if (time >= this.existingChapters[i].segment[1]) {
const marginPixels = chapterElement.style.marginRight ? parseFloat(chapterElement.style.marginRight.replace("px", "")) : 0;
pixelOffset += widthPixels + marginPixels;
@@ -854,8 +932,8 @@ class PreviewBar {
if (latestChapter) {
const latestWidth = parseFloat(this.originalChapterBarBlocks[lastCheckedChapter + 1].style.width.replace("px", ""));
const latestChapterDuration = latestChapter.segment[1] - latestChapter.segment[0];
const percentageInCurrentChapter = (time - latestChapter.segment[0]) / latestChapterDuration;
const percentageInCurrentChapter = (time - latestChapter.segment[0]) / latestChapterDuration;
const sizeOfCurrentChapter = latestWidth / totalPixels;
return Math.min(1, ((pixelOffset / totalPixels) + (percentageInCurrentChapter * sizeOfCurrentChapter)));
}
@@ -871,11 +949,18 @@ class PreviewBar {
return this.videoDuration * (showLarger ? 0.006 : 0.003);
}
private getSmallestSegment(timeInSeconds: number, segments: PreviewBarSegment[]): PreviewBarSegment | null {
// Name parameter used for cache
private getSmallestSegment(timeInSeconds: number, segments: PreviewBarSegment[], name?: string): PreviewBarSegment | null {
const proposedIndex = name ? this.lastSmallestSegment[name]?.index : null;
const startSearchIndex = proposedIndex && segments[proposedIndex] === this.lastSmallestSegment[name].segment ? proposedIndex : 0;
const direction = startSearchIndex > 0 && timeInSeconds < this.lastSmallestSegment[name].segment.segment[0] ? -1 : 1;
let segment: PreviewBarSegment | null = null;
let index = -1;
let currentSegmentLength = Infinity;
for (const seg of segments) { //
for (let i = startSearchIndex; i < segments.length && i >= 0; i += direction) {
const seg = segments[i];
const segmentLength = seg.segment[1] - seg.segment[0];
const minSize = this.getMinimumSize(seg.showLarger);
@@ -885,8 +970,20 @@ class PreviewBar {
if (segmentLength < currentSegmentLength) {
currentSegmentLength = segmentLength;
segment = seg;
index = i;
}
}
if (direction === 1 && seg.segment[0] > timeInSeconds) {
break;
}
}
if (segment) {
this.lastSmallestSegment[name] = {
index: index,
segment: segment
};
}
return segment;

View File

@@ -102,6 +102,7 @@ export class SkipButtonControlBar {
this.enabled = true;
this.refreshText();
this.container?.classList?.remove("textDisabled");
this.textContainer?.classList?.remove("hidden");
AnimationUtils.disableAutoHideAnimation(this.skipIcon);
@@ -134,7 +135,6 @@ export class SkipButtonControlBar {
disable(): void {
this.container.classList.add("hidden");
this.textContainer?.classList?.remove("hidden");
this.chapterText?.classList?.remove("hidden");
this.getChapterPrefix()?.classList?.remove("hidden");
@@ -142,6 +142,10 @@ export class SkipButtonControlBar {
this.enabled = false;
}
isEnabled(): boolean {
return this.enabled;
}
toggleSkip(): void {
this.skip(this.segment);
this.disableText();

View File

@@ -9,7 +9,7 @@ interface BaseMessage {
}
interface DefaultMessage {
message:
message:
"update"
| "sponsorStart"
| "getVideoID"
@@ -83,19 +83,19 @@ interface GetVideoIdResponse {
videoID: string;
}
interface GetChannelIDResponse {
export interface GetChannelIDResponse {
channelID: string;
}
interface SponsorStartResponse {
export interface SponsorStartResponse {
creatingSegment: boolean;
}
interface IsChannelWhitelistedResponse {
export interface IsChannelWhitelistedResponse {
value: boolean;
}
export type MessageResponse =
export type MessageResponse =
IsInfoFoundMessageResponse
| GetVideoIdResponse
| GetChannelIDResponse
@@ -111,7 +111,7 @@ export interface VoteResponse {
responseText: string;
}
export interface ImportSegmentsResponse {
interface ImportSegmentsResponse {
importedSegments: SponsorTime[];
}
@@ -120,4 +120,14 @@ export interface TimeUpdateMessage {
time: number;
}
export type PopupMessage = TimeUpdateMessage;
export type InfoUpdatedMessage = IsInfoFoundMessageResponse & {
message: "infoUpdated";
}
export interface VideoChangedPopupMessage {
message: "videoChanged";
videoID: string;
whitelisted: boolean;
}
export type PopupMessage = TimeUpdateMessage | InfoUpdatedMessage | VideoChangedPopupMessage;

View File

@@ -1,5 +1,5 @@
import * as React from "react";
import * as ReactDOM from "react-dom";
import { createRoot } from 'react-dom/client';
import Config from "./config";
import * as CompileConfig from "../config.json";
@@ -14,7 +14,8 @@ import UnsubmittedVideos from "./render/UnsubmittedVideos";
import KeybindComponent from "./components/options/KeybindComponent";
import { showDonationLink } from "./utils/configUtils";
import { localizeHtmlPage } from "./utils/pageUtils";
import { StorageChangesObject } from "./types";
import { StorageChangesObject } from "@ajayyy/maze-utils/lib/config";
import { getHash } from "@ajayyy/maze-utils/lib/hash";
const utils = new Utils();
let embed = false;
@@ -258,7 +259,8 @@ async function init() {
break;
}
case "keybind-change": {
ReactDOM.render(React.createElement(KeybindComponent, {option: option}), optionsElements[i].querySelector("div"));
const root = createRoot(optionsElements[i].querySelector("div"));
root.render(React.createElement(KeybindComponent, {option: option}));
break;
}
case "display": {
@@ -429,7 +431,7 @@ function invidiousInstanceAddInit(element: HTMLElement, option: string) {
let instanceList = Config.config[option];
if (!instanceList) instanceList = [];
instanceList.push(textBox.value);
instanceList.push(textBox.value.trim().toLowerCase());
Config.config[option] = instanceList;
@@ -531,7 +533,7 @@ function activatePrivateTextChange(element: HTMLElement) {
case "userID":
if (Config.config[option]) {
utils.asyncRequestToServer("GET", "/api/userInfo", {
userID: Config.config[option],
publicUserID: getHash(Config.config[option]),
values: ["warnings", "banned"]
}).then((result) => {
const userInfo = JSON.parse(result.responseText);
@@ -671,4 +673,4 @@ function copyDebugOutputToClipboard() {
function isIncognitoAllowed(): Promise<boolean> {
return new Promise((resolve) => chrome.extension.isAllowedIncognitoAccess(resolve));
}
}

View File

@@ -1,8 +1,23 @@
import Config from "./config";
import Utils from "./utils";
import { SponsorTime, SponsorHideType, ActionType, SegmentUUID, SponsorSourceType, StorageChangesObject } from "./types";
import { Message, MessageResponse, IsInfoFoundMessageResponse, ImportSegmentsResponse, PopupMessage } from "./messageTypes";
import {
ActionType,
SegmentUUID,
SponsorHideType,
SponsorSourceType,
SponsorTime,
} from "./types";
import {
GetChannelIDResponse,
IsChannelWhitelistedResponse,
IsInfoFoundMessageResponse,
Message,
MessageResponse,
PopupMessage,
SponsorStartResponse,
VoteResponse,
} from "./messageTypes";
import { showDonationLink } from "./utils/configUtils";
import { AnimationUtils } from "./utils/animationUtils";
import { GenericUtils } from "./utils/genericUtils";
@@ -10,6 +25,10 @@ import { shortCategoryName } from "./utils/categoryUtils";
import { localizeHtmlPage } from "./utils/pageUtils";
import { exportTimes } from "./utils/exporter";
import GenericNotice from "./render/GenericNotice";
import { getFormattedTime } from "@ajayyy/maze-utils/lib/formating";
import { StorageChangesObject } from "@ajayyy/maze-utils/lib/config";
import { getHash } from "@ajayyy/maze-utils/lib/hash";
const utils = new Utils();
interface MessageListener {
@@ -49,9 +68,11 @@ class MessageHandler {
// To prevent clickjacking
let allowPopup = window === window.top;
window.addEventListener("message", async (e) => {
window.addEventListener("message", async (e): Promise<void> => {
if (e.source !== window.parent) return;
if (e.origin.endsWith('.youtube.com')) return allowPopup = true;
if (e.origin.endsWith('.youtube.com')) {
allowPopup = true;
}
});
//make this a function to allow this to run on the content page
@@ -60,14 +81,13 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
localizeHtmlPage();
type InputPageElements = {
whitelistToggle?: HTMLInputElement,
toggleSwitch?: HTMLInputElement,
usernameInput?: HTMLInputElement,
whitelistToggle?: HTMLInputElement;
toggleSwitch?: HTMLInputElement;
usernameInput?: HTMLInputElement;
};
type PageElements = { [key: string]: HTMLElement } & InputPageElements
/** If true, the content script is in the process of creating a new segment. */
let creatingSegment = false;
let stopLoadingAnimation = null;
//the start and end time pairs (2d)
let sponsorTimes: SponsorTime[] = [];
@@ -83,6 +103,9 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
let segmentTab = SegmentTab.Segments;
let port: chrome.runtime.Port = null;
//saves which detail elemts are opened, by saving the uuids
const openedUUIDs: SegmentUUID[] = [];
const PageElements: PageElements = {};
[
@@ -184,7 +207,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
}
PageElements.exportSegmentsButton.addEventListener("click", exportSegments);
PageElements.importSegmentsButton.addEventListener("click",
PageElements.importSegmentsButton.addEventListener("click",
() => PageElements.importSegmentsMenu.classList.toggle("hidden"));
PageElements.importSegmentsSubmit.addEventListener("click", importSegments);
@@ -208,7 +231,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
PageElements.optionsButton.addEventListener("click", openOptions);
PageElements.helpButton.addEventListener("click", openHelp);
PageElements.refreshSegmentsButton.addEventListener("click", refreshSegments);
PageElements.sbPopupIconCopyUserID.addEventListener("click", async () => copyToClipboard(await utils.getHash(Config.config.userID)));
PageElements.sbPopupIconCopyUserID.addEventListener("click", async () => copyToClipboard(await getHash(Config.config.userID)));
// Forward click events
if (window !== window.top) {
@@ -257,8 +280,12 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
PageElements.showNoticeAgain.style.display = "unset";
}
utils.sendRequestToServer("GET", "/api/userInfo?value=userName&value=viewCount&value=minutesSaved&value=vip&value=permissions&value=freeChaptersAccess&userID="
+ Config.config.userID, (res) => {
const values = ["userName", "viewCount", "minutesSaved", "vip", "permissions"];
utils.asyncRequestToServer("GET", "/api/userInfo", {
publicUserID: await getHash(Config.config.userID),
values
}).then((res) => {
if (res.status === 200) {
const userInfo = JSON.parse(res.responseText);
PageElements.usernameValue.innerText = userInfo.userName;
@@ -288,13 +315,6 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
Config.config.isVip = userInfo.vip;
Config.config.permissions = userInfo.permissions;
if (userInfo.freeChaptersAccess) {
Config.config.payments.chaptersAllowed = userInfo.freeChaptersAccess;
Config.config.payments.freeAccess = userInfo.freeChaptersAccess;
Config.config.payments.lastCheck = Date.now();
Config.forceSyncUpdate("payments");
}
}
});
@@ -367,7 +387,6 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
messageHandler.sendMessage(tabs[0].id, { message: 'getVideoID' }, function (result) {
if (result !== undefined && result.videoID) {
currentVideoID = result.videoID;
creatingSegment = result.creatingSegment;
loadTabData(tabs, updating);
} else if (result === undefined && chrome.runtime.lastError) {
@@ -402,7 +421,13 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
}, (tabs) => onTabs(tabs, updating));
}
function infoFound(request: IsInfoFoundMessageResponse) {
async function infoFound(request: IsInfoFoundMessageResponse) {
// End any loading animation
if (stopLoadingAnimation != null) {
stopLoadingAnimation();
stopLoadingAnimation = null;
}
if (chrome.runtime.lastError) {
//This page doesn't have the injected content script, or at least not yet
displayNoVideo();
@@ -418,79 +443,59 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
PageElements.loadingIndicator.style.display = "none";
downloadedTimes = request.sponsorTimes ?? [];
displayDownloadedSponsorTimes(downloadedTimes, request.time);
if (request.found) {
PageElements.videoFound.innerHTML = chrome.i18n.getMessage("sponsorFound");
PageElements.issueReporterImportExport.classList.remove("hidden");
if (request.sponsorTimes) {
displayDownloadedSponsorTimes(request.sponsorTimes, request.time);
}
} else if (request.status == 404 || request.status == 200) {
PageElements.videoFound.innerHTML = chrome.i18n.getMessage("sponsor404");
PageElements.issueReporterImportExport.classList.add("hidden");
PageElements.issueReporterImportExport.classList.remove("hidden");
} else {
PageElements.videoFound.innerHTML = chrome.i18n.getMessage("connectionError") + request.status;
PageElements.issueReporterImportExport.classList.add("hidden");
if (request.status) {
PageElements.videoFound.innerHTML = chrome.i18n.getMessage("connectionError") + request.status;
} else {
PageElements.videoFound.innerHTML = chrome.i18n.getMessage("segmentsStillLoading");
}
PageElements.issueReporterImportExport.classList.remove("hidden");
}
}
//see if whitelist button should be swapped
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id,
{ message: 'isChannelWhitelisted' },
function (response) {
if (response.value) {
PageElements.whitelistChannel.style.display = "none";
PageElements.unwhitelistChannel.style.display = "unset";
PageElements.whitelistToggle.checked = true;
document.querySelectorAll('.SBWhitelistIcon')[0].classList.add("rotated");
}
});
const response = await sendTabMessageAsync({ message: 'isChannelWhitelisted' }) as IsChannelWhitelistedResponse;
if (response.value) {
PageElements.whitelistChannel.style.display = "none";
PageElements.unwhitelistChannel.style.display = "unset";
PageElements.whitelistToggle.checked = true;
document.querySelectorAll('.SBWhitelistIcon')[0].classList.add("rotated");
}
);
}
function sendSponsorStartMessage() {
async function sendSponsorStartMessage() {
//the content script will get the message if a YouTube page is open
messageHandler.query({
active: true,
currentWindow: true,
}, (tabs) => {
messageHandler.sendMessage(
tabs[0].id,
{ from: 'popup', message: 'sponsorStart' },
async (response) => {
startSponsorCallback(response);
const response = await sendTabMessageAsync({ from: 'popup', message: 'sponsorStart' }) as SponsorStartResponse;
startSponsorCallback(response);
// Perform a second update after the config changes take effect as a workaround for a race condition
const removeListener = (listener: typeof lateUpdate) => {
const index = Config.configSyncListeners.indexOf(listener);
if (index !== -1) Config.configSyncListeners.splice(index, 1);
};
// Perform a second update after the config changes take effect as a workaround for a race condition
const removeListener = (listener: typeof lateUpdate) => {
const index = Config.configSyncListeners.indexOf(listener);
if (index !== -1) Config.configSyncListeners.splice(index, 1);
};
const lateUpdate = () => {
startSponsorCallback(response);
removeListener(lateUpdate);
};
const lateUpdate = () => {
startSponsorCallback(response);
removeListener(lateUpdate);
};
Config.configSyncListeners.push(lateUpdate);
Config.configSyncListeners.push(lateUpdate);
// Remove the listener after 200ms in case the changes were propagated by the time we got the response
setTimeout(() => removeListener(lateUpdate), 200);
},
);
});
// Remove the listener after 200ms in case the changes were propagated by the time we got the response
setTimeout(() => removeListener(lateUpdate), 200);
}
function startSponsorCallback(response: { creatingSegment: boolean }) {
creatingSegment = response.creatingSegment;
function startSponsorCallback(response: SponsorStartResponse) {
// Only update the segments after a segment was created
if (!creatingSegment) {
if (!response.creatingSegment) {
sponsorTimes = Config.config.unsubmittedSegments[currentVideoID] || [];
}
@@ -505,7 +510,13 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
PageElements.issueReporterTabs.classList.add("hidden");
currentSegmentTab = SegmentTab.Segments;
} else {
PageElements.issueReporterTabs.classList.remove("hidden");
if (currentSegmentTab === SegmentTab.Segments
&& sponsorTimes.every((segment) => segment.actionType === ActionType.Chapter)) {
PageElements.issueReporterTabs.classList.add("hidden");
currentSegmentTab = SegmentTab.Chapters;
} else {
PageElements.issueReporterTabs.classList.remove("hidden");
}
}
// Sort list by start time
@@ -514,7 +525,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
if (currentSegmentTab === SegmentTab.Segments) {
return segment.actionType !== ActionType.Chapter;
} else if (currentSegmentTab === SegmentTab.Chapters) {
return segment.actionType === ActionType.Chapter
return segment.actionType === ActionType.Chapter
&& segment.source !== SponsorSourceType.YouTube;
} else {
return true;
@@ -531,7 +542,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
if (downloadedTimes.length > 0) {
PageElements.exportSegmentsButton.classList.remove("hidden");
} else {
} else {
PageElements.exportSegmentsButton.classList.add("hidden");
}
@@ -575,9 +586,9 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
if (downloadedTimes[i].actionType === ActionType.Full) {
segmentTimeFromToNode.innerText = chrome.i18n.getMessage("full");
} else {
segmentTimeFromToNode.innerText = GenericUtils.getFormattedTime(downloadedTimes[i].segment[0], true) +
segmentTimeFromToNode.innerText = getFormattedTime(downloadedTimes[i].segment[0], true) +
(actionType !== ActionType.Poi
? " " + chrome.i18n.getMessage("to") + " " + GenericUtils.getFormattedTime(downloadedTimes[i].segment[1], true)
? " " + chrome.i18n.getMessage("to") + " " + getFormattedTime(downloadedTimes[i].segment[1], true)
: "");
}
@@ -597,6 +608,19 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
const votingButtons = document.createElement("details");
votingButtons.classList.add("votingButtons");
votingButtons.id = "votingButtons" + UUID;
votingButtons.setAttribute("data-uuid", UUID);
votingButtons.addEventListener("toggle", () => {
if (votingButtons.open) {
openedUUIDs.push(UUID);
} else {
const index = openedUUIDs.indexOf(UUID);
if (index !== -1) {
openedUUIDs.splice(openedUUIDs.indexOf(UUID), 1);
}
}
});
votingButtons.open = openedUUIDs.some((u) => u === UUID);
//thumbs up and down buttons
const voteButtonsContainer = document.createElement("div");
@@ -649,25 +673,19 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
downloadedTimes[i].hidden = SponsorHideType.Hidden;
}
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id,
{
message: "hideSegment",
type: downloadedTimes[i].hidden,
UUID: UUID
}
);
});
sendTabMessage({
message: "hideSegment",
type: downloadedTimes[i].hidden,
UUID: UUID
})
});
const skipButton = document.createElement("img");
skipButton.id = "sponsorTimesSkipButtonContainer" + UUID;
skipButton.className = "voteButton";
skipButton.src = chrome.runtime.getURL("icons/skip.svg");
skipButton.title = actionType === ActionType.Chapter ? chrome.i18n.getMessage("playChapter")
: chrome.i18n.getMessage("skipSegment");
skipButton.addEventListener("click", () => skipSegment(actionType, UUID, skipButton));
votingButtons.addEventListener("dblclick", () => skipSegment(actionType, UUID));
@@ -676,11 +694,13 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
voteButtonsContainer.appendChild(downvoteButton);
voteButtonsContainer.appendChild(uuidButton);
if (downloadedTimes[i].actionType === ActionType.Skip || downloadedTimes[i].actionType === ActionType.Mute
|| downloadedTimes[i].actionType === ActionType.Poi
&& [SponsorHideType.Visible, SponsorHideType.Hidden].includes(downloadedTimes[i].hidden)) {
voteButtonsContainer.appendChild(hideButton);
}
voteButtonsContainer.appendChild(skipButton);
if (downloadedTimes[i].actionType !== ActionType.Full) {
voteButtonsContainer.appendChild(skipButton);
}
// Will contain request status
const voteStatusContainer = document.createElement("div");
@@ -703,15 +723,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
function submitTimes() {
if (sponsorTimes.length > 0) {
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id,
{ message: 'submitTimes' },
);
});
sendTabMessage({ message: 'submitTimes' })
}
}
@@ -721,9 +733,16 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
PageElements.showNoticeAgain.style.display = "none";
}
function isCreatingSegment(): boolean {
const segments = Config.config.unsubmittedSegments[currentVideoID];
if (!segments) return false;
const lastSegment = segments[segments.length - 1];
return lastSegment && lastSegment?.segment?.length !== 2;
}
/** Updates any UI related to segment editing and submission according to the current state. */
function updateSegmentEditingUI() {
PageElements.sponsorStart.innerText = chrome.i18n.getMessage(creatingSegment ? "sponsorEnd" : "sponsorStart");
PageElements.sponsorStart.innerText = chrome.i18n.getMessage(isCreatingSegment() ? "sponsorEnd" : "sponsorStart");
PageElements.submitTimes.style.display = sponsorTimes && sponsorTimes.length > 0 ? "unset" : "none";
PageElements.submissionHint.style.display = sponsorTimes && sponsorTimes.length > 0 ? "unset" : "none";
@@ -742,20 +761,22 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
chrome.runtime.sendMessage({ "message": "openHelp" });
}
function sendTabMessage(data: Message): Promise<unknown> {
return new Promise((resolve) => {
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id,
data,
(response) => resolve(response)
);
}
function sendTabMessage(data: Message, callback?) {
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id,
data,
callback
);
});
}
);
}
function sendTabMessageAsync(data: Message): Promise<unknown> {
return new Promise((resolve) => sendTabMessage(data, (response) => resolve(response)))
}
//make the options username setting option visible
@@ -832,186 +853,122 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
thanksForVotingText.removeAttribute("innerText");
}
function vote(type, UUID) {
async function vote(type, UUID) {
//add loading info
addVoteMessage(chrome.i18n.getMessage("Loading"), UUID);
const response = await sendTabMessageAsync({
message: "submitVote",
type: type,
UUID: UUID
}) as VoteResponse;
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id,
{
message: "submitVote",
type: type,
UUID: UUID
}, function (response) {
if (response != undefined) {
//see if it was a success or failure
if (response.successType == 1 || (response.successType == -1 && response.statusCode == 429)) {
//success (treat rate limits as a success)
addVoteMessage(chrome.i18n.getMessage("voted"), UUID);
} else if (response.successType == -1) {
addVoteMessage(GenericUtils.getErrorMessage(response.statusCode, response.responseText), UUID);
}
setTimeout(() => removeVoteMessage(UUID), 1500);
}
}
);
if (response != undefined) {
//see if it was a success or failure
if (response.successType == 1 || (response.successType == -1 && response.statusCode == 429)) {
//success (treat rate limits as a success)
addVoteMessage(chrome.i18n.getMessage("voted"), UUID);
} else if (response.successType == -1) {
addVoteMessage(GenericUtils.getErrorMessage(response.statusCode, response.responseText), UUID);
}
setTimeout(() => removeVoteMessage(UUID), 1500);
}
}
async function whitelistChannel() {
//get the channel url
const response = await sendTabMessageAsync({ message: 'getChannelID' }) as GetChannelIDResponse;
if (!response.channelID) {
alert(chrome.i18n.getMessage("channelDataNotFound") + " https://github.com/ajayyy/SponsorBlock/issues/753");
return;
}
//get whitelisted channels
let whitelistedChannels = Config.config.whitelistedChannels;
if (whitelistedChannels == undefined) {
whitelistedChannels = [];
}
//add on this channel
whitelistedChannels.push(response.channelID);
//change button
PageElements.whitelistChannel.style.display = "none";
PageElements.unwhitelistChannel.style.display = "unset";
document.querySelectorAll('.SBWhitelistIcon')[0].classList.add("rotated");
//show 'consider force channel check' alert
if (!Config.config.forceChannelCheck) PageElements.whitelistForceCheck.classList.remove("hidden");
//save this
Config.config.whitelistedChannels = whitelistedChannels;
//send a message to the client
sendTabMessage({
message: 'whitelistChange',
value: true
});
}
function whitelistChannel() {
async function unwhitelistChannel() {
//get the channel url
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id,
{ message: 'getChannelID' },
function (response) {
if (!response.channelID) {
alert(chrome.i18n.getMessage("channelDataNotFound") + " https://github.com/ajayyy/SponsorBlock/issues/753");
return;
}
const response = await sendTabMessageAsync({ message: 'getChannelID' }) as GetChannelIDResponse;
//get whitelisted channels
let whitelistedChannels = Config.config.whitelistedChannels;
if (whitelistedChannels == undefined) {
whitelistedChannels = [];
}
//get whitelisted channels
let whitelistedChannels = Config.config.whitelistedChannels;
if (whitelistedChannels == undefined) {
whitelistedChannels = [];
}
//add on this channel
whitelistedChannels.push(response.channelID);
//remove this channel
const index = whitelistedChannels.indexOf(response.channelID);
whitelistedChannels.splice(index, 1);
//change button
PageElements.whitelistChannel.style.display = "none";
PageElements.unwhitelistChannel.style.display = "unset";
document.querySelectorAll('.SBWhitelistIcon')[0].classList.add("rotated");
//change button
PageElements.whitelistChannel.style.display = "unset";
PageElements.unwhitelistChannel.style.display = "none";
document.querySelectorAll('.SBWhitelistIcon')[0].classList.remove("rotated");
//show 'consider force channel check' alert
if (!Config.config.forceChannelCheck) PageElements.whitelistForceCheck.classList.remove("hidden");
//hide 'consider force channel check' alert
PageElements.whitelistForceCheck.classList.add("hidden");
//save this
Config.config.whitelistedChannels = whitelistedChannels;
//save this
Config.config.whitelistedChannels = whitelistedChannels;
//send a message to the client
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id, {
message: 'whitelistChange',
value: true
});
}
);
}
);
//send a message to the client
sendTabMessage({
message: 'whitelistChange',
value: false
});
}
function unwhitelistChannel() {
//get the channel url
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id,
{ message: 'getChannelID' },
function (response) {
//get whitelisted channels
let whitelistedChannels = Config.config.whitelistedChannels;
if (whitelistedChannels == undefined) {
whitelistedChannels = [];
}
//remove this channel
const index = whitelistedChannels.indexOf(response.channelID);
whitelistedChannels.splice(index, 1);
//change button
PageElements.whitelistChannel.style.display = "unset";
PageElements.unwhitelistChannel.style.display = "none";
document.querySelectorAll('.SBWhitelistIcon')[0].classList.remove("rotated");
//hide 'consider force channel check' alert
PageElements.whitelistForceCheck.classList.add("hidden");
//save this
Config.config.whitelistedChannels = whitelistedChannels;
//send a message to the client
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id, {
message: 'whitelistChange',
value: false
});
}
);
}
);
});
function startLoadingAnimation() {
stopLoadingAnimation = AnimationUtils.applyLoadingAnimation(PageElements.refreshSegmentsButton, 0.3);
}
function refreshSegments() {
const stopAnimation = AnimationUtils.applyLoadingAnimation(PageElements.refreshSegmentsButton, 0.3);
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id,
{ message: 'refreshSegments' },
(response) => {
infoFound(response);
stopAnimation();
}
)
}
);
startLoadingAnimation();
sendTabMessage({ message: 'refreshSegments' });
}
function skipSegment(actionType: ActionType, UUID: SegmentUUID, element?: HTMLElement): void {
if (actionType === ActionType.Chapter) {
sendMessage({
sendTabMessage({
message: "unskip",
UUID: UUID
});
} else {
sendMessage({
sendTabMessage({
message: "reskip",
UUID: UUID
});
}
if (element) {
const stopAnimation = AnimationUtils.applyLoadingAnimation(element, 0.3);
stopAnimation();
}
}
function sendMessage(request: Message): void {
messageHandler.query({
active: true,
currentWindow: true
}, tabs => {
messageHandler.sendMessage(
tabs[0].id,
request
);
});
}
/**
* Should skipping be disabled (visuals stay)
*/
@@ -1044,10 +1001,10 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
async function importSegments() {
const text = (PageElements.importSegmentsText as HTMLInputElement).value;
await sendTabMessage({
sendTabMessage({
message: "importSegments",
data: text
}) as ImportSegmentsResponse;
});
PageElements.importSegmentsMenu.classList.add("hidden");
}
@@ -1107,10 +1064,58 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
port.onMessage.addListener((msg) => onMessage(msg));
}
function updateCurrentTime(currentTime: number) {
// Create a map of segment UUID -> segment object for easy access
const segmentMap: Record<string, SponsorTime> = {};
for (const segment of downloadedTimes)
segmentMap[segment.UUID] = segment
// Iterate over segment elements and update their classes
const segmentList = document.getElementById("issueReporterTimeButtons");
for (const segmentElement of segmentList.children) {
const UUID = segmentElement.getAttribute("data-uuid");
if (UUID == null || segmentMap[UUID] == undefined) continue;
const summaryElement = segmentElement.querySelector("summary")
if (summaryElement == null) continue;
const segment = segmentMap[UUID]
summaryElement.classList.remove("segmentActive", "segmentPassed")
if (currentTime >= segment.segment[0]) {
if (currentTime < segment.segment[1]) {
summaryElement.classList.add("segmentActive");
} else {
summaryElement.classList.add("segmentPassed");
}
}
}
}
function onMessage(msg: PopupMessage) {
switch (msg.message) {
case "time":
displayDownloadedSponsorTimes(downloadedTimes, msg.time);
updateCurrentTime(msg.time);
break;
case "infoUpdated":
infoFound(msg);
break;
case "videoChanged":
currentVideoID = msg.videoID
sponsorTimes = Config.config.unsubmittedSegments[currentVideoID] ?? [];
updateSegmentEditingUI();
if (msg.whitelisted) {
PageElements.whitelistChannel.style.display = "none";
PageElements.unwhitelistChannel.style.display = "unset";
PageElements.whitelistToggle.checked = true;
document.querySelectorAll('.SBWhitelistIcon')[0].classList.add("rotated");
}
// Clear segments list & start loading animation
// We'll get a ping once they're loaded
startLoadingAnimation();
PageElements.videoFound.innerHTML = chrome.i18n.getMessage("Loading");
displayDownloadedSponsorTimes([], 0);
break;
}
}

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