Compare commits
398 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6ed946c998 | ||
|
|
894410db98 | ||
|
|
0336157673 | ||
|
|
b758cbb25f | ||
|
|
f2be7a9c5b | ||
|
|
8763d173bd | ||
|
|
07e3117e22 | ||
|
|
12bc10ea1f | ||
|
|
2db1971190 | ||
|
|
c3107ffcff | ||
|
|
4bca8ad2f7 | ||
|
|
e729e036cf | ||
|
|
7b74307013 | ||
|
|
6aa1665d7c | ||
|
|
a1bae95cdc | ||
|
|
c5b72a01a2 | ||
|
|
8ade66d7b3 | ||
|
|
d42862541b | ||
|
|
54001763a7 | ||
|
|
7186829bc3 | ||
|
|
3d3b261f8f | ||
|
|
33094f2541 | ||
|
|
9f9df9479b | ||
|
|
1c911581db | ||
|
|
071f8b1729 | ||
|
|
8d1b35403d | ||
|
|
a8fee918e4 | ||
|
|
7bca8e508e | ||
|
|
e16aae393f | ||
|
|
44de741e84 | ||
|
|
bc990cd683 | ||
|
|
33098ac659 | ||
|
|
2f8ec7a5e5 | ||
|
|
48f7c1e0a1 | ||
|
|
29c3b80d0b | ||
|
|
dc47b9ffd2 | ||
|
|
eaa47c8d40 | ||
|
|
e4e453a11c | ||
|
|
2209c230e7 | ||
|
|
9d70332c9a | ||
|
|
8150d38df0 | ||
|
|
75b5c31d07 | ||
|
|
c007ac3d86 | ||
|
|
7218be73c6 | ||
|
|
96693342a3 | ||
|
|
d2ff7b5c04 | ||
|
|
9a0f1db31e | ||
|
|
06da4d6556 | ||
|
|
20d0c05049 | ||
|
|
96e4957f71 | ||
|
|
9c5eeac239 | ||
|
|
e685697bbb | ||
|
|
752e515a1c | ||
|
|
ca0f68bb7d | ||
|
|
34884026d9 | ||
|
|
7a38bf0c08 | ||
|
|
5adcec2ca5 | ||
|
|
36989907a2 | ||
|
|
db55778fd8 | ||
|
|
41be51b384 | ||
|
|
e87efe2c67 | ||
|
|
069299e968 | ||
|
|
4d09a603fe | ||
|
|
8b595af5e9 | ||
|
|
41739a8799 | ||
|
|
23bebbca7c | ||
|
|
5f2af12150 | ||
|
|
628abd03f0 | ||
|
|
8e254c5807 | ||
|
|
0647576d6f | ||
|
|
c803ae9499 | ||
|
|
95f45312e1 | ||
|
|
9dda9a583d | ||
|
|
d1e6421e5b | ||
|
|
bd0a6aaaad | ||
|
|
1e8b176c69 | ||
|
|
14018798f7 | ||
|
|
a0d06ca6e8 | ||
|
|
95fe1eef6f | ||
|
|
38b1dda20b | ||
|
|
07cf1764dc | ||
|
|
aeb9c5b203 | ||
|
|
ad3f0c1a06 | ||
|
|
4bc180077e | ||
|
|
510db57666 | ||
|
|
5ee6a2195d | ||
|
|
63d4c1aedb | ||
|
|
e9204be96f | ||
|
|
0863061665 | ||
|
|
8aea74160c | ||
|
|
d375a97e99 | ||
|
|
fe5499e80a | ||
|
|
598da2a7fe | ||
|
|
fcbeeb9fc1 | ||
|
|
d82ef63d89 | ||
|
|
a457a8009e | ||
|
|
7698be8462 | ||
|
|
738868da8d | ||
|
|
fc7fc693ed | ||
|
|
27f5997e5a | ||
|
|
45274f5c72 | ||
|
|
2bdfd3f39b | ||
|
|
9b9174ab9a | ||
|
|
3e3e9796b1 | ||
|
|
ff5fa4c724 | ||
|
|
b8ab05ccad | ||
|
|
93e440385f | ||
|
|
af66a77026 | ||
|
|
75607dea1c | ||
|
|
5b353b05ac | ||
|
|
3162ab93a1 | ||
|
|
b18f631d33 | ||
|
|
2e254cb917 | ||
|
|
77ce9433a7 | ||
|
|
509e54762f | ||
|
|
caeb347137 | ||
|
|
a2b054844a | ||
|
|
5b79d4ef48 | ||
|
|
3de66ebe23 | ||
|
|
60ef51b7f5 | ||
|
|
aa8ee02277 | ||
|
|
b927ebbbf7 | ||
|
|
d72d5dcbcb | ||
|
|
d9f703d808 | ||
|
|
a9cc43c586 | ||
|
|
844567dcdf | ||
|
|
52ed4f73f4 | ||
|
|
907bd68e4e | ||
|
|
f35afaf6bc | ||
|
|
85b1b51b76 | ||
|
|
9dc5449e37 | ||
|
|
6ea226c972 | ||
|
|
44f9ab9806 | ||
|
|
edd1011737 | ||
|
|
08558bfaeb | ||
|
|
4afc2c153a | ||
|
|
988905c155 | ||
|
|
51aab00985 | ||
|
|
84924b6364 | ||
|
|
93f02877a7 | ||
|
|
7baac9dcbf | ||
|
|
4045978b54 | ||
|
|
56bc3fca04 | ||
|
|
c571a9ecb6 | ||
|
|
1ad60720df | ||
|
|
e5fe99c89b | ||
|
|
3fc32a68c3 | ||
|
|
142cc2881f | ||
|
|
4de55ea5fe | ||
|
|
620e75517c | ||
|
|
cba26a42af | ||
|
|
f3f598d6c7 | ||
|
|
fe7d9986fa | ||
|
|
143ca6f6e0 | ||
|
|
69ce065588 | ||
|
|
bfa31429f1 | ||
|
|
66f0cc8883 | ||
|
|
1a0ac27e49 | ||
|
|
7b87ae7b08 | ||
|
|
9ab8e63b1d | ||
|
|
0e147134f3 | ||
|
|
8605e23fbb | ||
|
|
5f34a777f1 | ||
|
|
1f43d07e16 | ||
|
|
a88aaf4590 | ||
|
|
25f78ed55b | ||
|
|
26e73c515c | ||
|
|
028374e62d | ||
|
|
dc1e5ce762 | ||
|
|
8fcf8ac46c | ||
|
|
ef70e71051 | ||
|
|
23a91c626d | ||
|
|
c92f63af36 | ||
|
|
0a21ef7af0 | ||
|
|
5a74a28520 | ||
|
|
1bfb5cfb13 | ||
|
|
59f8f82655 | ||
|
|
2064afb235 | ||
|
|
ebcb600e99 | ||
|
|
9ec984065e | ||
|
|
63cfe760b6 | ||
|
|
1a717542c7 | ||
|
|
de607d317f | ||
|
|
76d9a9afa9 | ||
|
|
22ecc05a55 | ||
|
|
514ebe8660 | ||
|
|
2f4722162b | ||
|
|
f219122f00 | ||
|
|
008671d97f | ||
|
|
6fb3802fd4 | ||
|
|
73241a0bd1 | ||
|
|
cc995b9848 | ||
|
|
778379d294 | ||
|
|
1083520666 | ||
|
|
cad5cd97fc | ||
|
|
7f5728d4db | ||
|
|
06fa2748fe | ||
|
|
8b50373eab | ||
|
|
bdedf86d63 | ||
|
|
0fb84dc03d | ||
|
|
041ccdaf11 | ||
|
|
1f967b3f69 | ||
|
|
07f0b87379 | ||
|
|
840dbbde4a | ||
|
|
2b9000ff84 | ||
|
|
0d0171530c | ||
|
|
6040d177fa | ||
|
|
2c1f5f16c2 | ||
|
|
0e7a298967 | ||
|
|
9a9f151979 | ||
|
|
ca814c9dcc | ||
|
|
976dbb9159 | ||
|
|
90ce9808f1 | ||
|
|
ef942fca8e | ||
|
|
3671c4bb69 | ||
|
|
ef15526dcd | ||
|
|
096737dcbb | ||
|
|
02360c1f3c | ||
|
|
ccd8342ddb | ||
|
|
4ae2a42c8c | ||
|
|
206d7bc2bd | ||
|
|
0fc9e9b2fb | ||
|
|
5ad809cfb4 | ||
|
|
d1e46825af | ||
|
|
2763b6b6aa | ||
|
|
427b90a5e9 | ||
|
|
60e54ee129 | ||
|
|
4092bf9b05 | ||
|
|
f31c2985e2 | ||
|
|
34cfd14e74 | ||
|
|
3774ef9756 | ||
|
|
098d879fe2 | ||
|
|
49406b7ac6 | ||
|
|
5c704ad241 | ||
|
|
681eb61763 | ||
|
|
71cf9888e8 | ||
|
|
b1aaa0ac5e | ||
|
|
0367f7900f | ||
|
|
47261a360c | ||
|
|
a2c3116bdd | ||
|
|
48a49e4136 | ||
|
|
6de1a58d88 | ||
|
|
43a9ba0f9e | ||
|
|
c3489e54a6 | ||
|
|
75c003b204 | ||
|
|
da5de43121 | ||
|
|
d20a44751c | ||
|
|
15706fd3c4 | ||
|
|
a9e43f95f5 | ||
|
|
11fe87a09e | ||
|
|
52741b2c0a | ||
|
|
09b18a4f6d | ||
|
|
326385f325 | ||
|
|
28884f5e9f | ||
|
|
50d5f956c6 | ||
|
|
585038c902 | ||
|
|
c79b06aed3 | ||
|
|
8d2883b6e2 | ||
|
|
c96ce694b7 | ||
|
|
989b5c9370 | ||
|
|
032264d8bb | ||
|
|
d089e43b8a | ||
|
|
b3336a218e | ||
|
|
bea943dc96 | ||
|
|
12f41521f5 | ||
|
|
36aec560ca | ||
|
|
e8a106d36b | ||
|
|
2c52b9e600 | ||
|
|
3c5316a11c | ||
|
|
c5044d3ebd | ||
|
|
db34f1fd5b | ||
|
|
21f563fdb7 | ||
|
|
3bbc699d98 | ||
|
|
53d688f219 | ||
|
|
2231e2a345 | ||
|
|
e126b59078 | ||
|
|
2a0e893dfc | ||
|
|
8b348a2aeb | ||
|
|
28096e1ba6 | ||
|
|
56b74d6863 | ||
|
|
ffc8f0b6a0 | ||
|
|
4fef6dcfa0 | ||
|
|
a3c80573fa | ||
|
|
a13f5d2359 | ||
|
|
42beaf698c | ||
|
|
4e99754b8c | ||
|
|
422139f474 | ||
|
|
93e5bf5033 | ||
|
|
1bd78ec1c4 | ||
|
|
f01a1ae4ec | ||
|
|
c8611adf50 | ||
|
|
b974806514 | ||
|
|
668b956bb7 | ||
|
|
7b54b79f27 | ||
|
|
ef36c79092 | ||
|
|
c1898d0db7 | ||
|
|
e9e3114549 | ||
|
|
a56bba0612 | ||
|
|
afeba5f077 | ||
|
|
81d0c0cab1 | ||
|
|
de1f18612f | ||
|
|
ba37f5885a | ||
|
|
9c54d141e9 | ||
|
|
4ef8e36821 | ||
|
|
788d4bf73c | ||
|
|
d73c666e1f | ||
|
|
3187efaf1a | ||
|
|
b9bbbebc10 | ||
|
|
d93e9a7d8a | ||
|
|
2a3a04a504 | ||
|
|
13ad7516c2 | ||
|
|
bcb981ae3d | ||
|
|
8d83076ea1 | ||
|
|
17437870e7 | ||
|
|
2373b34067 | ||
|
|
839dd4613c | ||
|
|
c84a951acc | ||
|
|
d0949452da | ||
|
|
1a855a6993 | ||
|
|
1656fae2d4 | ||
|
|
22be10d33f | ||
|
|
324c28b867 | ||
|
|
d56637cb14 | ||
|
|
e720acc674 | ||
|
|
c396d1690d | ||
|
|
2f5d4dfe03 | ||
|
|
821c45a6b6 | ||
|
|
ff44016003 | ||
|
|
b11d99a196 | ||
|
|
6f548987a3 | ||
|
|
c6438872e2 | ||
|
|
8c9424b6c5 | ||
|
|
caae61a6a8 | ||
|
|
777f3a2769 | ||
|
|
6fa5aea680 | ||
|
|
a839480a33 | ||
|
|
797c9d67e4 | ||
|
|
528b475429 | ||
|
|
e39b441c16 | ||
|
|
b8cbedbc4d | ||
|
|
76b78ef132 | ||
|
|
572fee265d | ||
|
|
bfe1e8307d | ||
|
|
1b96e2107a | ||
|
|
3eccf855e5 | ||
|
|
069ae4bb58 | ||
|
|
7f8947dd0a | ||
|
|
0ae34c9603 | ||
|
|
41a3c695dc | ||
|
|
5f92056b94 | ||
|
|
62a64791c6 | ||
|
|
bcf082d760 | ||
|
|
0dd2d18b07 | ||
|
|
2de822c97e | ||
|
|
ad5248f65e | ||
|
|
8d3efb1a90 | ||
|
|
798221606d | ||
|
|
55b38dc30e | ||
|
|
a1722db8d5 | ||
|
|
d27ddc85ae | ||
|
|
6d07abf6c8 | ||
|
|
7adf0ad169 | ||
|
|
0086f00889 | ||
|
|
d458bb0cdf | ||
|
|
bd429f02a7 | ||
|
|
91f3ebed41 | ||
|
|
cc73d2a179 | ||
|
|
d9d2fc8e03 | ||
|
|
3a9d0ad692 | ||
|
|
2843cb6916 | ||
|
|
cbd1f43572 | ||
|
|
38bc6e2b1c | ||
|
|
522dbd7e4d | ||
|
|
31855f7501 | ||
|
|
278394e48a | ||
|
|
71ec724295 | ||
|
|
5472919866 | ||
|
|
92eafdb6f3 | ||
|
|
5fbb8c0d4a | ||
|
|
ebf3b324b6 | ||
|
|
e680099cec | ||
|
|
616981a2b7 | ||
|
|
2aaee2c1c4 | ||
|
|
ef7e5d1312 | ||
|
|
a8af7a0d78 | ||
|
|
97ed091432 | ||
|
|
756233a959 | ||
|
|
9c13b7e8fd | ||
|
|
a812b16da5 | ||
|
|
4020cdc4f2 | ||
|
|
5cf6719681 | ||
|
|
0a587ed98b | ||
|
|
a08dbf4da1 | ||
|
|
edcda31db4 | ||
|
|
a10d7c338c | ||
|
|
3ff5fdb3a1 | ||
|
|
cc935624e9 | ||
|
|
2681dc1890 |
@@ -3,6 +3,8 @@ module.exports = {
|
||||
browser: true,
|
||||
es2021: true,
|
||||
node: true,
|
||||
jest: true,
|
||||
jasmine: true,
|
||||
},
|
||||
extends: [
|
||||
"eslint:recommended",
|
||||
|
||||
1
.github/FUNDING.yml
vendored
@@ -1,2 +1,3 @@
|
||||
github: ajayyy-org
|
||||
patreon: ajayyy
|
||||
custom: [sponsor.ajay.app/donate]
|
||||
|
||||
24
.github/workflows/ci.yml
vendored
@@ -10,9 +10,11 @@ jobs:
|
||||
|
||||
steps:
|
||||
# Initialization
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/setup-node@v1
|
||||
- run: npm install
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: '16'
|
||||
- run: npm ci
|
||||
- name: Copy configuration
|
||||
run: cp config.json.example config.json
|
||||
|
||||
@@ -23,44 +25,44 @@ jobs:
|
||||
# Create Chrome artifacts
|
||||
- name: Create Chrome artifacts
|
||||
run: npm run build:chrome
|
||||
- uses: actions/upload-artifact@v1
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ChromeExtension
|
||||
path: dist
|
||||
- run: mkdir ./builds
|
||||
- uses: montudor/action-zip@v0.1.0
|
||||
- uses: montudor/action-zip@v1
|
||||
with:
|
||||
args: zip -qq -r ./builds/ChromeExtension.zip ./dist
|
||||
|
||||
# Create Firefox artifacts
|
||||
- name: Create Firefox artifacts
|
||||
run: npm run build:firefox
|
||||
- uses: actions/upload-artifact@v1
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: FirefoxExtension
|
||||
path: dist
|
||||
- uses: montudor/action-zip@v0.1.0
|
||||
- uses: montudor/action-zip@v1
|
||||
with:
|
||||
args: zip -qq -r ./builds/FirefoxExtension.zip ./dist
|
||||
|
||||
# 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@v1
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ChromeExtensionBeta
|
||||
path: dist
|
||||
- uses: montudor/action-zip@v0.1.0
|
||||
- uses: montudor/action-zip@v1
|
||||
with:
|
||||
args: zip -qq -r ./builds/ChromeExtensionBeta.zip ./dist
|
||||
|
||||
- name: Create Firefox Beta artifacts
|
||||
run: npm run build:firefox -- --env.stream=beta
|
||||
- uses: actions/upload-artifact@v1
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: FirefoxExtensionBeta
|
||||
path: dist
|
||||
- uses: montudor/action-zip@v0.1.0
|
||||
- uses: montudor/action-zip@v1
|
||||
with:
|
||||
args: zip -qq -r ./builds/FirefoxExtensionBeta.zip ./dist
|
||||
|
||||
|
||||
18
.github/workflows/release.yml
vendored
@@ -12,16 +12,18 @@ jobs:
|
||||
|
||||
steps:
|
||||
# Initialization
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/setup-node@v1
|
||||
- run: npm install
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: '16'
|
||||
- run: npm ci
|
||||
- name: Copy configuration
|
||||
run: cp config.json.example config.json
|
||||
|
||||
# Create Chrome artifacts
|
||||
- name: Create Chrome artifacts
|
||||
run: npm run build:chrome
|
||||
- uses: actions/upload-artifact@v1
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ChromeExtension
|
||||
path: dist
|
||||
@@ -32,7 +34,7 @@ jobs:
|
||||
# Create Firefox artifacts
|
||||
- name: Create Firefox artifacts
|
||||
run: npm run build:firefox
|
||||
- uses: actions/upload-artifact@v1
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: FirefoxExtension
|
||||
path: dist
|
||||
@@ -42,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@v1
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ChromeExtensionBeta
|
||||
path: dist
|
||||
@@ -75,7 +77,7 @@ jobs:
|
||||
# Firefox Beta
|
||||
- name: Create Firefox Beta artifacts
|
||||
run: npm run build:firefox -- --env.stream=beta
|
||||
- uses: actions/upload-artifact@v1
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: FirefoxExtensionBeta
|
||||
path: dist
|
||||
@@ -92,7 +94,7 @@ jobs:
|
||||
run: sudo apt-get install rename
|
||||
- name: Rename signed file
|
||||
run: cd ./web-ext-artifacts ; rename 's/.*/FirefoxSignedInstaller.xpi/' *
|
||||
- uses: actions/upload-artifact@v1
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: FirefoxExtensionSigned.xpi
|
||||
path: ./web-ext-artifacts/FirefoxSignedInstaller.xpi
|
||||
|
||||
14
.github/workflows/take-action.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
# .github/workflows/take.yml
|
||||
name: Assign issue to contributor
|
||||
on:
|
||||
issue_comment:
|
||||
|
||||
jobs:
|
||||
assign:
|
||||
name: Take an issue
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: take the issue
|
||||
uses: bdougie/take-action@main
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
20
.github/workflows/tests.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: Tests
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
name: Run tests
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
# Initialization
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: '16'
|
||||
- run: npm ci
|
||||
|
||||
- name: Run tests
|
||||
run: npm run test-without-building
|
||||
26
.github/workflows/updateInvidous.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: update invidious
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 1 * *' # check every month
|
||||
|
||||
jobs:
|
||||
check-list:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: Download instance list
|
||||
run: |
|
||||
wget https://api.invidious.io/instances.json -O data.json
|
||||
- name: "Run CI"
|
||||
run: npm run ci:invidious
|
||||
|
||||
- name: Create pull request to update list
|
||||
uses: peter-evans/create-pull-request@v3
|
||||
with:
|
||||
commit-message: Update Invidious List
|
||||
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
||||
branch: ci/update_invidious_list
|
||||
title: Update Invidious List
|
||||
body: Automated Invidious list update
|
||||
3
.gitignore
vendored
@@ -6,4 +6,5 @@ web-ext-artifacts
|
||||
.vscode/
|
||||
dist/
|
||||
tmp/
|
||||
.DS_Store
|
||||
.DS_Store
|
||||
ci/data.json
|
||||
27
README.md
@@ -13,6 +13,7 @@
|
||||
<a href="https://addons.mozilla.org/addon/sponsorblock/?src=external-github">Firefox</a> |
|
||||
<a href="https://github.com/ajayyy/SponsorBlock/wiki/Android">Android</a> |
|
||||
<a href="https://github.com/ajayyy/SponsorBlock/wiki/Edge">Edge</a> |
|
||||
<a href="https://github.com/ajayyy/SponsorBlock/wiki/Safari">Safari for MacOS</a> |
|
||||
<a href="https://sponsor.ajay.app">Website</a> |
|
||||
<a href="https://sponsor.ajay.app/stats">Stats</a>
|
||||
</p>
|
||||
@@ -21,7 +22,6 @@
|
||||
<b>3rd-Party Ports:</b>
|
||||
<a href="https://github.com/ajayyy/SponsorBlock/wiki/3rd-Party-Ports#mpv-media-player">MPV</a> |
|
||||
<a href="https://github.com/ajayyy/SponsorBlock/wiki/3rd-Party-Ports#kodi">Kodi</a> |
|
||||
<a href="https://github.com/ajayyy/SponsorBlock/wiki/3rd-Party-Ports#Safari-macos">Safari for MacOS</a> |
|
||||
<a href="https://github.com/ajayyy/SponsorBlock/wiki/3rd-Party-Ports#Chromecast">Chromecast</a> |
|
||||
<a href="https://github.com/ajayyy/SponsorBlock/wiki/3rd-Party-Ports#ios">iOS</a>
|
||||
</p>
|
||||
@@ -50,29 +50,34 @@ See the [Wiki](https://github.com/ajayyy/SponsorBlock/wiki) for important links.
|
||||
|
||||
The backend server code is available here: https://github.com/ajayyy/SponsorBlockServer
|
||||
|
||||
To make sure that this project doesn't die, I have made the database publicly downloadable at https://sponsor.ajay.app/database ([License](https://github.com/ajayyy/SponsorBlock/wiki/Database-and-API-License)). If you are planning on using the database in another project, please read the [API Docs](https://github.com/ajayyy/SponsorBlock/wiki/API-Docs) page for more information.
|
||||
To make sure that this project doesn't die, I have made the database publicly downloadable at https://sponsor.ajay.app/database ([License](https://github.com/ajayyy/SponsorBlock/wiki/Database-and-API-License)). If you are planning on using the database in another project, please read the [API Docs](https://wiki.sponsor.ajay.app/index.php/API_Docs) page for more information.
|
||||
|
||||
The dataset and API are now being used in some [ports](https://github.com/ajayyy/SponsorBlock/wiki/3rd-Party-Ports) as well as a [neural network](https://github.com/andrewzlee/NeuralBlock).
|
||||
|
||||
# API
|
||||
|
||||
You can read the API docs [here](https://github.com/ajayyy/SponsorBlockServer#api-docs).
|
||||
You can read the API docs [here](https://wiki.sponsor.ajay.app/index.php/API_Docs).
|
||||
|
||||
# Building
|
||||
|
||||
Rename `config.json.example` to `config.json` and adjust configuration as desired.
|
||||
You must have [Node.js 16](https://nodejs.org/) and npm installed.
|
||||
|
||||
There are also other build scripts available. Install `npm`, then run `npm install` in the repository to install dependencies.
|
||||
1. Copy the file `config.json.example` to `config.json` and adjust configuration as desired.
|
||||
|
||||
Run `npm run build` to generate a Chrome extension.
|
||||
- You will need to repeat this step in the future if you get build errors related to `CompileConfig`. This can happen for example when a new category is added.
|
||||
|
||||
Use `npm run build:firefox` to generate a Firefox extension.
|
||||
2. Run `npm install` in the repository to install dependencies.
|
||||
|
||||
The result is in `dist`. This can be loaded as an unpacked extension
|
||||
3. Run `npm run build:dev` (for Chrome) or `npm run build:dev:firefox` (for Firefox) to generate a development version of the extension with source maps.
|
||||
|
||||
## Developing with a clean profile
|
||||
- You can also run `npm run build` (for Chrome) or `npm run build:firefox` (for Firefox) to generate a production build.
|
||||
|
||||
4. The built extension is now in `dist/`. You can load it in Chrome as an [unpacked extension](https://developer.chrome.com/docs/extensions/mv3/getstarted/#manifest) or in Firefox as a [temporary extension](https://developer.mozilla.org/en-US/docs/Tools/about:debugging#loading_a_temporary_extension).
|
||||
|
||||
### Developing with a clean profile and hot reloading
|
||||
|
||||
Run `npm run dev` (for Chrome) or `npm run dev:firefox` (for Firefox) to run the extension using a clean browser profile with hot reloading. This uses [`web-ext run`](https://extensionworkshop.com/documentation/develop/web-ext-command-reference/#commands).
|
||||
|
||||
Run `npm run dev` to run the extension using a clean browser profile with hot reloading. Use `npm run dev:firefox` for Firefox. This uses [`web-ext run`](https://extensionworkshop.com/documentation/develop/web-ext-command-reference/#commands).
|
||||
Known chromium bug: Extension is not loaded properly on first start. Visit `chrome://extensions/` and reload the extension.
|
||||
|
||||
For Firefox for Android, use `npm run dev:firefox-android -- --adb-device <ip-address of the device>`. See the [Firefox documentation](https://extensionworkshop.com/documentation/develop/developing-extensions-for-firefox-for-android/#debug-your-extension) for more information.
|
||||
@@ -90,7 +95,7 @@ mv ./oss-attribution/attribution.txt ./public/oss-attribution/attribution.txt
|
||||
|
||||
# Credit
|
||||
|
||||
The awesome [Invidious API](https://github.com/omarroth/invidious/wiki/API) was previously used, and the server is now using [NewLeaf](https://git.sr.ht/~cadence/NewLeaf) as a to get video info from YouTube.
|
||||
The awesome [Invidious API](https://docs.invidious.io/API.md) was previously used, and the server is now using [NewLeaf](https://git.sr.ht/~cadence/NewLeaf) as a to get video info from YouTube.
|
||||
|
||||
Originally forked from [YTSponsorSkip](https://github.com/NDevTK/YTSponsorSkip), but very little code remains.
|
||||
|
||||
|
||||
55
ci/invidiousCI.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
This file is only ran by GitHub Actions in order to populate the Invidious instances list
|
||||
|
||||
This file should not be shipped with the extension
|
||||
*/
|
||||
|
||||
import { writeFile, existsSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
|
||||
// import file from https://api.invidious.io/instances.json
|
||||
if (!existsSync('./data.json')) {
|
||||
process.exit(1);
|
||||
}
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
import * as data from "./data.json";
|
||||
|
||||
type instanceMap = {
|
||||
name: string,
|
||||
url: string,
|
||||
dailyRatios: {ratio: string, label: string }[],
|
||||
thirtyDayUptime: string
|
||||
}[]
|
||||
|
||||
// only https servers
|
||||
const mapped: instanceMap = data
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
.filter((i: any) => i[1]?.type === 'https')
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
.map((instance: any) => {
|
||||
return {
|
||||
name: instance[0],
|
||||
url: instance[1].uri,
|
||||
dailyRatios: instance[1].monitor.dailyRatios,
|
||||
thirtyDayUptime: instance[1]?.monitor['30dRatio'].ratio,
|
||||
}
|
||||
})
|
||||
|
||||
// reliability and sanity checks
|
||||
const reliableCheck = mapped
|
||||
.filter((instance) => {
|
||||
// 30d uptime >= 90%
|
||||
const thirtyDayUptime = Number(instance.thirtyDayUptime) >= 90
|
||||
// available for at least 80/90 days
|
||||
const dailyRatioCheck = instance.dailyRatios.filter(status => status.label !== "black")
|
||||
return (thirtyDayUptime && dailyRatioCheck.length >= 80)
|
||||
})
|
||||
// url includes name
|
||||
.filter(instance => instance.url.includes(instance.name))
|
||||
|
||||
// finally map to array
|
||||
const result: string[] = reliableCheck.map(instance => instance.name)
|
||||
writeFile(join(__dirname, "./invidiouslist.json"), JSON.stringify(result), (err) => {
|
||||
if (err) return console.log(err);
|
||||
})
|
||||
1
ci/invidiouslist.json
Normal file
@@ -0,0 +1 @@
|
||||
["yewtu.be","invidious.snopyta.org","vid.puffyan.us","invidious.kavin.rocks","invidio.xamh.de","invidious-us.kavin.rocks","inv.riverside.rocks","vid.mint.lgbt","youtube.076.ne.jp","invidious.namazso.eu"]
|
||||
@@ -2,5 +2,29 @@
|
||||
"serverAddress": "https://sponsor.ajay.app",
|
||||
"testingServerAddress": "https://sponsor.ajay.app/test",
|
||||
"serverAddressComment": "This specifies the default SponsorBlock server to connect to",
|
||||
"categoryList": ["sponsor", "selfpromo", "interaction", "intro", "outro", "preview", "music_offtopic"]
|
||||
"categoryList": ["sponsor", "selfpromo", "interaction", "poi_highlight", "intro", "outro", "preview", "filler", "music_offtopic"],
|
||||
"categorySupport": {
|
||||
"sponsor": ["skip", "mute"],
|
||||
"selfpromo": ["skip", "mute"],
|
||||
"interaction": ["skip", "mute"],
|
||||
"intro": ["skip", "mute"],
|
||||
"outro": ["skip", "mute"],
|
||||
"preview": ["skip", "mute"],
|
||||
"filler": ["skip", "mute"],
|
||||
"music_offtopic": ["skip"],
|
||||
"poi_highlight": ["skip"]
|
||||
},
|
||||
"wikiLinks": {
|
||||
"sponsor": "https://wiki.sponsor.ajay.app/w/Sponsor",
|
||||
"selfpromo": "https://wiki.sponsor.ajay.app/w/Unpaid/Self_Promotion",
|
||||
"interaction": "https://wiki.sponsor.ajay.app/w/Interaction_Reminder_(Subscribe)",
|
||||
"intro": "https://wiki.sponsor.ajay.app/w/Intermission/Intro_Animation",
|
||||
"outro": "https://wiki.sponsor.ajay.app/w/Endcards/Credits",
|
||||
"preview": "https://wiki.sponsor.ajay.app/w/Preview/Recap",
|
||||
"filler": "https://wiki.sponsor.ajay.app/w/Filler_Tangent",
|
||||
"music_offtopic": "https://wiki.sponsor.ajay.app/w/Music:_Non-Music_Section",
|
||||
"poi_highlight": "https://wiki.sponsor.ajay.app/w/Highlight",
|
||||
"guidelines": "https://wiki.sponsor.ajay.app/w/Guidelines",
|
||||
"mute": "https://wiki.sponsor.ajay.app/w/Mute_Segment"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
module.exports = {
|
||||
"roots": [
|
||||
"src"
|
||||
"test"
|
||||
],
|
||||
"transform": {
|
||||
"^.+\\.ts$": "ts-jest"
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"name": "__MSG_fullName__",
|
||||
"short_name": "SponsorBlock",
|
||||
"version": "2.1.1",
|
||||
"version": "3.7.2",
|
||||
"default_locale": "en",
|
||||
"description": "__MSG_Description__",
|
||||
"homepage_url": "https://sponsor.ajay.app",
|
||||
"content_scripts": [{
|
||||
"run_at": "document_start",
|
||||
"matches": [
|
||||
@@ -36,11 +37,16 @@
|
||||
"icons/upvote.png",
|
||||
"icons/downvote.png",
|
||||
"icons/thumbs_down.svg",
|
||||
"icons/thumbs_down_locked.svg",
|
||||
"icons/thumbs_up.svg",
|
||||
"icons/help.svg",
|
||||
"icons/report.png",
|
||||
"icons/close.png",
|
||||
"icons/skipIcon.svg",
|
||||
"icons/refresh.svg",
|
||||
"icons/beep.ogg",
|
||||
"icons/pause.svg",
|
||||
"icons/stop.svg",
|
||||
"icons/PlayerInfoIconSponsorBlocker.svg",
|
||||
"icons/PlayerDeleteIconSponsorBlocker.svg",
|
||||
"popup.html",
|
||||
|
||||
27726
package-lock.json
generated
21
package.json
@@ -6,13 +6,14 @@
|
||||
"dependencies": {
|
||||
"@types/react": "^16.9.22",
|
||||
"@types/react-dom": "^16.9.5",
|
||||
"@types/selenium-webdriver": "^4.0.15",
|
||||
"babel": "^6.23.0",
|
||||
"babel-core": "^6.26.3",
|
||||
"babel-loader": "^8.0.6",
|
||||
"babel-preset-env": "^1.7.0",
|
||||
"concurrently": "^5.1.0",
|
||||
"react": "^16.12.0",
|
||||
"react-dom": "^16.12.0"
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/chrome": "0.0.91",
|
||||
@@ -21,15 +22,17 @@
|
||||
"@types/jquery": "^3.3.31",
|
||||
"@typescript-eslint/eslint-plugin": "^4.9.1",
|
||||
"@typescript-eslint/parser": "^4.9.1",
|
||||
"chromedriver": "^92.0.0",
|
||||
"copy-webpack-plugin": "^6.0.3",
|
||||
"eslint": "^7.15.0",
|
||||
"eslint-plugin-react": "^7.21.5",
|
||||
"jest": "^26.4.0",
|
||||
"jest": "^27.0.6",
|
||||
"rimraf": "^3.0.0",
|
||||
"ts-jest": "^26.2.0",
|
||||
"selenium-webdriver": "^4.0.0-beta.4",
|
||||
"ts-jest": "^27.0.3",
|
||||
"ts-loader": "^6.2.1",
|
||||
"typescript": "~3.7.3",
|
||||
"web-ext": "^5.4.1",
|
||||
"typescript": "~4.3",
|
||||
"web-ext": "^6.2.0",
|
||||
"webpack": "~4.41.2",
|
||||
"webpack-cli": "~3.3.10",
|
||||
"webpack-merge": "~4.2.2"
|
||||
@@ -49,11 +52,13 @@
|
||||
"build:watch": "npm run build:watch:chrome",
|
||||
"build:watch:chrome": "webpack --env.browser=chrome --config webpack/webpack.dev.js --watch",
|
||||
"build:watch:firefox": "webpack --env.browser=firefox --config webpack/webpack.dev.js --watch",
|
||||
"ci:invidious": "ts-node ci/invidiousCI.ts",
|
||||
"dev": "npm run build:dev && concurrently \"npm run web-run\" \"npm run build:watch\"",
|
||||
"dev:firefox": "npm run build:dev:firefox && concurrently \"npm run web-run:firefox\" \"npm run build:watch:firefox\"",
|
||||
"dev:firefox-android": "npm run build:dev:firefox && concurrently \"npm run web-run:firefox-android\" \"npm run build:watch:firefox\"",
|
||||
"clean": "rimraf dist",
|
||||
"test": "npx jest",
|
||||
"test": "npm run build:chrome && npx jest",
|
||||
"test-without-building": "npx jest",
|
||||
"lint": "eslint src",
|
||||
"lint:fix": "eslint src --fix"
|
||||
},
|
||||
@@ -62,6 +67,6 @@
|
||||
"url": "git+https://github.com/ajayyy/SponsorBlock.git"
|
||||
},
|
||||
"author": "Ajay Ramachandran",
|
||||
"license": "GPL-3.0-only",
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"private": true
|
||||
}
|
||||
|
||||
@@ -57,5 +57,35 @@
|
||||
},
|
||||
"manualPaused": {
|
||||
"message": "تم إيقاف الموقت"
|
||||
},
|
||||
"confirmMSG": {
|
||||
"message": "لتحرير أو حذف قيّم فردياً، انقر فوق زر المعلومات أو فتح الإضافة عن طريق النقر على أيقونة الإضافة في الزاوية اليمنى العليا."
|
||||
},
|
||||
"clearThis": {
|
||||
"message": "هل أنت متأكد أنك تريد حذف هذا؟\n\n"
|
||||
},
|
||||
"Unknown": {
|
||||
"message": "حدث خطأ في إرسال توقيت الرعاة الخاص بك، الرجاء المحاولة مرة أخرى لاحقاً."
|
||||
},
|
||||
"sponsorFound": {
|
||||
"message": "يحتوي هذا الفيديو على أجزاء في قاعدة البيانات!"
|
||||
},
|
||||
"sponsor404": {
|
||||
"message": "لم يتم العثور على أجزاء"
|
||||
},
|
||||
"sponsorStart": {
|
||||
"message": "يبدأ الجزء الآن"
|
||||
},
|
||||
"sponsorEnd": {
|
||||
"message": "ينتهي الجزء الآن"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "إلغاء إنشاء جزء"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "لم يتم العثور على فيديو يوتيوب.\nإذا كان هذا غير صحيح، قم بتحديث الصفحة."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "تحديث الأجزاء"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,74 +1,101 @@
|
||||
{
|
||||
"fullName": {
|
||||
"message": "SponsorBlock за YouTube - пропускай спонсорства",
|
||||
"message": "SponsorBlock за YouTube - пропускайте спонсорства",
|
||||
"description": "Name of the extension."
|
||||
},
|
||||
"Description": {
|
||||
"message": "Прескачайте спонсорства, напомняния за абониране, и други неща в YouTube клипове. Докладвайте спонсорства на клиповете които гледате, за да спестите време на други потребители.",
|
||||
"message": "Прескачайте спонсорства, напомняния за абониране и други неща в клипове в YouTube. Докладвайте спонсорства в клиповете, които гледате, за да спестите време на други потребители.",
|
||||
"description": "Description of the extension."
|
||||
},
|
||||
"400": {
|
||||
"message": "Сървърът каза, че тази заявка е невалидна"
|
||||
"message": "Сървърът съобщава, че тази заявка е невалидна"
|
||||
},
|
||||
"429": {
|
||||
"message": "Подали сте прекалено много спонсорства за едно видео, сигурни ли сте, че има толкова много?"
|
||||
},
|
||||
"409": {
|
||||
"message": "Това спонсорство вече е подадено"
|
||||
"message": "Това спонсорство е вече изпратено"
|
||||
},
|
||||
"channelWhitelisted": {
|
||||
"message": "Каналът е добавен към Whitelist!"
|
||||
"message": "Каналът е добавен към белия списък!"
|
||||
},
|
||||
"Segment": {
|
||||
"message": "сегмент"
|
||||
},
|
||||
"Segments": {
|
||||
"message": "сегменти"
|
||||
"message": "сегмента"
|
||||
},
|
||||
"upvoteButtonInfo": {
|
||||
"message": "Одобряване на това предложение"
|
||||
},
|
||||
"reportButtonTitle": {
|
||||
"message": "Докладвай"
|
||||
"message": "Докладване"
|
||||
},
|
||||
"reportButtonInfo": {
|
||||
"message": "Подайте сигнал за неправилно предложение."
|
||||
},
|
||||
"Dismiss": {
|
||||
"message": "Отхвърли"
|
||||
"message": "Отхвърляне"
|
||||
},
|
||||
"Loading": {
|
||||
"message": "Зареждане..."
|
||||
},
|
||||
"Hide": {
|
||||
"message": "Никога не показвай"
|
||||
"message": "Никога да не се показва"
|
||||
},
|
||||
"hitGoBack": {
|
||||
"message": "Натиснете \"върни\" за да се върнете където бяхте."
|
||||
"message": "Натиснете „връщане“, за да се върнете там, където бяхте."
|
||||
},
|
||||
"unskip": {
|
||||
"message": "Върни"
|
||||
"message": "Връщане"
|
||||
},
|
||||
"reskip": {
|
||||
"message": "Пропусни отново"
|
||||
"message": "Пропускане отново"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Вкл. на звука"
|
||||
},
|
||||
"paused": {
|
||||
"message": "На пауза"
|
||||
},
|
||||
"manualPaused": {
|
||||
"message": "Таймерът е спрян"
|
||||
},
|
||||
"confirmMSG": {
|
||||
"message": "За да редактирате или изтриете някои стойности, натиснете на \"инфо\" бутона или отворете изкачащият прозорец на добавката чрез кликване на иконата на добавката в горният ляв ъгъл."
|
||||
"message": "За да редактирате или изтриете отделни стойности, щракнете върху бутона за информация или отворете изскачащия прозорец на разширението, като щракнете върху иконата на разширението в горния десен ъгъл."
|
||||
},
|
||||
"clearThis": {
|
||||
"message": "Сигурни ли сте, че искате да изчистите това?\n\n"
|
||||
"message": "Наистина ли искате да изчистите това?\n\n"
|
||||
},
|
||||
"Unknown": {
|
||||
"message": "Възникна грешка при подаването на Вашите спонсорски времена, моля опитайте отново по-късно."
|
||||
"message": "Възникна грешка при подаването на вашите времена на спонсорства, моля, опитайте отново по-късно."
|
||||
},
|
||||
"sponsorFound": {
|
||||
"message": "Този видеоклип има сегменти в базата данни!"
|
||||
},
|
||||
"sponsor404": {
|
||||
"message": "Не са намерени сегменти"
|
||||
},
|
||||
"sponsorStart": {
|
||||
"message": "Сегментът Започва Сега"
|
||||
"message": "Сегментът започва сега"
|
||||
},
|
||||
"sponsorEnd": {
|
||||
"message": "Сегментът Свършва Сега"
|
||||
"message": "Сегментът свършва сега"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "Отказ от създаването на сегмент"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "Не е намерен видеоклип в YouTube.\nАко това не е правилно, опреснете раздела."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Опресняване на сегментите"
|
||||
},
|
||||
"success": {
|
||||
"message": "Успешно!"
|
||||
},
|
||||
"voted": {
|
||||
"message": "Гласувано!"
|
||||
"message": "Гласувахте!"
|
||||
},
|
||||
"serverDown": {
|
||||
"message": "Изглежда, че сървърът не работи. Свържете се с програмиста незабавно."
|
||||
@@ -76,26 +103,419 @@
|
||||
"connectionError": {
|
||||
"message": "Възникна грешка с връзката. Код на грешката: "
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Изчистване на сегментите"
|
||||
},
|
||||
"openPopup": {
|
||||
"message": "Отворете изскачащия прозорец на SponsorBlock"
|
||||
"message": "Отваряне на изскачащия прозорец на SponsorBlock"
|
||||
},
|
||||
"closePopup": {
|
||||
"message": "Затваряне на прозореца"
|
||||
},
|
||||
"SubmitTimes": {
|
||||
"message": "Изпращане на сегментите"
|
||||
},
|
||||
"submitCheck": {
|
||||
"message": "Сигурни ли сте, че искате да подадете това?"
|
||||
"message": "Наистина ли искате да изпратите това?"
|
||||
},
|
||||
"whitelistChannel": {
|
||||
"message": "Добавяне на канала към белия списък"
|
||||
},
|
||||
"removeFromWhitelist": {
|
||||
"message": "Премахване на канала от белия списък"
|
||||
},
|
||||
"voteOnTime": {
|
||||
"message": "Гласувайте за сегмент"
|
||||
},
|
||||
"Submissions": {
|
||||
"message": "Изпратени сегменти"
|
||||
},
|
||||
"savedPeopleFrom": {
|
||||
"message": "Помогнахте на хората да пропуснат "
|
||||
},
|
||||
"viewLeaderboard": {
|
||||
"message": "Класиране"
|
||||
},
|
||||
"recordTimesDescription": {
|
||||
"message": "Изпращане"
|
||||
},
|
||||
"submissionEditHint": {
|
||||
"message": "Редактирането на частите ще се появи, след като щракнете върху Изпращане",
|
||||
"description": "Appears in the popup to inform them that editing has been moved to the video player."
|
||||
},
|
||||
"popupHint": {
|
||||
"message": "Съвет: Можете да настроите клавиши за изпращане в опциите"
|
||||
},
|
||||
"clearTimesButton": {
|
||||
"message": "Изчистване на времената"
|
||||
},
|
||||
"submitTimesButton": {
|
||||
"message": "Изпращане на времената"
|
||||
},
|
||||
"publicStats": {
|
||||
"message": "Това се използва на страницата с публичната статистика, за да покаже колко сте допринесли. Вижте го"
|
||||
},
|
||||
"Username": {
|
||||
"message": "Потребител"
|
||||
},
|
||||
"setUsername": {
|
||||
"message": "Задайте потребителско име"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Копиране на публичния UserID"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Елате в официалния Discord сървър за да давате предложения!"
|
||||
"message": "Елате в официалния Discord сървър, за да давате предложения!"
|
||||
},
|
||||
"hideThis": {
|
||||
"message": "Скрий това"
|
||||
"message": "Скриване на това"
|
||||
},
|
||||
"Options": {
|
||||
"message": "Настройки"
|
||||
"message": "Опции"
|
||||
},
|
||||
"showButtons": {
|
||||
"message": "Показване на бутоните в YouTube Player-а"
|
||||
"message": "Показване на бутоните в плейъра на YouTube"
|
||||
},
|
||||
"hideButtons": {
|
||||
"message": "Скриване на бутоните в YouTube Player-а"
|
||||
"message": "Скриване на бутоните в плейъра на YouTube"
|
||||
},
|
||||
"hideButtonsDescription": {
|
||||
"message": "Това скрива бутоните, които се показват в плейъра на YouTube за изпращане на сегменти за пропускане."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Оставяне в плейъра на бутона за преминаване към акцента"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Показване на бутона за информация в плейъра на YouTube"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Скриване на бутона за информация в плейъра на YouTube"
|
||||
},
|
||||
"autoHideInfoButton": {
|
||||
"message": "Автоматично скриване на бутона за информация"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Скриване на бутона за изтриване в плейъра на YouTube"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "Показване на бутона за изтриване в плейъра на YouTube"
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Активиране проследяването на броя пропускания"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "Тази функция проследява кои сегменти сте пропуснали, за да уведоми потребителите доколко приносът им е помогнал на другите и се използва като показател заедно с положителните гласове, за да се гарантира, че спамът няма да попадне в базата данни. Разширението изпраща съобщение до сървъра всеки път, когато пропуснете сегмент. Надяваме се, че повечето хора няма да променят тази настройка, така че броят на прегледите да е точен. :)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "Активиране проследяването на броя пропускания в раздели „Инкогнито“"
|
||||
},
|
||||
"enableQueryByHashPrefix": {
|
||||
"message": "Заявка по префикс на хеш"
|
||||
},
|
||||
"whatQueryByHashPrefix": {
|
||||
"message": "Вместо да се изискват сегменти от сървъра с помощта на videoID, се изпращат първите 4 знака от хеша на videoID. Този сървър ще изпрати обратно данни за всички видеоклипове с подобни хешове."
|
||||
},
|
||||
"enableRefetchWhenNotFound": {
|
||||
"message": "Повторно извличане на сегментите при нови видеоклипове"
|
||||
},
|
||||
"whatRefetchWhenNotFound": {
|
||||
"message": "Ако видеоклипът е нов и няма намерени сегменти, той ще продължи да извлича на всеки няколко минути, докато гледате."
|
||||
},
|
||||
"showNotice": {
|
||||
"message": "Отново покажете известието"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Показване на известие след пропускане на сегмент"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Известия за пропускане в пълен размер"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Малки известия за пропускане при автоматично пропускане"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Изцяло малки известия за пропускане"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Плавни известия за пропускане при автоматично пропускане"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Изцяло плавни известия за пропускане"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock ви позволява да прескачате спонсори, въведения, заключения, напомняния за абониране и други досадни части от видеоклиповете в YouTube. SponsorBlock е разширение за браузър, създадено от множество хора, което позволява на всеки да изпраща началния и крайния час на спонсорирани сегменти и други сегменти от видеоклиповете в YouTube. След като един човек подаде тази информация, всички останали с това разширение ще прескочат спонсорирания сегмент. Можете също да пропуснете части без музика при музикалните видеоклипове.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
},
|
||||
"website": {
|
||||
"message": "Уебсайт",
|
||||
"description": "Used on Firefox Store Page"
|
||||
},
|
||||
"sourceCode": {
|
||||
"message": "Програмен код",
|
||||
"description": "Used on Firefox Store Page"
|
||||
},
|
||||
"noticeUpdate": {
|
||||
"message": "Известието е обновено!",
|
||||
"description": "The first line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"noticeUpdate2": {
|
||||
"message": "Ако все още не ви харесва, натиснете бутона „Никога да не се показва“.",
|
||||
"description": "The second line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"setSkipShortcut": {
|
||||
"message": "Задайте клавиш за пропускане на сегмент"
|
||||
},
|
||||
"setStartSponsorShortcut": {
|
||||
"message": "Задайте клавиш за начало/край на сегмент"
|
||||
},
|
||||
"setSubmitKeybind": {
|
||||
"message": "Задайте клавиш за изпращане"
|
||||
},
|
||||
"keybindDescription": {
|
||||
"message": "Изберете клавиш, като го натиснете"
|
||||
},
|
||||
"keybindDescriptionComplete": {
|
||||
"message": "Клавишът е зададен за: "
|
||||
},
|
||||
"0": {
|
||||
"message": "Времето за изчакване на връзката изтече. Проверете връзката си с интернет. Ако вашият интернет работи, вероятно сървърът е претоварен или не работи."
|
||||
},
|
||||
"disableSkipping": {
|
||||
"message": "Пропускането е активирано"
|
||||
},
|
||||
"enableSkipping": {
|
||||
"message": "Пропускането е деактивирано"
|
||||
},
|
||||
"yourWork": {
|
||||
"message": "Вашата работа",
|
||||
"description": "Used to describe the section that will show you the statistics from your submissions."
|
||||
},
|
||||
"502": {
|
||||
"message": "Сървърът изглежда претоварен. Опитайте отново след няколко секунди."
|
||||
},
|
||||
"errorCode": {
|
||||
"message": "Код на грешката: "
|
||||
},
|
||||
"skip": {
|
||||
"message": "Пропускане"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Заглушаване"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Пропускане на {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Заглушаване на {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Прескачане до {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "{0} пропуснат",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} заглушено",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Прескочено до {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Деактивиране на автоматичното пропускане"
|
||||
},
|
||||
"enableAutoSkip": {
|
||||
"message": "Активиране на автоматичното пропускане"
|
||||
},
|
||||
"audioNotification": {
|
||||
"message": "Звуково известие при пропускане"
|
||||
},
|
||||
"audioNotificationDescription": {
|
||||
"message": "Звуковото известие при пропускане ще пуска звук всеки път, когато се пропусне сегмент. Ако е забранено (или автоматичното пропускане е деактивирано), няма да се пуска звук."
|
||||
},
|
||||
"showTimeWithSkips": {
|
||||
"message": "Показване на времето с премахнати пропускания"
|
||||
},
|
||||
"showTimeWithSkipsDescription": {
|
||||
"message": "Това време се показва в скоби до текущото време под лентата за прогреса. Това показва общата продължителност на видеоклипа минус всички сегменти. Това включва сегменти, маркирани само като „Показване в лентата за прогреса“."
|
||||
},
|
||||
"youHaveSkipped": {
|
||||
"message": "Пропуснали сте "
|
||||
},
|
||||
"youHaveSaved": {
|
||||
"message": "Спестили сте "
|
||||
},
|
||||
"minLower": {
|
||||
"message": "минута"
|
||||
},
|
||||
"minsLower": {
|
||||
"message": "минути"
|
||||
},
|
||||
"hourLower": {
|
||||
"message": "час"
|
||||
},
|
||||
"hoursLower": {
|
||||
"message": "часа"
|
||||
},
|
||||
"youHaveSavedTime": {
|
||||
"message": "Спестили сте на хората"
|
||||
},
|
||||
"youHaveSavedTimeEnd": {
|
||||
"message": " от живота им"
|
||||
},
|
||||
"statusReminder": {
|
||||
"message": "Проверете status.sponsor.ajay.app за състоянието на сървъра."
|
||||
},
|
||||
"changeUserID": {
|
||||
"message": "Импортиране/експортиране на вашия UserID"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Това трябва да се пази в тайна. То е като парола и не трябва да се споделя с никого. Ако някой го има, може да се представи за вас. Ако търсите своя публичен потребителски идентификатор, щракнете върху иконата на клипборда в изскачащия прозорец."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "Задаване на UserID"
|
||||
},
|
||||
"userIDChangeWarning": {
|
||||
"message": "Внимание: Промяната на UserID е постоянна. Наистина ли искате да направите това? Не забравяйте да архивирате стария си за всеки случай."
|
||||
},
|
||||
"createdBy": {
|
||||
"message": "Създаден от"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". В момента е настроено на:"
|
||||
},
|
||||
"supportOtherSites": {
|
||||
"message": "Поддръжка на YouTube-сайтове на трети страни"
|
||||
},
|
||||
"supportOtherSitesDescription": {
|
||||
"message": "Поддръжка на клиенти за YouTube на трети страни. За да активирате поддръжката, трябва да приемете допълнителните разрешения. Това НЕ работи в режим инкогнито в Chrome и други варианти на Chromium.",
|
||||
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
|
||||
},
|
||||
"supportedSites": {
|
||||
"message": "Поддържани сайтове: "
|
||||
},
|
||||
"optionsInfo": {
|
||||
"message": "Активиране поддръжката на Invidious, деактивиране на автоматичното пропускане, скриване на бутоните и др."
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"message": "Добавяне екземпляр на клиент на трета страна"
|
||||
},
|
||||
"addInvidiousInstanceDescription": {
|
||||
"message": "Добавяне на персонализиран екземпляр. Това трябва да бъде форматирано само с домейна. Пример: invidious.ajay.app"
|
||||
},
|
||||
"add": {
|
||||
"message": "Добавяне"
|
||||
},
|
||||
"addInvidiousInstanceError": {
|
||||
"message": "Това е невалиден домейн. Трябва да включва само частта на домейна. Пример: invidious.ajay.app"
|
||||
},
|
||||
"resetInvidiousInstance": {
|
||||
"message": "Нулиране списъка на Invidious"
|
||||
},
|
||||
"resetInvidiousInstanceAlert": {
|
||||
"message": "На път сте да нулирате списъка на Invidious"
|
||||
},
|
||||
"currentInstances": {
|
||||
"message": "Текущи екземпляри:"
|
||||
},
|
||||
"minDuration": {
|
||||
"message": "Минимална продължителност (секунди):"
|
||||
},
|
||||
"minDurationDescription": {
|
||||
"message": "Сегменти, по-кратки от зададената стойност, няма да бъдат пропускани или показвани в плейъра."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Продължителност на известието за пропускане (секунди):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Известието за пропускане ще остане на екрана поне толкова дълго. За ръчно пропускане може да се вижда по-дълго."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Следното предложение е по-кратко от опцията за минимална продължителност. Това може да означава, че вече е изпратено и просто е игнорирано поради тази опция. Наистина ли искате да го изпратите?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Показване на бутона за качване"
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Адрес на сървъра на SponsorBlock"
|
||||
},
|
||||
"customServerAddressDescription": {
|
||||
"message": "Адресът, който SponsorBlock използва за осъществяване на заявки към сървъра.\nОсвен ако нямате собствен екземпляр на сървър, това не трябва да се променя."
|
||||
},
|
||||
"save": {
|
||||
"message": "Запазване"
|
||||
},
|
||||
"reset": {
|
||||
"message": "Начално състояние"
|
||||
},
|
||||
"customAddressError": {
|
||||
"message": "Този адрес не е в правилния формат. Уверете се, че имате http:// или https:// в началото и няма последващи наклонени черти."
|
||||
},
|
||||
"areYouSureReset": {
|
||||
"message": "Наистина ли искате да върнете началното състояние?"
|
||||
},
|
||||
"mobileUpdateInfo": {
|
||||
"message": "m.youtube.com вече се поддържа"
|
||||
},
|
||||
"exportOptions": {
|
||||
"message": "Импортиране/експортиране на всички опции"
|
||||
},
|
||||
"whatExportOptions": {
|
||||
"message": "Това е цялата ви конфигурация в JSON. Това включва вашия userID, така че се уверете, че споделяте това разумно."
|
||||
},
|
||||
"setOptions": {
|
||||
"message": "Задаване на опции"
|
||||
},
|
||||
"exportOptionsWarning": {
|
||||
"message": "Внимание: Промяната на опциите е постоянна и може да повреди вашата инсталация. Наистина ли искате да направите това? Не забравяйте да архивирате старите си за всеки случай."
|
||||
},
|
||||
"incorrectlyFormattedOptions": {
|
||||
"message": "Този JSON не е форматиран правилно. Вашите опции не са променени."
|
||||
},
|
||||
"confirmNoticeTitle": {
|
||||
"message": "Изпращане на сегмента"
|
||||
},
|
||||
"submit": {
|
||||
"message": "Изпращане"
|
||||
},
|
||||
"cancel": {
|
||||
"message": "Отказ"
|
||||
},
|
||||
"delete": {
|
||||
"message": "Изтриване"
|
||||
},
|
||||
"preview": {
|
||||
"message": "Преглед"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "Неизпратен"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "Изследване"
|
||||
},
|
||||
"edit": {
|
||||
"message": "Редактиране"
|
||||
},
|
||||
"copyDebugInformation": {
|
||||
"message": "Копиране на информацията за отстраняване на грешки в клипборда"
|
||||
},
|
||||
"copyDebugInformationFailed": {
|
||||
"message": "Неуспешно записване в клипборда"
|
||||
},
|
||||
"copyDebugInformationOptions": {
|
||||
"message": "Копира информацията в клипборда, за да се предостави на разработчика при възникване на грешка или когато разработчикът поиска това. Деликатната информация като вашия user ID, канали в белия списък и потребителски адрес на сървъра са премахнати. Съдържа се обаче информация като вашия потребителски агент, браузър, операционна система и номер на версия на разширението. "
|
||||
},
|
||||
"copyDebugInformationComplete": {
|
||||
"message": "Информацията за отстраняване на грешки е копирана в клипборда. Чувствайте се свободни да премахнете всяка информация, която предпочитате да не споделяте. Запазете това в текстов файл или го поставете в доклада за грешки."
|
||||
},
|
||||
"theKey": {
|
||||
"message": "Клавишът"
|
||||
},
|
||||
"keyAlreadyUsed": {
|
||||
"message": "е обвързан с друго действие. Моля, изберете друг клавиш."
|
||||
},
|
||||
"to": {
|
||||
"message": "до",
|
||||
@@ -104,52 +524,318 @@
|
||||
"category_sponsor": {
|
||||
"message": "Спонсорство"
|
||||
},
|
||||
"category_sponsor_description": {
|
||||
"message": "Платена промоция, платени препоръки и директни реклами. Не за самореклама или безплатни препоръки за каузи/създатели/уебсайтове/продукти, които се харесват на автора."
|
||||
},
|
||||
"category_selfpromo": {
|
||||
"message": "Неплатена/Само-реклама"
|
||||
"message": "Неплатена/Самореклама"
|
||||
},
|
||||
"category_selfpromo_description": {
|
||||
"message": "Подобно на \"спонсорство\", но е неплатено. Това включва merchandise, дарения или информация с кого каналът има сътрудничество."
|
||||
"message": "Подобно на „спонсорство“, но за безплатна реклама или самореклама. Това включва търговия със стоки, дарения или информация с кого каналът има сътрудничество."
|
||||
},
|
||||
"category_interaction": {
|
||||
"message": "Напомняне за действие (абониране)"
|
||||
},
|
||||
"category_interaction_description": {
|
||||
"message": "Когато има кратко напомняне да харесате, да се абонирате или да последвате канала по средата на съдържанието. Ако е дълго или заради нещо специфично, трябва да е под \"само-реклама\"."
|
||||
"message": "Когато има кратко напомняне да харесате, да се абонирате или да последвате канала по средата на съдържанието. Ако е дълго или за нещо специфично, трябва да е под „самореклама“."
|
||||
},
|
||||
"category_interaction_short": {
|
||||
"message": "Напомняне за взаимодействие"
|
||||
},
|
||||
"category_intro": {
|
||||
"message": "Антракт/Начална анимация"
|
||||
},
|
||||
"category_intro_description": {
|
||||
"message": "Интервал без реално съдържание. Може да бъде пауза, статичен кадър, повтаряща се анимация. Това не трябва да се използва за преходи, съдържащи информация."
|
||||
},
|
||||
"category_intro_short": {
|
||||
"message": "Антракт"
|
||||
},
|
||||
"category_outro": {
|
||||
"message": "Крайни картички/Заслуги"
|
||||
},
|
||||
"category_outro_description": {
|
||||
"message": "Заслуги или когато се показват крайните карти на YouTube. Не за заключения с информация."
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "Кратко резюме/Обобщение"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "Бързо обобщение на предишни епизоди или преглед на това, което предстои по-късно в текущия видеоклип. Предназначен за монтирани заедно клипове, а не за речеви обобщения."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Пълнеж извън темата"
|
||||
},
|
||||
"category_filler_description": {
|
||||
"message": "Съпътстващи сцени, добавени само за пълнеж или хумор, които не са необходими за разбирането на основното съдържание на видеоклипа. Това не трябва да включва сегменти, предоставящи контекст или справочни данни."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Пълнеж"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Музика: Част без музика"
|
||||
},
|
||||
"category_music_offtopic_description": {
|
||||
"message": "За използване само в музикални видеоклипове. Това трябва да се използва само за части от музикални видеоклипове, които вече не са обхванати от друга категория."
|
||||
},
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Без музика"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Акцент"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Частта от видеото, която повечето хора търсят. Подобно на коментарите „Видеото започва от х“."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Поточно предаване: Четене на съобщения/дарения"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Четене на съобщения"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Забрани"
|
||||
"autoSkip": {
|
||||
"message": "Автоматично пропускане"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Ръчно Прескачане"
|
||||
"message": "Ръчно пропускане"
|
||||
},
|
||||
"showOverlay": {
|
||||
"message": "Показване в seek лентата"
|
||||
"message": "Показване в лентата на прогреса"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Деактивиране"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Автоматично прескачане до началото"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Питане, когато видеото се зарежда"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Показване в лентата на прогреса"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Автоматично пропускане на всички сегменти, когато има сегмент без музика"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Разрешаване на сегменти, които заглушават звука, вместо да се пропускат"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Вашият цвят не е форматиран правилно. Трябва да бъде 3- или 6-цифрен hex код с \"#\" в началото."
|
||||
"message": "Вашият цвят не е форматиран правилно. Трябва да бъде 3- или 6-цифрен шестнадесетичен код с „#“ в началото."
|
||||
},
|
||||
"previewColor": {
|
||||
"message": "Цвят на неизпратен сегмент",
|
||||
"description": "Referring to submissions that have not been sent to the server yet."
|
||||
},
|
||||
"seekBarColor": {
|
||||
"message": "Цвят на лентата на прогреса"
|
||||
},
|
||||
"category": {
|
||||
"message": "Категория"
|
||||
},
|
||||
"skipOption": {
|
||||
"message": "Метод за пропускане",
|
||||
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
|
||||
},
|
||||
"enableTestingServer": {
|
||||
"message": "Активиране на сървъра за бета тестване"
|
||||
},
|
||||
"whatEnableTestingServer": {
|
||||
"message": "Вашите предложения и гласове НЯМА ДА СЕ БРОЯТ към основния сървър. Използвайте това само за тестване."
|
||||
},
|
||||
"testingServerWarning": {
|
||||
"message": "Всички предложения и гласове НЯМА ДА СЕ БРОЯТ към основния сървър, докато се свързвате с тестовия сървър. Не забравяйте да деактивирате това, когато искате да правите реални предложения."
|
||||
},
|
||||
"bracketNow": {
|
||||
"message": "(Сега)"
|
||||
},
|
||||
"moreCategories": {
|
||||
"message": "Още категории"
|
||||
},
|
||||
"chooseACategory": {
|
||||
"message": "Изберете категория"
|
||||
},
|
||||
"enableThisCategoryFirst": {
|
||||
"message": "За да изпратите сегменти с категория „{0}“, трябва да я активирате от опциите. Ще бъдете пренасочени към опциите сега.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Внимание: Само един сегмент от този тип може да е активен. Изпращането на няколко ще доведе до показване на случаен."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Трябва да изберете категория за всички сегменти, които изпращате!"
|
||||
},
|
||||
"bracketEnd": {
|
||||
"message": "(Край)"
|
||||
},
|
||||
"hiddenDueToDownvote": {
|
||||
"message": "скрито: глас против"
|
||||
},
|
||||
"hiddenDueToDuration": {
|
||||
"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, ако мислите така, направете коментар тук:"
|
||||
},
|
||||
"videoInfoFetchFailed": {
|
||||
"message": "Изглежда, че нещо блокира способността на SponsorBlock да получава видео данни. Моля, вижте https://github.com/ajayyy/SponsorBlock/issues/741 за повече информация."
|
||||
},
|
||||
"youtubePermissionRequest": {
|
||||
"message": "Изглежда, че SponsorBlock не може да достигне API на YouTube. За да поправите това, приемете подканата за разрешение, която ще се появи след това, изчакайте няколко секунди и след това презаредете страницата."
|
||||
},
|
||||
"acceptPermission": {
|
||||
"message": "Даване на разрешение"
|
||||
},
|
||||
"permissionRequestSuccess": {
|
||||
"message": "Искането за разрешение е успешно!"
|
||||
},
|
||||
"permissionRequestFailed": {
|
||||
"message": "Искането за разрешение не бе успешно, натиснахте ли Отказ?"
|
||||
},
|
||||
"adblockerIssueWhitelist": {
|
||||
"message": "Ако не можете да разрешите това, деактивирайте настройката „Принудителна проверка на канала преди пропускане“, тъй като SponsorBlock не може да извлече информацията за канала за този видеоклип"
|
||||
},
|
||||
"forceChannelCheck": {
|
||||
"message": "Принудителна проверка на канала преди пропускане"
|
||||
},
|
||||
"whatForceChannelCheck": {
|
||||
"message": "По подразбиране ще пропусне сегменти веднага, преди дори да разбере какъв е каналът. По подразбиране някои сегменти в началото на видеоклипа може да бъдат пропуснати в канали от белия списък. Активирането на тази опция ще предотврати това, но при всички пропускания ще има леко забавяне, тъй като получаването на ID на канала може да отнеме известно време. Това забавяне може да бъде незабележимо, ако имате бърз интернет."
|
||||
},
|
||||
"forceChannelCheckPopup": {
|
||||
"message": "Помислете за активиране на „Принудителна проверка на канала преди пропускане“"
|
||||
},
|
||||
"downvoteDescription": {
|
||||
"message": "Грешно/Неправилно Време"
|
||||
"message": "Грешно/Неправилно време"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Грешна Категория"
|
||||
"message": "Промяна на категорията"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Това видео е категоризирано като музика. Сигурни ли сте, че това има спонсор? Ако това всъщност е „Немузикален сегмент“, отворете опциите на разширението и активирайте тази категория. След това можете да изпратите този сегмент като „Немузикален“ вместо като спонсор. Моля, прочетете указанията, ако сте объркани."
|
||||
},
|
||||
"multipleSegments": {
|
||||
"message": "Няколко Сегмента"
|
||||
"message": "Няколко сегмента"
|
||||
},
|
||||
"guidelines": {
|
||||
"message": "Правила"
|
||||
"message": "Насоки"
|
||||
},
|
||||
"readTheGuidelines": {
|
||||
"message": "Прочетете насоките!!",
|
||||
"description": "Show the first time they submit or if they are \"high risk\""
|
||||
},
|
||||
"categoryUpdate1": {
|
||||
"message": "Категориите са тук!"
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Отворете опциите, за да пропускате въведения, заключения, продажба на стоки и т.н."
|
||||
},
|
||||
"help": {
|
||||
"message": "Помощ"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Разбрах",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"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": "Получихте предупреждение и временно не можете да изпращате сегменти. Това означава, че забелязахме, че допускате някои често срещани грешки, които не са злонамерени. Моля, просто потвърдете, че разбирате правилата и ние ще премахнем предупреждението. Можете също да се присъедините към този чат от discord.gg/SponsorBlock или matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Гласуването е отхвърлено поради предупреждение. Щракнете, за да отворите чат и да го разрешите, или се върнете по-късно, когато имате време.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Дарение"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"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": "Научете повече"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Гласуване против и създаване на локално копие, за да го изпратите отново"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Отваряне на wiki страницата на тази категория."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Копиране и гласуване против"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Продължаване на гласуването"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Това незабавно ще се приложи към вашите сегменти"
|
||||
},
|
||||
"SponsorTimeEditScrollNewFeature": {
|
||||
"message": "Използвайте колелото на мишката, докато държите курсора върху полето за редактиране, за да коригирате бързо времето. Комбинации с клавиша ctrl или shift могат да се използват за фина настройка на промените."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Ново! Пропускайте части извън темата и шегите с категорията „Пълнеж“. Активирайте я в опциите"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Znovu přeskočit"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Zrušit ztlumení"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Pozastaveno"
|
||||
},
|
||||
@@ -74,7 +77,7 @@
|
||||
"message": "Nebyly nalezeny žádné segmenty"
|
||||
},
|
||||
"sponsorStart": {
|
||||
"message": "Segment nyní začíná"
|
||||
"message": "Nyní začíná segment"
|
||||
},
|
||||
"sponsorEnd": {
|
||||
"message": "Segment nyní končí"
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "Nebylo nalezeno žádné YouTube video.\nPokud je to špatně, obnovte záložku."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Aktualizovat segmenty"
|
||||
},
|
||||
"success": {
|
||||
"message": "Úspěch!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Došlo k chybě připojení. Kód chyby: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Chcete odeslat segmenty pro video s id"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Vymazat segmenty"
|
||||
},
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Nastavit uživatelské jméno"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Kopírovat veřejné uživatelské ID"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Připojte se k oficiálnímu Discord serveru k podání návrhů a zpětné vazby!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Skryje tlačítka, která se zobrazí v YouTube přehrávači pro přeskočení segmentů."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Nechat tlačítko přeskočení na zvýraznění v přehrávači"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Zobrazit informační tlačítko v YouTube přehrávači"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Skrýt informační tlačítko v YouTube přehrávači"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Toto je tlačítko, které otevře vyskakovací nabídku na YouTube stránce."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Automaticky skrýt informační tlačítko"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Skrýt tlačítko Odstranit v YouTube přehrávači"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Zobrazit tlačítko Odstranit v YouTube přehrávači"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Toto je tlačítko v YouTube přehrávači, které odebere všechny vaše neodeslané segmenty v současném videu."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Povolit počítadlo přeskočení"
|
||||
},
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Znovu zobrazit upozornění"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Zobrazit upozornění po přeskočení segmentu"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Oznámení o přeskočení v plné velikosti"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Malá oznámení o automatickém přeskočení"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Všechna malá oznámení o přeskočení"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Vybledlá oznámení o automatickém přeskočení"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Všechna vybledlá oznámení o přeskočení"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock vám umožní přeskakovat sponzorské sekce, intra, outra, oznámení k odběru a další otravné části YouTube videí. SponsorBlock je crowdsourcované rozšíření prohlížeče, které dává komukoli možnost odeslat začátek a konec sponzorovaných segmentů a dalších segmentů YouTube videí. Jakmile jedna osoba odešle tuto informaci, všichni ostatní s tímto rozšířením automaticky přeskočí sponzorovaný segment. Můžete také přeskakovat nehudební sekce v hudebních videích.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -239,7 +263,7 @@
|
||||
"description": "The second line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"setSkipShortcut": {
|
||||
"message": "Nastavit klíč pro přeskočení segmentu"
|
||||
"message": "Nastavit klávesu pro přeskočení segmentu"
|
||||
},
|
||||
"setStartSponsorShortcut": {
|
||||
"message": "Nastavte klávesu pro spuštění/zastavení segmentu"
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Přeskočit"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Ztlumit"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Přeskočit {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Ztlumit {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Přeskočit na {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "- přeskočeno"
|
||||
"message": "Segment {0} přeskočen",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "Segment {0} ztlumen",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Přeskočeno na {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Zakázat automatické přeskočení"
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Importovat / exportovat vaše UserID"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Toto byste měli udržet v soukromí. Je to jako heslo a neměli byste jej s nikým sdílet. Pokud jej někdo má, může se za vás vydávat."
|
||||
"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"
|
||||
@@ -341,12 +384,6 @@
|
||||
"createdBy": {
|
||||
"message": "Vytvořil"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Automatické přeskočení"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Zobrazit upozornění po přeskočení segmentu"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Je momentálně nastaveno na:"
|
||||
},
|
||||
@@ -390,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Segmenty kratší než nastavená hodnota nebudou přeskočeny nebo zobrazeny v přehrávači."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Délka trvání oznámení o přeskočení (v sekundách):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Oznámení o přeskočení zůstane na obrazovce alespoň po tuto dobu. Pro ruční může být zobrazeno déle."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Váš příspěvek je kratší než vaše možnost nejkratší doby trvání. To by mohlo znamenat, že někdo segment již odeslal, a je jenom ignorován kvůli této možnosti. Opravdu chcete odeslat váš příspěvek?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Zobrazit tlačítko Nahrát"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Toto tlačítko se objeví v YouTube přehrávači po vybrání časového razítka a po připravení k odeslání."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Adresa serveru SponsorBlock"
|
||||
},
|
||||
@@ -523,6 +563,15 @@
|
||||
"category_preview_description": {
|
||||
"message": "Rychlé shrnutí předchozích epizod nebo náhled toho, co se objeví v aktuálním videu. Myšleno pro upravené sloučené klipy, ne pro mluvená shrnutí."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Výplň"
|
||||
},
|
||||
"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í."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Výplň"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Hudba: nehudební sekce"
|
||||
},
|
||||
@@ -532,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Jiné než hudba"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Zvýraznění"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Část videa, kterou hledá většina lidí. Podobné komentářům typu \"Video začíná v x\"."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Livestream: Čtení donatů / zpráv"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Čtení zpráv"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Zakázat"
|
||||
"autoSkip": {
|
||||
"message": "Automatické přeskočení"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Ruční přeskočení"
|
||||
@@ -547,6 +602,24 @@
|
||||
"showOverlay": {
|
||||
"message": "Zobrazit v liště"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Zakázat"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Automatické přeskočení na začátek"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Zeptat se při načtení videa"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Zobrazit v liště"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Automaticky přeskočit všechny segmenty, když je ve videu nehudební segment"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Povolit segmenty, které místo přeskočení ztlumují zvuk"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Vaše barva má nesprávný formát. Měl by to být 3 nebo 6 znaků dlouhý HEX kód s křížkem na začátku."
|
||||
},
|
||||
@@ -586,6 +659,9 @@
|
||||
"message": "Pro odeslání segmentů v kategorii \"{0}\" to nejprve musíte povolit v nastavení. Nyní budete přesměrováni do nastavení.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Varování: tento typ segmentu může být aktivní najednou pouze jeden. Odeslání více segmentů způsobí zobrazení náhodného segmentu."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Musíte vybrat kategorii pro všechny odeslané segmenty!"
|
||||
},
|
||||
@@ -633,7 +709,7 @@
|
||||
"message": "Nesprávné / špatné časování"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Špatná kategorie"
|
||||
"message": "Změnit kategorii"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Toto video je kategorizováno jako hudba. Jste si jisti, že je v něm sponzorská sekce? Pokud se opravdu jedná o \"Nehudební segment\", otevřete nastavení a povolte tuto kategorii. Poté budete moct odeslat segment jako \"Nehudební\" místo sponzorského. Pokud jste zmateni, přečtěte si prosím pokyny."
|
||||
@@ -654,11 +730,12 @@
|
||||
"categoryUpdate2": {
|
||||
"message": "Otevřít možnosti pro přeskočení intra, outra, merche apod."
|
||||
},
|
||||
"experimentUnlistedTitle": {
|
||||
"message": "Pomozte zabránit zmizení tohoto"
|
||||
"help": {
|
||||
"message": "Nápověda"
|
||||
},
|
||||
"experimentUnlistedText": {
|
||||
"message": "Toto video bylo detekováno jako neuvedené a bylo nahráno před rokem 2017\nStará neuvedená videa budou nastavena příští měsíc na soukromá\nSbíráme *veřejná* videa pro zálohu\nChtěli byste nám anonymně poslat toto video?\nhttps://support.google.com/youtube/answer/9230970"
|
||||
"GotIt": {
|
||||
"message": "Rozumím",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Odhlásit se ze všech budoucích experimentů",
|
||||
@@ -666,5 +743,107 @@
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "Skrýt napořád"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Dostali jste varování a nemůžete dočasně přidávat segmenty. To znamená, že jsme si všimli, že děláte běžné chyby, které nejsou škodlivé, stačí potvrdit přečtení pravidel a odebereme varování. Tají se můžete připojit do tohoto chatu pomocí discord.gg/SponsorBlock nebo matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Hlas zamítnut kvůli varování. Klikněte pro otevření chatu pro vyřešení, nebo se vraťte později, až budete mít čas.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Přispět"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Skrýt odkaz na přispění"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Děkujeme za instalaci SponsorBlocku."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Zkontrolujte prosím možnosti níže"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Spousta funkcí je ve výchozím nastavení zakázána. Pokud chcete přeskakovat intra, outra, používat Invidious atd., povolte je níže. Můžete také zobrazit/skrýt UI prvky."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Jak funguje přeskakování"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "Segmenty videa budou automaticky přeskočeny, pokud budou nalezeny v databázi. Můžete si otevřít vyskakovací okno kliknutím na ikonu rozšíření pro náhled, co jsou zač."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Kdykoli přeskočíte segment, dostanete oznámení. Pokud je časování nesprávné, můžete hlasovat proti kliknutím na palec dolů! Také můžete hlasovat ve vyskakovacím okně."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Odesílání"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "Odeslání může být provedeno buď ve vyskakovacím okně kliknutím na tlačítko \"Nyní začíná segment\" v přehrávači videa nebo na tlačítkách na přehrávači."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Kliknutím na tlačítko přehrávání označí začátek segmentu a kliknutí na ikonu stop označuje konec. Před odesláním si můžete připravit více segmentů. Kliknutím na tlačítko k nahrání odešlete vaše segmenty. Kliknutím na ikonu koše vše smažete."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Úprava"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Pokud jste něco pokazili, můžete kliknutím na šipku nahoru upravit nebo odstranit své segmenty."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Je to příliš pomalé"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Pokud je chcete použít, jsou zde zkratky. Stiskněte pomlčku pro označení začátku/konce sponzorského segmentu a klikněte na apostrof pro odeslání. Tyto zkratky lze změnit v možnostech. Pokud nepoužíváte QWERTY, měli byste si je nejspíše změnit."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Mohu získat kopii databáze? Co se stane, pokud zmizíte?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Databáze je veřejná a dostupná na"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "Zdrojový kód je volně dostupný. Takže i když se mi něco stane, vaše příspěvky nebudou ztraceny."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Novinky a jak to funguje"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Kde získám zdrojový kód?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Poděkování"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Zjistit více"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Zahlasuje proti a vytvoří pro vás lokální kopii pro opětovné odeslání"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Otevřít wiki stránku této kategorie."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Zkopírovat a hlasovat proti"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Pokračovat v hlasování"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Toto bude okamžitě platit pro vaše segmenty"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Novinka! Překakujte výplňové části a vtipy s kategorií výplň. Povolte ji v nastavení"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "d",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "h",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Spring over"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Lyd til"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Sat på pause"
|
||||
},
|
||||
@@ -66,5 +69,526 @@
|
||||
},
|
||||
"Unknown": {
|
||||
"message": "Der skete en fejl da du prøvede at indsende dine reklame tider, prøv lige igen."
|
||||
},
|
||||
"sponsorFound": {
|
||||
"message": "Denne video har segmenter i databasen!"
|
||||
},
|
||||
"sponsor404": {
|
||||
"message": "Ingen segmenter fundet"
|
||||
},
|
||||
"sponsorStart": {
|
||||
"message": "Segment Begynder Nu"
|
||||
},
|
||||
"sponsorEnd": {
|
||||
"message": "Segment Slutter Nu"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "Annuller Oprettelse Af Segment"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "Ingen YouTube-video fundet.\nHvis dette er forkert, så genindlæs siden."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Opdater segmenter"
|
||||
},
|
||||
"success": {
|
||||
"message": "Succes!"
|
||||
},
|
||||
"voted": {
|
||||
"message": "Stemt!"
|
||||
},
|
||||
"serverDown": {
|
||||
"message": "Det ser ud til at serveren er nede. Kontakt udvikleren straks."
|
||||
},
|
||||
"connectionError": {
|
||||
"message": "Der opstod en forbindelsesfejl. Fejlkode: "
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Ryd Segmenter"
|
||||
},
|
||||
"openPopup": {
|
||||
"message": "Åbn SponsorBloker Pop-op"
|
||||
},
|
||||
"closePopup": {
|
||||
"message": "Luk Pop-op"
|
||||
},
|
||||
"SubmitTimes": {
|
||||
"message": "Indsend Segmenter"
|
||||
},
|
||||
"submitCheck": {
|
||||
"message": "Er du sikker på, at du vil indsende dette?"
|
||||
},
|
||||
"whitelistChannel": {
|
||||
"message": "Hvidliste kanal"
|
||||
},
|
||||
"removeFromWhitelist": {
|
||||
"message": "Fjern kanal fra hvidliste"
|
||||
},
|
||||
"voteOnTime": {
|
||||
"message": "Stem På Et Segment"
|
||||
},
|
||||
"Submissions": {
|
||||
"message": "Indsendelser"
|
||||
},
|
||||
"savedPeopleFrom": {
|
||||
"message": "Du har reddet folk fra "
|
||||
},
|
||||
"viewLeaderboard": {
|
||||
"message": "Topliste"
|
||||
},
|
||||
"recordTimesDescription": {
|
||||
"message": "Indsend"
|
||||
},
|
||||
"submissionEditHint": {
|
||||
"message": "Sektionsredigering vises, når du klikker på afsend",
|
||||
"description": "Appears in the popup to inform them that editing has been moved to the video player."
|
||||
},
|
||||
"popupHint": {
|
||||
"message": "Tip: Du kan opsætte keybinds til indsendelse i indstillingerne"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"Username": {
|
||||
"message": "Brugernavn"
|
||||
},
|
||||
"setUsername": {
|
||||
"message": "Angiv Brugernavn"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Kopier Offentligt Bruger-ID"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Kom til den officielle Discord-server for at give forslag og feedback!"
|
||||
},
|
||||
"hideThis": {
|
||||
"message": "Skjul dette"
|
||||
},
|
||||
"Options": {
|
||||
"message": "Indstillinger"
|
||||
},
|
||||
"showButtons": {
|
||||
"message": "Vis Knapper På YouTube-Afspiller"
|
||||
},
|
||||
"hideButtons": {
|
||||
"message": "Skjul Knapper På YouTube-Afspiller"
|
||||
},
|
||||
"hideButtonsDescription": {
|
||||
"message": "Dette skjuler knapperne, der vises på YouTube-afspilleren for indsende springe segmenter."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Behold Knappen Spring Til Fremhævning På Afspilleren"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Vis Info-Knap På YouTube-Afspiller"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Skjul Info-Knap På YouTube-Afspiller"
|
||||
},
|
||||
"autoHideInfoButton": {
|
||||
"message": "Auto-Skjul Info-Knap"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Skjul Slet-Knappen på YouTube-Afspiller"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "Vis Slet-Knappen på YouTube-Afspiller"
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Aktiver Optælling Af Antal Spring Over"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "Denne funktion registrerer hvilke segmenter, du har sprunget over, så brugere kan se, hvor meget deres bidrag har hjulpet andre, og bruges som en måleenhed sammen med upvotes for at sikre, at spam ikke kommer ind i databasen. Udvidelsen sender en besked til serveren hver gang, du springer et segment over. Forhåbentlig ændrer de fleste ikke denne indstilling, så visningstallene er korrete. :)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "Aktiver Optælling Af Antal Spring Over I Private-/Inkognitovinduer"
|
||||
},
|
||||
"enableQueryByHashPrefix": {
|
||||
"message": "Forespørg Efter Hashpræfiks"
|
||||
},
|
||||
"whatQueryByHashPrefix": {
|
||||
"message": "I stedet for at anmode om segmenter fra serveren ved hjælp af videoID'et, sendes de første 4 tegn i hashen af videoID'et. Serveren sender data tilbage for alle videoer med lignende hashes."
|
||||
},
|
||||
"enableRefetchWhenNotFound": {
|
||||
"message": "Opdater Segmenter På Nye Videoer"
|
||||
},
|
||||
"whatRefetchWhenNotFound": {
|
||||
"message": "Hvis videoen er ny, og der ikke er nogle segmenter fundet, vil den opdatere hvert par minutter, mens du ser."
|
||||
},
|
||||
"showNotice": {
|
||||
"message": "Vis Bemærkning Igen"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Vis Bemærkning Efter Et Segment Skippes"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Fuld Størrelse Skip-Bemærkninger"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Små Skip-Bemærkninger for Auto-Skip"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Alle Små Skip-Bemærkninger"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Faded Skip-Bemærkninger for Auto-Skip"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Alle Faded Skip-Bemærkninger"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsoBlock lader dig skippe sponsorer, introer, outroer, abonnement påmindelser og andre irriterende dele af YouTube-Videoer. SponsorBlock er en crowdsourced browerudvidelse, hvor alle kan indsende start- og sluttidspunkter for sponsorerede og andre segmenter i YouTube-Videoer. Du kan også springe over de dele af musikvideoer, som ikke er musik.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
},
|
||||
"website": {
|
||||
"message": "Hjemmeside",
|
||||
"description": "Used on Firefox Store Page"
|
||||
},
|
||||
"sourceCode": {
|
||||
"message": "Kildekode",
|
||||
"description": "Used on Firefox Store Page"
|
||||
},
|
||||
"noticeUpdate": {
|
||||
"message": "Meddelelsen er blevet opgraderet!",
|
||||
"description": "The first line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"noticeUpdate2": {
|
||||
"message": "Hvis du stadig ikke kan lide det, så tryk på aldrig vis knappen.",
|
||||
"description": "The second line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"setSkipShortcut": {
|
||||
"message": "Indstil tast for at springe et segment over"
|
||||
},
|
||||
"setStartSponsorShortcut": {
|
||||
"message": "Indstil tast til start/stop segment tastaturbinding"
|
||||
},
|
||||
"setSubmitKeybind": {
|
||||
"message": "Indstil tast til indsendelse tastaturbinding"
|
||||
},
|
||||
"keybindDescription": {
|
||||
"message": "Vælg en tast ved at skrive den"
|
||||
},
|
||||
"keybindDescriptionComplete": {
|
||||
"message": "Tastaturbindingen er blevet sat til: "
|
||||
},
|
||||
"0": {
|
||||
"message": "Forbindelsestimeout. Tjek din internetforbindelse. Hvis dit internet fungerer, er serveren sandsynligvis overbelastet eller nede."
|
||||
},
|
||||
"disableSkipping": {
|
||||
"message": "Spring over er aktiveret"
|
||||
},
|
||||
"enableSkipping": {
|
||||
"message": "Spring over er deaktiveret"
|
||||
},
|
||||
"yourWork": {
|
||||
"message": "Dit Arbejde",
|
||||
"description": "Used to describe the section that will show you the statistics from your submissions."
|
||||
},
|
||||
"502": {
|
||||
"message": "Serveren virker at være overbelastet. Prøv igen om et par sekunder."
|
||||
},
|
||||
"errorCode": {
|
||||
"message": "Fejlkode: "
|
||||
},
|
||||
"skip": {
|
||||
"message": "Spring Over"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Gør Tavs"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Spring {0} over?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Gør {0} tavs?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Spring til {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "{0} Sprunget Over",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} Tavsgjort",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Skipped til {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Deaktiver Auto-Skip"
|
||||
},
|
||||
"enableAutoSkip": {
|
||||
"message": "Aktiver Auto-Skip"
|
||||
},
|
||||
"audioNotification": {
|
||||
"message": "Lydnofikation på Skip"
|
||||
},
|
||||
"audioNotificationDescription": {
|
||||
"message": "Lydnotifikation ved skip vil spille en lyd når et segment skippes. Hvis deaktiveret (eller auto-skip er deaktiveret) vil ingen lyd blive spillet."
|
||||
},
|
||||
"showTimeWithSkips": {
|
||||
"message": "Vis Tid Med Skip Fjernet"
|
||||
},
|
||||
"showTimeWithSkipsDescription": {
|
||||
"message": "Denne tid vises i parantes ved siden af den aktuelle tid under søgelinjen. Dette viser den totale videovarighed minus alle segmenter. Dette inkluderer segmenter markeret som kun \"Vis I Søgelinjen\"."
|
||||
},
|
||||
"youHaveSkipped": {
|
||||
"message": "Du har sprunget over "
|
||||
},
|
||||
"youHaveSaved": {
|
||||
"message": "Du har gemt dig selv "
|
||||
},
|
||||
"minLower": {
|
||||
"message": "minut"
|
||||
},
|
||||
"minsLower": {
|
||||
"message": "minutter"
|
||||
},
|
||||
"hourLower": {
|
||||
"message": "time"
|
||||
},
|
||||
"hoursLower": {
|
||||
"message": "timer"
|
||||
},
|
||||
"youHaveSavedTime": {
|
||||
"message": "Du har sparret folk"
|
||||
},
|
||||
"youHaveSavedTimeEnd": {
|
||||
"message": " af deres liv"
|
||||
},
|
||||
"statusReminder": {
|
||||
"message": "Tjek status.sponsor.ajay.app for serverstatus."
|
||||
},
|
||||
"changeUserID": {
|
||||
"message": "Importer/Eksporter Dit Bruger-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"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"createdBy": {
|
||||
"message": "Oprettet Af"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Det er i øjeblikket sat til:"
|
||||
},
|
||||
"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: "
|
||||
},
|
||||
"optionsInfo": {
|
||||
"message": "Aktiver Invidious understøttelse, deaktiver auto spring over, skjul knapper og mere."
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"message": "Tilføj Tredjeparts Klientinstans"
|
||||
},
|
||||
"addInvidiousInstanceDescription": {
|
||||
"message": "Tilføj brugerdefineret instans. Dette skal formateres med KUN domænet. Eksempel: invidious.ajay.app"
|
||||
},
|
||||
"add": {
|
||||
"message": "Tilføj"
|
||||
},
|
||||
"addInvidiousInstanceError": {
|
||||
"message": "Dette er et ugyldigt domæne. Dette bør KUN omfatte domænedele. Eksempel: invidious.ajay.app"
|
||||
},
|
||||
"resetInvidiousInstance": {
|
||||
"message": "Nulstil Liste over Invidious-Instanser"
|
||||
},
|
||||
"resetInvidiousInstanceAlert": {
|
||||
"message": "Du er ved at nulstille listen over Invidious-instancer"
|
||||
},
|
||||
"currentInstances": {
|
||||
"message": "Nuværende Instans:"
|
||||
},
|
||||
"minDuration": {
|
||||
"message": "Minimumsvarighed (sekunder):"
|
||||
},
|
||||
"minDurationDescription": {
|
||||
"message": "Segmenter kortere end den indstillede værdi vil ikke blive sprunget over eller vist i spilleren."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Spring meddelelsesvarighed over (sekunder):"
|
||||
},
|
||||
"save": {
|
||||
"message": "Gem"
|
||||
},
|
||||
"reset": {
|
||||
"message": "Nulstil"
|
||||
},
|
||||
"areYouSureReset": {
|
||||
"message": "Er du sikker på, at du ønsker at nulstille dette?"
|
||||
},
|
||||
"mobileUpdateInfo": {
|
||||
"message": "m.youtube.com understøttes nu"
|
||||
},
|
||||
"exportOptions": {
|
||||
"message": "Importer/Eksporter Alle Indstillinger"
|
||||
},
|
||||
"setOptions": {
|
||||
"message": "Indstil Indstillinger"
|
||||
},
|
||||
"confirmNoticeTitle": {
|
||||
"message": "Indsend Segment"
|
||||
},
|
||||
"submit": {
|
||||
"message": "Indsend"
|
||||
},
|
||||
"cancel": {
|
||||
"message": "Annuller"
|
||||
},
|
||||
"delete": {
|
||||
"message": "Slet"
|
||||
},
|
||||
"preview": {
|
||||
"message": "Forhåndsvisning"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "Ikke Indsendt"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "Undersøg"
|
||||
},
|
||||
"edit": {
|
||||
"message": "Rediger"
|
||||
},
|
||||
"theKey": {
|
||||
"message": "Tasten"
|
||||
},
|
||||
"to": {
|
||||
"message": "til",
|
||||
"description": "Used between segments. Example: 1:20 to 1:30"
|
||||
},
|
||||
"category_sponsor": {
|
||||
"message": "Sponsor"
|
||||
},
|
||||
"category_selfpromo": {
|
||||
"message": "Ubetalt/Egen Markedsføring"
|
||||
},
|
||||
"category_interaction": {
|
||||
"message": "Påmindelse Om Interaktion (Abonnement)"
|
||||
},
|
||||
"category_interaction_short": {
|
||||
"message": "Påmindelse Om Interaktion"
|
||||
},
|
||||
"category_intro": {
|
||||
"message": "Pause/Intro-Animation"
|
||||
},
|
||||
"category_intro_short": {
|
||||
"message": "Pause"
|
||||
},
|
||||
"category_outro": {
|
||||
"message": "Slutkort/Kreditter"
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "Forhåndsvisning/Opsamling"
|
||||
},
|
||||
"skipOption": {
|
||||
"message": "Spring Over Indstillinger",
|
||||
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
|
||||
},
|
||||
"enableTestingServer": {
|
||||
"message": "Aktiver Betatestserver"
|
||||
},
|
||||
"bracketNow": {
|
||||
"message": "(Nu)"
|
||||
},
|
||||
"moreCategories": {
|
||||
"message": "Flere Kategorier"
|
||||
},
|
||||
"chooseACategory": {
|
||||
"message": "Vælg en Kategori"
|
||||
},
|
||||
"bracketEnd": {
|
||||
"message": "(Slut)"
|
||||
},
|
||||
"hiddenDueToDownvote": {
|
||||
"message": "skjult: downvote"
|
||||
},
|
||||
"hiddenDueToDuration": {
|
||||
"message": "skjult: for kort"
|
||||
},
|
||||
"acceptPermission": {
|
||||
"message": "Accepter tilladelse"
|
||||
},
|
||||
"permissionRequestSuccess": {
|
||||
"message": "Tilladelsesandmodning lykkedes!"
|
||||
},
|
||||
"permissionRequestFailed": {
|
||||
"message": "Tilladelsesanmodning mislykkedes, klikkede du på afvis?"
|
||||
},
|
||||
"downvoteDescription": {
|
||||
"message": "Ukorrekt/Forkert Timing"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Skift Kategori"
|
||||
},
|
||||
"multipleSegments": {
|
||||
"message": "Adskillige Segmenter"
|
||||
},
|
||||
"guidelines": {
|
||||
"message": "Retningslinjer"
|
||||
},
|
||||
"readTheGuidelines": {
|
||||
"message": "Læs Retningslinjerne!!",
|
||||
"description": "Show the first time they submit or if they are \"high risk\""
|
||||
},
|
||||
"categoryUpdate1": {
|
||||
"message": "Kategorier er her!"
|
||||
},
|
||||
"help": {
|
||||
"message": "Hjælp"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Forstået",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Fravælg alle fremtidige eksperimenter",
|
||||
"description": "This is used in a popup about a new experiment to get a list of unlisted videos to back up since all unlisted videos uploaded before 2017 will be set to private."
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "Skjul for evigt"
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Doner"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Skjul Donationslink"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Tak for at installere SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Venligst gennemgå indstillingerne nedenfor"
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Hvordan spring over virker"
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Indsendelse"
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Redigering"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"description": "Name of the extension."
|
||||
},
|
||||
"Description": {
|
||||
"message": "Überspringe Sponsoren, Betteln um Abonnenten und mehr in YouTube-Videos. Melde Sponsoren in Videos, die du guckst, um Anderen Zeit zu sparen.",
|
||||
"message": "Überspringe Sponsoren, Betteln um Abonnenten und mehr in YouTube-Videos. Melde Sponsoren in Videos, die du schaust, um Anderen Zeit zu ersparen.",
|
||||
"description": "Description of the extension."
|
||||
},
|
||||
"400": {
|
||||
@@ -32,7 +32,7 @@
|
||||
"message": "Melden"
|
||||
},
|
||||
"reportButtonInfo": {
|
||||
"message": "Diesen Beitrag als falsch melden."
|
||||
"message": "Beitrag als unzulässig melden."
|
||||
},
|
||||
"Dismiss": {
|
||||
"message": "Abbrechen"
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Nochmal überspringen"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Ton an"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Pausiert"
|
||||
},
|
||||
@@ -85,21 +88,21 @@
|
||||
"noVideoID": {
|
||||
"message": "Kein YouTube-Video gefunden.\nWenn dies falsch ist, aktualisiere den Tab."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Segmente aktualisieren"
|
||||
},
|
||||
"success": {
|
||||
"message": "Geschafft!"
|
||||
"message": "Erfolg!"
|
||||
},
|
||||
"voted": {
|
||||
"message": "Abgestimmt!"
|
||||
},
|
||||
"serverDown": {
|
||||
"message": "Der Server ist anscheinend offline. Bitte unverzüglich dem Entwickler melden."
|
||||
"message": "Der Server ist anscheinend offline. Bitte kontaktiere den Entwickler unverzüglich."
|
||||
},
|
||||
"connectionError": {
|
||||
"message": "Ein Verbindungsfehler ist aufgetreten. Fehlermeldung: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Möchtest du für Video-ID einreichen"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Alle Segmente löschen"
|
||||
},
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Benutzernamen festlegen"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Öffentliche Benutzer-ID kopieren"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Tritt dem offiziellen Discord-Server bei und teile Anregungen und Feedback!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Versteckt die Schaltflächen im YouTube-Videoplayer, um Segmente einzusenden."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "\"Zum Highlight springen\"-Knopf im Player behalten"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Zeige Info-Knopf im Youtube-Videoplayer"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Deaktiviere Info-Knopf im Youtube-Videoplayer"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Dieser Knopf öffnet ein Pop-up auf der Youtube-Seite."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Info-Button automatisch ausblenden"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Deaktiviere den Löschen-Knopf im Youtube-Videoplayer"
|
||||
@@ -191,15 +200,15 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Zeige den Löschen-Knopf im Youtube-Videoplayer"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Dieser Knopf im YouTube-Videoplayer löscht alle nicht übermittelten Segmente für das aktuelle Video."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Aktiviere das Zählen übersprungener Segmente"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "Diese Funktion erfasst, welche Segmente du übersprungen hast, um andere Nutzer zu zeigen, wie hilfreich ihre Beiträge sind. Außerdem stellt dies zusammen mit positiven Bewertungen sicher, dass keine unerwünschten Inhalte in die Datenbank gelangen. Die Erweiterung sendet jedes Mal, wenn du ein Segment überspringst, eine Meldung an den Server. Hoffentlich verändern die meisten Nutzer diese Einstellung nicht, um unsere Statistik zu verbessern :)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "Aktiviere den Übersprungen Zähler in Privaten/Incognito Tabs"
|
||||
},
|
||||
"enableQueryByHashPrefix": {
|
||||
"message": "Abfrage nach Hash-Präfix"
|
||||
},
|
||||
@@ -215,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Hinweis erneut anzeigen"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Zeige Pop-up nach dem Überspringen eines Segments"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Skip-Meldung in voller größe"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Kleine Skip-Meldung für Auto-Skips"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Alles kleine Skip-Meldungen"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Verblasste Skip-Meldung für Auto-Skip"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Alles verblasste Skip-Meldungen"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock lässt dich gesponserte Videosegmente, Intros, Outros, Interaktions-Erinnerungen, Musikvideoteile ohne Musik und andere nervige Teile von YouTube-Videos überspringen. SponsorBlock ist eine crowdsourced Browser-Erweiterung, in der jeder die Start- und Endzeit gesponserter Videosegmente und anderer Segmente von YouTube-Videos einreicht. Sobald eine Person diese Informationen einreicht, überspringen alle anderen mit dieser Erweiterung das gesponserte Segment.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -272,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Überspringen"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Ton aus"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "{0} überspringen?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "{0} stummschalten?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Zu {0} springen?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Übersprungen"
|
||||
"message": "{0} übersprungen",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} stummgeschaltet",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Zu {0} gesprungen",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Automatisches Überspringen deaktivieren"
|
||||
@@ -327,7 +373,7 @@
|
||||
"message": "Benutzer-ID importieren/exportieren"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Halte diese ID geheim. Sie ist dazu in der Lage dich eindeutig zu identifizieren und sollte mit niemanden geteilt werden."
|
||||
"message": "Dies sollte geheim gehalten werden. Dies ist wie ein Passwort und sollte mit niemandem geteilt werden. Sollte es jemand haben, könnte er sich als dich ausgeben. Wenn du nach deiner öffentlichen Benutzer-ID suchst, klicke das \"Kopieren\"-Symbol bei deinem Benutzernamen im Popup."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "Interne Benutzer-ID festlegen"
|
||||
@@ -338,18 +384,16 @@
|
||||
"createdBy": {
|
||||
"message": "Erstellt von"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Automatisch überspringen"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Zeige Pop-up nach dem Überspringen eines Segments"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Aktuelle Einstellung:"
|
||||
},
|
||||
"supportOtherSites": {
|
||||
"message": "Drittanbieter YouTube-Sites unterstützen"
|
||||
},
|
||||
"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.",
|
||||
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
|
||||
},
|
||||
"supportedSites": {
|
||||
"message": "Unterstützte Seiten: "
|
||||
},
|
||||
@@ -383,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Videosegmente, die kürzer als der festgelegte Wert sind, werden nicht übersprungen oder im Player angezeigt."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Benachrichtigungsdauer überspringen (Sekunden):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Die Überspringen Benachrichtigung wird mindestens so lange angezeigt. Für manuelles Überspringen kann sie länger sichtbar sein."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Die folgende Einreichung ist kürzer als deine Mindestdauer. Das könnte bedeuten, dass dieses Videosegment bereits eingereicht wurde und aufgrund dieser Option einfach ignoriert wird. Bist du dir sicher, dass du es übermitteln möchtest?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Upload-Knopf anzeigen"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Dieser Knopf erscheint im YouTube-Videoplayer, nachdem du ein Videosegment markiert hast und dazu bereit bist, es zu übermitteln."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock Serveradresse"
|
||||
},
|
||||
@@ -417,7 +464,7 @@
|
||||
"message": "Import/Export aller Einstellungen"
|
||||
},
|
||||
"whatExportOptions": {
|
||||
"message": "Dies ist deine gesamte Konfiguration im JSON-Format. Sie beinhält unter anderem auch deine interne Benutzer-ID und sollte daher ebenfalls mit niemanden geteilt werden."
|
||||
"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."
|
||||
},
|
||||
"setOptions": {
|
||||
"message": "Konfiguration aus dem Eingabefeld übernehmen"
|
||||
@@ -444,7 +491,7 @@
|
||||
"message": "Vorschau"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "Nicht eingereicht"
|
||||
"message": "Nicht übermittelt"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "Überprüfen"
|
||||
@@ -513,6 +560,18 @@
|
||||
"category_preview": {
|
||||
"message": "Vorschau/Zusammenfassung"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "Kurze Zusammenfassung bisheriger Videos oder eine Vorschau auf das aktuelle Video. Für zusammengeschnittene Clips gedacht, jedoch nicht für mündliche Zusammenfassungen."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Füller/Nebensächliches"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Füller"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Musikvideoteile ohne Musik"
|
||||
},
|
||||
@@ -522,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Musikvideoteile ohne Musik"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Highlight"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Der Teil des Videos, nach dem die meisten Leute suchen, ähnlich wie \"Video startet bei x\" Kommentare."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "In Livestreams Spenden/Nachrichten vorlesen"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Wertschätzungen im Livestream"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Deaktivieren"
|
||||
"autoSkip": {
|
||||
"message": "Automatisch überspringen"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Manuelles Überspringen"
|
||||
@@ -537,6 +602,24 @@
|
||||
"showOverlay": {
|
||||
"message": "In der Video-Zeitleiste anzeigen"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Deaktivieren"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Automatisch zum Start springen"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Beim Laden des Videos fragen"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "In Suchleiste anzeigen"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Alle Segmente automatisch überspringen, wenn ein nicht-Musiksegment vorhanden ist"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Segmente zulassen, die den Ton ausschalten anstatt zu überspringen"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Die Farbe ist falsch formatiert. Sie sollte ein 3-6-stelliger Hex-Code mit einer Raute am Anfang sein."
|
||||
},
|
||||
@@ -576,6 +659,9 @@
|
||||
"message": "Um Segmente aus der Kategorie \"{0}\" zu senden, musst du diese in den Optionen aktivieren. Du wirst jetzt zu den Optionen weitergeleitet.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Achtung: Diese Art von Segment kann nur einmal pro Video aktiv sein. Sollten mehrere eingereicht werden, wird ein zufälliges angezeigt werden."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Du musst eine Kategorie für jedes zu übermittelnde Segment auswählen!"
|
||||
},
|
||||
@@ -623,7 +709,7 @@
|
||||
"message": "Nicht korrekt oder falsches Timing"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Falsche Kategorie"
|
||||
"message": "Kategorie ändern"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Dieses Video ist als Musikvideo kategorisiert. Bist du dir sicher, dass es ein gesponsertes Videosegment hat? Wenn dies tatsächlich ein Musikvideoteil ohne Musik ist, öffne die Optionen von SponsorBlock und aktiviere diese Kategorie. Danach kannst du dieses Segment als solches markieren. Bitte lese die Richtlinien, wenn du dir nicht sicher bist."
|
||||
@@ -643,5 +729,121 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Öffne die Optionen um das Verhalten bei Intros, Outros, Merchandising (Fanartikel) usw. einzustellen."
|
||||
},
|
||||
"help": {
|
||||
"message": "Hilfe"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Verstanden",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Aus allen zukünftigen Experimenten abmelden",
|
||||
"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": "Dauerhaft verbergen"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Du hast eine Warnung erhalten und kannst vorübergehend keine Segmente einreichen. Uns ist nämlich aufgefallen, dass du nicht bösartige Fehler in deinen Einreichungen machst. Bitte bestätige, dass du die Regeln verstanden hast. Darauffolgend können wir die Warnung entfernen. Du kannst diesem Chat auch mit discord.gg/SponsorBlock oder matrix.to/#/#sponsor:ajay.app beitreten"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Abstimmung wegen einer Warnung abgelehnt. Klicke hier um einen Chat zu öffnen, oder versuch es später erneut, wenn du Zeit hast.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Spenden"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Verstecke Spendenlink"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Danke fürs installieren von SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Bitte überprüfe die unten stehenden Optionen"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Viele Funktionen sind standardmäßig deaktiviert. Wenn du Intros und Outtros überspringen willst, Invidious verwenden willst, usw. aktiviere sie unten. Du kannst auch UI-Elemente verstecken/anzeigen."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Wie überspringen funktioniert"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "Videosegmente werden automatisch übersprungen, wenn sie in der Datenbank gefunden werden. Du kannst das Popup öffnen, indem du auf das Erweiterungssymbol klickst, um eine Vorschau darüber zu erhalten, was diese sind."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Wannimmer du ein Segment überspringst, wirst du benachrichtigt. Wenn das Timing falsch erscheint, kannst du as durch klicken auf den Downvote button downvoten! Du kannst auch im Popup voten."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Übermitteln"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "Das übermitteln kann entweder im Popup durch das drücken vom \"Segment Started Jetzt\" Knopf oder im Videoplayer mit den Knöpfen im Player gemacht werden."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Mit einem Klick auf den Play-Knopf wird der Beginn eines Segments und mit dem klick auf den Stop-Knopf das ende eines Segments markiert. Du kannst mehrere Sponsoren vorbereiten, bevor du auf Absenden klickst. Das klicken des Upload-Knopfes wird die Segmente übermitteln. Das klicken des Mülleimers löscht es."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Bearbeitung"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Wenn du etwas falsch gemacht hast, kannst du ein Segment bearbeiten oder löschen nachdem du auf den Auf-Pfeil Knopf gedrückt hast."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Das ist zu langsam"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Es gibt Hotkeys, wenn du diese verwenden möchtest. Drücke die Semikolon-Taste um den Anfang/das Ende eines Sponsor-Segments zu markieren und die Abostrophe-Taste um es zu übermitteln. Diese können in den Optionen geändert werden. Wenn du keine QWERTY-Tastatur verwendest, solltest du eventuell die Keybinds ändern."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Kann ich eine kopie der Datenbank erhalten? Was passiert wenn du verschwindest?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Die Datenbank ist öffentlich und verfügbar unter"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "Der Quellcode ist frei verfügbar. Selbst wenn mir etwas passieren würde wären deine Übermittlungen nicht verloren."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Nachrichten und wie es gemacht wird"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Wo kann ich den Quellcode kriegen?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Mitwirkende"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Erfahre mehr"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Abwerten, und eine lokale Kopie zum erneuten Einreichen erstellen"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Öffne den Wiki-Artikel dieser Kategorie."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Kopieren und abwerten"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Bewerten fortsetzen"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Dies wirkt sich sofort auf eigene Segmente aus"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Neu! Überspringe Nebensächliches und Witze mit der Füller-Kategorie. Aktiviere sie in den Optionen"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "T",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "S",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,22 @@
|
||||
"message": "SponsorBlock for YouTube - Skip Sponsorships",
|
||||
"description": "Name of the extension."
|
||||
},
|
||||
"Description": {
|
||||
"message": "Παράλειψη χορηγιών, επαιτείας συνδρομής και άλλων στα βίντεο του YouTube. Αναφέρετε χορηγούς σε βίντεο που βλέπετε για να εξοικονομήσετε τον χρόνο άλλων.",
|
||||
"description": "Description of the extension."
|
||||
},
|
||||
"400": {
|
||||
"message": "Ο διακομιστής είπε πως το αίτημα αυτό ήταν άκυρο"
|
||||
},
|
||||
"429": {
|
||||
"message": "Έχετε υποβάλει πάρα πολλές ώρες χορηγών για αυτό το βίντεο, είστε σίγουροι ότι υπάρχουν τόσες πολλές;"
|
||||
},
|
||||
"409": {
|
||||
"message": "Αυτό έχει ήδη υποβληθεί"
|
||||
},
|
||||
"channelWhitelisted": {
|
||||
"message": "Το κανάλι προστέθηκε στην λίστα επιτρεπόμενων!"
|
||||
},
|
||||
"Segment": {
|
||||
"message": "τμήμα"
|
||||
},
|
||||
@@ -62,9 +78,6 @@
|
||||
"skip": {
|
||||
"message": "Παράκαμψη"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Παραλείφθηκε"
|
||||
},
|
||||
"minLower": {
|
||||
"message": "λεπτό"
|
||||
},
|
||||
@@ -142,9 +155,6 @@
|
||||
"chooseACategory": {
|
||||
"message": "Επιλέξτε μια κατηγορία"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Λάθος κατηγορία"
|
||||
},
|
||||
"multipleSegments": {
|
||||
"message": "Πολλαπλά Τμήματα"
|
||||
},
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"channelWhitelisted": {
|
||||
"message": "Channel Whitelisted!"
|
||||
},
|
||||
"Segment": {
|
||||
"Segment": {
|
||||
"message": "segment"
|
||||
},
|
||||
"Segments": {
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Reskip"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Unmute"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Paused"
|
||||
},
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "No YouTube video found.\nIf this is incorrect, refresh the tab."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Refresh segments"
|
||||
},
|
||||
"success": {
|
||||
"message": "Success!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "A connection error has occured. Error code: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Do you want to submit for video id"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Clear Segments"
|
||||
},
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Set Username"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Copy Public UserID"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Come join the official discord server to give suggestions and feedback!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "This hides the buttons that appear on the YouTube player to submit skip segments."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Keep Skip To Highlight Button On Player"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Show Info Button On YouTube Player"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Hide Info Button On YouTube Player"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "This is the button that opens up a popup in the YouTube page."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Auto-hide Info Button"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Hide Delete Button On YouTube Player"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Show Delete Button On YouTube Player"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "This is the button on the YouTube player that will clear all your un-submitted segments for the current video."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Enable Skip Count Tracking"
|
||||
},
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Show Notice Again"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Show Notice After A Segment Is Skipped"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Full Size Skip Notices"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Small Skip Notices for Auto Skip"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "All Small Skip Notices"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Faded Skip Notices for Auto Skip"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "All Faded Skip Notices"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock lets you skip over sponsors, intros, outros, subscription reminders, and other annoying parts of YouTube videos. SponsorBlock is a crowdsourced browser extension that let's anyone submit the start and end time's of sponsored segments and other segments of YouTube videos. Once one person submits this information, everyone else with this extension will skip right over the sponsored segment. You can also skip over non music sections of music videos.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Skip"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Mute"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Skip {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Mute {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Skip to {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Skipped"
|
||||
"message": "{0} Skipped",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} Muted",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Skipped to {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Disable Auto Skip"
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Import/Export Your 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."
|
||||
"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"
|
||||
@@ -341,12 +384,6 @@
|
||||
"createdBy": {
|
||||
"message": "Created By"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Auto Skip"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Show Notice After A Segment Is Skipped"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". It is currently set to:"
|
||||
},
|
||||
@@ -389,16 +426,19 @@
|
||||
},
|
||||
"minDurationDescription": {
|
||||
"message": "Segments shorter than the set value will not be skipped or show in the player."
|
||||
},
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Skip notice duration (seconds):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "The skip notice will stay on screen for at least this long. For manual skipping, it may be visible for longer."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "The following submission is shorter than your minimum duration option. This could mean that this is already submitted, and just being ignored due to this option. Are you sure you would like to submit?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Show Upload Button"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "This button appears on the YouTube player after you have selected a timestamp and are ready to submit."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock Server Address"
|
||||
},
|
||||
@@ -523,6 +563,15 @@
|
||||
"category_preview_description": {
|
||||
"message": "Quick recap of previous episodes, or a preview of what's coming up later in the current video. Meant for edited together clips, not for spoken summaries."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Filler Tangent"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Filler"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Music: Non-Music Section"
|
||||
},
|
||||
@@ -532,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Non-Music"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Highlight"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "The part of the video that most people are looking for. Similar to \"Video starts at x\" comments."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Livestream: Donation/Message Readings"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Message Reading"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Disable"
|
||||
"autoSkip": {
|
||||
"message": "Auto Skip"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Manual Skip"
|
||||
@@ -547,6 +602,24 @@
|
||||
"showOverlay": {
|
||||
"message": "Show In Seek Bar"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Disable"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Auto skip to the start"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Ask when video loads"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Show In Seek Bar"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Auto skip all segments when there is a non-music segment"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Allow segments that mute audio instead of skip"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Your color is formatted incorrectly. It should be a 3 or 6 digit hex code with a number sign at the beginning."
|
||||
},
|
||||
@@ -586,6 +659,9 @@
|
||||
"message": "To submit segments with the category of \"{0}\", you must enable it in the options. You will be redirected to the options now.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Warning: This type of segment can have a maximum of one active at a time. Submitting multiple will cause a random one to be shown."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "You must select a category for all segments you are submitting!"
|
||||
},
|
||||
@@ -633,7 +709,7 @@
|
||||
"message": "Incorrect/Wrong Timing"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Wrong Category"
|
||||
"message": "Change Category"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "This video is categorized as music. Are you sure this has a sponsor? If this is actually a \"Non-Music segment\", open up the extension options and enable this category. Then, you can submit this segment as \"Non-Music\" instead of sponsor. Please read the guidelines if you are confused."
|
||||
@@ -654,11 +730,12 @@
|
||||
"categoryUpdate2": {
|
||||
"message": "Open the options to skip intros, outros, merch, etc."
|
||||
},
|
||||
"experimentUnlistedTitle": {
|
||||
"message": "Help prevent this from disappearing"
|
||||
"help": {
|
||||
"message": "Help"
|
||||
},
|
||||
"experimentUnlistedText": {
|
||||
"message": "This video is detected as unlisted and uploaded before 2017\nOld unlisted videos are being set to private next month\nWe are collecting *public* videos to back up\nWould you like anonymously to send this video to us?\nhttps://support.google.com/youtube/answer/9230970"
|
||||
"GotIt": {
|
||||
"message": "Got it",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Opt-out of all future experiments",
|
||||
@@ -666,5 +743,107 @@
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "Hide forever"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "You got a warning and cannot submit segments temporarily. This means that we noticed you were making some common mistakes that are not malicious, please just confirm that you understand the rules and we will remove the warning. You can also join this chat using discord.gg/SponsorBlock or matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Vote rejected due to a warning. Click to open a chat to resolve it, or come back later when you have time.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Donate"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Hide Donation Link"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Thanks for installing SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Please review the options below"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Many features are disabled by default. If you want to skip intros, outros, use Invidious, etc., enable them below. You can also hide/show UI elements."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "How skipping works"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "Video segments will automatically be skipped if they are found in the database. You can open the popup by clicking the extension icon to get a preview of what they are."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Whenever you skip a segment, you will get notice. If the timing seems wrong vote down by clicking downvote! You can also vote in the popup."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Submitting"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "Submitting can either be done in the popup by hitting the \"Segment Starts Now\" button or in the video player with the buttons on the player."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Clicking the play button indicated the start of a segment and clicking the stop icon indicates the end. You can prepare multiple sponsors before hitting submit. Clicking the upload button will submit. Clicking the garbage can will delete."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Editing"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "If you messed up, you can edit or delete your segments after clicking the up arrow button."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "This is too slow"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "There are hotkeys if you want to use them. Press the semicolon key to indicate the start/end of a sponsor segment and click the apostrophe to submit. These can be changed in the options. If you don't use QWERTY, you should probably change the keybinding."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Can I get a copy of the Database? What happens if you disappear?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "The database is public and available at"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "The source code is freely available. So, even if something happens to me, your submissions are not lost."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "News and how it is made"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Where can I get the source code?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Credits"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Learn More"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Downvotes and creates a local copy for you to resubmit"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Open this category's wiki page."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Copy and downvote"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Continue Voting"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "This will instantly apply to your segments"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "New! Skip tangents and jokes with the filler category. Enable in options"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "d",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "h",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"description": "Name of the extension."
|
||||
},
|
||||
"Description": {
|
||||
"message": "Salte todos los patrocinios, súplicas por suscripción y más en los vídeos de YouTube. Reporta secciones de patrocinio en los vídeos que veas para ahorrarle tiempo a los demás.",
|
||||
"message": "Salte todos los sponsors, súplicas de suscripción y más en vídeos de YouTube. Reporta sponsors en los vídeos que veas para ahorrarle tiempo a los demás.",
|
||||
"description": "Description of the extension."
|
||||
},
|
||||
"400": {
|
||||
@@ -26,13 +26,13 @@
|
||||
"message": "segmentos"
|
||||
},
|
||||
"upvoteButtonInfo": {
|
||||
"message": "Votar a favor de esta sumisión"
|
||||
"message": "Votar positivamente este envío"
|
||||
},
|
||||
"reportButtonTitle": {
|
||||
"message": "Denunciar"
|
||||
"message": "Reportar"
|
||||
},
|
||||
"reportButtonInfo": {
|
||||
"message": "Denunciar esta sumisión como incorrecta."
|
||||
"message": "Reportar este envío como incorrecto."
|
||||
},
|
||||
"Dismiss": {
|
||||
"message": "Descartar"
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Volver a saltar"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Quitar silencio"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Pausado"
|
||||
},
|
||||
@@ -74,10 +77,10 @@
|
||||
"message": "No se han encontrado segmentos"
|
||||
},
|
||||
"sponsorStart": {
|
||||
"message": "El segmento comienza ahora"
|
||||
"message": "El Segmento Inicia Ahora"
|
||||
},
|
||||
"sponsorEnd": {
|
||||
"message": "El segmento termina ahora"
|
||||
"message": "El Segmento Termina Ahora"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "Cancelar Creación de Segmento"
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "No se encontró vídeo de YouTube.\nSi esto es incorrecto, actualice la pestaña."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Actualizar segmentos"
|
||||
},
|
||||
"success": {
|
||||
"message": "¡Completado!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Ha ocurrido un error de conexión. Código de error: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "¿Quiere enviar segmento para el video con ID"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Borrar Segmentos"
|
||||
},
|
||||
@@ -153,11 +156,14 @@
|
||||
"message": "Esto se utiliza en la página de estadísticas públicas para mostrar cuánto has contribuido. Véala"
|
||||
},
|
||||
"Username": {
|
||||
"message": "Usuario"
|
||||
"message": "Nombre de Usuario"
|
||||
},
|
||||
"setUsername": {
|
||||
"message": "Escoger Nombre De Usuario"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Copiar el ID de usuario público"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "¡Únete al servidor oficial de discord para darnos sugerencias y comentarios!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Esto oculta los botones que aparecen en el reproductor de YouTube que se usan para enviar segmentos saltados."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Mantener el Botón de \"Saltar a Destacado\" en el Reproductor"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Mostrar botón de información en el reproductor de YouTube"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Ocultar botón de información en el reproductor de YouTube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Este es el botón que abre una ventana en la página de YouTube."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Ocular automáticamente el Botón de Información"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Ocultar botón de eliminar en el reproductor de YouTube"
|
||||
@@ -191,14 +200,11 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Mostrar botón de eliminar en el reproductor de YouTube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Este es el botón en el reproductor de YouTube que eliminará todos tus segmentos no enviados para el vídeo actual."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Habilitar el conteo de omisiones"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "Esta función rastrea los segmentos que se han saltado para que los usuarios sepan en qué medida sus aportes ayudaron a los demás y se utilizan como una métrica junto con los votos favorables para garantizar que no aparezca spam en la base de datos. La extensión envía un mensaje al servidor cada vez que se salta un segmento. Esperemos que la mayoría de la gente no cambie esta configuración para que los números de vista sean exactos. :)"
|
||||
"message": "Esta función rastrea los segmentos que se han saltado para que los usuarios sepan en qué medida sus envíos ayudaron a los demás y se utilizan como una métrica junto con los votos positivos para garantizar que no aparezca spam en la base de datos. La extensión envía un mensaje al servidor cada vez que se salta un segmento. Esperemos que la mayoría de la gente no cambie esta configuración para que los números de vistas sean exactos. :)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "Activar el seguimiento del número de saltos en las pestañas privadas/de incógnito"
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Mostrar aviso de nuevo"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Mostrar aviso después de que se omita un segmento"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Avisos de Omisión de Tamaño Completo"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Avisos de Omisión Pequeños para la Omisión Automática"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Todos los Avisos de Omisión Pequeños"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Avisos de Omisión Desvanecidos para la Omisión Automática"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Todos los Avisos de Omisión Desvanecidos"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock te permite saltarte los patrocinadores, intros, outros, recordatorios de suscripción y otras partes molestas de los videos de YouTube. SponsorBlock es una extensión de navegador de código abierto que permite a cualquiera enviar el tiempo de inicio y fin de los segmentos de patrocinadores y otros segmentos de los videos de YouTube. Una vez que una persona envía esta información, todos los que tengan esta extensión podrán saltearse ese segmento. También es posible saltar las secciones no musicales de los videos musicales.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -245,13 +269,13 @@
|
||||
"message": "Establecer tecla para iniciar/detener un segmento"
|
||||
},
|
||||
"setSubmitKeybind": {
|
||||
"message": "Establecer botón de envío"
|
||||
"message": "Establecer tecla para el envío"
|
||||
},
|
||||
"keybindDescription": {
|
||||
"message": "Seleccione un botón escribiéndolo"
|
||||
"message": "Seleccione una tecla escribiéndola"
|
||||
},
|
||||
"keybindDescriptionComplete": {
|
||||
"message": "El botón se ha establecido a: "
|
||||
"message": "Ese atajo de teclas se ha establecido como: "
|
||||
},
|
||||
"0": {
|
||||
"message": "Tiempo de espera agotado. Compruebe su conexión a Internet. Si su internet está funcionando, el servidor probablemente esta sobrecargado o desconectado."
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Omitir"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Silenciar"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "¿Saltar {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "¿Silenciar {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "¿Saltar a {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Omitido"
|
||||
"message": "{0} Omitido/as",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} Silenciado",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Se ha saltado a {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Desactivar la omisión automática"
|
||||
@@ -327,26 +370,20 @@
|
||||
"message": "Comprueba status.sponsor.ajay.app para ver el estado del servidor."
|
||||
},
|
||||
"changeUserID": {
|
||||
"message": "Importar/Exportar tu UserID"
|
||||
"message": "Importar/Exportar tu ID de usuario"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Esto debería mantenerse privado. Es como una contraseña y no debe ser compartido con nadie. Si alguien tiene esto, pueden imitarte."
|
||||
"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 la ID de usuario"
|
||||
"message": "Establecer el ID de usuario"
|
||||
},
|
||||
"userIDChangeWarning": {
|
||||
"message": "Advertencia: El cambio de la 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 es irreversible. ¿Está seguro de que le desea hacerlo? Asegúrese de hacer una copia de respaldo de la anterior por si acaso."
|
||||
},
|
||||
"createdBy": {
|
||||
"message": "Creado Por"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Omitir automáticamente"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Mostrar aviso después de que se omita un segmento"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Actualmente está configurado para:"
|
||||
},
|
||||
@@ -390,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Los segmentos más cortos que el valor configurado no se omitirán ni se mostrarán en el reproductor."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Duración del aviso de omisión (segundos):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "El aviso de omisión permanecerá en la pantalla por lo menos este tiempo. Si la omisión es manual, podría ser visible por más tiempo."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "La siguiente sumisión es más corto que su opción de duración mínima. Esto podría significar que esto ya se ha enviado y que simplemente se ha ignorado debido a esta opción. ¿Está seguro de que desea enviar?"
|
||||
"message": "El siguiente envío es más corto que su opción de duración mínima. Esto podría significar que esto ya se ha enviado y que simplemente se ha ignorado debido a esta opción. ¿Está seguro de que desea enviar?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Mostrar botón de subida"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Este botón aparece en el reproductor de YouTube después de que has seleccionado una marca de tiempo y estas listo para enviar."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Dirección del servidor SponsorBlock"
|
||||
},
|
||||
@@ -472,10 +512,10 @@
|
||||
"message": "La información de depuración ha sido copiada al portapapeles. Siéntase libre de eliminar cualquier información que prefiera no compartir. Guarde esto en un archivo de texto o péguelo en el informe de errores."
|
||||
},
|
||||
"theKey": {
|
||||
"message": "El botón"
|
||||
"message": "La tecla"
|
||||
},
|
||||
"keyAlreadyUsed": {
|
||||
"message": "está enlazado a otra acción. Por favor, seleccione otro botón."
|
||||
"message": "está enlazada a otra acción. Por favor, seleccione otra tecla."
|
||||
},
|
||||
"to": {
|
||||
"message": "a",
|
||||
@@ -485,13 +525,13 @@
|
||||
"message": "Sponsor"
|
||||
},
|
||||
"category_sponsor_description": {
|
||||
"message": "Promoción pagada, referencias pagadas y anuncios directos. No para autopromoción o anuncios gratuitos a causas/creadores/sitios web/productos que les gusten."
|
||||
"message": "Promoción pagada, recomendaciones pagadas y anuncios directos. No para promoción propia o anuncios gratuitos a causas/creadores/sitios web/productos que les gusten."
|
||||
},
|
||||
"category_selfpromo": {
|
||||
"message": "No remunerado/Autopromoción"
|
||||
"message": "Promoción Propia/No Remunerada"
|
||||
},
|
||||
"category_selfpromo_description": {
|
||||
"message": "Similar a \"patrocinador\", excepto que no es remunerado o se autopromociona. Esto incluye secciones sobre mercancía, donaciones o información sobre con quiénes colaboraron."
|
||||
"message": "Similar a \"sponsor\", excepto que para la promoción propia o no remunerada. Esto incluye secciones sobre mercancía, donaciones o información sobre con quiénes colaboraron."
|
||||
},
|
||||
"category_interaction": {
|
||||
"message": "Recordatorio de interacción (subscribir)"
|
||||
@@ -523,6 +563,15 @@
|
||||
"category_preview_description": {
|
||||
"message": "Recapitulación rápida de los episodios anteriores, o una vista previa de lo que va a ocurrir más adelante en el vídeo actual. Está pensado para clips editados juntos, no para resúmenes hablados."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Tangente de Relleno"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Relleno"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Música: Sección sin musica"
|
||||
},
|
||||
@@ -530,7 +579,13 @@
|
||||
"message": "Sólo para el uso en vídeos musicales. Esto sólo debe utilizarse para secciones de vídeos musicales que no están ya cubiertos por otra categoría."
|
||||
},
|
||||
"category_music_offtopic_short": {
|
||||
"message": "No musical"
|
||||
"message": "Sin Música"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Destacado"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"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_livestream_messages": {
|
||||
"message": "Directo: Lecturas de donaciones y mensajes"
|
||||
@@ -538,8 +593,8 @@
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Lectura del mensaje"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Desactivar"
|
||||
"autoSkip": {
|
||||
"message": "Omitir automáticamente"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Omisión manual"
|
||||
@@ -547,6 +602,24 @@
|
||||
"showOverlay": {
|
||||
"message": "Mostrar en la barra de búsqueda"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Desactivar"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Omitir automáticamente al inicio"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Preguntar cuando cargue el video"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Mostrar en la barra de búsqueda"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Omitir automáticamente todos los segmentos cuando hay un segmento sin música"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Permitir segmentos que silencian el audio en lugar de omitir"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Su color está formateado incorrectamente. Debería ser un código hexadecimal de 3 o 6 dígitos con un signo numérico al principio."
|
||||
},
|
||||
@@ -586,6 +659,9 @@
|
||||
"message": "Para enviar segmentos con la categoría de \"{0}\", debes activarlo en las opciones. Serás redirigido a las opciones ahora.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Advertencia: Solo puede haber uno de este tipo de segmento activo a la vez. Enviar múltiples causará que se muestre uno al azar."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "¡Debes seleccionar una categoría para todos los segmentos que estés presentando!"
|
||||
},
|
||||
@@ -603,7 +679,7 @@
|
||||
"message": "El ID del canal no está cargado todavía. Si está usando un vídeo incrustado, intente usar la página de inicio de YouTube en su lugar. Esto también podría ser causado por cambios en el diseño de YouTube, si lo cree, haga un comentario aquí:"
|
||||
},
|
||||
"videoInfoFetchFailed": {
|
||||
"message": "Parece que algo está bloqueando la capacidad de SponsorBlock para obtener datos de video, Por favor, vea https://github.com/ajayyy/SponsorBlock/issues/741 para más información."
|
||||
"message": "Parece que algo está bloqueando la capacidad de SponsorBlock para obtener datos de video. Por favor, vea https://github.com/ajayyy/SponsorBlock/issues/741 para más información."
|
||||
},
|
||||
"youtubePermissionRequest": {
|
||||
"message": "Parece que SponsorBlock no puede acceder a la API de YouTube. Para solucionarlo, acepte el aviso de permiso que aparecerá a continuación, espera unos segundos y vuelve a cargar la página."
|
||||
@@ -624,7 +700,7 @@
|
||||
"message": "Comprobación forzada del canal antes de saltarse"
|
||||
},
|
||||
"whatForceChannelCheck": {
|
||||
"message": "Por defecto, se saltará los segmentos inmediatamente antes de saber cuál es el canal. Por defecto, algunos segmentos al principio del vídeo pueden ser salteados en los canales de la lista blanca. Al activar esta opción se evitará esto, pero haciendo que todos los saltos tengan un ligero retraso ya que obtener el ID del canal puede llevar algún tiempo. Este retraso podría ser imperceptible si tienes una Internet rápida."
|
||||
"message": "Por defecto, se saltará los segmentos inmediatamente antes de saber cuál es el canal. Por defecto, algunos segmentos al principio del vídeo pueden ser salteados en los canales de la lista blanca. Al activar esta opción se evitará esto, pero haciendo que todos los saltos tengan un ligero retraso, ya que obtener el ID del canal puede llevar algún tiempo. Este retraso podría ser imperceptible si tienes una Internet rápida."
|
||||
},
|
||||
"forceChannelCheckPopup": {
|
||||
"message": "Considere la posibilidad de activar \"Comprobación del canal de fuerza antes de saltar\""
|
||||
@@ -633,10 +709,10 @@
|
||||
"message": "Tiempo incorrecto/equivocado"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Categoría Incorrecta"
|
||||
"message": "Cambiar Categoría"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Este video está clasificado como música. ¿Estás seguro de que esto tiene un patrocinador? Si esto es realmente un \"Segmento sin música\", abre las opciones de extensión y habilita esta categoría. Entonces, puedes enviar este segmento como \"No-Música\" en lugar de patrocinador. Por favor, lee las directrices si estás confundido."
|
||||
"message": "Este video está clasificado como música. ¿Estás seguro de que esto tiene un sponsor? Si esto es realmente un \"Segmento Sin Música\", abre las opciones de la extensión y activa esta categoría. Entonces, puedes enviar este segmento como \"Sin Música\" en lugar de sponsor. Por favor, lee las instrucciones si estás confundido/a."
|
||||
},
|
||||
"multipleSegments": {
|
||||
"message": "Múltiples segmentos"
|
||||
@@ -652,6 +728,122 @@
|
||||
"message": "¡Las categorías están aquí!"
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Abre las opciones de saltarse intros, otros, mercantil, etc."
|
||||
"message": "Abre las opciones de saltarse intros, outros, mercancía, etc."
|
||||
},
|
||||
"help": {
|
||||
"message": "Ayuda"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Entendido",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "No participar en futuros experimentos",
|
||||
"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": "Ocultar para siempre"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Has recibido una advertencia y no puedes enviar segmentos temporalmente. Esto significa que hemos notado que estabas cometiendo algunos errores comunes que no son maliciosos, por favor, solo confirma que entiendes las reglas y anularemos la advertencia. También puedes unirte a este chat usando discord.gg/SponsorBlock o matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Voto rechazado debido a una advertencia. Haga clic aquí para abrir un chat para resolverlo, o vuelva más tarde cuando tenga tiempo.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Donar"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Ocular Enlace de Donación"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Gracias por instalar SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Por favor, revise las siguientes opciones"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Muchas funciones están desactivadas por defecto. Si quiere saltar intros, outros, usar Invidious, etc., actívelos a continuación. También puede ocular/mostrar los elementos de la interfaz."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Como funciona el salteo"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "Los segmentos de video serán omitidos automáticamente si son encontrados en la base de datos. Puede abrir la ventana emergente haciendo clic en el ícono de la extensión para obtener una vista previa de los que son."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Cada vez que salte un segmento, recibirá un aviso. ¡Si el tiempo parece equivocado, dele un voto negativo! También puede votar en la ventana emergente."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Envío"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "El envío puede realizarse desde la ventana emergente pulsando el botón \"El Segmento Inicia Ahora\" o en el reproductor de video con los botones de este."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Hacer clic en el botón de reproducir indica el inicio de un segmento y hacer clic en el icono de detener indica el final de este. Puede preparar múltiples sponsors antes de enviarlos. Hacer clic en el botón de subida lo(s) enviará. Hacer clic en la papelera lo(s) borrará."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Edición"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Si se equivoca, puede editar o eliminar sus segmentos después de hacer clic en el botón de flecha hacia arriba."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Esto es muy lento"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Hay teclas de acceso directo, si quiere usarlas. Presione la tecla de punto y coma para indicar el inicio/final de un segmento de sponsor y haga clic en el apóstrofe para enviar. Estas se pueden cambiar en las opciones. Si no usa un teclado QWERTY, probablemente debería cambiar la asignación de teclas."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "¿Puedo obtener una copia de la base de datos? ¿Qué sucede si tú desapareces?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "La base de datos es pública y disponible en"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "El código fuente está disponible libremente. Así que, aun si algo me sucede, sus envíos no se perderán."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Noticias y cómo se hace"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "¿Dónde puedo conseguir el código fuente?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Créditos"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Aprenda Más"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Vota negativamente y crea una copia local para que la puedas volver a enviar"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Abrir la página de la wiki de esta categoría."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Copiar y votar negativamente"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Continuar Votando"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Esto se aplicará instantáneamente a tus segmentos"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "¡Nuevo! Omite tangentes y bromas con la categoría de relleno. Habilítala en opciones"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "d",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "h",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"message": "See on juba varasemalt saadetud"
|
||||
},
|
||||
"channelWhitelisted": {
|
||||
"message": "Kanal lubamisnimekirjas!"
|
||||
"message": "Kanal ignoreerimisnimekirjas!"
|
||||
},
|
||||
"Segment": {
|
||||
"message": "segmendi"
|
||||
@@ -41,7 +41,7 @@
|
||||
"message": "Laadimine..."
|
||||
},
|
||||
"Hide": {
|
||||
"message": "Ära näita kunagi"
|
||||
"message": "Ära kunagi näita"
|
||||
},
|
||||
"hitGoBack": {
|
||||
"message": "Vajuta \"kuva uuesti\", et jõuda sinna, kust tulid."
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Jäta uuesti vahele"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Tühista vaigistus"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Pausil"
|
||||
},
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "YouTube'i videot ei leitud.\nKui see ei vasta tõele, laadi kaart uuesti."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Värskenda segmendid"
|
||||
},
|
||||
"success": {
|
||||
"message": "Õnnestus!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Ühendusega esines tõrge. Veakood: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Kas soovid segmendid saata video IDle"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Tühjenda segmendid"
|
||||
},
|
||||
@@ -116,10 +119,10 @@
|
||||
"message": "Kas soovid kindlasti selle saata?"
|
||||
},
|
||||
"whitelistChannel": {
|
||||
"message": "Lisa kanal lubamisnimekirja"
|
||||
"message": "Lisa kanal ignoreerimisnimekirja"
|
||||
},
|
||||
"removeFromWhitelist": {
|
||||
"message": "Eemalda kanal lubamisnimekirjast"
|
||||
"message": "Eemalda kanal ignoreerimisnimekirjast"
|
||||
},
|
||||
"voteOnTime": {
|
||||
"message": "Hääleta segmendi sobivust"
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Määra kasutajanimi"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Kopeeri avalik UserID"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Tule liitu ametliku Discordi serveriga, et anda soovitusi ja tagasisidet!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "See peidab nupud, mis kuvatakse YouTube'i mängijal vahelejätmiste segmentide saatmiseks."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Hoia esiletõstuni vahelejätmise nuppu mängijal"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Kuva YouTube'i mängijal infonupp"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Peida YouTube'i mängijal infonupp"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "See on see nupp, mis avab YouTube'i lehel hüpiku."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Peida infonupp automaatselt"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Peida YouTube'i mängijal kustutusnupp"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Kuva YouTube'i mängijal kustutusnupp"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "YouTube'i mängija nupp, mis tühjendab kõik sinu praeguse video saatmata segmendid."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Luba vahelejätmiste arvu jälgimine"
|
||||
},
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Kuva märkus uuesti"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Kuva segmendi vahelejätmisel teatis"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Täissuuruses vahelejätmise teavitused"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Väikesed vahelejätmise teavitused autom. vahelejätmistele"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Kõik vahelejätmise teavitused on väikesed"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Hääbuvad vahelejätmise teavitused autom. vahelejätmistele"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Kõik vahelejätmise teavitused hääbuvad"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock lubab sul vahele jätta sponsorid, vaheajad, kanali tellimise meeldetuletused ja muud YouTube'i videote tüütud kohad. SponsorBlock on rahva ühistööna toimiv brauserilaiendus, mis lubab igaühel saata sponsoreeritud segmendi algus- ja lõpuaegu ning teiste video segmentide aegu. Kui üks inimene saadab sponsoreeritud segmendi, jätavad teised laienduse kasutajad kohe selle vahele. Laiendus võimaldab ka muusikavideotel mitte-muusika jaotised vahele jätta.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -235,7 +259,7 @@
|
||||
"description": "The first line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"noticeUpdate2": {
|
||||
"message": "Kui sulle see ikka ei meeldi, vajuta \"ära näita kunagi\" nuppu.",
|
||||
"message": "Kui sulle see ikka ei meeldi, vajuta \"ära kunagi näita\" nuppu.",
|
||||
"description": "The second line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"setSkipShortcut": {
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Jäta vahele"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Vaigista"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Jätad {0} vahele?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Vaigistad {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Jäta {0}-ni vahele?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "vahelejäetud"
|
||||
"message": "{0} vahelejäetud",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} vaigistatud",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "{0}-ni vahelejäetud",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Keela automaatne vahelejätmine"
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Impordi/ekspordi oma 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."
|
||||
"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"
|
||||
@@ -341,12 +384,6 @@
|
||||
"createdBy": {
|
||||
"message": "Autor"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Autom. vahelejätmine"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Kuva segmendi vahelejätmisel teatis"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Hetkel on selleks määratud:"
|
||||
},
|
||||
@@ -390,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Segmendid, mis on lühemad kui määratud väärtus ei jäeta vahele või ei kuvata mängijal."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Vahelejätmise teavituse kestus (sekundites):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Vahelejätmise teavitus püsib ekraanil vähemalt nii kaua. Käsitsi vahelejätmise puhul võib see kauem püsida."
|
||||
},
|
||||
"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?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Kuva üleslaadimisnupp"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "See nupp kuvatakse YouTube'i mängijal, kui oled ajatempli ära valinud ning saatmiseks valmis."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlocki serveri aadress"
|
||||
},
|
||||
@@ -466,7 +506,7 @@
|
||||
"message": "Lõikelauale kirjutamine ebaõnnestus"
|
||||
},
|
||||
"copyDebugInformationOptions": {
|
||||
"message": "Kopeerib lõikelauale info, mida saad arendajale anda veast teatamisel või siis, kui arendaja seda sinult taotleb. Tundlik info, sealhulgas sinu kasutaja ID, lubamisnimekirjas kanalid ning kohandatud serveri aadress on eemaldatud. Siiski see sisaldab teatud infot, nagu sinu kasutajaagent, brauser, opsüsteem ning laienduse versiooninumber."
|
||||
"message": "Kopeerib lõikelauale info, mida saad arendajale anda veast teatamisel või siis, kui arendaja seda sinult taotleb. Tundlik info, sealhulgas sinu kasutaja ID, ignoreerimisnimekirjas kanalid ning kohandatud serveri aadress on eemaldatud. Siiski see sisaldab teatud infot, nagu sinu kasutajaagent, brauser, opsüsteem ning laienduse versiooninumber."
|
||||
},
|
||||
"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."
|
||||
@@ -523,6 +563,15 @@
|
||||
"category_preview_description": {
|
||||
"message": "Kiire kokkuvõte eelmistest episoodidest või eelvaade videos hiljem tulevast. Mõeldud valmis töödeldud klippide, mitte suuliste kokkuvõtete jaoks."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Täitesisu"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Täide"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Muusika: mitte-muusika jaotis"
|
||||
},
|
||||
@@ -532,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Mitte-muusika"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Esiletõst"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Video osa, mida enamus inimesed otsivad. Sarnaneb kommentaaridele stiilis \"video algab ajal x\"."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Otseülekanne: annetuste ja sõnumite lugemine"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Sõnumite lugemine"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Keela"
|
||||
"autoSkip": {
|
||||
"message": "Autom. vahelejätmine"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Käsitsi vahelejätmine"
|
||||
@@ -547,6 +602,24 @@
|
||||
"showOverlay": {
|
||||
"message": "Kuva mängija ajaribal"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Keela"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Jäta automaatselt alguseni vahele"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Küsi video laadimisel"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Kuva mängija ajaribal"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Jäta automaatselt kõik segmendid vahele, kui eksisteerib mitte-muusika segment"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Luba segmente, mis vahelejätmise asemel vaigistavad heli"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Sinu värv on sobimatult vormistatud. See peaks olema 3- või 6-numbriline 16-kümmendsüsteemis kood, arvu ees trellid."
|
||||
},
|
||||
@@ -586,6 +659,9 @@
|
||||
"message": "Kategooriaga \"{0}\" segmentide saatmiseks pead selle enne valikutes lubama. Sind suunatakse nüüd valikutesse.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Hoiatus: Seda tüüpi segmenti saab korraga aktiivne olla vaid üks. Mitme saatmine põhjustab suvalise segmendi kuvamise."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Sa pead enne saatmist igale segmendile kategooria valima!"
|
||||
},
|
||||
@@ -624,7 +700,7 @@
|
||||
"message": "Sunnitud kanalikontroll enne vahelejätmist"
|
||||
},
|
||||
"whatForceChannelCheck": {
|
||||
"message": "Vaikimisi jätab see segmendid vahele juba siis, kui veel kanalitki ei tea. Vaikimisi võidakse mõned video alguses olevad segmendid lubamisnimekirjas olevatel kanalitel vahele jätta. Selle valiku lubamine väldib seda, kuid võib lisada vahelejätmistele väikese viivituse, sest kanali ID hankimine võib aega võtta. Viivitus võib kiire interneti puhul olla märkamatu."
|
||||
"message": "Vaikimisi jätab see segmendid vahele juba siis, kui veel kanalitki ei tea. Vaikimisi võidakse mõned video alguses olevad segmendid ignoreerimisnimekirjas olevatel kanalitel vahele jätta. Selle valiku lubamine väldib seda, kuid võib lisada vahelejätmistele väikese viivituse, sest kanali ID hankimine võib aega võtta. Viivitus võib kiire interneti puhul olla märkamatu."
|
||||
},
|
||||
"forceChannelCheckPopup": {
|
||||
"message": "Kaalu valiku \"Sunnitud kanalikontroll enne vahelejätmist\" lubamist"
|
||||
@@ -633,7 +709,7 @@
|
||||
"message": "Sobimatu/vale ajastus"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Vale kategooria"
|
||||
"message": "Muuda kategooriat"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "See video on muusikana kategoriseeritud. Kas oled kindel, et sellel on sponsor? Kui see on tegelikult \"mitte-muusika segment\", ava laienduse valikud ning luba see kategooria. Seejärel saad selle segmendi saata \"mitte-muusika\" kategoorias. Segaduse korral palun loe üle juhised."
|
||||
@@ -653,5 +729,100 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Ava valikud, et jätta vahele vaheaegu, müüdavat kaupa jms."
|
||||
},
|
||||
"help": {
|
||||
"message": "Abi"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Sain aru",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "Peida igaveseks"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Sa said hoiatuse ning ei saa ajutiselt segmente saata. See tähendab, et me leidsime sind tegemast teatud sagedasi, mitte-pahatahtlikke vigu - palun kinnita (inglise keeles), et mõistad reegleid ning me eemaldame hoiatuse. Sa võid selle vestlusega liituda ka discord.gg/SponsorBlock või matrix.to/#/#sponsor:ajay.app kaudu."
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Hääletus hoiatuse tõttu tagasilükatud. Klõpsa, et avada selle lahendamiseks vestlus või tule hiljem tagasi, kui aega saad.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Anneta"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Peida annetuste link"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Täname SponsorBlocki paigaldamise eest."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Palun vaata allolevad valikud üle"
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Kuidas vahelejätmine töötab"
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Segmentide saatmine"
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Redigeerimine"
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "See on liiga aeglane"
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Kas ma saaksin andmebaasist koopia? Mis juhtub, kui sa kaod?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Andmebaas on avalik ning saadaval aadressil"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "Lähtekood on vabalt saadaval. Seega, isegi kui minuga midagi juhtub, ei ole sinu saadetud segmendid kadunud."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Uudised ja kuidas see on valmistatud"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Kust ma saan selle lähtekoodi?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Tiitrid"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Lisateave"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Annab vastuhääle ja loob kohaliku koopia, mida saad uuesti saata"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Ava selle kategooria vikileht."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Kopeeri ja anna vastuhääl"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Jätka hääletamist"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "See rakendub sinu segmentidele koheselt"
|
||||
},
|
||||
"SponsorTimeEditScrollNewFeature": {
|
||||
"message": "Kiireks aja reguleerimiseks keri hiirega muutmiskasti kohal. Täpsemaks reguleerimiseks hoia kerimise ajal all Ctrl või Shift klahvi."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Uus! Jäta täitesisu ja naljad vahele täitesisu kategooriaga. Luba valikutes"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "p",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "t",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,9 @@
|
||||
"400": {
|
||||
"message": "سرور گفت که این درخواست نامعتبر است"
|
||||
},
|
||||
"429": {
|
||||
"message": "شما برای این یک ویدیو تعداد بیش از حدی زمان اسپانسر ثبت کردهاید، آیا مطمئن هستید که به این تعداد وجود دارد؟"
|
||||
},
|
||||
"409": {
|
||||
"message": "این قبلاً ثبت شده است"
|
||||
},
|
||||
@@ -24,6 +27,9 @@
|
||||
"reportButtonTitle": {
|
||||
"message": "گزارش"
|
||||
},
|
||||
"reportButtonInfo": {
|
||||
"message": "گزارش این ارسال بهعنوان غیر صحیح."
|
||||
},
|
||||
"Dismiss": {
|
||||
"message": "رد کردن"
|
||||
},
|
||||
@@ -42,6 +48,9 @@
|
||||
"reskip": {
|
||||
"message": "دوباره رد کردن"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "صدادار"
|
||||
},
|
||||
"paused": {
|
||||
"message": "وقفه شده"
|
||||
},
|
||||
@@ -54,6 +63,9 @@
|
||||
"Unknown": {
|
||||
"message": "اشکالی در ثبت کردن زمان های ارسالی شما پیش آمد. لطفا بعداً دوباره تلاش کنید."
|
||||
},
|
||||
"sponsorFound": {
|
||||
"message": "این ویدیو دارای بخشهایی در پایگاهداده است!"
|
||||
},
|
||||
"sponsor404": {
|
||||
"message": "هیچ بخشی پیدا نشد"
|
||||
},
|
||||
@@ -63,6 +75,15 @@
|
||||
"sponsorEnd": {
|
||||
"message": "بخش اینجا پایان مییابد"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "لغو ساختن بخش"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "هیچ ویدیوی یوتیوبای یافت نشد.\nاگر این صحیح نیست، زبانه را تازه کنید."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "تازهکردن بخشها"
|
||||
},
|
||||
"success": {
|
||||
"message": "موفقیت!"
|
||||
},
|
||||
@@ -75,9 +96,6 @@
|
||||
"connectionError": {
|
||||
"message": "خطای شبکه رخ داده است. کد خطا: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "آی میخواهید که گزارش را ثبت کنید برای ویدیوی"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "پاکنمودن بخشها"
|
||||
},
|
||||
@@ -93,15 +111,36 @@
|
||||
"submitCheck": {
|
||||
"message": "مطمئن هستید که میخواهید این را ثبت کنید؟"
|
||||
},
|
||||
"whitelistChannel": {
|
||||
"message": "قرار دادن کانال در لیست سفید"
|
||||
},
|
||||
"removeFromWhitelist": {
|
||||
"message": "حذف کانال از لیست سفید"
|
||||
},
|
||||
"voteOnTime": {
|
||||
"message": "رأی دهی به یک بخش"
|
||||
},
|
||||
"Submissions": {
|
||||
"message": "ارسالیها"
|
||||
},
|
||||
"savedPeopleFrom": {
|
||||
"message": "شما دیگران را نجات دادید از "
|
||||
},
|
||||
"viewLeaderboard": {
|
||||
"message": "لیست سرنشینان"
|
||||
},
|
||||
"recordTimesDescription": {
|
||||
"message": "ثبت"
|
||||
},
|
||||
"clearTimesButton": {
|
||||
"message": "حذف دفعات"
|
||||
},
|
||||
"submitTimesButton": {
|
||||
"message": "ثبت دفعات"
|
||||
},
|
||||
"Username": {
|
||||
"message": "نامکاربری"
|
||||
},
|
||||
"setUsername": {
|
||||
"message": "تنظیم نام کاربری"
|
||||
},
|
||||
@@ -132,5 +171,110 @@
|
||||
"noticeUpdate2": {
|
||||
"message": "اگر همچنان این را نمیپسندید، گزینه هرگز نمایش نده را انتخاب کنید.",
|
||||
"description": "The second line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"disableSkipping": {
|
||||
"message": "ردکردن فعال است"
|
||||
},
|
||||
"enableSkipping": {
|
||||
"message": "ردکردن غیرفعال است"
|
||||
},
|
||||
"yourWork": {
|
||||
"message": "کار شما",
|
||||
"description": "Used to describe the section that will show you the statistics from your submissions."
|
||||
},
|
||||
"502": {
|
||||
"message": "به نظر میرسد سرور زیر فشار است. چند ثانیهی دیگر دوباره امتحان کنید."
|
||||
},
|
||||
"errorCode": {
|
||||
"message": "کد خطا: "
|
||||
},
|
||||
"skip": {
|
||||
"message": "رد کردن"
|
||||
},
|
||||
"mute": {
|
||||
"message": "بیصدا"
|
||||
},
|
||||
"minLower": {
|
||||
"message": "دقیقه"
|
||||
},
|
||||
"hourLower": {
|
||||
"message": "ساعت"
|
||||
},
|
||||
"createdBy": {
|
||||
"message": "ایجاد شده توسط"
|
||||
},
|
||||
"add": {
|
||||
"message": "افزودن"
|
||||
},
|
||||
"save": {
|
||||
"message": "ذخیره"
|
||||
},
|
||||
"reset": {
|
||||
"message": "بازنشانی"
|
||||
},
|
||||
"areYouSureReset": {
|
||||
"message": "آيا مطمئن هستيد که مي خواهيد این را بازنشانی کنید؟"
|
||||
},
|
||||
"mobileUpdateInfo": {
|
||||
"message": "m.youtube.com اکنون پشتیبانی میشود"
|
||||
},
|
||||
"setOptions": {
|
||||
"message": "تنظیم گزینهها"
|
||||
},
|
||||
"submit": {
|
||||
"message": "ثبت"
|
||||
},
|
||||
"cancel": {
|
||||
"message": "لغو"
|
||||
},
|
||||
"delete": {
|
||||
"message": "حذف"
|
||||
},
|
||||
"preview": {
|
||||
"message": "پیشنمایش"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "ثبتنشده"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "مشاهده"
|
||||
},
|
||||
"edit": {
|
||||
"message": "ویرایش"
|
||||
},
|
||||
"to": {
|
||||
"message": "به",
|
||||
"description": "Used between segments. Example: 1:20 to 1:30"
|
||||
},
|
||||
"category_sponsor": {
|
||||
"message": "اسپانسر"
|
||||
},
|
||||
"category_music_offtopic_short": {
|
||||
"message": "غیر موسیقی"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "برجسته"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "ردکردن خودکار"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "ردکردن دستی"
|
||||
},
|
||||
"bracketNow": {
|
||||
"message": "(اکنون)"
|
||||
},
|
||||
"bracketEnd": {
|
||||
"message": "(پایان)"
|
||||
},
|
||||
"help": {
|
||||
"message": "راهنما"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "فهمیدم",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"Donate": {
|
||||
"message": "کمک مالی"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,13 +11,13 @@
|
||||
"message": "Palvelin sanoi tämän pyynnön olevan virheellinen"
|
||||
},
|
||||
"429": {
|
||||
"message": "Olet lähettänyt liian monta sponsorointiaikaa tälle yhdelle videolle. Oletko varma, että niitä on useita?"
|
||||
"message": "Olet lähettänyt liian monta sponsorointiaikaa tälle yhdelle videolle. Oletko varma, että niitä on näin monta?"
|
||||
},
|
||||
"409": {
|
||||
"message": "Tämä on jo lähetetty aiemmin"
|
||||
},
|
||||
"channelWhitelisted": {
|
||||
"message": "Kanava lisätty valkoiselle listalle!"
|
||||
"message": "Kanava lisätty valkolistalle!"
|
||||
},
|
||||
"Segment": {
|
||||
"message": "segmentti"
|
||||
@@ -41,7 +41,7 @@
|
||||
"message": "Ladataan..."
|
||||
},
|
||||
"Hide": {
|
||||
"message": "Älä Näytä Koskaan"
|
||||
"message": "Älä näytä koskaan"
|
||||
},
|
||||
"hitGoBack": {
|
||||
"message": "Paina 'älä ohita' mennäksesi takaisin kohtaan jossa olit."
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Ohita uudelleen"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Poista mykistys"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Pysäytetty"
|
||||
},
|
||||
@@ -77,14 +80,17 @@
|
||||
"message": "Segmentti alkaa nyt"
|
||||
},
|
||||
"sponsorEnd": {
|
||||
"message": "Segmentti Päättyy Nyt"
|
||||
"message": "Segmentti päättyy nyt"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "Peruuta Segmentin Luominen"
|
||||
"message": "Peruuta segmentin luominen"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "YouTube-videota ei löytynyt.\nJos tämä on väärässä, päivitä välilehti."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Päivitä segmentit"
|
||||
},
|
||||
"success": {
|
||||
"message": "Onnistui!"
|
||||
},
|
||||
@@ -97,20 +103,17 @@
|
||||
"connectionError": {
|
||||
"message": "Yhteysvirhe on tapahtunut. Virhekoodi: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Haluatko lähettää segmentit videotunnukselle"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Tyhjennä Segmentit"
|
||||
"message": "Tyhjennä segmentit"
|
||||
},
|
||||
"openPopup": {
|
||||
"message": "Avaa SponsorBlock-ponnahdusikkuna"
|
||||
},
|
||||
"closePopup": {
|
||||
"message": "Sulje Ponnahdusikkuna"
|
||||
"message": "Sulje ponnahdusikkuna"
|
||||
},
|
||||
"SubmitTimes": {
|
||||
"message": "Lähetä Segmentit"
|
||||
"message": "Lähetä segmentit"
|
||||
},
|
||||
"submitCheck": {
|
||||
"message": "Haluatko varmasti lähettää tämän?"
|
||||
@@ -122,7 +125,7 @@
|
||||
"message": "Poista kanava valkolistalta"
|
||||
},
|
||||
"voteOnTime": {
|
||||
"message": "Äänestä Segmenttiä"
|
||||
"message": "Äänestä segmenttiä"
|
||||
},
|
||||
"Submissions": {
|
||||
"message": "Lähetykset"
|
||||
@@ -137,7 +140,7 @@
|
||||
"message": "Lähetä"
|
||||
},
|
||||
"submissionEditHint": {
|
||||
"message": "Osien muokkaus ilmestyy sen jälkeen, kun klikkaat lähetä-nappia",
|
||||
"message": "Osien muokkaus ilmestyy sen jälkeen, kun klikkaat lähetä-painiketta",
|
||||
"description": "Appears in the popup to inform them that editing has been moved to the video player."
|
||||
},
|
||||
"popupHint": {
|
||||
@@ -158,8 +161,11 @@
|
||||
"setUsername": {
|
||||
"message": "Aseta käyttäjänimi"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Kopio julkinen UserID"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Liity mukaan viralliseen discord-palvelimeen, jotta voit antaa ehdotuksia ja palautetta!"
|
||||
"message": "Liity mukaan viralliselle Discord-palvelimelle, jotta voit antaa ehdotuksia ja palautetta!"
|
||||
},
|
||||
"hideThis": {
|
||||
"message": "Piilota tämä"
|
||||
@@ -168,7 +174,7 @@
|
||||
"message": "Asetukset"
|
||||
},
|
||||
"showButtons": {
|
||||
"message": "Näytä Painikkeet YouTuben Soittimessa"
|
||||
"message": "Näytä painikkeet YouTuben soittimessa"
|
||||
},
|
||||
"hideButtons": {
|
||||
"message": "Piilota painikkeet YouTuben soittimessa"
|
||||
@@ -176,38 +182,38 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Tämä piilottaa YouTuben soittimessa näkyvät, ohitettavien aikojen lähettämiseen käytetyt painikkeet."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Pidä \"Ohita kohtaan: Kohokohta\" -painike soittimessa"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Näytä Info-Painike YouTuben Soittimessa"
|
||||
"message": "Näytä info-painike YouTuben soittimessa"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Piilota info-painike YouTuben soittimessa"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Tämä on painike, joka avaa ponnahdusikkunan YouTube-sivulla."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Piilota info-painike automaattisesti"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Piilota poista-painike YouTuben soittimessa"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "Näytä Poista-Painike YouTuben Soittimessa"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Tämä on YouTuben soittimen painike, joka poistaa kaikki kyseisen videon sponsorointikohdat, joita et ole vielä lähettänyt."
|
||||
"message": "Näytä poista-painike YouTuben soittimessa"
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Ota Ohitusten Lukumäärän Seuranta Käyttöön"
|
||||
"message": "Ota ohitusten lukumäärän seuranta käyttöön"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "Tämä toiminto seuraa, mitä segmenttejä olet ohittanut. Sen avulla käyttäjät saavat tietää, kuinka paljon heidän lähetyksensä ovat auttaneet muita, ja sitä käytetään myös mittarina äänestysten kanssa estääksemme spämmin pääsyn tietokantaan. Laajennus lähettää viestin palvelimelle aina, kun ohitat segmentin. Toivottavasti useimmat eivät muuta tätä asetusta, jotta katselunumerot pysyisivät tarkkoina. :)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "Ota Ohitusten Lukumäärän Seuranta Käyttöön Yksityis-/Incognito-välilehdissä"
|
||||
"message": "Ota ohitusten lukumäärän seuranta käyttöön yksityis-/incognito-välilehdissä"
|
||||
},
|
||||
"enableQueryByHashPrefix": {
|
||||
"message": "Kysely Tiiviste-etuliittellä"
|
||||
"message": "Kysely tiiviste-etuliittellä"
|
||||
},
|
||||
"whatQueryByHashPrefix": {
|
||||
"message": "Kokonaisen videon ID:n lähettämisen sijaan ID:n hashin 4 ensimmäistä merkkiä lähetetään. Palvelin lähettää takaisin dataa kaikista videoista, joilla on vastaavat hashit."
|
||||
"message": "Sen sijaan, että videoID:tä käyttäen pyydettäisiin segmenttejä palvelimelta, videoID:n tiivisteen 4 ensimmäistä merkkiä lähetetään. Tämä palvelin lähettää takaisin dataa kaikista videoista, joilla on samankaltaiset tiivisteet."
|
||||
},
|
||||
"enableRefetchWhenNotFound": {
|
||||
"message": "Hae segmentit uudelleen uusissa videoissa"
|
||||
@@ -216,10 +222,28 @@
|
||||
"message": "Jos video on uusi, eikä segmenttejä löydy, niitä haetaan uudelleen muutaman minuutin välein katsoessasi."
|
||||
},
|
||||
"showNotice": {
|
||||
"message": "Näytä Huomautus Uudelleen"
|
||||
"message": "Näytä ilmoitus uudelleen"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Näytä ilmoitus ohitetun segmentin jälkeen"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Täysikokoiset ohitusilmoitukset"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Pienet ohitusilmoitukset automaattiselle ohitukselle"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Kaikki pienet ohitusilmoitukset"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Haalistuneet ohitusilmoitukset automaattiselle ohitukselle"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Kaikki haalistuneet ohitusilmoitukset"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlockin avulla voit ohittaa sponsorit, introt, outrot, tilausmuistutukset ja muut ärsyttävät osat YouTube-videoissa. SponsorBlock on joukkoistettu selainlaajennus, jonka avulla kuka tahansa voi lähettää sponsoroitujen ja muiden Youtube-videoiden segmenttien aloitus- ja päättymisajat. Kun yksi henkilö on lähettänyt tämän tiedon, kaikki muut, joilla on tämä laajennus, ohittavat sponsoroidun segmentin. Voit myös ohittaa musiikkivideoiden musiikittomat osat.",
|
||||
"message": "SponsorBlockin avulla voit ohittaa sponsorit, introt, outrot, tilausmuistutukset ja muut ärsyttävät osat YouTube-videoissa. SponsorBlock on joukkoistettu selainlaajennus, jonka avulla kuka tahansa voi lähettää Youtube-videoiden sponsoroitujen ja muiden segmenttien aloitus- ja päättymisajat. Kun yksi henkilö on lähettänyt tämän tiedon, kaikki muut, joilla on tämä laajennus, ohittavat sponsoroidun segmentin. Voit myös ohittaa musiikkivideoiden musiikittomat osat.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
},
|
||||
"website": {
|
||||
@@ -245,13 +269,13 @@
|
||||
"message": "Aseta pikanäppäin segmentin aloittamiseen/lopettamiseen"
|
||||
},
|
||||
"setSubmitKeybind": {
|
||||
"message": "Aseta näppäin tietojen lähetykseen"
|
||||
"message": "Aseta pikanäppäin tietojen lähetykseen"
|
||||
},
|
||||
"keybindDescription": {
|
||||
"message": "Valitse näppäin painamalla sitä"
|
||||
},
|
||||
"keybindDescriptionComplete": {
|
||||
"message": "Näppäinmääritys on asetettu näppäimeen: "
|
||||
"message": "Pikanäppäin on asetettu näppäimeen: "
|
||||
},
|
||||
"0": {
|
||||
"message": "Yhteyden aikakatkaisu. Tarkista internet-yhteytesi. Jos internetyhteytesi toimii, palvelin on todennäköisesti ylikuormittunut tai alhaalla."
|
||||
@@ -263,7 +287,7 @@
|
||||
"message": "Ohitus on poistettu käytöstä"
|
||||
},
|
||||
"yourWork": {
|
||||
"message": "Sinun työsi",
|
||||
"message": "Työsi",
|
||||
"description": "Used to describe the section that will show you the statistics from your submissions."
|
||||
},
|
||||
"502": {
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Ohita"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Mykistä"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Ohita {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Mykistä {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Ohita kohtaan: {0}",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Ohitettu"
|
||||
"message": "{0} ohitettu",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} Mykistetty",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Ohitettiin kohtaan: {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Poista automaattinen ohitus käytöstä"
|
||||
@@ -288,7 +331,7 @@
|
||||
"message": "Ota automaattinen ohitus käyttöön"
|
||||
},
|
||||
"audioNotification": {
|
||||
"message": "Äänellinen Ilmoitus Ohitettaessa"
|
||||
"message": "Ääni-ilmoitus ohitettaessa"
|
||||
},
|
||||
"audioNotificationDescription": {
|
||||
"message": "Ääni-ilmoitus ohittaessa toistaa äänen kun segmentti ohitetaan. Jos asetus on pois päältä (tai automaattinen ohitus on pois käytöstä), ääntä ei soiteta."
|
||||
@@ -306,13 +349,13 @@
|
||||
"message": "Olet säästänyt itseltäsi "
|
||||
},
|
||||
"minLower": {
|
||||
"message": "minuutti"
|
||||
"message": "minuutin"
|
||||
},
|
||||
"minsLower": {
|
||||
"message": "minuuttia"
|
||||
},
|
||||
"hourLower": {
|
||||
"message": "tunti"
|
||||
"message": "tunnin"
|
||||
},
|
||||
"hoursLower": {
|
||||
"message": "tuntia"
|
||||
@@ -327,10 +370,10 @@
|
||||
"message": "Tarkista palvelimen tila osoitteessa status.sponsor.ajay.app."
|
||||
},
|
||||
"changeUserID": {
|
||||
"message": "Tuo/vie sinun UserID:si"
|
||||
"message": "Tuo/vie UserID:si"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Tämä tulisi pitää yksityisenä. Tämä on kuin salasana eikä sitä pitäisi jakaa kenellekään. Jos joku saa tämän, hän voi esiintyä sinuna."
|
||||
"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"
|
||||
@@ -341,30 +384,24 @@
|
||||
"createdBy": {
|
||||
"message": "Luonut"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Ohita Automaattisesti"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Näytä ilmoitus ohitetun segmentin jälkeen"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Tällä hetkellä se on asetettu:"
|
||||
"message": ". Tällä hetkellä se on asetettu näppäimeen:"
|
||||
},
|
||||
"supportOtherSites": {
|
||||
"message": "Tue Kolmansien Osapuolien YouTube-sivustoja"
|
||||
"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.",
|
||||
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
|
||||
},
|
||||
"supportedSites": {
|
||||
"message": "Tuetut Sivustot: "
|
||||
"message": "Tuetut sivustot: "
|
||||
},
|
||||
"optionsInfo": {
|
||||
"message": "Ota käyttöön Invidious tuki, poista käytöstä automaattinen ohitus, piilota painikkeet ja muuta."
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"message": "Lisää Kolmannen Osapuolen Asiakasohjelmainstanssi"
|
||||
"message": "Lisää kolmannen osapuolen asiakasohjelmainstanssi"
|
||||
},
|
||||
"addInvidiousInstanceDescription": {
|
||||
"message": "Lisää mukautettu instanssi. Tämän täytyy olla formatoitu VAIN verkkotunnuksella. Esimerkki: invidious.ajay.app"
|
||||
@@ -390,17 +427,20 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Segmenttejä jotka ovat asetettua arvoa lyhyempiä ei ohiteta tai näytetä soittimessa."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Ohitusilmoituksen kesto (sekuntia):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Ohitusimoitus pysyy näytöllä ainakin näin kauan.\nManuaalisella ohituksella se saattaa pysyä pitempäänkin."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Seuraava lähetys on lyhyempi kuin vähimmäiskeston asetuksesi. Tämä voi tarkoittaa sitä, että tämä on jo lähetetty ja sitä ei vain oteta huomioon tämän asetuksen vuoksi. Oletko varma, että haluat lähettää?"
|
||||
"message": "Seuraava lähetys on lyhyempi kuin vähimmäiskeston asetuksesi. Tämä voi tarkoittaa sitä, että tämä on jo lähetetty, ja sitä ei vain oteta huomioon tämän asetuksen vuoksi. Oletko varma, että haluat lähettää?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Näytä lähetä-painike"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Tämä painike ilmestyy YouTube-soittimeen, kun olet valinnut aikaleiman ja olet valmis lähettämään sen."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock Palvelimen Osoite"
|
||||
"message": "SponsorBlock-palvelimen osoite"
|
||||
},
|
||||
"customServerAddressDescription": {
|
||||
"message": "Osoite, jota SponsorBlock käyttää lähettääkseen kutsuja palvelimelle.\nEllei sinulla ole omaa palvelininstanssia, tätä ei pitäisi muuttaa."
|
||||
@@ -436,10 +476,10 @@
|
||||
"message": "Tämä JSON ei ole muotoiltu oikein. Asetuksiasi ei ole muutettu."
|
||||
},
|
||||
"confirmNoticeTitle": {
|
||||
"message": "Lähetä kohta"
|
||||
"message": "Lähetä segmentti"
|
||||
},
|
||||
"submit": {
|
||||
"message": "Jatka"
|
||||
"message": "Lähetä"
|
||||
},
|
||||
"cancel": {
|
||||
"message": "Peruuta"
|
||||
@@ -460,7 +500,7 @@
|
||||
"message": "Muokkaa"
|
||||
},
|
||||
"copyDebugInformation": {
|
||||
"message": "Kopioi Vianetsintätiedot Leikepöydälle"
|
||||
"message": "Kopioi vianetsintätiedot leikepöydälle"
|
||||
},
|
||||
"copyDebugInformationFailed": {
|
||||
"message": "Kirjoittaminen leikepöydälle epäonnistui"
|
||||
@@ -488,7 +528,7 @@
|
||||
"message": "Maksettu mainostus, maksetut viittaukset ja suorat mainokset. Ei itsensä mainostukselle tai huikkauksille kampanjoista/luojista/nettisivuista/tuotteista, joista he pitävät."
|
||||
},
|
||||
"category_selfpromo": {
|
||||
"message": "Maksamaton/Itsensä Mainostus"
|
||||
"message": "Maksamaton/Itsensä mainostus"
|
||||
},
|
||||
"category_selfpromo_description": {
|
||||
"message": "Samankaltainen \"sponsorin\" kanssa, mutta maksamattomalle tai itsensä mainostukselle. Tämä sisältää osioita kauppatavarasta, lahjoituksista tai tietoa siitä, kenen kanssa he ovat tehneet yhteistyötä."
|
||||
@@ -523,39 +563,72 @@
|
||||
"category_preview_description": {
|
||||
"message": "Nopea kertaus aiemmista jaksoista, tai esikatselu siitä, mitä on tulossa myöhemmin nykyisessä videossa. Tarkoitettu yhteen editoituja klippejä varten, ei puhutuille yhteenvedoille."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Epäolennainen täytesisältö"
|
||||
},
|
||||
"category_filler_description": {
|
||||
"message": "Täytteeksi tai huumoriksi lisättyjä sekundaarisia kohtauksia, joita ei vaadita videon pääsisällön ymmärtämiseen. Tämän ei tulisi sisältää segmenttejä, jotka tarjoavat kontekstia tai taustatietoja."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Täytesisältö"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Musiikki: Ei-Musiikki-Osio"
|
||||
"message": "Musiikki: Musiikiton osa"
|
||||
},
|
||||
"category_music_offtopic_description": {
|
||||
"message": "Vain musiikkivideoille. Tätä tulee käyttää vain musiikkivideoiden osissa, jotka eivät jo kuulu toiseen kategoriaan."
|
||||
},
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Ei-Musiikki"
|
||||
"message": "Musiikiton"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Kohokohta"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Kohta videossa, mitä suurin osa ihmisistä etsivät.\nSamankaltainen \"Video alkaa kohdassa x\" kommenttien kanssa."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Livestream: lahjoituksen/viestin lukeminen"
|
||||
"message": "Livestream: lahjoitusten/viestien lukeminen"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Viestin Lukeminen"
|
||||
"message": "Viestien lukeminen"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Poista käytöstä"
|
||||
"autoSkip": {
|
||||
"message": "Ohita automaattisesti"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Manuaalinen ohitus"
|
||||
},
|
||||
"showOverlay": {
|
||||
"message": "Näytä Liukusäätimessä"
|
||||
"message": "Näytä liukusäätimessä"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Poista käytöstä"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Ohita automaattisesti alkuun"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Kysy kun video latautuu"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Näytä liukusäätimessä"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Ohita kaikki segmentit automaattisesti, kun videossa on \"Musiikiton\" segmentti"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Salli segmentit, jotka mykistävät äänen ohittamisen sijaan"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Väriformaattisi on muotoiltu väärin. Sen pitäisi olla 3 tai 6 numeroinen hex-koodi, jossa on # alussa."
|
||||
},
|
||||
"previewColor": {
|
||||
"message": "Lähettämättömien Väri",
|
||||
"message": "Lähettämättömien väri",
|
||||
"description": "Referring to submissions that have not been sent to the server yet."
|
||||
},
|
||||
"seekBarColor": {
|
||||
"message": "Siirtymispalkin Väri"
|
||||
"message": "Siirtymispalkin väri"
|
||||
},
|
||||
"category": {
|
||||
"message": "Kategoria"
|
||||
@@ -583,14 +656,17 @@
|
||||
"message": "Valitse kategoria"
|
||||
},
|
||||
"enableThisCategoryFirst": {
|
||||
"message": "Lähettääksesi segmenttejä kategorialla \"{0}\", sinun täytyy aktivoida se asetuksista. Sinut uudelleenohjataan asetuksiin nyt.",
|
||||
"message": "Lähettääksesi segmenttejä \"{0}\" kategorialla, sinun täytyy aktivoida se asetuksista. Sinut uudelleenohjataan asetuksiin nyt.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Varoitus: Tämäntyyppisiä segmenttejä voi olla aktiivisena enintään yksi. Usean lähettäminen aiheuttaa sen, että satunnainen segmentti näytetään."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Sinun täytyy valita kategoria kaikille segmenteille, jota olet lähettämässä!"
|
||||
"message": "Sinun täytyy valita kategoria kaikille segmenteille, joita olet lähettämässä!"
|
||||
},
|
||||
"bracketEnd": {
|
||||
"message": "(Päättyy)"
|
||||
"message": "(Loppu)"
|
||||
},
|
||||
"hiddenDueToDownvote": {
|
||||
"message": "piilotettu: miinusääniä"
|
||||
@@ -621,31 +697,31 @@
|
||||
"message": "Jos et pysty ratkaisemaan tätä, poista käytöstä asetus 'Pakota kanavan tarkistus ennen ohittamista', koska SponsorBlock ei pysty noutamaan tämän videon kanavatietoja"
|
||||
},
|
||||
"forceChannelCheck": {
|
||||
"message": "Pakota Kanavan Tarkistus Ennen Ohittamista"
|
||||
"message": "Pakota kanavan tarkistus ennen ohittamista"
|
||||
},
|
||||
"whatForceChannelCheck": {
|
||||
"message": "Oletuksena segmentit ohitetaan heti ennen kuin kanava tiedetään. Oletuksena jotkut segmentit videon alussa saattavat tulla ohitetuiksi sallituilla kanavilla. Tämän vaihtoehdon ottaminen käyttöön estää sen, mutta kaikki ohitukset viivästyvät hieman, koska kanavatunnuksen saaminen voi kestää jonkin aikaa. Tämä viive saattaa olla huomaamaton, jos sinulla on nopea internetyhteys."
|
||||
},
|
||||
"forceChannelCheckPopup": {
|
||||
"message": "Harkitse \"Pakota Kanavan Tarkistus Ennen Ohittamista\" käyttöön ottaminen"
|
||||
"message": "Harkitse asetuksen \"Pakota kanavan tarkistus ennen ohittamista\" käyttöön ottaminen"
|
||||
},
|
||||
"downvoteDescription": {
|
||||
"message": "Virheellinen/väärä aika"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Väärä kategoria"
|
||||
"message": "Vaihda kategoria"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Tämä video on luokiteltu musiikiksi. Oletko varma, että siinä on sponsori? Jos tämä on sen sijaan \"musiikiton segmentti\", avaa laajennuksen asetukset ja ota tämä kategoria käyttöön. Sitten voit lähettää tämän segmentin oikeassa kategoriassa. Lue ohjeistus, jos on lisää kysyttävää."
|
||||
"message": "Tämä video on luokiteltu musiikiksi. Oletko varma, että siinä on sponsori? Jos tämä on oikeasti \"Musiikiton segmentti\", avaa laajennuksen asetukset ja ota tämä kategoria käyttöön. Sitten voit lähettää tämän segmentin oikeassa kategoriassa. Lue säännöt, jos olet vielä hämilläsi."
|
||||
},
|
||||
"multipleSegments": {
|
||||
"message": "Useita kohtia"
|
||||
"message": "Useita segmenttejä"
|
||||
},
|
||||
"guidelines": {
|
||||
"message": "Säännökset"
|
||||
"message": "Säännöt"
|
||||
},
|
||||
"readTheGuidelines": {
|
||||
"message": "Lue Säännökset!!",
|
||||
"message": "Lue säännöt!!",
|
||||
"description": "Show the first time they submit or if they are \"high risk\""
|
||||
},
|
||||
"categoryUpdate1": {
|
||||
@@ -653,5 +729,121 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Avaa asetukset ohittaaksesi introt, outrot, kauppatavarat, jne."
|
||||
},
|
||||
"help": {
|
||||
"message": "Ohje"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Selvä",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Jättäydy pois kaikista tulevista kokeiluista",
|
||||
"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": "Piilota ikuisesti"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Sait varoituksen ja et voi lähettää segmenttejä väliaikaisesti. Tämä tarkoittaa, että huomasimme, että teit joitakin yleisiä virheitä, jotka eivät ole tahallisia, joten vahvistakaa, että ymmärrätte säännöt ja poistamme varoituksen. Voit myös liittyä tähän keskusteluun käyttäen discord.gg/SponsorBlock tai matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Ääni hylättiin varoituksen takia. Klikkaa avataksesi chatin sen ratkaisemiseksi, tai tule takaisin myöhemmin kun sinulla on siihen aikaa.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Lahjoita"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Piilota lahjoituslinkki"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Kiitos, että asensit SponsorBlockin."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Tarkista alla olevat vaihtoehdot kiitos"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Monet ominaisuudet ovat oletuksena pois päältä. Jos haluat ohittaa introt, outrot, käyttää Invidiousta, jne., ota ne käyttöön alhaalla. Voit myös piilottaa/näyttää käyttöliittymäelementtejä."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Miten ohittaminen toimii"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "Videosegmentit ohitetaan automaattisesti, jos ne löytyvät tietokannasta. Voit avata ponnahdusikkunan klikkaamalla laajennuksen kuvaketta saadaksesi esikatselun siitä, mitä ne ovat."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Aina kun ohitat segmentin, saat ilmoituksen. Jos ajoitus näyttää väärältä, äänestä alaspäin klikkaamalla 👎! Voit myös äänestää ponnahdusikkunassa."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Lähettäminen"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "Lähettäminen voidaan tehdä joko ponnahdusikkunassa painamalla \"Segmentti alkaa nyt\" -painiketta tai videosoittimessa olevilla painikkeilla."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Toistopainikkeen klikkaaminen osoittaa segmentin alun ja pysäytyskuvakkeen klikkaaminen sen lopun. Voit valmistella useita sponsoreita ennen kuin painat lähetä. Lähetä-painikkeen klikkaaminen lähettää segmentin. Roskakorin klikkaaminen poistaa."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Muokkaus"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Jos jokin meni pieleen, voit muokata tai poistaa segmenttisi ylänuolipainikkeen klikkaamisen jälkeen."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Tämä on liian hidasta"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Voit käyttää pikanäppäimiä jos haluat. Paina puolipiste näppäintä merkitäksesi sponsori segmentin alun/lopun, ja paina heittomerkkiä lähettääksesi sen. Nämä voidaan vaihtaa asetuksista. Jos et käytä QWERTYä, sinun varmaan kannattaisi vaihtaa pikanäppäimet."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Voinko saada kopion tietokannasta? Mitä tapahtuu, jos katoat?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Tietokanta on julkinen ja saatavilla osoitteessa"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "Lähdekoodi on vapaasti saatavilla. Joten, vaikka jotain tapahtuisi minulle, sinun lähetyksesi eivät katoa."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Uutiset ja miten se on tehty"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Mistä voin saada lähdekoodin?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Tekijät"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Opi lisää"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Äänestää alas ja luo paikallisen kopion, jonka voit lähettää uudelleen"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Avaa tämän kategorian wiki-sivu."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Kopioi ja äänestä alas"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Jatka äänestystä"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Tämä vaikuttaa sinun segmentteihin välittömästi"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Uutta! Ohita epäolennaiset kohdat ja vitsit täytesisältö kategorialla. Ota se käyttöön asetuksista"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "pv",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "t",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Sauter"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Réactiver le son"
|
||||
},
|
||||
"paused": {
|
||||
"message": "En pause"
|
||||
},
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "Aucune vidéo YouTube trouvée.\nActualisez l'onglet si il est censé y en avoir une."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Rafraîchir les segments"
|
||||
},
|
||||
"success": {
|
||||
"message": "Succès !"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Erreur de connexion. Code d'erreur : "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Voulez-vous soumettre vos segments pour la vidéo"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Effacer les segments"
|
||||
},
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Choisir un pseudonyme"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Copier l'ID utilisateur"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Rejoignez le serveur Discord officiel pour toutes suggestions ou remarques!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Cela permet de cacher du lecteur YouTube les boutons utilisés pour soumettre des segments commerciaux. Je peux \ncomprendre que certaines personnes les trouvent perturbants. Au lieu d'utiliser ces boutons, cette fenêtre peut être utilisée \npour soumettre des segments commerciaux. Pour cacher la notification, utilisez le bouton \"Ne plus montrer\" sur la notification. Vous pouvez toujours réactiver ces paramètres plus tard."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Conserver le bouton \"Aller au point essentiel\" sur le lecteur"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Montrer le bouton Info sur le lecteur YouTube"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Cacher le bouton Info sur le lecteur YouTube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Il s'agit du bouton qui ouvre l'encart sur la page YouTube."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Masquer Automatiquement Le Button Info"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Cacher le bouton Supprimer sur le lecteur YouTube"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Montrer le bouton Supprimer sur le lecteur YouTube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Il s'agit du bouton qui permet de supprimer tous les segments commerciaux depuis le lecteur YouTube."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Activer le suivi du nombre de sauts de segments"
|
||||
},
|
||||
@@ -204,13 +210,13 @@
|
||||
"message": "Activer le suivi du nombre de sauts dans les onglets privés/incognito"
|
||||
},
|
||||
"enableQueryByHashPrefix": {
|
||||
"message": "Requête avec seulement le début du hash"
|
||||
"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."
|
||||
},
|
||||
"enableRefetchWhenNotFound": {
|
||||
"message": "Re-récupérer les segments sur les nouvelles vidéos"
|
||||
"message": "Récupérer les segments sur les nouvelles vidéos"
|
||||
},
|
||||
"whatRefetchWhenNotFound": {
|
||||
"message": "Si la vidéo est nouvelle et qu'aucun segment n'a été trouvé, ils seront réactualisés toutes les quelques minutes pendant le visionnage."
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Afficher la notification"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Notifier après qu'un segment ait été sauté"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Notifications de passage"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Petite notifications de passage pour l'auto skip"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Toute les petites notifications de passage"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Notifications de passage qui disparaissent pour l'auto skip"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Toute les notifications de passage qui disparaissent"
|
||||
},
|
||||
"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.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Passer"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Couper le son"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Passer {0} ?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Mettre en sourdine {0} ?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Passer à {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Passé"
|
||||
"message": "{0} ignoré",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} mis en sourdine",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Sauté à {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Désactiver le passage automatique"
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Importer/Exporter Votre ID d'Utilisateur"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Cette information doit rester confidentielle. C'est comme un mot de passe et ne devrait pas être partagé avec quiconque. Si quelqu'un l'obtient, il pourra se faire passer pour vous."
|
||||
"message": "Cela devrait rester privé. C'est comme un mot de passe et ne devrait être partagé avec personne. Si quelqu'un a cela, il peut vous usurper. Si vous recherchez votre identifiant d'utilisateur public, cliquez sur l'icône du presse-papiers dans le popup."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "Définir \"UserID\""
|
||||
@@ -341,18 +384,28 @@
|
||||
"createdBy": {
|
||||
"message": "Créé par"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Passage automatique"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Notifier après qu'un segment ait été sauté"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Il est actuellement réglé sur :"
|
||||
},
|
||||
"supportOtherSites": {
|
||||
"message": "Support de YouTube-Sites tierces"
|
||||
},
|
||||
"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.",
|
||||
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
|
||||
},
|
||||
"supportedSites": {
|
||||
"message": "Sites pris en charge : "
|
||||
},
|
||||
"optionsInfo": {
|
||||
"message": "Activer Invidious, désactiver le passage automatique, masquer les boutons et plus encore."
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"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"
|
||||
},
|
||||
"add": {
|
||||
"message": "Ajouter"
|
||||
},
|
||||
@@ -374,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Les segments plus courts que la valeur fixée ne seront pas sautés ou affichés dans le lecteur."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Durée du saut de segment (secondes):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "L'avis du saut restera à l'écran pendant au moins aussi longtemps. Pour passer manuellement, il peut être visible plus longtemps."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Le segment suivant est plus court que votre option de durée minimale. Cela pourrait signifier qu'il est déjà soumis, et just ignoré par cette option. Êtes-vous sûr de vouloir soumettre ?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Afficher le bouton de téléchargement"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Ce bouton apparaît sur le lecteur YouTube dès qu'un segment est prêt à être envoyé."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Adresse du serveur SponsorBlock"
|
||||
},
|
||||
@@ -434,6 +490,9 @@
|
||||
"preview": {
|
||||
"message": "Aperçu"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "Non soumis"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "Inspecter"
|
||||
},
|
||||
@@ -498,6 +557,21 @@
|
||||
"category_outro_description": {
|
||||
"message": "Crédits ou écrans de fin YouTube. Pas pour les conclusions contenant des informations."
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "Aperçu/Résumé"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "Résumé rapide des épisodes précédents, ou aperçu de ce qui se passera plus tard dans la vidéo en cours. Pour les plans collectifs édités, pas pour les résumés parlés."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Digressions"
|
||||
},
|
||||
"category_filler_description": {
|
||||
"message": "Des digressions ajoutées uniquement pour le remplissage ou l'humour qui ne sont pas requis pour comprendre le contenu principal de la vidéo. Cela ne devrait pas inclure des segments fournissant du contexte ou des détails de fond."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Remplissage"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Musique : Segment non musical"
|
||||
},
|
||||
@@ -507,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Hors musique"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"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\"."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Stream : lecture de dons et messages"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Lecture de messages"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Désactiver"
|
||||
"autoSkip": {
|
||||
"message": "Passage automatique"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Passer manuellement"
|
||||
@@ -522,9 +602,31 @@
|
||||
"showOverlay": {
|
||||
"message": "Afficher dans la barre de progression"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Désactiver"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Passer automatiquement au début"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Demander lors du chargement de la vidéo"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Afficher dans la barre de recherche"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Ignorer 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"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Votre couleur est mal formatée. Il devrait s'agir d'un code hexadécimal à 3 ou 6 chiffres avec un signe numérique au début."
|
||||
},
|
||||
"previewColor": {
|
||||
"message": "Couleur non soumise",
|
||||
"description": "Referring to submissions that have not been sent to the server yet."
|
||||
},
|
||||
"seekBarColor": {
|
||||
"message": "Couleur dans la barre de progression"
|
||||
},
|
||||
@@ -557,6 +659,9 @@
|
||||
"message": "Pour envoyer des segments de la catégorie \"{0}\", vous devez l'activer dans les options. Vous allez être redirigé vers les options maintenant.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Avertissement: Ce type de segment peut avoir au maximum un seul actif à la fois. En soumettant plusieurs segments, un seul aléatoire sera affiché."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Vous devez sélectionner une catégorie pour tous les segments que vous soumettez !"
|
||||
},
|
||||
@@ -604,7 +709,7 @@
|
||||
"message": "Segment de mauvaise qualité"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Mauvaise catégorie"
|
||||
"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."
|
||||
@@ -624,5 +729,121 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Ouvrir les options pour sauter les intros, outros, marchandises, etc."
|
||||
},
|
||||
"help": {
|
||||
"message": "Aide"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Compris",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Se désinscrire de toutes les futures expériences",
|
||||
"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": "Cacher pour toujours"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Vous avez reçu un avertissement et ne pouvez pas soumettre de segments temporairement. Cela signifie que nous avons remarqué que vous commettiez des erreurs courantes qui ne sont pas malveillantes. Veuillez simplement confirmer que vous comprenez les règles et nous supprimerons l'avertissement. Vous pouvez également rejoindre cette discussion en utilisant discord.gg/SponsorBlock ou matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Le vote a été rejeté en raison d'un avertissement. Cliquez pour ouvrir un chat et y mettre fin , ou revenez plus tard lorsque vous avez le temps.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Faire un don"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Cacher le lien de don"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Merci d'avoir installé SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"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."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Comment fonctionne le saut 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."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"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 la fin. Vous pouvez préparer plusieurs sponsors avant d'appuyer sur Soumettre. Cliquer sur le bouton de soumission enverra le segment. Cliquer sur le poubelle supprimera vos segments."
|
||||
},
|
||||
"Editing": {
|
||||
"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."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Puis-je obtenir une copie de la base de données ? Que se passe-t-il si vous disparaissez ?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"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."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Nouvelles et comment elles sont faites"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Où puis-je obtenir le code source ?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Crédits"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "En savoir plus"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Voter contre et crée une copie locale pour la resoumettre"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Ouvrez la page wiki de cette catégorie."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Copier et voter contre"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Continuer à voter"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Cela s'appliquera instantanément à vos segments"
|
||||
},
|
||||
"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 Shift peuvent être utilisées pour affiner les modifications."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Nouveau ! Ignorer les digressions et les blagues avec la catégorie \"remplissage\". Activable dans les options"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "j",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "h",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,9 +94,6 @@
|
||||
"connectionError": {
|
||||
"message": "התקבלה שגיאת חיבור. קוד השגיאה: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "האם אתה רוצה לדווח עבור סרטון שמספר הזיהוי שלו הוא"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "נקה מקטעים"
|
||||
},
|
||||
@@ -155,6 +152,10 @@
|
||||
"hideInfoButton": {
|
||||
"message": "החבא כפתור מידע בנגן YouTube"
|
||||
},
|
||||
"website": {
|
||||
"message": "אתר",
|
||||
"description": "Used on Firefox Store Page"
|
||||
},
|
||||
"sourceCode": {
|
||||
"message": "קוד מקור",
|
||||
"description": "Used on Firefox Store Page"
|
||||
@@ -183,10 +184,10 @@
|
||||
"createdBy": {
|
||||
"message": "נוצר על ידי"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "דילוג אוטומטי"
|
||||
},
|
||||
"add": {
|
||||
"message": "הוסף"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "דילוג אוטומטי"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Preskoči opet"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Uključi zvuk"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Pauzirano"
|
||||
},
|
||||
@@ -79,6 +82,15 @@
|
||||
"sponsorEnd": {
|
||||
"message": "Isječak završava sada"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "Otkaži Kreiranje Segmenta"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "Nijedan YouTube video nije pronađen.\nAko ovo nije točno, osvježite karticu."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Osvježi segmente"
|
||||
},
|
||||
"success": {
|
||||
"message": "Uspjeh!"
|
||||
},
|
||||
@@ -91,24 +103,39 @@
|
||||
"connectionError": {
|
||||
"message": "Dogodija se greška u povezivanju. Kod pogreške: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Želiš li unijeti za video id"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Očisti isječke"
|
||||
},
|
||||
"openPopup": {
|
||||
"message": "Otvori okvir SponsorBlock"
|
||||
},
|
||||
"closePopup": {
|
||||
"message": "Zatvori izbornik"
|
||||
},
|
||||
"SubmitTimes": {
|
||||
"message": "Podnesi isječke"
|
||||
},
|
||||
"submitCheck": {
|
||||
"message": "Jesi li siguran da želiš unijeti ovo?"
|
||||
},
|
||||
"whitelistChannel": {
|
||||
"message": "Dopusti kanal"
|
||||
},
|
||||
"removeFromWhitelist": {
|
||||
"message": "Izbaci kanal iz bijele liste"
|
||||
},
|
||||
"voteOnTime": {
|
||||
"message": "Glasaj za isječak"
|
||||
},
|
||||
"Submissions": {
|
||||
"message": "Prijava"
|
||||
},
|
||||
"savedPeopleFrom": {
|
||||
"message": "Sačuvali ste ljude od"
|
||||
},
|
||||
"viewLeaderboard": {
|
||||
"message": "Ljestvica"
|
||||
},
|
||||
"recordTimesDescription": {
|
||||
"message": "Pošalji"
|
||||
},
|
||||
@@ -116,21 +143,69 @@
|
||||
"message": "Uređivanje dijela prikazat će se nakon što pritisneš gumb za slanje",
|
||||
"description": "Appears in the popup to inform them that editing has been moved to the video player."
|
||||
},
|
||||
"popupHint": {
|
||||
"message": "Savjet: Možete namjestiti tipke za podnošenje u opcijama"
|
||||
},
|
||||
"clearTimesButton": {
|
||||
"message": "Očisti vremena"
|
||||
},
|
||||
"submitTimesButton": {
|
||||
"message": "Unesi vremena"
|
||||
},
|
||||
"publicStats": {
|
||||
"message": "Ovo se koristi na stranici sa javnim statistikama da se pokaže koliko se pridonijeli. Pogledajte"
|
||||
},
|
||||
"Username": {
|
||||
"message": "Korisničko ime"
|
||||
},
|
||||
"setUsername": {
|
||||
"message": "Postavi korisničko ime"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Kopiraj javni UserID"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Pridružite nam se u službenoj Discord zajednici i pošaljite svoje prijedloge i povrate informacije!"
|
||||
},
|
||||
"hideThis": {
|
||||
"message": "Sakrijte ovo"
|
||||
},
|
||||
"Options": {
|
||||
"message": "Opcije"
|
||||
},
|
||||
"showButtons": {
|
||||
"message": "Prikaži gumbe na YouTube Playeru"
|
||||
},
|
||||
"hideButtons": {
|
||||
"message": "Sakrij gumbe na YouTube playeru"
|
||||
},
|
||||
"hideButtonsDescription": {
|
||||
"message": "Ovo skriva gumbe koji se pojavljuju na YouTube playeru za slanje odsječaka za preskakanje."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Zadržite gumb za preskakanje i označavanje na playeru"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Prikaži gumb za informacije na YouTube Playeru"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Sakrij gumb za informacije na YouTube Playeru"
|
||||
},
|
||||
"autoHideInfoButton": {
|
||||
"message": "Automatski sakrij info gumb"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Sakrij gumb za brisanje na YouTube playeru"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "Pokaži gumb za brisanje na YouTube sviraču"
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Omogući brojanje preskakanja"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Pokaži obavijest nakon preskakanja isječka"
|
||||
},
|
||||
"website": {
|
||||
"message": "Web-stranica",
|
||||
"description": "Used on Firefox Store Page"
|
||||
@@ -139,6 +214,9 @@
|
||||
"message": "Izvorni kod",
|
||||
"description": "Used on Firefox Store Page"
|
||||
},
|
||||
"0": {
|
||||
"message": "Veza istekla. Provjerite svoju internetski vezu. Ako vaš internet radi, poslužitelj je vjerojatno preopterećen ili nedostupan."
|
||||
},
|
||||
"disableSkipping": {
|
||||
"message": "Preskakanje je aktivirano"
|
||||
},
|
||||
@@ -149,6 +227,9 @@
|
||||
"message": "Tvoja slanja",
|
||||
"description": "Used to describe the section that will show you the statistics from your submissions."
|
||||
},
|
||||
"502": {
|
||||
"message": "Čini se da je poslužitelj preopterećen. Pokušajte ponovno za nekoliko sekundi."
|
||||
},
|
||||
"errorCode": {
|
||||
"message": "Kȏd greške: "
|
||||
},
|
||||
@@ -158,8 +239,16 @@
|
||||
"skip_category": {
|
||||
"message": "Preskočiti {0}?"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Preskočeno"
|
||||
"mute_category": {
|
||||
"message": "Utišati {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Preskočiti na {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Preskočeno na {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Deaktiviraj automatsko preskakanje"
|
||||
@@ -179,8 +268,8 @@
|
||||
"hoursLower": {
|
||||
"message": "h"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Ovo bi trebalo ostati privatno. slično je lozinki i ne bi se smjelo dijeliti ni s kime. Ako netko ovo ima, mogu se lažno predstavljati kao ti."
|
||||
"statusReminder": {
|
||||
"message": "Provjerite status.sponsor.ajay.app za status poslužitelja."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "Postavi UserID"
|
||||
@@ -191,15 +280,12 @@
|
||||
"createdBy": {
|
||||
"message": "Izradio"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Automatsko preskakanje"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Pokaži obavijest nakon preskakanja isječka"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Trenutno je postavljeno na:"
|
||||
},
|
||||
"supportedSites": {
|
||||
"message": "Podržane stranice: "
|
||||
},
|
||||
"optionsInfo": {
|
||||
"message": "Omogući podržavanje Invidiousa, onemogući automatsko preskakanje, sakrij gumbe i drugo."
|
||||
},
|
||||
@@ -224,12 +310,24 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Isječci kraći od postavljene vrijednosti neće biti preskočeni ili prikazani u playeru."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Duljina trajanja obavijesti o preskakanju (sekunde):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Obavijest o preskakanju ostat će na zaslonu barem ovoliko dugo. Za ručno preskakanje može biti duže vidljivo."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Adresa SponsorBlock poslužitelja"
|
||||
},
|
||||
"save": {
|
||||
"message": "Spremi"
|
||||
},
|
||||
"reset": {
|
||||
"message": "Resetiraj"
|
||||
},
|
||||
"exportOptions": {
|
||||
"message": "Uvezi/Izvezi sve postavke"
|
||||
},
|
||||
"setOptions": {
|
||||
"message": "Postavi opcije"
|
||||
},
|
||||
@@ -248,15 +346,34 @@
|
||||
"preview": {
|
||||
"message": "Pregledaj"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "Neposlano"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "Provjeri"
|
||||
},
|
||||
"edit": {
|
||||
"message": "Uredi"
|
||||
},
|
||||
"copyDebugInformationOptions": {
|
||||
"message": "Kopira informacije u međuspremnik koje treba dati razvojnom programeru kada otkrije grešku / kada to programer zatraži. Osjetljive informacije kao što su vaš korisnički ID, kanali s popisa dopuštenih i prilagođena adresa poslužitelja uklonjeni su. Međutim, sadrži informacije kao što su vaš korisnički agent, preglednik, operativni sustav i broj verzije proširenja. "
|
||||
},
|
||||
"theKey": {
|
||||
"message": "Tipka"
|
||||
},
|
||||
"keyAlreadyUsed": {
|
||||
"message": "je vezana za drugu radnju. Molimo odaberite drugu tipku."
|
||||
},
|
||||
"to": {
|
||||
"message": "do",
|
||||
"description": "Used between segments. Example: 1:20 to 1:30"
|
||||
},
|
||||
"category_sponsor": {
|
||||
"message": "Sponzor"
|
||||
},
|
||||
"category_sponsor_description": {
|
||||
"message": "Plaćene promocije, plaćene preporuke i izravne reklame. Nije za samopromociju ili besplatno pozivanje na događaje/kreatore/web stranice/proizvode koji im se sviđaju."
|
||||
},
|
||||
"category_selfpromo": {
|
||||
"message": "Neplaćena promocija ili samopromocija"
|
||||
},
|
||||
@@ -281,6 +398,15 @@
|
||||
"category_outro": {
|
||||
"message": "Završni kadrovi/Zasluge"
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "Pregled/Sažetak"
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Popuna tangenti"
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Popuna"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Glazba: Ne-glazbeni dio"
|
||||
},
|
||||
@@ -290,9 +416,28 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Ne-glazbeni"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Istaknuto"
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Livestream: čitanje donacija/poruka"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Čitanje poruka"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Automatsko preskakanje"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Ručno preskakanje"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Dopustite isječke koji isključuju zvuk umjesto da ga preskaču"
|
||||
},
|
||||
"previewColor": {
|
||||
"message": "Boja neposlanog",
|
||||
"description": "Referring to submissions that have not been sent to the server yet."
|
||||
},
|
||||
"category": {
|
||||
"message": "Kategorija"
|
||||
},
|
||||
@@ -300,6 +445,9 @@
|
||||
"message": "Preskoči opciju",
|
||||
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
|
||||
},
|
||||
"enableTestingServer": {
|
||||
"message": "Omogućite poslužitelj za beta testiranje"
|
||||
},
|
||||
"bracketNow": {
|
||||
"message": "(sada)"
|
||||
},
|
||||
@@ -309,6 +457,10 @@
|
||||
"chooseACategory": {
|
||||
"message": "Odaberi kategoriju"
|
||||
},
|
||||
"enableThisCategoryFirst": {
|
||||
"message": "Da biste poslali segmente s kategorijom \"{0}\", morate je omogućiti u postavkama. Sada ćete biti preusmjereni na postavke.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Moraš odabrati kategoriju za sve segmente koje šalješ!"
|
||||
},
|
||||
@@ -319,7 +471,7 @@
|
||||
"message": "Neispravno/krivo vrijeme"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Kriva kategorija"
|
||||
"message": "Promijenite kategoriju"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Ovaj je video kategoriziran kao glazba. Je li stvarno ima sponzora? Ako je ovo zapravo „Ne-glazbeni segment”, otvori opcije proširenja i aktiviraj ovu kategoriju. Zatim ovaj segment možeš posalti kao „Ne-glazbeni” umjesto sponzora. Pročitaj smjernice ako nešto nije jasno."
|
||||
@@ -339,5 +491,44 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Otvori opcije za preskakanje uvoda, kraja, proizvoda itd."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Doniraj"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Hvala na instaliranju SponsorBlocka."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Slanje"
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Klikom na gumb za reprodukciju označava se početak segmenta, a klik na ikonu za zaustavljanje označava kraj. Možete pripremiti više sponzora prije nego što pritisnete \"Pošalji\". Klikom na gumb za slanje bit će poslano. Klikom na kantu za smeće izbrisat će se."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Uređivanje"
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Ovo je presporo"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Gdje mogu pronaći izvorni kod?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Zasluge"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Saznajte više"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Otvorite wiki stranicu ove kategorije."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Kopiraj i glasaj protiv"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Nastavite glasati"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Ovo će se odmah primijeniti na vaše isječke"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"fullName": {
|
||||
"message": "SponorBlock YouTube-ra - Szponzorok átugrására",
|
||||
"message": "SponsorBlock YouTube-ra - Szponzorok átugrására",
|
||||
"description": "Name of the extension."
|
||||
},
|
||||
"Description": {
|
||||
@@ -11,7 +11,7 @@
|
||||
"message": "Szerver: Ez a kérés érvénytelen"
|
||||
},
|
||||
"429": {
|
||||
"message": "Túl sok szponzoridőt jelölt be ezen a videón. Biztos benne, hogy van ennyi?"
|
||||
"message": "Túl sok szponzoridőt jelöltél be ezen a videón. Biztosan van ennyi?"
|
||||
},
|
||||
"409": {
|
||||
"message": "Ez már korábban be lett küldve"
|
||||
@@ -23,7 +23,7 @@
|
||||
"message": "szegmens"
|
||||
},
|
||||
"Segments": {
|
||||
"message": "szegmensek"
|
||||
"message": "szegmens"
|
||||
},
|
||||
"upvoteButtonInfo": {
|
||||
"message": "Részlet felszavazása"
|
||||
@@ -44,7 +44,7 @@
|
||||
"message": "Ne mutassa többé"
|
||||
},
|
||||
"hitGoBack": {
|
||||
"message": "Kattintson a visszaugrásra, hogy visszakerüljön oda, ahonnan ugrott."
|
||||
"message": "Kattints a visszaugrásra, hogy visszakerülj oda, ahonnan ugrottál."
|
||||
},
|
||||
"unskip": {
|
||||
"message": "Visszaugrás"
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Újra-átugrás"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Némítás feloldása"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Szüneteltetve"
|
||||
},
|
||||
@@ -59,13 +62,13 @@
|
||||
"message": "Időzítő megállítva"
|
||||
},
|
||||
"confirmMSG": {
|
||||
"message": "Ahhoz, hogy értékeket szerkesszen, vagy töröljön kattintson az info gombra, vagy nyissa meg a bővítmény felugró ablakát a bővítmény ikonjával a jobb felső sarokban."
|
||||
"message": "Az egyes értékek szerkesztéséhez vagy törléséhez kattints az info gombra, vagy nyisd meg a bővítmény felugró ablakát a bővítmény ikonjával a jobb felső sarokban."
|
||||
},
|
||||
"clearThis": {
|
||||
"message": "Biztosan törölni akarja?\n\n"
|
||||
"message": "Biztosan törölni szeretnéd?\n\n"
|
||||
},
|
||||
"Unknown": {
|
||||
"message": "Hiba történt a szponzoridők bejelentésekor. Kérjük, próbálja újra."
|
||||
"message": "Hiba történt a szponzoridők beküldésekor. Kérjük, próbáld újra később."
|
||||
},
|
||||
"sponsorFound": {
|
||||
"message": "Ennek a videónak már vannak szegmensei az adatbázisban!"
|
||||
@@ -79,23 +82,26 @@
|
||||
"sponsorEnd": {
|
||||
"message": "Szegmens vége"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "Szegmens készítés visszavonása"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "Nem találtunk YouTube videót.\nHa ez helytelen, frissítsd a lapot."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Szegmensek frissítése"
|
||||
},
|
||||
"success": {
|
||||
"message": "Siker!"
|
||||
},
|
||||
"voted": {
|
||||
"message": "Szavazott!"
|
||||
"message": "Szavaztál!"
|
||||
},
|
||||
"serverDown": {
|
||||
"message": "Úgy tűnik a szerver nem működik. Kérjük, mihamarabb értesítse a fejlesztőket."
|
||||
"message": "Úgy tűnik, a szerver nem működik. Kérjük, mihamarabb értesítsd a fejlesztőket!"
|
||||
},
|
||||
"connectionError": {
|
||||
"message": "Kapcsolódási probléma merült fel. Error kód: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Szeretné beküldeni a szegmenst ehhez a videóhoz:"
|
||||
"message": "Kapcsolódási probléma merült fel. Hibakód: "
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Szegmensek törlése"
|
||||
@@ -107,10 +113,10 @@
|
||||
"message": "Felugró ablak bezárása"
|
||||
},
|
||||
"SubmitTimes": {
|
||||
"message": "Szegmens beküldése"
|
||||
"message": "Szegmensek beküldése"
|
||||
},
|
||||
"submitCheck": {
|
||||
"message": "Biztosan be akarja küldeni?"
|
||||
"message": "Biztosan be akarod küldeni?"
|
||||
},
|
||||
"whitelistChannel": {
|
||||
"message": "Csatorna fehérlistára tétele"
|
||||
@@ -124,20 +130,30 @@
|
||||
"Submissions": {
|
||||
"message": "Beküldések"
|
||||
},
|
||||
"savedPeopleFrom": {
|
||||
"message": "Megspóroltál másoknak: "
|
||||
},
|
||||
"viewLeaderboard": {
|
||||
"message": "Ranglista"
|
||||
},
|
||||
"recordTimesDescription": {
|
||||
"message": "Küldés"
|
||||
"message": "Beküldés"
|
||||
},
|
||||
"submissionEditHint": {
|
||||
"message": "A szegmens szerkesztés azután fog megjelenni, hogy a beküldésre kattintasz",
|
||||
"description": "Appears in the popup to inform them that editing has been moved to the video player."
|
||||
},
|
||||
"popupHint": {
|
||||
"message": "Tipp: A beállításokban megadhatsz gyorsbillentyűket a beküldéshez"
|
||||
},
|
||||
"clearTimesButton": {
|
||||
"message": "Időpontok törlése"
|
||||
},
|
||||
"submitTimesButton": {
|
||||
"message": "Időpontok megadása"
|
||||
"message": "Időpontok beküldése"
|
||||
},
|
||||
"publicStats": {
|
||||
"message": "Ezt használja a nyilvános ranglistán, hogy megmutassa mennyit járult hozzá. Nézze meg"
|
||||
"message": "Ez a nyilvános ranglistán használatos, ami mutatja, mennyit segítettél. Nézd meg"
|
||||
},
|
||||
"Username": {
|
||||
"message": "Felhasználónév"
|
||||
@@ -145,8 +161,11 @@
|
||||
"setUsername": {
|
||||
"message": "Felhasználónév megadása"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Nyilvános UserID másolása"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Csatlakozzon a hivatalos discord szerverhez, hogy javaslatokat és visszajelzést adhasson!"
|
||||
"message": "Gyere, csatlakozz a hivatalos discord szerverhez, hogy javaslatokat és visszajelzést adhass!"
|
||||
},
|
||||
"hideThis": {
|
||||
"message": "Elrejtés"
|
||||
@@ -163,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Ez elrejti az átugrandó szegmensek megjelöléséhez használt gombokat a YouTube lejátszón."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Kiemeléshez ugrás gomb maradjon a lejátszón"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Info gomb mutatása a YouTube lejátszón"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Info gomb elrejtése a YouTube lejátszón"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Ez a gomb felhoz egy felugró dobozt a YouTube oldalon."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Info gomb automatikus elrejtése"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Törlés gomb elrejtése a YouTube lejátszón"
|
||||
@@ -178,14 +200,14 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Törlés gomb mutatása a YouTube lejátszón"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Ez egy gomb a lejátszón, ami törli az összes beküldetlen szegmensét a jelenlegi videón."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Átugrás-számláló követés bekapcsolása"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "Ez a funkció követi, mely szegmenseket ugrotta át, hogy más felhasználók megtudhassák mennyit segítettek a bejelentéseik és a szavazatokkal együtt egy mértékegységként van használva, hogy ne kerülhessen spam az adatbázisba. A bővítmény küld egy üzenetet a szervernek, minden alkalommal, mikor átugrik egy szegmenst. Remélhetőleg nem sokan állítják át ezt a beállítást, hogy a számok pontosak maradhassanak. :)"
|
||||
"message": "Ez a funkció követi, mely szegmenseket ugrottad át, hogy a felhasználók megtudhassák mennyit segítettek a bejelentéseik, és a szavazatokkal együtt egy mértékegységként van használva, hogy ne kerülhessen szemét az adatbázisba. A bővítmény küld egy üzenetet a szervernek, minden alkalommal, mikor átugrasz egy szegmenst. Remélhetőleg nem sokan állítják át ezt a beállítást, hogy a számok pontosak maradhassanak. :)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "Átugrások számlálásának engedélyezése privát/inkognitó füleken"
|
||||
},
|
||||
"enableQueryByHashPrefix": {
|
||||
"message": "Lekérdezés Hash előtaggal"
|
||||
@@ -197,13 +219,31 @@
|
||||
"message": "Szegmensek újrakeresése új videókon"
|
||||
},
|
||||
"whatRefetchWhenNotFound": {
|
||||
"message": "Ha a videó új, és még nem találhatóak szegmensek, a bővítmény pár percenkét újra keresi őket, miközben nézi."
|
||||
"message": "Ha a videó új, és még nem találhatóak szegmensek, a bővítmény pár percenkét újra keresi őket, miközben nézed."
|
||||
},
|
||||
"showNotice": {
|
||||
"message": "Értesítés megjelenítése ismét"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Jelezzen, ha egy szegmens át lett ugorva"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Teljes méretű átugrási értesítők"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Kis méretű átugrási értesítők Auto átugrás esetén"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Csak kis méretű átugrási értesítők"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Halvány átugrási értesítők Auto átugrás esetén"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Csak halvány átugrási értesítők"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "A SponsorBlock-al átugorhatja a szponzorokat, introkat, outrokat, feliratkozás emlékeztetőket és a YouTube videók többi idegesítő részeit. A SponsorBlock egy közösség által vezérelt böngészőbővítmény, ami lehetővé tesz bárkit arra, hogy megjelölhesse egy szponzor vagy más szegmens kezdő és végpontjait. Ha megosztja ezt az információt, mindenki más ennek a bővítménynek a birtokában egyenesen átugorja majd ezt a szponzorszegmenst. Emellett például a zene videók nem-zene részei is átugorhatóak.",
|
||||
"message": "A SponsorBlockkal átugorhatja a szponzorokat, introkat, outrokat, feliratkozás emlékeztetőket és a YouTube videók többi idegesítő részeit. A SponsorBlock egy közösség által vezérelt böngészőbővítmény, ami lehetővé teszi bárkinek, hogy megjelölhesse egy szponzor vagy más szegmens kezdő és végpontjait. Amint valaki megosztja ezt az információt, mindenki más ennek a bővítménynek a birtokában egyenesen átugorja majd ezt a szponzorszegmenst. Emellett például a videóklipek nem-zene részei is átugorhatóak.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
},
|
||||
"website": {
|
||||
@@ -219,20 +259,26 @@
|
||||
"description": "The first line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"noticeUpdate2": {
|
||||
"message": "Ha még mindig nem tetszik, kattintson a ne mutassa többé gombra.",
|
||||
"message": "Ha még mindig nem tetszik, kattints a ne mutassa többé gombra.",
|
||||
"description": "The second line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"setSkipShortcut": {
|
||||
"message": "Billentyű beállítása szegmens átugráshoz"
|
||||
},
|
||||
"setStartSponsorShortcut": {
|
||||
"message": "Billentyű beállítása a szegmens kezdéséhez/befejezéséhez"
|
||||
},
|
||||
"setSubmitKeybind": {
|
||||
"message": "Billentyű beállítása a beküldés gombhoz"
|
||||
},
|
||||
"keybindDescription": {
|
||||
"message": "Válasszon billentyűt azzal, hogy lenyomja"
|
||||
"message": "Válassz egy billentyűt azzal, hogy lenyomod"
|
||||
},
|
||||
"keybindDescriptionComplete": {
|
||||
"message": "A funkció erre a billentyűre lett állítva: "
|
||||
},
|
||||
"0": {
|
||||
"message": "Kapcsolati időtúllépés. Ellenőrizze az internetkapcsolatot. Ha az internet működik, a kiszolgáló valószínűleg túlterhelt vagy leállt."
|
||||
"message": "Kapcsolati időtúllépés. Ellenőrizd az internetkapcsolatodat! Ha az internet működik, a kiszolgáló valószínűleg túlterhelt vagy leállt."
|
||||
},
|
||||
"disableSkipping": {
|
||||
"message": "Átugrás bekapcsolva"
|
||||
@@ -245,7 +291,7 @@
|
||||
"description": "Used to describe the section that will show you the statistics from your submissions."
|
||||
},
|
||||
"502": {
|
||||
"message": "Úgy tűnik, hogy a szerver túlterhelt. Néhány másodperc múlva próbálkozzon újra."
|
||||
"message": "Úgy tűnik, hogy a szerver túlterhelt. Próbálkozz újra néhány másodperc múlva."
|
||||
},
|
||||
"errorCode": {
|
||||
"message": "Hibakód: "
|
||||
@@ -253,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Átugrás"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Némítás"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Átugorja ezt: {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "{0} némítása?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Ugrás ide: {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Átugorva"
|
||||
"message": "{0} átugorva",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} némítva",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Ide ugorva: {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Auto átugrás kikapcsolása"
|
||||
@@ -269,7 +334,7 @@
|
||||
"message": "Hangjelzés átugráskor"
|
||||
},
|
||||
"audioNotificationDescription": {
|
||||
"message": "A hangjelzés átugráskor lejátszik egy hangot minden alkalommal amikor átugrik egy szegmenst. Ha kikapcsolja (vagy az auto átugrás ki van kapcsolva) nem lesz hangjelzés lejátszva."
|
||||
"message": "A hangjelzés átugráskor lejátszik egy hangot minden alkalommal, amikor egy szegmens átugrásra kerül. Ha kikapcsolod (vagy az auto átugrás ki van kapcsolva), nem lesz hangjelzés lejátszva."
|
||||
},
|
||||
"showTimeWithSkips": {
|
||||
"message": "Idő megtekintése az átugrandók nélkül"
|
||||
@@ -277,8 +342,11 @@
|
||||
"showTimeWithSkipsDescription": {
|
||||
"message": "Ez az idő zárójelben jelenik meg az aktuális idő mellett a keresősáv alatt. Megmutatja a videó teljes időtartamát, levonva a szegmenseket. Beletartoznak a csak \"Megjelenítés a keresősávban\" jelöléssel ellátott szegmensek is."
|
||||
},
|
||||
"youHaveSkipped": {
|
||||
"message": "Átugrottál: "
|
||||
},
|
||||
"youHaveSaved": {
|
||||
"message": "Megtakarított magának "
|
||||
"message": "Megtakarítottál magadnak: "
|
||||
},
|
||||
"minLower": {
|
||||
"message": "perc"
|
||||
@@ -292,39 +360,52 @@
|
||||
"hoursLower": {
|
||||
"message": "óra"
|
||||
},
|
||||
"youHaveSavedTime": {
|
||||
"message": "Megspóroltál másoknak"
|
||||
},
|
||||
"youHaveSavedTimeEnd": {
|
||||
"message": " az életükből"
|
||||
},
|
||||
"statusReminder": {
|
||||
"message": "A szerver állapotához tekintse meg a status.sponsor.ajay.app oldalt."
|
||||
"message": "A szerver állapotához tekintsd meg a status.sponsor.ajay.app oldalt."
|
||||
},
|
||||
"changeUserID": {
|
||||
"message": "UserID importálása / exportálása"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Ezt titokban kell tartani. Olyan, mint egy jelszó, nem szabad senkivel megosztania. Ha valakinek megvan, megszemélyesítheti Önt."
|
||||
"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"
|
||||
},
|
||||
"userIDChangeWarning": {
|
||||
"message": "Figyelem: A UserID megváltoztatása végleges. Biztosan szeretné megtenni? Minden esetben készítsen biztonsági másolatot a régiről."
|
||||
"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!"
|
||||
},
|
||||
"createdBy": {
|
||||
"message": "Készítette"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Auto átugrás"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Jelezzen, ha egy szegmens át lett ugorva"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Jelenleg erre van állítva:"
|
||||
},
|
||||
"supportOtherSites": {
|
||||
"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.",
|
||||
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
|
||||
},
|
||||
"supportedSites": {
|
||||
"message": "Támogatott oldalak: "
|
||||
},
|
||||
"optionsInfo": {
|
||||
"message": "Invidious támogatás engedélyezése, autoátugrás kikapcsolása, gombok eltűntetése és több."
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"message": "Harmadik fél kliens példányának hozzáadása"
|
||||
},
|
||||
"addInvidiousInstanceDescription": {
|
||||
"message": "Egyedi példány hozzáadása. Formátuma CSAK a domain legyen. Például: invidious.ajay.app"
|
||||
},
|
||||
"add": {
|
||||
"message": "Hozzáadás"
|
||||
},
|
||||
@@ -335,7 +416,7 @@
|
||||
"message": "Invidious példányok listájának visszaállítása"
|
||||
},
|
||||
"resetInvidiousInstanceAlert": {
|
||||
"message": "Épp visszaállítja az Invidious példányok listát"
|
||||
"message": "Az Invidious példányok listájának visszaállítására készülsz"
|
||||
},
|
||||
"currentInstances": {
|
||||
"message": "Jelenlegi példányok:"
|
||||
@@ -346,20 +427,23 @@
|
||||
"minDurationDescription": {
|
||||
"message": "A beállított értéknél rövidebb szegmenseket nem ugorja át és nem jeleníti meg a lejátszó."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Átugrási értesítés hossza (másodpercekben):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Az átugrási értesítés ennyi ideig marad a képernyőn. Manuális átugrásnál tovább is látható maradhat."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "A következő szegmens rövidebb, mint az Ön által beállított minimális időtartam. Ez azt jelentheti, hogy már beküldhették, csak emiatt az opció miatt Önnek figyelmen kívül marad. Biztosan beküldi?"
|
||||
"message": "A következő szegmens rövidebb, mint az általad beállított minimális időtartam. Ez azt jelentheti, hogy már beküldhették, csak emiatt az opció miatt nálad nem jelenik meg. Biztosan beküldöd?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Feltöltés gomb megjelenítése"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Ez a gomb a YouTube lejátszón jelenik meg, miután kiválasztott egy időtartamot és készen áll a beküldésre."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock szerver címe"
|
||||
},
|
||||
"customServerAddressDescription": {
|
||||
"message": "A SponsorBlock által használt cím a szerverre történő hívások kezdeményezésére szolgál.\nHacsak nincs saját szerverpéldánya, ezt nem szabad megváltoztatni."
|
||||
"message": "A SponsorBlock által használt cím a szerverre történő hívások kezdeményezésére szolgál.\nHacsak nincs saját szerverpéldányod, ezt nem szabad megváltoztatni."
|
||||
},
|
||||
"save": {
|
||||
"message": "Mentés"
|
||||
@@ -368,10 +452,10 @@
|
||||
"message": "Visszaállítás"
|
||||
},
|
||||
"customAddressError": {
|
||||
"message": "A cím helytelenül van formázva. Győződjön meg róla, hogy http:// vagy https:// van az elején, és nem fordított perjeleket használ."
|
||||
"message": "A cím helytelenül van formázva. Győződj meg róla, hogy http:// vagy https:// van az elején, és nincsenek perjelek a végén."
|
||||
},
|
||||
"areYouSureReset": {
|
||||
"message": "Biztosan vissza szeretné állítani?"
|
||||
"message": "Biztosan vissza szeretnéd állítani?"
|
||||
},
|
||||
"mobileUpdateInfo": {
|
||||
"message": "az m.youtube.com már támogatott"
|
||||
@@ -380,16 +464,16 @@
|
||||
"message": "Összes beállítás importálása / exportálása"
|
||||
},
|
||||
"whatExportOptions": {
|
||||
"message": "Ez az össze beállítása JSON-ban. Ebbe bele tartozik a userID-ja, szóval csak ésszel ossza meg."
|
||||
"message": "Ez az összes beállításod JSON formátumban. Ebbe bele tartozik a userID-d is, szóval csak ésszel oszd meg."
|
||||
},
|
||||
"setOptions": {
|
||||
"message": "Beállítások"
|
||||
"message": "Beállítások módosítása"
|
||||
},
|
||||
"exportOptionsWarning": {
|
||||
"message": "Figyelem: Az beállítások megváltoztatása végleges, és tönkreteheti a bővítményét. Biztosan meg szeretné tenni? Készítsen egy biztonsági mentést a régi beállításairól, biztos, ami biztos."
|
||||
"message": "Figyelem: A beállítások megváltoztatása végleges, és tönkreteheti a bővítményed. Biztosan meg szeretnéd tenni? Készíts egy biztonsági mentést a régi beállításaidról, biztos, ami biztos."
|
||||
},
|
||||
"incorrectlyFormattedOptions": {
|
||||
"message": "Ez a JSON helytelenül van formázva. A beállításai nem lettek megváltoztatva."
|
||||
"message": "Ez a JSON helytelenül van formázva. A beállításaid nem lettek megváltoztatva."
|
||||
},
|
||||
"confirmNoticeTitle": {
|
||||
"message": "Szegmens beküldése"
|
||||
@@ -406,6 +490,9 @@
|
||||
"preview": {
|
||||
"message": "Előnézet"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "Nincs beküldve"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "Megvizsgál"
|
||||
},
|
||||
@@ -419,38 +506,38 @@
|
||||
"message": "Hiba a vágólapra másoláskor"
|
||||
},
|
||||
"copyDebugInformationOptions": {
|
||||
"message": "Információt másol a vágólapra, amit megadhat egy fejlesztőnek, ha bejelent egy hibát, vagy egy fejlesztő kéri öntől. Az érzékeny információkat, például a felhasználói azonosítót, az engedélyezőlistán szereplő csatornákat és az egyéni szerver címét eltávolítottuk. Azonban tartalmaz olyan információkat, mint a böngésző, az operációs rendszer és a bővítmény verziószáma. "
|
||||
"message": "Információt másol a vágólapra, amit megadhatsz egy fejlesztőnek, ha bejelentesz egy hibát, vagy egy fejlesztő kéri tőled. Az érzékeny információkat, például a userID-t, az engedélyezőlistán szereplő csatornákat és az egyéni szerver címét eltávolítottuk. Azonban tartalmaz olyan információkat, mint a böngésző, az operációs rendszer és a bővítmény verziószáma. "
|
||||
},
|
||||
"copyDebugInformationComplete": {
|
||||
"message": "A hibakeresési információ másolva lett a vágólapjára. Nyugodtan távolítson el belőle olyan információkat, amiket nem szívesen osztana meg. Mentse el szöveges fájlként, vagy másolja a hibajelentésbe."
|
||||
"message": "A hibakeresési információ másolva lett a vágólapjára. Nyugodtan távolíts el belőle olyan információkat, amiket nem szívesen osztanál meg. Mentsd el szöveges fájlként, vagy másold a hibajelentésbe."
|
||||
},
|
||||
"theKey": {
|
||||
"message": "A billentyű"
|
||||
"message": "A(z)"
|
||||
},
|
||||
"keyAlreadyUsed": {
|
||||
"message": "már máshoz van állítva. Kérem, válasszon egy másik billentyűt."
|
||||
"message": "billentyű már máshoz van állítva. Kérlek, válassz egy másik billentyűt."
|
||||
},
|
||||
"to": {
|
||||
"message": "-tól eddig:",
|
||||
"message": "–",
|
||||
"description": "Used between segments. Example: 1:20 to 1:30"
|
||||
},
|
||||
"category_sponsor": {
|
||||
"message": "Szponzor"
|
||||
},
|
||||
"category_sponsor_description": {
|
||||
"message": "Fizetett promóció, vagy közvetlen reklám. Nem ön-promóció vagy ingyenes ajánlat (/shoutout) emberekről/termékekről/weboldalakról amik tetszenek nekik."
|
||||
"message": "Fizetett promóció, vagy közvetlen reklám. Nem önpromóció vagy ingyenes ajánlat (shoutout) emberekről/termékekről/weboldalakról amik tetszenek nekik."
|
||||
},
|
||||
"category_selfpromo": {
|
||||
"message": "Nem fizetett/ön-promóció"
|
||||
"message": "Nem fizetett/önpromóció"
|
||||
},
|
||||
"category_selfpromo_description": {
|
||||
"message": "Hasonló a szponzorhoz, de nem fizetett vagy ön-promóció. Beletartozik a saját ruhaáru, adományok, vagy infó arról hogy kivel működtek együtt."
|
||||
"message": "Hasonló a szponzorhoz, de nem fizetett, vagy önpromóció. Beletartozik a saját ruhaáru, adományok, vagy infó arról, hogy kivel működtek együtt."
|
||||
},
|
||||
"category_interaction": {
|
||||
"message": "Emlékeztető (Feliratkozás)"
|
||||
},
|
||||
"category_interaction_description": {
|
||||
"message": "Egy rövid emlékeztető arról, hogy likeoljunk, iratkozzunk fel, vagy kövessük a tartalom közben. Ha hosszabb szakasz, vagy egy adott témáról van, inkább a az ön-promóció alá tartozik."
|
||||
"message": "Egy rövid emlékeztető arról, hogy likeoljunk, iratkozzunk fel, vagy kövessük a tartalom közben. Ha hosszabb szakasz, vagy egy adott témáról van, inkább az önpromóció alá tartozik."
|
||||
},
|
||||
"category_interaction_short": {
|
||||
"message": "Emlékeztető"
|
||||
@@ -470,20 +557,44 @@
|
||||
"category_outro_description": {
|
||||
"message": "Stáblista, vagy amikor megjelennek a YouTube zárókártyák. Nem használandó információt tartalmazó következtetésekkor."
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "Előzetes/Ismétlés"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "Az előző részekben történtek rövid ismétlése, vagy a videó további tartalmának előzetese. Összevágott jelenetekhez, nem szóbeli összegzéshez."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Témától eltérő töltelék"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Töltelék"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Zene: nem-zene szegmens"
|
||||
},
|
||||
"category_music_offtopic_description": {
|
||||
"message": "Csak videóklipekhez. Ezt csak videóklipek olyan részeihez szabad használni, amiket nem fed le a többi kategória."
|
||||
},
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Nem-Zene"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Kiemelés"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "A videónak az a része, amelyiket a legtöbb ember látni szeretne. Hasonlít az \"A videó x percnél kezdődik\" jellegű hozzászólásokhoz."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Élő adás: Adomány / üzenet olvasások"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Üzenet beolvasása"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Kikapcsol"
|
||||
"autoSkip": {
|
||||
"message": "Auto átugrás"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Átugrás manuálisan"
|
||||
@@ -491,23 +602,49 @@
|
||||
"showOverlay": {
|
||||
"message": "Megjelenítés a keresősávban"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Kikapcsol"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Auto ugrás a kezdetéhez"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Kérdezzen rá a videó betöltésekor"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Megjelenítés a keresősávban"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Minden szegmens automatikus átugrása, ha van nem-zene szegmens"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Szegmensek engedélyezése, amelyek lenémítják a hangot az átugrás helyett"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "A szín helytelenül van formázva. Egy 3 vagy 6 számjegyből álló hex kódnak kell lennie egy kettőskereszttel az elején."
|
||||
},
|
||||
"previewColor": {
|
||||
"message": "Beküldetlen színe",
|
||||
"description": "Referring to submissions that have not been sent to the server yet."
|
||||
},
|
||||
"seekBarColor": {
|
||||
"message": "Keresősáv színe"
|
||||
},
|
||||
"category": {
|
||||
"message": "Kategória"
|
||||
},
|
||||
"skipOption": {
|
||||
"message": "Átugrás beállítása",
|
||||
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
|
||||
},
|
||||
"enableTestingServer": {
|
||||
"message": "Bétateszt szerver bekapcsolása"
|
||||
},
|
||||
"whatEnableTestingServer": {
|
||||
"message": "A hozzájárulásai/szavazatai NEM FOGNAK SZÁMÍTANI a fő szerveren. Csak tesztelésre használja."
|
||||
"message": "A beküldéseid és szavazataid NEM FOGNAK SZÁMÍTANI a fő szerveren. Csak tesztelésre használd."
|
||||
},
|
||||
"testingServerWarning": {
|
||||
"message": "Az összes hozzájárulás/szavazat NEM FOG SZÁMÍTANI a fő szerverhez, amíg a tesztszerverhez kapcsolódik. Győződjön meg róla, hogy ki van kapcsolva, ha valódi hozzájárulásokat szeretne megosztani."
|
||||
"message": "Egyik beküldésed vagy szavazatod SEM FOG SZÁMÍTANI a fő szerverhez, amíg a tesztszerverhez kapcsolódsz. Győződj meg róla, hogy ki van kapcsolva, ha valódi beküldéseket akarsz végezni."
|
||||
},
|
||||
"bracketNow": {
|
||||
"message": "(Most)"
|
||||
@@ -516,10 +653,17 @@
|
||||
"message": "További kategóriák"
|
||||
},
|
||||
"chooseACategory": {
|
||||
"message": "Válasszon kategóriát"
|
||||
"message": "Válassz egy kategóriát"
|
||||
},
|
||||
"enableThisCategoryFirst": {
|
||||
"message": "Hogy \"{0}\" kategóriájú szegmenst küldhess be, először engedélyezned kell a beállításokban. Most átirányításra kerülsz a beállításokhoz.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Figyelem: Az ilyen típusú szegmensekből egyszerre csak egy lehet aktív. Több beküldése esetén véletlenszerűen az egyik fog megjelenni."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Minden szegmenshez kategóriát kell választania beküldés előtt!"
|
||||
"message": "Minden szegmenshez kategóriát kell választani beküldés előtt!"
|
||||
},
|
||||
"bracketEnd": {
|
||||
"message": "(Vége)"
|
||||
@@ -530,23 +674,45 @@
|
||||
"hiddenDueToDuration": {
|
||||
"message": "elrejtve: túl rövid"
|
||||
},
|
||||
"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": "A csatorna ID még nem került betöltésre. Ha beágyazott videót használsz, próbáld meg inkább a YouTube oldalon keresztül. Ezt okozhatja még a YouTube elrendezésének változása is. Ha így gondolod, hagyj egy kommentet itt:"
|
||||
},
|
||||
"videoInfoFetchFailed": {
|
||||
"message": "Úgy tűnik, valami korlátozza a SponsorBlock hozzáférését a videó adataihoz. További információkért látogass el ide: https://github.com/ajayyy/SponsorBlock/issues/741 (angol nyelvű)."
|
||||
},
|
||||
"youtubePermissionRequest": {
|
||||
"message": "Úgy tűnik, a SponsorBlock nem tud csatlakozni a YouTube API-hoz. A javításhoz fogadd el a megjelenő engedélykérést, várj néhány másodpercet, majd töltsd újra az oldalt."
|
||||
},
|
||||
"acceptPermission": {
|
||||
"message": "Engedély jóváhagyása"
|
||||
},
|
||||
"permissionRequestSuccess": {
|
||||
"message": "Engedélykérés sikeres!"
|
||||
},
|
||||
"permissionRequestFailed": {
|
||||
"message": "Engedélykérés sikertelen. Nem nyomtál az elutasításra?"
|
||||
},
|
||||
"adblockerIssueWhitelist": {
|
||||
"message": "Ha nem sikerül megoldani a problémát, kapcsold ki a \"Csatorna ellenőrzése átugrás előtt\" opciót, mert a SponsorBlock nem tudja megszerezni a csatorna-információkat ehhez a videóhoz"
|
||||
},
|
||||
"forceChannelCheck": {
|
||||
"message": "Csatorna ellenőrzése átugrás előtt"
|
||||
},
|
||||
"whatForceChannelCheck": {
|
||||
"message": "Alapértelmezett állapotban, a bővítmény átugorhat szegmenseket, mielőtt tudná melyik csatornán van. Alapból ezért, néhány szegmens, ami a videók legelején van, engedélyezett csatornákon is átugródhat. Ennek a bekapcsolásával ez elkerülhető, de minden átugrás előtt lesz egy kis késleltetés, hiszen a channelID megszerzéséhez elkell egy kis idő. Ez a késleltetés akár észrevehetetlen is lehet, ha elég gyors a kapcsolata."
|
||||
"message": "Alapértelmezett állapotban a bővítmény átugorhat szegmenseket, mielőtt tudná melyik csatornán van. Alapból ezért néhány videó eleji szegmens engedélyezett csatornákon is átugródhat. Ennek a bekapcsolásával ez elkerülhető, de minden átugrás előtt lesz egy kis késleltetés, hiszen a channelID megszerzéséhez kell egy kis idő. Ez a késleltetés akár észrevehetetlen is lehet, ha elég gyors a kapcsolatod."
|
||||
},
|
||||
"forceChannelCheckPopup": {
|
||||
"message": "Gondolja át a \"Csatorna ellenőrzése átugrás előtt\" bekapcsolását"
|
||||
"message": "Fontold meg a \"Csatorna ellenőrzése átugrás előtt\" bekapcsolását"
|
||||
},
|
||||
"downvoteDescription": {
|
||||
"message": "Helytelen/rossz időzítés"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Hibás kategória"
|
||||
"message": "Kategória módosítása"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Ez a videó zeneként van kategorizálva. Biztos benne, hogy ennek van szponzora? Ha ez valójában egy \"nem-zene szegmens\", nyissa meg a bővítmény beállításait és kapcsolja be azt a kategóriát. Ezt követően elküldheti ezt a szegmenst \"nem-zene\"-ként szponzor helyett. Amennyiben nem érti, kérjük olvassa el az irányelveket."
|
||||
"message": "Ez a videó zeneként van kategorizálva. Biztos vagy benne, hogy ennek van szponzora? Ha ez valójában egy \"nem-zene szegmens\", nyisd meg a bővítmény beállításait és kapcsold be ezt a kategóriát. Ezt követően beküldheted a szegmenst \"nem-zene\"-ként szponzor helyett. Ha nem érthető, kérjük olvasd el az irányelveket."
|
||||
},
|
||||
"multipleSegments": {
|
||||
"message": "Több szegmens"
|
||||
@@ -555,13 +721,129 @@
|
||||
"message": "Irányelvek"
|
||||
},
|
||||
"readTheGuidelines": {
|
||||
"message": "Olvassa el az irányelveket!!",
|
||||
"message": "Olvasd el az irányelveket!!",
|
||||
"description": "Show the first time they submit or if they are \"high risk\""
|
||||
},
|
||||
"categoryUpdate1": {
|
||||
"message": "Itt vannak a kategóriák!"
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Nyissa meg a beállításokat, hogy átugorhasson introkat, outrokat stb."
|
||||
"message": "Nyisd meg a beállításokat, hogy átugorhass introkat, outrokat stb."
|
||||
},
|
||||
"help": {
|
||||
"message": "Segítség"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Értettem",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Minden további kísérlet elutasítása",
|
||||
"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": "Eltüntetés örökre"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Figyelmeztetést kaptál, és ideiglenesen nem tudsz szegmenseket beküldeni. Ez azt jelenti, hogy észrevettük, hogy néhány ártalmatlan gyakori hibát vétettél. Kérjük erősítsd meg, hogy megértetted a szabályokat és eltávolítjuk a figyelmeztetést. Ehhez a beszélgetéshez csatlakozhatsz a discord.gg/SponsorBlock vagy matrix.to/#/#sponsor:ajay.app címeken is."
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Szavazás visszautasítva figyelmeztetés miatt. Kattints, hogy megnyiss egy beszélgetést a tisztázásához, vagy gyere vissza később, amikor időd van rá.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Támogatás"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Támogatás link elrejtése"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Köszönjük, hogy telepítetted a SponsorBlockot."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Kérjük, nézd át az alábbi beállításokat"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Sok funkció le van tiltva alapból. Ha át akarsz ugrani bevezetőket, záróképernyőket, Invidioust használnál, stb., engedélyezd őket alább. Lehetőség van a felület különböző elemeinek elrejtésére/megjelenítésére is."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Az átugrás működése"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "A videók szegmensei automatikusan átugrásra kerülnek, ha szerepelnek az adatbázisban. Megnyithatod a felugró ablakot a bővítmény ikonjára kattintva, hogy megtekinthesd őket."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Ahányszor átugrasz egy szegmenst, kapni fogsz egy értesítést. Ha rossznak tűnik az időzítés, szavazd le a leszavazás gombra kattintva! A felugró ablakban is szavazhatsz."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Beküldés"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "Beküldeni lehet a felugró ablakban a \"Szegmens eleje\" gombra kattintva, vagy a videó lejátszón lévő gombokkal."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "A lejátszás gomb megnyomása jelezte a szegmens kezdetét és a stop gomb megnyomása jelzi a végét. Több szponzort is előkészíthetsz, mielőtt a beküldésre nyomnál. A feltöltés gombra kattintva beküldésre kerülnek a szegmensek. A szemetesre kattintva kitörlődnek."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Szerkesztés"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Ha hibáztál, szerkesztheted vagy törölheted a szegmenseid, a felfele nyílra kattintást követően."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Ez túl lassú"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Vannak gyorsbillentyűk is, ha használni szeretnéd őket. Nyomd meg a pontosvessző billentyűt egy szponzor szegmens elejének/végének jelzéséhez és nyomd meg a vesszőt a beküldéshez. Ezek módosíthatók a beállításokban. Ha nem QWERTY-t használsz, valószínűleg szükséges lesz megváltoztatni a billentyűket."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Szerezhetek egy másolatot az adatbázisról? Mi történik, ha eltűnik a fejlesztő?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Az adatbázis nyilvános, és elérhető itt:"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "A forráskód szabadon elérhető. Tehát még ha valami történne is velem, a beküldések nem vesznek el."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Hírek és hogyan készül"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Hol szerezhetem meg a forráskódot?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Készítők"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Tudj meg többet"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Leszavazza és készít egy helyi másolatot, amit beküldhetsz"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "A kategória wiki lapjának megnyitása."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Másol és leszavaz"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Szavazás folytatása"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Ez azonnal érvényes lesz a szegmenseidre"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Új! Ugorj át vicceket és a témához nem tartozó részeket a töltelék kategóriával. Engedélyezd a beállításokban"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "n",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "ó",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Lewati Ulang"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Batalkan bisu"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Dijeda"
|
||||
},
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "Video YouTube tidak ditemukan.\nJika terjadi kesalahan, segarkan halaman."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Perbarui segmen"
|
||||
},
|
||||
"success": {
|
||||
"message": "Sukses!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Kesalahan koneksi terjadi. Kode kesalahan: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Apakah anda ingin mengirim untuk id video"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Hapus Segmen"
|
||||
},
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Atur Nama Pengguna"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Salin UserID Publik"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Gabung dengan server resmi discord untuk memberikan kritik dan saran!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Ini akan menyembunyikan tombol yang muncul di pemutar YouTube untuk mengirimkan segmen yang dilewati."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Tetap lewati ke tombol Highlight di Pemutar"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Tampilkan Tombol Info Di Pemutar Video YouTube"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Sembunyikan Tombol Info Di Pemutar Video YouTube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Ini adalah tombol yang membuka popup di halaman YouTube."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Otomatis Sembunyikan Tombol Info"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Sembunyikan Tombol Hapus Di Pemutar Video YouTube"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Tampilkan Tombol Hapus Di Pemutar Video YouTube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Ini adalah tombol di pemutar YouTube yang akan menghapus semua segmen yang belum dikirim pada video."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Aktifkan Pelacakan Jumlah Lewati"
|
||||
},
|
||||
@@ -204,7 +210,7 @@
|
||||
"message": "Aktifkan Pelacakan Jumlah Lewati Pada Tab Privat/Penyamaran"
|
||||
},
|
||||
"enableQueryByHashPrefix": {
|
||||
"message": "Query By Hash Prefix"
|
||||
"message": "Kueri dengan Hash Prefix"
|
||||
},
|
||||
"whatQueryByHashPrefix": {
|
||||
"message": "Daripada meminta segmen dari server menggunakan videoID, 4 huruf pertama dari hash dari videoID dikirim. Server akan mengirim kembali data untuk semua video dengan hash yang mirip."
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Tampilkan Pemberitahuan Lagi"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Tampilkan pemberitahuan setelah melewati segmen"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Lewati maklumat ukuran penuh"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Maklumat lewati kecil untuk lewati otomatis"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Lewati semua maklumat kecil"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Pudar maklumat lewati untuk semua lewati otomatis"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Lewati semua maklumat 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.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Lewati"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Bisukan"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Lewati {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Bisukan {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Lompat ke {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Dilewati"
|
||||
"message": "{0} dilewati",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} Dibisukan",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Melewati ke {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Nonaktifkan Lewati Otomatis"
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Impor/Ekspor UserID"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Ini sebaiknya dirahasiakan. Ini terlihat seperti password dan sebaiknya tidak dibagikan ke orang lain. Jika seseorang mempunyai ini, dia dapat berpura-pura menjadi anda."
|
||||
"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"
|
||||
@@ -341,18 +384,28 @@
|
||||
"createdBy": {
|
||||
"message": "Dibuat Oleh"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Lewati Otomatis"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Tampilkan pemberitahuan setelah melewati segmen"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Saat ini diatur pada:"
|
||||
},
|
||||
"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: "
|
||||
},
|
||||
"optionsInfo": {
|
||||
"message": "Aktifkan dukungan Invidious, nonaktifkan lewati otomatis, tombol sembunyi dan lainnya."
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"message": "Tambah Instansi Klien Pihak Ketiga"
|
||||
},
|
||||
"addInvidiousInstanceDescription": {
|
||||
"message": "Tambahkan instansi khusus. Ini harus diformat Hanya dengan domain. Contoh: invidious.ajay.app"
|
||||
},
|
||||
"add": {
|
||||
"message": "Tambah"
|
||||
},
|
||||
@@ -374,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Segmen yang lebih kecil dari nilai yang diatur tidak akan dilewati atau tampil di pemutar."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Lewati maklumat berdurasi (detik):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Maklumat lewati akan tetap di layar setidaknya selama ini. Untuk lewati manual, mungkin akan terlihat lebih lama."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Submisi ini lebih pendek dari opsi durasi minimalmu. Ini dapat berarti ini sudah dikirim, dan hanya akan diabaikan karena opsi ini. Apakah anda yakin ingin mengirim?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Tampilkan Tombol Unggah"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Tombol ini muncul di pemutar video YouTube setelah anda memilih stempel waktu dan siap untuk dikirimkan."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Alamat Server SponsorBlock"
|
||||
},
|
||||
@@ -434,6 +490,9 @@
|
||||
"preview": {
|
||||
"message": "Pratinjau"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "Belum dikirim"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "Inspeksi"
|
||||
},
|
||||
@@ -498,6 +557,21 @@
|
||||
"category_outro_description": {
|
||||
"message": "Kredit atau saat kartu akhir YouTube muncul. Tidak untuk kesimpulan dengan informasi."
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "Pratinjau/Rekap"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "Rekapan singkat dari episode sebelumnya, atau pratinjau tentang apa yang akan terjadi nanti di video. Dimaksudkan untuk klip bersama yang di edit, bukan ringkasan yang diucapkan."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Pengisi Tangensial"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Isian"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Musik: Bagian Non-Musik"
|
||||
},
|
||||
@@ -507,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Non-Musik"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Sorotan"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Bagian video yang banyak orang lihat. Sama untuk komentar \"Video dimulai di x\"."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Livestream: Baca Pesan/Donasi"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Membaca Pesan Chat"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Nonaktif"
|
||||
"autoSkip": {
|
||||
"message": "Lewati Otomatis"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Lewati Manual"
|
||||
@@ -522,9 +602,31 @@
|
||||
"showOverlay": {
|
||||
"message": "Tampilkan Di Bilah Waktu"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Nonaktif"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Otomatis lewati ke awal"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Tanya saat video dimuat"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Tampilkan di Bilah Waktu"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Lewati semua segmen secara otomatis ketika ada segmen non-music"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Perbolehkan segmen untuk bisu daripada melewati"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Warna anda tidak diformat dengan benar. Harusnya terdiri dari 3 atau 6 digit kode heksa dengan tagar di awal."
|
||||
},
|
||||
"previewColor": {
|
||||
"message": "Warna yang Belum Dikirim",
|
||||
"description": "Referring to submissions that have not been sent to the server yet."
|
||||
},
|
||||
"seekBarColor": {
|
||||
"message": "Warna Bilah Waktu"
|
||||
},
|
||||
@@ -557,6 +659,9 @@
|
||||
"message": "Untuk mengirimkan segmen dengan kategori \"{0}\", Anda harus mengaktifkannya di opsi. Anda akan diarahkan ke opsi sekarang.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Perhatian: Tipe segmen ini hanya bisa maksimum aktif satu kali. Mengirimkan beberapa dapat mengakibatkan muncul pada kondisi acak."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Anda harus memilih kategori untuk semua segmen yang anda kirimkan!"
|
||||
},
|
||||
@@ -604,7 +709,7 @@
|
||||
"message": "Salah, Waktu Tidak Tepat"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Salah Kategori"
|
||||
"message": "Ubah Kategori"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Video ini dikategorikan sebagai musik. Apakah anda yakin ini berisi sponsor? Jika ini ternyata adalah \"Segmen non-musik\", buka pengaturan ekstensi dan aktifkan kategorinya. Lalu, anda bisa mengirim segmen ini sebagai \"Non-musik\" bukannya sponsor. Harap membaca panduan jika anda kebingungan."
|
||||
@@ -624,5 +729,113 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Buka opsi untuk melewati intro, outro, merch, dll."
|
||||
},
|
||||
"help": {
|
||||
"message": "Bantuan"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Mengerti",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "Sembunyikan selamanya"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Anda mendapatkan peringatan dan tidak bisa mengirim segmen sementara. Ini dikarenakan kami melihat kamu melakukan beberapa kesalahan yang umum, mohon konfirmasi bahwa kamu mengerti perundangan dan kami akan hapus peringatan. Kamu bisa bergabung ke obrolan menggunakan discord.gg/SponsorBlock atau matrix.io/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Suara ditolak karena peringatan. Klik untuk buka obrolan untuk menyelesaikannya, atau kembali beberapa saat lagi ketika ada waktu.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Donasi"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Sembunyikan tautan donasi"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Terima kasih telah menginstall SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"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."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Mengirim"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "Mengirim bisa baik dilakukan di maklumat dengan menekan tombol \"Mulai Segmen Sekarang\" atau di pemutar video dengan tombol di pemutar."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Klik tombol putar indikasikan memulai segmen dan klik tombol ikon stop indikasikan mengakhiri. Kamu bisa persiapkan beberapa sponsor sebelum menekan kirim. Klik tombol unggah akan mengirimkan. Klik tombol sampah akan menghapuskan."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Sunting"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Jika kamu mengacaukan, kamu bisa sunting atau hapus segmen setelah klik tombol panah atas."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Ini terlalu lambat"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Terdapat tombol pintas jika kamu ingin menggunakannya. Tekan tombol semikolon untuk indikasi mulai/akhir segmen sponsor dan tekan tombol kutip untuk mengirimkan. Ini bisa diganti di opsi. Jika kamu tidak menggunakan QWERTY, kamu dimungkinkan harus mengubah tombol."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Bisakah saya mendapatkan salinan Databasis? Apa yang terjadi jika kamu tiada?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Databasis adalah publik dan tersedia di"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "Sumber kode tersedia secara bebas. Jadi, jika sesuatu terjadi pada saya, pengajuan kamu tidak akan hilang."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Berita dan bagaimana ini diciptakan"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Dimana saya mendapatkankan sumber kode?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Kredit"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Pelajari Lebih Lanjut"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Menurunkan suara dan membuat salinan lokal untuk Anda kirim ulang"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Membuka halaman wiki kategori ini."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Salin dan berikan turunkan suara"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Lanjutkan Memvoting"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Ini akan menerapkan ke segmen Anda"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Baru! Lewati tangen dan lelucon dengan kategori pengisi. Aktifkan dalam opsi"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,20 +4,20 @@
|
||||
"description": "Name of the extension."
|
||||
},
|
||||
"Description": {
|
||||
"message": "Salta sponsorizzazioni, implorazioni di iscrizione ai canali e molto altro sui video di YouTube. Segnala gli sponsor sui video che guardi per salvare il tempo ad altri.",
|
||||
"message": "Salta sponsorizzazioni, richieste d'iscrizione ai canali e molto altro sui video di YouTube. Segnala gli sponsor sui video che guardi per salvare il tempo agli altri.",
|
||||
"description": "Description of the extension."
|
||||
},
|
||||
"400": {
|
||||
"message": "Richiesta non valida"
|
||||
},
|
||||
"429": {
|
||||
"message": "Stai inviando troppi spezzoni per questo video, sei sicuro che ce ne siano così tanti?"
|
||||
"message": "Stai inviando troppi segmenti per questo video, sei sicuro che ce ne siano così tanti?"
|
||||
},
|
||||
"409": {
|
||||
"message": "Questo spezzone è già stato inviato"
|
||||
"message": "Questo è già stato inviato"
|
||||
},
|
||||
"channelWhitelisted": {
|
||||
"message": "Canale aggiunto alla whitelist!"
|
||||
"message": "Canale aggiunto alla lista delle esclusioni!"
|
||||
},
|
||||
"Segment": {
|
||||
"message": "segmento"
|
||||
@@ -52,11 +52,14 @@
|
||||
"reskip": {
|
||||
"message": "Salta ancora"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Riattiva il microfono"
|
||||
},
|
||||
"paused": {
|
||||
"message": "In pausa"
|
||||
},
|
||||
"manualPaused": {
|
||||
"message": "Timer Fermato"
|
||||
"message": "Timer fermato"
|
||||
},
|
||||
"confirmMSG": {
|
||||
"message": "\n\nPer modificare o eliminare valori specifici, premi il pulsante delle informazioni o apri il popup cliccando l'icona dell'estensione nell'angolo in alto a destra."
|
||||
@@ -65,7 +68,7 @@
|
||||
"message": "Sei sicuro di volerlo cancellare?\n\n"
|
||||
},
|
||||
"Unknown": {
|
||||
"message": "Si è verificato un errore durante l'invio dello spezzone sponsorizzato, per favore riprova più tardi."
|
||||
"message": "Si è verificato un errore durante l'invio del segmento, per favore riprova più tardi."
|
||||
},
|
||||
"sponsorFound": {
|
||||
"message": "Questo video ha dei segmenti nel database!"
|
||||
@@ -74,10 +77,10 @@
|
||||
"message": "Nessun segmento trovato"
|
||||
},
|
||||
"sponsorStart": {
|
||||
"message": "Il Segmento Inizia Ora"
|
||||
"message": "Il segmento inizia qui"
|
||||
},
|
||||
"sponsorEnd": {
|
||||
"message": "Il Segmento Termina Ora"
|
||||
"message": "Il segmento finisce ora"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "Annulla Creazione del Segmento"
|
||||
@@ -85,8 +88,11 @@
|
||||
"noVideoID": {
|
||||
"message": "Nessun video YouTube trovato.\nSe è un errore, ricarica la scheda."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Ricarica i segmenti"
|
||||
},
|
||||
"success": {
|
||||
"message": "Successo!"
|
||||
"message": "Ha funzionato!"
|
||||
},
|
||||
"voted": {
|
||||
"message": "Votato!"
|
||||
@@ -97,20 +103,17 @@
|
||||
"connectionError": {
|
||||
"message": "Si è verificato un errore durante la connessione. Codice errore: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Desideri inviare per l'id video"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Pulisci Segmenti"
|
||||
"message": "Rimuovi i segmenti"
|
||||
},
|
||||
"openPopup": {
|
||||
"message": "Apri il Popup di SponsorBlock"
|
||||
"message": "Apri il popup di SponsorBlock"
|
||||
},
|
||||
"closePopup": {
|
||||
"message": "Chiudi il popup"
|
||||
},
|
||||
"SubmitTimes": {
|
||||
"message": "Invia Segmenti"
|
||||
"message": "Invia i segmenti"
|
||||
},
|
||||
"submitCheck": {
|
||||
"message": "Sei sicuro di volerlo inviare?"
|
||||
@@ -122,7 +125,7 @@
|
||||
"message": "Rimuovi il canale dalle eccezioni"
|
||||
},
|
||||
"voteOnTime": {
|
||||
"message": "Vota un Segmento"
|
||||
"message": "Vota un segmento"
|
||||
},
|
||||
"Submissions": {
|
||||
"message": "Contributi"
|
||||
@@ -141,22 +144,25 @@
|
||||
"description": "Appears in the popup to inform them that editing has been moved to the video player."
|
||||
},
|
||||
"popupHint": {
|
||||
"message": "Suggerimento: Puoi configurare dei comandi rapidi per l'inserimento nelle opzioni"
|
||||
"message": "Suggerimento: puoi configurare dei comandi rapidi nelle opzioni"
|
||||
},
|
||||
"clearTimesButton": {
|
||||
"message": "Cancella Minutaggi"
|
||||
"message": "Cancella minutaggio"
|
||||
},
|
||||
"submitTimesButton": {
|
||||
"message": "Invia Minutaggi"
|
||||
"message": "Invia minutaggio"
|
||||
},
|
||||
"publicStats": {
|
||||
"message": "Viene utilizzato nelle pagine delle statistiche pubbliche che mostrano quanto hai contribuito. Vedi"
|
||||
"message": "Questo è usato nelle pagine pubbliche delle statistiche per mostrare quanto hai contribuito. Vedilo"
|
||||
},
|
||||
"Username": {
|
||||
"message": "Nome utente"
|
||||
},
|
||||
"setUsername": {
|
||||
"message": "Imposta Username"
|
||||
"message": "Imposta nome utente"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Copia UserID Pubblico"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Entra nel server Discord ufficiale per darci suggerimenti e feedback!"
|
||||
@@ -168,37 +174,37 @@
|
||||
"message": "Opzioni"
|
||||
},
|
||||
"showButtons": {
|
||||
"message": "Mostra i Pulsanti nel Lettore di YouTube"
|
||||
"message": "Mostra i pulsanti sul video"
|
||||
},
|
||||
"hideButtons": {
|
||||
"message": "Nascondi i Pulsanti nel Lettore di YouTube"
|
||||
"message": "Nascondi i pulsanti sul video"
|
||||
},
|
||||
"hideButtonsDescription": {
|
||||
"message": "Nasconde i pulsanti che appaiono nel lettore di YouTube per inviare spezzoni sponsorizzati. Capisco che può essere fastidioso per alcune\n persone. Invece di utilizzare quei pulsanti, è possibile utilizzare questo popup per inviare gli spezzoni sponsorizzati. Per nascondere l'avviso che appare, \nusa il bottone \"Non mostrare più\" nell'avviso. Potrai sempre abilitare nuovamente queste impostazioni in futuro."
|
||||
"message": "Nasconde i pulsanti che appaiono sul video per inviare i segmenti da nascondere."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Mantieni Salta Per Evidenziare il Pulsante Sul Lettore"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Mostra il Pulsante Informazioni nel Lettore di YouTube"
|
||||
"message": "Mostra il pulsante delle informazioni sopra al video"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Nascondi il Pulsante Informazioni nel Lettore di YouTube"
|
||||
"message": "Nascondi il pulsante d'informazioni sopra al video"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Questo è il pulsante che apre un popup nella pagina YouTube."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Nascondi in automatico il Pulsante di Informazioni"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Nascondi il Pulsante Elimina nel Lettore di YouTube"
|
||||
"message": "Nascondi il pulsante elimina"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "Mostra il Pulsante Elimina nel Lettore di YouTube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Questo è il pulsante che ti permette di cancellare tutti gli spezzoni sponsorizzati nel lettore di YouTube."
|
||||
"message": "Mostra il pulsante elimina"
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Attiva Monitoraggio Salti"
|
||||
"message": "Attiva il conteggio dei salti"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "Questa funzionalità tiene traccia dei segmenti che hai saltato, per far sapere agli utenti quanto il loro contributo abbia aiutato gli altri e sia stato utilizzato come metrica insieme ai voti positivi, per garantire che lo spam non entri nel database. L'estensione invierà un messaggio al server ogni volta che salterai un segmento. Si spera che la maggior parte delle persone non modifichino questa impostazione, in modo da non intaccare l'accuratezza dei numeri di visualizzazione. :)"
|
||||
"message": "Questa funzionalità tiene traccia dei segmenti che hai saltato per far sapere agli utenti quanto il loro contributo abbia aiutato gli altri e anche come statistica, insieme ai voti positivi, per garantire che lo spam non entri nel database. L'estensione invierà un messaggio al server ogni volta che salterai un segmento. Si spera che la maggior parte delle persone non modifichino questa impostazione, in modo da non intaccare l'accuratezza dei numeri di visualizzazione. :)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "Abilita il conteggio dei salti nelle schede private/anonime"
|
||||
@@ -210,24 +216,42 @@
|
||||
"message": "Invece di richiedere i segmenti dal server utilizzando l'ID del video, viene inviato un hash dei primi 4 caratteri dell'ID. Questo server invierà i dati per tutti i video con hash simili."
|
||||
},
|
||||
"enableRefetchWhenNotFound": {
|
||||
"message": "Ricarica I Segmenti Su Nuovi Video"
|
||||
"message": "Ricarica i segmenti su nuovi video"
|
||||
},
|
||||
"whatRefetchWhenNotFound": {
|
||||
"message": "Se il video è nuovo, e non risultano esserci segmenti, continueremo a cercarne di nuovi ogni pochi minuti."
|
||||
},
|
||||
"showNotice": {
|
||||
"message": "Mostra di Nuovo l'Avviso"
|
||||
"message": "Mostra di nuovo l'avviso"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Mostra Avviso Dopo Aver Saltato un Segmento"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Salta Avvisi di Dimensioni Complete"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Piccoli Salta Avvisi per Salto Automatico"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Tutti i Piccoli Salta Avvisi"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Salta Avvisi Offuscati per Salto Automatico"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Tutti i Salta Avvisi Offuscati"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock ti consente di saltare sponsorizzazioni, introduzioni, conclusioni, promemoria di iscrizione e altre componenti fastidiose dei video su YouTube. SponsorBlock è un'estensione per browser in crowdsourcing, che consente a chiunque di inviare l'ora di inizio e di fine dei segmenti sponsorizzati e altri segmenti video su YouTube. Quando una persona invia queste informazioni, chiunque altro in possesso di questa estensione sarà in grado di saltare direttamente il segmento sponsorizzato. È possibile saltare anche le sezioni non musicali dei video musicali.",
|
||||
"message": "SponsorBlock ti consente di saltare sponsorizzazioni, introduzioni, conclusioni, promemoria di iscrizione e altri elementi fastidiosi dai video YouTube. SponsorBlock è un'estensione per browser di crowdsourcing, cioè che consente a chiunque di inviare l'ora di inizio e di fine dei segmenti sponsorizzati e di altro tipo. Quando una persona invia queste informazioni, chiunque altro in possesso di questa estensione sarà in grado di saltare automaticamente il segmento sponsorizzato. È possibile saltare anche le sezioni non musicali dei video musicali.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
},
|
||||
"website": {
|
||||
"message": "Sito Web",
|
||||
"message": "Sito web",
|
||||
"description": "Used on Firefox Store Page"
|
||||
},
|
||||
"sourceCode": {
|
||||
"message": "Codice Sorgente",
|
||||
"message": "Codice sorgente",
|
||||
"description": "Used on Firefox Store Page"
|
||||
},
|
||||
"noticeUpdate": {
|
||||
@@ -251,16 +275,16 @@
|
||||
"message": "Seleziona un tasto premendolo sulla tastiera"
|
||||
},
|
||||
"keybindDescriptionComplete": {
|
||||
"message": "L'associazione di tasti è stata impostata a: "
|
||||
"message": "Il comando rapido è stato impostato come: "
|
||||
},
|
||||
"0": {
|
||||
"message": "Timeout della connessione. Controlla la tua connessione a Internet. Se internet sta funzionando, il server è probabilmente sovraccarico oppure giù."
|
||||
},
|
||||
"disableSkipping": {
|
||||
"message": "Saltare è abilitato"
|
||||
"message": "Abilitato"
|
||||
},
|
||||
"enableSkipping": {
|
||||
"message": "Saltare è disabilitato"
|
||||
"message": "Disabilitato"
|
||||
},
|
||||
"yourWork": {
|
||||
"message": "Il Tuo Lavoro",
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Salta"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Silenzia"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Vuoi saltare {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Silenziare {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Saltare a {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Saltato"
|
||||
"message": "{0} Saltato",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} silenziato",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Saltato a {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Disabilita Salto Automatico"
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Importa/Esporta Il Tuo ID Utente"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Questo dovrebbe essere tenuto privato. Questo è come una password e non dovrebbe essere condiviso con nessuno. Se qualcuno ha questo, ti può impersonare."
|
||||
"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"
|
||||
@@ -341,12 +384,6 @@
|
||||
"createdBy": {
|
||||
"message": "Creato da"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Salta Automaticamente"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Mostra Avviso Dopo Aver Saltato un Segmento"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Attualmente è impostato su:"
|
||||
},
|
||||
@@ -363,6 +400,9 @@
|
||||
"optionsInfo": {
|
||||
"message": "Abilita supporto invidioso, disabilita salto automatico, nascondi i pulsanti e altro ancora."
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"message": "Aggiungi Istanza Client 3Rd-Party"
|
||||
},
|
||||
"addInvidiousInstanceDescription": {
|
||||
"message": "Aggiungi un'istanza personalizzata. Deve essere formattata SOLO con il dominio. Esempio: invidious.ajay.app"
|
||||
},
|
||||
@@ -387,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "I segmenti più brevi del valore impostato non verranno saltati o visualizzati nel lettore."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Salta durata avviso (secondi):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "L'avviso salta rimarrà sullo schermo per almeno questo tempo. Per saltarlo manualmente, potrebbe esser visibile più a lungo."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Il seguente contributo è più breve della tua opzione di durata minima. Ciò potrebbe significare che questo è già stato inviato e viene semplicemente ignorato a causa di questa opzione. Sei sicuro di voler inviare?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Mostra Pulsante di Caricamento"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Questo pulsante appare sul riproduttore di YouTube dopo che hai selezionato un marcatore temporale e sei pronto ad inviarlo."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Indirizzo Server SponsorBlock"
|
||||
},
|
||||
@@ -520,6 +563,15 @@
|
||||
"category_preview_description": {
|
||||
"message": "Riepilogo rapido degli episodi precedenti, o un'anteprima di ciò che sta arrivando più tardi nel video attuale. Inteso per clip, non per riassunti a voce."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Tangente di Riempimento"
|
||||
},
|
||||
"category_filler_description": {
|
||||
"message": "Le scene tangenziali 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."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Riempimento"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Musica: Sezione Non-Musicale"
|
||||
},
|
||||
@@ -529,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Non-Musicale"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Evidenzia"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "La parte del video che gran parte delle persone stanno cercando. Simile ai commenti \"Il video inizia a x\"."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Livestream: Donazione/Letture dei Messaggi"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Lettura Messaggi"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Disattiva"
|
||||
"autoSkip": {
|
||||
"message": "Salta Automaticamente"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Salto Manuale"
|
||||
@@ -544,6 +602,24 @@
|
||||
"showOverlay": {
|
||||
"message": "Mostra nella Barra di Ricerca"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Disattiva"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Salta automaticamente all'avvio"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Chiedi quando il video carica"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Mostra Nella Barra di Ricerca"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Salta automaticamente tutti i segmenti quando c'è un segmento non musicale"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Silenzia i segmenti invece di saltarli, quando possibile"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Il tuo colore è formattato in modo errato. Dovrebbe essere un codice esadecimale a 3 o 6 cifre con un segno numerico iniziale."
|
||||
},
|
||||
@@ -583,6 +659,9 @@
|
||||
"message": "Per inviare segmenti della categoria \"{0}\", è necessario abilitarlo nelle opzioni. Sarai reindirizzato alle opzioni.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Attenzione: questo tipo di segmento può essere presente una sola volta. Inviarne più di uno causerà la visualizzazione casuale di uno solo."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Devi selezionare una categoria per tutti i segmenti che stai inviando!"
|
||||
},
|
||||
@@ -630,7 +709,7 @@
|
||||
"message": "Tempo Non Corretto/Errato"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Categoria Errata"
|
||||
"message": "Cambia Categoria"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Questo video è classificato come musica. Sei sicuro che questo video contenga uno sponsor? Se questo è in realtà un \"Segmento Non-Musica\", apri le opzioni di questa estensione e abilita questa categoria. Quindi, è possibile inviare questo segmento come \"Non-Music\" invece di sponsor. Si prega di leggere la guida se si è confusi."
|
||||
@@ -650,5 +729,113 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Apri queste opzioni per saltare le introduzioni, conclusioni, vendita di prodotti ecc."
|
||||
},
|
||||
"help": {
|
||||
"message": "Aiuto"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Capito",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Disiscriviti dagli esperimenti futuri",
|
||||
"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": "Nascondi per sempre"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Hai ricevuto un avviso e non puoi inviare temporaneamente i segmenti. Questo significa che abbiamo notato che stavi commettendo degli errori comuni, non malevoli; sei pregato di confermare di comprendere le regole e rimuoveremo l'avviso. Puoi anche unirti a questa chat usando discord.gg/SponsorBlock o matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Voto rifiutato a causa di un ammonimento. Clicca per aprire una chat per risolverlo, oppure torna dopo quando hai tempo.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Dona"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Nascondi Link di Donazione"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Grazie per aver installato SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Sei pregato di revisionare le seguenti opzioni"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Molte funzionalità sono disabilitate di default. Se vuoi saltare intro, outro, usare Invidious, etc. abilitale sotto. Puoi anche nascondere/mostrare gli elementi dell'UI."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Come funziona il salto"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "I segmenti video saranno automaticamente ignorati se sono trovati nel database. Puoi aprire il popup cliccando l'icona dell'estensione per ottenere un'anteprima di cosa sono."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Ogni volta che salti un segmento, sarai avvisato. Se il momento sembra sbagliato, vota in negativo cliccando downvote! Puoi anche votare nel popup."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Inviando"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "L'invio può esser eseguito nel popup cliccando il pulsante il \"Segmento Inizia Ora\" o nel lettore video con i pulsanti sul lettore."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Cliccare il pulsante di riproduzione indica l'inizio di un segmento e cliccare l'icona di interruzione indica la fine. Puoi preparare più sponsor prima di cliccare invio. Cliccare il pulsante carica invierà. Cliccare il cestino eliminerà."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Modifica"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Se hai fatto casino, puoi modificare o eliminare i tuoi segmenti dopo aver cliccato il pulsante della freccia in su."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Questo è troppo lento"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Esistono dei tasti di scelta rapida se desideri usarli. Premi il tasto del punto e virgola per indicare l'inizio/la fine di un segmento dello sponsor e clicca l'apostrofo per inviare. Questi sono modificabili nelle opzioni. Se non usi QWERTY, dovresti probabilmente cambiare l'associazione dei tasti."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Posso ottenere una copia del Database? Che succede se scompari?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Il database è pubblico e disponibile a"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "Il codice sorgente è liberamente disponibile. Quindi, anche se mi succede qualcosa, i tuoi contributi non saranno persi."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Notizie e come è fatto"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Dove posso ottenere il codice sorgente?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Crediti"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Scopri di Più"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Vota negativamente e crea una copia locale per reinviare"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Apri la pagina della wiki di questa categoria."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Copia e vota negativamente"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Continua a Votare"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Questo si applicherà istantaneamente ai tuoi segmenti"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Novità! Salta battute e tergiversazioni con il riempitivo. Attivala nelle opzioni"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,22 +17,22 @@
|
||||
"message": "これは既に提出されています。"
|
||||
},
|
||||
"channelWhitelisted": {
|
||||
"message": "番組を許可表に登録しました!"
|
||||
"message": "チャンネルをホワイトリストに登録しました!"
|
||||
},
|
||||
"Segment": {
|
||||
"message": "区域"
|
||||
"message": "セグメント"
|
||||
},
|
||||
"Segments": {
|
||||
"message": "区域"
|
||||
"message": "セグメント"
|
||||
},
|
||||
"upvoteButtonInfo": {
|
||||
"message": "この提案を支持する"
|
||||
"message": "この提案を支持"
|
||||
},
|
||||
"reportButtonTitle": {
|
||||
"message": "報告"
|
||||
},
|
||||
"reportButtonInfo": {
|
||||
"message": "この提案が正しくないことを報告する。"
|
||||
"message": "この提案が正しくないと報告"
|
||||
},
|
||||
"Dismiss": {
|
||||
"message": "無視"
|
||||
@@ -44,14 +44,17 @@
|
||||
"message": "非表示"
|
||||
},
|
||||
"hitGoBack": {
|
||||
"message": "元の場所に戻るには「スキップを取り消す」をクリックしてください。"
|
||||
"message": "スキップ解除を押すと元の場所へ戻ります"
|
||||
},
|
||||
"unskip": {
|
||||
"message": "スキップを取り消す"
|
||||
"message": "スキップ解除"
|
||||
},
|
||||
"reskip": {
|
||||
"message": "再スキップ"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "ミュート解除"
|
||||
},
|
||||
"paused": {
|
||||
"message": "一時停止中"
|
||||
},
|
||||
@@ -68,23 +71,26 @@
|
||||
"message": "スポンサー表示の投稿中にエラーが発生しました。しばらく経ってからもう一度お試しください。"
|
||||
},
|
||||
"sponsorFound": {
|
||||
"message": "この動画用の区域は情報集合体に登録されています!"
|
||||
"message": "この動画用のセグメントはデータベースに登録されています!"
|
||||
},
|
||||
"sponsor404": {
|
||||
"message": "区域が見つかりませんでした"
|
||||
"message": "セグメントが見つかりませんでした"
|
||||
},
|
||||
"sponsorStart": {
|
||||
"message": "区域が始まりました"
|
||||
"message": "セグメント開始を記録"
|
||||
},
|
||||
"sponsorEnd": {
|
||||
"message": "区域が終わりました"
|
||||
"message": "セグメント終了を記録"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "区間の作成を取り止める"
|
||||
"message": "セグメントの作成を取り消す"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "YouTube動画が見つかりませんでした。\nこれが正しくない場合は、タブを再読み込みしてください。"
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "セグメントを更新"
|
||||
},
|
||||
"success": {
|
||||
"message": "成功しました!"
|
||||
},
|
||||
@@ -95,13 +101,10 @@
|
||||
"message": "サーバーがダウンしているようです。今すぐ開発者にお知らせください。"
|
||||
},
|
||||
"connectionError": {
|
||||
"message": "接続エラーが発生しました。エラーコード: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "次の動画IDで提出します:"
|
||||
"message": "接続エラーが発生しました。 エラーコード: "
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "区域を消去"
|
||||
"message": "セグメントを消去"
|
||||
},
|
||||
"openPopup": {
|
||||
"message": "SponsorBlock のポップアップを開く"
|
||||
@@ -110,22 +113,22 @@
|
||||
"message": "ポップアップを閉じる"
|
||||
},
|
||||
"SubmitTimes": {
|
||||
"message": "区域を提出"
|
||||
"message": "セグメントを送信"
|
||||
},
|
||||
"submitCheck": {
|
||||
"message": "本当に提出してよろしいですか?"
|
||||
},
|
||||
"whitelistChannel": {
|
||||
"message": "許可表にある番組"
|
||||
"message": "ホワイトリストのチャンネル"
|
||||
},
|
||||
"removeFromWhitelist": {
|
||||
"message": "許可表から番組を削除"
|
||||
"message": "ホワイトリストからチャンネルを削除"
|
||||
},
|
||||
"voteOnTime": {
|
||||
"message": "区域に投票"
|
||||
"message": "セグメントに投票"
|
||||
},
|
||||
"Submissions": {
|
||||
"message": "提出数"
|
||||
"message": "提案数"
|
||||
},
|
||||
"savedPeopleFrom": {
|
||||
"message": "次のセグメント数から人々を救いました: "
|
||||
@@ -134,17 +137,17 @@
|
||||
"message": "リーダーボード"
|
||||
},
|
||||
"recordTimesDescription": {
|
||||
"message": "送信"
|
||||
"message": "提出"
|
||||
},
|
||||
"submissionEditHint": {
|
||||
"message": "提出をクリックするとセクション編集画面が表示されます",
|
||||
"description": "Appears in the popup to inform them that editing has been moved to the video player."
|
||||
},
|
||||
"popupHint": {
|
||||
"message": "心得: 利用者設定で,提出用の鍵盤束縛を設定できます"
|
||||
"message": "心得: 利用者設定で提出時のキーバインドを設定できます"
|
||||
},
|
||||
"clearTimesButton": {
|
||||
"message": "時間をクリア"
|
||||
"message": "時間を消去"
|
||||
},
|
||||
"submitTimesButton": {
|
||||
"message": "時間を提出"
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "ユーザー名を設定"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "パブリックユーザIDをコピー"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "公式Discordサーバーに参加して意見やフィードバックをお寄せください!"
|
||||
},
|
||||
@@ -174,7 +180,10 @@
|
||||
"message": "YouTube プレイヤーにボタンを表示しない"
|
||||
},
|
||||
"hideButtonsDescription": {
|
||||
"message": "これを有効にするとYouTube再生画面の区域提出UIが非表示になります。"
|
||||
"message": "YouTube再生画面のセグメント提出ボタンを非表示にします。"
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "プレイヤーの「ハイライトまでスキップ」ボタン表示を維持する"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "YouTubeプレーヤーの情報ボタンを表示する"
|
||||
@@ -182,26 +191,23 @@
|
||||
"hideInfoButton": {
|
||||
"message": "YouTubeプレーヤーの情報ボタンを隠す"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "これはYouTubeのページ上でポップアップを開くためのボタンです。"
|
||||
"autoHideInfoButton": {
|
||||
"message": "情報ボタンを自動的に隠す"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "YouTube プレイヤーから削除ボタンを隠す"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "YouTube プレイヤーから削除ボタンを表示する"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "これはYouTube再生画面上のUIで,現在の動画から未提出の区域を全て消去します。"
|
||||
"message": "YouTubeプレーヤーに削除ボタンを表示"
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "スキップ回数の統計を有効にする"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "この機能は、あなたが飛び越した区域を追跡して、当該区域がどれだけ役に立ったかを他の利用者に知らせることで、不正な情報が情報集合体に紛れないようにするための評価基準として使用されます。あなたが区域を飛び越すたびに、拡張機能はサーバーに通報を送信します。使用回数の統計が正確になるよう、できる限り多くの人がこの設定を変更しないことを望みます。:)"
|
||||
"message": "この機能は、あなたがスキップしたセグメントを追跡して、そのセグメントがどれだけ役に立ったかを他のユーザーに知らせることで、スパムがデータベースに紛れないようにするための評価基準として使用されます。あなたがセグメントをスキップするたびに、拡張機能はサーバーにメッセージを送信します。使用回数の統計が正確になるよう、できる限り多くの人がこの設定を変更しないことを望みます。:)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "匿名閲覧状態で計数追跡を飛び越す"
|
||||
"message": "プライベート/シークレット タブでスキップカウントトラッキングを有効にする"
|
||||
},
|
||||
"enableQueryByHashPrefix": {
|
||||
"message": "ハッシュプレフィックスを使って要求"
|
||||
@@ -210,14 +216,32 @@
|
||||
"message": "サーバーに区域を要求する際に,動画IDの代わりに動画IDのハッシュから最初の4文字を送信します。それに対して,サーバーは類似したハッシュを持つすべての動画の情報を応答します。"
|
||||
},
|
||||
"enableRefetchWhenNotFound": {
|
||||
"message": "新しい動画では区域を再取得する"
|
||||
"message": "新しい動画ではセグメントを再取得する"
|
||||
},
|
||||
"whatRefetchWhenNotFound": {
|
||||
"message": "動画がまだ新しく区域が見つからない場合は、動画を視聴している間、数分おきに区域を検索し続けます。"
|
||||
"message": "動画がまだ新しくセグメントが見つからない場合は、動画を視聴している間、数分おきにセグメントを検索し続けます。"
|
||||
},
|
||||
"showNotice": {
|
||||
"message": "再度通知を表示する"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"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."
|
||||
@@ -239,35 +263,35 @@
|
||||
"description": "The second line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"setSkipShortcut": {
|
||||
"message": "区域を飛び越す鍵束縛を設定"
|
||||
"message": "セグメントをスキップするキーを設定"
|
||||
},
|
||||
"setStartSponsorShortcut": {
|
||||
"message": "区域を開始する鍵束縛を設定"
|
||||
"message": "セグメントの開始/停止キーのバインドを設定"
|
||||
},
|
||||
"setSubmitKeybind": {
|
||||
"message": "投稿する鍵束縛を設定"
|
||||
"message": "提案キーのバインドを設定"
|
||||
},
|
||||
"keybindDescription": {
|
||||
"message": "選択する鍵束縛を打鍵してください"
|
||||
"message": "キーを入力して設定します"
|
||||
},
|
||||
"keybindDescriptionComplete": {
|
||||
"message": "鍵束縛を次の通り設定しました: "
|
||||
"message": "キーバインドは次のように設定されました: "
|
||||
},
|
||||
"0": {
|
||||
"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": "エラーコード: "
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "スキップ"
|
||||
},
|
||||
"mute": {
|
||||
"message": "ミュート"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "{0} をスキップしますか?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "{0} をミュートしますか?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "{0}まで飛び越しますか?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "スキップしました"
|
||||
"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": "自動スキップを無効にする"
|
||||
@@ -288,10 +331,10 @@
|
||||
"message": "自動スキップを有効にする"
|
||||
},
|
||||
"audioNotification": {
|
||||
"message": "オーディオ通知をスキップ"
|
||||
"message": "スキップ時に通知音を鳴らす"
|
||||
},
|
||||
"audioNotificationDescription": {
|
||||
"message": "スキップ時の音声通知は、セグメントがスキップされる毎に音を鳴らす機能です。無効 (または自動スキップが無効) の場合、音は再生されません。"
|
||||
"message": "セグメントがスキップされた時に音を鳴らします。 無効 (もしくは自動スキップが無効) の場合、音は再生されません。"
|
||||
},
|
||||
"showTimeWithSkips": {
|
||||
"message": "スキップした分を除いた時間を表示する"
|
||||
@@ -327,25 +370,19 @@
|
||||
"message": "サーバーの状態についてはstatus.sponsor.ajay.appを確認してください。"
|
||||
},
|
||||
"changeUserID": {
|
||||
"message": "利用者IDの読み込み・書き出し"
|
||||
"message": "ユーザーIDのインポート/エクスポート"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "これを公開してはいけません。これは暗証語のようなものであり,誰とも共有するべきではありません。これを持っている人はあなたになりすませてしまいます。"
|
||||
"message": "この情報を誰にも開示しないでください。これはパスワードのように、誰とも共有するべきではありません。 誰かがこれを持っている場合、あなたになりすますことができます。パブリックユーザーIDを探している場合は、ポップアップのクリップボードアイコンをクリックしてください。"
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "利用者IDを設定"
|
||||
"message": "ユーザーIDを設定"
|
||||
},
|
||||
"userIDChangeWarning": {
|
||||
"message": "警告: 利用者IDの変更は恒久的です。本当に実行しますか? 念のため,旧IDを控えておいてください。"
|
||||
"message": "警告: ユーザーIDの変更は恒久的です。本当に実行しますか? 念のため以前のユーザーIDは控えておいてください。"
|
||||
},
|
||||
"createdBy": {
|
||||
"message": "作成者"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "自動スキップ"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "区域を飛び越した後に通知を表示する"
|
||||
"message": "作成者:"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": "。現在の設定は:"
|
||||
@@ -364,10 +401,10 @@
|
||||
"message": "Invidious対応を有効にし,自動飛越を無効にし,GUIを非表示にします。"
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"message": "第三者製クライアントの実体を追加"
|
||||
"message": "サードパーティーのクライアントインスタンスを追加"
|
||||
},
|
||||
"addInvidiousInstanceDescription": {
|
||||
"message": "任意の実体を追加できます。ドメイン名だけを記入してください。例: invidious.ajay.app"
|
||||
"message": "任意のインスタンスを追加できます。ドメイン名だけを記入してください。例: invidious.ajay.app"
|
||||
},
|
||||
"add": {
|
||||
"message": "追加"
|
||||
@@ -379,16 +416,22 @@
|
||||
"message": "Invidiousインスタンス一覧を初期化"
|
||||
},
|
||||
"resetInvidiousInstanceAlert": {
|
||||
"message": "Invidiousインスタン一覧を初期化しようとしています"
|
||||
"message": "Invidiousインスタンス一覧を初期化しようとしています"
|
||||
},
|
||||
"currentInstances": {
|
||||
"message": "現在のインスタンス:"
|
||||
},
|
||||
"minDuration": {
|
||||
"message": "飛越す最短の時間(秒):"
|
||||
"message": "最小持続時間(秒):"
|
||||
},
|
||||
"minDurationDescription": {
|
||||
"message": "設定値より短い区域は飛び越されず,再生画面にも表示されません。"
|
||||
"message": "設定値より短いセグメントはスキップされず、プレーヤーにも表示されません。"
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "飛び越し通知の表示時間(秒):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "飛び越し通知が画面上に表示され続ける時間です。手動で飛び越した場合は,より長く表示される可能性があります。"
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "提出しようとしている区間の長さが個人設定における最短時間よりも短かいです。これは,既に当区間は提出されており,個人設定によって無視されていることを意味します。本当に提出しますか?"
|
||||
@@ -396,9 +439,6 @@
|
||||
"showUploadButton": {
|
||||
"message": "アップロードボタンを表示"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "時刻印を選択し提出準備が整ったあとにYouTube再生機上に表示されます。"
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock サーバーアドレス"
|
||||
},
|
||||
@@ -427,7 +467,7 @@
|
||||
"message": "JSON形式の個人設定全体です。利用者IDが含まれているので,共有するときは注意してください。"
|
||||
},
|
||||
"setOptions": {
|
||||
"message": "設定する"
|
||||
"message": "オプション設定"
|
||||
},
|
||||
"exportOptionsWarning": {
|
||||
"message": "警告: 設定の変更は恒久的で,本拡張機能を破壊する可能性があります。本当に実行しますか? 念のため,旧設定を控えておいてください。"
|
||||
@@ -436,7 +476,7 @@
|
||||
"message": "JSONの書式が正しくありません。設定は変更されませんでした。"
|
||||
},
|
||||
"confirmNoticeTitle": {
|
||||
"message": "区域を提出"
|
||||
"message": "セグメントを送信"
|
||||
},
|
||||
"submit": {
|
||||
"message": "送信"
|
||||
@@ -451,7 +491,7 @@
|
||||
"message": "プレビュー"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "未確定"
|
||||
"message": "未提出"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "調査"
|
||||
@@ -460,7 +500,7 @@
|
||||
"message": "編集"
|
||||
},
|
||||
"copyDebugInformation": {
|
||||
"message": "詳細情報をクリップボードに写す"
|
||||
"message": "デバッグ情報をクリップボードにコピー"
|
||||
},
|
||||
"copyDebugInformationFailed": {
|
||||
"message": "クリップボードに書き込めませんでした"
|
||||
@@ -468,11 +508,14 @@
|
||||
"copyDebugInformationOptions": {
|
||||
"message": "不具合があった,あるいは開発者から要求があった際に提供する為の情報をクリップボードに写します。利用者ID,許可表にある番組,および個人サーバーのアドレスなどの機密情報は含まれていません。ただし,利用者エージェント,Web閲覧機,OS,および拡張機能の版番などの情報は含まれています。"
|
||||
},
|
||||
"copyDebugInformationComplete": {
|
||||
"message": "診断用情報がクリップボードに複製されました。共有したくない情報があればそこから削除できます。これをファイルに保存したり,不具合報告に貼り付けてください。"
|
||||
},
|
||||
"theKey": {
|
||||
"message": "鍵束縛"
|
||||
"message": "キー"
|
||||
},
|
||||
"keyAlreadyUsed": {
|
||||
"message": "は別の動作に割り当て済みです。違う鍵を設定してください。"
|
||||
"message": "は他の動作に割り当てられています。異なったキーを選択してください。"
|
||||
},
|
||||
"to": {
|
||||
"message": "~",
|
||||
@@ -491,7 +534,10 @@
|
||||
"message": "無報酬での宣伝あるいは自己販促を除いて「提供者」と同様です。商品・寄付・合作情報にかんする節を含みます。"
|
||||
},
|
||||
"category_interaction": {
|
||||
"message": "動画の間に挟まる告知(番組登録)"
|
||||
"message": "行動を促すメッセージ(チャンネル登録)"
|
||||
},
|
||||
"category_interaction_description": {
|
||||
"message": "動画の途中に挟まれる,高評価,チャンネル登録・通知の有効化を促す短かい場面。長かったり具体的な商品についての場面は,中断ではなく自己販売促進に分類するべきです。"
|
||||
},
|
||||
"category_interaction_short": {
|
||||
"message": "動画の間に挟まる告知"
|
||||
@@ -499,32 +545,53 @@
|
||||
"category_intro": {
|
||||
"message": "インターミッション / イントロアニメーション"
|
||||
},
|
||||
"category_intro_description": {
|
||||
"message": "意味のある内容を含まない場面です。一時停止,静止画面,繰り返される動作などが相等します。意味のある情報を含む転換場面に対しては使わないでください。"
|
||||
},
|
||||
"category_intro_short": {
|
||||
"message": "インターミッション"
|
||||
},
|
||||
"category_outro": {
|
||||
"message": "エンドカード/クレジット"
|
||||
},
|
||||
"category_outro_description": {
|
||||
"message": "提供表示やYouTubeの終了画面が表示されている場面。動画の内容を結論している場面には使用しないで下さい。"
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "予告と前回の粗筋"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "前回の粗筋,または動画の後半内容の予告。音声による要約ではなく,編集された映像を指します。"
|
||||
},
|
||||
"category_filler_description": {
|
||||
"message": "脱線したシーンには、動画の主な内容を理解するのに必要がない穴埋めやユーモアのみを追加してください。これには、文脈や背景の詳細を提供するセグメントを含めないでください。"
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "フィラー"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "音楽: 音楽ではない区間"
|
||||
"message": "音楽: 音楽以外のセクション"
|
||||
},
|
||||
"category_music_offtopic_description": {
|
||||
"message": "ミュージックビデオでの使用に限ります。他のカテゴリーに含まれていないミュージックビデオのセクションにのみ使用してください。"
|
||||
},
|
||||
"category_music_offtopic_short": {
|
||||
"message": "非音楽"
|
||||
"message": "音楽以外の部分"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "ハイライト"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "多くの人が求めている動画の部分。「動画はXからスタート」のようなコメントです。"
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "生配信: 寄付などの読み上げ"
|
||||
"message": "ライブ配信: 寄付/メッセージの読み上げ"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "寄付などの読み上げ"
|
||||
},
|
||||
"disable": {
|
||||
"message": "無効"
|
||||
"autoSkip": {
|
||||
"message": "自動スキップ"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "手動スキップ"
|
||||
@@ -532,8 +599,26 @@
|
||||
"showOverlay": {
|
||||
"message": "シークバーに表示"
|
||||
},
|
||||
"disable": {
|
||||
"message": "無効"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "冒頭へ自動スキップ"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "動画を読み込んだ際に確認する"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "シークバーに表示"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "非音楽区域がある場合,全区域を自動的に飛び越す"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "スキップする代わりに音声をミュートしてセグメントを許可"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "色の書式が正しくありません。井桁記号に続く3桁あるいは6桁の16進数である必要があります。"
|
||||
"message": "カラーコードの書式が間違っています。 #から始まる3桁または6桁の16進数コードでなければなりません。"
|
||||
},
|
||||
"previewColor": {
|
||||
"message": "未確定の色",
|
||||
@@ -546,27 +631,39 @@
|
||||
"message": "カテゴリ"
|
||||
},
|
||||
"skipOption": {
|
||||
"message": "飛び越し設定",
|
||||
"message": "スキップ設定",
|
||||
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
|
||||
},
|
||||
"enableTestingServer": {
|
||||
"message": "ベータテストサーバーを有効にする"
|
||||
},
|
||||
"whatEnableTestingServer": {
|
||||
"message": "提出した区域と区域への投票が主サーバーで**取り扱われなく**なります。試験目的にのみ利用してください。"
|
||||
},
|
||||
"testingServerWarning": {
|
||||
"message": "試サーバーに接続している間,全ての提出・投票は主サーバーで取り扱われなくなります。実際の提出・投票を行う際は,この設定を無効にしてください。"
|
||||
},
|
||||
"bracketNow": {
|
||||
"message": "(今)"
|
||||
},
|
||||
"moreCategories": {
|
||||
"message": "範疇を変更"
|
||||
"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": {
|
||||
"message": "警告: このタイプのセグメントは一度に最大一つだけ有効にすることができます。複数送信するとランダムなものが表示されます。"
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "提出する全ての区域について,その範疇を選択する必要があります!"
|
||||
"message": "送信するすべてのセグメントにカテゴリを選択する必要があります!"
|
||||
},
|
||||
"bracketEnd": {
|
||||
"message": "(終了)"
|
||||
},
|
||||
"hiddenDueToDownvote": {
|
||||
"message": "低い評価の区間を無視する"
|
||||
@@ -578,6 +675,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がまだ読み込まれていません。埋め込み動画でご覧になっている場合は,代わりにYouTubeの公式サイトで再生してみてください。この問題はYouTubeの画面構成を変えた際にも発生する可能性があります。その場合は,こちらに意見をお書きください:"
|
||||
},
|
||||
"videoInfoFetchFailed": {
|
||||
"message": "SponsorBlockの動画情報取得が拒否されています。詳細は https://github.com/ajayyy/SponsorBlock/issues/741 を参照してください。"
|
||||
},
|
||||
"youtubePermissionRequest": {
|
||||
"message": "SponsorBlockがYouTube APIを参照できないようです。修正するには,次に表示される画面で許可を承認してから,数秒後に再読み込みしてください。"
|
||||
},
|
||||
@@ -585,19 +685,19 @@
|
||||
"message": "許可を承認する"
|
||||
},
|
||||
"permissionRequestSuccess": {
|
||||
"message": "許可要求が成功しました。"
|
||||
"message": "許可リクエストが成功しました!"
|
||||
},
|
||||
"permissionRequestFailed": {
|
||||
"message": "権限要求に失敗しました。承認を拒否しましたか?"
|
||||
"message": "権限要求に失敗しました。拒否をクリックしましたか?"
|
||||
},
|
||||
"adblockerIssueWhitelist": {
|
||||
"message": "これを解決できない場合は,「飛び越し前に強制的に番組を検査する」を無効にしてください。SponsorBlockはこの動画の番組情報を取得できませんでした。"
|
||||
"message": "これを解決できない場合は、設定「スキップする前にチャンネルチェックを強制」を無効にしてください。 SponsorBlockはこのビデオのチャンネル情報を取得できません。"
|
||||
},
|
||||
"forceChannelCheck": {
|
||||
"message": "飛び越し前に強制的に番組を検査する"
|
||||
"message": "スキップする前にチャンネルチェックを強制する"
|
||||
},
|
||||
"whatForceChannelCheck": {
|
||||
"message": "既定では,番組のいかんにかかわらず区域をすぐに飛び越します。また,既定では,許可表にある番組であっても再生開始直後の区域を飛び越してしまう場合があります。この個人設定を有効にすると前述の挙動を防げます。ただし,番組IDの取得に時間が掛かるせいで,全ての飛び越しを作成するのに遅延が生じます。高速な通信環境であれば,ほとんど遅延を感じないでしょう。"
|
||||
"message": "デフォルト設定では、チャンネル情報を取得する前にセグメントをスキップします。デフォルト設定では、ホワイトリストに追加されているチャンネルでも動画の先頭部分にあるセグメントがスキップされる場合があります。この設定を有効にするとこの挙動が回避されますが、channelIDの取得に時間がかかるため、すべてのスキップに遅延が発生します。高速なインターネット回線を使用している場合は気にならないかもしれません。"
|
||||
},
|
||||
"forceChannelCheckPopup": {
|
||||
"message": "「飛び越し前に強制的に番組を検査する」を有効にすることを検討してください"
|
||||
@@ -606,13 +706,13 @@
|
||||
"message": "不正確あるいは間違った時刻です"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "カテゴリが違います"
|
||||
"message": "カテゴリーを変更してください"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "この動画は音楽として分類されています。本当にこの動画に提供表示画面がありますか? 当区域が本当に「音楽以外の区域」だった場合は,拡張機能の個人設定を開いて,この分類を有効にしてください。その後,「提供表示画面」の代わりに「非音楽」として区域を提出してください。よく分からない場合は,区域分野にかんする指針をお読みください。"
|
||||
"message": "この動画は音楽として分類されています。本当にこの動画にスポンサー部分がありますか? 本セグメントが本当に「音楽以外の区域」だった場合は、設定画面からこの分類を有効にしてください。その後、「スポンサー部分」の代わりに「音楽以外のセグメント」としてセグメントを提出できます。よく分からない場合は、ガイドラインを参照してください。"
|
||||
},
|
||||
"multipleSegments": {
|
||||
"message": "複数の区域"
|
||||
"message": "複数のセグメント"
|
||||
},
|
||||
"guidelines": {
|
||||
"message": "ガイドライン"
|
||||
@@ -627,11 +727,109 @@
|
||||
"categoryUpdate2": {
|
||||
"message": "導入画面・終了画面・商品紹介などを飛び越す個人設定を開きます。"
|
||||
},
|
||||
"help": {
|
||||
"message": "ヘルプ"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "了解",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "実験的機能をすべて無効にする",
|
||||
"description": "This is used in a popup about a new experiment to get a list of unlisted videos to back up since all unlisted videos uploaded before 2017 will be set to private."
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "二度と表示しない"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "警告のためにあなたは一時的にセグメントを提出することができなくなりました。これはあなたが悪意のない一般的なミスを犯していることに私たちが気づいた事を意味します、ルールを理解していることを確認していただければこの警告を解除します。discord.gg/SponsorBlock または matrix.to/#/#sponsor:ajay.app を使ってこのチャットに参加することもできます。"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "警告により投票が拒否されました。クリックして運営に連絡するか,少し時間を置いてからやりなおしてください。",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "寄付"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "寄付のお願いを表示しない"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "SponsorBlockを導入いただきありがとうございます。"
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "以下の設定を確認してください"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "多くの機能は既定では無効となっています。動画の導入部や最後の余計な部分を飛び越したい場合は「非本質的な内容」を飛び越すようにしてください。また,UI要素の表示・非表示を切り替えることもできます。"
|
||||
},
|
||||
"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": "さらに詳しく"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "反対票を投じ、再提出するためにローカルコピーを作成します。"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "このカテゴリーのWikiページを開きます。"
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "コピーして反対票を投じる"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "投票を続ける"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "この変更は即座にあなたのセグメントに適用されます"
|
||||
},
|
||||
"SponsorTimeEditScrollNewFeature": {
|
||||
"message": "編集ボックスにカーソルを合わせながらマウスホイールを使用すると、時間をすばやく調整できます。 CtrlキーまたはShiftキーの組み合わせを使用して変更を微調整できます。"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "다시 건너뛰기"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "음소거 해제"
|
||||
},
|
||||
"paused": {
|
||||
"message": "정지됨"
|
||||
},
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "유튜브 동영상을 찾을 수 없습니다.\n오류라면, 탭을 새로고침해보세요."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "구간 새로고침"
|
||||
},
|
||||
"success": {
|
||||
"message": "성공!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "서버 오류가 발생하였습니다. 오류 코드: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "영상 id를 제출하시겠습니까"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "구간 제거"
|
||||
},
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "사용자 이름 설정"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "공개 사용자 ID 복사"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "공식 디스코드 서버에 들어와서 기능 제안을 해주시거나 피드백을 남겨주세요!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "스킵할 구간을 제출하기 위해 YouTube 플레이어에 나타나는 버튼을 숨깁니다"
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "플레이어에 하이라이트로 건너뛰기 버튼 표시"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "YouTube 플레이어에서 정보 버튼 표시하기"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "YouTube 플레이어에서 정보 버튼 숨기기"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "YouTube 페이지에 팝업으로 표시되는 버튼입니다"
|
||||
"autoHideInfoButton": {
|
||||
"message": "정보 버튼 자동 숨김"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "YouTube 플레이어에서 삭제 버튼 숨기기"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "YouTube 플레이어에서 삭제 버튼 표시하기"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "현재 영상에 제출되지 않은 구간을 YouTube 플레이어 내에서 지우는 버튼입니다"
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "스킵 개수 추적 활성화"
|
||||
},
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "알림 다시 보여주기"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "구간을 건너뛴 후 알림 표시"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "건너뛰기 알림 크게"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "자동 건너뛰기에 대해서는 건너뛰기 알림 작게"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "모든 건너뛰기 알림 작게"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "자동 건너뛰기에 대해서는 건너뛰기 알림 숨김"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "모든 건너뛰기 알림 숨김"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock을 사용하면 영상에서 스폰서 광고, 인트로 영상, 아웃트로 영상, 구독 광고와 그 외 쓸데없는 부분을 즉시 건너뛸 수 있습니다. SponsorBlock은 모든 사람들이 참여하는 브라우저 확장 기능으로 확장 기능 사용자는 스폰서 광고 또는 다른 광고의 시작 시간과 끝 시간을 확인하여 서버로 전송할 수 있습니다. 이러한 정보가 전송되면 그 영상을 보는 다른 사용자들은 광고 구간이 나오기 전에 자동으로 건너뛸 수 있습니다. SponsorBlock을 사용하면 뮤직 비디오에서 음악이나 노래가 아닌 구간도 건너뛸 수 있습니다.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "스킵"
|
||||
},
|
||||
"mute": {
|
||||
"message": "음소거"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "{0} 을(를) 건너뛰겠어요?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "{0} 카테고리를 음소거하시겠습니까?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "{0}(으)로 건너뛰겠어요?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "스킵됨"
|
||||
"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": "자동 스킵 비활성화"
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "사용자 ID 가져오기/내보내기"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "이 정보는 다른 사람에게 공개하지 마세요. 이것은 비밀번호처럼 절대로 알려주면 안되는 정보입니다. 다른 사람이 이 정보를 습득했을 경우 사용자를 사칭할 수도 있습니다."
|
||||
"message": "이 정보는 다른 사람에게 공개하지 마세요. 이것은 비밀번호처럼 절대로 알려주면 안되는 정보입니다. 다른 사람이 이 정보를 습득했을 경우 사용자를 사칭할 수도 있습니다. 혹시 공개 사용자 ID를 찾고 있다면, 팝업 내 클립보드 아이콘을 누르시기 바랍니다."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "사용자ID 설정"
|
||||
@@ -341,12 +384,6 @@
|
||||
"createdBy": {
|
||||
"message": "개발자: "
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "자동으로 건너뛰기"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "구간을 건너뛴 후 알림 표시"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". 현재 다음으로 설정되어 있습니다:"
|
||||
},
|
||||
@@ -390,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "설정 값보다 작은 구간은 건너뛰거나 플레이어에서 표시하지 않습니다"
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "건너뛰기 알림 길이 (초):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "건너뛰기 알림이 최소한 이 길이 동안 표시됩니다. 수동 건너뛰기를 한 경우 알림이 더 길게 표시될 수 있습니다."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "다음 제출은 최소 기간 옵션보다 짧습니다. 이 말은 이미 제출되었으며, 이 옵션으로 인해 무시될 수 있습니다. 제출하시겠습니까?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "업로드 버튼 표시"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "이 버튼은 타임 스탬프를 설정 후 제출 준비가 되었을 때 YouTube 플레이어에 나타납니다."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock 서버 주소"
|
||||
},
|
||||
@@ -523,6 +563,15 @@
|
||||
"category_preview_description": {
|
||||
"message": "이전 에피소드를 간략히 요약하거나 현재 동영상에서 나중에 나올 내용을 예고해줍니다. 음성 요약이 아니라 편집된 동영상을 통한 요약입니다."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "쓸데없는 잡담"
|
||||
},
|
||||
"category_filler_description": {
|
||||
"message": "쓸데없는 잡담은 동영상의 주요 콘텐츠를 이해하는 데 필요없는 시간 떼우기 장면이나 농담만을 말합니다. 맥락이나 상세한 배경지식을 설명하는 부분은 해당하지 않습니다."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "잡담"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "음악이 아닌 구간"
|
||||
},
|
||||
@@ -532,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "음악이 아닌 구간"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "하이라이트"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "대부분의 사람들이 찾는 동영상의 파트를 말합니다. \"바쁘신 분들은...\" 댓글과 유사합니다."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "라이브스트림: 후원/메시지 읽기"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "메시지 읽기"
|
||||
},
|
||||
"disable": {
|
||||
"message": "비활성화"
|
||||
"autoSkip": {
|
||||
"message": "자동으로 건너뛰기"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "수동 스킵"
|
||||
@@ -547,6 +602,24 @@
|
||||
"showOverlay": {
|
||||
"message": "재생 시간 바 표시"
|
||||
},
|
||||
"disable": {
|
||||
"message": "비활성화"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "시점으로 자동 건너뛰기"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "동영상을 불러왔을 때 묻기"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "재생 시간 바에 표시"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "음악이 아닌 구간이 있을 때는 모든 구간 자동 건너뛰기"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "구간을 건너뛰지 않고 음소거 처리"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "올바르지 않은 색상 코드입니다. 색상 코드는 샵 (#) 기호로 시작하여 3자리 또는 6자리의 16진수로 구성되어야 합니다."
|
||||
},
|
||||
@@ -586,6 +659,9 @@
|
||||
"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": "제출 해야하는 모든 구간의 카테고리를 설정해야합니다!"
|
||||
},
|
||||
@@ -633,7 +709,7 @@
|
||||
"message": "잘못된 타이밍입니다"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "잘못된 카테고리입니다"
|
||||
"message": "카테고리 변경"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "이 영상은 음악 영상으로 분류됩니다. 정말로 스폰서가 있는 것이 확실한가요? 만약 음악 이외의 구간인 경우, 확장 옵션을 열어 이 카테고리를 활성화 하세요. 그리고, 이 구간을 스폰서 대신 음악이 아닌 구간으로 제출하세요. 헷갈릴 경우 가이드라인을 읽으세요."
|
||||
@@ -653,5 +729,121 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "인트로, 아웃트로, 기타 등을 스킵하는 설정을 여세요"
|
||||
},
|
||||
"help": {
|
||||
"message": "도움"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "확인",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "향후 모든 실험 기능 비활성화",
|
||||
"description": "This is used in a popup about a new experiment to get a list of unlisted videos to back up since all unlisted videos uploaded before 2017 will be set to private."
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "다시 보지 않음"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "현재 귀하가 악의적이지 않은 일반적인 실수를 저지르고 있음을 발견했습니다. 이에 따라 경고 조치가 내려져 일시적으로 구간을 제출할 수 없게 되었습니다. 규정을 잘 숙지했음을 확인해주십시오. 그러면 경고를 삭제하겠습니다. discord.gg/SponsorBlock 또는 matrix.to/#/#sponsor:ajay.app 링크를 통해 대화에 참여할 수도 있습니다."
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "경고로 인해 투표가 거부되었습니다. 클릭하여 대화로 해결하거나, 나중에 시간이 나면 다시 오세요.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "후원"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "후원 링크 숨기기"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "SponsorBlock을 설치해 주셔서 감사드립니다."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "아래 설정들을 확인해 주세요"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "많은 기능들이 기본적으로 비활성화되어 있습니다. 인트로, 아웃트로나 기타 불필요한 부분을 건너뛰고 싶으시면 아래에서 설정을 켜세요. UI 요소를 볼 것인지 말 것인지도 선택하실 수 있습니다."
|
||||
},
|
||||
"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": "더보기"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "비추천에 투표한 뒤 다시 제출할 수 있도록 미제출 사본을 생성합니다"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "해당 카테고리의 위키 페이지를 엽니다."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "복사 및 비추천"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "계속 투표"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "당신의 구간에 즉시 적용될 것입니다"
|
||||
},
|
||||
"SponsorTimeEditScrollNewFeature": {
|
||||
"message": "편집 상자 위에 커서를 올린 채 스크롤하면 시간을 빠르게 조정할 수 있습니다. Ctrl이나 Shift 키를 누른 채로 스크롤하면 세밀한 조정이 가능합니다."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "새 기능! 쓸데없는 말이나 농담 구간을 잡담 카테고리로 건너 뛰세요. 설정에서 활성화하세요"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "일",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "시간",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,9 +94,6 @@
|
||||
"connectionError": {
|
||||
"message": "ഒരു കണക്ഷൻ പിശക് സംഭവിച്ചു. പിശക് കോഡ്: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "വീഡിയോ ഐഡിക്ക് സമർപ്പിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "സെഗ്മെന്റുകൾ മായ്ക്കുക"
|
||||
},
|
||||
@@ -179,18 +176,12 @@
|
||||
"hideInfoButton": {
|
||||
"message": "YouTube പ്ലെയറിൽ വിവര ബട്ടൺ മറയ്ക്കുക"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "YouTube പേജിൽ ഒരു പോപ്പ്അപ്പ് തുറക്കുന്ന ബട്ടണാണിത്."
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "YouTube പ്ലെയറിൽ ഇല്ലാതാക്കുക ബട്ടൺ മറയ്ക്കുക"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "YouTube പ്ലെയറിൽ ഇല്ലാതാക്കുക ബട്ടൺ കാണിക്കുക"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "നിലവിലെ വീഡിയോയ്ക്കായി നിങ്ങൾ സമർപ്പിക്കാത്ത എല്ലാ സെഗ്മെന്റുകളും മായ്ക്കുന്ന YouTube പ്ലെയറിലെ ബട്ടൺ ഇതാണ്."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "ക Count ണ്ട് ട്രാക്കിംഗ് ഒഴിവാക്കുക പ്രാപ്തമാക്കുക"
|
||||
},
|
||||
@@ -212,6 +203,9 @@
|
||||
"showNotice": {
|
||||
"message": "അറിയിപ്പ് വീണ്ടും കാണിക്കുക"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "ഒരു സെഗ്മെന്റ് ഒഴിവാക്കിയതിനുശേഷം അറിയിപ്പ് കാണിക്കുക"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "സ്പോൺസർമാർ, ആമുഖങ്ങൾ, ros ട്ട്ട്രോകൾ, സബ്സ്ക്രിപ്ഷൻ ഓർമ്മപ്പെടുത്തലുകൾ, YouTube വീഡിയോകളുടെ മറ്റ് ശല്യപ്പെടുത്തുന്ന ഭാഗങ്ങൾ എന്നിവ ഒഴിവാക്കാൻ സ്പോൺസർബ്ലോക്ക് നിങ്ങളെ അനുവദിക്കുന്നു. സ്പോൺസർബ്ലോക്ക് ഒരു ക്ര crow ഡ്സോഴ്സ്ഡ് ബ്ര browser സർ എക്സ്റ്റൻഷനാണ്, ഇത് സ്പോൺസർ ചെയ്ത സെഗ്മെന്റുകളുടെയും YouTube വീഡിയോകളുടെ മറ്റ് സെഗ്മെൻറുകളുടെയും ആരംഭ, അവസാന സമയങ്ങൾ സമർപ്പിക്കാൻ ആരെയും അനുവദിക്കുക. ഒരു വ്യക്തി ഈ വിവരങ്ങൾ സമർപ്പിച്ചുകഴിഞ്ഞാൽ, ഈ വിപുലീകരണമുള്ള മറ്റെല്ലാവരും സ്പോൺസർ ചെയ്ത സെഗ്മെൻറിനെ മറികടക്കും. സംഗീത വീഡിയോകളുടെ സംഗീതേതര വിഭാഗങ്ങളും നിങ്ങൾക്ക് ഒഴിവാക്കാം.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -269,9 +263,6 @@
|
||||
"skip_category": {
|
||||
"message": "{0} ഒഴിവാക്കുക?"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "ഒഴിവാക്കി"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "യാന്ത്രിക ഒഴിവാക്കൽ പ്രവർത്തനരഹിതമാക്കുക"
|
||||
},
|
||||
@@ -320,9 +311,6 @@
|
||||
"changeUserID": {
|
||||
"message": "നിങ്ങളുടെ യൂസർ ഐഡി ഇറക്കുമതി ചെയ്യുക / കയറ്റുമതി ചെയ്യുക"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "ഇത് സ്വകാര്യമായി സൂക്ഷിക്കണം. ഇത് ഒരു പാസ്വേഡ് പോലെയാണ്, ഇത് ആരുമായും പങ്കിടാൻ പാടില്ല. ആർക്കെങ്കിലും ഇത് ഉണ്ടെങ്കിൽ, അവർക്ക് നിങ്ങളെ ആൾമാറാട്ടം നടത്താം."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "യൂസർ ഐഡി സജ്ജമാക്കുക"
|
||||
},
|
||||
@@ -332,12 +320,6 @@
|
||||
"createdBy": {
|
||||
"message": "ഉണ്ടാക്കിയത്"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "യാന്ത്രിക ഒഴിവാക്കുക"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "ഒരു സെഗ്മെന്റ് ഒഴിവാക്കിയതിനുശേഷം അറിയിപ്പ് കാണിക്കുക"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". ഇത് നിലവിൽ ഇതായി സജ്ജീകരിച്ചിരിക്കുന്നു:"
|
||||
},
|
||||
@@ -371,9 +353,6 @@
|
||||
"showUploadButton": {
|
||||
"message": "അപ്ലോഡ് ബട്ടൺ കാണിക്കുക"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "നിങ്ങൾ ഒരു ടൈംസ്റ്റാമ്പ് തിരഞ്ഞെടുത്ത് സമർപ്പിക്കാൻ തയ്യാറായ ശേഷം ഈ ബട്ടൺ YouTube പ്ലെയറിൽ ദൃശ്യമാകും."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "സ്പോൺസർബ്ലോക്ക് സെർവർ വിലാസം"
|
||||
},
|
||||
@@ -504,8 +483,8 @@
|
||||
"category_livestream_messages_short": {
|
||||
"message": "സന്ദേശ വായന"
|
||||
},
|
||||
"disable": {
|
||||
"message": "പ്രവർത്തനരഹിതമാക്കുക"
|
||||
"autoSkip": {
|
||||
"message": "യാന്ത്രിക ഒഴിവാക്കുക"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "സ്വമേധയാലുള്ള ഒഴിവാക്കൽ"
|
||||
@@ -513,6 +492,9 @@
|
||||
"showOverlay": {
|
||||
"message": "സീക്ക് ബാറിൽ കാണിക്കുക"
|
||||
},
|
||||
"disable": {
|
||||
"message": "പ്രവർത്തനരഹിതമാക്കുക"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "നിങ്ങളുടെ നിറം തെറ്റായി ഫോർമാറ്റുചെയ്തു. ഇത് തുടക്കത്തിൽ ഒരു നമ്പർ ചിഹ്നമുള്ള 3 അല്ലെങ്കിൽ 6 അക്ക ഹെക്സ് കോഡായിരിക്കണം."
|
||||
},
|
||||
@@ -572,9 +554,6 @@
|
||||
"downvoteDescription": {
|
||||
"message": "തെറ്റായ / തെറ്റായ സമയം"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "തെറ്റായ വിഭാഗം"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "ഈ വീഡിയോയെ സംഗീതമായി വർഗ്ഗീകരിച്ചിരിക്കുന്നു. ഇതിന് ഒരു സ്പോൺസർ ഉണ്ടെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ഇത് യഥാർത്ഥത്തിൽ \"സംഗീതേതര വിഭാഗമാണ്\" എങ്കിൽ, വിപുലീകരണ ഓപ്ഷനുകൾ തുറന്ന് ഈ വിഭാഗം പ്രാപ്തമാക്കുക. തുടർന്ന്, സ്പോൺസറിന് പകരം \"നോൺ-മ്യൂസിക്\" എന്ന് നിങ്ങൾക്ക് ഈ സെഗ്മെന്റ് സമർപ്പിക്കാൻ കഴിയും. നിങ്ങൾ ആശയക്കുഴപ്പത്തിലാണെങ്കിൽ ദയവായി മാർഗ്ഗനിർദ്ദേശങ്ങൾ വായിക്കുക."
|
||||
},
|
||||
|
||||
@@ -94,9 +94,6 @@
|
||||
"connectionError": {
|
||||
"message": "Ralat sambungan telah berlaku. Kod salah: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Adakah anda ingin menghantar untuk id video"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Kosongkan Segmen"
|
||||
},
|
||||
@@ -179,18 +176,12 @@
|
||||
"hideInfoButton": {
|
||||
"message": "Sembunyikan Butang Maklumat Pada Pemain YouTube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Ini adalah butang yang membuka pop timbul di halaman YouTube."
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Sembunyikan Butang Padam Pada Pemain YouTube"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "Tunjukkan Butang Padam Pada Pemain YouTube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Ini adalah butang pada pemain YouTube yang akan membersihkan semua segmen anda yang belum dihantar untuk video semasa."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Dayakan Skip Count Tracking"
|
||||
},
|
||||
@@ -212,6 +203,9 @@
|
||||
"showNotice": {
|
||||
"message": "Tunjukkan Notis Lagi"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Tunjukkan Makluman Setelah Segmen Dilangkau"
|
||||
},
|
||||
"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."
|
||||
@@ -269,9 +263,6 @@
|
||||
"skip_category": {
|
||||
"message": "Langkau {0}?"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Langkau"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Lumpuhkan Langkau Auto"
|
||||
},
|
||||
@@ -320,9 +311,6 @@
|
||||
"changeUserID": {
|
||||
"message": "Import / Eksport Id Pengguna Anda"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Perkara ini harus dirahsiakan. Ini seperti kata laluan dan tidak boleh dikongsi dengan sesiapa pun. Sekiranya seseorang mempunyai ini, mereka boleh menyamar sebagai anda."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "Tetapkan Id Pengguna"
|
||||
},
|
||||
@@ -332,12 +320,6 @@
|
||||
"createdBy": {
|
||||
"message": "Dicipta oleh"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Langkau Auto"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Tunjukkan Makluman Setelah Segmen Dilangkau"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Pada masa ini ditetapkan untuk:"
|
||||
},
|
||||
@@ -371,9 +353,6 @@
|
||||
"showUploadButton": {
|
||||
"message": "Tunjukkan Butang Muat Naik"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Butang ini muncul di pemain YouTube setelah anda memilih cap waktu dan siap untuk dihantar."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Alamat Pelayan Sponsorblock"
|
||||
},
|
||||
@@ -504,8 +483,8 @@
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Bacaan Mesej"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Nyahaktifkan"
|
||||
"autoSkip": {
|
||||
"message": "Langkau Auto"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Langkau Manual"
|
||||
@@ -513,6 +492,9 @@
|
||||
"showOverlay": {
|
||||
"message": "Tunjukkan Di Bar Mencari"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Nyahaktifkan"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Warna anda tidak diformat dengan betul. Ia mestilah kod hex 3 atau 6 digit dengan tanda nombor pada awalnya."
|
||||
},
|
||||
@@ -572,9 +554,6 @@
|
||||
"downvoteDescription": {
|
||||
"message": "Pemasaan Tidak Betul / Salah"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Kategori Salah"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
|
||||
@@ -26,13 +26,13 @@
|
||||
"message": "segmenten"
|
||||
},
|
||||
"upvoteButtonInfo": {
|
||||
"message": "Stemmen op deze indiening"
|
||||
"message": "Stemmen op deze inzending"
|
||||
},
|
||||
"reportButtonTitle": {
|
||||
"message": "Rapporteren"
|
||||
},
|
||||
"reportButtonInfo": {
|
||||
"message": "Deze indiening als onjuist rapporteren."
|
||||
"message": "Deze inzending als onjuist rapporteren."
|
||||
},
|
||||
"Dismiss": {
|
||||
"message": "Verwerpen"
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Opnieuw overslaan"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Niet meer dempen"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Gepauzeerd"
|
||||
},
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "Geen YouTube-video gevonden.\nVernieuw het tabblad als dit onjuist is."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Segmenten vernieuwen"
|
||||
},
|
||||
"success": {
|
||||
"message": "Gelukt!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Er is een verbindingsfout opgetreden. Foutcode: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Wilt u indienen voor video-id"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Segmenten verwijderen"
|
||||
},
|
||||
@@ -137,7 +140,7 @@
|
||||
"message": "Indienen"
|
||||
},
|
||||
"submissionEditHint": {
|
||||
"message": "Sectiebewerking verschijnt nadat u op verzenden hebt geklikt",
|
||||
"message": "Sectiebewerking verschijnt nadat u op indienen hebt geklikt",
|
||||
"description": "Appears in the popup to inform them that editing has been moved to the video player."
|
||||
},
|
||||
"popupHint": {
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Gebruikersnaam instellen"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Publieke gebruikers-ID kopiëren"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Word lid van de officiële Discord-server om suggesties en feedback te geven!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Dit verbergt de knoppen die verschijnen op de YouTube-speler om segmenten over te slaan."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Knop voor \"overslaan naar hoogtepunt\" op speler houden"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Info-knop op YouTube-speler weergeven"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Info-knop op YouTube-speler verbergen"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Dit is de knop die een pop-up opent op de YouTube-pagina."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Infoknop automatisch verbergen"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Verwijderen-knop op YouTube-speler verbergen"
|
||||
@@ -191,14 +200,11 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Verwijderen-knop op YouTube-speler weergeven"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Dit is de knop op de YouTube-speler die al uw niet-ingediende segmenten van de huidige video zal wissen."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Bijhouden van het aantal keren overslaan inschakelen"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "Deze functie houdt bij welke segmenten u heeft overgeslagen om gebruikers te laten weten hoezeer hun indiening anderen heeft geholpen en wordt samen met upvotes als meetwaarde gebruikt om ervoor te zorgen dat spam niet in de database terechtkomt. De extensie stuurt telkens wanneer u een segment overslaat een bericht naar de server. Hopelijk veranderen de meeste mensen deze instelling niet zodat de weergavenummers accuraat zijn. :)"
|
||||
"message": "Deze functie houdt bij welke segmenten u heeft overgeslagen om gebruikers te laten weten hoezeer hun inzending anderen heeft geholpen en wordt samen met upvotes als meetwaarde gebruikt om ervoor te zorgen dat spam niet in de database terechtkomt. De extensie stuurt telkens wanneer u een segment overslaat een bericht naar de server. Hopelijk veranderen de meeste mensen deze instelling niet zodat de weergavenummers accuraat zijn. :)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "Bijhouden van het aantal keren overslaan inschakelen in privé-/incognito-tabbladen"
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Melding opnieuw weergeven"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Melding weergeven nadat een segment is overgeslagen"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Volledige grootte overslaan-meldingen"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Kleine overslaan-meldingen voor automatisch overslaan"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Allemaal kleine overslaan-meldingen"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Vervaagde overslaan-meldingen"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Allemaal vervaagde overslaan-meldingen"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock laat u sponsoring, intro's, outro's, herinneringen om te abonneren en andere vervelende onderdelen van YouTube-video's overslaan. SponsorBlock is een gecrowdsourcete browser-extensie waarmee iedereen de begin- en eindtijd van gesponsorde segmenten en andere segmenten van YouTube-video's kan indienen. Zodra één persoon deze informatie indient, zal iedereen met deze extensie het gesponsorde segment overslaan. U kunt ook secties zonder muziek in muziekvideo's overslaan.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -245,7 +269,7 @@
|
||||
"message": "Sneltoets instellen voor begin/einde van segment"
|
||||
},
|
||||
"setSubmitKeybind": {
|
||||
"message": "Sneltoets instellen voor indienen"
|
||||
"message": "Sneltoets instellen voor inzending"
|
||||
},
|
||||
"keybindDescription": {
|
||||
"message": "Selecteer een toets door hem in te drukken"
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Overslaan"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Dempen"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "{0} overslaan?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "{0} dempen?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Overslaan naar {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Overgeslagen"
|
||||
"message": "{0} overgeslagen",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} gedempt",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Overgeslagen naar {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Automatisch overslaan uitschakelen"
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Uw 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."
|
||||
"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 popup als u op zoek bent naar uw publieke gebrukers-ID."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "Gebruikers-ID instellen"
|
||||
@@ -341,12 +384,6 @@
|
||||
"createdBy": {
|
||||
"message": "Gemaakt door"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Automatisch overslaan"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Melding weergeven nadat een segment is overgeslagen"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Hij is momenteel ingesteld op:"
|
||||
},
|
||||
@@ -390,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Segmenten korter dan de ingestelde waarde worden niet overgeslagen of weergegeven in de speler."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Duur van overslaan-melding (seconden):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "De overslaan-melding blijft ten minste zo lang op het scherm staan. Voor handmatig overslaan kan dit misschien zelfs langer zichtbaar zijn."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "De volgende inzending is korter dan uw \"minimale tijdsduur\"-instelling. Dit kan betekenen dat dit al is ingediend en genegeerd wordt door deze optie. Weet u zeker dat u dit wilt indienen?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Uploaden-knop weergeven"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Deze knop verschijnt op de YouTube-speler nadat u een tijdstempel heeft geselecteerd en klaar bent om in te dienen."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock-serveradres"
|
||||
},
|
||||
@@ -523,6 +563,15 @@
|
||||
"category_preview_description": {
|
||||
"message": "Snelle samenvatting van vorige afleveringen of een voorbeeld van wat er later komt in de huidige video. Bedoeld voor samengevoegde clips, niet voor gesproken samenvattingen."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Zijspoor-opvulling"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Opvulling"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Muziek: sectie niet-muziek"
|
||||
},
|
||||
@@ -532,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Niet-muziek"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Hoogtepunt"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Het deel van de video waar de meeste mensen naar op zoek zijn. Gelijkaardig aan \"video begint bij x\"-opmerkingen."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Livestream: donaties/lezen van berichten"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Lezen van berichten"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Uitschakelen"
|
||||
"autoSkip": {
|
||||
"message": "Automatisch overslaan"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Handmatig overslaan"
|
||||
@@ -547,6 +602,24 @@
|
||||
"showOverlay": {
|
||||
"message": "Weergeven in tijdbalk"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Uitschakelen"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Automatisch overslaan naar het begin"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Vragen wanneer de video wordt geladen"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Weergeven in tijdbalk"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Automatisch alle segmenten overslaan wanneer er een niet-muziek-segment is"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Segmenten toestaan die audio dempen in plaats van overslaan"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Uw kleur is verkeerd geformatteerd. Het moet een hexadecimale code van 3 of 6 cijfers zijn met een hekje aan het begin."
|
||||
},
|
||||
@@ -586,6 +659,9 @@
|
||||
"message": "Om segmenten met de categorie \"{0}\" in te dienen, moet u deze in de opties inschakelen. U wordt nu doorgestuurd naar de opties.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Waarschuwing: dit type segment kan maximaal één keer tegelijk actief zijn. Meerdere segmenten indienen zal weergave van een willekeurig segment veroorzaken."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "U moet een categorie selecteren voor alle segmenten die u indient!"
|
||||
},
|
||||
@@ -633,7 +709,7 @@
|
||||
"message": "Verkeerde timing"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Verkeerde categorie"
|
||||
"message": "Categorie wijzigen"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Deze video is gecategoriseerd als muziek. Weet u zeker dat dit een sponsor heeft? Als dit eigenlijk een \"niet-muzieksegment\" is, open dan de extensie-opties en schakel deze categorie in. Vervolgens kunt u dit segment indienen als \"niet-muziek\" in plaats van als sponsor. Lees de richtlijnen als u in de war bent."
|
||||
@@ -654,11 +730,12 @@
|
||||
"categoryUpdate2": {
|
||||
"message": "Open de opties om intro's, outro's, koopwaar,... over te slaan."
|
||||
},
|
||||
"experimentUnlistedTitle": {
|
||||
"message": "Helpen voorkomen dat dit verdwijnt"
|
||||
"help": {
|
||||
"message": "Help"
|
||||
},
|
||||
"experimentUnlistedText": {
|
||||
"message": "Deze video is gedetecteerd als niet-genoteerd en geüpload voor 2017.\nOude niet-genoteerde video's worden volgende maand op privé gezet.\nWe zijn *publieke* video's aan het verzamelen om te backuppen.\nWilt u deze video anoniem naar ons toesturen?\nhttps://support.google.com/youtube/answer/9230970"
|
||||
"GotIt": {
|
||||
"message": "Begrepen",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Uitschrijven van alle toekomstige experimenten",
|
||||
@@ -666,5 +743,107 @@
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "Voor altijd verbergen"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "U heeft een waarschuwing gekregen en kunt tijdelijk geen segmenten indienen. Dit betekent dat we gemerkt hebben dat u een aantal veelvoorkomende fouten maakt die niet kwaadaardig zijn. Bevestig dat u de regels begrijpt en we zullen de waarschuwing verwijderen. U kunt ook deelnemen aan deze chat via discord.gg/SponsorBlock of matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Stem geweigerd vanwege een waarschuwing. Klik om een chat te openen om het op te lossen, of kom later terug als u tijd hebt.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Doneren"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Donatiekoppeling verbergen"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Bedankt voor het installeren van SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Bekijk de onderstaande opties"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Veel functies zijn standaard uitgeschakeld. Als u intro's of outro's wilt overslaan, Invidious wilt gebruiken, enz., schakelt u ze hieronder in. U kunt ook UI-elementen verbergen/weergeven."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Hoe overslaan werkt"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "Videosegmenten zullen automatisch worden overgeslagen als ze in de database worden gevonden. U kunt de popup openen door op het pictogram van de extensie te klikken om een voorbeeld te krijgen van wat ze zijn."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Als u een segment overslaat, krijgt u een bericht. Als de timing verkeerd lijkt, stem dan door op downvote te klikken! U kunt ook stemmen in de popup."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Indienen"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "Indienen kan ofwel in de popup door op de knop \"segment begint nu\" te drukken of in de videospeler met de knoppen op de speler."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Klikken op de afspelen-knop geeft het begin van een segment aan en klikken op het stop-pictogram geeft het einde aan. U kunt meerdere sponsors voorbereiden voordat u op indienen klikt. Klikken op de uploadknop zal indienen. Klikken op de vuilnisbak zal verwijderen."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Bewerken"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Als u een fout hebt gemaakt, kunt u uw segmenten bewerken of verwijderen nadat u op de knop met de pijl omhoog hebt geklikt."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Dit is te traag"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Er zijn sneltoetsen als u die wilt gebruiken. Druk op de puntkomma-toets om het begin/einde van een sponsorsegment aan te geven en klik op de apostrof om in te dienen. Deze kunnen worden veranderd in de opties. Als u geen QWERTY gebruikt, moet u waarschijnlijk de toetsencombinatie veranderen."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Kan ik een kopie van de database krijgen? Wat gebeurt er als u verdwijnt?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "De database is openbaar en beschikbaar op"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "De broncode is vrij beschikbaar. Dus, zelfs als mij iets overkomt, zijn uw inzendingen niet verloren."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Nieuws en hoe het gemaakt is"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Waar kan ik de broncode krijgen?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Dank aan"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Meer informatie"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Doet een downvote en maakt een lokale kopie aan die u opnieuw kunt indienen"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Wikipagina van deze categorie openen."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Kopiëren en downvote doen"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Doorgaan met stemmen"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Dit is direct van toepassing op uw segmenten"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Nieuw! Zijsporen en grapjes overslaan met de opvulling-categorie. Inschakelen via opties"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": " d",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": " h",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,9 +94,6 @@
|
||||
"connectionError": {
|
||||
"message": "En tilkoblingsfeil har oppstått. Feilkode: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Vil du sende inn for video-ID-en"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Tøm segmenter"
|
||||
},
|
||||
@@ -179,18 +176,12 @@
|
||||
"hideInfoButton": {
|
||||
"message": "Skjul infoknappen på YouTube-avspilleren"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Dette er knappen som åpner et oppsprett på YouTube-siden."
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Skjul Slett-knappen på YouTube-avspilleren"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "Vis Slett-knappen på YouTube-avspilleren"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Dette er knappen på YouTube-avspilleren som tømmer alle dine uinnsendte segmenter for den nåværende videoen."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Skru på telling av hopp"
|
||||
},
|
||||
@@ -212,6 +203,9 @@
|
||||
"showNotice": {
|
||||
"message": "Vis varselet igjen"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Vis varsel etter at et segment har blitt hoppet over"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock lar deg hoppe over sponsorer, introer, outro-er, abonnementspåminnelser, og andre irriterende deler av YouTube-videoer. SponsorBlock er en fellesskapsdrevet nettleserutvidelser som lar alle sende inn start- og sluttidspunktene til sponsede segmenter og andre segmenter i YouTube-videoer. Når en person sender inn denne informasjonen, vil alle andre med denne utvidelsen hoppe rett over det sponsede segmentet. Du kan også hoppe over ikke-musikk-seksjoner i musikkvideoer.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -269,9 +263,6 @@
|
||||
"skip_category": {
|
||||
"message": "Vil du hoppe over {0}?"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Hoppet over"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Skru av autohopping"
|
||||
},
|
||||
@@ -320,9 +311,6 @@
|
||||
"changeUserID": {
|
||||
"message": "Importer/Eksporter din bruker-ID"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Dette burde holdes privat. Dette er som et passord og burde ikke deles med noen. Hvis noen har dette, kan de etterligne deg."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "Angi bruker-ID"
|
||||
},
|
||||
@@ -332,12 +320,6 @@
|
||||
"createdBy": {
|
||||
"message": "Opprettet av"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Hopp over automatisk"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Vis varsel etter at et segment har blitt hoppet over"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Den er før øyeblikket satt til:"
|
||||
},
|
||||
@@ -371,9 +353,6 @@
|
||||
"showUploadButton": {
|
||||
"message": "Vis opplastingsknapp"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Denne knappen dukker opp på YouTube-avspilleren etter at du har valgt et tidsstempel og er klar til å sende inn."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock-tjeneradresse"
|
||||
},
|
||||
@@ -504,8 +483,8 @@
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Høytlesning av meldinger"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Deaktiver"
|
||||
"autoSkip": {
|
||||
"message": "Hopp over automatisk"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Manuelt hopp"
|
||||
@@ -513,6 +492,9 @@
|
||||
"showOverlay": {
|
||||
"message": "Vis i tidsstripen"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Deaktiver"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Fargen din er formattert feil. Det burde være en 3- eller 6-sifret heksadesimal kode med et nummertegn foran."
|
||||
},
|
||||
@@ -584,9 +566,6 @@
|
||||
"downvoteDescription": {
|
||||
"message": "Feil tidtaking"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Feil kategori"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Denne videoen er kategorisert som musikk. Er du sikker på at dette har en sponsor? Hvis det egentlig er et \"Ikke-musikk-segment\", åpne opp innstillingene til utvidelsen og skru på denne kategorien. Deretter kan du sende dette segmentet som \"Ikke-musikk\" i stedet for som sponsing. Vennligst les retningslinjene hvis du er forvirret."
|
||||
},
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Pomiń"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Odcisz"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Zatrzymany"
|
||||
},
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "Nie znaleziono filmu YouTube.\nJeżeli to błąd, odśwież stronę."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Odśwież segmenty"
|
||||
},
|
||||
"success": {
|
||||
"message": "Sukces!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Wystąpił błąd połączenia. Kod błędu: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Czy chcesz wysłać dla filmu o id"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Wyczyść segmenty"
|
||||
},
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Ustaw nazwę użytkownika"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Kopiuj Publiczne ID Użytkownika"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Dołącz do oficjalnego serwera na discordzie i podziel się wrażeniami i sugestiami!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Ta opcja ukrywa przyciski do zamieszczania segmentów pojawiające się na odtwarzaczu YouTube."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Kontynuuj wyświetlanie przycisku pomijania"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Pokaż przycisk informacyjny na odtwarzaczu YouTube"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Ukryj przycisk informacyjny na odtwarzaczu YouTube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Jest to przycisk otwierający okienko pop-up na stronie YouTube."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Autoukrywanie przycisku informacji"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Ukryj przycisk usuwania na odtwarzaczu YouTube"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Pokaż przycisk usuwania na odtwarzaczu YouTube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Ten przycisk na odtwarzaczu YouTube wyczyści wszystkie twoje niewysłane segmenty dla bieżącego filmu."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Włącz monitorowanie liczby pominięć"
|
||||
},
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Pokaż informacje ponownie"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Pokaż informację po pominięciu segmentu"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Duże powiadomienia o przewinięciu"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Małe powiadomienia o automatycznym przewijaniu"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Małe powiadomienia o przewinięciu"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Znikające powiadomienia o automatycznym przewijaniu"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Znikające powiadomienia o przewijaniu"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock pozwala pomijać sponsorów, intra, outra, przypomnienia o subskrypcjach i inne irytujące fragmenty filmów na YouTube. SponsorBlock jest opartym na crowdsourcingu rozszerzeniem do przeglądarki, które pozwala każdemu zgłosić początek i koniec segmentów sponsorowanych oraz innych segmentów w filmach na YouTube. Kiedy ktoś już zamieści te informacje, wszyscy pozostali z tym rozszerzeniem będą pomijać segment sponsorowany. Możesz również pomijać fragmenty teledysków bez muzyki.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Pomiń"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Wycisz"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Pominąć {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Wyciszyć {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Przejść do {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Pominięto"
|
||||
"message": "Pominięto {0}",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "Wyciszono {0}",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Przewinięto do {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Wyłącz autopomijanie"
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Importuj/Eksportuj swój identyfikator użytkownika"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Ta informacja jest poufna i działa jak hasło. Użytkownik, który ma do niej dostęp, może zgłaszać treści jako ty."
|
||||
"message": "Powinno pozostać prywatne. Jest to niczym hasło i nie powinno być nikomu udostępniane. Przy jego użyciu 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"
|
||||
@@ -341,12 +384,6 @@
|
||||
"createdBy": {
|
||||
"message": "Stworzony przez"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Autopomijanie"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Pokaż informację po pominięciu segmentu"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Obecnie ustawiony:"
|
||||
},
|
||||
@@ -390,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Segmenty krótsze niż ustawiona wartość nie będą pomijane ani pokazywane w odtwarzaczu."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Czas trwania powiadomienia pominięcia (sekundy):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Powiadomienie o pominięciu pozostanie na ekranie przez co najmniej tyle. Po ręcznym pominięciu, może być widoczna przez dłuższy czas."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Ten segment jest krótszy od ustawionego przez Ciebie minimalnego czasu trwania. Może to oznaczać, że ktoś już to zamieścił, ale nie widzisz tego przez to ustawienie. Czy na pewno chcesz to zamieścić?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Pokaż przycisk wysyłania"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Ten przycisk pojawia się na odtwarzaczu YouTube po wybraniu przedziału czasowego, gdy segment jest gotowy do wysłania."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Adres serwera SponsorBlock"
|
||||
},
|
||||
@@ -523,6 +563,15 @@
|
||||
"category_preview_description": {
|
||||
"message": "Szybkie podsumowanie poprzednich odcinków lub podgląd tego, co pojawia się później w bieżącym filmie. Dotyczy zmontowanych klipów, a nie ustnych podsumowań."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Filtr nietematyczny"
|
||||
},
|
||||
"category_filler_description": {
|
||||
"message": "Sceny nietematyczne dodawane tylko dla wypełniacza lub humoru, które nie są wymagane do zrozumienia głównej treści wideo. Nie powinno to obejmować segmentów zawierających informacje kontekstowe lub szczegółowe."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Wypełniacz"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Muzyka: Sekcja niemuzyczna"
|
||||
},
|
||||
@@ -532,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Bez muzyki"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Wyróżnione"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Część filmu, która interesuje większość osób. Podobne do komentarzy typu „Filmik zaczyna się od x”."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Transmisja live: Dotacja/Czytanie wiadomości"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Czytanie wiadomości"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Wyłączone"
|
||||
"autoSkip": {
|
||||
"message": "Autopomijanie"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Ręczne pomijanie"
|
||||
@@ -547,6 +602,24 @@
|
||||
"showOverlay": {
|
||||
"message": "Pokaż na pasku"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Wyłączone"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Automatycznie przewiń do początku"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Zapytaj, gdy wideo się załaduje"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Pokaż na pasku"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Automatycznie pomiń wszystkie segmenty, gdy istnieje segment niemuzyczny"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Zezwalaj na segmenty, które wyciszą dźwięk zamiast pomijać"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Nieprawidłowy format koloru. Powinien to być zapis szesnastkowy (heksadecymalny) składający się z 3 lub 6 znaków poprzedzonych kratką (#)."
|
||||
},
|
||||
@@ -586,6 +659,9 @@
|
||||
"message": "Aby przesyłać segmenty o kategorii „{0}”, musisz ją włączyć w opcjach. Za chwilę nastąpi przekierowanie do ustawień.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Ostrzeżenie: Ten typ segmentu, może być maksymalnie jeden. Przesyłanie kilku na raz spowoduje, że pojawi się losowy."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Musisz wybrać kategorię dla każdego segmentu, który zamieszczasz!"
|
||||
},
|
||||
@@ -633,7 +709,7 @@
|
||||
"message": "Niepoprawne/Zły czas"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Zła kategoria"
|
||||
"message": "Zmień kategorię"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Ten film jest skategoryzowany jako muzyka. Czy masz pewność, że jest tutaj sponsor? Jeśli w rzeczywistości jest to „Sekcja Niemuzyczna”, otwórz opcje rozszerzenia i włącz tę kategorię. Wtedy będziesz w stanie zamieścić ten segment jako „Bez Muzyki” zamiast sponsora. Przeczytaj proszę wytyczne, jeśli masz wątpliwości."
|
||||
@@ -653,5 +729,121 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Otwórz opcje, aby pominąć intra, outra, merch, itp."
|
||||
},
|
||||
"help": {
|
||||
"message": "Pomoc"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Rozumiem",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Wyłączenie wszystkich przyszłych eksperymentów",
|
||||
"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": "Schowaj na zawsze"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Otrzymałeś ostrzeżenie i nie możesz tymczasowo przesyłać segmentów. Oznacza to, że zauważyliśmy, że popełniłeś/aś pewne powszechne błędy, które nie są złośliwe, Proszę tylko potwierdzić, że rozumiesz zasady i usuniemy ostrzeżenie. Możesz również dołączyć do tego czatu używając discord.gg/SponsorBlock lub matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Głosowanie odrzucone z powodu ostrzeżenia. Kliknij, aby otworzyć czat w celu rozwiązania problemu lub wróć później, gdy będziesz miał czas.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Dotacje"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Ukryj opcję dotacji"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Dziękujemy za zainstalowanie SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Przejrzyj poniższe opcje"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Wiele funkcji jest domyślnie wyłączonych. Jeśli chcesz pomijać intra, outra, używać Invidious, itp., włącz je poniżej. Możesz również ukryć/pokazać elementy interfejsu użytkownika."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Jak działa pomijanie"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "Segmenty filmu zostaną automatycznie pominięte, jeśli znajdują się w bazie danych. Możesz kliknąć na ikonę rozszerzenia, aby podejrzeć, czym one są."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Za każdym razem, gdy pominiesz segment, otrzymasz powiadomienie. Jeśli moment nie wydaje się być poprawny, kliknij łapkę w dół! Możesz również głosować w okienku pop-up."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Wysyłanie"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "Wysyłanie może być wykonane w wyskakującym okienku, poprzez kliknięcie przycisku \"Początek segmentu\" lub za pomocą przycisków na odtwarzaczu wideo."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Kliknięcie przycisku odtwarzania wskazuje początek segmentu a kliknięcie ikony stop wskazuje koniec segmentu. Możesz przygotować wielu segmentów przed wysłaniem. Aby wysłać kliknij przycisk potwierdzający, a aby usunąć - na śmietnik."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Edytowanie"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Jeśli się pomyliłeś, możesz edytować i usuwać swoje segmenty poprzez kliknięcie przycisku ze strzałką w górę."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Zbyt wolno"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Istnieją skróty klawiszowe, jeśli chcesz ich używać. Naciśnij klawisz średnika, aby wskazać początek/koniec segmentu sponsora i kliknij w apostrof, aby przesłać. Można je zmienić w opcjach. Jeśli nie używasz QWERTY, prawdopodobnie powinieneś zmienić skrót klawiszowy."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Czy mogę otrzymać kopię bazy danych? Co się stanie, jeśli przestaniecie istnieć?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Baza danych jest publiczna i dostępna na stronie"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "Kod źródłowy jest dostępny. Tak więc, nawet jeśli coś się ze mną stanie, wasze zgłoszenia nie zostaną utracone."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Wiadomości i jak to jest zrobione"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Gdzie mogę otrzymać kod źródłowy?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Autorzy"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Dowiedz się więcej"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Minusuje i tworzy lokalną kopię, abyś mógł przesłać poprawioną wersję"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Otwórz stronę wiki dla tej kategorii."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Skopiuj i zminusuj"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Kontynuuj głosowanie"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "To natychmiastowo zostanie zastosowane do twoich segmentów"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Nowość! Pomiń nietematyczne sceny i żarty z kategorią wypełnienia. Włącz w opcjach"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "d",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "h",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"description": "Name of the extension."
|
||||
},
|
||||
"Description": {
|
||||
"message": "Pule patrocinadores, pedidos para se inscrever e mais 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 outros nos vídeos do YouTube. Reporte patrocinadores nos vídeos que você assistir para economizar o tempo dos outros.",
|
||||
"description": "Description of the extension."
|
||||
},
|
||||
"400": {
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Pular novamente"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Ativar som"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Pausado"
|
||||
},
|
||||
@@ -74,10 +77,10 @@
|
||||
"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"
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "Nenhum vídeo do YouTube encontrado.\nSe isto estiver incorreto, atualize a aba."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Atualizar segmentos"
|
||||
},
|
||||
"success": {
|
||||
"message": "Sucesso!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Ocorreu um erro de conexão. Código de erro: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Deseja enviar para o vídeo com id"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Limpar Segmentos"
|
||||
},
|
||||
@@ -128,7 +131,7 @@
|
||||
"message": "Envios"
|
||||
},
|
||||
"savedPeopleFrom": {
|
||||
"message": "Poupaste a outros de "
|
||||
"message": "Você poupou as pessoas de "
|
||||
},
|
||||
"viewLeaderboard": {
|
||||
"message": "Placar de classificação"
|
||||
@@ -137,7 +140,7 @@
|
||||
"message": "Enviar"
|
||||
},
|
||||
"submissionEditHint": {
|
||||
"message": "A edição da seção aparecerá depois que você clicar em enviar",
|
||||
"message": "A edição da seção aparecerá após você clicar em enviar",
|
||||
"description": "Appears in the popup to inform them that editing has been moved to the video player."
|
||||
},
|
||||
"popupHint": {
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Definir nome de usuário"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Copiar ID Pública de Usuário"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Junte-se ao servidor do discord oficial para dar dicas e sugestões!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Esta opção esconde os botões que aparecem para enviar segmentos no player do YouTube."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Manter botão Pular para os Destaques no player"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Mostrar botão de Informações no player do Youtube"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Esconder botão de Informações no player do Youtube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Este é o botão que abre o popup na pagina do Youtube."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Esconder Automaticamente o Botão de Informação"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Esconder botão de Apagar no player do Youtube"
|
||||
@@ -191,32 +200,50 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Mostrar botão de Apagar no player do Youtube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Este é o botão que lhe permite saltar todos os patrocínios do player 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 é usado como métrica, juntamente com votos positivos para garantir que spam não 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 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. :)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "Ativar Pular Contagem de Rastreamento em Abas Privadas/Incógnito"
|
||||
},
|
||||
"enableQueryByHashPrefix": {
|
||||
"message": "Consulta Por Prefixo 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 irá enviar dados de volta para todos os vídeos com hashes similares."
|
||||
"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."
|
||||
},
|
||||
"enableRefetchWhenNotFound": {
|
||||
"message": "Recuperar Segmentos Em Novos Vídeos"
|
||||
},
|
||||
"whatRefetchWhenNotFound": {
|
||||
"message": "Se o vídeo for novo e não houver segmentos encontrados, continuaremos buscando enquanto você assiste."
|
||||
"message": "Se o vídeo for novo e nenhum segmento for encontrado, continuaremos buscando enquanto você assiste."
|
||||
},
|
||||
"showNotice": {
|
||||
"message": "Mostrar notificação outra vez"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Mostrar Aviso Após Um Segmento Ser Ignorado"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Avisos de Ignorar em Tamanho Inteiro"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Avisos de Ignorar pequenos quando Pulado Automaticamente"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Todos os Avisos de Ignorar em Tamanho Pequeno"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Avisos de Ignorar semi-transparentes quando Pulado Automaticamente"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Todos os Avisos de Ignorar semi-transparentes"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "O SponsorBlock permite que você pule patrocinadores, introduções, outros, 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 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 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.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
},
|
||||
"website": {
|
||||
@@ -272,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Pular"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Silenciar"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Pular {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Silenciar {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Pular para {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Pulado"
|
||||
"message": "{0} Ignorado",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} Silenciado",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Pulado para {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Desativar Salto Automático"
|
||||
@@ -288,7 +334,7 @@
|
||||
"message": "Notificação de áudio ao pular"
|
||||
},
|
||||
"audioNotificationDescription": {
|
||||
"message": "A notificação de áudio ao pular irá tocar um som sempre que um segmento for ignorado. Se desativado (ou o pulo automático estiver desativado), nenhum som será reproduzido."
|
||||
"message": "A notificação de áudio ao pular irá tocar um som sempre que um segmento for pulado. Se desativado (ou o pulo automático estiver desativado), nenhum som será reproduzido."
|
||||
},
|
||||
"showTimeWithSkips": {
|
||||
"message": "Mostrar tempo com pulos removidos"
|
||||
@@ -327,7 +373,7 @@
|
||||
"message": "Importar/Exportar seu ID de usuário"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Isso deve ser mantido em segredo. É como se fosse uma senha e não deve ser compartilhado com ninguém. Se alguém tiver isso, poderá se passar por você."
|
||||
"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."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "Definir ID de usuário"
|
||||
@@ -338,18 +384,28 @@
|
||||
"createdBy": {
|
||||
"message": "Criado por"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Pular automaticamente"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Mostrar aviso após um segmento ser ignorado"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Atualmente, está definido para:"
|
||||
},
|
||||
"supportOtherSites": {
|
||||
"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.",
|
||||
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
|
||||
},
|
||||
"supportedSites": {
|
||||
"message": "Sites Suportados: "
|
||||
},
|
||||
"optionsInfo": {
|
||||
"message": "Ativar apoio ao Invidious, desabilitar pular automaticamente, ocultar botões e mais."
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"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"
|
||||
},
|
||||
"add": {
|
||||
"message": "Adicionar"
|
||||
},
|
||||
@@ -371,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Segmentos menores do que o valor definido não serão pulados ou mostrados no reprodutor."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Duração do aviso prévio de pular (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."
|
||||
},
|
||||
"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?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Mostrar botão de envio"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Este botão aparece no reprodutor do YouTube depois de ter selecionado um carimbo de data/hora e está pronto para ser enviado."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Endereço do servidor do SponsorBlock"
|
||||
},
|
||||
@@ -431,6 +490,9 @@
|
||||
"preview": {
|
||||
"message": "Pré-visualizar"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "Não enviado"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "Inspecionar"
|
||||
},
|
||||
@@ -463,19 +525,19 @@
|
||||
"message": "Patrocinador"
|
||||
},
|
||||
"category_sponsor_description": {
|
||||
"message": "Promoção paga, indicações pagas e anúncios diretos. Não para auto-promoção ou mensagens grátis para causas/criadores/websites/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_selfpromo": {
|
||||
"message": "Não-pago/Auto promoção"
|
||||
},
|
||||
"category_selfpromo_description": {
|
||||
"message": "Similar a \"patrocinador\", mas para auto promoções e segmentos não-pagos. Isto inclui seções sobre vendas, doações ou informações sobre com quem colaboraram."
|
||||
"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."
|
||||
},
|
||||
"category_interaction": {
|
||||
"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 específico, deveria ser sob Não-pago/Auto promoção."
|
||||
"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."
|
||||
},
|
||||
"category_interaction_short": {
|
||||
"message": "Lembrete de interação"
|
||||
@@ -495,23 +557,44 @@
|
||||
"category_outro_description": {
|
||||
"message": "Créditos ou quando os cards finais do YouTube aparecem. Não deve ser usado para conclusões informativas."
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "Pré-visualização/Recapitulação"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "Recapitulação rápida de episódios anteriores, ou uma prévia do que está chegando mais tarde no vídeo atual. Destinado a clipes editados juntos, não para resumos falados."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Enrolando em tangente"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Enrolação"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Música: Seção sem música"
|
||||
},
|
||||
"category_music_offtopic_description": {
|
||||
"message": "Para uso em vídeos musicais somente. Deve ser usado exclusivamente para seções de vídeos musicais que já não pertençam à outra categoria."
|
||||
"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"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"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\"."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Livestream: Leituras de Doação/Mensagem"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Leitura de mensagens"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Desativar"
|
||||
"autoSkip": {
|
||||
"message": "Pular automaticamente"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Pular manualmente"
|
||||
@@ -519,8 +602,30 @@
|
||||
"showOverlay": {
|
||||
"message": "Mostrar barra de progresso"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Desativar"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Pular automaticamente para o início"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Perguntar quando o vídeo carregar"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Mostrar na barra de progresso"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Pular automaticamente todos os segmentos quando há um segmento que não é música"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Permitir segmentos que silenciem o áudio ao invés de pular"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Sua cor está formatada incorretamente. Deve ser um código hexadecimal de 3 ou 6 dígitos com uma tralha / hashtag no início."
|
||||
"message": "Sua cor está formatada incorretamente. Deve ser um código hexadecimal de 3 ou 6 dígitos com uma cerquilha (hashtag) no início."
|
||||
},
|
||||
"previewColor": {
|
||||
"message": "Cor Não Enviada",
|
||||
"description": "Referring to submissions that have not been sent to the server yet."
|
||||
},
|
||||
"seekBarColor": {
|
||||
"message": "Cor da barra"
|
||||
@@ -551,9 +656,12 @@
|
||||
"message": "Selecione uma Categoria"
|
||||
},
|
||||
"enableThisCategoryFirst": {
|
||||
"message": "Para enviar os segmentos com a categoria de \"{0}\", você deve ativá-lo nas opções. Você será redirecionado para as opções agora.",
|
||||
"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."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Você deve selecionar uma categoria para todos os segmentos que você está enviando!"
|
||||
},
|
||||
@@ -568,13 +676,13 @@
|
||||
},
|
||||
"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 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ê achar que este é o caso, faça um comentário aqui:"
|
||||
},
|
||||
"videoInfoFetchFailed": {
|
||||
"message": "Parece que algo está bloqueando a habilidade do SponsorBlock de obter dados de vídeo. Por favor, veja https://github.com/ajayyy/SponsorBlock/issues/741 para mais informações."
|
||||
},
|
||||
"youtubePermissionRequest": {
|
||||
"message": "Parece que o SponsorBlock é incapaz de acessar a API do YouTube. Para corrigir isso, aceite a permissão do prompt que aparecerá a seguir, espere alguns segundos e recarregue a página."
|
||||
"message": "Parece que o SponsorBlock não foi capaz de acessar a API do YouTube. Para corrigir isso, aceite a permissão do prompt que aparecerá a seguir, espere alguns segundos, e recarregue a página."
|
||||
},
|
||||
"acceptPermission": {
|
||||
"message": "Aceitar permissão"
|
||||
@@ -583,28 +691,28 @@
|
||||
"message": "Solicitação de permissão bem-sucedida!"
|
||||
},
|
||||
"permissionRequestFailed": {
|
||||
"message": "Falha na solicitação de permissão. Você clicou em negar?"
|
||||
"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"
|
||||
},
|
||||
"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 segimentos imediatamente mesmo antes de saber qual é o canal. Por padrão, alguns segimentos no inicio do video podem ser ignorados nos canais da lista branca. Habilitar esta opção evitará isso, mas irá fazer com que todos os saltos 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 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."
|
||||
},
|
||||
"forceChannelCheckPopup": {
|
||||
"message": "Considere ativar a 'forçar verificação de canal antes de pular\""
|
||||
"message": "Considere Ativar a \"Forçar Verificação de Canal Antes de Pular\""
|
||||
},
|
||||
"downvoteDescription": {
|
||||
"message": "Tempo errado ou incorreto"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Categoria errada"
|
||||
"message": "Mudar Categoria"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Este vídeo é categorizado como música. Tem certeza 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 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."
|
||||
},
|
||||
"multipleSegments": {
|
||||
"message": "Múltiplos segmentos"
|
||||
@@ -620,6 +728,122 @@
|
||||
"message": "As categorias estão aqui!"
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Abra as opções para ignorar as introduções, outros, promoção de mercadoria, etc."
|
||||
"message": "Abra as opções para ignorar as introduções, créditos finais, promoção de mercadoria, etc."
|
||||
},
|
||||
"help": {
|
||||
"message": "Ajuda"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Entendi",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "Ocultar para sempre"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Você recebeu um aviso e não pode enviar segmentos temporariamente. Isso significa que notamos que você estava cometendo erros comuns não maliciosos, por favor confirme que você entende as regras e removeremos o aviso. Você também pode participar do chat usando discord.gg/SponsorBlock ou matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Voto rejeitado devido a um aviso. Clique para abrir um chat para resolvê-lo, ou volte mais tarde quando tiver tempo.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Doar"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Ocultar o Link de Doação"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Obrigado por instalar o SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"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."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Editando"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Se você errar, você pode editar ou deletar seus segmentos clicando na seta para cima."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Isto está muito devagar"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Há teclas de atalho se você quiser usá-las. Pressione a tecla ponto e vírgula para indicar o início/fim de um segmento de patrocinador e clique no apóstrofo para enviar. Estas podem ser alteradas nas opções. Se você não usa QWERTY, você provavelmente deve alterar as teclas vinculadas."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Posso baixar uma cópia do banco de dados? O que acontece se vocês desaparecerem?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "O banco de dados é público e está disponível em"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "O código-fonte está disponível gratuitamente. Então, mesmo que algo aconteça comigo, seus envios não estarão perdidos."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Notícias e como tudo é feito"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Onde posso obter o código-fonte?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Créditos"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Saiba mais"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Dá voto negativo e cria uma cópia local para você reenviar"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Abrir a wiki dessa categoria."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Copiar e dar voto negativo"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Continuar Votando"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Isto irá aplicar instantaneamente seus segmentos"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Novo! Pule tangentes e piadas com a categoria filler. Ative em opções"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "d",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "h",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,18 +99,12 @@
|
||||
"hideInfoButton": {
|
||||
"message": "Esconder botão de Informações no player do Youtube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Este é o botão que abre o popup na pagina do Youtube."
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Esconder botão de Apagar no player do Youtube"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "Mostrar botão de Apagar no player do Youtube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Este é o botão que lhe permite saltar todos os patrocínios do player do Youtube."
|
||||
},
|
||||
"showNotice": {
|
||||
"message": "Mostrar notificação outra vez"
|
||||
},
|
||||
|
||||
@@ -94,9 +94,6 @@
|
||||
"connectionError": {
|
||||
"message": "A apărut o eroare de conexiune. Cod de eroare: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Doriți să trimiteți pentru id video"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Curăță segmentele"
|
||||
},
|
||||
@@ -179,18 +176,12 @@
|
||||
"hideInfoButton": {
|
||||
"message": "Ascunde Butoanele De Informații Pe Playerul De YouTube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Acesta este butonul care deschide popup-ul pe pagina de YouTube."
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Ascunde Butonul De Ștergere Pe Playerul De YouTube"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "Arată Butonul De Ștergere Pe Playerul De YouTube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Acest buton de pe playerul de YouTube va șterge toate segmentele netrimise pentru videoclipul curent."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Activează Urmărirea Săriturilor"
|
||||
},
|
||||
@@ -212,6 +203,9 @@
|
||||
"showNotice": {
|
||||
"message": "Arată Notificarea Din Nou"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Arată o notificare după ce un segment este sărit"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock vă permite să săriți peste sponsori, intro, outros, memento-uri pentru abonament și alte părți enervante ale videoclipurilor YouTube SponsorBlock este o extensie crowdsourced de browser, care hai să trimită oricui timpul de început și de sfârșit pentru segmente sponsorizate și alte segmente de videoclipuri YouTube. Odată ce o persoană transmite aceste informații, toți ceilalți cu această extensie vor sări peste segmentul sponsorizat. De asemenea, poți sări peste secțiunile non-muzicale ale videoclipurilor.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -269,9 +263,6 @@
|
||||
"skip_category": {
|
||||
"message": "Omiteți {0}?"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Sărit"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Dezactivează Autoskip"
|
||||
},
|
||||
@@ -320,9 +311,6 @@
|
||||
"changeUserID": {
|
||||
"message": "Importă/Exportă Id-ul Tău De Utilizator"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Acest lucru trebuie să fie păstrat. Este ca și o parolă și nu ar trebui împartășită cu nimeni. Daca cineva are acest lucru, se poate da drept tu."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "Setează Id-ul Utilizatorului"
|
||||
},
|
||||
@@ -332,12 +320,6 @@
|
||||
"createdBy": {
|
||||
"message": "Creat De"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Sari Peste Automat"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Arată o notificare după ce un segment este sărit"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". În prezent este setat:"
|
||||
},
|
||||
@@ -371,9 +353,6 @@
|
||||
"showUploadButton": {
|
||||
"message": "Arată Butonul De Încărcare"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Acest buton apare pe playerul YouTube după ce ați selectat un marcaj de timp și sunteți gata să îl trimiteți."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Adresa Serverului SponsorBlock"
|
||||
},
|
||||
@@ -501,8 +480,8 @@
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Citire Mesaj"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Dezactivare"
|
||||
"autoSkip": {
|
||||
"message": "Sari Peste Automat"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Sari Peste Manual"
|
||||
@@ -510,6 +489,9 @@
|
||||
"showOverlay": {
|
||||
"message": "Arată În Bara de Derulare"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Dezactivare"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Culoarea ta este formatată incorect. Ar trebui să fie un cod hexadecimal de 3 sau 6 cifre cu un hash la început."
|
||||
},
|
||||
@@ -569,9 +551,6 @@
|
||||
"downvoteDescription": {
|
||||
"message": "Timpi Incorecți/Greșiți"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Categorie Greșită"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Пропустить"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Включить звук"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Пауза"
|
||||
},
|
||||
@@ -59,10 +62,10 @@
|
||||
"message": "Таймер остановлен"
|
||||
},
|
||||
"confirmMSG": {
|
||||
"message": "Чтобы изменить или удалить отдельные значения, нажмите кнопку «Информация» или откройте всплывающее окно расширения, щелкнув значок расширения в правом верхнем углу."
|
||||
"message": "Чтобы изменить или удалить отдельные значения, нажмите кнопку «Информация» или откройте всплывающее окно расширения, щелкнув на значок расширения в правом верхнем углу."
|
||||
},
|
||||
"clearThis": {
|
||||
"message": "Вы уверены, что хотите удалить эту информацию?\n\n"
|
||||
"message": "Вы уверены, что хотите это удалить?\n\n"
|
||||
},
|
||||
"Unknown": {
|
||||
"message": "При отправке сегмента произошла ошибка. Попытайтесь отправить его позже."
|
||||
@@ -71,7 +74,7 @@
|
||||
"message": "В базе есть сегменты для этого видео!"
|
||||
},
|
||||
"sponsor404": {
|
||||
"message": "Сегментов не найдено"
|
||||
"message": "Сегменты не найдены"
|
||||
},
|
||||
"sponsorStart": {
|
||||
"message": "Сегмент начинается отсюда"
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "Видео YouTube не найдено.\nЕсли это не так, обновите вкладку."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Обновить сегменты"
|
||||
},
|
||||
"success": {
|
||||
"message": "Успех!"
|
||||
},
|
||||
@@ -92,14 +98,11 @@
|
||||
"message": "Голос засчитан!"
|
||||
},
|
||||
"serverDown": {
|
||||
"message": "Кажется, сервера не работают. Незамедлительно свяжитесь с разработчиком."
|
||||
"message": "Кажется, сервер не отвечает. Свяжитесь с разработчиком."
|
||||
},
|
||||
"connectionError": {
|
||||
"message": "Ошибка соединения. Код ошибки: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Вы хотите отправить сегменты для видео с id"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Очистить сегменты"
|
||||
},
|
||||
@@ -113,7 +116,7 @@
|
||||
"message": "Отправить сегменты"
|
||||
},
|
||||
"submitCheck": {
|
||||
"message": "Вы уверены, что хотите отправить эту информацию?"
|
||||
"message": "Вы уверены, что хотите это отправить?"
|
||||
},
|
||||
"whitelistChannel": {
|
||||
"message": "Добавить канал в белый список"
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Установить имя пользователя"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Копировать публичный UserID"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Присоединяйтесь к официальному серверу Discord, чтобы оставить предложения и обратную связь!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Эта настройка скрывает кнопки для отправки сегментов, расположенные в плеере YouTube."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Не скрывать кнопку \"Пропустить до важного\" в плеере YouTube"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Показывать кнопку информации в плеере YouTube"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Скрыть кнопку информации в плеере YouTube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Эта кнопка открывает всплывающее окно на странице YouTube."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Автоматически скрывать кнопку Информация"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Скрыть кнопку удаления в плеере YouTube"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Показывать кнопку удаления в плеере YouTube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Эта кнопка позволяет Вам очистить все неотправленные сегменты в плеере YouTube для текущего видео."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Включить отслеживание количества пропусков сегментов"
|
||||
},
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Показать уведомление снова"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Показывать уведомление после пропуска сегмента"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Полноразмерные уведомления о пропусках"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Уменьшенные уведомления для автоматических пропусков"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Все уведомления уменьшенного размера"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Полупрозрачные уведомления для автоматических пропусков"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Полупрозрачные уведомления для всех пропусков"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock позволяет пропускать спонсорские вставки, начальные и конечные заставки, просьбы подписаться и другое в видео на YouTube. SponsorBlock — коллективное расширение, которое позволяет каждому отправить время начала и конца подобных сегментов в видео. После того, как кто-нибудь отправляет эту информацию, все остальные пользователи расширения будут автоматически пропускать эти сегменты. Так же можно пропускать части клипов без музыки.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Пропустить"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Заглушить"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Пропустить {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Заглушить {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Пропустить до {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Пропущено"
|
||||
"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": "Отключить автоматический пропуск"
|
||||
@@ -297,7 +340,7 @@
|
||||
"message": "Показывать длительность без сегментов"
|
||||
},
|
||||
"showTimeWithSkipsDescription": {
|
||||
"message": "Эта длительность отображается в скобках рядом с фактической под полосой прокрутки. Показывает длительность видео без сегментов. Включает сегменты, для которых выбрано \"Отображать в полосе прокрутки\"."
|
||||
"message": "Длительность отображается в скобках после фактической под полосой прокрутки. Показывает длительность видео без сегментов. Включает сегменты, для которых выбрано \"Отображать в полосе прокрутки\"."
|
||||
},
|
||||
"youHaveSkipped": {
|
||||
"message": "Вы пропустили "
|
||||
@@ -330,23 +373,17 @@
|
||||
"message": "Импорт/Экспорт Вашего идентификатора пользователя"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Его нужно держать в секрете. Это как пароль, не стоит им ни с кем делиться. Если он у кого-то есть, он сможет выдать себя за Вас."
|
||||
"message": "Держите его в тайне. Относитесь к нему как к паролю и не передавайте никому. Если кто-то им завладеет, то сможет выдать себя за вас. Если вы ищете публичный ID пользователя, нажмите значок буфера обмена во всплывающем окне."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "Установить идентификатор пользователя"
|
||||
},
|
||||
"userIDChangeWarning": {
|
||||
"message": "Внимание: изменение идентификатора пользователя необратимо. Вы действительно хотите это сделать? Сделайте резервную копию вашего старого на всякий случай."
|
||||
"message": "Внимание: изменение идентификатора пользователя необратимо. Вы действительно хотите это сделать? Сделайте резервную копию на всякий случай."
|
||||
},
|
||||
"createdBy": {
|
||||
"message": "Создано"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Автоматический пропуск"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Показывать уведомление после пропуска сегмента"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Он сейчас назначен на:"
|
||||
},
|
||||
@@ -390,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Сегменты короче этого значения не будут пропускаться и не будут показаны в плеере."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Длительность отображения окошка о пропуске (в секундах):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Окошко о пропуске будет оставаться на экране как минимум в течение этого времени. Может быть активно дольше при пропуске вручную."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Следующий диапазон времени короче, чем Ваша настройка минимальной длительности. Это может означать, что он уже был отправлен, и просто игнорируется из-за этой настройки. Вы действительно хотите отправить?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Показывать кнопку отправки"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Эта кнопка появляется в плеере YouTube после того, как Вы выбрали отметку времени и готовы к отправке."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Адрес сервера SponsorBlock"
|
||||
},
|
||||
@@ -466,7 +506,7 @@
|
||||
"message": "Не удалось скопировать в буфер"
|
||||
},
|
||||
"copyDebugInformationOptions": {
|
||||
"message": "Копирует информацию в буфер обмена, которая будет предоставлена разработчику при возникновении ошибки / по запросу разработчика. Такие сведения, как ID пользователя, список разрешенных каналов и адрес пользовательского сервера не передаются. Однако, отправляются ваш user agent, браузер, операционная система и номер версии расширения. "
|
||||
"message": "Копирует в буфер обмена информацию, которая будет предоставлена разработчику при возникновении ошибки / по запросу разработчика. Такие сведения, как ID пользователя, список разрешенных каналов и адрес пользовательского сервера не передаются. Однако, отправляются ваш user agent, браузер, операционная система и номер версии расширения. "
|
||||
},
|
||||
"copyDebugInformationComplete": {
|
||||
"message": "Отладочная информация скопирована в буфер обмена. Вы можете удалить любую информацию, которой не хотите делиться. Сохраните ее в текстовом файле или вставьте в отчет об ошибке."
|
||||
@@ -518,11 +558,20 @@
|
||||
"message": "Титры или время появления конечных заставок YouTube. Не для подведения итогов сказанного в видео."
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "Предварительный просмотр/краткое содержание"
|
||||
"message": "Предпросмотр/краткое содержание"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "Краткое содержание предыдущих эпизодов или предварительный просмотр того, что будет в данном видео. Предназначено для сегментов, смонтированных из кусков видео, а не для устных пересказов."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Заполнение отвлечёнными темами"
|
||||
},
|
||||
"category_filler_description": {
|
||||
"message": "Сегменты, которые увеличивают длительность видео за счёт отвлечённых тем или шуток, но не требуются для понимания основного содержания. Не должно иметь сегментов, объясняющие контекст или предысторию."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Заполнитель"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Музыка: Сегмент без музыки"
|
||||
},
|
||||
@@ -532,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Без музыки"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Важное"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Часть видео, которую ищет большинство людей. По сути заменяет комментарии типа \"Видео начинается с x:xx\"."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Прямые трансляции: пожертвование/чтение сообщения"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Чтение сообщений"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Отключить"
|
||||
"autoSkip": {
|
||||
"message": "Автоматический пропуск"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Пропускать вручную"
|
||||
@@ -547,6 +602,24 @@
|
||||
"showOverlay": {
|
||||
"message": "Показывать в полосе прокрутки"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Отключить"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Автоматически пропускать к началу видео"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Спрашивать после загрузки видео"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Показывать в полосе прокрутки"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Пропускать все сегменты автоматически при наличии сегмента без музыки"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Разрешить сегменты, которые отключают звук вместо пропуска"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Вы ввели цвет в неправильном формате. Это должно быть 3-х или 6-ти значное шестнадцатеричное число с символом # в начале."
|
||||
},
|
||||
@@ -586,6 +659,9 @@
|
||||
"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": "Вы должны выбрать категорию для всех сегментов, которые вы отправляете!"
|
||||
},
|
||||
@@ -630,10 +706,10 @@
|
||||
"message": "Рекомендуем включить \"Принудительная проверка каналов перед пропуском\""
|
||||
},
|
||||
"downvoteDescription": {
|
||||
"message": "Неверно указано время"
|
||||
"message": "Не нужен/неверно указано время"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Неверная категория"
|
||||
"message": "Изменить категорию"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Это видео классифицировано как музыкальное. Вы уверены, что в нём есть спонсоры? Если на самом деле это \"Сегмент без музыки\", откройте параметры расширения и включите эту категорию. Затем вы можете отправить этот сегмент как \"Без музыки\", а не как спонсора. Пожалуйста, прочтите руководство, если вы запутались."
|
||||
@@ -654,11 +730,12 @@
|
||||
"categoryUpdate2": {
|
||||
"message": "Откройте настройки, чтобы пропускать начальные и конечные заставки, саморекламу и другое."
|
||||
},
|
||||
"experimentUnlistedTitle": {
|
||||
"message": "Помогите архивировать это видео"
|
||||
"help": {
|
||||
"message": "Помощь"
|
||||
},
|
||||
"experimentUnlistedText": {
|
||||
"message": "Это видео было загружено до 2017 и имеет доступ по ссылке\nДля всех подобных видео в следующем месяце будет установлен ограниченный доступ\nМы собираем *публичные* видео для резервного копирования\nВы хотели бы анонимно отправить нам это видео?\nhttps://support.google.com/youtube/answer/9230970"
|
||||
"GotIt": {
|
||||
"message": "Ясно",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Отказаться от всех будущих экспериментов",
|
||||
@@ -666,5 +743,107 @@
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "Скрыть навсегда"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Вы получили предупреждение и временно не можете отправлять сегменты. Мы заметили, что вы совершали распространенные ошибки, которые не были злонамеренными. Пожалуйста, подтвердите, что вы прочитали правила и предупреждение будет удалено. Вы также можете присоединиться к нашему чату, используя discord.gg/SponsorBlock или matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Голосование отклонено из-за предупреждения. Нажмите, чтобы открыть чат, где вы можете решить проблему, или вернитесь, когда у вас будет время.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Пожертвовать"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"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": "Узнать больше"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Голосует против и создаёт локальную копию сегмента для повторной отправки"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Открыть вики-страницу этой категории."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Скопировать и проголосовать против"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Продолжить голосование"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Это мгновенно применится к вашим сегментам"
|
||||
},
|
||||
"SponsorTimeEditScrollNewFeature": {
|
||||
"message": "Наведите курсор на поле редактирования и используйте колесо мыши для быстрой настройки времени. Клавиши Ctrl или Shift могут быть использованы для точной настройки."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Новое! Пропускайте сегменты с отвлечёнными темами или шутками. Включите в настройках"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "д",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "ч",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"message": "segment"
|
||||
},
|
||||
"Segments": {
|
||||
"message": "segmenty"
|
||||
"message": "segmentov"
|
||||
},
|
||||
"upvoteButtonInfo": {
|
||||
"message": "Hlasovať pre tento príspevok"
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Znovu preskočiť"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Zrušiť stíšenie"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Pozastavené"
|
||||
},
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "Nenašlo sa žiadne YouTube video.\nAk je to chyba, obnovte záložku."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Znova načítať segmenty"
|
||||
},
|
||||
"success": {
|
||||
"message": "Hotovo!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Nastala chyba pripojenia. Kód chyby: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Chcete odoslať segmenty pre video id"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Zmazať segmenty"
|
||||
},
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Nastaviť Používateľské meno"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Skopírovať verejné ID používateľa"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Pripojte sa k oficiálnemu Discord serveru a zanechajte nám pripomienky!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Skryje tlačidlá pre preskočenie segmentov, ktoré sa zobrazujú v YouTube prehrávači."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Zobrazovať tlačidlo preskočiť na hlavný obsah videa"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Zobraziť info tlačidlo v YouTube prehrávači"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Skryť info tlačidlo v YouTube prehrávači"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Toto tlačidlo zobrazí vyskakovacie okno na YouTube stránke."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Automaticky skryť tlačidlo Info"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Skryť tlačidlo Zmazať v YouTube prehrávači"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Zobraziť tlačidlo Zmazať v YouTube prehrávači"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Toto tlačidlo v YouTube prehrávači zmaže všetky ešte neodoslané segmenty v aktuálnom videu."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Zapnúť počítanie preskočení"
|
||||
},
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Znovu zobraziť upozornenie"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Zobraziť upozornenie pri preskočení segmentu"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Veľké upozornenia o preskočení"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Malé upozornenia o automatickom preskočení"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Malé upozornenia o všetkých preskočeniach"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Priehľadné upozornenia o automatickom preskočení"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Priehľadné upozornenia o všetkých preskočeniach"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock umožňuje preskočiť sponzorov, úvodné časti, záverečné časti, pripomienky na odber, nehudobné časti videoklipov alebo iné otravné časti YouTube videí. SponsorBlock je crowdsourceové rozšírenie prehliadača, pomocou ktorého môže ktokoľvek označiť začiatok a koniec takéhoto segmentu. Po odoslaní potom všetci ostatní s týmto rozšírením tieto segmenty automaticky preskočia.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Preskočiť"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Stíšiť"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Preskočiť {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Stíšiť {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Preskočiť na {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "preskočené"
|
||||
"message": "{0} preskočené",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} stíšený",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Preskočené na {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Zakázať Automatické Preskočenie"
|
||||
@@ -309,7 +352,7 @@
|
||||
"message": "minúta"
|
||||
},
|
||||
"minsLower": {
|
||||
"message": "minúty"
|
||||
"message": "minút"
|
||||
},
|
||||
"hourLower": {
|
||||
"message": "hodina"
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Import/export vášho ID používateľa"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Toto si držte v bezpečí. Je to ako heslo a nemali by ste ho s nikým zdieľať. Ten kto ho má by sa mohol za vás vydávať."
|
||||
"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"
|
||||
@@ -341,12 +384,6 @@
|
||||
"createdBy": {
|
||||
"message": "Vytvoril"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Automatické Preskočenie"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Zobraziť upozornenie pri preskočení segmentu"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Aktuálne je nastavené na:"
|
||||
},
|
||||
@@ -390,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Segmenty kratšie ako nastavená hodnota nebudú preskočené ani zobrazené v prehrávači."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Trvanie oznámenia o preskočení (v sekundách):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Oznámenie o preskočení zostane minimálne takto dlho zobrazené. Pri manuálnom preskočení to môže byť aj dlhšie."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Segment je kratší ako vami nastavená minimálna dĺžka. Možno už bol niekým odoslaný a kvôli tomuto nastaveniu je teraz ignorovaný. Naozaj ho chcete odoslať?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Ukázať Nahrávacie Tlačidlo"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Toto tlačidlo sa zobrazí v YouTube prehrávači po tom ako označíte začiatok a koniec segmentu na odoslanie."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Adresa serveru SponsorBlock"
|
||||
},
|
||||
@@ -523,6 +563,15 @@
|
||||
"category_preview_description": {
|
||||
"message": "Rýchla rekapitulácia predošlej epizódy alebo ukážka toho, čo bude nasledovať neskôr v aktuálnom videu. Myslené pre zostrihané videá, nie pre hovorený súhrn."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Odbočka mimo tému"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Odbočka"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Hudba: časť bez hudby"
|
||||
},
|
||||
@@ -532,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Bez hudby"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Hlavný obsah videa"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Tá časť videa, ktorú ľudia vyhľadávajú. Podobné komentárom \"Video začína v čase x\"."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Živé vysielanie: oznamy a dary"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Oznamy"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Zakázať"
|
||||
"autoSkip": {
|
||||
"message": "Automatické Preskočenie"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Manuálne Preskočenie"
|
||||
@@ -547,6 +602,24 @@
|
||||
"showOverlay": {
|
||||
"message": "Zobraziť v časovej lište"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Zakázať"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Automaticky preskočiť na začiatok"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Opýtať sa, keď sa video nahraje"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Zobraziť v časovej lište"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Automaticky preskočiť všetky segmenty ak neexistuje segment bez hudby"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Povoliť segmenty, ktoré namiesto preskočenia stíšía zvuk"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Vaša farba je nesprávne naformátovaná. Mal by to byť 3 alebo 6-miestny hexadecimálny kód so znakom čísla na začiatku."
|
||||
},
|
||||
@@ -586,6 +659,9 @@
|
||||
"message": "Pre odoslanie segmentov z kategórie \"{0}\" ju musíte zapnúť v nastaveniach. Teraz tam budete presmerovaní.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Varovanie: Tento typ segmentu môže byť aktívny len jeden. Odoslanie viacerých spôsobí zobrazenie náhodného z nich."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Musíte zvoliť kategóriu pre každý segment!"
|
||||
},
|
||||
@@ -633,7 +709,7 @@
|
||||
"message": "Nesprávne/Zlé načasovanie"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Nesprávna kategória"
|
||||
"message": "Zmeniť kategóriu"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Toto video je kategorizované ako hudobné. Ste si istý, že obsahuje sponzora? Ak sa skutočne jedná o časť bez hudby, otvorte možnosti rozšírenia a povoľte túto kategóriu. Potom môžete tento segment uložiť ako kategóriu \"Bez hudby\" namiesto sponzora. Ak si neviete rady, tak si prosím prečítajte pravidlá."
|
||||
@@ -653,5 +729,121 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Otvorte nastavenia pre preskočenie úvodov, záverov, podpory reklamných predmetov, atď."
|
||||
},
|
||||
"help": {
|
||||
"message": "Pomocník"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Rozumiem",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Odmietnuť všetky budúce experimenty",
|
||||
"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": "Navždy skryť"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Dostali ste varovanie a nemôžete tak dočasne odosielať segmenty. To znamená, že sme si všimli, že ste spravili nejaké chyby, ktoré nie sú myslené zle, a chceme Vám len objasniť pravidlá a potom Vám to varovanie odoberieme. Môžete sa pripojiť do konverzácie pomocou discord.gg/SponsorBlock alebo matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Hlasovanie bolo zamietnuté kvôli varovaniu. Kliknite pre otvorenie chatu, aby ste ho vyriešili, alebo sa vráťte až budete mať čas.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Prispieť"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Skryť možnosti prispenia"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Ďakujeme za inštaláciu SponsorBlock-u."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Skontrolujte prosím možnosti nižšie"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Veľa funkcií je vo východiskovom stave vypnutých. Ak chcete preskakovať úvody, závery, používať Invidious apod., zapnite ich nižšie. Taktiež môžete zobraziť alebo skryť niektoré ovládacie prvky."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Ako funguje preskakovanie"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "Video segmenty budú automaticky preskočené, ak sa nájdu v databáze. Zobraziť si ich môžete po kliknutí na ikonu rozšírenia vo vyskakovacom okne."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Vždy keď preskočíte segment, tak dostanete oznam. Ak sa vám nepozdáva načasovanie, môžete o tom zahlasovať palcom dole! Zahlasovať tiež môžete vo vyskakovacom okne."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Odosielam"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "Odosielanie môžete vykonať z vyskakovacieho okna stlačením \"Začiatok segmentu\" alebo priamo tlačidlami v prehrávači."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Stlačenie tlačidla Prehrať označí začiatok segmentu a stlačenie tlačidla Stop označí koniec. Takto viete označiť aj viac segmentov pred odoslaním. Stlačením tlačidla \"Nahrať\" segmenty odošlete. Stlačením tlačidla \"Kôš\" segmenty zmažete."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Úpravy"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Ak ste sa pomýlili, môžete segment upraviť alebo zmazať po stlačení šípky hore."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Príliš pomalé"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Môžete využiť aj klávesové skratky. Bodkočiarka označí začiatok alebo koniec segmentu a apostrof ho odošle."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Viem získať kópiu databázy? Čo bude ak zmizneš?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Databáza je verejná a dostupná na"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "Zdrojový kód je voľne dostupný. Takže aj keby sa mi niečo stalo, vaše príspevky sa nestratia."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Novinky a ako to funguje"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Kde môžem získať zdrojový kód?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Autori"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Zistiť viac"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Dá palec dole a vytvorí kópiu, aby ste mohli segment znova odoslať"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Otvoriť wiki stránku tejto kategórie."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Skopírovať a dať palec dole"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Pokračovať v hodnotení"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Týmto ihneď vykonáte zmeny v segmentoch"
|
||||
},
|
||||
"SponsorTimeEditScrollNewFeature": {
|
||||
"message": "Čas môžete rýchlo zmeniť kolieskom myši, ak je kurozor nad zadávacím políčkom. Pre jemné zmeny pritom držte kláves ctrl alebo shift."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Nové! Preskočte odbočky mimo tému a vtipy s kategóriou filler. Zapnite si ju v nastaveniach"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "d",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "h",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,30 @@
|
||||
{}
|
||||
{
|
||||
"Options": {
|
||||
"message": "Подешавања"
|
||||
},
|
||||
"sourceCode": {
|
||||
"message": "Изворни код",
|
||||
"description": "Used on Firefox Store Page"
|
||||
},
|
||||
"errorCode": {
|
||||
"message": "Код грешке: "
|
||||
},
|
||||
"skip": {
|
||||
"message": "Прескочи"
|
||||
},
|
||||
"add": {
|
||||
"message": "Додај"
|
||||
},
|
||||
"save": {
|
||||
"message": "Сачувај"
|
||||
},
|
||||
"cancel": {
|
||||
"message": "Откажи"
|
||||
},
|
||||
"edit": {
|
||||
"message": "Измени"
|
||||
},
|
||||
"help": {
|
||||
"message": "Помоћ"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"fullName": {
|
||||
"message": "SponsorBlock för YouTube - Hoppa över sponsring",
|
||||
"message": "SponsorBlock for YouTube - Skip Sponsorships",
|
||||
"description": "Name of the extension."
|
||||
},
|
||||
"Description": {
|
||||
@@ -8,7 +8,7 @@
|
||||
"description": "Description of the extension."
|
||||
},
|
||||
"400": {
|
||||
"message": "Felaktigt anrop enligt servern"
|
||||
"message": "Servern sa att denna begäran var ogiltig"
|
||||
},
|
||||
"429": {
|
||||
"message": "Du har rapporterat för många sponsormeddelanden för den här videon, är du säker att det finns så många?"
|
||||
@@ -50,7 +50,10 @@
|
||||
"message": "Hoppa inte över"
|
||||
},
|
||||
"reskip": {
|
||||
"message": "Hoppa över"
|
||||
"message": "Hoppa över igen"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Ljud"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Pausad"
|
||||
@@ -65,7 +68,7 @@
|
||||
"message": "Är du säker på att du vill rensa detta?\n\n"
|
||||
},
|
||||
"Unknown": {
|
||||
"message": "Ett fel uppstod vid rapportering av sponsorsegment, försök igen senare."
|
||||
"message": "Ett fel uppstod vid rapportering av sponsormeddelandet, försök igen senare."
|
||||
},
|
||||
"sponsorFound": {
|
||||
"message": "Denna video har segment i databasen!"
|
||||
@@ -80,11 +83,14 @@
|
||||
"message": "Segmentet slutar nu"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "Avbryt skapandet av segmentet"
|
||||
"message": "Avbryt skapande av segment"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "Hittade ingen YouTube-video.\nUppdatera fliken om detta är felaktigt."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Uppdatera segment"
|
||||
},
|
||||
"success": {
|
||||
"message": "Klart!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Anslutningsfel. Felkod: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Vill du skicka in för video-ID"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Rensa segmenten"
|
||||
},
|
||||
@@ -147,7 +150,7 @@
|
||||
"message": "Rensa tider"
|
||||
},
|
||||
"submitTimesButton": {
|
||||
"message": "Rapportera Tider"
|
||||
"message": "Skicka tider"
|
||||
},
|
||||
"publicStats": {
|
||||
"message": "Detta kommer att användas på den publika statistiksidan för att visa hur mycket du har bidragit. Spana in den"
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Ange användarnamn"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Kopiera publikt Användar-ID"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Gå med i den officiella discordservern för att ge förslag och feedback!"
|
||||
},
|
||||
@@ -168,13 +174,16 @@
|
||||
"message": "Alternativ"
|
||||
},
|
||||
"showButtons": {
|
||||
"message": "Visa Knappar På YouTube-spelaren"
|
||||
"message": "Visa knappar på YouTube-spelaren"
|
||||
},
|
||||
"hideButtons": {
|
||||
"message": "Dölj Knappar På YouTube-spelaren"
|
||||
},
|
||||
"hideButtonsDescription": {
|
||||
"message": "Detta döljer knapparna på YouTube-spelaren som du kan rapportera sponsormeddelanden med. Jag förstår att det kan se störande ut för en del. Istället för att ha knappen där kan den här popup-rutan användas för att rapportera sponsormeddelanden. För att dölja notisen som dyker upp, tryck på knappen som syns på notisen som säger \"Visa inte det här igen\". Du kan alltid slå på dessa inställningar igen senare."
|
||||
"message": "Detta döljer knapparna på YouTube-spelaren som du kan skicka in segment med som ska hoppas över."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Behåll knappen hoppa till markerat på spelaren"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Visa Infoknapp På YouTube-spelaren"
|
||||
@@ -182,23 +191,20 @@
|
||||
"hideInfoButton": {
|
||||
"message": "Dölj Infoknapp På YouTube-spelaren"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Detta är knappen som öppnar popup-rutan på YouTube-sidan."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Dölj informationsknappen automatiskt"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Dölj \"Ta Bort\"-knappen På YouTube-spelaren"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "Visa \"Ta Bort\"-knappen På YouTube-spelaren"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Denna knappen tar bort alla sponsormeddelanden på YouTube-spelaren."
|
||||
"message": "Visa knappen ta bort på YouTube-spelaren"
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Aktivera spåra antalet hoppa över"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "Den här funktionen spårar vilka segment du har hoppat över för att låta användarna veta hur mycket tid en användare har sparat andra och tillsammans med användarnas röster säkerställa att spam inte kommer in i databasen. Detta tillägg skickar ett meddelande till servern varje gång du hoppar över ett segment. Förhoppningsvis ändrar inte folk den här inställningen så statistiken hålls tillförlitlig. :)"
|
||||
"message": "Den här funktionen spårar vilka segment du har hoppat över för att låta användarna veta hur mycket tid en användare har sparat andra och tillsammans med användarnas röster säkerställa att spam inte kommer in i databasen. Detta tillägg skickar ett meddelande till servern varje gång du hoppar över ett segment. Förhoppningsvis ändrar de flesta inte den här inställningen så statistiken hålls tillförlitlig. :)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "Aktivera spåra antalet hoppa över i privata/inkognitoflikar"
|
||||
@@ -213,11 +219,29 @@
|
||||
"message": "Uppdatera segment på nya videor"
|
||||
},
|
||||
"whatRefetchWhenNotFound": {
|
||||
"message": "Om videon är ny och inga segment hittades då kommer den att uppdatera med några minuter mellanrum medan du tittar på videon."
|
||||
"message": "Om videon är ny och inga segment hittades då kommer den att uppdateras med några minuters mellanrum medan du tittar på videon."
|
||||
},
|
||||
"showNotice": {
|
||||
"message": "Visa Notisen Igen"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Visa ett meddelande efter att ett segment har hoppats över"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Hoppa över-meddelanden i fullstorlek"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Små meddelanden för automatisk hoppa över"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Alla hoppa över-meddelanden är små"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Meddelanden som tonar bort för automatisk hoppa över"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Alla hoppa över-meddelanden tonas bort"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock låter dig hoppa över sponsormeddelanden, introduktioner, eftertexter, prenumerationspåminnelser och andra irriterande delar av YouTube-videor. SponsorBlock är ett crowdsourced webbläsartillägg som låter vem som helst att skicka in start- och sluttid på sponsorsegment och andra segment av YouTube-videor. När en person skickar in denna information kommer alla andra som har detta tillägg installerat att hoppa över det sponsrade segmentet. Du kan även hoppa över icke-musikavsnitt i musikvideor.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -245,7 +269,7 @@
|
||||
"message": "Ange den genväg som ska fungera som start-/stopptangent för ett segment"
|
||||
},
|
||||
"setSubmitKeybind": {
|
||||
"message": "Välj knapp att koppla till rapportering av sponsormeddelande"
|
||||
"message": "Ange den tangent som ska fungera som inskickningstangent"
|
||||
},
|
||||
"keybindDescription": {
|
||||
"message": "Ange tangent genom att trycka på den"
|
||||
@@ -263,7 +287,7 @@
|
||||
"message": "Hoppa över är inaktiverat"
|
||||
},
|
||||
"yourWork": {
|
||||
"message": "Ditt Bidrag",
|
||||
"message": "Ditt bidrag",
|
||||
"description": "Used to describe the section that will show you the statistics from your submissions."
|
||||
},
|
||||
"502": {
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Hoppa över"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Ljudlös"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Hoppa över {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Gör {0} ljudlös?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Hoppa till {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Skippat"
|
||||
"message": "{0} överhoppad",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} ljudlös",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Hoppat till {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Inaktivera hoppa över automatiskt"
|
||||
@@ -288,7 +331,7 @@
|
||||
"message": "Aktivera Hoppa Över Automatiskt"
|
||||
},
|
||||
"audioNotification": {
|
||||
"message": "Ljudeffekt vid hopp"
|
||||
"message": "Ljudavisering vid hoppa över"
|
||||
},
|
||||
"audioNotificationDescription": {
|
||||
"message": "Ljudavisering vid hoppa över kommer att spela upp ett ljud när ett segment hoppas över. Om inaktiverad (eller om hoppa över automatiskt är inaktiverat), kommer inget ljud att spelas upp."
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Importera/Exportera Ditt AnvändarID"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Detta bör hållas hemligt. Det fungerar som ett lösenord och borde inte delas vidare med någon. Om någon kommer över detta kan den personen utge sig för att vara dig."
|
||||
"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ändarID"
|
||||
@@ -341,12 +384,6 @@
|
||||
"createdBy": {
|
||||
"message": "Skapad av"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Hoppa Över Automatiskt"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Visa ett meddelande efter att ett segment har hoppats över"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Nuvarande snabbtangent är:"
|
||||
},
|
||||
@@ -354,14 +391,14 @@
|
||||
"message": "Stöd för tredjeparts YouTube-webbplatser"
|
||||
},
|
||||
"supportOtherSitesDescription": {
|
||||
"message": "Stöd tredje parts 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 support måste du acceptera de extra behörigheterna. Detta fungerar INTE i inkognito på Chrome och andra Chromium-varianter.",
|
||||
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
|
||||
},
|
||||
"supportedSites": {
|
||||
"message": "Webbplatser som stöds: "
|
||||
},
|
||||
"optionsInfo": {
|
||||
"message": "Aktivera Invidious stöd, inaktivera hoppa över automatiskt, dölj knappar och mer."
|
||||
"message": "Aktivera stöd för Invidious, inaktivera hoppa över automatiskt, dölj knappar och mer."
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"message": "Lägg till tredjepartsklientinstans"
|
||||
@@ -373,7 +410,7 @@
|
||||
"message": "Lägg till"
|
||||
},
|
||||
"addInvidiousInstanceError": {
|
||||
"message": "Detta är en individuell domän. Den måste ENBART inkludera domändelen. Exempelvis: invidious.ajay.app"
|
||||
"message": "Detta är en ogiltig domän. Den ska ENDAST inkludera domändelen. Exempelvis: invidious.ajay.app"
|
||||
},
|
||||
"resetInvidiousInstance": {
|
||||
"message": "Rensa Invidious instanslista"
|
||||
@@ -390,20 +427,23 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Segment som är kortare än det angivna värdet kommer inte att hoppas över eller visas i spelaren."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Hoppa över varaktighet (sekunder):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Meddelandet om att hoppa över kommer att visas på skärmen åtminstone så här länge. För manuell överhoppning kan det visas längre."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Följande rapport är kortare än ditt minstavärde i inställningarna. Det skulle kunna betyda att det redan är rapporterat och bara ignorerat på grund av denna inställning. Är du säker på att du vill rapportera?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Visa Uppladdningsknapp"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Denna knapp visas på YouTube-spelaren efter att du har valt en tidpunkt och är redo att rapportera."
|
||||
"message": "Visa uppladdningsknapp"
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock Serveradress"
|
||||
"message": "Serveradress för SponsorBlock"
|
||||
},
|
||||
"customServerAddressDescription": {
|
||||
"message": "Adressen SponsorBlock använder för att prata med servern.\nOm du inte har din egen serverinstans ska den här inställningen inte ändras."
|
||||
"message": "Adressen SponsorBlock använder för att kommunicera med servern.\nOm du inte har din egen serverinstans ska den här inställningen inte ändras."
|
||||
},
|
||||
"save": {
|
||||
"message": "Spara"
|
||||
@@ -424,7 +464,7 @@
|
||||
"message": "Importera/Exportera alla alternativen"
|
||||
},
|
||||
"whatExportOptions": {
|
||||
"message": "Detta är alla dina alternativ i JSON-format. Det inkluderar ditt användar-ID, så var noga med hur du hanterar datan."
|
||||
"message": "Detta är alla dina alternativ i JSON-format. Det inkluderar ditt användar-ID, så var noga med hur du hanterar informationen."
|
||||
},
|
||||
"setOptions": {
|
||||
"message": "Ange alternativ"
|
||||
@@ -523,6 +563,15 @@
|
||||
"category_preview_description": {
|
||||
"message": "Snabb sammanfattning av tidigare avsnitt eller en förhandsvisning av vad som kommer upp senare i den aktuella videon. Avsett för redigerade klipp, inte för sammanfattningar."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Ämnesavvikelse"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Utfyllnad"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Musik: Icke-musikavsnitt"
|
||||
},
|
||||
@@ -532,20 +581,44 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Icke-musik"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Markera"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Den del av videon som de flesta letar efter. Liknande kommentarer \"Video börjar på x\"."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Liveström: Donations-/meddelandeavläsningar"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Meddelandeläsning"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Hoppa över automatiskt"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Hoppa över manuellt"
|
||||
},
|
||||
"showOverlay": {
|
||||
"message": "Visa i sökfältet"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Inaktivera"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Hoppa Över Manuellt"
|
||||
"autoSkip_POI": {
|
||||
"message": "Hoppa automatiskt till start"
|
||||
},
|
||||
"showOverlay": {
|
||||
"message": "Visa Lager Ovanpå Spelare"
|
||||
"manualSkip_POI": {
|
||||
"message": "Fråga när video laddas"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Visa i sökfältet"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Hoppa över alla segment automatiskt när det finns ett icke-musiksegment"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Tillåt segment som tystar ljudet i stället för att hoppa över"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Din färg är felaktigt formaterad. Det ska vara en 3- eller 6-siffrig hex-kod med en siffra i början."
|
||||
@@ -571,7 +644,7 @@
|
||||
"message": "Dina rapporter och röster KOMMER INTE RÄKNAS mot huvudservern. Använd endast detta för testning."
|
||||
},
|
||||
"testingServerWarning": {
|
||||
"message": "Alla rapporter och röster KOMMER INTE RÄKNAS mot huvudservern så länge du är ansluten mot testservern. Se till att avaktivera detta när du vill rapportera ett riktigt sponsormeddelande."
|
||||
"message": "Alla inskickningar och röster KOMMER INTE ATT RÄKNAS mot huvudservern så länge du är ansluten mot testservern. Se till att inaktivera detta när du vill skicka in riktiga inskickningar."
|
||||
},
|
||||
"bracketNow": {
|
||||
"message": "(Nu)"
|
||||
@@ -586,6 +659,9 @@
|
||||
"message": "För att skicka segment med kategorin \"{0}\" måste du först aktivera det i alternativen. Du kommer nu att bli omdirigerad till alternativen.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Varning: Denna typ av segment kan endast ha ett segment aktivt åt gången. Skickas flera segment kommer en av dem att visas slumpmässigt."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Du måste välja en kategori för alla segment du skickar in!"
|
||||
},
|
||||
@@ -624,16 +700,16 @@
|
||||
"message": "Tvinga kontroll av kanalen innan hoppa över"
|
||||
},
|
||||
"whatForceChannelCheck": {
|
||||
"message": "Som standard kommer segment att hoppas över direkt innan ens den vet vad det är för kanal. Som standard kan vissa segment i början av videon hoppas över på vitlistade kanaler. Aktiverar du detta alternativet kommer du att förhindra detta, men det göra att alla överhoppningar har en liten fördröjning eftersom det tar lite tid att få kanal-ID. Denna fördröjning kan vara obetydlig om du har en snabb internetuppkoppling."
|
||||
"message": "Som standard kommer segment att hoppas över direkt innan ens den vet vad det är för kanal. Som standard kan vissa segment i början av videon hoppas över på vitlistade kanaler. Aktiverar du detta alternativet kommer du att förhindra detta, men det gör att alla överhoppningar har en liten fördröjning eftersom det tar lite tid att få kanal-ID. Denna fördröjning kan vara obetydlig om du har en snabb internetuppkoppling."
|
||||
},
|
||||
"forceChannelCheckPopup": {
|
||||
"message": "Överväg att aktivera \"Tvinga kontroll av kanalen innan hoppa över\""
|
||||
},
|
||||
"downvoteDescription": {
|
||||
"message": "Fel timing"
|
||||
"message": "Fel/Fel tidsintervall"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Fel kategori"
|
||||
"message": "Ändra kategori"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Den här videon kategoriseras som musik. Är du säker på att denna har en sponsor? Om detta faktiskt är ett \"icke-musiksegment\", öppna tilläggsalternativen och aktivera denna kategori. Då kan du skicka in detta segment som \"icke-musik\" i stället för sponsor. Läs riktlinjerna om något är oklart."
|
||||
@@ -652,13 +728,14 @@
|
||||
"message": "Kategorier finns här!"
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Öppna alternativen för att hoppa över intros, outros, merch, osv."
|
||||
"message": "Öppna alternativen för att hoppa över intros, outros, varor, osv."
|
||||
},
|
||||
"experimentUnlistedTitle": {
|
||||
"message": "Hjälp till att förhindra att detta försvinner"
|
||||
"help": {
|
||||
"message": "Hjälp"
|
||||
},
|
||||
"experimentUnlistedText": {
|
||||
"message": "Detta är en olistad videon som laddades upp före 2017.\nGamla olistade videor kommer att bli ändrade till privata nästa månad.\nVi samlar in *offentliga* videor för att säkerhetskopiera.\nVill du anonymt skicka den här videon till oss?\nhttps://support.google.com/youtube/answer/9230970"
|
||||
"GotIt": {
|
||||
"message": "Jag förstår",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Hoppa av alla framtida experiment",
|
||||
@@ -666,5 +743,107 @@
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "Dölj för alltid"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Du har fått en tillfällig varning och kan inte längre skicka in segment. Vi har upptäckt att du har gjort några vanliga misstag som inte är uppsåtliga. Bekräfta därför att du förstår reglerna, så tar vi bort varningen. Du kan också gå med i den här chatten genom att använda discord.gg/SponsorBlock eller matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Rösten avvisades på grund av en varning. Klicka för att öppna ett chattfönster för att lösa problemet eller kom tillbaka senare när du har tid.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Donera"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Dölj donationslänk"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Tack för att du installerade SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Granska alternativen nedan"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Många funktioner är inaktiverade som standard. Om du vill hoppa över intros, outros, använda Invidious, etc, aktivera dem nedan. Du kan också dölja/visa UI-element."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Hur hoppa över fungerar"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "Videosegment hoppas över automatiskt om de finns i databasen. Du kan öppna popup-fönstret genom att klicka på tilläggsikonen för att få en förhandsvisning av vad de är."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "När du hoppar över ett segment får du ett meddelande. Om tidpunkten verkar felaktig rösta då ner genom att klicka på nerröstning! Du kan också rösta i popup-fönstret."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Skickar in"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "Skicka in kan antingen göras i popup-fönstret genom att trycka på knappen \"Segmentet startar nu\" eller i videospelaren med knapparna på spelaren."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Genom att klicka på uppspelningsknappen anges början på ett segment och genom att klicka på stopp-ikonen anges slutet. Du kan förbereda flera sponsorer innan du trycker på skicka. Klicka på uppladdningsknappen för att skicka in. Klicka på papperskorgen för att ta bort."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Redigerar"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Om du gör fel kan du redigera eller ta bort dina segment efter att du klickat på uppåtpilen."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Detta är för långsamt"
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Det finns snabbtangenter om du vill använda dem. Tryck på semikolontangenten för att ange start/slut på ett sponsorsegment och klicka på apostrofen för att skicka in. Dessa kan ändras i inställningarna. Om du inte använder QWERTY, bör du förmodligen ändra tangentbindningen."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Kan jag få en kopia av databasen? Vad händer om du försvinner?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Databasen är offentlig och finns på"
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "Källkoden är fritt tillgänglig. Så, även om något händer mig, är dina inskickningar inte förlorade."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Nyheter och hur är det gjort"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Var kan jag få tag på källkoden?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Medverkande"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Läs mer"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Rösta ner och skapar en lokal kopia för dig att skicka igen"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Öppna denna kategoris wiki-sida."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Kopiera och rösta ner"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Fortsätt rösta"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Detta kommer omedelbart att verkställas till dina segment"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Nytt! Hoppa över ämnesavvikelser och skämt med utfyllnadskategorin. Aktiveras i alternativen"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "d",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "h",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "ரெஸ்கிப்"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "ஒலியடக்கு"
|
||||
},
|
||||
"paused": {
|
||||
"message": "இடைநிறுத்தப்பட்டது"
|
||||
},
|
||||
@@ -79,9 +82,15 @@
|
||||
"sponsorEnd": {
|
||||
"message": "பிரிவு இப்போது முடிகிறது"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "உருவாக்கும் பகுதியை ரத்து செய்"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "YouTube வீடியோ எதுவும் கிடைக்கவில்லை.\nஇது தவறாக இருந்தால், தாவலைப் புதுப்பிக்கவும்."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "பிரிவுகளைப் புதுப்பிக்கவும்"
|
||||
},
|
||||
"success": {
|
||||
"message": "வெற்றி!"
|
||||
},
|
||||
@@ -94,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "இணைப்பு பிழை ஏற்பட்டது. பிழை குறியீடு: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "வீடியோ ஐடிக்கு நீங்கள் சமர்ப்பிக்க விரும்புகிறீர்களா"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "பிரிவுகளை அழிக்கவும்"
|
||||
},
|
||||
@@ -155,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "பயனர்பெயரை அமைக்கவும்"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "பொது பயனர் IDயை நகலெடுக்கவும்"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "பரிந்துரைகள் மற்றும் கருத்துக்களை வழங்க அதிகாரப்பூர்வ டிஸ்கார்ட் சேவையகத்தில் சேர வாருங்கள்!"
|
||||
},
|
||||
@@ -173,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "ஸ்கிப் பிரிவுகளைச் சமர்ப்பிக்க YouTube பிளேயரில் தோன்றும் பொத்தான்களை இது மறைக்கிறது."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "பிளேயரில் Skip To Highlight பொத்தானை வைக்கவும்"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "YouTube பிளேயரில் தகவல் பொத்தானைக் காட்டு"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "YouTube பிளேயரில் தகவல் பொத்தானை மறைக்கவும்"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "YouTube பக்கத்தில் ஒரு பாப்அப்பைத் திறக்கும் பொத்தான் இது."
|
||||
"autoHideInfoButton": {
|
||||
"message": "தகவல் பொத்தானை தானாக மறைக்கவும்"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "YouTube பிளேயரில் நீக்கு பொத்தானை மறைக்க"
|
||||
@@ -188,15 +200,15 @@
|
||||
"showDeleteButton": {
|
||||
"message": "YouTube பிளேயரில் நீக்கு பொத்தானைக் காட்டு"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "இது YouTube பிளேயரில் உள்ள பொத்தானாகும், இது தற்போதைய வீடியோவிற்கு நீங்கள் சமர்ப்பிக்காத அனைத்து பகுதிகளையும் அழிக்கும்."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "ஸ்கிப் கவுண்ட் டிராக்கிங்கை இயக்கு"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "இந்த அம்சம் பயனர்கள் தங்கள் சமர்ப்பிப்பு மற்றவர்களுக்கு எவ்வளவு உதவியது மற்றும் ஸ்பேம் தரவுத்தளத்தில் வரவில்லை என்பதை உறுதிப்படுத்த அப்வோட்களுடன் ஒரு மெட்ரிக்காகப் பயன்படுத்தப்படுவதை பயனர்களுக்குத் தெரியப்படுத்த நீங்கள் எந்த பகுதிகளைத் தவிர்த்துவிட்டீர்கள் என்பதைக் கண்காணிக்கிறது. ஒவ்வொரு முறையும் நீங்கள் ஒரு பகுதியைத் தவிர்க்கும்போது நீட்டிப்பு சேவையகத்திற்கு ஒரு செய்தியை அனுப்புகிறது. பார்வை எண்கள் துல்லியமாக இருக்க பெரும்பாலான மக்கள் இந்த அமைப்பை மாற்ற மாட்டார்கள் என்று நம்புகிறோம். :)"
|
||||
},
|
||||
"enableViewTrackingInPrivate": {
|
||||
"message": "தனிப்பட்ட/மறைநிலை தாவல்களில் ஸ்கிப் கவுண்ட் டிராக்கிங்கை இயக்கவும்"
|
||||
},
|
||||
"enableQueryByHashPrefix": {
|
||||
"message": "ஹாஷ் முன்னொட்டு மூலம் வினவல்"
|
||||
},
|
||||
@@ -212,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "அறிவிப்பை மீண்டும் காட்டு"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "ஒரு பிரிவு தவிர்க்கப்பட்ட பிறகு அறிவிப்பைக் காட்டு"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "முழு அளவு தவிர்க்கும் அறிவிப்புகள்"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "ஆட்டோ ஸ்கிப்பிற்கான சிறிய ஸ்கிப் அறிவிப்புகள்"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "அனைத்து சிறிய தவிர்க்கும் அறிவிப்புகள்"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "ஆட்டோ ஸ்கிப்பிற்கான மங்கலான தவிர்க்கும் அறிவிப்புகள்"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "அனைத்து மங்கலான தவிர்க்கும் அறிவிப்புகள்"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "ஸ்பான்சர்கள், அறிமுகங்கள், அவுட்ரோஸ், சந்தா நினைவூட்டல்கள் மற்றும் YouTube வீடியோக்களின் பிற எரிச்சலூட்டும் பகுதிகளைத் தவிர்க்க ஸ்பான்சர் பிளாக் உங்களை அனுமதிக்கிறது. ஸ்பான்சர் பிளாக் என்பது ஒரு கூட்ட நெரிசலான உலாவி நீட்டிப்பாகும், இது ஸ்பான்சர் செய்யப்பட்ட பிரிவுகளின் தொடக்க மற்றும் இறுதி நேரங்களையும் YouTube வீடியோக்களின் பிற பிரிவுகளையும் எவரும் சமர்ப்பிக்கலாம். ஒரு நபர் இந்த தகவலைச் சமர்ப்பித்தவுடன், இந்த நீட்டிப்பு உள்ள மற்றவர்கள் ஸ்பான்சர் செய்யப்பட்ட பிரிவைத் தவிர்த்து விடுவார்கள். இசை வீடியோக்களின் இசை அல்லாத பிரிவுகளையும் நீங்கள் தவிர்க்கலாம்.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -235,6 +265,9 @@
|
||||
"setSkipShortcut": {
|
||||
"message": "ஒரு பகுதியைத் தவிர்ப்பதற்கான விசையை அமைக்கவும்"
|
||||
},
|
||||
"setStartSponsorShortcut": {
|
||||
"message": "துவக்க/நிறுத்த பிரிவு விசைப்பலகைக்கு விசையை அமைக்கவும்"
|
||||
},
|
||||
"setSubmitKeybind": {
|
||||
"message": "சமர்ப்பிக்கும் விசைப்பலகைக்கு விசையை அமைக்கவும்"
|
||||
},
|
||||
@@ -266,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "தவிர்"
|
||||
},
|
||||
"mute": {
|
||||
"message": "ஒலியடக்கு"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "{0} ஐ தவிர்?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "{0} ஐ ஒலியடக்கவா?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "{0} க்குச் செல்லவா?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "தவிர்க்கப்பட்டது"
|
||||
"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": "ஆட்டோ ஸ்கிப்பை முடக்கு"
|
||||
@@ -321,7 +373,7 @@
|
||||
"message": "உங்கள் பயனர் ஐடியை இறக்குமதி / ஏற்றுமதி செய்யுங்கள்"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "இதை தனிப்பட்ட முறையில் வைத்திருக்க வேண்டும். இது கடவுச்சொல் போன்றது மற்றும் யாருடனும் பகிரக்கூடாது. யாராவது இதை வைத்திருந்தால், அவர்கள் உங்களைப் போல ஆள்மாறாட்டம் செய்யலாம்."
|
||||
"message": "இதை தனிப்பட்டதாக வைத்திருக்க வேண்டும். இது கடவுச்சொல் போன்றது, அதை யாருடனும் பகிரக்கூடாது. யாரிடமாவது இது இருந்தால், அவர் உங்களைப் போல் ஆள்மாறாட்டம் செய்யலாம். உங்கள் பொது பயனர் IDயை நீங்கள் தேடுகிறீர்களானால், பாப்அப்பில் உள்ள கிளிப்போர்டு ஐகானைக் கிளிக் செய்யவும்."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "UserID ஐ அமைக்கவும்"
|
||||
@@ -332,18 +384,28 @@
|
||||
"createdBy": {
|
||||
"message": "உருவாக்கியது"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "ஆட்டோ ஸ்கிப்"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "ஒரு பிரிவு தவிர்க்கப்பட்ட பிறகு அறிவிப்பைக் காட்டு"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". இது தற்போது அமைக்கப்பட்டுள்ளது:"
|
||||
},
|
||||
"supportOtherSites": {
|
||||
"message": "3 வது தரப்பு YouTube-தளங்களை ஆதரிக்கவும்"
|
||||
},
|
||||
"supportOtherSitesDescription": {
|
||||
"message": "மூன்றாம் தரப்பு YouTube தளங்களை ஆதரிக்கவும். ஆதரவை இயக்க, நீங்கள் கூடுதல் அனுமதிகளை ஏற்க வேண்டும். இது Chrome மற்றும் பிற Chromium வகைகளில் தனிப்பட்ட தாவல்களில் வேலை செய்யாது.",
|
||||
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
|
||||
},
|
||||
"supportedSites": {
|
||||
"message": "ஆதரிக்கப்படும் தளங்கள்: "
|
||||
},
|
||||
"optionsInfo": {
|
||||
"message": "ஆக்கிரமிப்பு ஆதரவை இயக்கு, ஆட்டோஸ்கிப்பை முடக்கு, பொத்தான்களை மறை மற்றும் பலவற்றை."
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"message": "3 வது தரப்பு தளங்களை சேர்க்கவும்"
|
||||
},
|
||||
"addInvidiousInstanceDescription": {
|
||||
"message": "தனிப்பட்ட தளங்களை சேர்க்கவும். இது Domain வடிவமைப்பில் இருக்க வேண்டும். உதாரணம்: invidious.ajay.app"
|
||||
},
|
||||
"add": {
|
||||
"message": "சேர்"
|
||||
},
|
||||
@@ -365,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "தொகுப்பு மதிப்பை விடக் குறைவான பகுதிகள் தவிர்க்கப்படாது அல்லது பிளேயரில் காண்பிக்கப்படாது."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "அறிவிப்பு காலத்தை தவிர்க்கவும் (வினாடிகள்):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "தவிர்க்கும் அறிவிப்பு குறைந்தபட்சம் இவ்வளவு நேரம் திரையில் இருக்கும். மேனுவல் ஸ்கிப்பிங்கிற்கு, இது நீண்ட நேரம் தெரியும்."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "பின்வரும் சமர்ப்பிப்பு உங்கள் குறைந்தபட்ச கால விருப்பத்தை விட குறைவாக உள்ளது. இது ஏற்கனவே சமர்ப்பிக்கப்பட்டுள்ளது என்பதையும், இந்த விருப்பத்தின் காரணமாக புறக்கணிக்கப்படுவதையும் இது குறிக்கலாம். நீங்கள் சமர்ப்பிக்க விரும்புகிறீர்களா?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "பதிவேற்ற பொத்தானைக் காட்டு"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "நீங்கள் நேர முத்திரையைத் தேர்ந்தெடுத்து சமர்ப்பிக்கத் தயாரான பிறகு இந்த பொத்தான் YouTube பிளேயரில் தோன்றும்."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "ஸ்பான்சர் பிளாக் சேவையக முகவரி"
|
||||
},
|
||||
@@ -425,6 +490,9 @@
|
||||
"preview": {
|
||||
"message": "முன்னோட்ட"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "சமர்ப்பிக்கப்படவில்லை"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "ஆய்வு செய்யுங்கள்"
|
||||
},
|
||||
@@ -489,6 +557,12 @@
|
||||
"category_outro_description": {
|
||||
"message": "வரவுகளை அல்லது YouTube எண்ட்கார்டுகள் தோன்றும் போது. தகவலுடன் முடிவுகளுக்கு அல்ல."
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "முன்னோட்டம்/மறுபரிசீலனை"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "முந்தைய எபிசோடுகளின் விரைவான மறுபரிசீலனை அல்லது தற்போதைய வீடியோவில் பின்னர் என்ன வரப்போகிறது என்பதற்கான முன்னோட்டம். ஒன்றாக தொகுக்கப்பட்ட கிளிப்புகள், பேசப்பட்ட சுருக்கங்களுக்கு அல்ல."
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "இசை: இசை அல்லாத பிரிவு"
|
||||
},
|
||||
@@ -498,14 +572,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "இசை அல்லாதது"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "முன்னிலைப்படுத்த"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "பெரும்பாலான மக்கள் தேடும் வீடியோவின் பகுதி. \"வீடியோ x இல் தொடங்குகிறது\" போன்றது."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "லைவ்ஸ்ட்ரீம்: நன்கொடை / செய்தி அளவீடுகள்"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "செய்தி வாசிப்பு"
|
||||
},
|
||||
"disable": {
|
||||
"message": "முடக்கு"
|
||||
"autoSkip": {
|
||||
"message": "ஆட்டோ ஸ்கிப்"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "கையேடு தவிர்"
|
||||
@@ -513,6 +593,9 @@
|
||||
"showOverlay": {
|
||||
"message": "சீக் பட்டியில் காட்டு"
|
||||
},
|
||||
"disable": {
|
||||
"message": "முடக்கு"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "உங்கள் நிறம் தவறாக வடிவமைக்கப்பட்டுள்ளது. இது ஆரம்பத்தில் எண் அடையாளத்துடன் 3 அல்லது 6 இலக்க ஹெக்ஸ் குறியீடாக இருக்க வேண்டும்."
|
||||
},
|
||||
@@ -572,9 +655,6 @@
|
||||
"downvoteDescription": {
|
||||
"message": "தவறான / தவறான நேரம்"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "தவறான வகை"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "இந்த வீடியோ இசை என வகைப்படுத்தப்பட்டுள்ளது. இதற்கு ஒரு ஸ்பான்சர் இருப்பதை நீங்கள் உறுதியாக நம்புகிறீர்களா? இது உண்மையில் \"இசை அல்லாத பிரிவு\" என்றால், நீட்டிப்பு விருப்பங்களைத் திறந்து இந்த வகையை இயக்கவும். பின்னர், நீங்கள் இந்த பகுதியை ஸ்பான்சருக்கு பதிலாக \"இசை அல்லாதது\" என்று சமர்ப்பிக்கலாம். நீங்கள் குழப்பமாக இருந்தால் வழிகாட்டுதல்களைப் படிக்கவும்."
|
||||
},
|
||||
|
||||
@@ -94,9 +94,6 @@
|
||||
"connectionError": {
|
||||
"message": "కనెక్షన్ లోపం సంభవించింది. లోపం కోడ్: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "మీరు వీడియో ఐడి కోసం సమర్పించాలనుకుంటున్నారా"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "విభాగాలను క్లియర్ చేయండి"
|
||||
},
|
||||
@@ -179,18 +176,12 @@
|
||||
"hideInfoButton": {
|
||||
"message": "YouTube ప్లేయర్లో సమాచారం బటన్ను దాచండి"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "ఇది YouTube పేజీలో పాపప్ను తెరిచే బటన్."
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "YouTube ప్లేయర్లో తొలగించు బటన్ను దాచండి"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "YouTube ప్లేయర్లో తొలగించు బటన్ను చూపించు"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "ఇది YouTube ప్లేయర్లోని బటన్, ఇది ప్రస్తుత వీడియో కోసం మీరు సమర్పించని అన్ని విభాగాలను క్లియర్ చేస్తుంది."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "స్కిప్ కౌంట్ ట్రాకింగ్ను ప్రారంభించండి"
|
||||
},
|
||||
@@ -212,6 +203,9 @@
|
||||
"showNotice": {
|
||||
"message": "మళ్ళీ నోటీసు చూపించు"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "ఒక విభాగం దాటవేయబడిన తర్వాత నోటీసు చూపించు"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "స్పాన్సర్లు, పరిచయాలు, ros ట్రోలు, చందా రిమైండర్లు మరియు YouTube వీడియోల యొక్క ఇతర బాధించే భాగాలను దాటవేయడానికి స్పాన్సర్బ్లాక్ మిమ్మల్ని అనుమతిస్తుంది. స్పాన్సర్బ్లాక్ అనేది క్రౌడ్ సోర్స్డ్ బ్రౌజర్ పొడిగింపు, ఇది ఎవరైనా స్పాన్సర్ చేసిన విభాగాలు మరియు యూట్యూబ్ వీడియోల యొక్క ప్రారంభ మరియు ముగింపు సమయాన్ని సమర్పించనివ్వండి. ఒక వ్యక్తి ఈ సమాచారాన్ని సమర్పించిన తర్వాత, ఈ పొడిగింపు ఉన్న ప్రతి ఒక్కరూ ప్రాయోజిత విభాగంలో దాటవేస్తారు. మీరు మ్యూజిక్ వీడియోల యొక్క నాన్-మ్యూజిక్ విభాగాలను కూడా దాటవేయవచ్చు.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -269,9 +263,6 @@
|
||||
"skip_category": {
|
||||
"message": "{0} ని దాటవేయాలా?"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "దాటవేయబడింది"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "ఆటో దాటవేయిని ఆపివేయి"
|
||||
},
|
||||
@@ -320,9 +311,6 @@
|
||||
"changeUserID": {
|
||||
"message": "మీ యూజర్ఐడిని దిగుమతి / ఎగుమతి చేయండి"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "దీన్ని ప్రైవేట్గా ఉంచాలి. ఇది పాస్వర్డ్ లాంటిది మరియు ఎవరితోనూ భాగస్వామ్యం చేయకూడదు. ఎవరైనా దీన్ని కలిగి ఉంటే, వారు మిమ్మల్ని వంచించగలరు."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "UserID ని సెట్ చేయండి"
|
||||
},
|
||||
@@ -332,12 +320,6 @@
|
||||
"createdBy": {
|
||||
"message": "సృష్టికర్త"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "ఆటో దాటవేయి"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "ఒక విభాగం దాటవేయబడిన తర్వాత నోటీసు చూపించు"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". ఇది ప్రస్తుతం దీనికి సెట్ చేయబడింది:"
|
||||
},
|
||||
@@ -371,9 +353,6 @@
|
||||
"showUploadButton": {
|
||||
"message": "అప్లోడ్ బటన్ చూపించు"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "మీరు టైమ్స్టాంప్ను ఎంచుకుని సమర్పించడానికి సిద్ధంగా ఉన్న తర్వాత ఈ బటన్ YouTube ప్లేయర్లో కనిపిస్తుంది."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "స్పాన్సర్బ్లాక్ సర్వర్ చిరునామా"
|
||||
},
|
||||
@@ -504,8 +483,8 @@
|
||||
"category_livestream_messages_short": {
|
||||
"message": "సందేశ పఠనం"
|
||||
},
|
||||
"disable": {
|
||||
"message": "డిసేబుల్"
|
||||
"autoSkip": {
|
||||
"message": "ఆటో దాటవేయి"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "మాన్యువల్ దాటవేయి"
|
||||
@@ -513,6 +492,9 @@
|
||||
"showOverlay": {
|
||||
"message": "సీక్ బార్లో చూపించు"
|
||||
},
|
||||
"disable": {
|
||||
"message": "డిసేబుల్"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "మీ రంగు తప్పుగా ఆకృతీకరించబడింది. ఇది ప్రారంభంలో సంఖ్య గుర్తుతో 3 లేదా 6 అంకెల హెక్స్ కోడ్ అయి ఉండాలి."
|
||||
},
|
||||
@@ -572,9 +554,6 @@
|
||||
"downvoteDescription": {
|
||||
"message": "తప్పు / తప్పు సమయం"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "తప్పు వర్గం"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "ఈ వీడియోను సంగీతంగా వర్గీకరించారు. దీనికి స్పాన్సర్ ఉందని మీరు ఖచ్చితంగా అనుకుంటున్నారా? ఇది వాస్తవానికి \"నాన్-మ్యూజిక్ సెగ్మెంట్\" అయితే, పొడిగింపు ఎంపికలను తెరిచి ఈ వర్గాన్ని ప్రారంభించండి. అప్పుడు, మీరు ఈ విభాగాన్ని స్పాన్సర్కు బదులుగా \"నాన్-మ్యూజిక్\" గా సమర్పించవచ్చు. మీరు గందరగోళంలో ఉంటే దయచేసి మార్గదర్శకాలను చదవండి."
|
||||
},
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Tekrar atla"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Sesi Aç"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Duraklatıldı"
|
||||
},
|
||||
@@ -68,10 +71,10 @@
|
||||
"message": "Sponsor sürelerini yollarken bir sorun oluştur, lütfen tekrar deneyin."
|
||||
},
|
||||
"sponsorFound": {
|
||||
"message": "Bu video için veritabanımızda kısımlar mevcut!"
|
||||
"message": "Bu videonun kısımları veri tabanımızda mevut"
|
||||
},
|
||||
"sponsor404": {
|
||||
"message": "Kısımlar bulunamadı"
|
||||
"message": "Kısım bulunamadı"
|
||||
},
|
||||
"sponsorStart": {
|
||||
"message": "Kısım Şimdi Başlıyor"
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "YouTube videosu bulunamadı.\nHatalı olduğunu düşünüyorsanız sayfayı yenileyin."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Kısımları tazele"
|
||||
},
|
||||
"success": {
|
||||
"message": "Başarılı!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Bağlantı hatası oluştu. Hata kodu: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Bu video kimliği için göndermek istiyor musun"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Kısımları temizle"
|
||||
},
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Kullanıcı Adı Belirle"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Herkese Açık Kullanıcı Kimliğini Kopyala"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Öneri ve geri bildirimleriniz için resmi Discord serverımıza katılın!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Bu YouTube oynatıcısındaki bölüm geçişlerini yolladığınız butonları saklayacaktır."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "“Asıl Kısma Atla” Düğmesi Oynatıcıda Kalsın"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "YouTube Oynatıcısındaki Bilgi Butonunu Göster"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "YouTube Oynatıcısındaki Bilgi Butonunu Gizle"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Bu, YouTube sayfasında açılan pencereyi açan butondur."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Bilgi düğmesini otomatik gizle"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "YouTube Oynatıcısında Silme Tuşunu Gizle"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "YouTube Oynatıcısında Silme Tuşunu Göster"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Bu, YouTube oynatıcısındaki mevcut video için gönderilmemiş bölümleri temizleyen butondur."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Kısım Atlama Sayaç Takibine İzin Ver"
|
||||
},
|
||||
@@ -218,6 +224,18 @@
|
||||
"showNotice": {
|
||||
"message": "Uyarıyı Tekrar Göster"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Bir Kısmı Atladıktan Sonra Uyarı Göster"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Tam Boyutlu Atlama Bildirimleri"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Otomatik Atlama için Küçük Atlama Bildirimleri"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Tüm Küçük Atlama Bildirimleri"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock, sponsorları, giriş ve bitiş kısımlarını, abonelik hatırlatıcılarını ve YouTube videolarının diğer can sıkıcı kısımlarını atlamanıza olanak tanır. SponsorBlock, herkesin sponsorlu kısımları ve YouTube videolarının diğer kısımlarının başlangıç ve bitiş zamanlarını göndermesine izin veren kitle kaynaklı bir tarayıcı uzantısıdır. Bir kişi bu bilgiyi gönderdikten sonra, bu uzantıya sahip diğer herkes sponsorlu kısımları hemen atlayacaktır. Müzik videolarının müzik dışı bölümlerini de atlayabilirsiniz.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -275,11 +293,30 @@
|
||||
"skip": {
|
||||
"message": "Atla"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Sustur"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "{0} atla?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "{0} susturulsun mu?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "{0} kısmına atlansın mı?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Atlandı"
|
||||
"message": "{0} Atlandı",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} susturuldu",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "{0} kısmına atlandı",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Otomatik Atlamayı Devredışı Bırak"
|
||||
@@ -330,7 +367,7 @@
|
||||
"message": "Kullanıcı kimliğini Dışarı/İçeri Aktar"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Bu gizli tutulmalıdır. Bu bir şifreye benzer ve diğerleriyle paylaşılmaması gerekir. Birinin eline geçerse, sizi taklit edebilir."
|
||||
"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"
|
||||
@@ -341,18 +378,28 @@
|
||||
"createdBy": {
|
||||
"message": "Oluşturan"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Otomatik Atla"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Bir Kısmı Atladıktan Sonra Uyarı Göster"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Şu an buna ayarlı:"
|
||||
},
|
||||
"supportOtherSites": {
|
||||
"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.",
|
||||
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
|
||||
},
|
||||
"supportedSites": {
|
||||
"message": "Desteklenen Siteler: "
|
||||
},
|
||||
"optionsInfo": {
|
||||
"message": "Invidious desteğini, otomatik atlamayı, butonları saklamayı ve daha fazlasını etkinleştir."
|
||||
},
|
||||
"addInvidiousInstance": {
|
||||
"message": "3. Taraf İstemci Örneği Ekle"
|
||||
},
|
||||
"addInvidiousInstanceDescription": {
|
||||
"message": "Özel bir örnek ekle. Buraya sadece alan adı yazılmalıdır. Örnek: invidious.ajay.app"
|
||||
},
|
||||
"add": {
|
||||
"message": "Ekle"
|
||||
},
|
||||
@@ -374,15 +421,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Ayarlanan değerden daha kısa kısımlar atlanmayacak veya oynatıcıda gösterilmeyecektir."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Atlandı uyarısı süresi (saniye cinsinden):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Bir kısım atlandığında ekranda atlandı uyarısı bu süre kadar gösterilir. Atlama elle gerçekleştiğinde bu uyarı daha uzun sürebilir."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Sıradaki öneri belirlediğiniz minimum süre ayarından daha kısa. Bu zaten yollandığı ve bu ayardan dolayı yok sayıldığı anlamına gelebilir. Göndermek istediğinizden emin misiniz?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Karşıya Yükleme Butonunu Göster"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Bu buton, YouTube oynatıcısında bir zaman seçtiğiniz ve göndermeye hazır olduğunuzda gözükür."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock Sunucu Adresi"
|
||||
},
|
||||
@@ -434,6 +484,9 @@
|
||||
"preview": {
|
||||
"message": "Önizle"
|
||||
},
|
||||
"unsubmitted": {
|
||||
"message": "Gönderilmemiş"
|
||||
},
|
||||
"inspect": {
|
||||
"message": "Kontrol et"
|
||||
},
|
||||
@@ -498,6 +551,12 @@
|
||||
"category_outro_description": {
|
||||
"message": "Videoda emeği geçenlerin veya video sonunda çıkan kartların gösterildiği kısımlar. Bilgilendirici sona sahip videolar için değil."
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "Ön İzleme/Özet"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "Önceki bölümlerin bir özeti veya geçerli videonun içeriğine yönelik bir ön izleme. Bu özellik birleştirilmiş klipler içindir, konuşarak anlatılan özetleri kapsamaz."
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Müzik: Müzik Olmayan Bölüm"
|
||||
},
|
||||
@@ -507,14 +566,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Müzik Olmayan Bölüm"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Vurgu"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Videoda, çoğu insanın aradığı kısım. \"Video x sürede başlıyor\" yorumlarına benzer."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Canlı Yayın: Bağış/Mesaj Okuma"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Canlı Yayın Mesajlarını Okumak"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Devredışı"
|
||||
"autoSkip": {
|
||||
"message": "Otomatik Atla"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Elle Atla"
|
||||
@@ -522,9 +587,31 @@
|
||||
"showOverlay": {
|
||||
"message": "Arama Çubuğunda Göster"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Devredışı"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Başlangıca otomatik atla"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Videonun başında sor"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Arama Çubuğunda Göster"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Müzik olmayan kısım varsa tüm kısımları otomatik atla"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Atlamak yerine sesi kapatan bölümlere izin ver"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Renginiz yanlış biçimlendirilmiştir. Başında bir kare işareti bulunan 3 veya 6 basamaklı bir onaltılık kod olmalıdır."
|
||||
},
|
||||
"previewColor": {
|
||||
"message": "Gönderilmemiş Renk",
|
||||
"description": "Referring to submissions that have not been sent to the server yet."
|
||||
},
|
||||
"seekBarColor": {
|
||||
"message": "Oynatma Çubuğu Rengi"
|
||||
},
|
||||
@@ -557,6 +644,9 @@
|
||||
"message": "\"{0}\" kategorisinde bir kısım göndermek için onu ayarlardan açmalısınız. Ayarlara yönlendiriliyorsunuz.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Uyarı: Bu tür kısımlardan sadece bir adet etkin olabilir. Birden fazla gönderdiğinizde onlardan rastgele biri gösterilir."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Göndereceğin tüm kısımlar için bir kategori seçmelisin!"
|
||||
},
|
||||
@@ -603,9 +693,6 @@
|
||||
"downvoteDescription": {
|
||||
"message": "Hatalı/Yanlış Zaman"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Yanlış Kategori"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Bu video müzik olarak sınıflandırılmıştır. Bunun bir sponsor olduğundan emin misin? Bu aslında bir \"Müzik Dışı bölüm\" ise, uzantı seçeneklerini açın ve bu kategoriyi etkinleştirin. Ardından, bu kısmı sponsor yerine \"Müzik Olmayan\" olarak gönderebilirsiniz. Kafanız karıştıysa lütfen yönergeleri okuyun."
|
||||
},
|
||||
@@ -624,5 +711,77 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Girişleri, bitişleri, ürünleri ve benzeri şeyleri atlamak için ayarları açın."
|
||||
},
|
||||
"help": {
|
||||
"message": "Yardım"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Anladım",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "Asla gösterme"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Bir uyarı nedeniyle oy reddedildi. Çözüm bulmak için buraya tıklayarak bir sohbet açın veya daha sonra vaktiniz olduğunda uğrayın.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Bağış Yap"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Bağış Bağlantısını Gizle"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "SponsorBlock'u yüklediğiniz için teşekkürler."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Lütfen aşağıdaki seçenekleri inceleyin"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Birçok özellik varsayılan olarak devre dışıdır. İntroları, outroları atlamak vb. kullanmak istiyorsanız, bunları aşağıdan etkinleştirin. Ayrıca arayüz öğelerini gizleyebilir/gösterebilirsiniz."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Atlama nasıl çalışıyor"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "Video kısımları veri tabanında mevcut ise otomatikman atlanır. Eklentinin simgesine tıklayınca açılan pencereden, video için mevcut olan kısımları görebilirsiniz."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Bir kısmı atladığınızda size bildirim gönderilir. Eğer kısım hatalıysa bunu eksi oylayınız. Eklentinin penceresinde de oy verebilirsiniz."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Gönderme"
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Düzenleme"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Eğer kısımlarda hata yaptıysanız, yukarı ok işareti olan düğmeye tıkladıktan sonra kısımları silebilir veya düzeltebilirsiniz."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Bu fazla yavaş"
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Veri tabanının bir kopyasını alabilir miyim? Bir gün ortadan kaybolursanız ne olacak?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Veri tabanı herkese açıktır ve şuradan erişilebilir: "
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "Kaynak koduna serbestçe erişilebilir. Ben bir gün bu dünyada yalan olsam dahi, sizin gönderdiğiniz kısımlar kaybolmayacak."
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Kaynak koduna nereden ulaşabilirim?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Emeği Geçenler"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Dahasını Öğren"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Пропустити"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Увімкнути звук"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Пауза"
|
||||
},
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "Відео YouTube, не знайдено.\nЯкщо це не так, поновіть вкладку."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Оновити сегменти"
|
||||
},
|
||||
"success": {
|
||||
"message": "Успіх!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "Помилка з'єднання. Код помилки: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Ви хочете надіслати сегменти для відео з id"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Очистити сегменти"
|
||||
},
|
||||
@@ -158,6 +161,9 @@
|
||||
"setUsername": {
|
||||
"message": "Встановити ім'я користувача"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Копіювати публічний UserID"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Приєднуйтесь до офіційного сервера Discord, щоб залишити пропозиції і зворотний зв'язок!"
|
||||
},
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Це налаштування приховує кнопки для надсилання спонсорських вставок, які з'являються в плеєрі YouTube."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Залишати кнопку \"Перейти до Основне\" на плеєрі"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Показувати кнопку інформації в плеєрі YouTube"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Приховати кнопку інформації в плеєрі YouTube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Ця кнопка відкриває спливаюче вікно на сторінці YouTube."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Кнопка \"Автоматично сховати інформацію\""
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Приховати кнопку видалення в плеєрі YouTube"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Показувати кнопку видалення в плеєрі YouTube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Ця кнопка дозволяє очистити всі спонсорські вставки в плеєрі YouTube."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Увімкнути відстеження кількості пропусків сегментів"
|
||||
},
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Показувати сповіщення знову"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Показувати сповіщення після пропуску сегмента"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Повнорозмірні сповіщення про пропуски"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Зменшені сповіщення для автоматичних пропусків"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Всі сповіщення зменшеного розміру"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Напівпрозорі сповіщення для автоматичних пропусків"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Напівпрозорі сповіщення для всіх пропусків"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock дозволяє пропускати спонсорські вставки, початкові і кінцеві заставки, прохання підписатися і інше в відео на YouTube. SponsorBlock - колективне розширення, яке дозволяє кожному надіслати час початку і кінця подібних сегментів в відео. Після того, як хто-небудь надсилає цю інформацію, всі інші користувачі розширення будуть автоматично пропускати ці сегменти. Так само можна пропускати частини кліпів без музики.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -275,11 +299,30 @@
|
||||
"skip": {
|
||||
"message": "Пропустити"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Вимкнути звук"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Пропустити {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Вимкнути звук {0}?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Пропустити до {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Пропущено"
|
||||
"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": "Вимкнути автоматичний пропуск"
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Імпортувати/Експортувати Ваш ідентифікатор користувача"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Це потрібно тримати в секреті. Це як пароль, не варто ним ні з ким ділитися. Якщо він у кого-то є, він зможе видати себе за Вас."
|
||||
"message": "Тримайте його в таємниці. Ставтеся до нього як до паролю і не передавайте нікому. Якщо хтось їм заволодіє, то зможе видати себе за вас. Якщо ви шукаєте публічний ID користувача, натисніть значок буфера обміну у спливаючому вікні."
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "Встановити ідентифікатор користувача"
|
||||
@@ -341,12 +384,6 @@
|
||||
"createdBy": {
|
||||
"message": "Створено"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Автоматичний пропуск"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Показувати сповіщення після пропуску сегмента"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Він зараз призначений на:"
|
||||
},
|
||||
@@ -390,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Сегменти коротше цього значення не будуть пропускатися і не будуть показані в плеєрі."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Тривалість повідомлення пропуску (в секундах):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Повідомлення про пропуск залишиться на екрані принаймні так довго. Для пропуску вручну він може бути видимим довше."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Наступний діапазон часу коротше, ніж Ваше налаштування мінімальної тривалості. Це може означати, що він вже був надісланий, і просто ігнорується через це налаштування. Ви дійсно хочете надіслати?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Показувати кнопку надсилання"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Ця кнопка з'являється в плеєрі YouTube після того, як Ви вибрали позначку часу і готові до надсилання."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Адреса сервера SponsorBlock"
|
||||
},
|
||||
@@ -523,6 +563,15 @@
|
||||
"category_preview_description": {
|
||||
"message": "Короткий зміст попередніх епізодів або попередній перегляд того, що буде в даному відео. Призначено для сегментів, змонтованих зі шматків відео, а не для усних переказів."
|
||||
},
|
||||
"category_filler": {
|
||||
"message": "Дотичне наповнення"
|
||||
},
|
||||
"category_filler_description": {
|
||||
"message": "Дотичні сцени додані лише для наповнення або гумору, які не потрібні для розуміння основного вмісту відео. Це не повинно включати сегменти, що надають контекст або передісторію."
|
||||
},
|
||||
"category_filler_short": {
|
||||
"message": "Наповнення"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Музика: Сегмент без музики"
|
||||
},
|
||||
@@ -532,20 +581,44 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Без музики"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Основне"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Частина відео яку шукає більшість людей (Аналогічно коментарю \"Відео починається з Х:ХХ\")."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Прямі трансляції: пожертвування/читання повідомлення"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Читання повідомлень"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Вимкнути"
|
||||
"autoSkip": {
|
||||
"message": "Автоматичний пропуск"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Пропуск вручну"
|
||||
},
|
||||
"showOverlay": {
|
||||
"message": "Показувати в смузі прокрутки"
|
||||
"message": "Показувати в смузі перемотування"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Вимкнути"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Автоматично перейти до початку"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Спитати поки відео завантажується"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Показати в смузі перемотування"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Автоматично пропустити усі сегменти, якщо присутній сегмент без музики"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Дозволити сегменти, які відключають звук замість пропуску"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Ви ввели колір в неправильному форматі. Це повинно бути 3-х або 6-ти значне шістнадцяткове число з символом # на початку."
|
||||
@@ -555,7 +628,7 @@
|
||||
"description": "Referring to submissions that have not been sent to the server yet."
|
||||
},
|
||||
"seekBarColor": {
|
||||
"message": "Колір в смузі прокрутки"
|
||||
"message": "Колір в смужці прокрутки"
|
||||
},
|
||||
"category": {
|
||||
"message": "Категорія"
|
||||
@@ -586,6 +659,9 @@
|
||||
"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": "Ви повинні обрати категорію для всіх сегментів, які ви відправляєте!"
|
||||
},
|
||||
@@ -633,7 +709,7 @@
|
||||
"message": "Невірно вказано час"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Невірна категорія"
|
||||
"message": "Змінити категорію"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Це відео класифіковано як музичне. Ви впевнені, що в ньому є спонсори? Якщо насправді це \"Сегмент без музики\", відкрийте параметри розширення і увімкніть цю категорію. Потім ви можете надіслати цей сегмент як \"Без музики\", а не як спонсора. Будь ласка, прочитайте керівництво, якщо ви заплуталися."
|
||||
@@ -654,11 +730,12 @@
|
||||
"categoryUpdate2": {
|
||||
"message": "Відкрийте налаштування, щоб пропускати початкові і кінцеві заставки, саморекламу та інше."
|
||||
},
|
||||
"experimentUnlistedTitle": {
|
||||
"message": "Допоможіть цьому не зникнути"
|
||||
"help": {
|
||||
"message": "Довідка"
|
||||
},
|
||||
"experimentUnlistedText": {
|
||||
"message": "Це відео приховане і завантажено до 2017.\nСтарі приховані відео стануть приватними наступного місяця\nМи збираємо загальнодоступні відео для резервного копіювання\nЧи ви хочете анонімно надіслати це відео нам?\nhttps://support.google.com/youtube/answer/9230970"
|
||||
"GotIt": {
|
||||
"message": "Зрозуміло",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Відмова від усіх майбутніх експериментів",
|
||||
@@ -666,5 +743,104 @@
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "Сховати назавжди"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Ви отримали попередження, тому тимчасово не можете надсилати сегменти. Це означає, що ми помітили, що ви робили кілька поширених помилок не маючи шкідливих намірів. Будь ласка просто підтвердьте, що ви розумієте правила, і ми приберемо попередження. Ви також можете приєднатися до чату з правилами використовуючи discord.gg/SponsorBlock or matrix.to/#/#sponsor:ajay.app"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Голосування відхилено через попередження. Натисніть, щоб відкрити чат для вирішення цієї проблеми, або поверніться пізніше.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Пожертвувати"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"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": "Дізнатися більше"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Голосує проти та створює локальну копію для повторного надсилання"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Відкрити вікі-сторінку цієї категорії."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Скопіювати та проголосувати проти"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Продовжити голосування"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Це миттєво буде застосовано до ваших сегментів"
|
||||
},
|
||||
"SponsorTimeEditScrollNewFeature": {
|
||||
"message": "Навівши курсор на поле редагування, користуйтеся колесом прокрутки, щоб швидко відрегулювати час. Комбінації клавіш ctrl або shift можуть бути використані для точнішої настройки змін."
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "д",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "г",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"message": "đoạn quảng cáo"
|
||||
},
|
||||
"Segments": {
|
||||
"message": "đoạn quảng cáo"
|
||||
"message": "phân đoạn"
|
||||
},
|
||||
"upvoteButtonInfo": {
|
||||
"message": "Tán thành phân đoạn này"
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "Bỏ qua lại"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "Bật tiếng"
|
||||
},
|
||||
"paused": {
|
||||
"message": "Tạm dừng"
|
||||
},
|
||||
@@ -71,19 +74,22 @@
|
||||
"message": "Video này có đoạn quảng cáo trong kho dữ liệu rồi!"
|
||||
},
|
||||
"sponsor404": {
|
||||
"message": "Không tìm thấy đoạn nào"
|
||||
"message": "Không tìm thấy phân đoạn nào"
|
||||
},
|
||||
"sponsorStart": {
|
||||
"message": "Đoạn quảng cáo bắt đầu vào lúc này"
|
||||
},
|
||||
"sponsorEnd": {
|
||||
"message": "Đoạn quảng cáo kết thúc vào lúc này"
|
||||
"message": "Phân đoạn kết thúc vào lúc này"
|
||||
},
|
||||
"sponsorCancel": {
|
||||
"message": "Thoát việc tạo ra phân đoạn"
|
||||
"message": "Huỷ tạo phân đoạn"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "Không tìm thấy video này.\nNếu sai, hãy thử tải lại thẻ này."
|
||||
"message": "Không tìm thấy video nào.\nNếu sai, hãy thử tải lại thẻ này."
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "Làm mới segments"
|
||||
},
|
||||
"success": {
|
||||
"message": "Thành công!"
|
||||
@@ -95,13 +101,10 @@
|
||||
"message": "Có vẻ máy chủ đang không hoạt động. Hãy liên hệ nhà phát triển ngay lập tức."
|
||||
},
|
||||
"connectionError": {
|
||||
"message": "Đã xảy ra lỗi kết nối. Mã của lỗi: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Bạn có muốn đăng đoạn quảng cáo cho video có mã id"
|
||||
"message": "Đã xảy ra lỗi kết nối. Mã lỗi: "
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Xóa đoạn quảng cáo"
|
||||
"message": "Xóa các phân đoạn"
|
||||
},
|
||||
"openPopup": {
|
||||
"message": "Mở bảng popup của SponsorBlock"
|
||||
@@ -110,19 +113,19 @@
|
||||
"message": "Đóng bảng popup"
|
||||
},
|
||||
"SubmitTimes": {
|
||||
"message": "Đăng đoạn quảng cáo"
|
||||
"message": "Gửi phân đoạn"
|
||||
},
|
||||
"submitCheck": {
|
||||
"message": "Bạn có chắc là muốn đăng không?"
|
||||
"message": "Bạn có chắc chắn muốn gửi không?"
|
||||
},
|
||||
"whitelistChannel": {
|
||||
"message": "Đưa kênh vào danh sách không chặn"
|
||||
},
|
||||
"removeFromWhitelist": {
|
||||
"message": "Bỏ kênh này khỏi danh sách không chặn"
|
||||
"message": "Loại kênh khỏi danh sách không chặn"
|
||||
},
|
||||
"voteOnTime": {
|
||||
"message": "Bầu chọn một đoạn quảng cáo"
|
||||
"message": "Bầu chọn một phân đoạn"
|
||||
},
|
||||
"Submissions": {
|
||||
"message": "Các phân đoạn"
|
||||
@@ -147,7 +150,7 @@
|
||||
"message": "Xóa thời gian"
|
||||
},
|
||||
"submitTimesButton": {
|
||||
"message": "Đăng thời gian"
|
||||
"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"
|
||||
@@ -158,8 +161,11 @@
|
||||
"setUsername": {
|
||||
"message": "Đặt tên người dùng"
|
||||
},
|
||||
"copyPublicID": {
|
||||
"message": "Sao chép Public UserID"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Hãy tham gia server Discord chính thức để đăng gợi ý và phản hồi!"
|
||||
"message": "Hãy tham gia server Discord chính thức để đưa ra gợi ý và phản hồi!"
|
||||
},
|
||||
"hideThis": {
|
||||
"message": "Đóng lại"
|
||||
@@ -176,14 +182,17 @@
|
||||
"hideButtonsDescription": {
|
||||
"message": "Không hiển thị nút trên trình chạy video Youtube để đăng đoạn quảng cáo."
|
||||
},
|
||||
"showSkipButton": {
|
||||
"message": "Giữ nút bỏ qua Highlight trên trình phát player"
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Hiển thị nút thông tin trên trình chạy video Youtube"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Không hiển thị nút thông tin trên trình chạy video Youtube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Đây là nút để mở bảng popup trên trang Youtube."
|
||||
"autoHideInfoButton": {
|
||||
"message": "Tự động ẩn nút Info"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Không hiển thị nút xóa trên trình chạy video Youtube"
|
||||
@@ -191,9 +200,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "Hiển thị nút xóa trên trình chạy video Youtube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Đây là nút trên trình chạy video Youtube để xóa tất cả những đoạn quảng cáo chưa đăng của bạn trong video đang xem."
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Bật tính năng theo dõi số quảng cáo được bỏ qua"
|
||||
},
|
||||
@@ -218,6 +224,24 @@
|
||||
"showNotice": {
|
||||
"message": "Hiện thông báo lại"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Hiển thị thông báo sau khi bỏ qua phân đoạn"
|
||||
},
|
||||
"noticeVisibilityMode0": {
|
||||
"message": "Thông báo bỏ qua với kích thước đầy đủ"
|
||||
},
|
||||
"noticeVisibilityMode1": {
|
||||
"message": "Thông báo bỏ qua kích thước nhỏ nếu phân đoạn được tự động bỏ qua"
|
||||
},
|
||||
"noticeVisibilityMode2": {
|
||||
"message": "Thông báo bỏ qua kích thước nhỏ cho toàn bộ phân đoạn"
|
||||
},
|
||||
"noticeVisibilityMode3": {
|
||||
"message": "Thông báo bỏ qua mờ nếu phân đoạn được tự động bỏ qua"
|
||||
},
|
||||
"noticeVisibilityMode4": {
|
||||
"message": "Thông báo bỏ qua mờ cho tất cả các phân đoạn"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock giúp bạn bỏ qua quảng cáo từ nhà tài trợ, đoạn giới thiệu, đoạn kết, lời nhắc đăng ký kênh, và những phần khó chịu khác trong các video Youtube. SponsorBlock là một tiện ích mở rộng cho trình duyệt, cho phép tất cả người dùng đăng thời điểm bắt đầu và kết thúc của những đoạn quảng cáo từ nhà tài trợ và các đoạn khác trong video Youtube. Sau khi một người đăng thông tin này lên, tất cả mọi người dùng tiện ích mở rộng này sẽ bỏ qua đoạn quảng cáo đó. Bạn cũng có thể bỏ qua phần không có nhạc trong những video âm nhạc.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -275,20 +299,39 @@
|
||||
"skip": {
|
||||
"message": "Bỏ qua"
|
||||
},
|
||||
"mute": {
|
||||
"message": "Ngắt tiếng"
|
||||
},
|
||||
"skip_category": {
|
||||
"message": "Bỏ qua {0}?"
|
||||
},
|
||||
"mute_category": {
|
||||
"message": "Ngắt tiếng {0} chứ?"
|
||||
},
|
||||
"skip_to_category": {
|
||||
"message": "Bỏ qua đến {0}?",
|
||||
"description": "Used for skipping to things (Skip to Highlight)"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "Đã bỏ qua"
|
||||
"message": "{0} đã bỏ qua",
|
||||
"description": "Example: Sponsor Skipped"
|
||||
},
|
||||
"muted": {
|
||||
"message": "{0} đã ngắt tiếng (Muted)",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"skipped_to_category": {
|
||||
"message": "Đã bỏ qua đến {0}",
|
||||
"description": "Used for skipping to things (Skipped to Highlight)"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "Tắt tự động bỏ qua quảng cáo"
|
||||
"message": "Tắt tự động bỏ qua"
|
||||
},
|
||||
"enableAutoSkip": {
|
||||
"message": "Bật tự động bỏ qua quảng cáo"
|
||||
},
|
||||
"audioNotification": {
|
||||
"message": "Thông báo bằng âm thanh khi bỏ qua quảng cáo"
|
||||
"message": "Thông báo bằng âm thanh khi bỏ qua"
|
||||
},
|
||||
"audioNotificationDescription": {
|
||||
"message": "Thông báo bằng âm thanh sẽ được bật khi bỏ qua quảng cáo. Nếu tắt tính năng này (hoặc tính năng tự động bỏ qua quảng cáo bị tắt), sẽ không có âm thanh kêu."
|
||||
@@ -330,7 +373,7 @@
|
||||
"message": "Nhập/Xuất mã người dùng của bạn"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "Bạn nên giữ bí mật mã này. Nó như mật khẩu vậy, do đó không nên chia sẻ với người khác. Nếu ai đó có mã này, họ có thể giả mạo bạn."
|
||||
"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"
|
||||
@@ -341,12 +384,6 @@
|
||||
"createdBy": {
|
||||
"message": "Được tạo bởi"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "Tự động bỏ qua quảng cáo"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "Hiển thị thông báo sau khi bỏ qua quảng cáo"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": ". Phím đang được đặt:"
|
||||
},
|
||||
@@ -390,15 +427,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "Đoạn quảng cáo ngắn hơn giá trị được đặt sẽ không bị bỏ qua hoặc hiển thị trong trình chạy video."
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "Thời gian tự động đóng bảng thông báo phân đoạn (giây):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "Đặt thời gian hiển thị bảng thông báo phân đoạn. Nếu như bạn tự nhấn nút bỏ qua, nó sẽ hiện lâu hơn 1 chút."
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "Đoạn quảng cáo sau ngắn hơn tùy chọn độ dài ngắn nhất của bạn. Điều này có thể có nghĩa là nó đã được đăng rồi, và không được bỏ qua vì tùy chọn này. Bạn có chắc muốn đăng nó không?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "Hiển thị nút tải lên"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "Nút này xuất hiện trên trình chạy video Youtube sau khi bạn chọn mốc thời gian và sẵn sàng đăng đoạn quảng cáo."
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "Địa chỉ máy chủ SponsorBlock"
|
||||
},
|
||||
@@ -436,10 +476,10 @@
|
||||
"message": "Tệp JSON này không được định dạng đúng cách. Tùy chọn của bạn chưa được thay đổi."
|
||||
},
|
||||
"confirmNoticeTitle": {
|
||||
"message": "Đăng đoạn quảng cáo"
|
||||
"message": "Gửi phân đoạn"
|
||||
},
|
||||
"submit": {
|
||||
"message": "Đăng"
|
||||
"message": "Gửi"
|
||||
},
|
||||
"cancel": {
|
||||
"message": "Huỷ"
|
||||
@@ -454,7 +494,7 @@
|
||||
"message": "Chưa gửi lên: "
|
||||
},
|
||||
"inspect": {
|
||||
"message": "Xem trước"
|
||||
"message": "Kiểm tra"
|
||||
},
|
||||
"edit": {
|
||||
"message": "Chỉnh sửa"
|
||||
@@ -491,7 +531,7 @@
|
||||
"message": "Quảng cáo không trả công/Tự quảng cáo"
|
||||
},
|
||||
"category_selfpromo_description": {
|
||||
"message": "Tương tự như 'nhà tài trợ' ngoại trừ việc quảng cáo không được trả tiền hay tự quảng cáo. Điều này bao gồm các phần hàng hóa, đóng góp, hoặc thông tin về người mà họ hợp tác với."
|
||||
"message": "Tương tự như 'nhà tài trợ' ngoại trừ việc quảng cáo không được trả tiền hay tự quảng cáo. Điều này bao gồm các phần hàng hóa, đóng góp, hoặc thông tin về người mà họ hợp tác cùng."
|
||||
},
|
||||
"category_interaction": {
|
||||
"message": "Nhắc tương tác (Đăng ký)"
|
||||
@@ -517,9 +557,21 @@
|
||||
"category_outro_description": {
|
||||
"message": "Credits hoặc khi thẻ màn hình kết thúc của YouTube xuất hiện. Không dùng với những đoạn có thông tin."
|
||||
},
|
||||
"category_preview": {
|
||||
"message": "Xem trước/Tóm tắt"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "Tóm tắt nhanh về tập trước/tập sau trong 1 chuỗi video (series) dài (hoặc cũng có thể là tóm tắt trước về video sắp chiếu)."
|
||||
},
|
||||
"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ụ"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "Nhạc: Phần không nhạc"
|
||||
},
|
||||
@@ -529,14 +581,20 @@
|
||||
"category_music_offtopic_short": {
|
||||
"message": "Không có nhạc"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "Điểm/Khoảnh khắc quan trọng"
|
||||
},
|
||||
"category_poi_highlight_description": {
|
||||
"message": "Phần của video mà hầu hết mọi người đang tìm kiếm. Tương tự với câu nói \"Video bắt đầu từ x\"."
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "Luồng phát trực tiếp: Đọc Quyên góp/Tin nhắn"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "Đọc tin nhắn"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Tắt"
|
||||
"autoSkip": {
|
||||
"message": "Tự động bỏ qua quảng cáo"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "Bỏ qua thủ công"
|
||||
@@ -544,11 +602,33 @@
|
||||
"showOverlay": {
|
||||
"message": "Hiện ở thanh xem trước"
|
||||
},
|
||||
"disable": {
|
||||
"message": "Tắt"
|
||||
},
|
||||
"autoSkip_POI": {
|
||||
"message": "Tự động bỏ qua"
|
||||
},
|
||||
"manualSkip_POI": {
|
||||
"message": "Hỏi khi video bắt đầu"
|
||||
},
|
||||
"showOverlay_POI": {
|
||||
"message": "Hiện ở thanh xem trước"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "Tự động bỏ qua tất cả các phân đoạn nếu trong video có phân đoạn không phải nhạc"
|
||||
},
|
||||
"muteSegments": {
|
||||
"message": "Cho phép các phân đoạn bị tắt tiếng hay vì bỏ qua"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "Mã màu sai định dạng. Mã màu phải có 3 hoặc 6 ký tự hệ hex và có dấu thăng ở đầu."
|
||||
},
|
||||
"previewColor": {
|
||||
"message": "Màu khi chưa được gửi đi",
|
||||
"description": "Referring to submissions that have not been sent to the server yet."
|
||||
},
|
||||
"seekBarColor": {
|
||||
"message": "Màu của thanh xem trước"
|
||||
"message": "Màu của thanh tìm kiếm"
|
||||
},
|
||||
"category": {
|
||||
"message": "Thể loại"
|
||||
@@ -579,6 +659,9 @@
|
||||
"message": "Để gửi một phân đoạn với chủ đề \"{0}\", bạn cần phải kích hoạt nó trong phần tuỳ chọn. Bạn sẽ được đưa đến phần tuỳ chỉnh bây giờ.",
|
||||
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
|
||||
},
|
||||
"poiOnlyOneSegment": {
|
||||
"message": "Cảnh báo: Loại phân đoạn này nếu hiển thị CHỈ CÓ 1 PHÂN ĐOẠN được xuất hiện trong video. Nếu bạn gửi lên, khi đó, phân đoạn xuất hiện duy nhất sẽ được lựa chọn ngẫu nhiên."
|
||||
},
|
||||
"youMustSelectACategory": {
|
||||
"message": "Bạn phải lựa chọn một danh mục cho tất cả phân đoạn bạn đang muốn đăng tải!"
|
||||
},
|
||||
@@ -586,11 +669,33 @@
|
||||
"message": "(Kết thúc)"
|
||||
},
|
||||
"hiddenDueToDownvote": {
|
||||
"message": "đã bị ẩn: Không tán thành"
|
||||
"message": "đã ẩn: hạ bình chọn"
|
||||
},
|
||||
"hiddenDueToDuration": {
|
||||
"message": "đã bị ẩn: quá ngắn"
|
||||
},
|
||||
"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": "Không xác định được ID kênh. Nếu bạn đang xem video này trên 1 trang web thứ 3, hãy mở lại video này trên trang chủ Youtube rồi thử lại. Điều này cũng có thể do những thay đổi trong mã nguồn trang web YouTube, nếu bạn nghĩ vậy, hãy bình luận tại đây:"
|
||||
},
|
||||
"videoInfoFetchFailed": {
|
||||
"message": "SponsorBlock không thể truy vấn dữ liệu lịch sử phân đoạn video. Có thể do trình chặn quảng cáo của bạn. Bạn có thể tìm hiểu nguyên nhân và cách fix ở đây: https://github.com/ajayyy/SponsorBlock/issues/741."
|
||||
},
|
||||
"youtubePermissionRequest": {
|
||||
"message": "Có vẻ như SponsorBlock không thể truy cập API YouTube. Để khắc phục điều này, hãy chấp nhận lời nhắc cấp quyền sẽ xuất hiện tiếp theo, đợi vài giây rồi tải lại trang."
|
||||
},
|
||||
"acceptPermission": {
|
||||
"message": "Cho phép truy cập"
|
||||
},
|
||||
"permissionRequestSuccess": {
|
||||
"message": "Đã có quyền truy cập!"
|
||||
},
|
||||
"permissionRequestFailed": {
|
||||
"message": "Truy cập bị từ chối, bạn đã nhấp vào từ chối à?"
|
||||
},
|
||||
"adblockerIssueWhitelist": {
|
||||
"message": "Nếu bạn không thể giải quyết được vấn đề này, hãy vô hiệu hoá cài đặt 'Bỏ qua video không công khai/riêng tư', vì SponsorBlock không thể lấy được thông tin của video này"
|
||||
},
|
||||
"forceChannelCheck": {
|
||||
"message": "Bắt buộc kiểm tra kênh trước khi bỏ qua"
|
||||
},
|
||||
@@ -601,16 +706,16 @@
|
||||
"message": "Cân nhắc bật chế độ \"Bắt buộc kiểm tra kênh YouTube trước khi bỏ qua phân đoạn\""
|
||||
},
|
||||
"downvoteDescription": {
|
||||
"message": "Phân đoạn sai / không đúng"
|
||||
"message": "Chỉnh thời gian sai/không đúng"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "Sai thể loại"
|
||||
"message": "Đổi danh mục"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "Video này đã được phân loại là âm nhạc. Bạn có chắc đây là quảng cáo nhà tài trợ không? Nếu đây là phân đoạn \"Không phải nhạc\", hãy mở Cài đặt tiện ích và bật lựa chọn đó. Rồi bạn có thể đăng tải phân đoạn lên dưới danh mục \"Không phải nhạc\" thay vì \"Quảng cáo nhà tài trợ\". Hãy đọc Hướng dẫn nếu bạn vẫn còn vướng mắc"
|
||||
},
|
||||
"multipleSegments": {
|
||||
"message": "Nhiều đoạn"
|
||||
"message": "Nhiều phân đoạn"
|
||||
},
|
||||
"guidelines": {
|
||||
"message": "Hướng dẫn"
|
||||
@@ -624,5 +729,121 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "Mở Tùy chọn để bỏ qua đoạn mở đầu, kết thúc, giới thiệu hàng hoá, v.v."
|
||||
},
|
||||
"help": {
|
||||
"message": "Trợ giúp"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "Đã hiểu",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "Từ chối tham gia thử nghiệm trong tương lai",
|
||||
"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": "Ẩn vĩnh viễn"
|
||||
},
|
||||
"warningChatInfo": {
|
||||
"message": "Bạn đã nhận được một cảnh báo và tạm thời không thể gửi các phân đoạn. Bạn đã mắc lỗi trong việc tạo phân đoạn quá nhiều lần (có thể là chọn sai kiểu phân đoạn hoặc sai thời gian phân đoạn). Chúng tôi muốn bạn nhận ra điều đó để giúp bạn không mắc lỗi trong tương lai. Bạn có thể gặp các Vip User tại đây: discord.gg/SponsorBlock hoặc matrix.to/#/#sponsor:ajay.app. Bọn họ sẽ giúp bạn gỡ cảnh báo sau khi bạn đã hiểu ra lỗi sai của bạn"
|
||||
},
|
||||
"voteRejectedWarning": {
|
||||
"message": "Bỏ phiếu bị từ chối do có cảnh báo. Nhấp để mở cuộc trò chuyện để giải quyết hoặc quay lại sau.",
|
||||
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
|
||||
},
|
||||
"Donate": {
|
||||
"message": "Ủng hộ"
|
||||
},
|
||||
"hideDonationLink": {
|
||||
"message": "Ẩn link donate"
|
||||
},
|
||||
"helpPageThanksForInstalling": {
|
||||
"message": "Cảm ơn bạn đã cài đặt SponsorBlock."
|
||||
},
|
||||
"helpPageReviewOptions": {
|
||||
"message": "Xin hãy xem xét các tuỳ chọn bên dưới"
|
||||
},
|
||||
"helpPageFeatureDisclaimer": {
|
||||
"message": "Nhiều tính năng sẽ bị tắt theo mặc định. Nếu bạn muốn bỏ qua phần intro, sử dụng trên các trang web bên thứ 3 như Invidious, v. v...., bạn có thể bật nó ở bên dưới. Bạn cũng có thể cho hiện/ẩn UI người dùng."
|
||||
},
|
||||
"helpPageHowSkippingWorks": {
|
||||
"message": "Việc bỏ qua 1 đoạn trong video được thực hiện thế nào?"
|
||||
},
|
||||
"helpPageHowSkippingWorks1": {
|
||||
"message": "Các phân đoạn trong video sẽ tự động bị bỏ qua nếu chúng được tìm thấy trong cơ sở dữ liệu của chúng tôi. Bạn có thể mở cửa sổ xem trước các phân đoạn ấy bằng cách nhấp vào biểu tượng tiện ích mở rộng."
|
||||
},
|
||||
"helpPageHowSkippingWorks2": {
|
||||
"message": "Bất cứ khi nào bỏ qua một phân đoạn, bạn sẽ nhận được 1 cửa sổ thông báo bât. Nếu phân đoạn có vẻ sai, hãy bỏ phiếu bằng cách nhấp vào nút downvote! Bạn cũng có thể bỏ phiếu trong cửa sổ bật lên khi nhấn vào biểu tượng tiện ích mở rộng. Và bạn có thể tắt việc hiển thị bảng thông báo này trong phần cài đặt tiện ích."
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "Đang gửi lên"
|
||||
},
|
||||
"helpPageSubmitting1": {
|
||||
"message": "Việc gửi một phân đoạn mới có thể được thực hiện trong cửa sổ bật lên bằng cách nhấn vào nút \"Đoạn quảng cáo bắt đầu vào lúc này\" hoặc trong trình phát video bằng các nút trên thanh trình phát."
|
||||
},
|
||||
"helpPageSubmitting2": {
|
||||
"message": "Bạn nhấp 1 lần vào nút \"Đoạn quảng cáo bắt đầu vào lúc này\" để bắt đầu 1 phân đoạn, nhấn 2 lần để đánh dấu kết thúc phân đoạn đó. Bạn có thể chuẩn bị nhiều phân đoạn trước khi nhấn gửi. Nhấp vào nút \"Đăng đoạn quảng cáo\" sẽ gửi. Nhấp vào nút \"Xoá đoạn quảng cáo\" để xóa."
|
||||
},
|
||||
"Editing": {
|
||||
"message": "Chỉnh sửa"
|
||||
},
|
||||
"helpPageEditing1": {
|
||||
"message": "Nếu bạn muốn chỉnh sửa thời gian phân đoạn hoặc kiểu của phân đoạn, bạn có thể chỉnh sửa hoặc xóa các phân đoạn của mình sau khi nhấp vào nút \"Đăng đoạn quảng cáo\"."
|
||||
},
|
||||
"helpPageTooSlow": {
|
||||
"message": "Nếu như bạn cảm thấy thao tác ở trên quá chậm..."
|
||||
},
|
||||
"helpPageTooSlow1": {
|
||||
"message": "Bạn có thể sử dụng các hotkeys - phím nóng. Nhấn phím dấu chấm phẩy (;) để chỉ ra điểm bắt đầu / kết thúc của phân đoạn nhà tài trợ và nhấp vào dấu nháy đơn (') để gửi. Nếu bạn không sử dụng QWERTY, có lẽ bạn nên thay đổi keybinding bằng cách vào phần cài đặt của tiện ích."
|
||||
},
|
||||
"helpPageCopyOfDatabase": {
|
||||
"message": "Tôi có thể lấy bản sao của database không? Điều gì xảy ra nếu có chuyện tệ (server chết, chủ nhân trang web mất, ...)?"
|
||||
},
|
||||
"helpPageCopyOfDatabase1": {
|
||||
"message": "Database được công khai và luôn có sẵn tại "
|
||||
},
|
||||
"helpPageCopyOfDatabase2": {
|
||||
"message": "Mã nguồn mở cũng luôn có sẵn. Vì vậy, ngay cả khi có điều gì đó tệ, các phân đoạn cũng sẽ không biến mất."
|
||||
},
|
||||
"helpPageNews": {
|
||||
"message": "Tôi có thể cập nhật tin tức ở đâu?"
|
||||
},
|
||||
"helpPageSourceCode": {
|
||||
"message": "Bạn có thể tìm thấy source code ở đâu?"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "Lời cảm ơn đến"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "Tìm hiểu thêm"
|
||||
},
|
||||
"CopyDownvoteButtonInfo": {
|
||||
"message": "Hạ bình chọn và tạo một bản sao cục bộ cho bạn gửi lại"
|
||||
},
|
||||
"OpenCategoryWikiPage": {
|
||||
"message": "Mở trang wiki của danh mục này để tìm hiểu thêm."
|
||||
},
|
||||
"CopyAndDownvote": {
|
||||
"message": "Sao chép và hạ bình chọn"
|
||||
},
|
||||
"ContinueVoting": {
|
||||
"message": "Tiếp tục bỏ phiếu"
|
||||
},
|
||||
"ChangeCategoryTooltip": {
|
||||
"message": "Điều này sẽ ngay lập tức áp dụng cho phân đoạn của bạ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."
|
||||
},
|
||||
"fillerNewFeature": {
|
||||
"message": "Mới! Bỏ qua các phân đoạn phụ và joke với danh mục \"Cảnh phụ\". Bật trong tùy chọn"
|
||||
},
|
||||
"dayAbbreviation": {
|
||||
"message": "d",
|
||||
"description": "100d"
|
||||
},
|
||||
"hourAbbreviation": {
|
||||
"message": "h",
|
||||
"description": "100h"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,9 +97,6 @@
|
||||
"connectionError": {
|
||||
"message": "连接错误。错误代码: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "您是否想为以下视频 ID 提交:"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "清除片段"
|
||||
},
|
||||
@@ -182,18 +179,12 @@
|
||||
"hideInfoButton": {
|
||||
"message": "在 Youtube 播放器上隐藏信息按钮"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "此按钮用于在 Youtube 页面中打开弹窗。"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "在 Youtube 播放器上隐藏删除按钮"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "在 Youtube 播放器上显示删除按钮"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "此按钮用于在 Youtube 播放器中清除所有赞助商广告。"
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "启用跳过次数统计跟踪"
|
||||
},
|
||||
@@ -215,6 +206,9 @@
|
||||
"showNotice": {
|
||||
"message": "重新显示通知"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "在跳过片段后显示通知"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock 可帮您跳过 YouTube 视频中的赞助商广告、开场、结尾、订阅提醒和其他烦人片段。SponsorBlock 是一个众包的浏览器扩展,可以让任何人提交 YouTube 视频的赞助商广告和其他片段的开始和结束时间。若有一人提交了信息,其他所有使用此扩展的人都能直接跳过赞助商广告片段。您也可以跳过音乐视频中的非音乐部分。",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -272,9 +266,6 @@
|
||||
"skip_category": {
|
||||
"message": "跳过{0}?"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "跳过"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "禁用自动跳过"
|
||||
},
|
||||
@@ -323,9 +314,6 @@
|
||||
"changeUserID": {
|
||||
"message": "导入/导出您的用户 ID"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "这应该被保密。这就像一个密码,且不应该告诉任何人。如果有人拥有它,他就可以冒充您。"
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "设定用户 ID"
|
||||
},
|
||||
@@ -335,12 +323,6 @@
|
||||
"createdBy": {
|
||||
"message": "创建者"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "自动跳过"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "在跳过片段后显示通知"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": "。目前被设定为:"
|
||||
},
|
||||
@@ -377,9 +359,6 @@
|
||||
"showUploadButton": {
|
||||
"message": "显示上传按钮"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "在您选择了时间并准备提交后,此按钮会出现在 Youtube 播放器中。"
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock 服务器地址"
|
||||
},
|
||||
@@ -510,8 +489,8 @@
|
||||
"category_livestream_messages_short": {
|
||||
"message": "阅读消息"
|
||||
},
|
||||
"disable": {
|
||||
"message": "禁用"
|
||||
"autoSkip": {
|
||||
"message": "自动跳过"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "手动跳过"
|
||||
@@ -519,6 +498,9 @@
|
||||
"showOverlay": {
|
||||
"message": "在搜索栏中显示"
|
||||
},
|
||||
"disable": {
|
||||
"message": "禁用"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "颜色格式错误。应为以“#”开头的 3 位或 6 位十六进制数字。"
|
||||
},
|
||||
@@ -584,9 +566,6 @@
|
||||
"downvoteDescription": {
|
||||
"message": "不正确/错误的时间"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "错误的类别"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "此视频的分类为音乐。 您确定其中包含赞助商广告吗?如果这是“非音乐片段”,请打开扩展选项并启用此类别。 之后,您可以以“非音乐”而不是赞助商广告类别提交此片段。如果您不太明白,请阅读指南。"
|
||||
},
|
||||
@@ -605,5 +584,8 @@
|
||||
},
|
||||
"categoryUpdate2": {
|
||||
"message": "打开选项,跳过开头,结尾,商业等。"
|
||||
},
|
||||
"help": {
|
||||
"message": "帮助"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
"reskip": {
|
||||
"message": "繼續跳過"
|
||||
},
|
||||
"unmute": {
|
||||
"message": "解除靜音"
|
||||
},
|
||||
"paused": {
|
||||
"message": "已暫停"
|
||||
},
|
||||
@@ -85,6 +88,9 @@
|
||||
"noVideoID": {
|
||||
"message": "找不到 YouTube 影片。\n如果這是不正確的,重新整理此分頁"
|
||||
},
|
||||
"refreshSegments": {
|
||||
"message": "重新載入片段"
|
||||
},
|
||||
"success": {
|
||||
"message": "成功!"
|
||||
},
|
||||
@@ -97,9 +103,6 @@
|
||||
"connectionError": {
|
||||
"message": "已發生連線錯誤。錯誤碼: "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "您想為這個影片ID提交嗎"
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "清除片段"
|
||||
},
|
||||
@@ -182,8 +185,8 @@
|
||||
"hideInfoButton": {
|
||||
"message": "在 YouTube 播放器上隱藏資訊按鈕"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "這個按鈕可用來在 YouTube 頁面打開彈出視窗"
|
||||
"autoHideInfoButton": {
|
||||
"message": "自動隱藏資訊按鈕"
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "在 YouTube 播放器上隱藏刪除按鈕"
|
||||
@@ -191,9 +194,6 @@
|
||||
"showDeleteButton": {
|
||||
"message": "在 YouTube 播放器上顯示刪除按鈕"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "這個按鈕可用來在 YouTube 播放器清除所有未提交的片段"
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "啟用跳過次數追蹤"
|
||||
},
|
||||
@@ -218,6 +218,9 @@
|
||||
"showNotice": {
|
||||
"message": "再次顯示通知"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "在跳過片段後顯示通知"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock 讓您可以跳過贊助工商,開場動畫,結束動畫,訂閱提醒等煩人的 YouTube 影片片段。SponsorBlock 是個大眾外包的網頁瀏覽器擴充功能,能讓任何人提交贊助片段的始與末。當一個人提交這個片段後,所有使用這個擴充功能的人都可以跳過該片段。您也可以跳過在音樂中的非音樂片段",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
@@ -278,8 +281,9 @@
|
||||
"skip_category": {
|
||||
"message": "跳過 {0}?"
|
||||
},
|
||||
"skipped": {
|
||||
"message": "已跳過"
|
||||
"muted": {
|
||||
"message": "{0} 已靜音",
|
||||
"description": "Example: Sponsor Muted"
|
||||
},
|
||||
"disableAutoSkip": {
|
||||
"message": "停用自動跳過"
|
||||
@@ -329,9 +333,6 @@
|
||||
"changeUserID": {
|
||||
"message": "匯入/匯出您的使用者 ID"
|
||||
},
|
||||
"whatChangeUserID": {
|
||||
"message": "這應該被保密。這就像一個密碼,不應該與他人分享。如果有人擁有它,他們就可以冒充您。"
|
||||
},
|
||||
"setUserID": {
|
||||
"message": "設定使用者 ID"
|
||||
},
|
||||
@@ -339,13 +340,7 @@
|
||||
"message": "警告:更改用戶 ID 是永久性的。您確定要這麼做嗎?請務必備份您的舊用戶 ID 來以防萬一。"
|
||||
},
|
||||
"createdBy": {
|
||||
"message": "創建者"
|
||||
},
|
||||
"autoSkip": {
|
||||
"message": "自動跳過"
|
||||
},
|
||||
"showSkipNotice": {
|
||||
"message": "在跳過片段後顯示通知"
|
||||
"message": "作者"
|
||||
},
|
||||
"keybindCurrentlySet": {
|
||||
"message": "。它目前被設定為:"
|
||||
@@ -387,15 +382,18 @@
|
||||
"minDurationDescription": {
|
||||
"message": "小於設定值的片段不會被跳過或在播放器中顯示"
|
||||
},
|
||||
"skipNoticeDuration": {
|
||||
"message": "跳過通知持續顯示時間(秒):"
|
||||
},
|
||||
"skipNoticeDurationDescription": {
|
||||
"message": "跳過片段提示的顯示時間將會以上列時間長度為準(單位:秒);手動跳過的時候會顯示較長於上面的時間"
|
||||
},
|
||||
"shortCheck": {
|
||||
"message": "以下的提交小於您的最小時間設定。這表是它們可能已經被提交,只是被該設定忽略了。您確定要提交嗎?"
|
||||
},
|
||||
"showUploadButton": {
|
||||
"message": "顯示上傳按鈕"
|
||||
},
|
||||
"whatUploadButton": {
|
||||
"message": "在您選擇了時間範圍並準備提交後,此按鈕會出現在 YouTube 播放器中。"
|
||||
},
|
||||
"customServerAddress": {
|
||||
"message": "SponsorBlock 伺服器地址"
|
||||
},
|
||||
@@ -517,20 +515,29 @@
|
||||
"category_preview": {
|
||||
"message": "預覽/摘要"
|
||||
},
|
||||
"category_preview_description": {
|
||||
"message": "係指影片的前情提要或內容預告等刻意編輯過的內容"
|
||||
},
|
||||
"category_music_offtopic": {
|
||||
"message": "音樂:非音樂部分"
|
||||
},
|
||||
"category_music_offtopic_description": {
|
||||
"message": "此功能僅供音樂影片使用。本功能僅應該用於音樂錄影帶中並未包含其他類別的段落。"
|
||||
},
|
||||
"category_music_offtopic_short": {
|
||||
"message": "非音樂"
|
||||
},
|
||||
"category_poi_highlight": {
|
||||
"message": "重點"
|
||||
},
|
||||
"category_livestream_messages": {
|
||||
"message": "直播:捐贈/訊息閱讀"
|
||||
},
|
||||
"category_livestream_messages_short": {
|
||||
"message": "閱讀訊息"
|
||||
},
|
||||
"disable": {
|
||||
"message": "停用"
|
||||
"autoSkip": {
|
||||
"message": "自動跳過"
|
||||
},
|
||||
"manualSkip": {
|
||||
"message": "手動跳過"
|
||||
@@ -538,6 +545,12 @@
|
||||
"showOverlay": {
|
||||
"message": "在時間條顯示"
|
||||
},
|
||||
"disable": {
|
||||
"message": "停用"
|
||||
},
|
||||
"autoSkipOnMusicVideos": {
|
||||
"message": "自動跳過非音樂片段(如果有的話)"
|
||||
},
|
||||
"colorFormatIncorrect": {
|
||||
"message": "您設定的顏色無效。它應該是三或六位數的 hex 碼,且以井字號開頭。"
|
||||
},
|
||||
@@ -589,11 +602,15 @@
|
||||
"hiddenDueToDuration": {
|
||||
"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網站上觀看本影片。此問題亦有可能是由於YouTube改變了系統架構,如果你認為這是造成此問題的原因,請留言告訴我們:"
|
||||
},
|
||||
"videoInfoFetchFailed": {
|
||||
"message": "似乎有東西在阻止 SponsorBlock 獲取影片資料。請查看 https://github.com/ajayyy/SponsorBlock/issues/741 以了解更多資訊。"
|
||||
"message": "似乎有東西在阻止 SponsorBlock 取得影片資料。請至 https://github.com/ajayyy/SponsorBlock/issues/741 以了解更多資訊。"
|
||||
},
|
||||
"youtubePermissionRequest": {
|
||||
"message": "SponsorBlock 貌似無法存取 YouTube API。若要解決,請同意稍後出現的權限提示,等待幾秒鐘,然後重新載入頁面。"
|
||||
"message": "SponsorBlock 貌似無法存取 YouTube API。若要解決此問題,請同意稍後出現的權限提示,等待幾秒鐘,然後重新載入頁面。"
|
||||
},
|
||||
"acceptPermission": {
|
||||
"message": "允許權限"
|
||||
@@ -619,9 +636,6 @@
|
||||
"downvoteDescription": {
|
||||
"message": "不正確/錯誤的時間"
|
||||
},
|
||||
"incorrectCategory": {
|
||||
"message": "錯誤的類別"
|
||||
},
|
||||
"nonMusicCategoryOnMusic": {
|
||||
"message": "這個影片被分類為音樂。您確定這有贊助內容嗎?如果這其實是\"非音樂片段\"的話,開啟擴充功能設定並啟用這個類別。接下來您即可提交這個片段為\"非音樂片段\"。如果您感到困惑,請閱讀方針"
|
||||
},
|
||||
@@ -641,11 +655,30 @@
|
||||
"categoryUpdate2": {
|
||||
"message": "開啟選項以跳過開場、結尾、工商等。"
|
||||
},
|
||||
"help": {
|
||||
"message": "說明"
|
||||
},
|
||||
"GotIt": {
|
||||
"message": "知道了",
|
||||
"description": "Used as the button to dismiss a tooltip"
|
||||
},
|
||||
"experiementOptOut": {
|
||||
"message": "關閉所有未來的實驗性功能",
|
||||
"description": "This is used in a popup about a new experiment to get a list of unlisted videos to back up since all unlisted videos uploaded before 2017 will be set to private."
|
||||
},
|
||||
"hideForever": {
|
||||
"message": "永久隱藏"
|
||||
},
|
||||
"Submitting": {
|
||||
"message": "正在提交"
|
||||
},
|
||||
"Editing": {
|
||||
"message": "編輯中"
|
||||
},
|
||||
"Credits": {
|
||||
"message": "致謝"
|
||||
},
|
||||
"LearnMore": {
|
||||
"message": "了解更多"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#previewbar {
|
||||
overflow: visible;
|
||||
padding: 0;
|
||||
@@ -22,6 +26,11 @@
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* Make sure settings are upfront */
|
||||
.ytp-settings-menu {
|
||||
z-index: 6000 !important;
|
||||
}
|
||||
|
||||
/* Preview Bar page hacks */
|
||||
|
||||
.ytp-tooltip:not(.sponsorCategoryTooltipVisible) .sponsorCategoryTooltip {
|
||||
@@ -75,20 +84,26 @@
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#infoButton.playerButton:not(.hidden) {
|
||||
.autoHiding {
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
.autoHiding:not(.hidden) {
|
||||
transform: translateX(0%) scale(1);
|
||||
/* opacity is from YouTube page */
|
||||
transition: transform 0.2s, opacity .1s cubic-bezier(0.4,0.0,1,1) !important;
|
||||
transition: transform 0.2s, width 0.2s, opacity .1s cubic-bezier(0.4,0.0,1,1) !important;
|
||||
}
|
||||
|
||||
#infoButton.playerButton.hidden {
|
||||
.autoHiding.hidden {
|
||||
transform: translateX(100%) scale(0);
|
||||
/* opacity is from YouTube page */
|
||||
transition: transform 0.2s, opacity .1s cubic-bezier(0.4,0.0,1,1) !important;
|
||||
transition: transform 0.2s, width 0.2s, opacity .1s cubic-bezier(0.4,0.0,1,1) !important;
|
||||
|
||||
width: 0px !important;
|
||||
}
|
||||
|
||||
.playerButton.hidden {
|
||||
display: none;
|
||||
.autoHiding.hidden.autoHideLeft {
|
||||
transform: translateX(-100%) scale(0);
|
||||
}
|
||||
|
||||
.sponsorSkipObject {
|
||||
@@ -106,12 +121,10 @@
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
|
||||
@keyframes fadeOut {
|
||||
from { opacity: 1; }
|
||||
to { opacity: 0; }
|
||||
to { opacity: 0; }
|
||||
}
|
||||
|
||||
.sponsorBlockSpacer {
|
||||
@@ -121,15 +134,26 @@
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.sponsorSkipNotice {
|
||||
min-width: 350px;
|
||||
background-color: rgba(28, 28, 28, 0.9);
|
||||
position: absolute;
|
||||
.sbChatNotice {
|
||||
min-width: 350px;
|
||||
height: 70%;
|
||||
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
bottom: 100px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
border-radius: 5px;
|
||||
.sponsorSkipNoticeParent {
|
||||
position: absolute;
|
||||
|
||||
bottom: 100px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
.sponsorSkipNoticeParent, .sponsorSkipNotice {
|
||||
min-width: 350px;
|
||||
max-width: 50%;
|
||||
|
||||
border-spacing: 5px 10px;
|
||||
padding-left: 5px;
|
||||
@@ -138,17 +162,41 @@
|
||||
border-collapse: unset;
|
||||
}
|
||||
|
||||
.sponsorSkipNoticeTableContainer {
|
||||
background-color: rgba(28, 28, 28, 0.9);
|
||||
border-radius: 5px;
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.sponsorSkipNotice {
|
||||
transition: all 0.1s ease-out;
|
||||
}
|
||||
|
||||
.sponsorSkipNoticeLimitWidth {
|
||||
min-width: calc(100% - 50px);
|
||||
}
|
||||
|
||||
.sponsorSkipNotice .hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* For Cloudtube */
|
||||
.sponsorSkipNotice td, .sponsorSkipNotice table, .sponsorSkipNotice th {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.sponsorSkipNoticeFadeIn {
|
||||
animation: fadeIn 0.5s;
|
||||
animation: fadeIn 0.5s ease-out;
|
||||
}
|
||||
|
||||
.sponsorSkipNoticeFaded {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.sponsorSkipNoticeFadeOut {
|
||||
animation: fadeOut 3s cubic-bezier(0.55, 0.055, 0.675, 0.19);
|
||||
transition: opacity 3s cubic-bezier(0.55, 0.055, 0.675, 0.19);
|
||||
opacity: 0 !important;
|
||||
animation: none !important;
|
||||
}
|
||||
|
||||
.sponsorSkipNotice .sponsorSkipNoticeTimeLeft {
|
||||
@@ -158,14 +206,28 @@
|
||||
padding: 2px 5px;
|
||||
font-size: 12px;
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
border: 1px solid #eeeeee;
|
||||
}
|
||||
|
||||
.sponsorSkipNoticeTimeLeft img {
|
||||
vertical-align: middle;
|
||||
height: 13px;
|
||||
|
||||
padding-top: 7.8%;
|
||||
padding-bottom: 7.8%;
|
||||
}
|
||||
|
||||
/* if two are very close to eachother */
|
||||
.secondSkipNotice {
|
||||
bottom: 250px;
|
||||
bottom: 290px;
|
||||
}
|
||||
|
||||
transition: bottom 0.2s;
|
||||
.noticeLeftIcon {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.sponsorSkipNotice .sponsorSkipNoticeUnskipSection {
|
||||
@@ -197,19 +259,25 @@
|
||||
|
||||
.sponsorTimesVoteButtonsContainer {
|
||||
float: left;
|
||||
|
||||
vertical-align:middle;
|
||||
padding: 2px 5px;
|
||||
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.sponsorTimesVoteButtonsContainer div{
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.sponsorSkipNoticeRightSection {
|
||||
right: 0;
|
||||
position: absolute;
|
||||
|
||||
float: right;
|
||||
|
||||
margin-right: 5px;
|
||||
margin-right: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.sponsorSkipNoticeRightButton {
|
||||
@@ -227,12 +295,19 @@
|
||||
float: right;
|
||||
}
|
||||
|
||||
.sponsorSkipNoticeCloseButton.biggerCloseButton {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.sponsorSkipMessage {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
color: rgb(235, 235, 235);
|
||||
|
||||
margin-top: auto;
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
margin-bottom: auto;
|
||||
}
|
||||
|
||||
.sponsorSkipInfo {
|
||||
@@ -266,11 +341,11 @@
|
||||
.sponsorTimesInfoMessage {
|
||||
font-size: 13.3333px;
|
||||
color: rgb(235, 235, 235);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.voteButton {
|
||||
height: 17px;
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.voteButton:hover {
|
||||
@@ -422,7 +497,7 @@ input::-webkit-inner-spin-button {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.sponsorTimeCategories {
|
||||
.sponsorTimeEditSelector {
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
|
||||
@@ -445,4 +520,96 @@ input::-webkit-inner-spin-button {
|
||||
}
|
||||
.helpButton:hover {
|
||||
filter: brightness(80%);
|
||||
}
|
||||
}
|
||||
|
||||
.sbChatNotice iframe {
|
||||
height: 32px;
|
||||
cursor: pointer;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.sbChatClose {
|
||||
height: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.skipButtonControlBarContainer {
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.skipButtonControlBarContainer.hidden {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.skipButtonControlBarContainer.mobile {
|
||||
bottom: 30%;
|
||||
margin-left: 5px;
|
||||
position: absolute;
|
||||
height: 20px;
|
||||
|
||||
background-color: #00000030;
|
||||
opacity: 0.5;
|
||||
border-radius: 10px;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.skipButtonControlBarContainer.mobile.textDisabled {
|
||||
padding: 0;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.skipButtonControlBarContainer.mobile > div {
|
||||
margin: auto;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
#sbSkipIconControlBarImage {
|
||||
height: 60%;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
display: block;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.mobile #sbSkipIconControlBarImage {
|
||||
height: 100%;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
.sponsorBlockTooltip {
|
||||
position: absolute;
|
||||
background-color: rgba(28, 28, 28, 0.7);
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
max-width: 300px;
|
||||
white-space: normal;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
|
||||
.sponsorBlockTooltip::after {
|
||||
content: " ";
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 15%;
|
||||
margin-left: -15px;
|
||||
border-width: 15px;
|
||||
border-style: solid;
|
||||
border-color: rgba(28, 28, 28, 0.7) transparent transparent transparent;
|
||||
}
|
||||
|
||||
.sponsorBlockLockedColor {
|
||||
color: #ffc83d;
|
||||
}
|
||||
|
||||
.sponsorBlockRectangleTooltip {
|
||||
position: absolute;
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
min-width: 250px;
|
||||
min-height: 75px;
|
||||
white-space: normal;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
|
||||
|
||||
BIN
public/help/images/popup.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
public/help/images/voting on notice.gif
Normal file
|
After Width: | Height: | Size: 95 KiB |
@@ -3,8 +3,12 @@
|
||||
<head>
|
||||
<title> SponsorBlock </title>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<link href="styles.css" rel="stylesheet"/>
|
||||
|
||||
<script src="../js/vendor.js"></script>
|
||||
<script src="../js/help.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@@ -14,102 +18,90 @@
|
||||
SponsorBlock
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<div class="container sponsorBlockPageBody">
|
||||
|
||||
<p class="createdBy">Created By <a href="https://ajay.app">Ajay Ramachandran</a> <img src="https://ajay.app/newprofilepic.jpg" height="30" class="profilepiccircle"/></p>
|
||||
<p class="createdBy">
|
||||
<img src="https://ajay.app/newprofilepic.jpg" height="30" class="profilepiccircle"/>
|
||||
Created By <a href="https://ajay.app">Ajay Ramachandran</a>
|
||||
<a href="https://sponsor.ajay.app/donate" target="_blank" rel="noopener" id="sbDonate">(Donate)</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thanks for installing SponsorBlock. Here are some quick tips for getting started. Feel free to contact me if you have any questions. By using this extension, you agree to the <a href="https://gist.github.com/ajayyy/aa9f8ded2b573d4f73a3ffa0ef74f796">Privacy Policy</a>.
|
||||
__MSG_helpPageThanksForInstalling__ By using this extension, you agree to the <a href="https://gist.github.com/ajayyy/aa9f8ded2b573d4f73a3ffa0ef74f796">Privacy Policy</a> and <a href="https://gist.github.com/ajayyy/9e8100f069348e0bc062641f34d6af12">Terms of Use</a>.
|
||||
</p>
|
||||
|
||||
<p class="projectPreview">
|
||||
Come contribute, make some suggestions and help out in the Discord: <a href="https://discord.gg/QnmVMpU">https://discord.gg/QnmVMpU</a>
|
||||
</p>
|
||||
|
||||
<p style="margin-bottom: 0" class="bigText center">Please review the options below</p>
|
||||
|
||||
<p>
|
||||
Many features are disabled by default. If you want to skip Intros, outros, use Invidious, please enable the specific options. These can be enabled or disabled at any time.
|
||||
You can also hide/show all UI elements added to the YouTube page.
|
||||
Come contribute, make some suggestions and help out on <a href="https://discord.gg/SponsorBlock">Discord</a> or on <a href="https://matrix.to/#/#sponsor:ajay.app?via=ajay.app&via=matrix.org&via=mozilla.org">Matrix</a>.
|
||||
</p>
|
||||
|
||||
<iframe src="../options/options.html#embed" width="100%" height="500px" style="border: none"></iframe>
|
||||
<p style="margin-bottom: 0; margin-top: 0" class="bigText center">__MSG_helpPageReviewOptions__</p>
|
||||
|
||||
<h1>How skipping works</h1>
|
||||
<p class="smallText">
|
||||
__MSG_helpPageFeatureDisclaimer__
|
||||
</p>
|
||||
|
||||
<iframe class="optionsFrame" src="../options/options.html#embed" style="border: none"></iframe>
|
||||
|
||||
<h1>__MSG_helpPageHowSkippingWorks__</h1>
|
||||
|
||||
<p class="projectPreview">
|
||||
<span class="projectPreviewImageLarge">
|
||||
<img src="https://i.imgur.com/caf5Bju.png">
|
||||
<img src="images/popup.png">
|
||||
</span>
|
||||
|
||||
Video segments will automatically be skipped if they are found in the database. You can open the popup by clicking the extension icon to get a preview of what they are.
|
||||
__MSG_helpPageHowSkippingWorks1__
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
Whenever you skip a segment, you will get notice. If the timing seems wrong vote down by clicking downvote! You can also vote in the popup.
|
||||
__MSG_helpPageHowSkippingWorks2__
|
||||
</p>
|
||||
|
||||
<div class="center"><img height="120px" src="https://user-images.githubusercontent.com/12688112/63067735-5a638700-bede-11e9-8147-f321b57527ec.gif"></div>
|
||||
<div class="center"><img src="images/voting on notice.gif"></div>
|
||||
|
||||
<h1>Submitting</h1>
|
||||
<h1>__MSG_Submitting__</h1>
|
||||
|
||||
<p class="projectPreview">
|
||||
<span class="projectPreviewImageLargeRight">
|
||||
<img src="https://i.imgur.com/A1ilk6x.gif">
|
||||
</span>
|
||||
<img class="projectPreviewImageLarge" src="https://i.imgur.com/A1ilk6x.gif">
|
||||
|
||||
Submitting can either be done in the popup by hitting the "Sponsorship Starts Now" button or in the video player with the buttons on the player.
|
||||
__MSG_helpPageSubmitting1__
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
Clicking the play button indicated the start of a sponsorship section and clicking the stop icon indicates the end. You can prepare multiple sponsors before hitting submit. Clicking the upload button will submit. Clicking the garbage can will delete.
|
||||
__MSG_helpPageSubmitting2__
|
||||
</p>
|
||||
|
||||
<h1>Editing</h1>
|
||||
<h1>__MSG_Editing__</h1>
|
||||
|
||||
<p class="projectPreview">
|
||||
<span class="projectPreviewImageLarge">
|
||||
<img src="https://i.imgur.com/DZHqbsx.gif">
|
||||
<img src="https://wiki.sponsor.ajay.app/images/6/6a/Popup_only.png">
|
||||
</span>
|
||||
|
||||
If you messed up, you can edit or delete your sponsor times in the popup or in the info menu (by hitting the info icon).
|
||||
__MSG_helpPageEditing1__
|
||||
|
||||
</p>
|
||||
|
||||
<h1>This is too slow</h1>
|
||||
<h1>__MSG_helpPageTooSlow__</h1>
|
||||
|
||||
<p>
|
||||
There are hotkeys if you want to use them. You must be focused on the YouTube player to use them. Press the semicolon key to indicate the start/end of a sponsor segment and click the apostrophe to submit.
|
||||
These can be changed in the options. If you don't use QWERTY, you should probably change the keybinding.
|
||||
__MSG_helpPageTooSlow1__
|
||||
</p>
|
||||
|
||||
<h1>I hate these buttons, they are so ugly</h1>
|
||||
<h1>__MSG_helpPageCopyOfDatabase__</h1>
|
||||
|
||||
<p>
|
||||
All player buttons can be hidden in the options.
|
||||
__MSG_helpPageCopyOfDatabase1__ <a href="https://sponsor.ajay.app/database">https://sponsor.ajay.app/database</a>. __MSG_helpPageCopyOfDatabase2__
|
||||
</p>
|
||||
|
||||
<h1>Can I get a copy of the Database? What happens if you disappear?</h1>
|
||||
|
||||
<p>
|
||||
The database is public and available at <a href="https://sponsor.ajay.app/database.db">https://sponsor.ajay.app/database.db</a>. The source code is freely available. So, even if something happens to me, your submissions are not lost.
|
||||
</p>
|
||||
|
||||
<h1>News and how it is made</h1>
|
||||
<h1>__MSG_helpPageNews__</h1>
|
||||
|
||||
<p>
|
||||
See <a href="https://sponsor.ajay.app/news">https://sponsor.ajay.app/news</a>.
|
||||
</p>
|
||||
|
||||
<h1>I want more features!</h1>
|
||||
|
||||
<p>
|
||||
Ask on Discord or make an Issue on GitHub. I am happy to hear suggestions or improvements you want. You may also contribute code or graphics if you would like.
|
||||
</p>
|
||||
|
||||
<h1>Where can I get the source code?</h1>
|
||||
<h1>__MSG_helpPageSourceCode__</h1>
|
||||
|
||||
<h4 style="display: inline">Client:</h4>
|
||||
<!-- Github logo -->
|
||||
@@ -119,14 +111,14 @@
|
||||
<!-- Github logo -->
|
||||
<a href="https://github.com/ajayyy/SponsorBlockServer"><svg aria-hidden="true" version="1.1" viewBox="0 0 16 16" height="58px" style="padding-left: 15px"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg></a>
|
||||
|
||||
<h1>Credits</h1>
|
||||
<h1>__MSG_Credits__</h1>
|
||||
|
||||
<p>
|
||||
Thanks to all <a href="https://github.com/ajayyy/SponsorBlock/graphs/contributors">SponsorBlock contributors</a>,
|
||||
<a href="https://github.com/ajayyy/SponsorBlockServer/graphs/contributors">SponsorBlockServer contributors</a> and
|
||||
<a href="https://github.com/ajayyy/SponsorBlockSite/graphs/contributors">SponsorBlockSite contributors</a> such
|
||||
as <a href="https://github.com/NDevTK">NDev</a>, <a href="https://github.com/Joe-Dowd">Joe Dowd</a>,
|
||||
<a href="https://github.com/bershanskiy">Anton Bershanskiy</a> and more.
|
||||
<a href="https://mchang.name/">Michael Chang</a> and more.
|
||||
</p>
|
||||
|
||||
<p>The awesome <a href="https://github.com/omarroth/invidious/wiki/API">Invidious API</a> is used to grab the time the video was published.</p>
|
||||
@@ -1,3 +1,7 @@
|
||||
html {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
.bigText {
|
||||
font-size: 50px;
|
||||
}
|
||||
@@ -36,14 +40,6 @@ body {
|
||||
transform: translateY(-20%);
|
||||
}
|
||||
|
||||
.projectPreviewImageLargeRight {
|
||||
position: absolute;
|
||||
right: -210px;
|
||||
width: 200px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
.createdBy {
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
@@ -125,8 +121,11 @@ a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
p,li {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
p,li,a {
|
||||
font-size: 20px;
|
||||
color: #c4c4c4;
|
||||
}
|
||||
|
||||
@@ -135,18 +134,9 @@ p,li,code,a {
|
||||
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;
|
||||
}
|
||||
.optionsFrame {
|
||||
width: 100%;
|
||||
height: 500px;
|
||||
}
|
||||
|
||||
.previewImage {
|
||||
@@ -176,4 +166,37 @@ h1,h2,h3,h4,h5,h6 {
|
||||
|
||||
svg {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#sbDonate {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
@media screen and (orientation:portrait) {
|
||||
.projectPreviewImage {
|
||||
position: unset;
|
||||
width: 50%;
|
||||
display: block;
|
||||
margin: auto;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
.projectPreviewImageLarge {
|
||||
position: unset;
|
||||
left: 0;
|
||||
width: 50%;
|
||||
display: block;
|
||||
margin: auto;
|
||||
transform: unset;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 100%;
|
||||
margin: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
p,li,code,a {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
@@ -41,12 +41,13 @@
|
||||
id="namedview18"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.83098592"
|
||||
inkscape:cx="-238.41697"
|
||||
inkscape:cy="258.22009"
|
||||
inkscape:cx="220.07455"
|
||||
inkscape:cy="308.76246"
|
||||
inkscape:window-x="477"
|
||||
inkscape:window-y="961"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg16" />
|
||||
inkscape:current-layer="svg16"
|
||||
inkscape:pagecheckerboard="true" />
|
||||
<defs
|
||||
id="defs4">
|
||||
<style
|
||||
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.1 KiB |
59
public/icons/pause.svg
Normal file
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="24px"
|
||||
viewBox="0 0 24 24"
|
||||
width="24px"
|
||||
fill="#000000"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="pause.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<metadata
|
||||
id="metadata12">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs10" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="730"
|
||||
inkscape:window-height="480"
|
||||
id="namedview8"
|
||||
showgrid="false"
|
||||
inkscape:zoom="9.8333333"
|
||||
inkscape:cx="12"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg6" />
|
||||
<path
|
||||
d="M0 0h24v24H0z"
|
||||
fill="none"
|
||||
id="path2" />
|
||||
<path
|
||||
d="M6 19h4V5H6v14zm8-14v14h4V5h-4z"
|
||||
id="path4"
|
||||
style="fill:#ffffff" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
1
public/icons/refresh.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"/></svg>
|
||||
|
After Width: | Height: | Size: 361 B |
71
public/icons/skipIcon.svg
Normal file
@@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 565.15 568"
|
||||
version="1.1"
|
||||
id="svg16"
|
||||
sodipodi:docname="skipIcon.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
inkscape:export-filename="D:\Dell Data\_Projects\_____SponsorSkip\ignored\svg\SponsorBlocker4.png"
|
||||
inkscape:export-xdpi="43.436523"
|
||||
inkscape:export-ydpi="43.436523">
|
||||
<metadata
|
||||
id="metadata20">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>LogoSponsorBlocker2</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
id="namedview18"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.6619718"
|
||||
inkscape:cx="316.31071"
|
||||
inkscape:cy="330.01409"
|
||||
inkscape:window-x="477"
|
||||
inkscape:window-y="961"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg16"
|
||||
inkscape:pagecheckerboard="true" />
|
||||
<defs
|
||||
id="defs4">
|
||||
<style
|
||||
id="style2">.cls-1{fill:red;}.cls-2{fill:#fff;}</style>
|
||||
</defs>
|
||||
<title
|
||||
id="title6">LogoSponsorBlocker2</title>
|
||||
<path
|
||||
class="cls-1"
|
||||
d="m 282.58,568 a 65,65 0 0 1 -34.14,-9.66 C 95.41,463.94 2.54,300.46 0,121 a 64.91,64.91 0 0 1 34,-58.09 522.56,522.56 0 0 1 497.16,0 64.91,64.91 0 0 1 34,58.12 c -2.53,179.43 -95.4,342.91 -248.42,437.3 A 65,65 0 0 1 282.58,568 Z m 0,-548.31 A 502.24,502.24 0 0 0 43.4,80.22 45.27,45.27 0 0 0 19.7,120.75 c 2.44,172.67 91.81,330 239.07,420.83 a 46.19,46.19 0 0 0 47.61,0 C 453.64,450.73 543,293.42 545.45,120.75 A 45.26,45.26 0 0 0 521.75,80.21 502.26,502.26 0 0 0 282.58,19.69 Z"
|
||||
id="path8"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
style="fill:#ffffff"
|
||||
d="M 284.70508 42.693359 A 479.9 479.9 0 0 0 54.369141 100.41992 A 22.53 22.53 0 0 0 42.669922 120.41992 C 45.069922 290.25992 135.67008 438.63977 270.83008 522.00977 A 22.48 22.48 0 0 0 294.32031 522.00977 C 429.48031 438.63977 520.08047 290.25992 522.48047 120.41992 A 22.53 22.53 0 0 0 510.7793 100.41992 A 479.9 479.9 0 0 0 284.70508 42.693359 z M 188.7168 140.07227 L 312.64844 264.00586 L 188.7168 387.9375 L 159.5918 358.8125 L 254.19336 264.00586 L 159.5918 169.19727 L 188.7168 140.07227 z M 305.625 140.07227 L 429.55859 264.00586 L 305.625 387.9375 L 276.50195 358.8125 L 371.10352 264.00586 L 276.50195 169.19727 L 305.625 140.07227 z "
|
||||
id="path10" />
|
||||
<g
|
||||
id="g825"
|
||||
transform="translate(-3.86549,36.564644)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
59
public/icons/stop.svg
Normal file
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="24px"
|
||||
viewBox="0 0 24 24"
|
||||
width="24px"
|
||||
fill="#000000"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="stop.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<metadata
|
||||
id="metadata12">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs10" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="730"
|
||||
inkscape:window-height="480"
|
||||
id="namedview8"
|
||||
showgrid="false"
|
||||
inkscape:zoom="9.8333333"
|
||||
inkscape:cx="12"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg6" />
|
||||
<path
|
||||
d="M0 0h24v24H0z"
|
||||
fill="none"
|
||||
id="path2" />
|
||||
<path
|
||||
d="M6 6h12v12H6z"
|
||||
id="path4"
|
||||
style="fill:#ffffff" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
58
public/icons/thumbs_down_locked.svg
Normal file
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
width="24"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="thumbs_down.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<metadata
|
||||
id="metadata12">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs10" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="730"
|
||||
inkscape:window-height="480"
|
||||
id="namedview8"
|
||||
showgrid="false"
|
||||
inkscape:zoom="9.8333333"
|
||||
inkscape:cx="12"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg6" />
|
||||
<path
|
||||
d="M0 0h24v24H0z"
|
||||
fill="none"
|
||||
id="path2" />
|
||||
<path
|
||||
d="M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v2c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z"
|
||||
id="path4"
|
||||
style="fill:#ffc83d" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -1,4 +1,8 @@
|
||||
/* Options page CSS */
|
||||
html {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
@@ -66,6 +70,12 @@ body {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#options.embed {
|
||||
max-width: 100%;
|
||||
text-align: left;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.switch-container {
|
||||
content: attr(label-name);
|
||||
position: absolute;
|
||||
@@ -333,10 +343,13 @@ svg {
|
||||
|
||||
.categoryTableElement > * {
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
.categoryTableDescription > * {
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.categoryOptionsSelector {
|
||||
.optionsSelector {
|
||||
background-color: #c00000;
|
||||
color: white;
|
||||
|
||||
@@ -351,4 +364,8 @@ svg {
|
||||
|
||||
background: none;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#sbDonate {
|
||||
font-size: 10px;
|
||||
}
|
||||
@@ -19,7 +19,12 @@
|
||||
</div>
|
||||
|
||||
<div class="center">
|
||||
<p class="createdBy titleBar">__MSG_createdBy__ <a href="https://ajay.app">Ajay Ramachandran</a> <img src="../icons/newprofilepic.jpg" height="30" class="profilepiccircle"/></p>
|
||||
<p class="createdBy titleBar">
|
||||
<img src="../icons/newprofilepic.jpg" height="30" class="profilepiccircle"/>
|
||||
__MSG_createdBy__
|
||||
<a href="https://ajay.app">Ajay Ramachandran</a>
|
||||
<a href="https://sponsor.ajay.app/donate" target="_blank" rel="noopener" id="sbDonate">(__MSG_Donate__)</a>
|
||||
</p>
|
||||
|
||||
<h1>__MSG_Options__</h1>
|
||||
|
||||
@@ -29,6 +34,38 @@
|
||||
|
||||
</div>
|
||||
|
||||
<div option-type="toggle" sync-option="autoSkipOnMusicVideos">
|
||||
<label class="switch-container">
|
||||
<label class="switch">
|
||||
<input type="checkbox" checked>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<div class="switch-label">
|
||||
__MSG_autoSkipOnMusicVideos__
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
|
||||
<div option-type="toggle" sync-option="muteSegments">
|
||||
<label class="switch-container">
|
||||
<label class="switch">
|
||||
<input type="checkbox" checked>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<div class="switch-label">
|
||||
__MSG_muteSegments__
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
@@ -152,6 +189,20 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div option-type="number-change" sync-option="skipNoticeDuration">
|
||||
<label class="number-container">
|
||||
<input type="number" step="1" min="1">
|
||||
</label>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div class="small-description">__MSG_skipNoticeDurationDescription__</div>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
@@ -180,11 +231,24 @@
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div option-type="selector" sync-option="noticeVisibilityMode">
|
||||
<select class="selector-element optionsSelector" >
|
||||
<option value="0">__MSG_noticeVisibilityMode0__</option>
|
||||
<option value="1">__MSG_noticeVisibilityMode1__</option>
|
||||
<option value="2">__MSG_noticeVisibilityMode2__</option>
|
||||
<option value="3">__MSG_noticeVisibilityMode3__</option>
|
||||
<option value="4">__MSG_noticeVisibilityMode4__</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div option-type="toggle" sync-option="forceChannelCheck">
|
||||
<label class="switch-container">
|
||||
<label class="switch">
|
||||
@@ -223,7 +287,22 @@
|
||||
|
||||
<div class="small-description">__MSG_hideButtonsDescription__</div>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
|
||||
<div option-type="toggle" toggle-type="reverse" sync-option="hideSkipButtonPlayerControls">
|
||||
<label class="switch-container">
|
||||
<label class="switch">
|
||||
<input type="checkbox" checked>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<div class="switch-label">
|
||||
__MSG_showSkipButton__
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
@@ -237,14 +316,25 @@
|
||||
__MSG_showInfoButton__
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div class="small-description">__MSG_whatInfoButton__</div>
|
||||
</div>
|
||||
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div option-type="toggle" sync-option="autoHideInfoButton" if-false="hideInfoButtonPlayerControls">
|
||||
<label class="switch-container">
|
||||
<label class="switch">
|
||||
<input type="checkbox" checked>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<div class="switch-label">
|
||||
__MSG_autoHideInfoButton__
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
@@ -258,14 +348,9 @@
|
||||
__MSG_showDeleteButton__
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div class="small-description">__MSG_whatDeleteButton__</div>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
@@ -279,14 +364,10 @@
|
||||
__MSG_showUploadButton__
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div class="small-description">__MSG_whatUploadButton__</div>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
@@ -390,6 +471,24 @@
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div option-type="toggle" toggle-type="reverse" sync-option="showDonationLink" no-safari="true">
|
||||
<label class="switch-container">
|
||||
<label class="switch">
|
||||
<input type="checkbox" checked>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<div class="switch-label">
|
||||
__MSG_hideDonationLink__
|
||||
</div>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div option-type="private-text-change" sync-option="userID" confirm-message="userIDChangeWarning">
|
||||
<div class="option-button trigger-button">
|
||||
@@ -456,7 +555,7 @@
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div option-type="toggle" sync-option="testingServer" confirm-message="testingServerWarning">
|
||||
<div option-type="toggle" sync-option="testingServer" confirm-message="testingServerWarning" no-safari="true">
|
||||
<label class="switch-container">
|
||||
<label class="switch">
|
||||
<input type="checkbox">
|
||||
@@ -472,10 +571,11 @@
|
||||
<br/>
|
||||
|
||||
<div class="small-description">__MSG_whatEnableTestingServer__</div>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
|
||||
<div option-type="text-change" sync-option="serverAddress">
|
||||
<label class="text-label-container">
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
/* Options page CSS */
|
||||
html {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
--sb-green-bg: #077B27;
|
||||
}
|
||||
|
||||
#sponsorBlockPopupHTML {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
#sponsorBlockPopupBody .hidden {
|
||||
display: none !important;
|
||||
}
|
||||
@@ -28,6 +32,8 @@
|
||||
margin: auto;
|
||||
width: 374px;
|
||||
background: var(--sb-main-bg-color);
|
||||
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
#sponsorblockPopup {
|
||||
@@ -40,6 +46,7 @@
|
||||
width: 330px;
|
||||
padding: 22px;
|
||||
text-align: center;
|
||||
margin-bottom: var(--ytd-margin-6x);
|
||||
}
|
||||
|
||||
#issueReporterTimeButtons > .votingButtons > .segmentTimeButton {
|
||||
@@ -259,7 +266,7 @@ background-color:#ec1c1c;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#additionalButtons>button, button#setUsernameButton, #submitUsername {
|
||||
.sbSlimButton, #additionalButtons>button, button#setUsernameButton, #submitUsername, #copyUserID {
|
||||
background: none;
|
||||
border: none;
|
||||
color: white;
|
||||
@@ -269,6 +276,10 @@ background-color:#ec1c1c;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button#setUsernameButton {
|
||||
flex: 0 1;
|
||||
}
|
||||
|
||||
#submitUsername {
|
||||
padding-left: 5pt;
|
||||
}
|
||||
@@ -279,6 +290,7 @@ background-color:#ec1c1c;
|
||||
|
||||
#usernameValue, #usernameInput, #sponsorTimesContributionsDisplay{
|
||||
font-size: 16px;
|
||||
flex: 1 0;
|
||||
}
|
||||
|
||||
.SBWhitelistIcon {
|
||||
@@ -312,6 +324,11 @@ label>p, #disableExtension>p, #usernameValue, #usernameElement > div > p,#sponso
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
from { transform: rotate(0deg); }
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
.SBWhitelistIconContainer, button#optionsButton {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -321,15 +338,24 @@ label>p, #disableExtension>p, #usernameValue, #usernameElement > div > p,#sponso
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
#whitelistButton>label, #additionalButtons>button, div#setUsernameContainer {
|
||||
#whitelistButton>label, #additionalButtons>button, div#setUsernameContainer>button {
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
}
|
||||
|
||||
#whitelistButton>label, #additionalButtons>button, div#setUsernameContainer>button {
|
||||
.sbSlimButton, #whitelistButton>label, #additionalButtons>button, div#setUsernameContainer>button {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#copyUserID {
|
||||
width: 100%;
|
||||
flex: 0 1;
|
||||
}
|
||||
|
||||
#setUsernameContainer {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#usernameElement > div, #sponsorTimesContributionsContainer > div {
|
||||
display: flex;
|
||||
flex-flow: column nowrap;
|
||||
|
||||
@@ -1,149 +1,157 @@
|
||||
<head>
|
||||
<title>__MSG_openPopup__</title>
|
||||
<link id="sponsorBlockPopupFont" rel="stylesheet" type="text/css" href="/libs/Source+Sans+Pro.css">
|
||||
<link id="sponsorBlockStyleSheet" rel="stylesheet" type="text/css" href="popup.css">
|
||||
<html id="sponsorBlockPopupHTML">
|
||||
<head>
|
||||
<title>__MSG_openPopup__</title>
|
||||
<link id="sponsorBlockPopupFont" rel="stylesheet" type="text/css" href="/libs/Source+Sans+Pro.css">
|
||||
<link id="sponsorBlockStyleSheet" rel="stylesheet" type="text/css" href="popup.css">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
</head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
</head>
|
||||
|
||||
<body id="sponsorBlockPopupBody">
|
||||
<div id="sponsorblockPopup" class="sponsorBlockPageBody preload">
|
||||
<div class="logoText bottomSpace">
|
||||
<img src="icons/IconSponsorBlocker256px.png" height="40px" id="sponsorBlockPopupLogo">
|
||||
<p>SponsorBlock</p>
|
||||
</div>
|
||||
<div id="videoInfo" class="bottomSpace">
|
||||
<div class="bottomSpace">
|
||||
<!-- Loading text -->
|
||||
<p id="loadingIndicator">__MSG_noVideoID__</p>
|
||||
<!-- If the video was found in the database -->
|
||||
<p id="videoFound"></p>
|
||||
<body id="sponsorBlockPopupBody">
|
||||
<div id="sponsorblockPopup" class="sponsorBlockPageBody preload">
|
||||
<div class="logoText bottomSpace">
|
||||
<img src="icons/IconSponsorBlocker256px.png" height="40px" id="sponsorBlockPopupLogo">
|
||||
<p>SponsorBlock</p>
|
||||
</div>
|
||||
<div id="issueReporterContainer">
|
||||
<div id="issueReporterTimeButtons"></div>
|
||||
<div id="videoInfo" class="bottomSpace">
|
||||
<div class="bottomSpace">
|
||||
<!-- Loading text -->
|
||||
<p id="loadingIndicator">__MSG_noVideoID__</p>
|
||||
<!-- If the video was found in the database -->
|
||||
<p id="videoFound"></p>
|
||||
<button class="sbSlimButton" id="refreshSegmentsButton" title="__MSG_refreshSegments__">
|
||||
<img id="refreshSegments" src="/icons/refresh.svg"/>
|
||||
</button>
|
||||
</div>
|
||||
<div id="issueReporterContainer">
|
||||
<div id="issueReporterTimeButtons"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebyside">
|
||||
<div id="disableExtension">
|
||||
<!--github: mbledkowski/toggle-switch-->
|
||||
<label for="toggleSwitch" class="toggleSwitchContainer">
|
||||
<input type="checkbox" style="display:none;" id="toggleSwitch" checked>
|
||||
<span class="switchBg shadow"></span>
|
||||
<span class="switchBg white"></span>
|
||||
<span class="switchBg green"></span>
|
||||
<span class="switchDot"></span>
|
||||
</label>
|
||||
<p id="disableSkipping">__MSG_disableSkipping__</p>
|
||||
<p id="enableSkipping" style="display: none">__MSG_enableSkipping__</p>
|
||||
</div>
|
||||
<div id="additionalButtons">
|
||||
<!-- grayedOut until loading complete -->
|
||||
<div id="whitelistButton" class="hidden bottomSpace" title="__MSG_forceChannelCheckPopup__">
|
||||
<input type="checkbox" style="display:none;" id="whitelistToggle">
|
||||
<label for="whitelistToggle" class="whitelistToggleText">
|
||||
<div class="SBWhitelistIconContainer">
|
||||
<svg viewBox="0 0 24 24" width="16" height="16" class="SBWhitelistIcon">
|
||||
<path d="M24 10H14V0h-4v10H0v4h10v10h4V14h10z" />
|
||||
</svg>
|
||||
</div>
|
||||
<p id="whitelistChannel">__MSG_whitelistChannel__</p>
|
||||
<p id="unwhitelistChannel" style="display: none">__MSG_removeFromWhitelist__</p>
|
||||
<div class="sidebyside">
|
||||
<div id="disableExtension">
|
||||
<!--github: mbledkowski/toggle-switch-->
|
||||
<label for="toggleSwitch" class="toggleSwitchContainer">
|
||||
<input type="checkbox" style="display:none;" id="toggleSwitch" checked>
|
||||
<span class="switchBg shadow"></span>
|
||||
<span class="switchBg white"></span>
|
||||
<span class="switchBg green"></span>
|
||||
<span class="switchDot"></span>
|
||||
</label>
|
||||
<p id="disableSkipping">__MSG_disableSkipping__</p>
|
||||
<p id="enableSkipping" style="display: none">__MSG_enableSkipping__</p>
|
||||
</div>
|
||||
<button id="optionsButton" title="__MSG_optionsInfo__">
|
||||
<img src="/icons/settings.svg" alt="Settings icon" width="16" height="16" id="sbPopupIconSettings">
|
||||
__MSG_Options__
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="whitelistForceCheck" class="hidden">
|
||||
__MSG_forceChannelCheckPopup__
|
||||
</div>
|
||||
|
||||
<div id="mainControls" style="display: none">
|
||||
<p class="sbHeader sbSubHeader">
|
||||
__MSG_recordTimesDescription__
|
||||
</p>
|
||||
<sub style="margin-bottom: 12px;">__MSG_popupHint__</sub>
|
||||
<div>
|
||||
<button id="sponsorStart" class="mediumButton">__MSG_sponsorStart__</button>
|
||||
</div>
|
||||
<div id="submissionSection" style="display: none">
|
||||
<b style="display: block; margin-top: 12px;">__MSG_submissionEditHint__</b>
|
||||
<div id="submitTimesContainer" style="margin-top: 12px;">
|
||||
<button id="submitTimes" class="mediumButton">__MSG_submitTimesButton__</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1 class="recordingSubtitle sbHeader sbSubHeader">__MSG_yourWork__</h1>
|
||||
<div class="sidebyside">
|
||||
<div id="usernameElement">
|
||||
<div>
|
||||
<p>__MSG_Username__:</p>
|
||||
<div id="setUsernameContainer">
|
||||
<p id="usernameValue"></p>
|
||||
<button id="setUsernameButton" title="__MSG_setUsername__">
|
||||
<img src="/icons/pencil.svg" alt="__MSG_setUsername__" width="16" height="16" id="sbPopupIconEdit">
|
||||
</button>
|
||||
<div id="additionalButtons">
|
||||
<!-- grayedOut until loading complete -->
|
||||
<div id="whitelistButton" class="hidden bottomSpace" title="__MSG_forceChannelCheckPopup__">
|
||||
<input type="checkbox" style="display:none;" id="whitelistToggle">
|
||||
<label for="whitelistToggle" class="whitelistToggleText">
|
||||
<div class="SBWhitelistIconContainer">
|
||||
<svg viewBox="0 0 24 24" width="16" height="16" class="SBWhitelistIcon">
|
||||
<path d="M24 10H14V0h-4v10H0v4h10v10h4V14h10z" />
|
||||
</svg>
|
||||
</div>
|
||||
<p id="whitelistChannel">__MSG_whitelistChannel__</p>
|
||||
<p id="unwhitelistChannel" style="display: none">__MSG_removeFromWhitelist__</p>
|
||||
</label>
|
||||
</div>
|
||||
<div id="setUsername" style="display: none">
|
||||
<div id="setUsernameStatusContainer" style="display: none">
|
||||
<p id="setUsernameStatus"></p>
|
||||
<button id="optionsButton" title="__MSG_optionsInfo__">
|
||||
<img src="/icons/settings.svg" alt="Settings icon" width="16" height="16" id="sbPopupIconSettings">
|
||||
__MSG_Options__
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="whitelistForceCheck" class="hidden">
|
||||
__MSG_forceChannelCheckPopup__
|
||||
</div>
|
||||
|
||||
<div id="mainControls" style="display: none">
|
||||
<p class="sbHeader sbSubHeader">
|
||||
__MSG_recordTimesDescription__
|
||||
</p>
|
||||
<sub style="margin-bottom: 12px;">__MSG_popupHint__</sub>
|
||||
<div>
|
||||
<button id="sponsorStart" class="mediumButton">__MSG_sponsorStart__</button>
|
||||
</div>
|
||||
<div id="submissionSection" style="display: none">
|
||||
<b style="display: block; margin-top: 12px;">__MSG_submissionEditHint__</b>
|
||||
<div id="submitTimesContainer" style="margin-top: 12px;">
|
||||
<button id="submitTimes" class="mediumButton">__MSG_submitTimesButton__</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1 class="recordingSubtitle sbHeader sbSubHeader">__MSG_yourWork__</h1>
|
||||
<div class="sidebyside">
|
||||
<div id="usernameElement">
|
||||
<div>
|
||||
<p>__MSG_Username__:</p>
|
||||
<div id="setUsernameContainer">
|
||||
<p id="usernameValue"></p>
|
||||
<button id="setUsernameButton" title="__MSG_setUsername__">
|
||||
<img src="/icons/pencil.svg" alt="__MSG_setUsername__" width="16" height="16" id="sbPopupIconEdit">
|
||||
</button>
|
||||
<button id="copyUserID" title="__MSG_copyPublicID__">
|
||||
<img src="/icons/clipboard.svg" alt="__MSG_copyPublicID__" width="16" height="16" id="sbPopupIconCopyUserID">
|
||||
</button>
|
||||
</div>
|
||||
<input id="usernameInput" hint="Username"></input>
|
||||
<button id="submitUsername">
|
||||
<img src="/icons/check.svg" alt="__MSG_setUsername__" width="16" height="16" id="sbPopupIconCheck">
|
||||
</button>
|
||||
<div id="setUsername" style="display: none">
|
||||
<div id="setUsernameStatusContainer" style="display: none">
|
||||
<p id="setUsernameStatus"></p>
|
||||
</div>
|
||||
<input id="usernameInput" hint="Username"></input>
|
||||
<button id="submitUsername">
|
||||
<img src="/icons/check.svg" alt="__MSG_setUsername__" width="16" height="16" id="sbPopupIconCheck">
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="sponsorTimesContributionsContainer" class="hidden">
|
||||
<div>
|
||||
<p>__MSG_Submissions__:</p>
|
||||
<span id="sponsorTimesContributionsDisplay">
|
||||
0
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="sponsorTimesContributionsContainer" class="hidden">
|
||||
<div>
|
||||
<p>__MSG_Submissions__:</p>
|
||||
<span id="sponsorTimesContributionsDisplay">
|
||||
|
||||
<span id="sponsorTimesViewsContainer" style="display: none">
|
||||
__MSG_savedPeopleFrom__
|
||||
<b><span id="sponsorTimesViewsDisplay">
|
||||
0
|
||||
</span></b>
|
||||
<span id="sponsorTimesViewsDisplayEndWord">__MSG_Segments__</span>
|
||||
<br>
|
||||
(<b><span id="sponsorTimesOthersTimeSavedDisplay">0</span>
|
||||
<span id="sponsorTimesOthersTimeSavedEndWord">__MSG_minsLower__</span></b>
|
||||
<span>__MSG_youHaveSavedTimeEnd__</span>).
|
||||
</span>
|
||||
<div id="sponsorTimesSkipsDoneContainer" style="display: none">
|
||||
__MSG_youHaveSkipped__
|
||||
<b><span id="sponsorTimesSkipsDoneDisplay">
|
||||
0
|
||||
</span></b>
|
||||
<span id="sponsorTimesSkipsDoneEndWord">__MSG_Segments__</span>
|
||||
(<b><span id="sponsorTimeSavedDisplay">
|
||||
0
|
||||
</span>
|
||||
</div>
|
||||
<span id="sponsorTimeSavedEndWord">__MSG_minsLower__</span></b>).
|
||||
</div>
|
||||
</div>
|
||||
<footer id="sbFooter">
|
||||
<a href="https://sponsor.ajay.app" target="_blank" rel="noopener">__MSG_website__</a> |
|
||||
<a href="https://sponsor.ajay.app/stats" target="_blank" rel="noopener">__MSG_viewLeaderboard__</a> |
|
||||
<a href="https://github.com/ajayyy/SponsorBlock" target="_blank" rel="noopener">GitHub</a>
|
||||
<br/>
|
||||
<a href="https://discord.gg/SponsorBlock" target="_blank" rel="noopener">Discord</a> |
|
||||
<a href="https://matrix.to/#/#sponsor:ajay.app?via=ajay.app&via=matrix.org&via=mozilla.org" target="_blank" rel="noopener">Matrix</a> |
|
||||
<a id="helpButton" style="cursor: pointer;">__MSG_help__</a> |
|
||||
<a href="https://sponsor.ajay.app/donate" target="_blank" rel="noopener" id="sbDonate">$</a>
|
||||
</footer>
|
||||
|
||||
<span id="sponsorTimesViewsContainer" style="display: none">
|
||||
__MSG_savedPeopleFrom__
|
||||
<b><span id="sponsorTimesViewsDisplay">
|
||||
0
|
||||
</span></b>
|
||||
<span id="sponsorTimesViewsDisplayEndWord">__MSG_Segments__</span>
|
||||
<br>
|
||||
(<b><span id="sponsorTimesOthersTimeSavedDisplay">0</span>
|
||||
<span id="sponsorTimesOthersTimeSavedEndWord">__MSG_minsLower__</span></b>
|
||||
<span>__MSG_youHaveSavedTimeEnd__</span>).
|
||||
</span>
|
||||
<div id="sponsorTimesSkipsDoneContainer" style="display: none">
|
||||
__MSG_youHaveSkipped__
|
||||
<b><span id="sponsorTimesSkipsDoneDisplay">
|
||||
0
|
||||
</span></b>
|
||||
<span id="sponsorTimesSkipsDoneEndWord">__MSG_Segments__</span>
|
||||
(<b><span id="sponsorTimeSavedDisplay">
|
||||
0
|
||||
</span>
|
||||
<span id="sponsorTimeSavedEndWord">__MSG_minsLower__</span></b>).
|
||||
<button id="showNoticeAgain" style="display: none" class="dangerButton popupElement">__MSG_showNotice__</button>
|
||||
</div>
|
||||
<footer id="sbFooter">
|
||||
<a href="https://sponsor.ajay.app" target="_blank" rel="noopener">__MSG_website__</a> |
|
||||
<a href="https://sponsor.ajay.app/stats" target="_blank" rel="noopener">__MSG_viewLeaderboard__</a> |
|
||||
<a href="https://github.com/ajayyy/SponsorBlock" target="_blank" rel="noopener">GitHub</a>
|
||||
<br/>
|
||||
<a href="https://discord.gg/QnmVMpU" target="_blank" rel="noopener">Discord</a> |
|
||||
<a href="https://matrix.to/#/#sponsor:ajay.app?via=ajay.app&via=matrix.org&via=mozilla.org" target="_blank" rel="noopener">Matrix</a> |
|
||||
<a id="helpButton" style="cursor: pointer;">__MSG_help__</a> |
|
||||
<a href="https://sponsor.ajay.app/donate" target="_blank" rel="noopener" id="sbDonate">$</a>
|
||||
</footer>
|
||||
|
||||
<button id="showNoticeAgain" style="display: none" class="dangerButton popupElement">__MSG_showNotice__</button>
|
||||
</div>
|
||||
<!-- Scripts that need to load after the html -->
|
||||
<script src="./js/vendor.js" async></script>
|
||||
<script src="./js/popup.js" async></script>
|
||||
</body>
|
||||
<!-- Scripts that need to load after the html -->
|
||||
<script src="./js/vendor.js" async></script>
|
||||
<script src="./js/popup.js" async></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -32,10 +32,10 @@ chrome.tabs.onUpdated.addListener(function(tabId) {
|
||||
chrome.runtime.onMessage.addListener(function (request, sender, callback) {
|
||||
switch(request.message) {
|
||||
case "openConfig":
|
||||
chrome.runtime.openOptionsPage();
|
||||
chrome.tabs.create({url: chrome.runtime.getURL('options/options.html' + (request.hash ? '#' + request.hash : ''))});
|
||||
return;
|
||||
case "openHelp":
|
||||
chrome.tabs.create({url: chrome.runtime.getURL('help/index_en.html')});
|
||||
chrome.tabs.create({url: chrome.runtime.getURL('help/index.html')});
|
||||
return;
|
||||
case "openPage":
|
||||
chrome.tabs.create({url: chrome.runtime.getURL(request.url)});
|
||||
@@ -74,7 +74,7 @@ chrome.runtime.onInstalled.addListener(function () {
|
||||
// If there is no userID, then it is the first install.
|
||||
if (!userID){
|
||||
//open up the install page
|
||||
chrome.tabs.create({url: chrome.extension.getURL("/help/index_en.html")});
|
||||
chrome.tabs.create({url: chrome.extension.getURL("/help/index.html")});
|
||||
|
||||
//generate a userID
|
||||
const newUserID = utils.generateUserID();
|
||||
@@ -164,11 +164,7 @@ async function asyncRequestToServer(type: string, address: string, data = {}) {
|
||||
async function sendRequestToCustomServer(type: string, url: string, data = {}) {
|
||||
// If GET, convert JSON to parameters
|
||||
if (type.toLowerCase() === "get") {
|
||||
for (const key in data) {
|
||||
const seperator = url.includes("?") ? "&" : "?";
|
||||
const value = (typeof(data[key]) === "string") ? data[key]: JSON.stringify(data[key]);
|
||||
url += seperator + key + "=" + value;
|
||||
}
|
||||
url = utils.objectToURI(url, data, true);
|
||||
|
||||
data = null;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import * as React from "react";
|
||||
|
||||
import * as CompileConfig from "../../config.json";
|
||||
import { Category } from "../types";
|
||||
import CategorySkipOptionsComponent from "./CategorySkipOptionsComponent";
|
||||
|
||||
export interface CategoryChooserProps {
|
||||
@@ -61,7 +62,7 @@ class CategoryChooserComponent extends React.Component<CategoryChooserProps, Cat
|
||||
|
||||
for (const category of CompileConfig.categoryList) {
|
||||
elements.push(
|
||||
<CategorySkipOptionsComponent category={category}
|
||||
<CategorySkipOptionsComponent category={category as Category}
|
||||
key={category}>
|
||||
</CategorySkipOptionsComponent>
|
||||
);
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
import * as React from "react";
|
||||
|
||||
import Config from "../config"
|
||||
import { CategorySkipOption } from "../types";
|
||||
import * as CompileConfig from "../../config.json";
|
||||
import { Category, CategorySkipOption } from "../types";
|
||||
|
||||
import { getCategoryActionType } from "../utils/categoryUtils";
|
||||
|
||||
export interface CategorySkipOptionsProps {
|
||||
category: string;
|
||||
category: Category;
|
||||
defaultColor?: string;
|
||||
defaultPreviewColor?: string;
|
||||
}
|
||||
@@ -59,7 +62,7 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
|
||||
<td id={this.props.category + "SkipOption"}
|
||||
className="skipOption">
|
||||
<select
|
||||
className="categoryOptionsSelector"
|
||||
className="optionsSelector"
|
||||
defaultValue={defaultOption}
|
||||
onChange={this.skipOptionSelected.bind(this)}>
|
||||
{this.getCategorySkipOptions()}
|
||||
@@ -87,10 +90,14 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
|
||||
</tr>
|
||||
|
||||
<tr id={this.props.category + "DescriptionRow"}
|
||||
className="small-description">
|
||||
className="small-description categoryTableDescription">
|
||||
<td
|
||||
colSpan={2}>
|
||||
{chrome.i18n.getMessage("category_" + this.props.category + "_description")}
|
||||
{' '}
|
||||
<a href={CompileConfig.wikiLinks[this.props.category]} target="_blank" rel="noreferrer">
|
||||
{`${chrome.i18n.getMessage("LearnMore")}`}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -152,7 +159,8 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
|
||||
for (const optionName of optionNames) {
|
||||
elements.push(
|
||||
<option key={optionName} value={optionName}>
|
||||
{chrome.i18n.getMessage(optionName)}
|
||||
{chrome.i18n.getMessage(optionName !== "disable" ? optionName + getCategoryActionType(this.props.category)
|
||||
: optionName)}
|
||||
</option>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,22 +1,37 @@
|
||||
import * as React from "react";
|
||||
import Config from "../config";
|
||||
|
||||
enum CountdownMode {
|
||||
Timer,
|
||||
Paused,
|
||||
Stopped
|
||||
}
|
||||
|
||||
export interface NoticeProps {
|
||||
noticeTitle: string,
|
||||
|
||||
maxCountdownTime?: () => number,
|
||||
amountOfPreviousNotices?: number,
|
||||
showInSecondSlot?: boolean,
|
||||
timed?: boolean,
|
||||
idSuffix?: string,
|
||||
|
||||
videoSpeed?: () => number,
|
||||
|
||||
fadeIn?: boolean,
|
||||
startFaded?: boolean,
|
||||
firstColumn?: React.ReactElement,
|
||||
firstRow?: React.ReactElement,
|
||||
bottomRow?: React.ReactElement[],
|
||||
|
||||
smaller?: boolean,
|
||||
limitWidth?: boolean,
|
||||
|
||||
// Callback for when this is closed
|
||||
closeListener: () => void,
|
||||
onMouseEnter?: (e: React.MouseEvent<HTMLElement, MouseEvent>) => void,
|
||||
|
||||
zIndex?: number,
|
||||
style?: React.CSSProperties
|
||||
biggerCloseButton?: boolean;
|
||||
}
|
||||
|
||||
export interface NoticeState {
|
||||
@@ -25,13 +40,15 @@ export interface NoticeState {
|
||||
maxCountdownTime: () => number,
|
||||
|
||||
countdownTime: number,
|
||||
countdownText: string,
|
||||
countdownManuallyPaused: boolean,
|
||||
countdownMode: CountdownMode,
|
||||
|
||||
mouseHovering: boolean;
|
||||
|
||||
startFaded: boolean;
|
||||
}
|
||||
|
||||
class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
|
||||
countdownInterval: NodeJS.Timeout;
|
||||
intervalVideoSpeed: number;
|
||||
|
||||
idSuffix: string;
|
||||
|
||||
@@ -42,7 +59,7 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
|
||||
|
||||
const maxCountdownTime = () => {
|
||||
if (this.props.maxCountdownTime) return this.props.maxCountdownTime();
|
||||
else return 4;
|
||||
else return Config.config.skipNoticeDuration;
|
||||
};
|
||||
|
||||
//the id for the setInterval running the countdown
|
||||
@@ -60,8 +77,10 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
|
||||
|
||||
//the countdown until this notice closes
|
||||
countdownTime: maxCountdownTime(),
|
||||
countdownText: null,
|
||||
countdownManuallyPaused: false
|
||||
countdownMode: CountdownMode.Timer,
|
||||
mouseHovering: false,
|
||||
|
||||
startFaded: this.props.startFaded ?? false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,80 +95,154 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
|
||||
}
|
||||
|
||||
return (
|
||||
<table id={"sponsorSkipNotice" + this.idSuffix}
|
||||
className={"sponsorSkipObject sponsorSkipNotice"
|
||||
<div id={"sponsorSkipNotice" + this.idSuffix}
|
||||
className={"sponsorSkipObject sponsorSkipNoticeParent"
|
||||
+ (this.props.showInSecondSlot ? " secondSkipNotice" : "")}
|
||||
onMouseEnter={(e) => this.onMouseEnter(e) }
|
||||
onMouseLeave={() => this.timerMouseLeave()}
|
||||
style={noticeStyle} >
|
||||
<div className={"sponsorSkipNoticeTableContainer"
|
||||
+ (this.props.fadeIn ? " sponsorSkipNoticeFadeIn" : "")
|
||||
+ (this.amountOfPreviousNotices > 0 ? " secondSkipNotice" : "")}
|
||||
style={noticeStyle}
|
||||
onMouseEnter={() => this.timerMouseEnter()}
|
||||
onMouseLeave={() => this.timerMouseLeave()}>
|
||||
<tbody>
|
||||
+ (this.state.startFaded ? " sponsorSkipNoticeFaded" : "") }>
|
||||
<table className={"sponsorSkipObject sponsorSkipNotice"
|
||||
+ (this.props.limitWidth ? " sponsorSkipNoticeLimitWidth" : "")}>
|
||||
<tbody>
|
||||
|
||||
{/* First row */}
|
||||
<tr id={"sponsorSkipNoticeFirstRow" + this.idSuffix}>
|
||||
{/* Left column */}
|
||||
<td>
|
||||
{/* Logo */}
|
||||
<img id={"sponsorSkipLogo" + this.idSuffix}
|
||||
className="sponsorSkipLogo sponsorSkipObject"
|
||||
src={chrome.extension.getURL("icons/IconSponsorBlocker256px.png")}>
|
||||
</img>
|
||||
{/* First row */}
|
||||
<tr id={"sponsorSkipNoticeFirstRow" + this.idSuffix}
|
||||
className="sponsorSkipNoticeFirstRow">
|
||||
{/* Left column */}
|
||||
<td className="noticeLeftIcon">
|
||||
{/* Logo */}
|
||||
<img id={"sponsorSkipLogo" + this.idSuffix}
|
||||
className="sponsorSkipLogo sponsorSkipObject"
|
||||
src={chrome.extension.getURL("icons/IconSponsorBlocker256px.png")}>
|
||||
</img>
|
||||
|
||||
<span id={"sponsorSkipMessage" + this.idSuffix}
|
||||
style={{float: "left"}}
|
||||
className="sponsorSkipMessage sponsorSkipObject">
|
||||
<span id={"sponsorSkipMessage" + this.idSuffix}
|
||||
style={{float: "left"}}
|
||||
className="sponsorSkipMessage sponsorSkipObject">
|
||||
|
||||
{this.state.noticeTitle}
|
||||
</span>
|
||||
|
||||
{this.props.firstColumn}
|
||||
</td>
|
||||
|
||||
{this.props.firstRow}
|
||||
|
||||
{/* Right column */}
|
||||
<td className="sponsorSkipNoticeRightSection"
|
||||
style={{top: "9.32px"}}>
|
||||
|
||||
{/* Time left */}
|
||||
{this.props.timed ? (
|
||||
<span id={"sponsorSkipNoticeTimeLeft" + this.idSuffix}
|
||||
onClick={() => this.toggleManualPause()}
|
||||
className="sponsorSkipObject sponsorSkipNoticeTimeLeft">
|
||||
|
||||
{this.getCountdownElements()}
|
||||
|
||||
</span>
|
||||
) : ""}
|
||||
|
||||
{this.state.noticeTitle}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
{/* Right column */}
|
||||
<td className="sponsorSkipNoticeRightSection"
|
||||
style={{top: "11px"}}>
|
||||
|
||||
{/* Time left */}
|
||||
{this.props.timed ? (
|
||||
<span id={"sponsorSkipNoticeTimeLeft" + this.idSuffix}
|
||||
onClick={() => this.toggleManualPause()}
|
||||
className="sponsorSkipObject sponsorSkipNoticeTimeLeft">
|
||||
{/* Close button */}
|
||||
<img src={chrome.extension.getURL("icons/close.png")}
|
||||
className={"sponsorSkipObject sponsorSkipNoticeButton sponsorSkipNoticeCloseButton sponsorSkipNoticeRightButton"
|
||||
+ (this.props.biggerCloseButton ? " biggerCloseButton" : "")}
|
||||
onClick={() => this.close()}>
|
||||
</img>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{this.state.countdownText || (this.state.countdownTime + "s")}
|
||||
</span>
|
||||
) : ""}
|
||||
|
||||
{this.props.children}
|
||||
|
||||
{/* Close button */}
|
||||
<img src={chrome.extension.getURL("icons/close.png")}
|
||||
className="sponsorSkipObject sponsorSkipNoticeButton sponsorSkipNoticeCloseButton sponsorSkipNoticeRightButton"
|
||||
onClick={() => this.close()}>
|
||||
</img>
|
||||
</td>
|
||||
</tr>
|
||||
{!this.props.smaller && this.props.bottomRow ?
|
||||
this.props.bottomRow
|
||||
: null}
|
||||
|
||||
{this.props.children}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
{/* Add as a hidden table to keep the height constant */}
|
||||
{this.props.smaller && this.props.bottomRow ?
|
||||
<table style={{visibility: "hidden", paddingTop: "14px"}}>
|
||||
<tbody>
|
||||
{this.props.bottomRow}
|
||||
</tbody>
|
||||
</table>
|
||||
: null}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
getCountdownElements(): React.ReactElement[] {
|
||||
return [(
|
||||
<span
|
||||
id={"skipNoticeTimerText" + this.idSuffix}
|
||||
key="skipNoticeTimerText"
|
||||
className={this.state.countdownMode !== CountdownMode.Timer ? "hidden" : ""} >
|
||||
{this.state.countdownTime + "s"}
|
||||
</span>
|
||||
),(
|
||||
<img
|
||||
id={"skipNoticeTimerPaused" + this.idSuffix}
|
||||
key="skipNoticeTimerPaused"
|
||||
className={this.state.countdownMode !== CountdownMode.Paused ? "hidden" : ""}
|
||||
src={chrome.runtime.getURL("icons/pause.svg")}
|
||||
alt={chrome.i18n.getMessage("paused")} />
|
||||
),(
|
||||
<img
|
||||
id={"skipNoticeTimerStopped" + this.idSuffix}
|
||||
key="skipNoticeTimerStopped"
|
||||
className={this.state.countdownMode !== CountdownMode.Stopped ? "hidden" : ""}
|
||||
src={chrome.runtime.getURL("icons/stop.svg")}
|
||||
alt={chrome.i18n.getMessage("manualPaused")} />
|
||||
)];
|
||||
}
|
||||
|
||||
onMouseEnter(event: React.MouseEvent<HTMLElement, MouseEvent>): void {
|
||||
if (this.props.onMouseEnter) this.props.onMouseEnter(event);
|
||||
|
||||
this.fadedMouseEnter();
|
||||
this.timerMouseEnter();
|
||||
}
|
||||
|
||||
fadedMouseEnter(): void {
|
||||
if (this.state.startFaded) {
|
||||
this.setState({
|
||||
startFaded: false
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
timerMouseEnter(): void {
|
||||
if (this.state.countdownManuallyPaused) return;
|
||||
if (this.state.countdownMode === CountdownMode.Stopped) return;
|
||||
|
||||
this.pauseCountdown();
|
||||
|
||||
this.setState({
|
||||
mouseHovering: true
|
||||
});
|
||||
}
|
||||
|
||||
timerMouseLeave(): void {
|
||||
if (this.state.countdownManuallyPaused) return;
|
||||
if (this.state.countdownMode === CountdownMode.Stopped) return;
|
||||
|
||||
this.startCountdown();
|
||||
|
||||
this.setState({
|
||||
mouseHovering: false
|
||||
});
|
||||
}
|
||||
|
||||
toggleManualPause(): void {
|
||||
this.setState({
|
||||
countdownManuallyPaused: !this.state.countdownManuallyPaused
|
||||
countdownMode: this.state.countdownMode === CountdownMode.Stopped ? CountdownMode.Timer : CountdownMode.Stopped
|
||||
}, () => {
|
||||
if (this.state.countdownManuallyPaused) {
|
||||
if (this.state.countdownMode === CountdownMode.Stopped || this.state.mouseHovering) {
|
||||
this.pauseCountdown();
|
||||
} else {
|
||||
this.startCountdown();
|
||||
@@ -163,10 +256,6 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
|
||||
|
||||
const countdownTime = Math.min(this.state.countdownTime - 1, this.state.maxCountdownTime());
|
||||
|
||||
if (this.props.videoSpeed && this.intervalVideoSpeed != this.props.videoSpeed()) {
|
||||
this.setupInterval();
|
||||
}
|
||||
|
||||
if (countdownTime <= 0) {
|
||||
//remove this from setInterval
|
||||
clearInterval(this.countdownInterval);
|
||||
@@ -180,8 +269,8 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
|
||||
if (countdownTime == 3) {
|
||||
//start fade out animation
|
||||
const notice = document.getElementById("sponsorSkipNotice" + this.idSuffix);
|
||||
notice.style.removeProperty("animation");
|
||||
notice.classList.add("sponsorSkipNoticeFadeOut");
|
||||
notice?.style.removeProperty("animation");
|
||||
notice?.classList.add("sponsorSkipNoticeFadeOut");
|
||||
}
|
||||
|
||||
this.setState({
|
||||
@@ -206,7 +295,7 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
|
||||
//reset countdown and inform the user
|
||||
this.setState({
|
||||
countdownTime: this.state.maxCountdownTime(),
|
||||
countdownText: this.state.countdownManuallyPaused ? chrome.i18n.getMessage("manualPaused") : chrome.i18n.getMessage("paused")
|
||||
countdownMode: this.state.countdownMode === CountdownMode.Timer ? CountdownMode.Paused : this.state.countdownMode
|
||||
});
|
||||
|
||||
this.removeFadeAnimation();
|
||||
@@ -220,7 +309,7 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
|
||||
|
||||
this.setState({
|
||||
countdownTime: this.state.maxCountdownTime(),
|
||||
countdownText: null
|
||||
countdownMode: CountdownMode.Timer
|
||||
});
|
||||
|
||||
this.setupInterval();
|
||||
@@ -229,10 +318,7 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
|
||||
setupInterval(): void {
|
||||
if (this.countdownInterval) clearInterval(this.countdownInterval);
|
||||
|
||||
const intervalDuration = this.props.videoSpeed ? 1000 / this.props.videoSpeed() : 1000;
|
||||
this.countdownInterval = setInterval(this.countdown.bind(this), intervalDuration);
|
||||
|
||||
if (this.props.videoSpeed) this.intervalVideoSpeed = this.props.videoSpeed();
|
||||
this.countdownInterval = setInterval(this.countdown.bind(this), 1000);
|
||||
}
|
||||
|
||||
resetCountdown(): void {
|
||||
@@ -242,7 +328,7 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
|
||||
|
||||
this.setState({
|
||||
countdownTime: this.state.maxCountdownTime(),
|
||||
countdownText: null
|
||||
countdownMode: CountdownMode.Timer
|
||||
});
|
||||
|
||||
this.removeFadeAnimation();
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
import * as React from "react";
|
||||
import * as CompileConfig from "../../config.json";
|
||||
import Config from "../config"
|
||||
import { ContentContainer, SponsorHideType, SponsorTime } from "../types";
|
||||
import { Category, ContentContainer, CategoryActionType, SponsorHideType, SponsorTime, NoticeVisbilityMode, ActionType, SponsorSourceType, SegmentUUID } from "../types";
|
||||
import NoticeComponent from "./NoticeComponent";
|
||||
import NoticeTextSelectionComponent from "./NoticeTextSectionComponent";
|
||||
import SubmissionNotice from "../render/SubmissionNotice";
|
||||
import Utils from "../utils";
|
||||
const utils = new Utils();
|
||||
|
||||
import { getCategoryActionType, getSkippingText } from "../utils/categoryUtils";
|
||||
|
||||
import ThumbsUpSvg from "../svg-icons/thumbs_up_svg";
|
||||
import ThumbsDownSvg from "../svg-icons/thumbs_down_svg";
|
||||
import PencilSvg from "../svg-icons/pencil_svg";
|
||||
|
||||
export enum SkipNoticeAction {
|
||||
None,
|
||||
Upvote,
|
||||
Downvote,
|
||||
CategoryVote,
|
||||
CopyDownvote,
|
||||
Unskip
|
||||
}
|
||||
|
||||
@@ -20,7 +30,11 @@ export interface SkipNoticeProps {
|
||||
// Contains functions and variables from the content script needed by the skip notice
|
||||
contentContainer: ContentContainer;
|
||||
|
||||
closeListener: () => void
|
||||
closeListener: () => void;
|
||||
showKeybindHint?: boolean;
|
||||
smaller: boolean;
|
||||
|
||||
unskipTime?: number;
|
||||
}
|
||||
|
||||
export interface SkipNoticeState {
|
||||
@@ -33,14 +47,23 @@ export interface SkipNoticeState {
|
||||
maxCountdownTime?: () => number;
|
||||
countdownText?: string;
|
||||
|
||||
unskipText?: string;
|
||||
unskipCallback?: (index: number) => void;
|
||||
skipButtonText?: string;
|
||||
skipButtonCallback?: (index: number) => void;
|
||||
showSkipButton?: boolean;
|
||||
|
||||
downvoting?: boolean;
|
||||
editing?: boolean;
|
||||
choosingCategory?: boolean;
|
||||
thanksForVotingText?: string; //null until the voting buttons should be hidden
|
||||
|
||||
actionState?: SkipNoticeAction;
|
||||
|
||||
showKeybindHint?: boolean;
|
||||
|
||||
smaller?: boolean;
|
||||
|
||||
voted?: SkipNoticeAction[];
|
||||
copied?: SkipNoticeAction[];
|
||||
|
||||
}
|
||||
|
||||
class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeState> {
|
||||
@@ -50,13 +73,17 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
|
||||
contentContainer: ContentContainer;
|
||||
|
||||
amountOfPreviousNotices: number;
|
||||
audio: HTMLAudioElement;
|
||||
showInSecondSlot: boolean;
|
||||
|
||||
idSuffix: string;
|
||||
|
||||
noticeRef: React.MutableRefObject<NoticeComponent>;
|
||||
categoryOptionRef: React.RefObject<HTMLSelectElement>;
|
||||
|
||||
selectedColor: string;
|
||||
unselectedColor: string;
|
||||
lockedColor: string;
|
||||
|
||||
// Used to update on config change
|
||||
configListener: () => void;
|
||||
|
||||
@@ -68,29 +95,29 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
|
||||
this.segments = props.segments;
|
||||
this.autoSkip = props.autoSkip;
|
||||
this.contentContainer = props.contentContainer;
|
||||
this.audio = null;
|
||||
|
||||
const categoryName = chrome.i18n.getMessage(this.segments.length > 1 ? "multipleSegments"
|
||||
: "category_" + this.segments[0].category + "_short") || chrome.i18n.getMessage("category_" + this.segments[0].category);
|
||||
let noticeTitle = categoryName + " " + chrome.i18n.getMessage("skipped");
|
||||
if (!this.autoSkip) {
|
||||
noticeTitle = chrome.i18n.getMessage("skip_category").replace("{0}", categoryName);
|
||||
}
|
||||
|
||||
//add notice
|
||||
this.amountOfPreviousNotices = document.getElementsByClassName("sponsorSkipNotice").length;
|
||||
const noticeTitle = getSkippingText(this.segments, this.props.autoSkip);
|
||||
|
||||
const previousSkipNotices = document.getElementsByClassName("sponsorSkipNoticeParent");
|
||||
this.amountOfPreviousNotices = previousSkipNotices.length;
|
||||
// If there is at least one already in the first slot
|
||||
this.showInSecondSlot = previousSkipNotices.length > 0 && [...previousSkipNotices].some(notice => !notice.classList.contains("secondSkipNotice"));
|
||||
|
||||
// Sort segments
|
||||
if (this.segments.length > 1) {
|
||||
this.segments.sort((a, b) => a.segment[0] - b.segment[0]);
|
||||
}
|
||||
|
||||
//this is the suffix added at the end of every id
|
||||
// This is the suffix added at the end of every id
|
||||
for (const segment of this.segments) {
|
||||
this.idSuffix += segment.UUID;
|
||||
}
|
||||
this.idSuffix += this.amountOfPreviousNotices;
|
||||
|
||||
this.selectedColor = Config.config.colorPalette.red;
|
||||
this.unselectedColor = Config.config.colorPalette.white;
|
||||
this.lockedColor = Config.config.colorPalette.locked;
|
||||
|
||||
// Setup state
|
||||
this.state = {
|
||||
noticeTitle,
|
||||
@@ -98,30 +125,32 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
|
||||
messageOnClick: null,
|
||||
|
||||
//the countdown until this notice closes
|
||||
maxCountdownTime: () => 4,
|
||||
countdownTime: 4,
|
||||
maxCountdownTime: () => Config.config.skipNoticeDuration,
|
||||
countdownTime: Config.config.skipNoticeDuration,
|
||||
countdownText: null,
|
||||
|
||||
unskipText: chrome.i18n.getMessage("unskip"),
|
||||
unskipCallback: (index) => this.unskip(index),
|
||||
skipButtonText: this.getUnskipText(),
|
||||
skipButtonCallback: (index) => this.unskip(index),
|
||||
showSkipButton: true,
|
||||
|
||||
downvoting: false,
|
||||
editing: false,
|
||||
choosingCategory: false,
|
||||
thanksForVotingText: null,
|
||||
|
||||
actionState: SkipNoticeAction.None
|
||||
actionState: SkipNoticeAction.None,
|
||||
|
||||
showKeybindHint: this.props.showKeybindHint ?? true,
|
||||
|
||||
smaller: this.props.smaller ?? false,
|
||||
|
||||
// Keep track of what segment the user interacted with.
|
||||
voted: new Array(this.props.segments.length).fill(SkipNoticeAction.None),
|
||||
copied: new Array(this.props.segments.length).fill(SkipNoticeAction.None),
|
||||
}
|
||||
|
||||
if (!this.autoSkip) {
|
||||
// Assume manual skip is only skipping 1 submission
|
||||
Object.assign(this.state, this.getUnskippedModeInfo(0, chrome.i18n.getMessage("skip")));
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount(): void {
|
||||
if (Config.config.audioNotificationOnSkip && this.audio) {
|
||||
this.audio.volume = this.contentContainer().v.volume * 0.1;
|
||||
if (this.autoSkip) this.audio.play();
|
||||
Object.assign(this.state, this.getUnskippedModeInfo(0, this.getSkipText()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,160 +161,275 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
|
||||
noticeStyle.transform = "scale(0.8) translate(10%, 10%)";
|
||||
}
|
||||
|
||||
// If it started out as smaller, always keep the
|
||||
// skip button there
|
||||
const firstColumn = this.props.smaller ? (
|
||||
this.getSkipButton()
|
||||
) : null;
|
||||
|
||||
return (
|
||||
<NoticeComponent noticeTitle={this.state.noticeTitle}
|
||||
amountOfPreviousNotices={this.amountOfPreviousNotices}
|
||||
showInSecondSlot={this.showInSecondSlot}
|
||||
idSuffix={this.idSuffix}
|
||||
fadeIn={true}
|
||||
startFaded={Config.config.noticeVisibilityMode >= NoticeVisbilityMode.FadedForAll
|
||||
|| (Config.config.noticeVisibilityMode >= NoticeVisbilityMode.FadedForAutoSkip && this.autoSkip)}
|
||||
timed={true}
|
||||
maxCountdownTime={this.state.maxCountdownTime}
|
||||
videoSpeed={() => this.contentContainer().v?.playbackRate}
|
||||
style={noticeStyle}
|
||||
biggerCloseButton={this.contentContainer().onMobileYouTube}
|
||||
ref={this.noticeRef}
|
||||
closeListener={() => this.closeListener()}>
|
||||
|
||||
{(Config.config.audioNotificationOnSkip) && <audio ref={(source) => { this.audio = source; }}>
|
||||
<source src={chrome.extension.getURL("icons/beep.ogg")} type="audio/ogg"></source>
|
||||
</audio>}
|
||||
|
||||
{/* Text Boxes */}
|
||||
{this.getMessageBoxes()}
|
||||
|
||||
{/* Bottom Row */}
|
||||
<tr id={"sponsorSkipNoticeSecondRow" + this.idSuffix}>
|
||||
|
||||
{/* Vote Button Container */}
|
||||
{!this.state.thanksForVotingText ?
|
||||
<td id={"sponsorTimesVoteButtonsContainer" + this.idSuffix}
|
||||
className="sponsorTimesVoteButtonsContainer">
|
||||
|
||||
{/* Upvote Button */}
|
||||
<img id={"sponsorTimesDownvoteButtonsContainer" + this.idSuffix}
|
||||
className="sponsorSkipObject voteButton"
|
||||
style={{marginRight: "10px"}}
|
||||
src={chrome.extension.getURL("icons/thumbs_up.svg")}
|
||||
title={chrome.i18n.getMessage("upvoteButtonInfo")}
|
||||
onClick={() => this.prepAction(SkipNoticeAction.Upvote)}>
|
||||
|
||||
</img>
|
||||
|
||||
{/* Report Button */}
|
||||
<img id={"sponsorTimesDownvoteButtonsContainer" + this.idSuffix}
|
||||
className="sponsorSkipObject voteButton"
|
||||
src={chrome.extension.getURL("icons/thumbs_down.svg")}
|
||||
title={chrome.i18n.getMessage("reportButtonInfo")}
|
||||
onClick={() => this.adjustDownvotingState(true)}>
|
||||
|
||||
</img>
|
||||
|
||||
</td>
|
||||
|
||||
:
|
||||
|
||||
<td id={"sponsorTimesVoteButtonInfoMessage" + this.idSuffix}
|
||||
className="sponsorTimesInfoMessage sponsorTimesVoteButtonMessage"
|
||||
style={{marginRight: "10px"}}>
|
||||
{this.state.thanksForVotingText}
|
||||
</td>
|
||||
}
|
||||
|
||||
{/* Unskip Button */}
|
||||
<td className="sponsorSkipNoticeUnskipSection">
|
||||
<button id={"sponsorSkipUnskipButton" + this.idSuffix}
|
||||
className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
style={{marginLeft: "4px"}}
|
||||
onClick={() => this.prepAction(SkipNoticeAction.Unskip)}>
|
||||
|
||||
{this.state.unskipText + " (" + Config.config.skipKeybind + ")"}
|
||||
</button>
|
||||
</td>
|
||||
|
||||
{/* Never show button if autoSkip is enabled */}
|
||||
{!this.autoSkip ? "" :
|
||||
<td className="sponsorSkipNoticeRightSection">
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton sponsorSkipNoticeRightButton"
|
||||
onClick={this.contentContainer().dontShowNoticeAgain}>
|
||||
|
||||
{chrome.i18n.getMessage("Hide")}
|
||||
</button>
|
||||
</td>
|
||||
}
|
||||
</tr>
|
||||
|
||||
{/* Downvote Options Row */}
|
||||
{this.state.downvoting &&
|
||||
<tr id={"sponsorSkipNoticeDownvoteOptionsRow" + this.idSuffix}>
|
||||
<td id={"sponsorTimesDownvoteOptionsContainer" + this.idSuffix}>
|
||||
|
||||
{/* Normal downvote */}
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
onClick={() => this.prepAction(SkipNoticeAction.Downvote)}>
|
||||
{chrome.i18n.getMessage("downvoteDescription")}
|
||||
</button>
|
||||
|
||||
{/* Category vote */}
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
onClick={() => this.openCategoryChooser()}>
|
||||
|
||||
{chrome.i18n.getMessage("incorrectCategory")}
|
||||
</button>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
}
|
||||
|
||||
{/* Category Chooser Row */}
|
||||
{this.state.choosingCategory &&
|
||||
<tr id={"sponsorSkipNoticeCategoryChooserRow" + this.idSuffix}>
|
||||
<td>
|
||||
{/* Category Selector */}
|
||||
<select id={"sponsorTimeCategories" + this.idSuffix}
|
||||
className="sponsorTimeCategories"
|
||||
defaultValue={this.segments[0].category} //Just default to the first segment, as we don't know which they'll choose
|
||||
ref={this.categoryOptionRef}
|
||||
onChange={this.categorySelectionChange.bind(this)}>
|
||||
|
||||
{this.getCategoryOptions()}
|
||||
</select>
|
||||
|
||||
{/* Submit Button */}
|
||||
{this.segments.length === 1 &&
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
onClick={() => this.prepAction(SkipNoticeAction.CategoryVote)}>
|
||||
|
||||
{chrome.i18n.getMessage("submit")}
|
||||
</button>
|
||||
}
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
|
||||
{/* Segment Chooser Row */}
|
||||
{this.state.actionState !== SkipNoticeAction.None &&
|
||||
<tr id={"sponsorSkipNoticeSubmissionOptionsRow" + this.idSuffix}>
|
||||
<td id={"sponsorTimesSubmissionOptionsContainer" + this.idSuffix}>
|
||||
{this.getSubmissionChooser()}
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
|
||||
closeListener={() => this.closeListener()}
|
||||
smaller={this.state.smaller}
|
||||
limitWidth={true}
|
||||
firstColumn={firstColumn}
|
||||
bottomRow={[...this.getMessageBoxes(), ...this.getBottomRow() ]}
|
||||
onMouseEnter={() => this.onMouseEnter() } >
|
||||
</NoticeComponent>
|
||||
);
|
||||
}
|
||||
|
||||
getBottomRow(): JSX.Element[] {
|
||||
return [
|
||||
/* Bottom Row */
|
||||
(<tr id={"sponsorSkipNoticeSecondRow" + this.idSuffix}
|
||||
key={0}>
|
||||
|
||||
{/* Vote Button Container */}
|
||||
{!this.state.thanksForVotingText ?
|
||||
<td id={"sponsorTimesVoteButtonsContainer" + this.idSuffix}
|
||||
className="sponsorTimesVoteButtonsContainer">
|
||||
|
||||
{/* Upvote Button */}
|
||||
<div id={"sponsorTimesDownvoteButtonsContainerUpvote" + this.idSuffix}
|
||||
className="voteButton"
|
||||
style={{marginRight: "5px"}}
|
||||
title={chrome.i18n.getMessage("upvoteButtonInfo")}
|
||||
onClick={() => this.prepAction(SkipNoticeAction.Upvote)}>
|
||||
<ThumbsUpSvg fill={(this.state.actionState === SkipNoticeAction.Upvote) ? this.selectedColor : this.unselectedColor} />
|
||||
</div>
|
||||
|
||||
{/* Report Button */}
|
||||
<div id={"sponsorTimesDownvoteButtonsContainerDownvote" + this.idSuffix}
|
||||
className="voteButton"
|
||||
style={{marginRight: "5px", marginLeft: "5px"}}
|
||||
title={chrome.i18n.getMessage("reportButtonInfo")}
|
||||
onClick={() => this.prepAction(SkipNoticeAction.Downvote)}>
|
||||
<ThumbsDownSvg fill={this.downvoteButtonColor(SkipNoticeAction.Downvote)} />
|
||||
</div>
|
||||
|
||||
{/* Copy and Downvote Button */}
|
||||
<div id={"sponsorTimesDownvoteButtonsContainerCopyDownvote" + this.idSuffix}
|
||||
className="voteButton"
|
||||
style={{marginLeft: "5px"}}
|
||||
onClick={() => this.openEditingOptions()}>
|
||||
<PencilSvg fill={this.state.editing === true
|
||||
|| this.state.actionState === SkipNoticeAction.CopyDownvote
|
||||
|| this.state.choosingCategory === true
|
||||
? this.selectedColor : this.unselectedColor} />
|
||||
</div>
|
||||
</td>
|
||||
|
||||
:
|
||||
|
||||
<td id={"sponsorTimesVoteButtonInfoMessage" + this.idSuffix}
|
||||
className="sponsorTimesInfoMessage sponsorTimesVoteButtonMessage"
|
||||
style={{marginRight: "10px"}}>
|
||||
|
||||
{/* Submitted string */}
|
||||
<span style={{marginRight: "10px"}}>
|
||||
{this.state.thanksForVotingText}
|
||||
</span>
|
||||
|
||||
{/* Continue Voting Button */}
|
||||
<button id={"sponsorTimesContinueVotingContainer" + this.idSuffix}
|
||||
className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
title={"Continue Voting"}
|
||||
onClick={() => this.setState({
|
||||
thanksForVotingText: null,
|
||||
messages: []
|
||||
})}>
|
||||
{chrome.i18n.getMessage("ContinueVoting")}
|
||||
</button>
|
||||
</td>
|
||||
}
|
||||
|
||||
{/* Unskip/Skip Button */}
|
||||
{!this.props.smaller ? this.getSkipButton() : null}
|
||||
|
||||
{/* Never show button if autoSkip is enabled */}
|
||||
{!this.autoSkip ? "" :
|
||||
<td className="sponsorSkipNoticeRightSection"
|
||||
key={1}>
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton sponsorSkipNoticeRightButton"
|
||||
onClick={this.contentContainer().dontShowNoticeAgain}>
|
||||
{chrome.i18n.getMessage("Hide")}
|
||||
</button>
|
||||
</td>
|
||||
}
|
||||
</tr>),
|
||||
|
||||
/* Edit Segments Row */
|
||||
(this.state.editing && !this.state.thanksForVotingText && !(this.state.choosingCategory || this.state.actionState === SkipNoticeAction.CopyDownvote) &&
|
||||
<tr id={"sponsorSkipNoticeEditSegmentsRow" + this.idSuffix}
|
||||
key={2}>
|
||||
<td id={"sponsorTimesEditSegmentsContainer" + this.idSuffix}>
|
||||
|
||||
{/* Copy Segment */}
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
title={chrome.i18n.getMessage("CopyDownvoteButtonInfo")}
|
||||
style={{color: this.downvoteButtonColor(SkipNoticeAction.Downvote)}}
|
||||
onClick={() => this.prepAction(SkipNoticeAction.CopyDownvote)}>
|
||||
{chrome.i18n.getMessage("CopyAndDownvote")}
|
||||
</button>
|
||||
|
||||
{/* Category vote */}
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
title={chrome.i18n.getMessage("ChangeCategoryTooltip")}
|
||||
style={{color: (this.state.actionState === SkipNoticeAction.CategoryVote && this.state.editing == true) ? this.selectedColor : this.unselectedColor}}
|
||||
onClick={() => this.resetStateToStart(SkipNoticeAction.CategoryVote, true, true)}>
|
||||
{chrome.i18n.getMessage("incorrectCategory")}
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
),
|
||||
|
||||
/* Category Chooser Row */
|
||||
(this.state.choosingCategory && !this.state.thanksForVotingText &&
|
||||
<tr id={"sponsorSkipNoticeCategoryChooserRow" + this.idSuffix}
|
||||
key={3}>
|
||||
<td>
|
||||
{/* Category Selector */}
|
||||
<select id={"sponsorTimeCategories" + this.idSuffix}
|
||||
className="sponsorTimeCategories sponsorTimeEditSelector"
|
||||
defaultValue={this.segments[0].category}
|
||||
ref={this.categoryOptionRef}>
|
||||
|
||||
{this.getCategoryOptions()}
|
||||
</select>
|
||||
|
||||
{/* Submit Button */}
|
||||
{this.segments.length === 1 &&
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
onClick={() => this.prepAction(SkipNoticeAction.CategoryVote)}>
|
||||
|
||||
{chrome.i18n.getMessage("submit")}
|
||||
</button>
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
),
|
||||
|
||||
/* Segment Chooser Row */
|
||||
(this.state.actionState !== SkipNoticeAction.None && this.segments.length > 1 && !this.state.thanksForVotingText &&
|
||||
<tr id={"sponsorSkipNoticeSubmissionOptionsRow" + this.idSuffix}
|
||||
key={4}>
|
||||
<td id={"sponsorTimesSubmissionOptionsContainer" + this.idSuffix}>
|
||||
{this.getSubmissionChooser()}
|
||||
</td>
|
||||
</tr>
|
||||
)
|
||||
];
|
||||
}
|
||||
|
||||
getSkipButton(): JSX.Element {
|
||||
if (this.state.showSkipButton && (this.segments.length > 1
|
||||
|| getCategoryActionType(this.segments[0].category) !== CategoryActionType.POI
|
||||
|| this.props.unskipTime)) {
|
||||
|
||||
const style: React.CSSProperties = {
|
||||
marginLeft: "4px",
|
||||
color: (this.state.actionState === SkipNoticeAction.Unskip) ? this.selectedColor : this.unselectedColor
|
||||
};
|
||||
if (this.contentContainer().onMobileYouTube) {
|
||||
style.padding = "20px";
|
||||
style.minWidth = "100px";
|
||||
}
|
||||
|
||||
return (
|
||||
<span className="sponsorSkipNoticeUnskipSection">
|
||||
<button id={"sponsorSkipUnskipButton" + this.idSuffix}
|
||||
className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
style={style}
|
||||
onClick={() => this.prepAction(SkipNoticeAction.Unskip)}>
|
||||
{this.state.skipButtonText + (this.state.showKeybindHint ? " (" + Config.config.skipKeybind + ")" : "")}
|
||||
</button>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
getSubmissionChooser(): JSX.Element[] {
|
||||
const elements: JSX.Element[] = [];
|
||||
|
||||
for (let i = 0; i < this.segments.length; i++) {
|
||||
elements.push(
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
style={{opacity: this.getSubmissionChooserOpacity(i),
|
||||
color: this.getSubmissionChooserColor(i)}}
|
||||
onClick={() => this.performAction(i)}
|
||||
key={"submission" + i + this.segments[i].category + this.idSuffix}>
|
||||
{(i + 1) + ". " + chrome.i18n.getMessage("category_" + this.segments[i].category)}
|
||||
</button>
|
||||
);
|
||||
}
|
||||
return elements;
|
||||
}
|
||||
|
||||
getSubmissionChooserOpacity(index: number): number {
|
||||
const isUpvote = this.state.actionState === SkipNoticeAction.Upvote;
|
||||
const isDownvote = this.state.actionState == SkipNoticeAction.Downvote;
|
||||
const isCopyDownvote = this.state.actionState == SkipNoticeAction.CopyDownvote;
|
||||
const shouldBeGray: boolean = (isUpvote && this.state.voted[index] == SkipNoticeAction.Upvote) ||
|
||||
(isDownvote && this.state.voted[index] == SkipNoticeAction.Downvote) ||
|
||||
(isCopyDownvote && this.state.copied[index] == SkipNoticeAction.CopyDownvote);
|
||||
|
||||
return shouldBeGray ? 0.35 : 1;
|
||||
}
|
||||
|
||||
getSubmissionChooserColor(index: number): string {
|
||||
const isDownvote = this.state.actionState == SkipNoticeAction.Downvote;
|
||||
const isCopyDownvote = this.state.actionState == SkipNoticeAction.CopyDownvote;
|
||||
const shouldWarnUser = Config.config.isVip && (isDownvote || isCopyDownvote)
|
||||
&& this.segments[index].locked === 1;
|
||||
|
||||
return shouldWarnUser ? this.lockedColor : this.unselectedColor;
|
||||
}
|
||||
|
||||
onMouseEnter(): void {
|
||||
if (this.state.smaller) {
|
||||
this.setState({
|
||||
smaller: false
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
getMessageBoxes(): JSX.Element[] {
|
||||
if (this.state.messages.length === 0) {
|
||||
// Add a spacer if there is no text
|
||||
return [
|
||||
<tr id={"sponsorSkipNoticeSpacer" + this.idSuffix}
|
||||
className="sponsorBlockSpacer"
|
||||
key={"messageBoxSpacer"}>
|
||||
</tr>
|
||||
];
|
||||
}
|
||||
|
||||
const elements: JSX.Element[] = [];
|
||||
|
||||
for (let i = 0; i < this.state.messages.length; i++) {
|
||||
elements.push(
|
||||
<tr key={i + "_messageBox"}>
|
||||
<td key={i + "_messageBox"}>
|
||||
<NoticeTextSelectionComponent idSuffix={this.idSuffix}
|
||||
text={this.state.messages[i]}
|
||||
onClick={this.state.messageOnClick}
|
||||
key={i + "_messageBox"}>
|
||||
</NoticeTextSelectionComponent>
|
||||
</td>
|
||||
</tr>
|
||||
)
|
||||
}
|
||||
|
||||
return elements;
|
||||
}
|
||||
@@ -294,37 +438,29 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
|
||||
if (this.segments.length === 1) {
|
||||
this.performAction(0, action);
|
||||
} else {
|
||||
this.setState({
|
||||
actionState: action
|
||||
});
|
||||
switch (action ?? this.state.actionState) {
|
||||
case SkipNoticeAction.None:
|
||||
this.resetStateToStart();
|
||||
break;
|
||||
case SkipNoticeAction.Upvote:
|
||||
this.resetStateToStart(SkipNoticeAction.Upvote);
|
||||
break;
|
||||
case SkipNoticeAction.Downvote:
|
||||
this.resetStateToStart(SkipNoticeAction.Downvote);
|
||||
break;
|
||||
case SkipNoticeAction.CategoryVote:
|
||||
this.resetStateToStart(SkipNoticeAction.CategoryVote, true, true);
|
||||
break;
|
||||
case SkipNoticeAction.CopyDownvote:
|
||||
this.resetStateToStart(SkipNoticeAction.CopyDownvote, true);
|
||||
break;
|
||||
case SkipNoticeAction.Unskip:
|
||||
this.resetStateToStart(SkipNoticeAction.Unskip);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getMessageBoxes(): JSX.Element[] | JSX.Element {
|
||||
if (this.state.messages.length === 0) {
|
||||
// Add a spacer if there is no text
|
||||
return (
|
||||
<tr id={"sponsorSkipNoticeSpacer" + this.idSuffix}
|
||||
className="sponsorBlockSpacer">
|
||||
</tr>
|
||||
);
|
||||
}
|
||||
|
||||
const elements: JSX.Element[] = [];
|
||||
|
||||
for (let i = 0; i < this.state.messages.length; i++) {
|
||||
elements.push(
|
||||
<NoticeTextSelectionComponent idSuffix={this.idSuffix}
|
||||
text={this.state.messages[i]}
|
||||
onClick={this.state.messageOnClick}
|
||||
key={i}>
|
||||
</NoticeTextSelectionComponent>
|
||||
)
|
||||
}
|
||||
|
||||
return elements;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the action from the current state
|
||||
*
|
||||
@@ -333,135 +469,125 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
|
||||
performAction(index: number, action?: SkipNoticeAction): void {
|
||||
switch (action ?? this.state.actionState) {
|
||||
case SkipNoticeAction.None:
|
||||
this.noAction(index);
|
||||
break;
|
||||
case SkipNoticeAction.Upvote:
|
||||
this.contentContainer().vote(1, this.segments[index].UUID, undefined, this);
|
||||
this.upvote(index);
|
||||
break;
|
||||
case SkipNoticeAction.Downvote:
|
||||
this.contentContainer().vote(0, this.segments[index].UUID, undefined, this);
|
||||
this.downvote(index);
|
||||
break;
|
||||
case SkipNoticeAction.CategoryVote:
|
||||
this.contentContainer().vote(undefined, this.segments[index].UUID, this.categoryOptionRef.current.value, this)
|
||||
this.categoryVote(index);
|
||||
break;
|
||||
case SkipNoticeAction.CopyDownvote:
|
||||
this.copyDownvote(index);
|
||||
break;
|
||||
case SkipNoticeAction.Unskip:
|
||||
this.state.unskipCallback(index);
|
||||
this.unskipAction(index);
|
||||
break;
|
||||
default:
|
||||
this.resetStateToStart();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
noAction(index: number): void {
|
||||
const voted = this.state.voted;
|
||||
voted[index] = SkipNoticeAction.None;
|
||||
|
||||
this.setState({
|
||||
actionState: SkipNoticeAction.None
|
||||
voted
|
||||
});
|
||||
}
|
||||
|
||||
adjustDownvotingState(value: boolean): void {
|
||||
if (!value) this.clearConfigListener();
|
||||
upvote(index: number): void {
|
||||
if (this.segments.length === 1) this.resetStateToStart();
|
||||
this.contentContainer().vote(1, this.segments[index].UUID, undefined, this);
|
||||
}
|
||||
|
||||
downvote(index: number): void {
|
||||
if (this.segments.length === 1) this.resetStateToStart();
|
||||
|
||||
this.contentContainer().vote(0, this.segments[index].UUID, undefined, this);
|
||||
}
|
||||
|
||||
categoryVote(index: number): void {
|
||||
this.contentContainer().vote(undefined, this.segments[index].UUID, this.categoryOptionRef.current.value as Category, this)
|
||||
}
|
||||
|
||||
copyDownvote(index: number): void {
|
||||
const sponsorVideoID = this.props.contentContainer().sponsorVideoID;
|
||||
const sponsorTimesSubmitting : SponsorTime = {
|
||||
segment: this.segments[index].segment,
|
||||
UUID: utils.generateUserID() as SegmentUUID,
|
||||
category: this.segments[index].category,
|
||||
actionType: this.segments[index].actionType,
|
||||
source: SponsorSourceType.Local
|
||||
};
|
||||
|
||||
const segmentTimes = Config.config.segmentTimes.get(sponsorVideoID) || [];
|
||||
segmentTimes.push(sponsorTimesSubmitting);
|
||||
Config.config.segmentTimes.set(sponsorVideoID, segmentTimes);
|
||||
|
||||
this.props.contentContainer().sponsorTimesSubmitting.push(sponsorTimesSubmitting);
|
||||
this.props.contentContainer().updatePreviewBar();
|
||||
this.props.contentContainer().resetSponsorSubmissionNotice();
|
||||
this.props.contentContainer().updateEditButtonsOnPlayer();
|
||||
|
||||
this.contentContainer().vote(0, this.segments[index].UUID, undefined, this);
|
||||
|
||||
const copied = this.state.copied;
|
||||
copied[index] = SkipNoticeAction.CopyDownvote;
|
||||
|
||||
this.setState({
|
||||
downvoting: value,
|
||||
choosingCategory: false
|
||||
copied
|
||||
});
|
||||
}
|
||||
|
||||
clearConfigListener(): void {
|
||||
if (this.configListener) {
|
||||
Config.configListeners.splice(Config.configListeners.indexOf(this.configListener), 1);
|
||||
this.configListener = null;
|
||||
}
|
||||
unskipAction(index: number): void {
|
||||
this.state.skipButtonCallback(index);
|
||||
}
|
||||
|
||||
openCategoryChooser(): void {
|
||||
// Add as a config listener
|
||||
this.configListener = () => this.forceUpdate();
|
||||
Config.configListeners.push(this.configListener);
|
||||
|
||||
this.setState({
|
||||
choosingCategory: true,
|
||||
downvoting: false
|
||||
}, () => {
|
||||
if (this.segments.length > 1) {
|
||||
// Use the action selectors as a submit button
|
||||
this.prepAction(SkipNoticeAction.CategoryVote);
|
||||
}
|
||||
});
|
||||
openEditingOptions(): void {
|
||||
this.resetStateToStart(undefined, true);
|
||||
}
|
||||
|
||||
getCategoryOptions(): React.ReactElement[] {
|
||||
const elements = [];
|
||||
|
||||
for (const category of Config.config.categorySelections) {
|
||||
const categories = (CompileConfig.categoryList.filter((cat => getCategoryActionType(cat as Category) === CategoryActionType.Skippable))) as Category[];
|
||||
for (const category of categories) {
|
||||
elements.push(
|
||||
<option value={category.name}
|
||||
key={category.name}>
|
||||
{chrome.i18n.getMessage("category_" + category.name)}
|
||||
<option value={category}
|
||||
key={category}
|
||||
className={this.getCategoryNameClass(category)}>
|
||||
{chrome.i18n.getMessage("category_" + category)}
|
||||
</option>
|
||||
);
|
||||
}
|
||||
|
||||
if (elements.length < CompileConfig.categoryList.length) {
|
||||
// Add show more button
|
||||
elements.push(
|
||||
<option value={"moreCategories"}
|
||||
key={"moreCategories"}>
|
||||
{chrome.i18n.getMessage("moreCategories")}
|
||||
</option>
|
||||
);
|
||||
}
|
||||
|
||||
return elements;
|
||||
}
|
||||
|
||||
categorySelectionChange(event: React.ChangeEvent<HTMLSelectElement>): void {
|
||||
// See if show more categories was pressed
|
||||
if (event.target.value === "moreCategories") {
|
||||
// Open options page
|
||||
chrome.runtime.sendMessage({"message": "openConfig"});
|
||||
|
||||
// Reset option to original
|
||||
event.target.value = this.segments[0].category;
|
||||
return;
|
||||
}
|
||||
getCategoryNameClass(category: string): string {
|
||||
return this.props.contentContainer().lockedCategories.includes(category) ? "sponsorBlockLockedColor" : ""
|
||||
}
|
||||
|
||||
unskip(index: number): void {
|
||||
this.contentContainer().unskipSponsorTime(this.segments[index]);
|
||||
this.contentContainer().unskipSponsorTime(this.segments[index], this.props.unskipTime);
|
||||
|
||||
this.unskippedMode(index, chrome.i18n.getMessage("reskip"));
|
||||
}
|
||||
|
||||
/** Sets up notice to be not skipped yet */
|
||||
unskippedMode(index: number, buttonText: string): void {
|
||||
//setup new callback and reset countdown
|
||||
this.setState(this.getUnskippedModeInfo(index, buttonText), () => {
|
||||
this.noticeRef.current.resetCountdown();
|
||||
});
|
||||
}
|
||||
|
||||
getUnskippedModeInfo(index: number, buttonText: string): SkipNoticeState {
|
||||
const maxCountdownTime = () => {
|
||||
const sponsorTime = this.segments[index];
|
||||
const duration = Math.round((sponsorTime.segment[1] - this.contentContainer().v.currentTime) * (1 / this.contentContainer().v.playbackRate));
|
||||
|
||||
return Math.max(duration, 4);
|
||||
};
|
||||
|
||||
return {
|
||||
unskipText: buttonText,
|
||||
unskipCallback: (index) => this.reskip(index),
|
||||
// change max duration to however much of the sponsor is left
|
||||
maxCountdownTime: maxCountdownTime,
|
||||
countdownTime: maxCountdownTime()
|
||||
} as SkipNoticeState;
|
||||
this.unskippedMode(index, this.getReskipText());
|
||||
}
|
||||
|
||||
reskip(index: number): void {
|
||||
this.contentContainer().reskipSponsorTime(this.segments[index]);
|
||||
|
||||
const newState: SkipNoticeState = {
|
||||
unskipText: chrome.i18n.getMessage("unskip"),
|
||||
unskipCallback: this.unskip.bind(this),
|
||||
skipButtonText: this.getUnskipText(),
|
||||
skipButtonCallback: this.unskip.bind(this),
|
||||
|
||||
maxCountdownTime: () => 4,
|
||||
countdownTime: 4
|
||||
maxCountdownTime: () => Config.config.skipNoticeDuration,
|
||||
countdownTime: Config.config.skipNoticeDuration
|
||||
};
|
||||
|
||||
// See if the title should be changed
|
||||
@@ -475,22 +601,70 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
|
||||
});
|
||||
}
|
||||
|
||||
afterVote(segment: SponsorTime, type: number, category: string): void {
|
||||
/** Sets up notice to be not skipped yet */
|
||||
unskippedMode(index: number, buttonText: string): void {
|
||||
//setup new callback and reset countdown
|
||||
this.setState(this.getUnskippedModeInfo(index, buttonText), () => {
|
||||
this.noticeRef.current.resetCountdown();
|
||||
});
|
||||
}
|
||||
|
||||
getUnskippedModeInfo(index: number, buttonText: string): SkipNoticeState {
|
||||
const changeCountdown = getCategoryActionType(this.segments[index].category) === CategoryActionType.Skippable;
|
||||
|
||||
const maxCountdownTime = changeCountdown ? () => {
|
||||
const sponsorTime = this.segments[index];
|
||||
const duration = Math.round((sponsorTime.segment[1] - this.contentContainer().v.currentTime) * (1 / this.contentContainer().v.playbackRate));
|
||||
|
||||
return Math.max(duration, Config.config.skipNoticeDuration);
|
||||
} : this.state.maxCountdownTime;
|
||||
|
||||
return {
|
||||
skipButtonText: buttonText,
|
||||
skipButtonCallback: (index) => this.reskip(index),
|
||||
// change max duration to however much of the sponsor is left
|
||||
maxCountdownTime: maxCountdownTime,
|
||||
countdownTime: maxCountdownTime()
|
||||
} as SkipNoticeState;
|
||||
}
|
||||
|
||||
afterVote(segment: SponsorTime, type: number, category: Category): void {
|
||||
const index = utils.getSponsorIndexFromUUID(this.segments, segment.UUID);
|
||||
const wikiLinkText = CompileConfig.wikiLinks[segment.category];
|
||||
|
||||
const voted = this.state.voted;
|
||||
switch (type) {
|
||||
case 0:
|
||||
this.clearConfigListener();
|
||||
this.setNoticeInfoMessageWithOnClick(() => window.open(wikiLinkText), chrome.i18n.getMessage("OpenCategoryWikiPage"));
|
||||
|
||||
voted[index] = SkipNoticeAction.Downvote;
|
||||
break;
|
||||
case 1:
|
||||
voted[index] = SkipNoticeAction.Upvote;
|
||||
break;
|
||||
case 20:
|
||||
voted[index] = SkipNoticeAction.None;
|
||||
break;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
voted
|
||||
});
|
||||
|
||||
this.addVoteButtonInfo(chrome.i18n.getMessage("voted"));
|
||||
|
||||
if (type === 0) {
|
||||
this.setNoticeInfoMessage(chrome.i18n.getMessage("hitGoBack"));
|
||||
this.adjustDownvotingState(false);
|
||||
}
|
||||
|
||||
// Change the sponsor locally
|
||||
if (segment) {
|
||||
if (type === 0) {
|
||||
segment.hidden = SponsorHideType.Downvoted;
|
||||
} else if (category) {
|
||||
segment.category = category;
|
||||
segment.category = category; // This is the actual segment on the video page
|
||||
this.segments[index].category = category; //this is the segment inside the skip notice.
|
||||
} else if (type === 1) {
|
||||
segment.hidden = SponsorHideType.Visible;
|
||||
}
|
||||
|
||||
|
||||
this.contentContainer().updatePreviewBar();
|
||||
}
|
||||
}
|
||||
@@ -525,6 +699,79 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
|
||||
|
||||
this.props.closeListener();
|
||||
}
|
||||
|
||||
clearConfigListener(): void {
|
||||
if (this.configListener) {
|
||||
Config.configListeners.splice(Config.configListeners.indexOf(this.configListener), 1);
|
||||
this.configListener = null;
|
||||
}
|
||||
}
|
||||
|
||||
unmutedListener(): void {
|
||||
if (this.props.segments.length === 1
|
||||
&& this.props.segments[0].actionType === ActionType.Mute
|
||||
&& this.contentContainer().v.currentTime >= this.props.segments[0].segment[1]) {
|
||||
this.setState({
|
||||
showSkipButton: false
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
resetStateToStart(actionState: SkipNoticeAction = SkipNoticeAction.None, editing = false, choosingCategory = false): void {
|
||||
this.setState({
|
||||
actionState: actionState,
|
||||
editing: editing,
|
||||
choosingCategory: choosingCategory,
|
||||
thanksForVotingText: null,
|
||||
messages: []
|
||||
});
|
||||
}
|
||||
|
||||
downvoteButtonColor(downvoteType: SkipNoticeAction): string {
|
||||
// Also used for "Copy and Downvote"
|
||||
if (this.segments.length > 1) {
|
||||
return (this.state.actionState === downvoteType) ? this.selectedColor : this.unselectedColor;
|
||||
} else {
|
||||
// You dont have segment selectors so the lockbutton needs to be colored and cannot be selected.
|
||||
return Config.config.isVip && this.segments[0].locked === 1 ? this.lockedColor : this.unselectedColor;
|
||||
}
|
||||
}
|
||||
|
||||
private getUnskipText(): string {
|
||||
switch (this.props.segments[0].actionType) {
|
||||
case ActionType.Mute: {
|
||||
return chrome.i18n.getMessage("unmute");
|
||||
}
|
||||
case ActionType.Skip:
|
||||
default: {
|
||||
return chrome.i18n.getMessage("unskip");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private getReskipText(): string {
|
||||
switch (this.props.segments[0].actionType) {
|
||||
case ActionType.Mute: {
|
||||
return chrome.i18n.getMessage("mute");
|
||||
}
|
||||
case ActionType.Skip:
|
||||
default: {
|
||||
return chrome.i18n.getMessage("reskip");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private getSkipText(): string {
|
||||
switch (this.props.segments[0].actionType) {
|
||||
case ActionType.Mute: {
|
||||
return chrome.i18n.getMessage("mute");
|
||||
}
|
||||
case ActionType.Skip:
|
||||
default: {
|
||||
return chrome.i18n.getMessage("skip");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default SkipNoticeComponent;
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
import * as React from "react";
|
||||
|
||||
import Config from "../config";
|
||||
import * as CompileConfig from "../../config.json";
|
||||
|
||||
import Config from "../config";
|
||||
import { ActionType, ActionTypes, Category, CategoryActionType, ContentContainer, SponsorTime } from "../types";
|
||||
import Utils from "../utils";
|
||||
import { ContentContainer, SponsorTime } from "../types";
|
||||
import { getCategoryActionType } from "../utils/categoryUtils";
|
||||
import SubmissionNoticeComponent from "./SubmissionNoticeComponent";
|
||||
import { RectangleTooltip } from "../render/RectangleTooltip";
|
||||
|
||||
|
||||
const utils = new Utils();
|
||||
|
||||
export interface SponsorTimeEditProps {
|
||||
@@ -16,11 +18,13 @@ export interface SponsorTimeEditProps {
|
||||
contentContainer: ContentContainer,
|
||||
|
||||
submissionNotice: SubmissionNoticeComponent;
|
||||
categoryList?: Category[];
|
||||
}
|
||||
|
||||
export interface SponsorTimeEditState {
|
||||
editing: boolean;
|
||||
sponsorTimeEdits: [string, string];
|
||||
selectedCategory: Category;
|
||||
}
|
||||
|
||||
const DEFAULT_CATEGORY = "chooseACategory";
|
||||
@@ -30,19 +34,26 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
idSuffix: string;
|
||||
|
||||
categoryOptionRef: React.RefObject<HTMLSelectElement>;
|
||||
actionTypeOptionRef: React.RefObject<HTMLSelectElement>;
|
||||
|
||||
configUpdateListener: () => void;
|
||||
|
||||
previousSkipType: CategoryActionType;
|
||||
timeBeforeChangingToPOI: number; // Initialized when first selecting POI
|
||||
|
||||
constructor(props: SponsorTimeEditProps) {
|
||||
super(props);
|
||||
|
||||
this.categoryOptionRef = React.createRef();
|
||||
this.actionTypeOptionRef = React.createRef();
|
||||
|
||||
this.idSuffix = this.props.idSuffix;
|
||||
|
||||
this.previousSkipType = CategoryActionType.Skippable;
|
||||
this.state = {
|
||||
editing: false,
|
||||
sponsorTimeEdits: [null, null]
|
||||
sponsorTimeEdits: [null, null],
|
||||
selectedCategory: DEFAULT_CATEGORY as Category
|
||||
};
|
||||
}
|
||||
|
||||
@@ -52,6 +63,11 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
// Prevent scrolling while changing times
|
||||
document.getElementById("sponsorTimesContainer" + this.idSuffix).addEventListener('wheel', function (event) {
|
||||
event.preventDefault();
|
||||
}, {passive: false});
|
||||
|
||||
// Add as a config listener
|
||||
if (!this.configUpdateListener) {
|
||||
this.configUpdateListener = () => this.configUpdate();
|
||||
@@ -82,7 +98,6 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
node.style.setProperty("text-shadow", "none", "important");
|
||||
}
|
||||
};
|
||||
|
||||
// Create time display
|
||||
let timeDisplay: JSX.Element;
|
||||
const sponsorTime = this.props.contentContainer().sponsorTimesSubmitting[this.props.index];
|
||||
@@ -97,61 +112,54 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
onClick={() => this.setTimeToNow(0)}>
|
||||
{chrome.i18n.getMessage("bracketNow")}
|
||||
</span>
|
||||
|
||||
<input id={"submittingTime0" + this.idSuffix}
|
||||
className="sponsorTimeEdit sponsorTimeEditInput"
|
||||
ref={oldYouTubeDarkStyles}
|
||||
type="text"
|
||||
value={this.state.sponsorTimeEdits[0]}
|
||||
onChange={(e) => {
|
||||
const sponsorTimeEdits = this.state.sponsorTimeEdits;
|
||||
sponsorTimeEdits[0] = e.target.value;
|
||||
|
||||
this.setState({sponsorTimeEdits});
|
||||
|
||||
this.saveEditTimes();
|
||||
}}>
|
||||
onChange={(e) => {this.handleOnChange(0, e, sponsorTime, e.target.value)}}
|
||||
onWheel={(e) => {this.changeTimesWhenScrolling(0, e, sponsorTime)}}>
|
||||
</input>
|
||||
|
||||
<span>
|
||||
{" " + chrome.i18n.getMessage("to") + " "}
|
||||
</span>
|
||||
{getCategoryActionType(sponsorTime.category) === CategoryActionType.Skippable ? (
|
||||
<span>
|
||||
<span>
|
||||
{" " + chrome.i18n.getMessage("to") + " "}
|
||||
</span>
|
||||
|
||||
<input id={"submittingTime1" + this.idSuffix}
|
||||
className="sponsorTimeEdit sponsorTimeEditInput"
|
||||
ref={oldYouTubeDarkStyles}
|
||||
type="text"
|
||||
value={this.state.sponsorTimeEdits[1]}
|
||||
onChange={(e) => {
|
||||
const sponsorTimeEdits = this.state.sponsorTimeEdits;
|
||||
sponsorTimeEdits[1] = e.target.value;
|
||||
<input id={"submittingTime1" + this.idSuffix}
|
||||
className="sponsorTimeEdit sponsorTimeEditInput"
|
||||
ref={oldYouTubeDarkStyles}
|
||||
type="text"
|
||||
value={this.state.sponsorTimeEdits[1]}
|
||||
onChange={(e) => {this.handleOnChange(1, e, sponsorTime, e.target.value)}}
|
||||
onWheel={(e) => {this.changeTimesWhenScrolling(1, e, sponsorTime)}}>
|
||||
</input>
|
||||
|
||||
this.setState({sponsorTimeEdits});
|
||||
<span id={"nowButton1" + this.idSuffix}
|
||||
className="sponsorNowButton"
|
||||
onClick={() => this.setTimeToNow(1)}>
|
||||
{chrome.i18n.getMessage("bracketNow")}
|
||||
</span>
|
||||
|
||||
this.saveEditTimes();
|
||||
}}>
|
||||
</input>
|
||||
|
||||
<span id={"nowButton1" + this.idSuffix}
|
||||
className="sponsorNowButton"
|
||||
onClick={() => this.setTimeToNow(1)}>
|
||||
{chrome.i18n.getMessage("bracketNow")}
|
||||
</span>
|
||||
|
||||
<span id={"endButton" + this.idSuffix}
|
||||
className="sponsorNowButton"
|
||||
onClick={() => this.setTimeToEnd()}>
|
||||
{chrome.i18n.getMessage("bracketEnd")}
|
||||
</span>
|
||||
<span id={"endButton" + this.idSuffix}
|
||||
className="sponsorNowButton"
|
||||
onClick={() => this.setTimeToEnd()}>
|
||||
{chrome.i18n.getMessage("bracketEnd")}
|
||||
</span>
|
||||
</span>
|
||||
): ""}
|
||||
</div>
|
||||
);
|
||||
} else {
|
||||
timeDisplay = (
|
||||
|
||||
<div id={"sponsorTimesContainer" + this.idSuffix}
|
||||
className="sponsorTimeDisplay"
|
||||
onClick={this.toggleEditTime.bind(this)}>
|
||||
{utils.getFormattedTime(segment[0], true) +
|
||||
((!isNaN(segment[1])) ? " " + chrome.i18n.getMessage("to") + " " + utils.getFormattedTime(segment[1], true) : "")}
|
||||
((!isNaN(segment[1]) && getCategoryActionType(sponsorTime.category) === CategoryActionType.Skippable)
|
||||
? " " + chrome.i18n.getMessage("to") + " " + utils.getFormattedTime(segment[1], true) : "")}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -164,22 +172,36 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
{/* Category */}
|
||||
<div style={{position: "relative"}}>
|
||||
<select id={"sponsorTimeCategories" + this.idSuffix}
|
||||
className="sponsorTimeCategories"
|
||||
className="sponsorTimeEditSelector sponsorTimeCategories"
|
||||
defaultValue={sponsorTime.category}
|
||||
ref={this.categoryOptionRef}
|
||||
onChange={this.categorySelectionChange.bind(this)}>
|
||||
{this.getCategoryOptions()}
|
||||
</select>
|
||||
|
||||
<img id={"sponsorTimeCategoriesHelpButton" + this.idSuffix}
|
||||
className="helpButton"
|
||||
src={chrome.extension.getURL("icons/help.svg")}
|
||||
title={chrome.i18n.getMessage("categoryGuidelines")}
|
||||
onClick={() => chrome.runtime.sendMessage({"message": "openConfig"})}>
|
||||
|
||||
</img>
|
||||
{/* open in new tab */}
|
||||
<a href="https://wiki.sponsor.ajay.app/index.php/Segment_Categories"
|
||||
target="_blank" rel="noreferrer">
|
||||
<img id={"sponsorTimeCategoriesHelpButton" + this.idSuffix}
|
||||
className="helpButton"
|
||||
src={chrome.extension.getURL("icons/help.svg")}
|
||||
title={chrome.i18n.getMessage("categoryGuidelines")} />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{/* Action Type */}
|
||||
{CompileConfig.categorySupport[sponsorTime.category]?.length > 1 ? (
|
||||
<div style={{position: "relative"}}>
|
||||
<select id={"sponsorTimeActionTypes" + this.idSuffix}
|
||||
className="sponsorTimeEditSelector sponsorTimeActionTypes"
|
||||
defaultValue={sponsorTime.actionType}
|
||||
ref={this.actionTypeOptionRef}
|
||||
onChange={() => this.saveEditTimes()}>
|
||||
{this.getActionTypeOptions(sponsorTime)}
|
||||
</select>
|
||||
</div>
|
||||
): ""}
|
||||
|
||||
<br/>
|
||||
|
||||
{/* Editing Tools */}
|
||||
@@ -190,10 +212,10 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
{chrome.i18n.getMessage("delete")}
|
||||
</span>
|
||||
|
||||
{(!isNaN(segment[1])) ? (
|
||||
{(!isNaN(segment[1]) && getCategoryActionType(sponsorTime.category) === CategoryActionType.Skippable) ? (
|
||||
<span id={"sponsorTimePreviewButton" + this.idSuffix}
|
||||
className="sponsorTimeEditButton"
|
||||
onClick={this.previewTime.bind(this)}>
|
||||
onClick={(e) => this.previewTime(e.ctrlKey, e.shiftKey)}>
|
||||
{chrome.i18n.getMessage("preview")}
|
||||
</span>
|
||||
): ""}
|
||||
@@ -217,6 +239,70 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
);
|
||||
}
|
||||
|
||||
handleOnChange(index: number, e: React.ChangeEvent, sponsorTime: SponsorTime, targetValue: string): void {
|
||||
const sponsorTimeEdits = this.state.sponsorTimeEdits;
|
||||
|
||||
// check if change is small engough to show tooltip
|
||||
const before = utils.getFormattedTimeToSeconds(sponsorTimeEdits[index]);
|
||||
const after = utils.getFormattedTimeToSeconds(targetValue);
|
||||
const difference = Math.abs(before - after);
|
||||
if (0 < difference && difference< 0.5) this.showToolTip();
|
||||
|
||||
sponsorTimeEdits[index] = targetValue;
|
||||
if (index === 0 && getCategoryActionType(sponsorTime.category) === CategoryActionType.POI) sponsorTimeEdits[1] = targetValue;
|
||||
|
||||
this.setState({sponsorTimeEdits});
|
||||
this.saveEditTimes();
|
||||
}
|
||||
changeTimesWhenScrolling(index: number, e: React.WheelEvent, sponsorTime: SponsorTime): void {
|
||||
let step = 0;
|
||||
// shift + ctrl = 1
|
||||
// ctrl = 0.1
|
||||
// default = 0.01
|
||||
// shift = 0.001
|
||||
if (e.shiftKey) {
|
||||
step = (e.ctrlKey) ? 1 : 0.001;
|
||||
} else {
|
||||
step = (e.ctrlKey) ? 0.1 : 0.01;
|
||||
}
|
||||
|
||||
const sponsorTimeEdits = this.state.sponsorTimeEdits;
|
||||
let timeAsNumber = utils.getFormattedTimeToSeconds(this.state.sponsorTimeEdits[index]);
|
||||
if (timeAsNumber !== null && e.deltaY != 0) {
|
||||
if (e.deltaY < 0) {
|
||||
timeAsNumber += step;
|
||||
} else if (timeAsNumber >= step) {
|
||||
timeAsNumber -= step;
|
||||
} else {
|
||||
timeAsNumber = 0;
|
||||
}
|
||||
sponsorTimeEdits[index] = utils.getFormattedTime(timeAsNumber, true);
|
||||
if (getCategoryActionType(sponsorTime.category) === CategoryActionType.POI) sponsorTimeEdits[1] = sponsorTimeEdits[0];
|
||||
|
||||
this.setState({sponsorTimeEdits});
|
||||
this.saveEditTimes();
|
||||
}
|
||||
}
|
||||
|
||||
showToolTip(): void {
|
||||
if (!Config.config.scrollToEditTimeUpdate && document.getElementById("sponsorRectangleTooltip" + "sponsorTimesContainer" + this.idSuffix) === null) {
|
||||
const element = document.getElementById("sponsorTimesContainer" + this.idSuffix);
|
||||
new RectangleTooltip({
|
||||
text: chrome.i18n.getMessage("SponsorTimeEditScrollNewFeature"),
|
||||
referenceNode: element.parentElement,
|
||||
prependElement: element,
|
||||
timeout: 15,
|
||||
bottomOffset: 0 + "px",
|
||||
leftOffset: -318 + "px",
|
||||
backgroundColor: "rgba(28, 28, 28, 1.0)",
|
||||
htmlId: "sponsorTimesContainer" + this.idSuffix,
|
||||
buttonFunction: () => { Config.config.scrollToEditTimeUpdate = true },
|
||||
fontSize: "14px",
|
||||
maxHeight: "200px"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
getCategoryOptions(): React.ReactElement[] {
|
||||
const elements = [(
|
||||
<option value={DEFAULT_CATEGORY}
|
||||
@@ -225,10 +311,11 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
</option>
|
||||
)];
|
||||
|
||||
for (const category of CompileConfig.categoryList) {
|
||||
for (const category of (this.props.categoryList ?? CompileConfig.categoryList)) {
|
||||
elements.push(
|
||||
<option value={category}
|
||||
key={category}>
|
||||
key={category}
|
||||
className={this.getCategoryLockedClass(category)}>
|
||||
{chrome.i18n.getMessage("category_" + category)}
|
||||
</option>
|
||||
);
|
||||
@@ -237,9 +324,13 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
return elements;
|
||||
}
|
||||
|
||||
getCategoryLockedClass(category: string): string {
|
||||
return this.props.contentContainer().lockedCategories.includes(category) ? "sponsorBlockLockedColor" : "";
|
||||
}
|
||||
|
||||
categorySelectionChange(event: React.ChangeEvent<HTMLSelectElement>): void {
|
||||
// See if show more categories was pressed
|
||||
if (!Config.config.categorySelections.some((category) => category.name === event.target.value)) {
|
||||
if (event.target.value !== DEFAULT_CATEGORY && !Config.config.categorySelections.some((category) => category.name === event.target.value)) {
|
||||
const chosenCategory = event.target.value;
|
||||
event.target.value = DEFAULT_CATEGORY;
|
||||
|
||||
@@ -247,15 +338,44 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
if (confirm(chrome.i18n.getMessage("enableThisCategoryFirst")
|
||||
.replace("{0}", chrome.i18n.getMessage("category_" + chosenCategory)))) {
|
||||
// Open options page
|
||||
chrome.runtime.sendMessage({"message": "openConfig"});
|
||||
chrome.runtime.sendMessage({message: "openConfig", hash: chosenCategory + "OptionsName"});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (getCategoryActionType(event.target.value as Category) === CategoryActionType.POI) {
|
||||
if (this.previousSkipType === CategoryActionType.Skippable) this.timeBeforeChangingToPOI = utils.getFormattedTimeToSeconds(this.state.sponsorTimeEdits[1]);
|
||||
this.setTimeTo(1, null);
|
||||
this.props.contentContainer().updateEditButtonsOnPlayer();
|
||||
|
||||
if (this.props.contentContainer().sponsorTimesSubmitting
|
||||
.some((segment, i) => segment.category === event.target.value && i !== this.props.index)) {
|
||||
alert(chrome.i18n.getMessage("poiOnlyOneSegment"));
|
||||
}
|
||||
} else if (getCategoryActionType(event.target.value as Category) === CategoryActionType.Skippable && this.previousSkipType === CategoryActionType.POI) {
|
||||
this.setTimeTo(1, this.timeBeforeChangingToPOI);
|
||||
}
|
||||
|
||||
this.previousSkipType = getCategoryActionType(event.target.value as Category);
|
||||
this.saveEditTimes();
|
||||
}
|
||||
|
||||
getActionTypeOptions(sponsorTime: SponsorTime): React.ReactElement[] {
|
||||
const elements = [];
|
||||
|
||||
for (const actionType of CompileConfig.categorySupport[sponsorTime.category]) {
|
||||
elements.push(
|
||||
<option value={actionType}
|
||||
key={actionType}>
|
||||
{chrome.i18n.getMessage(actionType)}
|
||||
</option>
|
||||
);
|
||||
}
|
||||
|
||||
return elements;
|
||||
}
|
||||
|
||||
setTimeToNow(index: number): void {
|
||||
this.setTimeTo(index, this.props.contentContainer().getRealCurrentTime());
|
||||
}
|
||||
@@ -264,11 +384,16 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
this.setTimeTo(1, this.props.contentContainer().v.duration);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param index
|
||||
* @param time If null, will set time to the first index's time
|
||||
*/
|
||||
setTimeTo(index: number, time: number): void {
|
||||
const sponsorTime = this.props.contentContainer().sponsorTimesSubmitting[this.props.index];
|
||||
if (time === null) time = sponsorTime.segment[0];
|
||||
|
||||
sponsorTime.segment[index] =
|
||||
time;
|
||||
sponsorTime.segment[index] = time;
|
||||
if (getCategoryActionType(sponsorTime.category) === CategoryActionType.POI) sponsorTime.segment[1] = time;
|
||||
|
||||
this.setState({
|
||||
sponsorTimeEdits: this.getFormattedSponsorTimesEdits(sponsorTime)
|
||||
@@ -312,20 +437,26 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
}
|
||||
}
|
||||
|
||||
sponsorTimesSubmitting[this.props.index].category = this.categoryOptionRef.current.value;
|
||||
sponsorTimesSubmitting[this.props.index].category = this.categoryOptionRef.current.value as Category;
|
||||
sponsorTimesSubmitting[this.props.index].actionType =
|
||||
this.actionTypeOptionRef?.current ? this.actionTypeOptionRef.current.value as ActionType : ActionType.Skip;
|
||||
|
||||
Config.config.segmentTimes.set(this.props.contentContainer().sponsorVideoID, sponsorTimesSubmitting);
|
||||
|
||||
this.props.contentContainer().updatePreviewBar();
|
||||
}
|
||||
|
||||
previewTime(): void {
|
||||
previewTime(ctrlPressed = false, shiftPressed = false): void {
|
||||
const sponsorTimes = this.props.contentContainer().sponsorTimesSubmitting;
|
||||
const index = this.props.index;
|
||||
|
||||
const skipTime = sponsorTimes[index].segment[0];
|
||||
|
||||
this.props.contentContainer().previewTime(skipTime - 2);
|
||||
let seekTime = 2;
|
||||
if (ctrlPressed) seekTime = 0.5;
|
||||
if (shiftPressed) seekTime = 0.25;
|
||||
|
||||
this.props.contentContainer().previewTime(skipTime - (seekTime * this.props.contentContainer().v.playbackRate));
|
||||
}
|
||||
|
||||
inspectTime(): void {
|
||||
@@ -334,7 +465,7 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
|
||||
const skipTime = sponsorTimes[index].segment[0];
|
||||
|
||||
this.props.contentContainer().previewTime(skipTime + 0.000001, false);
|
||||
this.props.contentContainer().previewTime(skipTime + 0.0001, false);
|
||||
}
|
||||
|
||||
deleteTime(): void {
|
||||
@@ -369,4 +500,4 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
|
||||
}
|
||||
}
|
||||
|
||||
export default SponsorTimeEditComponent;
|
||||
export default SponsorTimeEditComponent;
|
||||
|
||||
@@ -12,16 +12,16 @@ export interface SubmissionNoticeProps {
|
||||
|
||||
callback: () => unknown;
|
||||
|
||||
closeListener: () => void
|
||||
closeListener: () => void;
|
||||
}
|
||||
|
||||
export interface SubmissionNoticeeState {
|
||||
export interface SubmissionNoticeState {
|
||||
noticeTitle: string,
|
||||
messages: string[],
|
||||
idSuffix: string;
|
||||
}
|
||||
|
||||
class SubmissionNoticeComponent extends React.Component<SubmissionNoticeProps, SubmissionNoticeeState> {
|
||||
class SubmissionNoticeComponent extends React.Component<SubmissionNoticeProps, SubmissionNoticeState> {
|
||||
// Contains functions and variables from the content script needed by the skip notice
|
||||
contentContainer: ContentContainer;
|
||||
|
||||
@@ -73,7 +73,7 @@ class SubmissionNoticeComponent extends React.Component<SubmissionNoticeProps, S
|
||||
idSuffix={this.state.idSuffix}
|
||||
ref={this.noticeRef}
|
||||
closeListener={this.cancel.bind(this)}
|
||||
zIndex={50000}>
|
||||
zIndex={5000}>
|
||||
|
||||
{/* Text Boxes */}
|
||||
{this.getMessageBoxes()}
|
||||
@@ -95,7 +95,7 @@ class SubmissionNoticeComponent extends React.Component<SubmissionNoticeProps, S
|
||||
|
||||
{/* Guidelines button */}
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton sponsorSkipNoticeRightButton"
|
||||
onClick={() => window.open("https://github.com/ajayyy/SponsorBlock/wiki/Guidelines")}>
|
||||
onClick={() => window.open("https://wiki.sponsor.ajay.app/index.php/Guidelines")}>
|
||||
|
||||
{chrome.i18n.getMessage(Config.config.submissionCountSinceCategories > 3 ? "guidelines" : "readTheGuidelines")}
|
||||
</button>
|
||||
@@ -123,7 +123,7 @@ class SubmissionNoticeComponent extends React.Component<SubmissionNoticeProps, S
|
||||
const timeRef = React.createRef<SponsorTimeEditComponent>();
|
||||
|
||||
elements.push(
|
||||
<SponsorTimeEditComponent key={i}
|
||||
<SponsorTimeEditComponent key={sponsorTimes[i].UUID}
|
||||
idSuffix={this.state.idSuffix + i}
|
||||
index={i}
|
||||
contentContainer={this.props.contentContainer}
|
||||
@@ -192,4 +192,4 @@ class SubmissionNoticeComponent extends React.Component<SubmissionNoticeProps, S
|
||||
}
|
||||
}
|
||||
|
||||
export default SubmissionNoticeComponent;
|
||||
export default SubmissionNoticeComponent;
|
||||
|
||||
202
src/config.ts
@@ -1,14 +1,14 @@
|
||||
import * as CompileConfig from "../config.json";
|
||||
import { CategorySelection, CategorySkipOption, PreviewBarOption, SponsorTime, StorageChangesObject, UnEncodedSegmentTimes as UnencodedSegmentTimes } from "./types";
|
||||
|
||||
import Utils from "./utils";
|
||||
const utils = new Utils();
|
||||
import * as invidiousList from "../ci/invidiouslist.json";
|
||||
import { Category, CategorySelection, CategorySkipOption, NoticeVisbilityMode, PreviewBarOption, SponsorTime, StorageChangesObject, UnEncodedSegmentTimes as UnencodedSegmentTimes } from "./types";
|
||||
|
||||
interface SBConfig {
|
||||
userID: string,
|
||||
/** Contains unsubmitted segments that the user has created. */
|
||||
isVip: boolean,
|
||||
lastIsVipUpdate: number,
|
||||
/* Contains unsubmitted segments that the user has created. */
|
||||
segmentTimes: SBMap<string, SponsorTime[]>,
|
||||
defaultCategory: string,
|
||||
defaultCategory: Category,
|
||||
whitelistedChannels: string[],
|
||||
forceChannelCheck: boolean,
|
||||
skipKeybind: string,
|
||||
@@ -20,26 +20,38 @@ interface SBConfig {
|
||||
submissionCountSinceCategories: number, // New count used to show the "Read The Guidelines!!" message
|
||||
showTimeWithSkips: boolean,
|
||||
disableSkipping: boolean,
|
||||
muteSegments: boolean,
|
||||
trackViewCount: boolean,
|
||||
trackViewCountInPrivate: 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,
|
||||
checkForUnlistedVideos: boolean,
|
||||
testingServer: boolean,
|
||||
refetchWhenNotFound: boolean,
|
||||
ytInfoPermissionGranted: boolean,
|
||||
askAboutUnlistedVideos: boolean,
|
||||
allowExpirements: boolean,
|
||||
showDonationLink: boolean,
|
||||
autoHideInfoButton: boolean,
|
||||
autoSkipOnMusicVideos: boolean,
|
||||
colorPalette: {
|
||||
red: string,
|
||||
white: string,
|
||||
locked: string
|
||||
},
|
||||
scrollToEditTimeUpdate: boolean,
|
||||
|
||||
// What categories should be skipped
|
||||
categorySelections: CategorySelection[],
|
||||
@@ -61,6 +73,10 @@ interface SBConfig {
|
||||
"preview-preview": PreviewBarOption,
|
||||
"music_offtopic": PreviewBarOption,
|
||||
"preview-music_offtopic": PreviewBarOption,
|
||||
"poi_highlight": PreviewBarOption,
|
||||
"preview-poi_highlight": PreviewBarOption,
|
||||
"filler": PreviewBarOption,
|
||||
"preview-filler": PreviewBarOption,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,8 +161,10 @@ const Config: SBObject = {
|
||||
configListeners: [],
|
||||
defaults: {
|
||||
userID: null,
|
||||
isVip: false,
|
||||
lastIsVipUpdate: 0,
|
||||
segmentTimes: new SBMap("segmentTimes"),
|
||||
defaultCategory: "chooseACategory",
|
||||
defaultCategory: "chooseACategory" as Category,
|
||||
whitelistedChannels: [],
|
||||
forceChannelCheck: false,
|
||||
skipKeybind: "Enter",
|
||||
@@ -158,32 +176,48 @@ const Config: SBObject = {
|
||||
submissionCountSinceCategories: 0,
|
||||
showTimeWithSkips: true,
|
||||
disableSkipping: false,
|
||||
muteSegments: true,
|
||||
trackViewCount: true,
|
||||
trackViewCountInPrivate: true,
|
||||
dontShowNotice: false,
|
||||
noticeVisibilityMode: NoticeVisbilityMode.FadedForAutoSkip,
|
||||
hideVideoPlayerControls: false,
|
||||
hideInfoButtonPlayerControls: false,
|
||||
hideDeleteButtonPlayerControls: false,
|
||||
hideUploadButtonPlayerControls: false,
|
||||
hideSkipButtonPlayerControls: false,
|
||||
hideDiscordLaunches: 0,
|
||||
hideDiscordLink: false,
|
||||
invidiousInstances: ["invidious.snopyta.org"],
|
||||
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,
|
||||
askAboutUnlistedVideos: true,
|
||||
allowExpirements: true,
|
||||
showDonationLink: true,
|
||||
autoHideInfoButton: true,
|
||||
autoSkipOnMusicVideos: false,
|
||||
scrollToEditTimeUpdate: false, // false means the tooltip will be shown
|
||||
|
||||
categorySelections: [{
|
||||
name: "sponsor",
|
||||
name: "sponsor" as Category,
|
||||
option: CategorySkipOption.AutoSkip
|
||||
}, {
|
||||
name: "poi_highlight" as Category,
|
||||
option: CategorySkipOption.ManualSkip
|
||||
}],
|
||||
|
||||
colorPalette: {
|
||||
red: "#780303",
|
||||
white: "#ffffff",
|
||||
locked: "#ffc83d"
|
||||
},
|
||||
|
||||
// Preview bar
|
||||
barTypes: {
|
||||
"preview-chooseACategory": {
|
||||
@@ -245,6 +279,22 @@ const Config: SBObject = {
|
||||
"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"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -341,20 +391,27 @@ function fetchConfig(): Promise<void> {
|
||||
}
|
||||
|
||||
function migrateOldFormats(config: SBConfig) {
|
||||
// Adding preview category
|
||||
if (!config["previewCategoryUpdate"]) {
|
||||
config["previewCategoryUpdate"] = true;
|
||||
if (config["fillerUpdate"] !== undefined) {
|
||||
chrome.storage.sync.remove("fillerUpdate");
|
||||
}
|
||||
if (config["highlightCategoryAdded"] !== undefined) {
|
||||
chrome.storage.sync.remove("highlightCategoryAdded");
|
||||
}
|
||||
if (config["highlightCategoryUpdate"] !== undefined) {
|
||||
chrome.storage.sync.remove("highlightCategoryUpdate");
|
||||
}
|
||||
|
||||
if (config["askAboutUnlistedVideos"]) {
|
||||
chrome.storage.sync.remove("askAboutUnlistedVideos");
|
||||
}
|
||||
|
||||
if (!config["autoSkipOnMusicVideosUpdate"]) {
|
||||
config["autoSkipOnMusicVideosUpdate"] = true;
|
||||
for (const selection of config.categorySelections) {
|
||||
if (selection.name === "intro"
|
||||
&& selection.option === CategorySkipOption.AutoSkip || selection.option === CategorySkipOption.ManualSkip) {
|
||||
if (selection.name === "music_offtopic"
|
||||
&& selection.option === CategorySkipOption.AutoSkip) {
|
||||
|
||||
// Add a default skip option for preview category
|
||||
config.categorySelections.push({
|
||||
name: "preview",
|
||||
option: CategorySkipOption.ManualSkip
|
||||
});
|
||||
// Ensure it gets updated
|
||||
config.categorySelections = config.categorySelections;
|
||||
config.autoSkipOnMusicVideos = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -370,100 +427,6 @@ function migrateOldFormats(config: SBConfig) {
|
||||
}
|
||||
}
|
||||
|
||||
// Auto vote removal
|
||||
if (config["autoUpvote"]) {
|
||||
chrome.storage.sync.remove("autoUpvote");
|
||||
}
|
||||
// mobileUpdateShowCount removal
|
||||
if (config["mobileUpdateShowCount"] !== undefined) {
|
||||
chrome.storage.sync.remove("mobileUpdateShowCount");
|
||||
}
|
||||
// categoryUpdateShowCount removal
|
||||
if (config["categoryUpdateShowCount"] !== undefined) {
|
||||
chrome.storage.sync.remove("categoryUpdateShowCount");
|
||||
}
|
||||
|
||||
// Channel URLS
|
||||
if (config.whitelistedChannels.length > 0 &&
|
||||
(config.whitelistedChannels[0] == null || config.whitelistedChannels[0].includes("/"))) {
|
||||
const channelURLFixer = async() => {
|
||||
const newChannelList: string[] = [];
|
||||
for (const item of config.whitelistedChannels) {
|
||||
if (item != null) {
|
||||
if (item.includes("/channel/")) {
|
||||
newChannelList.push(item.split("/")[2]);
|
||||
} else if (item.includes("/user/") && utils.isContentScript()) {
|
||||
|
||||
|
||||
// Replace channel URL with channelID
|
||||
const response = await utils.asyncRequestToCustomServer("GET", "https://sponsor.ajay.app/invidious/api/v1/channels/" + item.split("/")[2] + "?fields=authorId");
|
||||
|
||||
if (response.ok) {
|
||||
newChannelList.push((JSON.parse(response.responseText)).authorId);
|
||||
} else {
|
||||
// Add it at the beginning so it gets converted later
|
||||
newChannelList.unshift(item);
|
||||
}
|
||||
} else if (item.includes("/user/")) {
|
||||
// Add it at the beginning so it gets converted later (The API can only be called in the content script due to CORS issues)
|
||||
newChannelList.unshift(item);
|
||||
} else {
|
||||
newChannelList.push(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
config.whitelistedChannels = newChannelList;
|
||||
}
|
||||
|
||||
channelURLFixer();
|
||||
}
|
||||
|
||||
// Check if off-topic category needs to be removed
|
||||
for (let i = 0; i < config.categorySelections.length; i++) {
|
||||
if (config.categorySelections[i].name === "offtopic") {
|
||||
config.categorySelections.splice(i, 1);
|
||||
// Call set listener
|
||||
config.categorySelections = config.categorySelections;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Migrate old "sponsorTimes"
|
||||
if (config["sponsorTimes"]) {
|
||||
let jsonData: unknown = config["sponsorTimes"];
|
||||
|
||||
// Check if data is stored in the old format for SBMap (a JSON string)
|
||||
if (typeof jsonData === "string") {
|
||||
try {
|
||||
jsonData = JSON.parse(jsonData);
|
||||
} catch(e) {
|
||||
// Continue normally (out of this if statement)
|
||||
}
|
||||
}
|
||||
|
||||
// Otherwise junk data
|
||||
if (Array.isArray(jsonData)) {
|
||||
const oldMap = new Map(jsonData);
|
||||
oldMap.forEach((sponsorTimes: [number, number][], key) => {
|
||||
const segmentTimes: SponsorTime[] = [];
|
||||
for (const segment of sponsorTimes) {
|
||||
segmentTimes.push({
|
||||
segment: segment,
|
||||
category: "sponsor",
|
||||
UUID: null
|
||||
});
|
||||
}
|
||||
|
||||
config.segmentTimes.rawSet(key, segmentTimes);
|
||||
});
|
||||
|
||||
config.segmentTimes.update();
|
||||
}
|
||||
|
||||
chrome.storage.sync.remove("sponsorTimes");
|
||||
}
|
||||
|
||||
// Remove some old unused options
|
||||
if (config["sponsorVideoID"] !== undefined) {
|
||||
chrome.storage.sync.remove("sponsorVideoID");
|
||||
@@ -471,6 +434,11 @@ function migrateOldFormats(config: SBConfig) {
|
||||
if (config["previousVideoID"] !== undefined) {
|
||||
chrome.storage.sync.remove("previousVideoID");
|
||||
}
|
||||
|
||||
// populate invidiousInstances with new instances if 3p support is **DISABLED**
|
||||
if (!config["supportInvidious"] && config["invidiousInstances"].length !== invidiousList.length) {
|
||||
config["invidiousInstances"] = invidiousList;
|
||||
}
|
||||
}
|
||||
|
||||
async function setupConfig() {
|
||||
|
||||
729
src/content.ts
17
src/help.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import Config from "./config";
|
||||
import { showDonationLink } from "./utils/configUtils";
|
||||
|
||||
import Utils from "./utils";
|
||||
const utils = new Utils();
|
||||
|
||||
window.addEventListener('DOMContentLoaded', init);
|
||||
|
||||
async function init() {
|
||||
utils.localizeHtmlPage();
|
||||
|
||||
await utils.wait(() => Config.config !== null);
|
||||
|
||||
if (!showDonationLink()) {
|
||||
document.getElementById("sbDonate").style.display = "none";
|
||||
}
|
||||
}
|
||||
47
src/js-components/chat.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import Config from "../config";
|
||||
import Utils from "../utils";
|
||||
const utils = new Utils();
|
||||
|
||||
export interface ChatConfig {
|
||||
displayName: string,
|
||||
composerInitialValue?: string,
|
||||
customDescription?: string
|
||||
}
|
||||
|
||||
export function openChat(config: ChatConfig): void {
|
||||
const chat = document.createElement("div");
|
||||
chat.classList.add("sbChatNotice");
|
||||
chat.style.zIndex = "2000";
|
||||
|
||||
const iframe= document.createElement("iframe");
|
||||
iframe.src = "https://chat.sponsor.ajay.app/#" + utils.objectToURI("", config, false);
|
||||
chat.appendChild(iframe);
|
||||
|
||||
const closeButton = document.createElement("img");
|
||||
closeButton.classList.add("sbChatClose");
|
||||
closeButton.src = chrome.extension.getURL("icons/close.png");
|
||||
closeButton.addEventListener("click", () => {
|
||||
chat.remove();
|
||||
closeButton.remove();
|
||||
});
|
||||
chat.appendChild(closeButton);
|
||||
|
||||
const referenceNode = utils.findReferenceNode();
|
||||
referenceNode.prepend(chat);
|
||||
}
|
||||
|
||||
export async function openWarningChat(warningMessage: string): Promise<void> {
|
||||
const warningReasonMatch = warningMessage.match(/Warning reason: '(.+)'/);
|
||||
alert(chrome.i18n.getMessage("warningChatInfo") + `\n\n${warningReasonMatch ? ` Warning reason: ${warningReasonMatch[1]}` : ``}`);
|
||||
|
||||
const userNameData = await utils.asyncRequestToServer("GET", "/api/getUsername?userID=" + Config.config.userID);
|
||||
const userName = userNameData.ok ? JSON.parse(userNameData.responseText).userName : "";
|
||||
const publicUserID = await utils.getHash(Config.config.userID);
|
||||
|
||||
openChat({
|
||||
displayName: `${userName ? userName : ``}${userName !== publicUserID ? ` | ${publicUserID}` : ``}`,
|
||||
composerInitialValue: `I got a warning and confirm I [REMOVE THIS CAPITAL TEXT TO CONFIRM] reread the guidelines.` +
|
||||
warningReasonMatch ? ` Warning reason: ${warningReasonMatch[1]}` : ``,
|
||||
customDescription: chrome.i18n.getMessage("warningChatInfo")
|
||||
});
|
||||
}
|
||||
@@ -15,6 +15,7 @@ export interface PreviewBarSegment {
|
||||
segment: [number, number];
|
||||
category: string;
|
||||
unsubmitted: boolean;
|
||||
showLarger: boolean;
|
||||
}
|
||||
|
||||
class PreviewBar {
|
||||
@@ -101,10 +102,13 @@ class PreviewBar {
|
||||
let segment: PreviewBarSegment | null = null;
|
||||
let currentSegmentLength = Infinity;
|
||||
|
||||
for (const seg of this.segments) {
|
||||
if (seg.segment[0] <= timeInSeconds && seg.segment[1] > timeInSeconds) {
|
||||
const segmentLength = seg.segment[1] - seg.segment[0];
|
||||
for (const seg of this.segments) {//
|
||||
const segmentLength = seg.segment[1] - seg.segment[0];
|
||||
const minSize = this.getMinimumSize(seg.showLarger);
|
||||
|
||||
const startTime = segmentLength !== 0 ? seg.segment[0] : Math.floor(seg.segment[0]);
|
||||
const endTime = segmentLength > minSize ? seg.segment[1] : Math.ceil(seg.segment[0] + minSize);
|
||||
if (startTime <= timeInSeconds && endTime >= timeInSeconds) {
|
||||
if (segmentLength < currentSegmentLength) {
|
||||
currentSegmentLength = segmentLength;
|
||||
segment = seg;
|
||||
@@ -181,10 +185,10 @@ class PreviewBar {
|
||||
});
|
||||
}
|
||||
|
||||
createBar({category, unsubmitted, segment}: PreviewBarSegment): HTMLLIElement {
|
||||
createBar({category, unsubmitted, segment, showLarger}: PreviewBarSegment): HTMLLIElement {
|
||||
const bar = document.createElement('li');
|
||||
bar.classList.add('previewbar');
|
||||
bar.innerHTML = ' ';
|
||||
bar.innerHTML = showLarger ? ' ' : ' ';
|
||||
|
||||
const fullCategoryName = (unsubmitted ? 'preview-' : '') + category;
|
||||
bar.setAttribute('sponsorblock-category', fullCategoryName);
|
||||
@@ -193,8 +197,11 @@ class PreviewBar {
|
||||
if (!this.onMobileYouTube) bar.style.opacity = Config.config.barTypes[fullCategoryName]?.opacity;
|
||||
|
||||
bar.style.position = "absolute";
|
||||
bar.style.width = this.timeToPercentage(segment[1] - segment[0]);
|
||||
bar.style.left = this.timeToPercentage(segment[0]);
|
||||
const duration = Math.min(segment[1], this.videoDuration) - segment[0];
|
||||
if (duration > 0) bar.style.width = this.timeToPercentage(duration);
|
||||
|
||||
const time = segment[1] ? Math.min(this.videoDuration, segment[0]) : segment[0];
|
||||
bar.style.left = this.timeToPercentage(time);
|
||||
|
||||
return bar;
|
||||
}
|
||||
@@ -216,6 +223,13 @@ class PreviewBar {
|
||||
timeToPercentage(time: number): string {
|
||||
return Math.min(100, time / this.videoDuration * 100) + '%';
|
||||
}
|
||||
|
||||
/*
|
||||
* Approximate size on preview bar for smallest element (due to  )
|
||||
*/
|
||||
getMinimumSize(showLarger = false): number {
|
||||
return this.videoDuration * (showLarger ? 0.006 : 0.003);
|
||||
}
|
||||
}
|
||||
|
||||
export default PreviewBar;
|
||||
|
||||
221
src/js-components/skipButtonControlBar.ts
Normal file
@@ -0,0 +1,221 @@
|
||||
import Config from "../config";
|
||||
import { SponsorTime } from "../types";
|
||||
import { getSkippingText } from "../utils/categoryUtils";
|
||||
|
||||
import Utils from "../utils";
|
||||
const utils = new Utils();
|
||||
|
||||
export interface SkipButtonControlBarProps {
|
||||
skip: (segment: SponsorTime) => void;
|
||||
onMobileYouTube: boolean;
|
||||
}
|
||||
|
||||
export class SkipButtonControlBar {
|
||||
|
||||
container: HTMLElement;
|
||||
skipIcon: HTMLImageElement;
|
||||
textContainer: HTMLElement;
|
||||
chapterText: HTMLElement;
|
||||
segment: SponsorTime;
|
||||
|
||||
showKeybindHint = true;
|
||||
onMobileYouTube: boolean;
|
||||
|
||||
enabled = false;
|
||||
|
||||
timeout: NodeJS.Timeout;
|
||||
duration = 0;
|
||||
|
||||
skip: (segment: SponsorTime) => void;
|
||||
|
||||
// Used if on mobile page
|
||||
hideButton: () => void;
|
||||
showButton: () => void;
|
||||
|
||||
// Used by mobile only for swiping away
|
||||
left = 0;
|
||||
swipeStart = 0;
|
||||
|
||||
constructor(props: SkipButtonControlBarProps) {
|
||||
this.skip = props.skip;
|
||||
this.onMobileYouTube = props.onMobileYouTube;
|
||||
|
||||
this.container = document.createElement("div");
|
||||
this.container.classList.add("skipButtonControlBarContainer");
|
||||
this.container.classList.add("hidden");
|
||||
if (this.onMobileYouTube) this.container.classList.add("mobile");
|
||||
|
||||
this.skipIcon = document.createElement("img");
|
||||
this.skipIcon.src = chrome.runtime.getURL("icons/skipIcon.svg");
|
||||
this.skipIcon.classList.add("ytp-button");
|
||||
this.skipIcon.id = "sbSkipIconControlBarImage";
|
||||
|
||||
this.textContainer = document.createElement("div");
|
||||
|
||||
this.container.appendChild(this.skipIcon);
|
||||
this.container.appendChild(this.textContainer);
|
||||
this.container.addEventListener("click", () => this.toggleSkip());
|
||||
this.container.addEventListener("mouseenter", () => this.stopTimer());
|
||||
this.container.addEventListener("mouseleave", () => this.startTimer());
|
||||
if (this.onMobileYouTube) {
|
||||
this.container.addEventListener("touchstart", (e) => this.handleTouchStart(e));
|
||||
this.container.addEventListener("touchmove", (e) => this.handleTouchMove(e));
|
||||
this.container.addEventListener("touchend", () => this.handleTouchEnd());
|
||||
}
|
||||
}
|
||||
|
||||
getElement(): HTMLElement {
|
||||
return this.container;
|
||||
}
|
||||
|
||||
attachToPage(): void {
|
||||
const mountingContainer = this.getMountingContainer();
|
||||
this.chapterText = document.querySelector(".ytp-chapter-container");
|
||||
|
||||
if (mountingContainer && !mountingContainer.contains(this.container)) {
|
||||
if (this.onMobileYouTube) {
|
||||
mountingContainer.appendChild(this.container);
|
||||
} else {
|
||||
mountingContainer.insertBefore(this.container, this.chapterText);
|
||||
}
|
||||
|
||||
if (!this.onMobileYouTube) {
|
||||
utils.setupAutoHideAnimation(this.skipIcon, mountingContainer, false, false);
|
||||
} else {
|
||||
const { hide, show } = utils.setupCustomHideAnimation(this.skipIcon, mountingContainer, false, false);
|
||||
this.hideButton = hide;
|
||||
this.showButton = show;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private getMountingContainer(): HTMLElement {
|
||||
if (!this.onMobileYouTube) {
|
||||
return document.querySelector(".ytp-left-controls");
|
||||
} else {
|
||||
return document.getElementById("player-container-id");
|
||||
}
|
||||
}
|
||||
|
||||
enable(segment: SponsorTime, duration?: number): void {
|
||||
if (duration) this.duration = duration;
|
||||
this.segment = segment;
|
||||
this.enabled = true;
|
||||
|
||||
this.refreshText();
|
||||
this.textContainer?.classList?.remove("hidden");
|
||||
utils.disableAutoHideAnimation(this.skipIcon);
|
||||
|
||||
this.startTimer();
|
||||
}
|
||||
|
||||
refreshText(): void {
|
||||
if (this.segment) {
|
||||
this.chapterText?.classList?.add("hidden");
|
||||
this.container.classList.remove("hidden");
|
||||
this.textContainer.innerText = this.getTitle();
|
||||
this.skipIcon.setAttribute("title", this.getTitle());
|
||||
}
|
||||
}
|
||||
|
||||
setShowKeybindHint(show: boolean): void {
|
||||
this.showKeybindHint = show;
|
||||
|
||||
this.refreshText();
|
||||
}
|
||||
|
||||
stopTimer(): void {
|
||||
if (this.timeout) clearTimeout(this.timeout);
|
||||
}
|
||||
|
||||
startTimer(): void {
|
||||
this.stopTimer();
|
||||
this.timeout = setTimeout(() => this.disableText(), Math.max(Config.config.skipNoticeDuration, this.duration) * 1000);
|
||||
}
|
||||
|
||||
disable(): void {
|
||||
this.container.classList.add("hidden");
|
||||
this.textContainer?.classList?.remove("hidden");
|
||||
|
||||
this.chapterText?.classList?.remove("hidden");
|
||||
this.getChapterPrefix()?.classList?.remove("hidden");
|
||||
|
||||
this.enabled = false;
|
||||
}
|
||||
|
||||
toggleSkip(): void {
|
||||
this.skip(this.segment);
|
||||
this.disableText();
|
||||
}
|
||||
|
||||
disableText(): void {
|
||||
if (Config.config.hideVideoPlayerControls || Config.config.hideSkipButtonPlayerControls) {
|
||||
this.disable();
|
||||
return;
|
||||
}
|
||||
|
||||
this.container.classList.add("textDisabled");
|
||||
this.textContainer?.classList?.add("hidden");
|
||||
this.chapterText?.classList?.remove("hidden");
|
||||
|
||||
this.getChapterPrefix()?.classList?.add("hidden");
|
||||
|
||||
utils.enableAutoHideAnimation(this.skipIcon);
|
||||
if (this.onMobileYouTube) {
|
||||
this.hideButton();
|
||||
}
|
||||
}
|
||||
|
||||
updateMobileControls(): void {
|
||||
const overlay = document.getElementById("player-control-overlay");
|
||||
|
||||
if (overlay && this.enabled) {
|
||||
if (overlay?.classList?.contains("pointer-events-off")) {
|
||||
this.hideButton();
|
||||
} else {
|
||||
this.showButton();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private getTitle(): string {
|
||||
return getSkippingText([this.segment], false) + (this.showKeybindHint ? " (" + Config.config.skipKeybind + ")" : "");
|
||||
}
|
||||
|
||||
private getChapterPrefix(): HTMLElement {
|
||||
return document.querySelector(".ytp-chapter-title-prefix");
|
||||
}
|
||||
|
||||
// Swiping away on mobile
|
||||
private handleTouchStart(event: TouchEvent): void {
|
||||
this.swipeStart = event.touches[0].clientX;
|
||||
}
|
||||
|
||||
// Swiping away on mobile
|
||||
private handleTouchMove(event: TouchEvent): void {
|
||||
const distanceMoved = this.swipeStart - event.touches[0].clientX;
|
||||
this.left = Math.min(-distanceMoved, 0);
|
||||
|
||||
this.updateLeftStyle();
|
||||
}
|
||||
|
||||
// Swiping away on mobile
|
||||
private handleTouchEnd(): void {
|
||||
if (this.left < -this.container.offsetWidth / 2) {
|
||||
this.disableText();
|
||||
|
||||
// Don't let animation play
|
||||
this.skipIcon.style.display = "none";
|
||||
setTimeout(() => this.skipIcon.style.removeProperty("display"), 200);
|
||||
}
|
||||
|
||||
this.left = 0;
|
||||
this.updateLeftStyle();
|
||||
}
|
||||
|
||||
// Swiping away on mobile
|
||||
private updateLeftStyle() {
|
||||
this.container.style.left = this.left + "px";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,11 @@ interface DefaultMessage {
|
||||
message:
|
||||
"update"
|
||||
| "sponsorStart"
|
||||
| "isInfoFound"
|
||||
| "getVideoID"
|
||||
| "getChannelID"
|
||||
| "isChannelWhitelisted"
|
||||
| "submitTimes";
|
||||
| "submitTimes"
|
||||
| "refreshSegments";
|
||||
}
|
||||
|
||||
interface BoolValueMessage {
|
||||
@@ -24,11 +24,17 @@ interface BoolValueMessage {
|
||||
value: boolean;
|
||||
}
|
||||
|
||||
export type Message = BaseMessage & (DefaultMessage | BoolValueMessage);
|
||||
interface IsInfoFoundMessage {
|
||||
message: "isInfoFound";
|
||||
updating: boolean;
|
||||
}
|
||||
|
||||
interface IsInfoFoundMessageResponse {
|
||||
export type Message = BaseMessage & (DefaultMessage | BoolValueMessage | IsInfoFoundMessage);
|
||||
|
||||
export interface IsInfoFoundMessageResponse {
|
||||
found: boolean;
|
||||
sponsorTimes: SponsorTime[];
|
||||
onMobileYouTube: boolean;
|
||||
}
|
||||
|
||||
interface GetVideoIdResponse {
|
||||
@@ -52,5 +58,6 @@ export type MessageResponse =
|
||||
| GetVideoIdResponse
|
||||
| GetChannelIDResponse
|
||||
| SponsorStartResponse
|
||||
| IsChannelWhitelistedResponse;
|
||||
| IsChannelWhitelistedResponse
|
||||
| Record<string, never>;
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
import Config from "./config";
|
||||
import * as CompileConfig from "../config.json";
|
||||
import * as invidiousList from "../ci/invidiouslist.json";
|
||||
|
||||
// Make the config public for debugging purposes
|
||||
window.SB = Config;
|
||||
|
||||
import Utils from "./utils";
|
||||
import CategoryChooser from "./render/CategoryChooser";
|
||||
import { showDonationLink } from "./utils/configUtils";
|
||||
const utils = new Utils();
|
||||
|
||||
window.addEventListener('DOMContentLoaded', init);
|
||||
@@ -18,6 +20,8 @@ async function init() {
|
||||
for (const element of document.getElementsByClassName("titleBar")) {
|
||||
element.classList.add("hidden");
|
||||
}
|
||||
|
||||
document.getElementById("options").classList.add("embed");
|
||||
}
|
||||
|
||||
if (!Config.configListeners.includes(optionsConfigUpdateListener)) {
|
||||
@@ -26,20 +30,26 @@ async function init() {
|
||||
|
||||
await utils.wait(() => Config.config !== null);
|
||||
|
||||
if (!showDonationLink()) {
|
||||
document.getElementById("sbDonate").style.visibility = "hidden";
|
||||
}
|
||||
|
||||
// Set all of the toggle options to the correct option
|
||||
const optionsContainer = document.getElementById("options");
|
||||
const optionsElements = optionsContainer.querySelectorAll("*");
|
||||
|
||||
for (let i = 0; i < optionsElements.length; i++) {
|
||||
if ((optionsElements[i].getAttribute("private-mode-only") === "true" && !(await isIncognitoAllowed()))
|
||||
|| (optionsElements[i].getAttribute("no-safari") === "true" && navigator.vendor === "Apple Computer, Inc.")) {
|
||||
|| (optionsElements[i].getAttribute("no-safari") === "true" && navigator.vendor === "Apple Computer, Inc.")
|
||||
|| (optionsElements[i].getAttribute("if-false") && Config.config[optionsElements[i].getAttribute("if-false")])) {
|
||||
optionsElements[i].classList.add("hidden");
|
||||
continue;
|
||||
}
|
||||
|
||||
const option = optionsElements[i].getAttribute("sync-option");
|
||||
|
||||
switch (optionsElements[i].getAttribute("option-type")) {
|
||||
case "toggle": {
|
||||
const option = optionsElements[i].getAttribute("sync-option");
|
||||
const optionResult = Config.config[option];
|
||||
|
||||
const checkbox = optionsElements[i].querySelector("input");
|
||||
@@ -92,16 +102,15 @@ async function init() {
|
||||
break;
|
||||
}
|
||||
case "text-change": {
|
||||
const textChangeOption = optionsElements[i].getAttribute("sync-option");
|
||||
const textChangeInput = <HTMLInputElement> optionsElements[i].querySelector(".option-text-box");
|
||||
|
||||
const textChangeSetButton = <HTMLElement> optionsElements[i].querySelector(".text-change-set");
|
||||
|
||||
textChangeInput.value = Config.config[textChangeOption];
|
||||
textChangeInput.value = Config.config[option];
|
||||
|
||||
textChangeSetButton.addEventListener("click", async () => {
|
||||
// See if anything extra must be done
|
||||
switch (textChangeOption) {
|
||||
switch (option) {
|
||||
case "serverAddress": {
|
||||
const result = validateServerAddress(textChangeInput.value);
|
||||
|
||||
@@ -127,7 +136,7 @@ async function init() {
|
||||
}
|
||||
}
|
||||
|
||||
Config.config[textChangeOption] = textChangeInput.value;
|
||||
Config.config[option] = textChangeInput.value;
|
||||
});
|
||||
|
||||
// Reset to the default if needed
|
||||
@@ -135,9 +144,9 @@ async function init() {
|
||||
textChangeResetButton.addEventListener("click", () => {
|
||||
if (!confirm(chrome.i18n.getMessage("areYouSureReset"))) return;
|
||||
|
||||
Config.config[textChangeOption] = Config.defaults[textChangeOption];
|
||||
Config.config[option] = Config.defaults[option];
|
||||
|
||||
textChangeInput.value = Config.config[textChangeOption];
|
||||
textChangeInput.value = Config.config[option];
|
||||
});
|
||||
|
||||
break;
|
||||
@@ -172,30 +181,42 @@ async function init() {
|
||||
|
||||
break;
|
||||
}
|
||||
case "display":{
|
||||
case "display": {
|
||||
updateDisplayElement(<HTMLElement> optionsElements[i])
|
||||
break;
|
||||
}
|
||||
case "number-change": {
|
||||
const numberChangeOption = optionsElements[i].getAttribute("sync-option");
|
||||
const configValue = Config.config[numberChangeOption];
|
||||
const configValue = Config.config[option];
|
||||
const numberInput = optionsElements[i].querySelector("input");
|
||||
|
||||
if (isNaN(configValue) || configValue < 0) {
|
||||
numberInput.value = Config.defaults[numberChangeOption];
|
||||
numberInput.value = Config.defaults[option];
|
||||
} else {
|
||||
numberInput.value = configValue;
|
||||
}
|
||||
|
||||
numberInput.addEventListener("input", () => {
|
||||
Config.config[numberChangeOption] = numberInput.value;
|
||||
Config.config[option] = numberInput.value;
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
case "selector": {
|
||||
const configValue = Config.config[option];
|
||||
const selectorElement = optionsElements[i].querySelector(".selector-element") as HTMLSelectElement;
|
||||
selectorElement.value = configValue;
|
||||
|
||||
selectorElement.addEventListener("change", () => {
|
||||
let value: string | number = selectorElement.value;
|
||||
if (!isNaN(Number(value))) value = Number(value);
|
||||
|
||||
Config.config[option] = value;
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "react-CategoryChooserComponent":
|
||||
new CategoryChooser(optionsElements[i]);
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -277,8 +298,8 @@ function invidiousInstanceAddInit(element: HTMLElement, option: string) {
|
||||
const resetButton = element.querySelector(".invidious-instance-reset");
|
||||
resetButton.addEventListener("click", function() {
|
||||
if (confirm(chrome.i18n.getMessage("resetInvidiousInstanceAlert"))) {
|
||||
// Set to a clone of the default
|
||||
Config.config[option] = Config.defaults[option].slice(0);
|
||||
// Set to CI populated list
|
||||
Config.config[option] = invidiousList;
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -489,6 +510,24 @@ function activatePrivateTextChange(element: HTMLElement) {
|
||||
}
|
||||
});
|
||||
|
||||
// See if anything extra must be done
|
||||
switch (option) {
|
||||
case "userID":
|
||||
if (Config.config[option]) {
|
||||
utils.asyncRequestToServer("GET", "/api/userInfo", {
|
||||
userID: Config.config[option],
|
||||
values: ["warnings", "banned"]
|
||||
}).then((result) => {
|
||||
const userInfo = JSON.parse(result.responseText);
|
||||
if (userInfo.warnings > 0 || userInfo.banned) {
|
||||
setButton.classList.add("hidden");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
element.querySelector(".option-hidden-section").classList.remove("hidden");
|
||||
}
|
||||
|
||||
|
||||
229
src/popup.ts
@@ -1,8 +1,10 @@
|
||||
import Config from "./config";
|
||||
|
||||
import Utils from "./utils";
|
||||
import { SponsorTime, SponsorHideType } from "./types";
|
||||
import { Message, MessageResponse } from "./messageTypes";
|
||||
import { SponsorTime, SponsorHideType, CategoryActionType } from "./types";
|
||||
import { Message, MessageResponse, IsInfoFoundMessageResponse } from "./messageTypes";
|
||||
import { showDonationLink } from "./utils/configUtils";
|
||||
import { getCategoryActionType } from "./utils/categoryUtils";
|
||||
const utils = new Utils();
|
||||
|
||||
interface MessageListener {
|
||||
@@ -12,7 +14,7 @@ interface MessageListener {
|
||||
class MessageHandler {
|
||||
messageListener: MessageListener;
|
||||
|
||||
constructor (messageListener?: MessageListener) {
|
||||
constructor(messageListener?: MessageListener) {
|
||||
this.messageListener = messageListener;
|
||||
}
|
||||
|
||||
@@ -95,6 +97,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
"usernameInput",
|
||||
"usernameValue",
|
||||
"submitUsername",
|
||||
"sbPopupIconCopyUserID",
|
||||
// More
|
||||
"submissionSection",
|
||||
"mainControls",
|
||||
@@ -102,18 +105,19 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
"videoFound",
|
||||
"sponsorMessageTimes",
|
||||
//"downloadedSponsorMessageTimes",
|
||||
"refreshSegmentsButton",
|
||||
"whitelistButton",
|
||||
"sbDonate"
|
||||
].forEach(id => PageElements[id] = document.getElementById(id));
|
||||
|
||||
// Hide donate button on safari
|
||||
if (navigator.vendor === "Apple Computer, Inc.") {
|
||||
// Hide donate button if wanted (Safari, or user choice)
|
||||
if (!showDonationLink()) {
|
||||
PageElements.sbDonate.style.display = "none";
|
||||
}
|
||||
|
||||
//setup click listeners
|
||||
PageElements.sponsorStart.addEventListener("click", sendSponsorStartMessage);
|
||||
PageElements.whitelistToggle.addEventListener("change", function() {
|
||||
PageElements.whitelistToggle.addEventListener("change", function () {
|
||||
if (this.checked) {
|
||||
whitelistChannel();
|
||||
} else {
|
||||
@@ -121,7 +125,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
}
|
||||
});
|
||||
PageElements.whitelistForceCheck.addEventListener("click", openOptions);
|
||||
PageElements.toggleSwitch.addEventListener("change", function() {
|
||||
PageElements.toggleSwitch.addEventListener("change", function () {
|
||||
toggleSkipping(!this.checked);
|
||||
});
|
||||
PageElements.submitTimes.addEventListener("click", submitTimes);
|
||||
@@ -131,6 +135,8 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
PageElements.submitUsername.addEventListener("click", submitUsername);
|
||||
PageElements.optionsButton.addEventListener("click", openOptions);
|
||||
PageElements.helpButton.addEventListener("click", openHelp);
|
||||
PageElements.refreshSegmentsButton.addEventListener("click", refreshSegments);
|
||||
PageElements.sbPopupIconCopyUserID.addEventListener("click", async () => navigator.clipboard.writeText(await utils.getHash(Config.config.userID)));
|
||||
|
||||
/** If true, the content script is in the process of creating a new segment. */
|
||||
let creatingSegment = false;
|
||||
@@ -172,7 +178,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
if (userID != undefined) {
|
||||
//there are probably some views on these submissions then
|
||||
//get the amount of views from the sponsors submitted
|
||||
utils.sendRequestToServer("GET", "/api/getViewsForUser?userID=" + userID, function(response) {
|
||||
utils.sendRequestToServer("GET", "/api/getViewsForUser?userID=" + userID, function (response) {
|
||||
if (response.status == 200) {
|
||||
const viewCount = JSON.parse(response.responseText).viewCount;
|
||||
if (viewCount != 0) {
|
||||
@@ -189,7 +195,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
});
|
||||
|
||||
//get this time in minutes
|
||||
utils.sendRequestToServer("GET", "/api/getSavedTimeForUser?userID=" + userID, function(response) {
|
||||
utils.sendRequestToServer("GET", "/api/getSavedTimeForUser?userID=" + userID, function (response) {
|
||||
if (response.status == 200) {
|
||||
const minutesSaved = JSON.parse(response.responseText).timeSaved;
|
||||
if (minutesSaved != 0) {
|
||||
@@ -232,18 +238,15 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
// Must be delayed so it only happens once loaded
|
||||
setTimeout(() => PageElements.sponsorblockPopup.classList.remove("preload"), 250);
|
||||
|
||||
messageHandler.query({
|
||||
active: true,
|
||||
currentWindow: true
|
||||
}, onTabs);
|
||||
getSegmentsFromContentScript(false);
|
||||
|
||||
function onTabs(tabs) {
|
||||
messageHandler.sendMessage(tabs[0].id, {message: 'getVideoID'}, function(result) {
|
||||
function onTabs(tabs, updating: boolean): void {
|
||||
messageHandler.sendMessage(tabs[0].id, { message: 'getVideoID' }, function (result) {
|
||||
if (result !== undefined && result.videoID) {
|
||||
currentVideoID = result.videoID;
|
||||
creatingSegment = result.creatingSegment;
|
||||
|
||||
loadTabData(tabs);
|
||||
loadTabData(tabs, updating);
|
||||
} else if (result === undefined && chrome.runtime.lastError) {
|
||||
//this isn't a YouTube video then, or at least the content script is not loaded
|
||||
displayNoVideo();
|
||||
@@ -251,31 +254,32 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
});
|
||||
}
|
||||
|
||||
function loadTabData(tabs) {
|
||||
function loadTabData(tabs, updating: boolean): void {
|
||||
if (!currentVideoID) {
|
||||
//this isn't a YouTube video then
|
||||
displayNoVideo();
|
||||
return;
|
||||
}
|
||||
|
||||
//load video times for this video
|
||||
const sponsorTimesStorage = Config.config.segmentTimes.get(currentVideoID);
|
||||
if (sponsorTimesStorage != undefined && sponsorTimesStorage.length > 0) {
|
||||
sponsorTimes = sponsorTimesStorage;
|
||||
}
|
||||
|
||||
sponsorTimes = Config.config.segmentTimes.get(currentVideoID) ?? [];
|
||||
updateSegmentEditingUI();
|
||||
|
||||
//check if this video's sponsors are known
|
||||
messageHandler.sendMessage(
|
||||
tabs[0].id,
|
||||
{message: 'isInfoFound'},
|
||||
{ message: 'isInfoFound', updating },
|
||||
infoFound
|
||||
);
|
||||
}
|
||||
|
||||
function infoFound(request: {found: boolean, sponsorTimes: SponsorTime[]}) {
|
||||
if(chrome.runtime.lastError) {
|
||||
function getSegmentsFromContentScript(updating: boolean): void {
|
||||
messageHandler.query({
|
||||
active: true,
|
||||
currentWindow: true
|
||||
}, (tabs) => onTabs(tabs, updating));
|
||||
}
|
||||
|
||||
function infoFound(request: IsInfoFoundMessageResponse) {
|
||||
if (chrome.runtime.lastError) {
|
||||
//This page doesn't have the injected content script, or at least not yet
|
||||
displayNoVideo();
|
||||
return;
|
||||
@@ -285,6 +289,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
if (request != undefined) {
|
||||
//remove loading text
|
||||
PageElements.mainControls.style.display = "flex";
|
||||
if (request.onMobileYouTube) PageElements.mainControls.classList.add("hidden");
|
||||
PageElements.whitelistButton.classList.remove("hidden");
|
||||
PageElements.loadingIndicator.style.display = "none";
|
||||
|
||||
@@ -304,8 +309,8 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
}, tabs => {
|
||||
messageHandler.sendMessage(
|
||||
tabs[0].id,
|
||||
{message: 'isChannelWhitelisted'},
|
||||
function(response) {
|
||||
{ message: 'isChannelWhitelisted' },
|
||||
function (response) {
|
||||
if (response.value) {
|
||||
PageElements.whitelistChannel.style.display = "none";
|
||||
PageElements.unwhitelistChannel.style.display = "unset";
|
||||
@@ -313,7 +318,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
document.querySelectorAll('.SBWhitelistIcon')[0].classList.add("rotated");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@@ -325,7 +330,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
}, (tabs) => {
|
||||
messageHandler.sendMessage(
|
||||
tabs[0].id,
|
||||
{from: 'popup', message: 'sponsorStart'},
|
||||
{ from: 'popup', message: 'sponsorStart' },
|
||||
async (response) => {
|
||||
startSponsorCallback(response);
|
||||
|
||||
@@ -349,7 +354,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
});
|
||||
}
|
||||
|
||||
function startSponsorCallback(response: {creatingSegment: boolean}) {
|
||||
function startSponsorCallback(response: { creatingSegment: boolean }) {
|
||||
creatingSegment = response.creatingSegment;
|
||||
|
||||
// Only update the segments after a segment was created
|
||||
@@ -362,18 +367,23 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
}
|
||||
|
||||
//display the video times from the array at the top, in a different section
|
||||
function displayDownloadedSponsorTimes(request: {found: boolean, sponsorTimes: SponsorTime[]}) {
|
||||
function displayDownloadedSponsorTimes(request: { found: boolean, sponsorTimes: SponsorTime[] }) {
|
||||
if (request.sponsorTimes != undefined) {
|
||||
|
||||
// Sort list by start time
|
||||
const segmentTimes = request.sponsorTimes
|
||||
.sort((a, b) => a.segment[1] - b.segment[1])
|
||||
.sort((a, b) => a.segment[0] - b.segment[0]);
|
||||
.sort((a, b) => a.segment[1] - b.segment[1])
|
||||
.sort((a, b) => a.segment[0] - b.segment[0]);
|
||||
|
||||
//add them as buttons to the issue reporting container
|
||||
const container = document.getElementById("issueReporterTimeButtons");
|
||||
while (container.firstChild) {
|
||||
container.removeChild(container.firstChild);
|
||||
}
|
||||
|
||||
const isVip = Config.config.isVip;
|
||||
for (let i = 0; i < segmentTimes.length; i++) {
|
||||
const UUID = segmentTimes[i].UUID;
|
||||
const locked = segmentTimes[i].locked;
|
||||
|
||||
const sponsorTimeButton = document.createElement("button");
|
||||
sponsorTimeButton.className = "segmentTimeButton popupElement";
|
||||
@@ -383,7 +393,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
categoryColorCircle.style.backgroundColor = Config.config.barTypes[segmentTimes[i].category]?.color;
|
||||
categoryColorCircle.classList.add("dot");
|
||||
categoryColorCircle.classList.add("sponsorTimesCategoryColorCircle");
|
||||
|
||||
|
||||
let extraInfo = "";
|
||||
if (segmentTimes[i].hidden === SponsorHideType.Downvoted) {
|
||||
//this one is downvoted
|
||||
@@ -392,10 +402,13 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
//this one is too short
|
||||
extraInfo = " (" + chrome.i18n.getMessage("hiddenDueToDuration") + ")";
|
||||
}
|
||||
|
||||
|
||||
const textNode = document.createTextNode(utils.shortCategoryName(segmentTimes[i].category) + extraInfo);
|
||||
const segmentTimeFromToNode = document.createElement("div");
|
||||
segmentTimeFromToNode.innerText = utils.getFormattedTime(segmentTimes[i].segment[0], true) + " " + chrome.i18n.getMessage("to") + " " + utils.getFormattedTime(segmentTimes[i].segment[1], true);
|
||||
segmentTimeFromToNode.innerText = utils.getFormattedTime(segmentTimes[i].segment[0], true) +
|
||||
(getCategoryActionType(segmentTimes[i].category) !== CategoryActionType.POI
|
||||
? " " + chrome.i18n.getMessage("to") + " " + utils.getFormattedTime(segmentTimes[i].segment[1], true)
|
||||
: "");
|
||||
segmentTimeFromToNode.style.margin = "5px";
|
||||
|
||||
sponsorTimeButton.appendChild(categoryColorCircle);
|
||||
@@ -414,13 +427,13 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
const upvoteButton = document.createElement("img");
|
||||
upvoteButton.id = "sponsorTimesUpvoteButtonsContainer" + UUID;
|
||||
upvoteButton.className = "voteButton";
|
||||
upvoteButton.src = chrome.extension.getURL("icons/thumbs_up.svg");
|
||||
upvoteButton.src = chrome.runtime.getURL("icons/thumbs_up.svg");
|
||||
upvoteButton.addEventListener("click", () => vote(1, UUID));
|
||||
|
||||
const downvoteButton = document.createElement("img");
|
||||
downvoteButton.id = "sponsorTimesDownvoteButtonsContainer" + UUID;
|
||||
downvoteButton.className = "voteButton";
|
||||
downvoteButton.src = chrome.extension.getURL("icons/thumbs_down.svg");
|
||||
downvoteButton.src = locked && isVip ? chrome.runtime.getURL("icons/thumbs_down_locked.svg") : chrome.runtime.getURL("icons/thumbs_down.svg");
|
||||
downvoteButton.addEventListener("click", () => vote(0, UUID));
|
||||
|
||||
//uuid button
|
||||
@@ -428,8 +441,12 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
const uuidButton = document.createElement("img");
|
||||
uuidButton.id = "sponsorTimesCopyUUIDButtonContainer" + UUID;
|
||||
uuidButton.className = "voteButton";
|
||||
uuidButton.src = chrome.extension.getURL("icons/clipboard.svg");
|
||||
uuidButton.addEventListener("click", () => navigator.clipboard.writeText(UUID));
|
||||
uuidButton.src = chrome.runtime.getURL("icons/clipboard.svg");
|
||||
uuidButton.addEventListener("click", () => {
|
||||
navigator.clipboard.writeText(UUID);
|
||||
const stopAnimation = utils.applyLoadingAnimation(uuidButton, 0.3);
|
||||
stopAnimation();
|
||||
});
|
||||
|
||||
//add thumbs up, thumbs down and uuid copy buttons to the container
|
||||
voteButtonsContainer.appendChild(upvoteButton);
|
||||
@@ -437,7 +454,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
voteButtonsContainer.appendChild(uuidButton);
|
||||
|
||||
//add click listener to open up vote panel
|
||||
sponsorTimeButton.addEventListener("click", function() {
|
||||
sponsorTimeButton.addEventListener("click", function () {
|
||||
voteButtonsContainer.classList.toggle("voteButtonsContainer--hide");
|
||||
});
|
||||
|
||||
@@ -469,15 +486,15 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
}, tabs => {
|
||||
messageHandler.sendMessage(
|
||||
tabs[0].id,
|
||||
{message: 'submitTimes'},
|
||||
{ message: 'submitTimes' },
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function showNoticeAgain() {
|
||||
Config.config.dontShowNotice = false;
|
||||
|
||||
|
||||
PageElements.showNoticeAgain.style.display = "none";
|
||||
}
|
||||
|
||||
@@ -490,11 +507,11 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
|
||||
//make the options div visible
|
||||
function openOptions() {
|
||||
chrome.runtime.sendMessage({"message": "openConfig"});
|
||||
chrome.runtime.sendMessage({ "message": "openConfig" });
|
||||
}
|
||||
|
||||
function openHelp() {
|
||||
chrome.runtime.sendMessage({"message": "openHelp"});
|
||||
chrome.runtime.sendMessage({ "message": "openHelp" });
|
||||
}
|
||||
|
||||
//make the options username setting option visible
|
||||
@@ -507,7 +524,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
PageElements.setUsernameContainer.style.display = "none";
|
||||
PageElements.setUsername.style.display = "flex";
|
||||
PageElements.setUsername.classList.add("SBExpanded");
|
||||
|
||||
|
||||
PageElements.setUsernameStatusContainer.style.display = "none";
|
||||
|
||||
PageElements.sponsorTimesContributionsContainer.classList.add("hidden");
|
||||
@@ -546,18 +563,18 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
function displayNoVideo() {
|
||||
document.getElementById("loadingIndicator").innerText = chrome.i18n.getMessage("noVideoID");
|
||||
}
|
||||
|
||||
|
||||
function addVoteMessage(message, UUID) {
|
||||
const voteButtonsContainer = document.getElementById("sponsorTimesVoteButtonsContainer" + UUID);
|
||||
voteButtonsContainer.style.display = "none";
|
||||
|
||||
const voteStatusContainer = document.getElementById("sponsorTimesVoteStatusContainer" + UUID);
|
||||
voteStatusContainer.style.removeProperty("display");
|
||||
|
||||
|
||||
const thanksForVotingText = document.getElementById("sponsorTimesThanksForVotingText" + UUID);
|
||||
thanksForVotingText.innerText = message;
|
||||
}
|
||||
|
||||
|
||||
function vote(type, UUID) {
|
||||
//add loading info
|
||||
addVoteMessage(chrome.i18n.getMessage("Loading"), UUID);
|
||||
@@ -588,8 +605,8 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
}, tabs => {
|
||||
messageHandler.sendMessage(
|
||||
tabs[0].id,
|
||||
{message: 'getChannelID'},
|
||||
function(response) {
|
||||
{ message: 'getChannelID' },
|
||||
function (response) {
|
||||
if (!response.channelID) {
|
||||
alert(chrome.i18n.getMessage("channelDataNotFound") + " https://github.com/ajayyy/SponsorBlock/issues/753");
|
||||
return;
|
||||
@@ -621,10 +638,10 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
}, tabs => {
|
||||
messageHandler.sendMessage(
|
||||
tabs[0].id, {
|
||||
message: 'whitelistChange',
|
||||
value: true
|
||||
});
|
||||
}
|
||||
message: 'whitelistChange',
|
||||
value: true
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
@@ -639,48 +656,67 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
}, tabs => {
|
||||
messageHandler.sendMessage(
|
||||
tabs[0].id,
|
||||
{message: 'getChannelID'},
|
||||
function(response) {
|
||||
{ message: 'getChannelID' },
|
||||
function (response) {
|
||||
//get whitelisted channels
|
||||
let whitelistedChannels = Config.config.whitelistedChannels;
|
||||
if (whitelistedChannels == undefined) {
|
||||
whitelistedChannels = [];
|
||||
}
|
||||
let whitelistedChannels = Config.config.whitelistedChannels;
|
||||
if (whitelistedChannels == undefined) {
|
||||
whitelistedChannels = [];
|
||||
}
|
||||
|
||||
//remove this channel
|
||||
const index = whitelistedChannels.indexOf(response.channelID);
|
||||
whitelistedChannels.splice(index, 1);
|
||||
//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");
|
||||
//change button
|
||||
PageElements.whitelistChannel.style.display = "unset";
|
||||
PageElements.unwhitelistChannel.style.display = "none";
|
||||
document.querySelectorAll('.SBWhitelistIcon')[0].classList.remove("rotated");
|
||||
|
||||
//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: false
|
||||
});
|
||||
}
|
||||
);
|
||||
//send a message to the client
|
||||
messageHandler.query({
|
||||
active: true,
|
||||
currentWindow: true
|
||||
}, tabs => {
|
||||
messageHandler.sendMessage(
|
||||
tabs[0].id, {
|
||||
message: 'whitelistChange',
|
||||
value: false
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function refreshSegments() {
|
||||
const stopAnimation = utils.applyLoadingAnimation(PageElements.refreshSegmentsButton, 0.3);
|
||||
|
||||
messageHandler.query({
|
||||
active: true,
|
||||
currentWindow: true
|
||||
}, tabs => {
|
||||
messageHandler.sendMessage(
|
||||
tabs[0].id,
|
||||
{ message: 'refreshSegments' },
|
||||
(response) => {
|
||||
infoFound(response);
|
||||
stopAnimation();
|
||||
}
|
||||
)
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Should skipping be disabled (visuals stay)
|
||||
*/
|
||||
function toggleSkipping(disabled) {
|
||||
Config.config.disableSkipping = disabled;
|
||||
Config.config.disableSkipping = disabled;
|
||||
|
||||
let hiddenButton = PageElements.disableSkipping;
|
||||
let shownButton = PageElements.enableSkipping;
|
||||
@@ -695,19 +731,20 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts time in hours to 5h 25.1
|
||||
* Converts time in minutes to 2d 5h 25.1
|
||||
* If less than 1 hour, just returns minutes
|
||||
*
|
||||
* @param {float} seconds
|
||||
* @param {float} minutes
|
||||
* @returns {string}
|
||||
*/
|
||||
function getFormattedHours(minutes) {
|
||||
minutes = Math.round(minutes * 10) / 10
|
||||
const hours = Math.floor(minutes / 60);
|
||||
return (hours > 0 ? hours + "h " : "") + (minutes % 60).toFixed(1);
|
||||
}
|
||||
|
||||
//end of function
|
||||
function getFormattedHours(minutes) {
|
||||
minutes = Math.round(minutes * 10) / 10;
|
||||
const days = Math.floor(minutes / 1440);
|
||||
const hours = Math.floor(minutes / 60) % 24;
|
||||
return (days > 0 ? days + chrome.i18n.getMessage("dayAbbreviation") + " " : "") + (hours > 0 ? hours + chrome.i18n.getMessage("hourAbbreviation") + " " : "") + (minutes % 60).toFixed(1);
|
||||
}
|
||||
|
||||
//end of function
|
||||
}
|
||||
|
||||
if (chrome.tabs != undefined) {
|
||||
|
||||
95
src/render/RectangleTooltip.tsx
Normal file
@@ -0,0 +1,95 @@
|
||||
import * as React from "react";
|
||||
import * as ReactDOM from "react-dom";
|
||||
|
||||
export interface RectangleTooltipProps {
|
||||
text: string,
|
||||
link?: string,
|
||||
referenceNode: HTMLElement,
|
||||
prependElement?: HTMLElement, // Element to append before
|
||||
bottomOffset?: string,
|
||||
leftOffset?: string,
|
||||
timeout?: number,
|
||||
htmlId?: string,
|
||||
maxHeight?: string,
|
||||
maxWidth?: string,
|
||||
backgroundColor?: string,
|
||||
fontSize?: string,
|
||||
buttonFunction?: () => void;
|
||||
}
|
||||
|
||||
export class RectangleTooltip {
|
||||
text: string;
|
||||
container: HTMLDivElement;
|
||||
|
||||
timer: NodeJS.Timeout;
|
||||
|
||||
constructor(props: RectangleTooltipProps) {
|
||||
props.bottomOffset ??= "0px";
|
||||
props.leftOffset ??= "0px";
|
||||
props.maxHeight ??= "100px";
|
||||
props.maxWidth ??= "300px";
|
||||
props.backgroundColor ??= "rgba(28, 28, 28, 0.7)";
|
||||
this.text = props.text;
|
||||
props.fontSize ??= "10px";
|
||||
|
||||
this.container = document.createElement('div');
|
||||
props.htmlId ??= props.text;
|
||||
this.container.id = "sponsorRectangleTooltip" + props.htmlId;
|
||||
this.container.style.display = "relative";
|
||||
|
||||
if (props.prependElement) {
|
||||
props.referenceNode.insertBefore(this.container, props.prependElement);
|
||||
} else {
|
||||
props.referenceNode.appendChild(this.container);
|
||||
}
|
||||
|
||||
if (props.timeout) {
|
||||
this.timer = setTimeout(() => this.close(), props.timeout * 1000);
|
||||
}
|
||||
|
||||
ReactDOM.render(
|
||||
<div style={{
|
||||
bottom: props.bottomOffset,
|
||||
left: props.leftOffset,
|
||||
maxHeight: props.maxHeight,
|
||||
maxWidth: props.maxWidth,
|
||||
backgroundColor: props.backgroundColor,
|
||||
fontSize: props.fontSize}}
|
||||
className="sponsorBlockRectangleTooltip" >
|
||||
<div>
|
||||
<img className="sponsorSkipLogo sponsorSkipObject"
|
||||
src={chrome.extension.getURL("icons/IconSponsorBlocker256px.png")}>
|
||||
</img>
|
||||
<span className="sponsorSkipObject">
|
||||
{this.text + (props.link ? ". " : "")}
|
||||
{props.link ?
|
||||
<a style={{textDecoration: "underline"}}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href={props.link}>
|
||||
{chrome.i18n.getMessage("LearnMore")}
|
||||
</a>
|
||||
: null}
|
||||
</span>
|
||||
</div>
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
style ={{float: "right" }}
|
||||
onClick={() => {
|
||||
if (props.buttonFunction) props.buttonFunction();
|
||||
this.close();
|
||||
}}>
|
||||
|
||||
{chrome.i18n.getMessage("GotIt")}
|
||||
</button>
|
||||
</div>,
|
||||
this.container
|
||||
)
|
||||
}
|
||||
|
||||
close(): void {
|
||||
ReactDOM.unmountComponentAtNode(this.container);
|
||||
this.container.remove();
|
||||
|
||||
if (this.timer) clearTimeout(this.timer);
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,8 @@ import Utils from "../utils";
|
||||
const utils = new Utils();
|
||||
|
||||
import SkipNoticeComponent, { SkipNoticeAction } from "../components/SkipNoticeComponent";
|
||||
import { SponsorTime, ContentContainer } from "../types";
|
||||
import { SponsorTime, ContentContainer, NoticeVisbilityMode } from "../types";
|
||||
import Config from "../config";
|
||||
|
||||
class SkipNotice {
|
||||
segments: SponsorTime[];
|
||||
@@ -17,7 +18,7 @@ class SkipNotice {
|
||||
|
||||
skipNoticeRef: React.MutableRefObject<SkipNoticeComponent>;
|
||||
|
||||
constructor(segments: SponsorTime[], autoSkip = false, contentContainer: ContentContainer) {
|
||||
constructor(segments: SponsorTime[], autoSkip = false, contentContainer: ContentContainer, unskipTime: number = null) {
|
||||
this.skipNoticeRef = React.createRef();
|
||||
|
||||
this.segments = segments;
|
||||
@@ -44,11 +45,20 @@ class SkipNotice {
|
||||
autoSkip={autoSkip}
|
||||
contentContainer={contentContainer}
|
||||
ref={this.skipNoticeRef}
|
||||
closeListener={() => this.close()} />,
|
||||
closeListener={() => this.close()}
|
||||
smaller={Config.config.noticeVisibilityMode >= NoticeVisbilityMode.MiniForAll
|
||||
|| (Config.config.noticeVisibilityMode >= NoticeVisbilityMode.MiniForAutoSkip && autoSkip)}
|
||||
unskipTime={unskipTime} />,
|
||||
this.noticeElement
|
||||
);
|
||||
}
|
||||
|
||||
setShowKeybindHint(value: boolean): void {
|
||||
this.skipNoticeRef?.current?.setState({
|
||||
showKeybindHint: value
|
||||
});
|
||||
}
|
||||
|
||||
close(): void {
|
||||
ReactDOM.unmountComponentAtNode(this.noticeElement);
|
||||
|
||||
@@ -59,7 +69,11 @@ class SkipNotice {
|
||||
}
|
||||
|
||||
toggleSkip(): void {
|
||||
this.skipNoticeRef.current.prepAction(SkipNoticeAction.Unskip);
|
||||
this.skipNoticeRef?.current?.prepAction(SkipNoticeAction.Unskip);
|
||||
}
|
||||
|
||||
unmutedListener(): void {
|
||||
this.skipNoticeRef?.current?.unmutedListener();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
73
src/render/Tooltip.tsx
Normal file
@@ -0,0 +1,73 @@
|
||||
import * as React from "react";
|
||||
import * as ReactDOM from "react-dom";
|
||||
|
||||
export interface TooltipProps {
|
||||
text: string,
|
||||
link?: string,
|
||||
referenceNode: HTMLElement,
|
||||
prependElement?: HTMLElement, // Element to append before
|
||||
bottomOffset?: string
|
||||
timeout?: number;
|
||||
}
|
||||
|
||||
export class Tooltip {
|
||||
text: string;
|
||||
container: HTMLDivElement;
|
||||
|
||||
timer: NodeJS.Timeout;
|
||||
|
||||
constructor(props: TooltipProps) {
|
||||
props.bottomOffset ??= "70px";
|
||||
this.text = props.text;
|
||||
|
||||
this.container = document.createElement('div');
|
||||
this.container.id = "sponsorTooltip" + props.text;
|
||||
this.container.style.display = "relative";
|
||||
|
||||
if (props.prependElement) {
|
||||
props.referenceNode.insertBefore(this.container, props.prependElement);
|
||||
} else {
|
||||
props.referenceNode.appendChild(this.container);
|
||||
}
|
||||
|
||||
if (props.timeout) {
|
||||
this.timer = setTimeout(() => this.close(), props.timeout * 1000);
|
||||
}
|
||||
|
||||
ReactDOM.render(
|
||||
<div style={{bottom: props.bottomOffset}}
|
||||
className="sponsorBlockTooltip" >
|
||||
<div>
|
||||
<img className="sponsorSkipLogo sponsorSkipObject"
|
||||
src={chrome.extension.getURL("icons/IconSponsorBlocker256px.png")}>
|
||||
</img>
|
||||
<span className="sponsorSkipObject">
|
||||
{this.text + (props.link ? ". " : "")}
|
||||
{props.link ?
|
||||
<a style={{textDecoration: "underline"}}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href={props.link}>
|
||||
{chrome.i18n.getMessage("LearnMore")}
|
||||
</a>
|
||||
: null}
|
||||
</span>
|
||||
</div>
|
||||
<button className="sponsorSkipObject sponsorSkipNoticeButton"
|
||||
style ={{float: "right" }}
|
||||
onClick={() => this.close()}>
|
||||
|
||||
{chrome.i18n.getMessage("GotIt")}
|
||||
</button>
|
||||
</div>,
|
||||
this.container
|
||||
)
|
||||
}
|
||||
|
||||
close(): void {
|
||||
ReactDOM.unmountComponentAtNode(this.container);
|
||||
this.container.remove();
|
||||
|
||||
if (this.timer) clearTimeout(this.timer);
|
||||
}
|
||||
}
|
||||
18
src/svg-icons/pencil_svg.tsx
Normal file
@@ -0,0 +1,18 @@
|
||||
import * as React from "react";
|
||||
|
||||
const pencilSvg = ({
|
||||
fill = "#ffffff"
|
||||
}): JSX.Element => (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="18"
|
||||
height="18"
|
||||
viewBox="0 0 24 24"
|
||||
fill={fill}
|
||||
>
|
||||
<path
|
||||
d="M14.1 7.1l2.9 2.9L6.1 20.7l-3.6.7.7-3.6L14.1 7.1zm0-2.8L1.4 16.9 0 24l7.1-1.4L19.8 9.9l-5.7-5.7zm7.1 4.3L24 5.7 18.3 0l-2.8 2.8 5.7 5.7z"></path>
|
||||
</svg>
|
||||
);
|
||||
|
||||
export default pencilSvg;
|
||||
23
src/svg-icons/thumbs_down_svg.tsx
Normal file
@@ -0,0 +1,23 @@
|
||||
import * as React from "react";
|
||||
|
||||
const thumbsDownSvg = ({
|
||||
fill = "#ffffff"
|
||||
}): JSX.Element => (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="18"
|
||||
height="18"
|
||||
fill={fill}
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
fill="none"
|
||||
d="M0 0h24v24H0z">
|
||||
</path>
|
||||
<path
|
||||
d="M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v2c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
|
||||
export default thumbsDownSvg;
|
||||
22
src/svg-icons/thumbs_up_svg.tsx
Normal file
@@ -0,0 +1,22 @@
|
||||
import * as React from "react";
|
||||
|
||||
const thumbsUpSvg = ({
|
||||
fill = "#ffffff"
|
||||
}): JSX.Element => (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="18"
|
||||
height="18"
|
||||
fill={fill}
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
fill="none"
|
||||
d="M0 0h24v24H0V0z"></path>
|
||||
<path
|
||||
d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-2z"
|
||||
></path>
|
||||
</svg>
|
||||
);
|
||||
|
||||
export default thumbsUpSvg;
|
||||
65
src/types.ts
@@ -4,9 +4,9 @@ import SkipNotice from "./render/SkipNotice";
|
||||
|
||||
export interface ContentContainer {
|
||||
(): {
|
||||
vote: (type: number, UUID: string, category?: string, skipNotice?: SkipNoticeComponent) => void,
|
||||
vote: (type: number, UUID: SegmentUUID, category?: Category, skipNotice?: SkipNoticeComponent) => void,
|
||||
dontShowNoticeAgain: () => void,
|
||||
unskipSponsorTime: (segment: SponsorTime) => void,
|
||||
unskipSponsorTime: (segment: SponsorTime, unskipTime: number) => void,
|
||||
sponsorTimes: SponsorTime[],
|
||||
sponsorTimesSubmitting: SponsorTime[],
|
||||
skipNotices: SkipNotice[],
|
||||
@@ -20,7 +20,8 @@ export interface ContentContainer {
|
||||
updateEditButtonsOnPlayer: () => void,
|
||||
previewTime: (time: number, unpause?: boolean) => void,
|
||||
videoInfo: VideoInfo,
|
||||
getRealCurrentTime: () => number
|
||||
getRealCurrentTime: () => number,
|
||||
lockedCategories: string[]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,7 +42,7 @@ export enum CategorySkipOption {
|
||||
}
|
||||
|
||||
export interface CategorySelection {
|
||||
name: string;
|
||||
name: Category;
|
||||
option: CategorySkipOption
|
||||
}
|
||||
|
||||
@@ -51,13 +52,41 @@ export enum SponsorHideType {
|
||||
MinimumDuration
|
||||
}
|
||||
|
||||
export enum CategoryActionType {
|
||||
Skippable = "", // Strings are used to find proper language configs
|
||||
POI = "_POI"
|
||||
}
|
||||
|
||||
export enum ActionType {
|
||||
Skip = "skip",
|
||||
Mute = "mute"
|
||||
}
|
||||
|
||||
export const ActionTypes = [ActionType.Skip, ActionType.Mute];
|
||||
|
||||
export type SegmentUUID = string & { __segmentUUIDBrand: unknown };
|
||||
export type Category = string & { __categoryBrand: unknown };
|
||||
|
||||
export enum SponsorSourceType {
|
||||
Server = undefined,
|
||||
Local = 1
|
||||
}
|
||||
|
||||
export interface SponsorTime {
|
||||
segment: [number] | [number, number];
|
||||
UUID: string;
|
||||
UUID: SegmentUUID;
|
||||
locked?: number;
|
||||
|
||||
category: string;
|
||||
category: Category;
|
||||
actionType: ActionType;
|
||||
|
||||
hidden?: SponsorHideType;
|
||||
source?: SponsorSourceType;
|
||||
videoDuration?: number;
|
||||
}
|
||||
|
||||
export interface ScheduledTime extends SponsorTime {
|
||||
scheduledTime: number;
|
||||
}
|
||||
|
||||
export interface PreviewBarOption {
|
||||
@@ -145,7 +174,7 @@ export interface VideoInfo {
|
||||
isUnlisted: boolean,
|
||||
hasYpcMetadata: boolean,
|
||||
viewCount: string,
|
||||
category: string,
|
||||
category: Category,
|
||||
publishDate: string,
|
||||
ownerChannelName: string,
|
||||
uploadDate: string,
|
||||
@@ -171,4 +200,26 @@ export enum ChannelIDStatus {
|
||||
export interface ChannelIDInfo {
|
||||
id: string,
|
||||
status: ChannelIDStatus
|
||||
}
|
||||
|
||||
export interface SkipToTimeParams {
|
||||
v: HTMLVideoElement,
|
||||
skipTime: number[],
|
||||
skippingSegments: SponsorTime[],
|
||||
openNotice: boolean,
|
||||
forceAutoSkip?: boolean,
|
||||
unskipTime?: number
|
||||
}
|
||||
|
||||
export interface ToggleSkippable {
|
||||
toggleSkip: () => void;
|
||||
setShowKeybindHint: (show: boolean) => void;
|
||||
}
|
||||
|
||||
export enum NoticeVisbilityMode {
|
||||
FullSize = 0,
|
||||
MiniForAutoSkip = 1,
|
||||
MiniForAll = 2,
|
||||
FadedForAutoSkip = 3,
|
||||
FadedForAll = 4
|
||||
}
|
||||
107
src/utils.ts
@@ -26,7 +26,10 @@ export default class Utils {
|
||||
/** Function that can be used to wait for a condition before returning. */
|
||||
async wait<T>(condition: () => T | false, timeout = 5000, check = 100): Promise<T> {
|
||||
return await new Promise((resolve, reject) => {
|
||||
setTimeout(() => reject("TIMEOUT"), timeout);
|
||||
setTimeout(() => {
|
||||
clearInterval(interval);
|
||||
reject("TIMEOUT");
|
||||
}, timeout);
|
||||
|
||||
const intervalCheck = () => {
|
||||
const result = condition();
|
||||
@@ -158,6 +161,75 @@ export default class Utils {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts a spinning animation and returns a function to be called when it should be stopped
|
||||
* The callback will be called when the animation is finished
|
||||
* It waits until a full rotation is complete
|
||||
*/
|
||||
applyLoadingAnimation(element: HTMLElement, time: number, callback?: () => void): () => void {
|
||||
element.style.animation = `rotate ${time}s 0s infinite`;
|
||||
|
||||
return () => {
|
||||
// Make the animation finite
|
||||
element.style.animation = `rotate ${time}s`;
|
||||
|
||||
// When the animation is over, hide the button
|
||||
const animationEndListener = () => {
|
||||
if (callback) callback();
|
||||
|
||||
element.style.animation = "none";
|
||||
|
||||
element.removeEventListener("animationend", animationEndListener);
|
||||
};
|
||||
|
||||
element.addEventListener("animationend", animationEndListener);
|
||||
}
|
||||
}
|
||||
|
||||
setupCustomHideAnimation(element: Element, container: Element, enabled = true, rightSlide = true): { hide: () => void, show: () => void } {
|
||||
if (enabled) element.classList.add("autoHiding");
|
||||
element.classList.add("hidden");
|
||||
element.classList.add("animationDone");
|
||||
if (!rightSlide) element.classList.add("autoHideLeft");
|
||||
|
||||
let mouseEntered = false;
|
||||
|
||||
return {
|
||||
hide: () => {
|
||||
mouseEntered = false;
|
||||
if (element.classList.contains("autoHiding")) {
|
||||
element.classList.add("hidden");
|
||||
}
|
||||
},
|
||||
show: () => {
|
||||
mouseEntered = true;
|
||||
element.classList.remove("animationDone");
|
||||
|
||||
// Wait for next event loop
|
||||
setTimeout(() => {
|
||||
if (mouseEntered) element.classList.remove("hidden")
|
||||
}, 10);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
setupAutoHideAnimation(element: Element, container: Element, enabled = true, rightSlide = true): void {
|
||||
const { hide, show } = this.setupCustomHideAnimation(element, container, enabled, rightSlide);
|
||||
|
||||
container.addEventListener("mouseleave", () => hide());
|
||||
container.addEventListener("mouseenter", () => show());
|
||||
}
|
||||
|
||||
enableAutoHideAnimation(element: Element): void {
|
||||
element.classList.add("autoHiding");
|
||||
element.classList.add("hidden");
|
||||
}
|
||||
|
||||
disableAutoHideAnimation(element: Element): void {
|
||||
element.classList.remove("autoHiding");
|
||||
element.classList.remove("hidden");
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges any overlapping timestamp ranges into single segments and returns them as a new array.
|
||||
*/
|
||||
@@ -236,7 +308,6 @@ export default class Utils {
|
||||
const objects = document.getElementsByClassName("sponsorBlockPageBody")[0].children;
|
||||
for (let j = 0; j < objects.length; j++) {
|
||||
const obj = objects[j];
|
||||
|
||||
const localizedMessage = this.getLocalizedMessage(obj.innerHTML.toString());
|
||||
if (localizedMessage) obj.innerHTML = localizedMessage;
|
||||
}
|
||||
@@ -244,7 +315,8 @@ export default class Utils {
|
||||
|
||||
getLocalizedMessage(text: string): string | false {
|
||||
const valNewH = text.replace(/__MSG_(\w+)__/g, function(match, v1) {
|
||||
return v1 ? chrome.i18n.getMessage(v1).replace("\n", "<br/>") : "";
|
||||
return v1 ? chrome.i18n.getMessage(v1).replace(/</g, "<")
|
||||
.replace(/"/g, """).replace(/\n/g, "<br/>") : "";
|
||||
});
|
||||
|
||||
if(valNewH != text) {
|
||||
@@ -330,7 +402,7 @@ export default class Utils {
|
||||
}, (response) => {
|
||||
resolve(response);
|
||||
});
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -389,7 +461,22 @@ export default class Utils {
|
||||
return referenceNode;
|
||||
}
|
||||
|
||||
objectToURI<T>(url: string, data: T, includeQuestionMark: boolean): string {
|
||||
let counter = 0;
|
||||
for (const key in data) {
|
||||
const seperator = (url.includes("?") || counter > 0) ? "&" : (includeQuestionMark ? "?" : "");
|
||||
const value = (typeof(data[key]) === "string") ? data[key] as unknown as string : JSON.stringify(data[key]);
|
||||
url += seperator + encodeURIComponent(key) + "=" + encodeURIComponent(value);
|
||||
|
||||
counter++;
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
getFormattedTime(seconds: number, precise?: boolean): string {
|
||||
seconds = Math.max(seconds, 0);
|
||||
|
||||
const hours = Math.floor(seconds / 60 / 60);
|
||||
const minutes = Math.floor(seconds / 60) % 60;
|
||||
let minutesDisplay = String(minutes);
|
||||
@@ -453,16 +540,14 @@ export default class Utils {
|
||||
async getHash(value: string, times = 5000): Promise<string> {
|
||||
if (times <= 0) return "";
|
||||
|
||||
let hashBuffer = new TextEncoder().encode(value).buffer;
|
||||
|
||||
let hashHex = value;
|
||||
for (let i = 0; i < times; i++) {
|
||||
hashBuffer = await crypto.subtle.digest('SHA-256', hashBuffer);
|
||||
}
|
||||
const hashBuffer = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(hashHex).buffer);
|
||||
|
||||
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
||||
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
||||
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
||||
hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
||||
}
|
||||
|
||||
return hashHex;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
47
src/utils/categoryUtils.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { ActionType, Category, CategoryActionType, SponsorTime } from "../types";
|
||||
|
||||
export function getSkippingText(segments: SponsorTime[], autoSkip: boolean): string {
|
||||
const categoryName = chrome.i18n.getMessage(segments.length > 1 ? "multipleSegments"
|
||||
: "category_" + segments[0].category + "_short") || chrome.i18n.getMessage("category_" + segments[0].category);
|
||||
if (autoSkip) {
|
||||
let messageId = "";
|
||||
if (getCategoryActionType(segments[0].category) === CategoryActionType.Skippable) {
|
||||
switch (segments[0].actionType) {
|
||||
case ActionType.Skip:
|
||||
messageId = "skipped";
|
||||
break;
|
||||
case ActionType.Mute:
|
||||
messageId = "muted";
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
messageId = "skipped_to_category";
|
||||
}
|
||||
|
||||
return chrome.i18n.getMessage(messageId).replace("{0}", categoryName);
|
||||
} else {
|
||||
let messageId = "";
|
||||
if (getCategoryActionType(segments[0].category) === CategoryActionType.Skippable) {
|
||||
switch (segments[0].actionType) {
|
||||
case ActionType.Skip:
|
||||
messageId = "skip_category";
|
||||
break;
|
||||
case ActionType.Mute:
|
||||
messageId = "mute_category";
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
messageId = "skip_to_category";
|
||||
}
|
||||
|
||||
return chrome.i18n.getMessage(messageId).replace("{0}", categoryName);
|
||||
}
|
||||
}
|
||||
|
||||
export function getCategoryActionType(category: Category): CategoryActionType {
|
||||
if (category.startsWith("poi_")) {
|
||||
return CategoryActionType.POI;
|
||||
} else {
|
||||
return CategoryActionType.Skippable;
|
||||
}
|
||||
}
|
||||
5
src/utils/configUtils.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import Config from "../config";
|
||||
|
||||
export function showDonationLink(): boolean {
|
||||
return navigator.vendor !== "Apple Computer, Inc." && Config.config.showDonationLink;
|
||||
}
|
||||
20
src/utils/pageUtils.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
export function getControls(): HTMLElement | false {
|
||||
const controlsSelectors = [
|
||||
// YouTube
|
||||
".ytp-right-controls",
|
||||
// Mobile YouTube
|
||||
".player-controls-top",
|
||||
// Invidious/videojs video element's controls element
|
||||
".vjs-control-bar",
|
||||
];
|
||||
|
||||
for (const controlsSelector of controlsSelectors) {
|
||||
const controls = document.querySelectorAll(controlsSelector);
|
||||
|
||||
if (controls && controls.length > 0) {
|
||||
return <HTMLElement> controls[controls.length - 1];
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
26
src/utils/urlParser.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
|
||||
export function getStartTimeFromUrl(url: string): number {
|
||||
const urlParams = new URLSearchParams(url);
|
||||
const time = urlParams?.get('t') || urlParams?.get('time_continue');
|
||||
|
||||
return urlTimeToSeconds(time);
|
||||
}
|
||||
|
||||
export function urlTimeToSeconds(time: string): number {
|
||||
if (!time) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const re = /(?:(\d{1,3})h)?(?:(\d{1,2})m)?(\d+)s?/;
|
||||
const match = re.exec(time);
|
||||
|
||||
if (match) {
|
||||
const hours = parseInt(match[1] ?? '0', 10);
|
||||
const minutes = parseInt(match[2] ?? '0', 10);
|
||||
const seconds = parseInt(match[3] ?? '0', 10);
|
||||
|
||||
return hours * 3600 + minutes * 60 + seconds;
|
||||
} else if (/\d+/.test(time)) {
|
||||
return parseInt(time, 10);
|
||||
}
|
||||
}
|
||||
165
test/selenium.test.ts
Normal file
@@ -0,0 +1,165 @@
|
||||
import { Builder, By, until, WebDriver } from "selenium-webdriver";
|
||||
import * as Chrome from "selenium-webdriver/chrome";
|
||||
import * as Path from "path";
|
||||
|
||||
test("Selenium Chrome test", async () => {
|
||||
let driver;
|
||||
try {
|
||||
driver = await setup();
|
||||
} catch (e) {
|
||||
console.warn("A browser is probably not installed, skipping selenium tests");
|
||||
console.warn(e);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await waitForInstall(driver);
|
||||
// This video has no ads
|
||||
await goToVideo(driver, "jNQXAC9IVRw");
|
||||
|
||||
await createSegment(driver, "4", "10.33", "0:04.000 to 0:10.330");
|
||||
|
||||
await editSegments(driver, 0, "0:04.000", "0:10.330", "5", "13.211", "0:05.000 to 0:13.211", false);
|
||||
await autoskipSegment(driver, 5, 13.211);
|
||||
|
||||
await setSegmentCategory(driver, 0, 1, false);
|
||||
await setSegmentActionType(driver, 0, 1, false);
|
||||
await editSegments(driver, 0, "0:05.000", "0:13.211", "5", "7.5", "0:05.000 to 0:07.500", false);
|
||||
await muteSkipSegment(driver, 5, 7.5);
|
||||
} finally {
|
||||
await driver.quit();
|
||||
}
|
||||
}, 100_000);
|
||||
|
||||
async function setup(): Promise<WebDriver> {
|
||||
const options = new Chrome.Options();
|
||||
options.addArguments("--load-extension=" + Path.join(__dirname, "../dist/"));
|
||||
options.addArguments("--mute-audio");
|
||||
options.addArguments("--disable-features=PreloadMediaEngagementData, MediaEngagementBypassAutoplayPolicies");
|
||||
|
||||
const driver = await new Builder().forBrowser("chrome").setChromeOptions(options).build();
|
||||
driver.manage().setTimeouts({
|
||||
implicit: 5000
|
||||
});
|
||||
|
||||
return driver;
|
||||
}
|
||||
|
||||
async function waitForInstall(driver: WebDriver, startingTab = 0): Promise<void> {
|
||||
// Selenium only knows about the one tab it's on,
|
||||
// so we can't wait for the help page to appear
|
||||
await driver.sleep(3000);
|
||||
|
||||
const handles = await driver.getAllWindowHandles();
|
||||
await driver.switchTo().window(handles[startingTab]);
|
||||
}
|
||||
|
||||
async function goToVideo(driver: WebDriver, videoId: string): Promise<void> {
|
||||
await driver.get("https://www.youtube.com/watch?v=" + videoId);
|
||||
await driver.wait(until.elementIsVisible(await driver.findElement(By.className("ytd-video-primary-info-renderer"))));
|
||||
}
|
||||
|
||||
async function createSegment(driver: WebDriver, startTime: string, endTime: string, expectedDisplayedTime: string): Promise<void> {
|
||||
const startSegmentButton = await driver.findElement(By.id("startSegmentButton"));
|
||||
const cancelSegmentButton = await driver.findElement(By.id("cancelSegmentButton"));
|
||||
await driver.executeScript("document.querySelector('video').currentTime = " + startTime);
|
||||
|
||||
await startSegmentButton.click();
|
||||
await driver.wait(until.elementIsVisible(cancelSegmentButton));
|
||||
|
||||
await driver.executeScript("document.querySelector('video').currentTime = " + endTime);
|
||||
|
||||
await startSegmentButton.click();
|
||||
await driver.wait(until.elementIsNotVisible(cancelSegmentButton));
|
||||
|
||||
const submitButton = await driver.findElement(By.id("submitButton"));
|
||||
await submitButton.click();
|
||||
|
||||
const sponsorTimeDisplays = await driver.findElements(By.className("sponsorTimeDisplay"));
|
||||
const sponsorTimeDisplay = sponsorTimeDisplays[sponsorTimeDisplays.length - 1];
|
||||
await driver.wait(until.elementTextIs(sponsorTimeDisplay, expectedDisplayedTime));
|
||||
}
|
||||
|
||||
async function editSegments(driver: WebDriver, index: number, expectedStartTimeBox: string, expectedEndTimeBox: string,
|
||||
startTime: string, endTime: string, expectedDisplayedTime: string, openSubmitBox: boolean): Promise<void> {
|
||||
|
||||
if (openSubmitBox) {
|
||||
const submitButton = await driver.findElement(By.id("submitButton"));
|
||||
await submitButton.click();
|
||||
}
|
||||
|
||||
let editButton = await driver.findElement(By.id("sponsorTimeEditButtonSubmissionNotice" + index));
|
||||
let sponsorTimeDisplays = await driver.findElements(By.className("sponsorTimeDisplay"));
|
||||
let sponsorTimeDisplay = sponsorTimeDisplays[index];
|
||||
await sponsorTimeDisplay.click();
|
||||
// Ensure edit time appears
|
||||
await driver.findElement(By.id("submittingTime0SubmissionNotice" + index));
|
||||
|
||||
// Try the edit button too
|
||||
await editButton.click();
|
||||
await editButton.click();
|
||||
|
||||
const startTimeBox = await driver.findElement(By.id("submittingTime0SubmissionNotice" + index));
|
||||
expect((await startTimeBox.getAttribute("value"))).toBe(expectedStartTimeBox);
|
||||
await startTimeBox.clear();
|
||||
await startTimeBox.sendKeys(startTime);
|
||||
|
||||
const endTimeBox = await driver.findElement(By.id("submittingTime1SubmissionNotice" + index));
|
||||
expect((await endTimeBox.getAttribute("value"))).toBe(expectedEndTimeBox);
|
||||
await endTimeBox.clear();
|
||||
await endTimeBox.sendKeys(endTime);
|
||||
|
||||
editButton = await driver.findElement(By.id("sponsorTimeEditButtonSubmissionNotice" + index));
|
||||
await editButton.click();
|
||||
|
||||
sponsorTimeDisplays = await driver.findElements(By.className("sponsorTimeDisplay"));
|
||||
sponsorTimeDisplay = sponsorTimeDisplays[index];
|
||||
await driver.wait(until.elementTextIs(sponsorTimeDisplay, expectedDisplayedTime));
|
||||
}
|
||||
|
||||
async function setSegmentCategory(driver: WebDriver, index: number, categoryIndex: number, openSubmitBox: boolean): Promise<void> {
|
||||
if (openSubmitBox) {
|
||||
const submitButton = await driver.findElement(By.id("submitButton"));
|
||||
await submitButton.click();
|
||||
}
|
||||
|
||||
const categorySelection = await driver.findElement(By.css(`#sponsorTimeCategoriesSubmissionNotice${index} > option:nth-child(${categoryIndex + 1})`));
|
||||
await categorySelection.click();
|
||||
}
|
||||
|
||||
async function setSegmentActionType(driver: WebDriver, index: number, actionTypeIndex: number, openSubmitBox: boolean): Promise<void> {
|
||||
if (openSubmitBox) {
|
||||
const submitButton = await driver.findElement(By.id("submitButton"));
|
||||
await submitButton.click();
|
||||
}
|
||||
|
||||
const actionTypeSelection = await driver.findElement(By.css(`#sponsorTimeActionTypesSubmissionNotice${index} > option:nth-child(${actionTypeIndex + 1})`));
|
||||
await actionTypeSelection.click();
|
||||
}
|
||||
|
||||
async function autoskipSegment(driver: WebDriver, startTime: number, endTime: number): Promise<void> {
|
||||
const video = await driver.findElement(By.css("video"));
|
||||
|
||||
await driver.executeScript("document.querySelector('video').currentTime = " + (startTime - 0.5));
|
||||
await driver.executeScript("document.querySelector('video').play()");
|
||||
|
||||
await driver.sleep(1300);
|
||||
expect(parseFloat(await video.getAttribute("currentTime"))).toBeGreaterThan(endTime);
|
||||
await driver.executeScript("document.querySelector('video').pause()");
|
||||
}
|
||||
|
||||
async function muteSkipSegment(driver: WebDriver, startTime: number, endTime: number): Promise<void> {
|
||||
const duration = endTime - startTime;
|
||||
const video = await driver.findElement(By.css("video"));
|
||||
|
||||
await driver.executeScript("document.querySelector('video').currentTime = " + (startTime - 0.5));
|
||||
await driver.executeScript("document.querySelector('video').play()");
|
||||
|
||||
await driver.sleep(1300);
|
||||
expect(await video.getAttribute("muted")).toEqual("true");
|
||||
|
||||
await driver.sleep(duration * 1000 + 300);
|
||||
expect(await video.getAttribute("muted")).toBeNull(); // Default is null for some reason
|
||||
await driver.executeScript("document.querySelector('video').pause()");
|
||||
}
|
||||
27
test/urlParser.test.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { getStartTimeFromUrl } from '../src/utils/urlParser';
|
||||
|
||||
describe("getStartTimeFromUrl", () => {
|
||||
it("parses with a number", () => {
|
||||
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=123")).toBe(123);
|
||||
});
|
||||
|
||||
it("parses with seconds", () => {
|
||||
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=123s")).toBe(123);
|
||||
});
|
||||
|
||||
it("parses with minutes", () => {
|
||||
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=23m3s")).toBe(23 * 60 + 3);
|
||||
});
|
||||
|
||||
it("parses with hours", () => {
|
||||
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=1h2m3s")).toBe(1 * 60 * 60 + 2 * 60 + 3);
|
||||
});
|
||||
|
||||
it("works with time_continue", () => {
|
||||
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&time_continue=123")).toBe(123);
|
||||
});
|
||||
|
||||
it("works with no time", () => {
|
||||
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ")).toBe(0);
|
||||
});
|
||||
});
|
||||