mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-03-24 21:50:59 +03:00
Compare commits
180 Commits
angular-13
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f77249a35e | ||
|
|
91f5de326d | ||
|
|
dcbd8f0346 | ||
|
|
8a6a578e60 | ||
|
|
01114d9309 | ||
|
|
7f387ce6aa | ||
|
|
523d303766 | ||
|
|
6bd9ddd14c | ||
|
|
f8d4e18fd4 | ||
|
|
56facd320f | ||
|
|
14c9dc482b | ||
|
|
1f47f01fd5 | ||
|
|
09957843ec | ||
|
|
a6ae5d114e | ||
|
|
68c2bc9d3d | ||
|
|
f9f35b27bd | ||
|
|
6a63f7ee1a | ||
|
|
11acd56e1e | ||
|
|
12dd9d45b5 | ||
|
|
d0171d719b | ||
|
|
e298f19534 | ||
|
|
6c875ba667 | ||
|
|
1b4caf4699 | ||
|
|
ca9b1641d8 | ||
|
|
050c40fc19 | ||
|
|
0945a0bbd1 | ||
|
|
9f91fdf221 | ||
|
|
4b89c58c84 | ||
|
|
d0876516a6 | ||
|
|
e8390e3d9d | ||
|
|
5c4c282718 | ||
|
|
9fc659dc0a | ||
|
|
8dac9d1806 | ||
|
|
0f6742f11b | ||
|
|
d6aaca9233 | ||
|
|
7333edf6c8 | ||
|
|
5d9cb19bde | ||
|
|
a21dc85d15 | ||
|
|
a57a25133c | ||
|
|
d6f5b87d3f | ||
|
|
2678215e08 | ||
|
|
95203a47d0 | ||
|
|
7f4119febe | ||
|
|
02f758c33d | ||
|
|
554f7c9787 | ||
|
|
d37287541f | ||
|
|
da226df72a | ||
|
|
6199157687 | ||
|
|
d2e1b04326 | ||
|
|
4bff50a5f0 | ||
|
|
6ffa9d1ffd | ||
|
|
5a80b7aafa | ||
|
|
4d00960fcf | ||
|
|
6e8ca9d843 | ||
|
|
83a9d93ce5 | ||
|
|
2707b09627 | ||
|
|
8118906b0a | ||
|
|
2ad42ebf27 | ||
|
|
2b3490e52c | ||
|
|
55fd60acd3 | ||
|
|
664b635439 | ||
|
|
692d6eeaac | ||
|
|
9515d5a1b0 | ||
|
|
24df238ff9 | ||
|
|
f5e6815200 | ||
|
|
0e5efd003e | ||
|
|
3e7ef766de | ||
|
|
17fdd0d788 | ||
|
|
ce3e645129 | ||
|
|
acca2d0de2 | ||
|
|
31b4fcb9fc | ||
|
|
336d7a09bd | ||
|
|
7c31a10498 | ||
|
|
a94b8f376e | ||
|
|
84d33b0f82 | ||
|
|
3abf8ecfc3 | ||
|
|
5b919b2b18 | ||
|
|
e290dc0a25 | ||
|
|
a54f07e93a | ||
|
|
8336d886e9 | ||
|
|
6a56b5b065 | ||
|
|
7aca8ab060 | ||
|
|
8cc5c4f733 | ||
|
|
c5eacbb70c | ||
|
|
7268242691 | ||
|
|
d0f5518d31 | ||
|
|
713a97f75a | ||
|
|
0bdcfa3244 | ||
|
|
849c1927d3 | ||
|
|
06ca9cbe76 | ||
|
|
8e4a3119ab | ||
|
|
ec1ccf6888 | ||
|
|
c33e8010b3 | ||
|
|
57fd991d5c | ||
|
|
44c1a34c67 | ||
|
|
9f740020af | ||
|
|
4d4bc76549 | ||
|
|
93ce498e94 | ||
|
|
e5b256b8df | ||
|
|
05ea5a816f | ||
|
|
b3342d89c1 | ||
|
|
7bfb441a00 | ||
|
|
01fd2fb990 | ||
|
|
1bb4d9dbf6 | ||
|
|
5e23932146 | ||
|
|
d6d3495c5b | ||
|
|
a36761e96a | ||
|
|
88c16d7195 | ||
|
|
8a323f028d | ||
|
|
a68726e7cb | ||
|
|
dab0b7a8b6 | ||
|
|
9f9054ed9d | ||
|
|
77e8cbc6b5 | ||
|
|
4c06c430eb | ||
|
|
2981f843c3 | ||
|
|
3a48ff2d50 | ||
|
|
ac2c3dc8a1 | ||
|
|
0abe252d1e | ||
|
|
f5f00e1732 | ||
|
|
c309e41a91 | ||
|
|
754d837059 | ||
|
|
d5626f1dae | ||
|
|
9c0733453a | ||
|
|
2a41028253 | ||
|
|
67b2e480f8 | ||
|
|
2cdc1cee98 | ||
|
|
bd1ed2b705 | ||
|
|
33ca0f0817 | ||
|
|
d5ab0d7b96 | ||
|
|
777aebe508 | ||
|
|
efaecaa059 | ||
|
|
39ddefab5c | ||
|
|
60f2ab449f | ||
|
|
958f80e200 | ||
|
|
7aa5c1bf7f | ||
|
|
3bcbe0d3e7 | ||
|
|
80fcecdaea | ||
|
|
0329cd9718 | ||
|
|
493e876a97 | ||
|
|
574edd74ab | ||
|
|
fe91484f24 | ||
|
|
dda6e40a42 | ||
|
|
c0fb838931 | ||
|
|
28924cc7a0 | ||
|
|
2527051eab | ||
|
|
fcf7d14f46 | ||
|
|
0a8aba54d2 | ||
|
|
2c6485acb2 | ||
|
|
aea4f52267 | ||
|
|
5ac5fca482 | ||
|
|
7874f1b71a | ||
|
|
960c545f37 | ||
|
|
5e3eb68b03 | ||
|
|
4dd3b97515 | ||
|
|
701066eec1 | ||
|
|
7f61ccb5f5 | ||
|
|
4f227ca442 | ||
|
|
666bd2057d | ||
|
|
37c858f950 | ||
|
|
ebb7f6a2b0 | ||
|
|
48e46db071 | ||
|
|
768ec59f30 | ||
|
|
aa8f602856 | ||
|
|
d5c1361e64 | ||
|
|
901a96aada | ||
|
|
21507ee36d | ||
|
|
0585943d67 | ||
|
|
0bc2193f25 | ||
|
|
f3398fce1a | ||
|
|
60e8973f52 | ||
|
|
d94857b0a5 | ||
|
|
5fda56d7af | ||
|
|
abb80b33f3 | ||
|
|
9977340161 | ||
|
|
c008171850 | ||
|
|
02e683add9 | ||
|
|
d90b2d3687 | ||
|
|
32b68033e8 | ||
|
|
08027a5c0b | ||
|
|
25aac19cfb |
18
.github/dependabot.yaml
vendored
Normal file
18
.github/dependabot.yaml
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/.github/workflows"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/backend/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
38
.github/workflows/close-issue-if-noresponse.yml
vendored
Normal file
38
.github/workflows/close-issue-if-noresponse.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
name: No Response
|
||||
|
||||
# Both `issue_comment` and `scheduled` event types are required for this Action
|
||||
# to work properly.
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
schedule:
|
||||
# Schedule for five minutes after the hour, every hour
|
||||
- cron: '5 * * * *'
|
||||
|
||||
# By specifying the access of one of the scopes, all of those that are not
|
||||
# specified are set to 'none'.
|
||||
permissions:
|
||||
issues: write
|
||||
|
||||
jobs:
|
||||
noResponse:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.repository == 'Tzahi12345/YoutubeDL-Material' }}
|
||||
steps:
|
||||
- uses: lee-dohm/no-response@v0.5.0
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
# Comment to post when closing an Issue for lack of response. Set to `false` to disable
|
||||
closeComment: >
|
||||
This issue has been automatically closed because there has been no response
|
||||
to our request for more information from the original author. With only the
|
||||
information that is currently in the issue, we don't have enough information
|
||||
to take action. Please reach out if you have or find the answers we need so
|
||||
that we can investigate further. We will re-open this issue if you provide us
|
||||
with the requested information with a comment under this issue.
|
||||
Thank you for your understanding and for trying to help make this application
|
||||
a better one!
|
||||
# Number of days of inactivity before an issue is closed for lack of response.
|
||||
daysUntilClose: 21
|
||||
# Label requiring a response.
|
||||
responseRequiredLabel: "💬 response-needed"
|
||||
27
.github/workflows/docker-pr.yml
vendored
Normal file
27
.github/workflows/docker-pr.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
name: docker-pr
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
build-and-push:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: checkout code
|
||||
uses: actions/checkout@v2
|
||||
- name: Set hash
|
||||
id: vars
|
||||
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
|
||||
- name: Get current date
|
||||
id: date
|
||||
run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
|
||||
- name: create-json
|
||||
id: create-json
|
||||
uses: jsdaniell/create-json@1.1.2
|
||||
with:
|
||||
name: "version.json"
|
||||
json: '{"type": "docker", "tag": "nightly", "commit": "${{ steps.vars.outputs.sha_short }}", "date": "${{ steps.date.outputs.date }}"}'
|
||||
dir: 'backend/'
|
||||
- name: Build docker images
|
||||
run: docker build . -t tzahi12345/youtubedl-material:nightly-pr
|
||||
43
.github/workflows/docker-release.yml
vendored
43
.github/workflows/docker-release.yml
vendored
@@ -6,19 +6,25 @@ on:
|
||||
tags:
|
||||
description: 'Docker tags'
|
||||
required: true
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build-and-push:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: checkout code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set hash
|
||||
id: vars
|
||||
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
|
||||
|
||||
- name: Get current date
|
||||
id: date
|
||||
run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
|
||||
|
||||
- name: create-json
|
||||
id: create-json
|
||||
uses: jsdaniell/create-json@1.1.2
|
||||
@@ -26,15 +32,49 @@ jobs:
|
||||
name: "version.json"
|
||||
json: '{"type": "docker", "tag": "latest", "commit": "${{ steps.vars.outputs.sha_short }}", "date": "${{ steps.date.outputs.date }}"}'
|
||||
dir: 'backend/'
|
||||
|
||||
- name: Set image tag
|
||||
id: tags
|
||||
run: |
|
||||
if [ ${{ github.event.action }} == "workflow_dispatch" ]; then
|
||||
echo "::set-output name=tags::${{ github.event.inputs.tags }}"
|
||||
elif [ ${{ github.event.action }} == "release" ]; then
|
||||
echo "::set-output name=tags::${{ github.event.release.tag_name }}"
|
||||
else
|
||||
echo "Unknown workflow trigger: ${{ github.event.action }}! Cannot determine default tag."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Generate Docker image metadata
|
||||
id: docker-meta
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
images: |
|
||||
${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPO }}
|
||||
ghcr.io/${{ github.repository_owner }}/${{ secrets.DOCKERHUB_REPO }}
|
||||
tags: |
|
||||
raw=${{ steps.tags.outputs.tags }}
|
||||
raw=latest
|
||||
|
||||
- name: setup platform emulator
|
||||
uses: docker/setup-qemu-action@v1
|
||||
|
||||
- name: setup multi-arch docker build
|
||||
uses: docker/setup-buildx-action@v1
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: build & push images
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
@@ -42,4 +82,5 @@ jobs:
|
||||
file: ./Dockerfile
|
||||
platforms: linux/amd64,linux/arm,linux/arm64/v8
|
||||
push: true
|
||||
tags: ${{ github.event.inputs.tags }}
|
||||
tags: ${{ steps.docker-meta.outputs.tags }}
|
||||
labels: ${{ steps.docker-meta.outputs.labels }}
|
||||
|
||||
45
.github/workflows/docker.yml
vendored
45
.github/workflows/docker.yml
vendored
@@ -3,6 +3,16 @@ name: docker
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
paths-ignore:
|
||||
- '.github/**'
|
||||
- '.vscode/**'
|
||||
- 'chrome-extension/**'
|
||||
- 'releases/**'
|
||||
- '**/**.md'
|
||||
- '**.crx'
|
||||
- '**.pem'
|
||||
- '.dockerignore'
|
||||
- '.gitignore'
|
||||
|
||||
jobs:
|
||||
build-and-push:
|
||||
@@ -10,28 +20,58 @@ jobs:
|
||||
steps:
|
||||
- name: checkout code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set hash
|
||||
id: vars
|
||||
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
|
||||
|
||||
- name: Get current date
|
||||
id: date
|
||||
run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
|
||||
|
||||
- name: create-json
|
||||
id: create-json
|
||||
uses: jsdaniell/create-json@1.1.2
|
||||
with:
|
||||
name: "version.json"
|
||||
json: '{"type": "docker", "tag": "nightly", "commit": "${{ steps.vars.outputs.sha_short }}", "date": "${{ steps.date.outputs.date }}"}'
|
||||
json: '{"type": "docker", "tag": "${{secrets.DOCKERHUB_MASTER_TAG}}", "commit": "${{ steps.vars.outputs.sha_short }}", "date": "${{ steps.date.outputs.date }}"}'
|
||||
dir: 'backend/'
|
||||
|
||||
- name: setup platform emulator
|
||||
uses: docker/setup-qemu-action@v1
|
||||
|
||||
- name: setup multi-arch docker build
|
||||
uses: docker/setup-buildx-action@v1
|
||||
|
||||
- name: Generate Docker image metadata
|
||||
id: docker-meta
|
||||
uses: docker/metadata-action@v4
|
||||
# Defaults:
|
||||
# DOCKERHUB_USERNAME : tzahi12345
|
||||
# DOCKERHUB_REPO : youtubedl-material
|
||||
# DOCKERHUB_MASTER_TAG: nightly
|
||||
with:
|
||||
images: |
|
||||
${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPO }}
|
||||
ghcr.io/${{ github.repository_owner }}/${{ secrets.DOCKERHUB_REPO }}
|
||||
tags: |
|
||||
type=raw,${{secrets.DOCKERHUB_MASTER_TAG}}-{{ date 'YYYY-MM-DD' }}
|
||||
type=raw,${{secrets.DOCKERHUB_MASTER_TAG}}
|
||||
type=sha,prefix=sha-,format=short
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: build & push images
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
@@ -39,4 +79,5 @@ jobs:
|
||||
file: ./Dockerfile
|
||||
platforms: linux/amd64,linux/arm,linux/arm64/v8
|
||||
push: true
|
||||
tags: tzahi12345/youtubedl-material:nightly
|
||||
tags: ${{ steps.docker-meta.outputs.tags }}
|
||||
labels: ${{ steps.docker-meta.outputs.labels }}
|
||||
|
||||
102
Dockerfile
102
Dockerfile
@@ -1,54 +1,66 @@
|
||||
FROM alpine:latest AS ffmpeg
|
||||
# Fetching our ffmpeg
|
||||
FROM ubuntu:22.04 AS ffmpeg
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
# Use script due local build compability
|
||||
COPY ffmpeg-fetch.sh .
|
||||
RUN sh ./ffmpeg-fetch.sh
|
||||
|
||||
COPY docker-build.sh .
|
||||
RUN sh ./docker-build.sh
|
||||
|
||||
FROM alpine:latest as frontend
|
||||
|
||||
RUN apk add --no-cache \
|
||||
npm
|
||||
|
||||
RUN npm install -g @angular/cli
|
||||
|
||||
WORKDIR /build
|
||||
COPY [ "package.json", "package-lock.json", "/build/" ]
|
||||
RUN npm install
|
||||
|
||||
COPY [ "angular.json", "tsconfig.json", "/build/" ]
|
||||
COPY [ "src/", "/build/src/" ]
|
||||
RUN npm run build
|
||||
|
||||
#--------------#
|
||||
|
||||
FROM alpine:latest
|
||||
|
||||
ENV UID=1000 \
|
||||
GID=1000 \
|
||||
USER=youtube
|
||||
|
||||
# Create our Ubuntu 22.04 with node 16
|
||||
# Go to 20.04
|
||||
FROM ubuntu:20.04 AS base
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV UID=1000
|
||||
ENV GID=1000
|
||||
ENV USER=youtube
|
||||
ENV NO_UPDATE_NOTIFIER=true
|
||||
|
||||
RUN addgroup -S $USER -g $GID && adduser -D -S $USER -G $USER -u $UID
|
||||
|
||||
RUN apk add --no-cache \
|
||||
npm \
|
||||
python2 \
|
||||
python3 \
|
||||
su-exec \
|
||||
&& apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ \
|
||||
atomicparsley
|
||||
|
||||
WORKDIR /app
|
||||
COPY --from=ffmpeg /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg
|
||||
COPY --from=ffmpeg /usr/local/bin/ffprobe /usr/local/bin/ffprobe
|
||||
COPY --chown=$UID:$GID [ "backend/package.json", "backend/package-lock.json", "/app/" ]
|
||||
ENV PM2_HOME=/app/pm2
|
||||
RUN npm install pm2 -g
|
||||
RUN npm install && chown -R $UID:$GID ./
|
||||
RUN groupadd -g $GID $USER && useradd --system -m -g $USER --uid $UID $USER && \
|
||||
apt update && \
|
||||
apt install -y --no-install-recommends curl ca-certificates && \
|
||||
curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && \
|
||||
apt install -y --no-install-recommends nodejs && \
|
||||
npm -g install npm && \
|
||||
apt clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
||||
# Build frontend
|
||||
FROM base as frontend
|
||||
RUN npm install -g @angular/cli
|
||||
WORKDIR /build
|
||||
COPY [ "package.json", "package-lock.json", "angular.json", "tsconfig.json", "/build/" ]
|
||||
COPY [ "src/", "/build/src/" ]
|
||||
RUN npm install && \
|
||||
npm run build && \
|
||||
ls -al /build/backend/public
|
||||
|
||||
|
||||
# Install backend deps
|
||||
FROM base as backend
|
||||
WORKDIR /app
|
||||
COPY [ "backend/","/app/" ]
|
||||
RUN npm config set strict-ssl false && \
|
||||
npm install --prod && \
|
||||
ls -al
|
||||
|
||||
|
||||
# Final image
|
||||
FROM base
|
||||
RUN npm install -g pm2 && \
|
||||
apt update && \
|
||||
apt install -y --no-install-recommends gosu python3-minimal python-is-python3 atomicparsley && \
|
||||
apt clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
WORKDIR /app
|
||||
# User 1000 already exist from base image
|
||||
COPY --chown=$UID:$GID --from=ffmpeg [ "/usr/local/bin/ffmpeg", "/usr/local/bin/ffmpeg" ]
|
||||
COPY --chown=$UID:$GID --from=ffmpeg [ "/usr/local/bin/ffprobe", "/usr/local/bin/ffprobe" ]
|
||||
COPY --chown=$UID:$GID --from=backend ["/app/","/app/"]
|
||||
COPY --chown=$UID:$GID --from=frontend [ "/build/backend/public/", "/app/public/" ]
|
||||
COPY --chown=$UID:$GID [ "/backend/", "/app/" ]
|
||||
# Add some persistence data
|
||||
#VOLUME ["/app/appdata"]
|
||||
|
||||
EXPOSE 17442
|
||||
ENTRYPOINT [ "/app/entrypoint.sh" ]
|
||||
CMD [ "pm2-runtime", "pm2.config.js" ]
|
||||
CMD [ "pm2-runtime","--raw","pm2.config.js" ]
|
||||
|
||||
2
Dockerfile.heroku
Normal file
2
Dockerfile.heroku
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM tzahi12345/youtubedl-material:nightly
|
||||
CMD [ "pm2-runtime", "pm2.config.js" ]
|
||||
@@ -16,7 +16,7 @@ paths:
|
||||
- downloader
|
||||
summary: Download video file
|
||||
description: |-
|
||||
Downloads a video file with the given URL. Will include global args if they exist.
|
||||
Downloads a file with the given URL. Will include global args if they exist.
|
||||
|
||||
|
||||
HTTP requests will return once the video file download completes. In the future, it will (by default) return once the download starts, and a separate API call will be used for checking the download status.
|
||||
@@ -41,7 +41,7 @@ paths:
|
||||
post:
|
||||
tags:
|
||||
- downloader
|
||||
summary: Download video file
|
||||
summary: Generates arguments used to download file
|
||||
description: Generates args, used for checking what args would run if you ran downloadFile
|
||||
operationId: post-generateArgs
|
||||
requestBody:
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
[](https://github.com/Tzahi12345/YoutubeDL-Material/issues)
|
||||
[](https://github.com/Tzahi12345/YoutubeDL-Material/blob/master/LICENSE.md)
|
||||
|
||||
YoutubeDL-Material is a Material Design frontend for [youtube-dl](https://rg3.github.io/youtube-dl/). It's coded using [Angular 11](https://angular.io/) for the frontend, and [Node.js](https://nodejs.org/) on the backend.
|
||||
YoutubeDL-Material is a Material Design frontend for [youtube-dl](https://rg3.github.io/youtube-dl/). It's coded using [Angular 13](https://angular.io/) for the frontend, and [Node.js](https://nodejs.org/) on the backend.
|
||||
|
||||
Now with [Docker](#Docker) support!
|
||||
|
||||
|
||||
21
SECURITY.md
Normal file
21
SECURITY.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Currently all work on this project goes into the nightly builds.
|
||||
4.2's RELEASE build is now quite old and should be considered legacy.
|
||||
We urge users to use the nightly releases, because the project
|
||||
constantly sees fixes.
|
||||
|
||||
| Version | Supported |
|
||||
| ------------- | ------------------ |
|
||||
| 4.2 Nightlies | :white_check_mark: |
|
||||
| 4.2 Release | :x: |
|
||||
| < 4.2 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Please file an issue in our GitHub's repo, because this app
|
||||
isn't meant to be safe to run as public instance yet, but rather as a LAN facing app.
|
||||
|
||||
We welcome PRs and help in general in making YTDL-M more secure, but it's not a priority as of now.
|
||||
1
app.json
1
app.json
@@ -2,6 +2,7 @@
|
||||
"name": "YoutubeDL-Material",
|
||||
"description": "An open-source and self-hosted YouTube downloader based on Google's Material Design specifications.",
|
||||
"repository": "https://github.com/Tzahi12345/YoutubeDL-Material",
|
||||
"stack": "container",
|
||||
"logo": "https://i.imgur.com/GPzvPiU.png",
|
||||
"keywords": ["youtube-dl", "youtubedl-material", "nodejs"]
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
FROM alpine:3.12 as frontend
|
||||
|
||||
RUN apk add --no-cache \
|
||||
npm \
|
||||
curl
|
||||
|
||||
RUN npm install -g @angular/cli
|
||||
|
||||
WORKDIR /build
|
||||
|
||||
RUN curl -L https://github.com/balena-io/qemu/releases/download/v3.0.0%2Bresin/qemu-3.0.0+resin-arm.tar.gz | tar zxvf - -C . && mv qemu-3.0.0+resin-arm/qemu-arm-static .
|
||||
|
||||
COPY [ "package.json", "package-lock.json", "/build/" ]
|
||||
RUN npm install
|
||||
|
||||
COPY [ "angular.json", "tsconfig.json", "/build/" ]
|
||||
COPY [ "src/", "/build/src/" ]
|
||||
RUN ng build --prod
|
||||
|
||||
#--------------#
|
||||
|
||||
FROM arm32v7/alpine:3.12
|
||||
|
||||
COPY --from=frontend /build/qemu-arm-static /usr/bin
|
||||
|
||||
ENV UID=1000 \
|
||||
GID=1000 \
|
||||
USER=youtube
|
||||
|
||||
RUN addgroup -S $USER -g $GID && adduser -D -S $USER -G $USER -u $UID
|
||||
|
||||
RUN apk add --no-cache \
|
||||
ffmpeg \
|
||||
npm \
|
||||
python2 \
|
||||
su-exec \
|
||||
&& apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ \
|
||||
atomicparsley
|
||||
|
||||
WORKDIR /app
|
||||
COPY --chown=$UID:$GID [ "backend/package.json", "backend/package-lock.json", "/app/" ]
|
||||
RUN npm install && chown -R $UID:$GID ./
|
||||
|
||||
COPY --chown=$UID:$GID --from=frontend [ "/build/backend/public/", "/app/public/" ]
|
||||
COPY --chown=$UID:$GID [ "/backend/", "/app/" ]
|
||||
|
||||
EXPOSE 17442
|
||||
ENTRYPOINT [ "/app/entrypoint.sh" ]
|
||||
CMD [ "node", "app.js" ]
|
||||
@@ -249,14 +249,6 @@ async function startServer() {
|
||||
});
|
||||
}
|
||||
|
||||
async function restartServer(is_update = false) {
|
||||
logger.info(`${is_update ? 'Update complete! ' : ''}Restarting server...`);
|
||||
|
||||
// the following line restarts the server through nodemon
|
||||
fs.writeFileSync(`restart${is_update ? '_update' : '_general'}.json`, 'internal use only');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
async function updateServer(tag) {
|
||||
// no tag provided means update to the latest version
|
||||
if (!tag) {
|
||||
@@ -297,7 +289,7 @@ async function updateServer(tag) {
|
||||
updating: true,
|
||||
'details': 'Update complete! Restarting server...'
|
||||
}
|
||||
restartServer(true);
|
||||
utils.restartServer(true);
|
||||
}, err => {
|
||||
logger.error(err);
|
||||
updaterStatus = {
|
||||
@@ -676,6 +668,7 @@ async function getUrlInfos(url) {
|
||||
|
||||
async function startYoutubeDL() {
|
||||
// auto update youtube-dl
|
||||
youtubedl_api.verifyBinaryExistsLinux();
|
||||
const update_available = await youtubedl_api.checkForYoutubeDLUpdate();
|
||||
if (update_available) await youtubedl_api.updateYoutubeDL(update_available);
|
||||
}
|
||||
@@ -764,7 +757,7 @@ app.get('/api/versionInfo', (req, res) => {
|
||||
|
||||
app.post('/api/restartServer', optionalJwt, (req, res) => {
|
||||
// delayed by a little bit so that the client gets a response
|
||||
setTimeout(() => {restartServer()}, 100);
|
||||
setTimeout(() => {utils.restartServer()}, 100);
|
||||
res.send({success: true});
|
||||
});
|
||||
|
||||
@@ -803,7 +796,7 @@ app.post('/api/testConnectionString', optionalJwt, async (req, res) => {
|
||||
app.post('/api/downloadFile', optionalJwt, async function(req, res) {
|
||||
req.setTimeout(0); // remove timeout in case of long videos
|
||||
const url = req.body.url;
|
||||
const type = req.body.type;
|
||||
const type = req.body.type ? req.body.type : 'video';
|
||||
const user_uid = req.isAuthenticated() ? req.user.uid : null;
|
||||
const options = {
|
||||
customArgs: req.body.customArgs,
|
||||
@@ -1802,6 +1795,7 @@ app.post('/api/updateTaskData', optionalJwt, async (req, res) => {
|
||||
|
||||
app.post('/api/getDBBackups', optionalJwt, async (req, res) => {
|
||||
const backup_dir = path.join('appdata', 'db_backup');
|
||||
fs.ensureDirSync(backup_dir);
|
||||
const db_backups = [];
|
||||
|
||||
const candidate_backups = await utils.recFindByExt(backup_dir, 'bak', null, [], false);
|
||||
|
||||
@@ -18,10 +18,19 @@ let JWT_EXPIRATION = null;
|
||||
let opts = null;
|
||||
let saltRounds = null;
|
||||
|
||||
exports.initialize = function() {
|
||||
exports.initialize = function () {
|
||||
/*************************
|
||||
* Authentication module
|
||||
************************/
|
||||
|
||||
if (db_api.database_initialized) {
|
||||
setupRoles();
|
||||
} else {
|
||||
db_api.database_initialized_bs.subscribe(init => {
|
||||
if (init) setupRoles();
|
||||
});
|
||||
}
|
||||
|
||||
saltRounds = 10;
|
||||
|
||||
JWT_EXPIRATION = config_api.getConfigItem('ytdl_jwt_expiration');
|
||||
@@ -49,6 +58,41 @@ exports.initialize = function() {
|
||||
}));
|
||||
}
|
||||
|
||||
const setupRoles = async () => {
|
||||
const required_roles = {
|
||||
admin: {
|
||||
permissions: [
|
||||
'filemanager',
|
||||
'settings',
|
||||
'subscriptions',
|
||||
'sharing',
|
||||
'advanced_download',
|
||||
'downloads_manager'
|
||||
]
|
||||
},
|
||||
user: {
|
||||
permissions: [
|
||||
'filemanager',
|
||||
'subscriptions',
|
||||
'sharing'
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
const role_keys = Object.keys(required_roles);
|
||||
for (let i = 0; i < role_keys.length; i++) {
|
||||
const role_key = role_keys[i];
|
||||
const role_in_db = await db_api.getRecord('roles', {key: role_key});
|
||||
if (!role_in_db) {
|
||||
// insert task metadata into table if missing
|
||||
await db_api.insertRecordIntoTable('roles', {
|
||||
key: role_key,
|
||||
permissions: required_roles[role_key]['permissions']
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
exports.passport = require('passport');
|
||||
|
||||
exports.passport.serializeUser(function(user, done) {
|
||||
|
||||
@@ -222,4 +222,83 @@ exports.AVAILABLE_PERMISSIONS = [
|
||||
|
||||
exports.DETAILS_BIN_PATH = 'node_modules/youtube-dl/bin/details'
|
||||
|
||||
// args that have a value after it (e.g. -o <output> or -f <format>)
|
||||
const YTDL_ARGS_WITH_VALUES = [
|
||||
'--default-search',
|
||||
'--config-location',
|
||||
'--proxy',
|
||||
'--socket-timeout',
|
||||
'--source-address',
|
||||
'--geo-verification-proxy',
|
||||
'--geo-bypass-country',
|
||||
'--geo-bypass-ip-block',
|
||||
'--playlist-start',
|
||||
'--playlist-end',
|
||||
'--playlist-items',
|
||||
'--match-title',
|
||||
'--reject-title',
|
||||
'--max-downloads',
|
||||
'--min-filesize',
|
||||
'--max-filesize',
|
||||
'--date',
|
||||
'--datebefore',
|
||||
'--dateafter',
|
||||
'--min-views',
|
||||
'--max-views',
|
||||
'--match-filter',
|
||||
'--age-limit',
|
||||
'--download-archive',
|
||||
'-r',
|
||||
'--limit-rate',
|
||||
'-R',
|
||||
'--retries',
|
||||
'--fragment-retries',
|
||||
'--buffer-size',
|
||||
'--http-chunk-size',
|
||||
'--external-downloader',
|
||||
'--external-downloader-args',
|
||||
'-a',
|
||||
'--batch-file',
|
||||
'-o',
|
||||
'--output',
|
||||
'--output-na-placeholder',
|
||||
'--autonumber-start',
|
||||
'--load-info-json',
|
||||
'--cookies',
|
||||
'--cache-dir',
|
||||
'--encoding',
|
||||
'--user-agent',
|
||||
'--referer',
|
||||
'--add-header',
|
||||
'--sleep-interval',
|
||||
'--max-sleep-interval',
|
||||
'-f',
|
||||
'--format',
|
||||
'--merge-output-format',
|
||||
'--sub-format',
|
||||
'--sub-lang',
|
||||
'-u',
|
||||
'--username',
|
||||
'-p',
|
||||
'--password',
|
||||
'-2',
|
||||
'--twofactor',
|
||||
'--video-password',
|
||||
'--ap-mso',
|
||||
'--ap-username',
|
||||
'--ap-password',
|
||||
'--audio-format',
|
||||
'--audio-quality',
|
||||
'--recode-video',
|
||||
'--postprocessor-args',
|
||||
'--metadata-from-title',
|
||||
'--fixup',
|
||||
'--ffmpeg-location',
|
||||
'--exec',
|
||||
'--convert-subs'
|
||||
];
|
||||
|
||||
// we're using a Set here for performance
|
||||
exports.YTDL_ARGS_WITH_VALUES = new Set(YTDL_ARGS_WITH_VALUES);
|
||||
|
||||
exports.CURRENT_VERSION = 'v4.2';
|
||||
|
||||
@@ -85,7 +85,6 @@ exports.initialize = (input_db, input_users_db) => {
|
||||
}
|
||||
|
||||
exports.connectToDB = async (retries = 5, no_fallback = false, custom_connection_string = null) => {
|
||||
if (using_local_db && !custom_connection_string) return;
|
||||
const success = await exports._connectToDB(custom_connection_string);
|
||||
if (success) return true;
|
||||
|
||||
@@ -496,6 +495,7 @@ exports.deleteFile = async (uid, uuid = null, blacklistMode = false) => {
|
||||
|
||||
let useYoutubeDLArchive = config_api.getConfigItem('ytdl_use_youtubedl_archive');
|
||||
if (useYoutubeDLArchive) {
|
||||
const usersFileFolder = config_api.getConfigItem('ytdl_users_base_path');
|
||||
const archive_path = uuid ? path.join(usersFileFolder, uuid, 'archives', `archive_${type}.txt`) : path.join('appdata', 'archives', `archive_${type}.txt`);
|
||||
|
||||
// get ID from JSON
|
||||
|
||||
@@ -3,7 +3,6 @@ const { uuid } = require('uuidv4');
|
||||
const path = require('path');
|
||||
const mergeFiles = require('merge-files');
|
||||
const NodeID3 = require('node-id3')
|
||||
const glob = require('glob')
|
||||
const Mutex = require('async-mutex').Mutex;
|
||||
|
||||
const youtubedl = require('youtube-dl');
|
||||
@@ -486,7 +485,7 @@ exports.generateArgs = async (url, type, options, user_uid = null, simulated = f
|
||||
}
|
||||
|
||||
if (options.additionalArgs && options.additionalArgs !== '') {
|
||||
downloadConfig = downloadConfig.concat(options.additionalArgs.split(',,'));
|
||||
downloadConfig = utils.injectArgs(downloadConfig, options.additionalArgs.split(',,'));
|
||||
}
|
||||
|
||||
const rate_limit = config_api.getConfigItem('ytdl_download_rate_limit');
|
||||
@@ -583,20 +582,26 @@ async function checkDownloadPercent(download_uid) {
|
||||
if (!resulting_file_size) return;
|
||||
|
||||
let sum_size = 0;
|
||||
glob(`{${files_to_check_for_progress.join(',')}, }*`, async (err, files) => {
|
||||
files.forEach(async file => {
|
||||
try {
|
||||
const file_stats = fs.statSync(file);
|
||||
if (file_stats && file_stats.size) {
|
||||
sum_size += file_stats.size;
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
for (let i = 0; i < files_to_check_for_progress.length; i++) {
|
||||
const file_to_check_for_progress = files_to_check_for_progress[i];
|
||||
const dir = path.dirname(file_to_check_for_progress);
|
||||
if (!fs.existsSync(dir)) continue;
|
||||
fs.readdir(dir, async (err, files) => {
|
||||
for (let j = 0; j < files.length; j++) {
|
||||
const file = files[j];
|
||||
if (!file.includes(path.basename(file_to_check_for_progress))) continue;
|
||||
try {
|
||||
const file_stats = fs.statSync(path.join(dir, file));
|
||||
if (file_stats && file_stats.size) {
|
||||
sum_size += file_stats.size;
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
const percent_complete = (sum_size/resulting_file_size * 100).toFixed(2);
|
||||
await db_api.updateRecord('download_queue', {uid: download_uid}, {percent_complete: percent_complete});
|
||||
});
|
||||
const percent_complete = (sum_size/resulting_file_size * 100).toFixed(2);
|
||||
await db_api.updateRecord('download_queue', {uid: download_uid}, {percent_complete: percent_complete});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
exports.generateNFOFile = (info, output_path) => {
|
||||
|
||||
@@ -11,7 +11,7 @@ fi
|
||||
# chown current working directory to current user
|
||||
if [ "$*" = "$CMD" ] && [ "$(id -u)" = "0" ]; then
|
||||
find . \! -user "$UID" -exec chown "$UID:$GID" -R '{}' + || echo "WARNING! Could not change directory ownership. If you manage permissions externally this is fine, otherwise you may experience issues when downloading or deleting videos."
|
||||
exec su-exec "$UID:$GID" "$0" "$@"
|
||||
exec gosu "$UID:$GID" "$0" "$@"
|
||||
fi
|
||||
|
||||
exec "$@"
|
||||
|
||||
58
backend/fix-scripts/001-fix_download_permissions.sh
Normal file
58
backend/fix-scripts/001-fix_download_permissions.sh
Normal file
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh
|
||||
|
||||
# INTERACTIVE PERMISSIONS FIX SCRIPT FOR YTDL-M
|
||||
# Date: 2022-05-03
|
||||
|
||||
# If you want to run this script on a bare-metal installation instead of within Docker
|
||||
# make sure that the paths configured below match your paths! (it's wise to use the full paths)
|
||||
# USAGE: within your container's bash shell:
|
||||
# chmod -R +x ./fix-scripts/
|
||||
# ./fix-scripts/001-fix_download_permissions.sh
|
||||
|
||||
# User defines / Docker env defaults
|
||||
PATH_SUBS=/app/subscriptions
|
||||
PATH_AUDIO=/app/audio
|
||||
PATH_VIDS=/app/video
|
||||
|
||||
clear -x
|
||||
echo "\n"
|
||||
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - # horizontal line
|
||||
echo "Welcome to the INTERACTIVE PERMISSIONS FIX SCRIPT FOR YTDL-M."
|
||||
echo "This script will set YTDL-M's download paths' owner to ${USER} (${UID}:${GID})"
|
||||
echo "and permissions to the default of 644."
|
||||
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - # horizontal line
|
||||
echo "\n"
|
||||
|
||||
# check whether dirs exist
|
||||
i=0
|
||||
[ -d $PATH_SUBS ] && i=$((i+1)) && echo "✔ (${i}/3) Found Subscriptions directory at ${PATH_SUBS}"
|
||||
[ -d $PATH_AUDIO ] && i=$((i+1)) && echo "✔ (${i}/3) Found Audio directory at ${PATH_AUDIO}"
|
||||
[ -d $PATH_VIDS ] && i=$((i+1)) && echo "✔ (${i}/3) Found Video directory at ${PATH_VIDS}"
|
||||
|
||||
# Ask to proceed or cancel, exit on missing paths
|
||||
case $i in
|
||||
0)
|
||||
echo "\nCouldn't find any download path to fix permissions for! \nPlease edit this script to configure!"
|
||||
exit 2;;
|
||||
3)
|
||||
echo "\nFound all download paths to fix permissions for. \nProceed? (Y/N)";;
|
||||
*)
|
||||
echo "\nOnly found ${i} out of 3 download paths! Something about this script's config must be wrong. \nProceed anyways? (Y/N)";;
|
||||
esac
|
||||
old_stty_cfg=$(stty -g)
|
||||
stty raw -echo ; answer=$(head -c 1) ; stty $old_stty_cfg # Careful playing with stty
|
||||
if echo "$answer" | grep -iq "^y" ;then
|
||||
echo "\n Running jobs now... (this may take a while)\n"
|
||||
[ -d $PATH_SUBS ] && chown "$UID:$GID" -R $PATH_SUBS && echo "✔ Set owner of ${PATH_SUBS} to ${USER}."
|
||||
[ -d $PATH_SUBS ] && chmod 644 -R $PATH_SUBS && echo "✔ Set permissions of ${PATH_SUBS} to 644."
|
||||
[ -d $PATH_AUDIO ] && chown "$UID:$GID" -R $PATH_AUDIO && echo "✔ Set owner of ${PATH_AUDIO} to ${USER}."
|
||||
[ -d $PATH_AUDIO ] && chmod 644 -R $PATH_AUDIO && echo "✔ Set permissions of ${PATH_AUDIO} to 644."
|
||||
[ -d $PATH_VIDS ] && chown "$UID:$GID" -R $PATH_VIDS && echo "✔ Set owner of ${PATH_VIDS} to ${USER}."
|
||||
[ -d $PATH_VIDS ] && chmod 644 -R $PATH_VIDS && echo "✔ Set permissions of ${PATH_VIDS} to 644."
|
||||
echo "\n✔ Done."
|
||||
echo "\n If you noticed file access errors those MAY be due to currently running downloads."
|
||||
echo " Feel free to re-run this script, however download parts should have correct file permissions anyhow. :)"
|
||||
exit
|
||||
else
|
||||
echo "\nOkay, bye."
|
||||
fi
|
||||
6
backend/package-lock.json
generated
6
backend/package-lock.json
generated
@@ -2567,9 +2567,9 @@
|
||||
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
|
||||
},
|
||||
"passport": {
|
||||
"version": "0.5.2",
|
||||
"resolved": "https://registry.npmjs.org/passport/-/passport-0.5.2.tgz",
|
||||
"integrity": "sha512-w9n/Ot5I7orGD4y+7V3EFJCQEznE5RxHamUxcqLT2QoJY0f2JdN8GyHonYFvN0Vz+L6lUJfVhrk2aZz2LbuREw==",
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz",
|
||||
"integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==",
|
||||
"requires": {
|
||||
"passport-strategy": "1.x.x",
|
||||
"pause": "0.0.1"
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
"express": "^4.17.3",
|
||||
"fluent-ffmpeg": "^2.1.2",
|
||||
"fs-extra": "^9.0.0",
|
||||
"glob": "^7.1.6",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"lowdb": "^1.0.0",
|
||||
"md5": "^2.2.1",
|
||||
@@ -53,7 +52,7 @@
|
||||
"node-id3": "^0.1.14",
|
||||
"node-schedule": "^2.1.0",
|
||||
"nodemon": "^2.0.7",
|
||||
"passport": "^0.5.2",
|
||||
"passport": "^0.4.1",
|
||||
"passport-http": "^0.3.0",
|
||||
"passport-jwt": "^4.0.0",
|
||||
"passport-ldapauth": "^3.0.1",
|
||||
|
||||
@@ -141,6 +141,7 @@ async function unsubscribe(sub, deleteMode, user_uid = null) {
|
||||
if (sub.archive && (await fs.pathExists(sub.archive))) {
|
||||
const archive_file_path = path.join(sub.archive, 'archive.txt');
|
||||
// deletes archive if it exists
|
||||
// TODO: Keep entries in blacklist_video.txt by moving them to a global blacklist
|
||||
if (await fs.pathExists(archive_file_path)) {
|
||||
await fs.unlink(archive_file_path);
|
||||
}
|
||||
@@ -266,11 +267,17 @@ async function getVideosForSub(sub, user_uid = null) {
|
||||
}
|
||||
resolve(false);
|
||||
} else if (output) {
|
||||
if (config_api.getConfigItem('ytdl_subscriptions_redownload_fresh_uploads')) {
|
||||
await setFreshUploads(sub, user_uid);
|
||||
checkVideosForFreshUploads(sub, user_uid);
|
||||
}
|
||||
|
||||
if (output.length === 0 || (output.length === 1 && output[0] === '')) {
|
||||
logger.verbose('No additional videos to download for ' + sub.name);
|
||||
resolve(true);
|
||||
return;
|
||||
}
|
||||
|
||||
const output_jsons = [];
|
||||
for (let i = 0; i < output.length; i++) {
|
||||
let output_json = null;
|
||||
@@ -294,14 +301,7 @@ async function getVideosForSub(sub, user_uid = null) {
|
||||
}
|
||||
|
||||
resolve(files_to_download);
|
||||
|
||||
if (config_api.getConfigItem('ytdl_subscriptions_redownload_fresh_uploads')) {
|
||||
await setFreshUploads(sub, user_uid);
|
||||
checkVideosForFreshUploads(sub, user_uid);
|
||||
}
|
||||
|
||||
resolve(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}, err => {
|
||||
logger.error(err);
|
||||
@@ -380,7 +380,11 @@ async function generateArgsForSubscription(sub, user_uid, redownload = false, de
|
||||
if (useArchive && !redownload) {
|
||||
if (sub.archive) {
|
||||
archive_dir = sub.archive;
|
||||
archive_path = path.join(archive_dir, 'archive.txt')
|
||||
if (sub.type && sub.type === 'audio') {
|
||||
archive_path = path.join(archive_dir, 'merged_audio.txt');
|
||||
} else {
|
||||
archive_path = path.join(archive_dir, 'merged_video.txt');
|
||||
}
|
||||
}
|
||||
downloadConfig.push('--download-archive', archive_path);
|
||||
}
|
||||
@@ -473,22 +477,24 @@ async function updateSubscriptionProperty(sub, assignment_obj) {
|
||||
return true;
|
||||
}
|
||||
|
||||
async function setFreshUploads(sub, user_uid) {
|
||||
async function setFreshUploads(sub) {
|
||||
const sub_files = await db_api.getRecords('files', {sub_id: sub.id});
|
||||
const current_date = new Date().toISOString().split('T')[0].replace(/-/g, '');
|
||||
sub.videos.forEach(async video => {
|
||||
if (current_date === video['upload_date'].replace(/-/g, '')) {
|
||||
sub_files.forEach(async file => {
|
||||
if (current_date === file['upload_date'].replace(/-/g, '')) {
|
||||
// set upload as fresh
|
||||
const video_uid = video['uid'];
|
||||
await db_api.setVideoProperty(video_uid, {'fresh_upload': true}, user_uid, sub['id']);
|
||||
const file_uid = file['uid'];
|
||||
await db_api.setVideoProperty(file_uid, {'fresh_upload': true});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function checkVideosForFreshUploads(sub, user_uid) {
|
||||
const sub_files = await db_api.getRecords('files', {sub_id: sub.id});
|
||||
const current_date = new Date().toISOString().split('T')[0].replace(/-/g, '');
|
||||
sub.videos.forEach(async video => {
|
||||
if (video['fresh_upload'] && current_date > video['upload_date'].replace(/-/g, '')) {
|
||||
await checkVideoIfBetterExists(video, sub, user_uid)
|
||||
sub_files.forEach(async file => {
|
||||
if (file['fresh_upload'] && current_date > file['upload_date'].replace(/-/g, '')) {
|
||||
await checkVideoIfBetterExists(file, sub, user_uid)
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -510,13 +516,13 @@ async function checkVideoIfBetterExists(file_obj, sub, user_uid) {
|
||||
logger.verbose(`Failed to download better version of video ${file_obj['id']}`);
|
||||
} else if (output) {
|
||||
logger.verbose(`Successfully upgraded video ${file_obj['id']}'s ${metric_to_compare} from ${file_obj[metric_to_compare]} to ${output[metric_to_compare]}`);
|
||||
await db_api.setVideoProperty(file_obj['uid'], {[metric_to_compare]: output[metric_to_compare]}, user_uid, sub['id']);
|
||||
await db_api.setVideoProperty(file_obj['uid'], {[metric_to_compare]: output[metric_to_compare]});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
await db_api.setVideoProperty(file_obj['uid'], {'fresh_upload': false}, user_uid, sub['id']);
|
||||
await db_api.setVideoProperty(file_obj['uid'], {'fresh_upload': false});
|
||||
}
|
||||
|
||||
// helper functions
|
||||
|
||||
@@ -42,9 +42,9 @@ function scheduleJob(task_key, schedule) {
|
||||
if (schedule['type'] === 'timestamp') {
|
||||
converted_schedule = new Date(schedule['data']['timestamp']);
|
||||
} else if (schedule['type'] === 'recurring') {
|
||||
const dayOfWeek = schedule['data']['dayOfWeek'] ? schedule['data']['dayOfWeek'] : null;
|
||||
const hour = schedule['data']['hour'] ? schedule['data']['hour'] : null;
|
||||
const minute = schedule['data']['minute'] ? schedule['data']['minute'] : null;
|
||||
const dayOfWeek = schedule['data']['dayOfWeek'] != null ? schedule['data']['dayOfWeek'] : null;
|
||||
const hour = schedule['data']['hour'] != null ? schedule['data']['hour'] : null;
|
||||
const minute = schedule['data']['minute'] != null ? schedule['data']['minute'] : null;
|
||||
converted_schedule = new scheduler.RecurrenceRule(null, null, null, dayOfWeek, hour, minute);
|
||||
} else {
|
||||
logger.error(`Failed to schedule job '${task_key}' as the type '${schedule['type']}' is invalid.`)
|
||||
|
||||
@@ -386,6 +386,21 @@ describe('Downloader', function() {
|
||||
assert(fs.existsSync(nfo_file_path), true);
|
||||
fs.unlinkSync(nfo_file_path);
|
||||
});
|
||||
|
||||
it('Inject args', async function() {
|
||||
const original_args1 = ['--no-resize-buffer', '-o', '%(title)s', '--no-mtime'];
|
||||
const new_args1 = ['--age-limit', '25', '--yes-playlist', '--abort-on-error', '-o', '%(id)s'];
|
||||
const updated_args1 = utils.injectArgs(original_args1, new_args1);
|
||||
const expected_args1 = ['--no-resize-buffer', '--no-mtime', '--age-limit', '25', '--yes-playlist', '--abort-on-error', '-o', '%(id)s'];
|
||||
assert(JSON.stringify(updated_args1), JSON.stringify(expected_args1));
|
||||
|
||||
const original_args2 = ['-o', '%(title)s.%(ext)s', '--write-info-json', '--print-json', '--audio-quality', '0', '-x', '--audio-format', 'mp3'];
|
||||
const new_args2 = ['--add-metadata', '--embed-thumbnail', '--convert-thumbnails', 'jpg'];
|
||||
const updated_args2 = utils.injectArgs(original_args2, new_args2);
|
||||
const expected_args2 = ['-o', '%(title)s.%(ext)s', '--write-info-json', '--print-json', '--audio-quality', '0', '-x', '--audio-format', 'mp3', '--add-metadata', '--embed-thumbnail', '--convert_thumbnails', 'jpg'];
|
||||
console.log(updated_args2);
|
||||
assert(JSON.stringify(updated_args2), JSON.stringify(expected_args2));
|
||||
});
|
||||
});
|
||||
|
||||
describe('Tasks', function() {
|
||||
|
||||
@@ -415,6 +415,47 @@ async function fetchFile(url, path, file_label) {
|
||||
});
|
||||
}
|
||||
|
||||
async function restartServer(is_update = false) {
|
||||
logger.info(`${is_update ? 'Update complete! ' : ''}Restarting server...`);
|
||||
|
||||
// the following line restarts the server through nodemon
|
||||
fs.writeFileSync(`restart${is_update ? '_update' : '_general'}.json`, 'internal use only');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// adds or replaces args according to the following rules:
|
||||
// - if it already exists and has value, then replace both arg and value
|
||||
// - if already exists and doesn't have value, ignore
|
||||
// - if it doesn't exist and has value, add both arg and value
|
||||
// - if it doesn't exist and doesn't have value, add arg
|
||||
function injectArgs(original_args, new_args) {
|
||||
const updated_args = original_args.slice();
|
||||
try {
|
||||
for (let i = 0; i < new_args.length; i++) {
|
||||
const new_arg = new_args[i];
|
||||
if (!new_arg.startsWith('-') && !new_arg.startsWith('--') && i > 0 && original_args.includes(new_args[i - 1])) continue;
|
||||
|
||||
if (CONSTS.YTDL_ARGS_WITH_VALUES.has(new_arg)) {
|
||||
if (original_args.includes(new_arg)) {
|
||||
const original_index = original_args.indexOf(new_arg);
|
||||
original_args.splice(original_index, 2);
|
||||
}
|
||||
|
||||
updated_args.push(new_arg, new_args[i + 1]);
|
||||
} else {
|
||||
if (!original_args.includes(new_arg)) {
|
||||
updated_args.push(new_arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
logger.warn(err);
|
||||
logger.warn(`Failed to inject args (${new_args}) into (${original_args})`);
|
||||
}
|
||||
|
||||
return updated_args;
|
||||
}
|
||||
|
||||
// objects
|
||||
|
||||
function File(id, title, thumbnailURL, isAudio, duration, url, uploader, size, path, upload_date, description, view_count, height, abr) {
|
||||
@@ -458,5 +499,7 @@ module.exports = {
|
||||
wait: wait,
|
||||
checkExistsWithTimeout: checkExistsWithTimeout,
|
||||
fetchFile: fetchFile,
|
||||
restartServer: restartServer,
|
||||
injectArgs: injectArgs,
|
||||
File: File
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ const utils = require('./utils');
|
||||
const CONSTS = require('./consts');
|
||||
const config_api = require('./config.js');
|
||||
|
||||
const OUTDATED_VERSION = "2020.00.00";
|
||||
|
||||
const is_windows = process.platform === 'win32';
|
||||
|
||||
const download_sources = {
|
||||
@@ -31,7 +33,7 @@ exports.checkForYoutubeDLUpdate = async () => {
|
||||
let current_app_details_exists = fs.existsSync(CONSTS.DETAILS_BIN_PATH);
|
||||
if (!current_app_details_exists) {
|
||||
logger.warn(`Failed to get youtube-dl binary details at location '${CONSTS.DETAILS_BIN_PATH}'. Generating file...`);
|
||||
fs.writeJSONSync(CONSTS.DETAILS_BIN_PATH, {"version":"2020.00.00", "downloader": default_downloader});
|
||||
fs.writeJSONSync(CONSTS.DETAILS_BIN_PATH, {"version": OUTDATED_VERSION, "downloader": default_downloader});
|
||||
}
|
||||
let current_app_details = JSON.parse(fs.readFileSync(CONSTS.DETAILS_BIN_PATH));
|
||||
let current_version = current_app_details['version'];
|
||||
@@ -86,6 +88,18 @@ exports.updateYoutubeDL = async (latest_update_version) => {
|
||||
await download_sources[default_downloader]['func'](latest_update_version);
|
||||
}
|
||||
|
||||
exports.verifyBinaryExistsLinux = () => {
|
||||
const details_json = fs.readJSONSync(CONSTS.DETAILS_BIN_PATH);
|
||||
if (!is_windows && details_json && details_json['path'] && details_json['path'].includes('.exe')) {
|
||||
details_json['path'] = 'node_modules/youtube-dl/bin/youtube-dl';
|
||||
details_json['exec'] = 'youtube-dl';
|
||||
details_json['version'] = OUTDATED_VERSION;
|
||||
fs.writeJSONSync(CONSTS.DETAILS_BIN_PATH, details_json);
|
||||
|
||||
utils.restartServer();
|
||||
}
|
||||
}
|
||||
|
||||
async function downloadLatestYoutubeDLBinary(new_version) {
|
||||
const file_ext = is_windows ? '.exe' : '';
|
||||
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMX9Wk5SM5cIfY
|
||||
6ReKX3ybY1rsbNbOzG8ceN7yyeXB0mor8pVsX1MOna2HewOyBuaaYNJRO4tJBxic
|
||||
7a8zQErfgHL/i/QrVvVCpfJ7xKvq6zij5NYoqd/FBUwawqjeH5/voIcAp9z5Vmsr
|
||||
kL0sxJUKy6b4IWNp3noU7Nvq2RwxnXQbKDhz8FrX6oQAnDC6gsG5a2OSPsaE4oqw
|
||||
6nmonORJypmpP5hqyHY8ffXBT2lAxjHT7OnYbaCBe2TQP8+rH6rDBOhjVNtUJ089
|
||||
ocTQL6LtQEPkcF4yKJmtcOwHl8OPGZs5l9i8xb4j9RuSPkm2lbzZX8sOsdGGoqJZ
|
||||
q68nYhsHAgMBAAECggEAXmtKEzfPObq88B/kAcgSk+FngMHZzcmR7bgD3GwdSxnQ
|
||||
dkRI9zvk7eQ35tcUwntAr4Lat6/ILjFqlBmVLxrdXHuF5Xz9jcZLYgKzz61xdYM9
|
||||
dC6FKF0u5eGIIvbauGAo7jaeGFX1F3Zu5b4lP9kEOGwU1B7sxF0FzsQM5+dtCJgv
|
||||
We/hWQeF+9gtoVnkCSS/Mq2p0UomXXHW0Bz4+HuHlTR9aiYbviYnotABiLUhZyzt
|
||||
v5yUaktb9qniBfdLpRlq8cp06xYlTEA9gJpa4Pnok8OWUsbAiW6EiXUSaZ/cchVa
|
||||
AnO8WWYvVOnnt6WHI3+QdFTnqVjE5TBX4N/7bVhHGQKBgQD0dtbFqp7vZK/jVYvE
|
||||
z0WPdySOg2ZDmoSfk5ZlR1+Y9zWToHv0qu8zqoOjL8Ubxrh9fGlOow+cCVdkEuaa
|
||||
jWC2AWetuRvW0Z5A3XMXr0/N/1fgOkTqtp3WNrUPjVJahEg3lN+90opgFoT8swSi
|
||||
s1oxW0oLcVIlrjhGBXAPCfsAuQKBgQDWBLRhHsRAvGcK5wGuVnxVApTIyBOermsW
|
||||
3bJt+7+UI+4sYrBAwkWdQG93IG0cQtn48TEPBgmR2fjRF5IFT9M4/u+QOeeByT7I
|
||||
we7nVtHgSY5ByC9N0mjWbcmSg8fktz/LonjldNC4kWdOFb75fxGf8kOGS5rUaMA4
|
||||
zHucfB6ZvwKBgQCPHJrysMXGY21MaqIeHzEboaX3ABl37hdBzAa5V6UxSVdGCydF
|
||||
vmO2HVZey/JaJmWOoKyNaowSzq0oWqBBTg6VvhDR9JHFmoVId9uOvAS+FYN+Mt5x
|
||||
gWK5KuGoLxVNBC+6yh6JY526TrSfsrU+Aj0Es+qO9FIg2PL8muZVB4S3kQKBgH/5
|
||||
CDMaxpc/EQ5/2413wZjDllwI51J3USm3Hz6Mzp2ybnSz/lh60k2Zfg1polTH1Lb6
|
||||
4i7tmUNRZ2sAARyUAuWN64n+VeRRhe1dqZFDZPQMh7fmEAMk0fOGaoXlrt2ghdEq
|
||||
Mchi9Xun1nHmpu9hgBR4NNBU3RwuFuLfwvprbZDZAoGAWa62QJChE86xQGP1MrL2
|
||||
SbIzw3cfeP5xdQ3MKldJiy5IkbMR7Z13WZ7FwvPTy0g/onLHD1rqlm1kUMsGRHpD
|
||||
5vH06PNpKXQ6x8BYaRGtE6P39jLycO/X+WK/lYTrWo1bR+mGCebDh4B5XrwT3gI6
|
||||
x4Gvz134pZCTyQCf5JCwbQs=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# THANK YOU TALULAH (https://github.com/nottalulah) for your help in figuring this out
|
||||
# and also optimizing some code with this commit.
|
||||
# xoxo :D
|
||||
|
||||
set -xeuo pipefail
|
||||
|
||||
case $(uname -m) in
|
||||
x86_64)
|
||||
ARCH=amd64;;
|
||||
aarch64)
|
||||
ARCH=arm64;;
|
||||
armhf)
|
||||
ARCH=armhf;;
|
||||
armv7)
|
||||
ARCH=armel;;
|
||||
armv7l)
|
||||
ARCH=armel;;
|
||||
*)
|
||||
echo "Unsupported architecture: $(uname -m)"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
echo "Architecture: $ARCH"
|
||||
wget "https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-${ARCH}-static.tar.xz" -O ffmpeg.txz
|
||||
mkdir /tmp/ffmpeg
|
||||
tar xf ffmpeg.txz -C /tmp/ffmpeg
|
||||
cp /tmp/ffmpeg/*/ffmpeg /usr/local/bin/ffmpeg
|
||||
cp /tmp/ffmpeg/*/ffprobe /usr/local/bin/ffprobe
|
||||
rm -rf /tmp/ffmpeg ffmpeg.txz
|
||||
43
ffmpeg-fetch.sh
Normal file
43
ffmpeg-fetch.sh
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
|
||||
# THANK YOU TALULAH (https://github.com/nottalulah) for your help in figuring this out
|
||||
# and also optimizing some code with this commit.
|
||||
# xoxo :D
|
||||
|
||||
case $(uname -m) in
|
||||
x86_64)
|
||||
ARCH=amd64;;
|
||||
aarch64)
|
||||
ARCH=arm64;;
|
||||
armhf)
|
||||
ARCH=armhf;;
|
||||
armv7)
|
||||
ARCH=armel;;
|
||||
armv7l)
|
||||
ARCH=armel;;
|
||||
*)
|
||||
echo "Unsupported architecture: $(uname -m)"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
echo "(INFO) Architecture detected: $ARCH"
|
||||
echo "(1/5) READY - Acquire temp dependencies in ffmpeg obtain layer"
|
||||
apt-get update && apt-get -y install curl xz-utils
|
||||
echo "(2/5) DOWNLOAD - Acquire latest ffmpeg and ffprobe from John van Sickle's master-sourced builds in ffmpeg obtain layer"
|
||||
curl -o ffmpeg.txz \
|
||||
--connect-timeout 5 \
|
||||
--max-time 10 \
|
||||
--retry 5 \
|
||||
--retry-delay 0 \
|
||||
--retry-max-time 40 \
|
||||
"https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-${ARCH}-static.tar.xz"
|
||||
mkdir /tmp/ffmpeg
|
||||
tar xf ffmpeg.txz -C /tmp/ffmpeg
|
||||
echo "(3/5) CLEANUP - Remove temp dependencies from ffmpeg obtain layer"
|
||||
apt-get -y remove curl xz-utils
|
||||
apt-get -y autoremove
|
||||
echo "(4/5) PROVISION - Provide ffmpeg and ffprobe from ffmpeg obtain layer"
|
||||
cp /tmp/ffmpeg/*/ffmpeg /usr/local/bin/ffmpeg
|
||||
cp /tmp/ffmpeg/*/ffprobe /usr/local/bin/ffprobe
|
||||
echo "(5/5) CLEANUP - Remove temporary downloads from ffmpeg obtain layer"
|
||||
rm -rf /tmp/ffmpeg ffmpeg.txz
|
||||
3
heroku.yml
Normal file
3
heroku.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
build:
|
||||
docker:
|
||||
web: Dockerfile.heroku
|
||||
73
package-lock.json
generated
73
package-lock.json
generated
@@ -3295,65 +3295,12 @@
|
||||
"safer-buffer": "~2.1.0"
|
||||
}
|
||||
},
|
||||
"asn1.js": {
|
||||
"version": "5.4.1",
|
||||
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
|
||||
"integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bn.js": "^4.0.0",
|
||||
"inherits": "^2.0.1",
|
||||
"minimalistic-assert": "^1.0.0",
|
||||
"safer-buffer": "^2.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"bn.js": {
|
||||
"version": "4.11.9",
|
||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
|
||||
"integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"assert": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
|
||||
"integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"object-assign": "^4.1.1",
|
||||
"util": "0.10.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"inherits": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
|
||||
"integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
|
||||
"dev": true
|
||||
},
|
||||
"util": {
|
||||
"version": "0.10.3",
|
||||
"resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
|
||||
"integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"inherits": "2.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"assert-plus": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
|
||||
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
|
||||
"dev": true
|
||||
},
|
||||
"assign-symbols": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
|
||||
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
|
||||
"dev": true
|
||||
},
|
||||
"ast-types-flow": {
|
||||
"version": "0.0.7",
|
||||
"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
|
||||
@@ -3367,9 +3314,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"async": {
|
||||
"version": "2.6.4",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
|
||||
"integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
|
||||
"version": "2.6.3",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
|
||||
"integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lodash": "^4.17.14"
|
||||
@@ -7775,18 +7722,18 @@
|
||||
}
|
||||
},
|
||||
"karma-jasmine": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz",
|
||||
"integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==",
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz",
|
||||
"integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"jasmine-core": "^3.6.0"
|
||||
"jasmine-core": "^4.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"jasmine-core": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.6.0.tgz",
|
||||
"integrity": "sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw==",
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.2.0.tgz",
|
||||
"integrity": "sha512-OcFpBrIhnbmb9wfI8cqPSJ50pv3Wg4/NSgoZIqHzIwO/2a9qivJWzv8hUvaREIMYYJBas6AvfXATFdVuzzCqVw==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
"lint": "ng lint",
|
||||
"e2e": "ng e2e",
|
||||
"electron": "ng build --base-href ./ && electron .",
|
||||
"generate": "openapi --input ./\"Public API v1.yaml\" --output ./src/api-types --exportCore false --exportServices false --exportModels true"
|
||||
"generate": "openapi --input ./\"Public API v1.yaml\" --output ./src/api-types --exportCore false --exportServices false --exportModels true",
|
||||
"i18n-source": "ng extract-i18n --output-path=src/assets/i18n"
|
||||
},
|
||||
"engines": {
|
||||
"node": "12.3.1",
|
||||
@@ -73,7 +74,7 @@
|
||||
"karma-chrome-launcher": "~3.1.0",
|
||||
"karma-cli": "~1.0.1",
|
||||
"karma-coverage-istanbul-reporter": "~3.0.2",
|
||||
"karma-jasmine": "~4.0.0",
|
||||
"karma-jasmine": "~5.1.0",
|
||||
"karma-jasmine-html-reporter": "^1.5.0",
|
||||
"openapi-typescript-codegen": "^0.21.0",
|
||||
"protractor": "~7.0.0",
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
</ng-container>
|
||||
<ng-container *ngIf="postsService.config && allowSubscriptions && postsService.subscriptions && postsService.hasPermission('subscriptions')">
|
||||
<mat-divider *ngIf="postsService.subscriptions.length > 0"></mat-divider>
|
||||
<a *ngFor="let subscription of postsService.subscriptions" mat-list-item (click)="postsService.sidepanel_mode === 'over' ? sidenav.close() : null" [routerLink]="['/subscription', { id: subscription.id }]"><ngx-avatar [style.margin-right]="'10px'" size="32" [name]="subscription.name"></ngx-avatar>{{subscription.name}}</a>
|
||||
<a *ngFor="let subscription of postsService.subscriptions" mat-list-item (click)="postsService.sidepanel_mode === 'over' ? sidenav.close() : null" [routerLink]="['/subscription', { id: subscription.id }]"><ngx-avatars [style.margin-right]="'10px'" size="32" [name]="subscription.name"></ngx-avatars>{{subscription.name}}</a>
|
||||
</ng-container>
|
||||
</mat-nav-list>
|
||||
</mat-sidenav>
|
||||
|
||||
@@ -42,6 +42,11 @@ export class ConcurrentStreamComponent implements OnInit {
|
||||
|
||||
}
|
||||
|
||||
ngOnDestroy(): void {
|
||||
if (this.check_timeout) { clearInterval(this.check_timeout); }
|
||||
if (this.update_timeout) { clearInterval(this.update_timeout); }
|
||||
}
|
||||
|
||||
startServer() {
|
||||
this.started = true;
|
||||
this.server_started = true;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { AfterViewInit, Component, ElementRef, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';
|
||||
import { Component, ElementRef, Input, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';
|
||||
import { PostsService } from 'app/posts.services';
|
||||
|
||||
@Component({
|
||||
@@ -6,7 +6,7 @@ import { PostsService } from 'app/posts.services';
|
||||
templateUrl: './twitch-chat.component.html',
|
||||
styleUrls: ['./twitch-chat.component.scss']
|
||||
})
|
||||
export class TwitchChatComponent implements OnInit, AfterViewInit {
|
||||
export class TwitchChatComponent implements OnInit, OnDestroy {
|
||||
|
||||
full_chat = null;
|
||||
visible_chat = null;
|
||||
@@ -33,7 +33,8 @@ export class TwitchChatComponent implements OnInit, AfterViewInit {
|
||||
this.getFullChat();
|
||||
}
|
||||
|
||||
ngAfterViewInit() {
|
||||
ngOnDestroy(): void {
|
||||
if (this.chat_check_interval_obj) { clearInterval(this.chat_check_interval_obj); }
|
||||
}
|
||||
|
||||
private isUserNearBottom(): boolean {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Component, Inject, OnInit } from '@angular/core';
|
||||
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { Schedule } from 'api-types';
|
||||
import { Schedule, Task } from 'api-types';
|
||||
import { PostsService } from 'app/posts.services';
|
||||
|
||||
@Component({
|
||||
@@ -18,7 +18,7 @@ export class UpdateTaskScheduleDialogComponent implements OnInit {
|
||||
date = null;
|
||||
today = new Date();
|
||||
|
||||
constructor(@Inject(MAT_DIALOG_DATA) public data: any, private dialogRef: MatDialogRef<UpdateTaskScheduleDialogComponent>, private postsService: PostsService) {
|
||||
constructor(@Inject(MAT_DIALOG_DATA) public data: {task: Task}, private dialogRef: MatDialogRef<UpdateTaskScheduleDialogComponent>, private postsService: PostsService) {
|
||||
this.processTask(this.data.task);
|
||||
this.postsService.getTask(this.data.task.key).subscribe(res => {
|
||||
this.processTask(res['task']);
|
||||
@@ -28,7 +28,7 @@ export class UpdateTaskScheduleDialogComponent implements OnInit {
|
||||
ngOnInit(): void {
|
||||
}
|
||||
|
||||
processTask(task) {
|
||||
processTask(task: Task): void {
|
||||
if (!task['schedule']) {
|
||||
this.enabled = false;
|
||||
return;
|
||||
@@ -39,7 +39,11 @@ export class UpdateTaskScheduleDialogComponent implements OnInit {
|
||||
this.recurring = schedule['type'] === Schedule.type.RECURRING;
|
||||
|
||||
if (this.recurring) {
|
||||
this.time = `${schedule['data']['hour']}:${schedule['data']['minute']}`;
|
||||
const hour = schedule['data']['hour'];
|
||||
const minute = schedule['data']['minute'];
|
||||
|
||||
// add padding 0s if necessary to hours and minutes
|
||||
this.time = (hour < 10 ? '0' : '') + hour + ':' + (minute < 10 ? '0' : '') + minute;
|
||||
|
||||
if (schedule['data']['dayOfWeek']) {
|
||||
this.days_of_week = schedule['data']['dayOfWeek'];
|
||||
@@ -75,7 +79,6 @@ export class UpdateTaskScheduleDialogComponent implements OnInit {
|
||||
}
|
||||
} else {
|
||||
this.date.setHours(hours, minutes);
|
||||
console.log(this.date);
|
||||
schedule['data'] = {timestamp: this.date.getTime()};
|
||||
}
|
||||
this.dialogRef.close(schedule);
|
||||
|
||||
@@ -445,7 +445,7 @@ export const isoLangs = {
|
||||
'name': 'Navajo, Navaho',
|
||||
'nativeName': 'Diné bizaad, Dinékʼehǰí'
|
||||
},
|
||||
'nb': {
|
||||
'nb-NO': {
|
||||
'name': 'Norwegian Bokmål',
|
||||
'nativeName': 'Norsk bokmål',
|
||||
'ngID': 'nb'
|
||||
|
||||
@@ -52,6 +52,8 @@ export class SubscriptionComponent implements OnInit, OnDestroy {
|
||||
this.route.params.subscribe(params => {
|
||||
this.id = params['id'];
|
||||
|
||||
if (this.sub_interval) { clearInterval(this.sub_interval); }
|
||||
|
||||
this.postsService.service_initialized.subscribe(init => {
|
||||
if (init) {
|
||||
this.getConfig();
|
||||
|
||||
@@ -36,6 +36,9 @@
|
||||
<ng-container i18n="Subscription playlist not available text">Name not available. Playlist retrieval in progress.</ng-container>
|
||||
</div>
|
||||
</a>
|
||||
<button mat-icon-button (click)="editSubscription(sub)">
|
||||
<mat-icon>edit</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button (click)="showSubInfo(sub)">
|
||||
<mat-icon>info</mat-icon>
|
||||
</button>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1392,7 +1392,7 @@
|
||||
<note priority="1" from="description">Allow subscriptions setting</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4bee2a4bef2d26d37c9b353c278e24e5cd309ce3" datatype="html">
|
||||
<source>Base bath for subscriptions</source>
|
||||
<source>Subscriptions base path</source>
|
||||
<target>Camí base de subscripcions</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
@@ -3009,8 +3009,8 @@
|
||||
<note priority="1" from="description">Skip ad button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7220285196408439810" datatype="html">
|
||||
<source>Download for <x id="url" equiv-text="d, cropF"/> has been queued!</source>
|
||||
<target>La descàrrega de <x id="url" equiv-text="d, cropF"/> s'ha posat a la cua!</target>
|
||||
<source>Download for <x id="url" equiv-text="url"/> has been queued!</source>
|
||||
<target>La descàrrega de <x id="url" equiv-text="url"/> s'ha posat a la cua!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.ts</context>
|
||||
<context context-type="linenumber">469</context>
|
||||
@@ -3071,8 +3071,8 @@
|
||||
<note priority="1" from="description">Installation type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="2560364143605631750" datatype="html">
|
||||
<source>Error for <x id="url" equiv-text="}); retu"/></source>
|
||||
<target>Error a <x id="url" equiv-text="}); retu"/></target>
|
||||
<source>Error for <x id="url" equiv-text="download['url']"/></source>
|
||||
<target>Error a <x id="url" equiv-text="download['url']"/></target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
@@ -3104,6 +3104,296 @@
|
||||
<context context-type="linenumber">130</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
|
||||
<source>Tasks</source>
|
||||
<target>Tasques</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/app.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Navigation menu Tasks Page title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e4c3cd97461b220b9cea67cfe08c5399799cfeed" datatype="html">
|
||||
<source>Last ran</source>
|
||||
<target>Última vegada que es va executar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last ran</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">
|
||||
<source>N/A</source>
|
||||
<target>N/A</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">N/A</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="698f716f927f633b16cbe2308d90b2dba51f7556" datatype="html">
|
||||
<source>Last confirmed</source>
|
||||
<target>Últim confirmat</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last confirmed</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4391397241847e675f6c38bbdec6b2883157fb1a" datatype="html">
|
||||
<source>Clear duplicate files from DB:</source>
|
||||
<target>Esborrar els fitxers duplicats a la BD:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear duplicate files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ff9ae1f4c26bf2ddf6e9d5e4136916c5ce6a941" datatype="html">
|
||||
<source>Clear missing files from DB:</source>
|
||||
<target>Esborrar els fitxers que falten a la BD:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear missing files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9562dd1e902acc4cc6a6e09cba66a2775daf7794" datatype="html">
|
||||
<source>Update binary to:</source>
|
||||
<target>Actualitzar el binari a:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update binary to</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9b3d305551358858e1892169a94527e0cc4dbf5b" datatype="html">
|
||||
<source>Run</source>
|
||||
<target>Executar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">69</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Run</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a4f46a2dcec36bd5c8c371ceee55c2226dec27f" datatype="html">
|
||||
<source>Schedule</source>
|
||||
<target>Planificació</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="40bd7093f5fbd3fbeff9a50baaf5d4c8416add1e" datatype="html">
|
||||
<source>Restore DB from backup</source>
|
||||
<target>Restaurar la BD des de la còpia de seguretat</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore DB from backup button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f8a2361f3bd8fb05bf92080e2755bddd56ab64d7" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target>Restablir tasques</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Reset tasks button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5615896113581458384" datatype="html">
|
||||
<source>Successfully ran task!</source>
|
||||
<target>S'ha realitzat correctament la tasca!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2106110452479146311" datatype="html">
|
||||
<source>Failed to run task!</source>
|
||||
<target>No s'ha pogut executar la tasca!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9121124215111024650" datatype="html">
|
||||
<source>Failed to confirm task!</source>
|
||||
<target>No s'ha pogut confirmar la tasca!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">92</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5588424857086384816" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target>Restablir tasques</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">132</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4334913030311371594" datatype="html">
|
||||
<source>Would you like to reset your tasks? All your schedules will be removed as well.</source>
|
||||
<target>Vols restablir les teves tasques? També s'eliminaran totes els teves planificacions.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">133</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7808756054397155068" datatype="html">
|
||||
<source>Reset</source>
|
||||
<target>Restablir</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">134</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7e121a443a8e9d92218f987001b650c59504d815" datatype="html">
|
||||
<source>Scheduled for</source>
|
||||
<target>Planificat per a</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3b7d6ff5d14ab177ce3e2d217b1927fb2e4aefd1" datatype="html">
|
||||
<source>Not scheduled</source>
|
||||
<target>No planificat</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Not scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">
|
||||
<source>Restore</source>
|
||||
<target>Restaurar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">
|
||||
<source>Enabled</source>
|
||||
<target>Habilitat</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Enabled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="67aed6c588eb854f2f30ef642e85147da0027a61" datatype="html">
|
||||
<source>Recurring</source>
|
||||
<target>Recurrent</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Recurring</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">
|
||||
<source>Update</source>
|
||||
<target>Actualitzar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="fd374bee82dab66055b933496860f82b7b780159" datatype="html">
|
||||
<source>Global custom args for downloads on the home page. (Set args for subscriptions for each subscriptions separately!) Args are delimited using two commas like so: ,,</source>
|
||||
<target>Arguments personalitzats globals per a les baixades a la pàgina d'inici. (Definiu els arguments per a les subscripcions per a cadascuna de les subscripcions per separat!) Els arguments es delimiten mitjançant dues comes, així: ,,</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Custom args setting input hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d97425ce76bf3df50bcb643b5f409844770458f6" datatype="html">
|
||||
<source>Busy</source>
|
||||
<target>Ocupat</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Busy</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">
|
||||
<source>Status</source>
|
||||
<target>Estat</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1709994363138824316" datatype="html">
|
||||
<source>Failed to reset tasks!</source>
|
||||
<target>No s'han pogut restablir les tasques!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e96c9d4528bf259da3944daac3171d7462b065a" datatype="html">
|
||||
<source>No tasks available!</source>
|
||||
<target>No hi ha tasques disponibles!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">No tasks label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="8612475568724527886" datatype="html">
|
||||
<source>Tasks successfully reset!</source>
|
||||
<target>Les tasques s'han restablert correctament!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">142</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4707127982271899773" datatype="html">
|
||||
<source>Successfully confirmed task!</source>
|
||||
<target>S'ha confirmat correctament la tasca!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="998793c78895d53576f462054f13d6e515e923d9" datatype="html">
|
||||
<source>Update task schedule</source>
|
||||
<target>Actualitzar la planificació de tasques</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update task schedule</note>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en-US" datatype="plaintext" original="ng2.template" target-language="es">
|
||||
<body>
|
||||
@@ -1630,6 +1630,198 @@
|
||||
<context context-type="linenumber">469</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2f933b826a570836cab04f683970a2d22068458c" datatype="html">
|
||||
<source>Date</source>
|
||||
<target>Fecha</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Date</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html">
|
||||
<source>Title</source>
|
||||
<target>Título</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="47bbc861efa59ba4135e6aa8f63213420e3f3b91" datatype="html">
|
||||
<source>Subscription</source>
|
||||
<target>Suscripción</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Subscription</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">
|
||||
<source>Progress</source>
|
||||
<target>Progreso</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Progress</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
|
||||
<source>Tasks</source>
|
||||
<target>Tareas</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/app.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Navigation menu Tasks Page title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="73a7ade062c611e4bc92f3a4c672bee29b8aae9d" datatype="html">
|
||||
<source>Watch content</source>
|
||||
<target>Ver archivo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">64</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Watch content</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="2827589726081052618" datatype="html">
|
||||
<source>Creating download</source>
|
||||
<target>Creando descarga</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9b2084f9aea764292cf0978cb083907d8be51bf7" datatype="html">
|
||||
<source>Resume all downloads</source>
|
||||
<target>Reanudar todas las descargas</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Resume all downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="72c341bca7ebacc66e8a13f1a527d500619e89ff" datatype="html">
|
||||
<source>Stage</source>
|
||||
<target>Etapa</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Stage</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html">
|
||||
<source>Actions</source>
|
||||
<target>Acciones</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Actions</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">
|
||||
<source>Pause</source>
|
||||
<target>Pausa</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Pause</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">
|
||||
<source>Clear</source>
|
||||
<target>Quitar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4cd979821c89535df23df1c8ac8f260673610d90" datatype="html">
|
||||
<source>Resume</source>
|
||||
<target>Resumir</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Resume</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="b6d79c6ff771d7b86ce572306867a1705200f957" datatype="html">
|
||||
<source>Restart</source>
|
||||
<target>Reanudar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">66</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restart</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="b36b7458192b833592e13029fa8a0b3555e0d9bd" datatype="html">
|
||||
<source>Pause all downloads</source>
|
||||
<target>Pausar todas las descargas</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Pause all downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7724483709075923163" datatype="html">
|
||||
<source>Downloading file</source>
|
||||
<target>Descargando archivo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="54cb4c7c3a0da911ebda5a07666b448868020308" datatype="html">
|
||||
<source>Show error</source>
|
||||
<target>Mostrar error</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Show error</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="601a28988581b5398ca6471027487e098d236e0e" datatype="html">
|
||||
<source>Clear finished downloads</source>
|
||||
<target>Quitar descargas finalizadas</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear finished downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4027175717527633324" datatype="html">
|
||||
<source>Getting info</source>
|
||||
<target>Cogiendo info</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8384225360105280028" datatype="html">
|
||||
<source>Complete</source>
|
||||
<target>Completo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7180002287537831534" datatype="html">
|
||||
<source>Clear finished downloads</source>
|
||||
<target>Borrar descargas terminadas</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">129</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -732,8 +732,8 @@
|
||||
<note priority="1" from="description">Allow subscriptions setting</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4bee2a4bef2d26d37c9b353c278e24e5cd309ce3" datatype="html">
|
||||
<source>Base bath for subscriptions</source>
|
||||
<target state="needs-translation">Chemin de base pour les abonnements</target>
|
||||
<source>Subscriptions base path</source>
|
||||
<target state="translated">Le chemin de base pour les abonnements</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
@@ -2834,8 +2834,8 @@
|
||||
<note priority="1" from="description">Autoplay checkbox</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7220285196408439810" datatype="html">
|
||||
<source>Download for <x id="url" equiv-text="d, cropF"/> has been queued!</source>
|
||||
<target>Le téléchargement <x id="url" equiv-text="d, cropF"/> à était ajouté à la queue !</target>
|
||||
<source>Download for <x id="url" equiv-text="url"/> has been queued!</source>
|
||||
<target state="translated">Le téléchargement <x id="url" equiv-text="url"/> à était ajouté à la queue !</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.ts</context>
|
||||
<context context-type="linenumber">469</context>
|
||||
@@ -2961,8 +2961,8 @@
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2560364143605631750" datatype="html">
|
||||
<source>Error for <x id="url" equiv-text="}); retu"/></source>
|
||||
<target>Erreur pour <x id="url" equiv-text="}); retu"/></target>
|
||||
<source>Error for <x id="url" equiv-text="download['url']"/></source>
|
||||
<target state="translated">Erreur pour <x id="url" equiv-text="download['url']"/></target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
@@ -3165,6 +3165,278 @@
|
||||
</context-group>
|
||||
<note priority="1" from="description">Skip ad button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
|
||||
<source>Tasks</source>
|
||||
<target state="translated">Tâches</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/app.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Navigation menu Tasks Page title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">
|
||||
<source>N/A</source>
|
||||
<target state="translated">N/D</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">N/A</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="698f716f927f633b16cbe2308d90b2dba51f7556" datatype="html">
|
||||
<source>Last confirmed</source>
|
||||
<target state="translated">Dernière confirmation</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last confirmed</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f8a2361f3bd8fb05bf92080e2755bddd56ab64d7" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target state="translated">Rétablir les tâches</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Reset tasks button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5588424857086384816" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target state="translated">Rétablir les tâches</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">132</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e96c9d4528bf259da3944daac3171d7462b065a" datatype="html">
|
||||
<source>No tasks available!</source>
|
||||
<target state="translated">Aucun tâche disponible !</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">No tasks label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5615896113581458384" datatype="html">
|
||||
<source>Successfully ran task!</source>
|
||||
<target state="translated">Tâche lancée avec succès !</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4707127982271899773" datatype="html">
|
||||
<source>Successfully confirmed task!</source>
|
||||
<target state="translated">Tâche confirmée avec succès !</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8612475568724527886" datatype="html">
|
||||
<source>Tasks successfully reset!</source>
|
||||
<target state="translated">Tâche rétablie avec succès !</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">142</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="40bd7093f5fbd3fbeff9a50baaf5d4c8416add1e" datatype="html">
|
||||
<source>Restore DB from backup</source>
|
||||
<target state="translated">Restaurer la base depuis une sauvegarde</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore DB from backup button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ff9ae1f4c26bf2ddf6e9d5e4136916c5ce6a941" datatype="html">
|
||||
<source>Clear missing files from DB:</source>
|
||||
<target state="translated">Effacer les fichiers manquants de la base :</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear missing files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4391397241847e675f6c38bbdec6b2883157fb1a" datatype="html">
|
||||
<source>Clear duplicate files from DB:</source>
|
||||
<target state="translated">Effacer les fichiers doublons de la base :</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear duplicate files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="2106110452479146311" datatype="html">
|
||||
<source>Failed to run task!</source>
|
||||
<target state="translated">Échec de lancement de la tâche !</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9121124215111024650" datatype="html">
|
||||
<source>Failed to confirm task!</source>
|
||||
<target state="translated">Échec de confirmation de la tâche !</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">92</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1709994363138824316" datatype="html">
|
||||
<source>Failed to reset tasks!</source>
|
||||
<target state="translated">Échec de rétablissement de la tâche !</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9562dd1e902acc4cc6a6e09cba66a2775daf7794" datatype="html">
|
||||
<source>Update binary to:</source>
|
||||
<target state="translated">Envoyer les binaires à :</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update binary to</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4334913030311371594" datatype="html">
|
||||
<source>Would you like to reset your tasks? All your schedules will be removed as well.</source>
|
||||
<target state="translated">Voulez-vous rétablir vos tâches ? Tous les programmations seront supprimées aussi.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">133</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">
|
||||
<source>Update</source>
|
||||
<target state="translated">Mettre à jour</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="67aed6c588eb854f2f30ef642e85147da0027a61" datatype="html">
|
||||
<source>Recurring</source>
|
||||
<target state="translated">Récurrent</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Recurring</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9b3d305551358858e1892169a94527e0cc4dbf5b" datatype="html">
|
||||
<source>Run</source>
|
||||
<target state="translated">Lancer</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">69</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Run</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e4c3cd97461b220b9cea67cfe08c5399799cfeed" datatype="html">
|
||||
<source>Last ran</source>
|
||||
<target state="translated">Dernier lancement</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last ran</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3b7d6ff5d14ab177ce3e2d217b1927fb2e4aefd1" datatype="html">
|
||||
<source>Not scheduled</source>
|
||||
<target state="translated">Non programmé</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Not scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">
|
||||
<source>Status</source>
|
||||
<target state="translated">Status</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d97425ce76bf3df50bcb643b5f409844770458f6" datatype="html">
|
||||
<source>Busy</source>
|
||||
<target state="translated">Occupé</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Busy</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">
|
||||
<source>Enabled</source>
|
||||
<target state="translated">Actif</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Enabled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">
|
||||
<source>Restore</source>
|
||||
<target state="translated">Restorer</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7808756054397155068" datatype="html">
|
||||
<source>Reset</source>
|
||||
<target state="translated">Rétablir</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">134</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a4f46a2dcec36bd5c8c371ceee55c2226dec27f" datatype="html">
|
||||
<source>Schedule</source>
|
||||
<target state="translated">Programmé</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7e121a443a8e9d92218f987001b650c59504d815" datatype="html">
|
||||
<source>Scheduled for</source>
|
||||
<target state="translated">Programmé pour</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Scheduled</note>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en-US" datatype="plaintext" original="ng2.template" target-language="it">
|
||||
<body>
|
||||
@@ -727,7 +727,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="4bee2a4bef2d26d37c9b353c278e24e5cd309ce3" datatype="html">
|
||||
<source>Subscriptions base path</source>
|
||||
<target>Percorso salvataggio playlist sottoscritte</target>
|
||||
<target state="translated">Percorso predefinito iscrizioni</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
@@ -2477,6 +2477,876 @@
|
||||
</context-group>
|
||||
<note priority="1" from="description">Max quality placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="47955e2cc6986625528b4352034858180d675281" datatype="html">
|
||||
<source>Database location:</source>
|
||||
<target state="translated">Posizione database:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">311</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Database location label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="635285fa5624d50a408feb7eb564c0db0d3f1ce1" datatype="html">
|
||||
<source>Restart server</source>
|
||||
<target state="translated">Riavvia server</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">418</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restart server button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="72c341bca7ebacc66e8a13f1a527d500619e89ff" datatype="html">
|
||||
<source>Stage</source>
|
||||
<target state="translated">Fase</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Stage</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">
|
||||
<source>Progress</source>
|
||||
<target state="translated">Avanzamento</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Progress</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="73a7ade062c611e4bc92f3a4c672bee29b8aae9d" datatype="html">
|
||||
<source>Watch content</source>
|
||||
<target state="translated">Guarda il contenuto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">64</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Watch content</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="54cb4c7c3a0da911ebda5a07666b448868020308" datatype="html">
|
||||
<source>Show error</source>
|
||||
<target state="translated">Mostra errore</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Show error</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">
|
||||
<source>Clear</source>
|
||||
<target state="translated">Pulisci</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="b6d79c6ff771d7b86ce572306867a1705200f957" datatype="html">
|
||||
<source>Restart</source>
|
||||
<target state="translated">Riavvia</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">66</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restart</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="b36b7458192b833592e13029fa8a0b3555e0d9bd" datatype="html">
|
||||
<source>Pause all downloads</source>
|
||||
<target state="translated">Metti in pausa tutti i downloads</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Pause all downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9b2084f9aea764292cf0978cb083907d8be51bf7" datatype="html">
|
||||
<source>Resume all downloads</source>
|
||||
<target state="translated">Riprendi tutti i downloads</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Resume all downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="50e85c3b33fb74c0d3c0f97182611f6c1d9cf10e" datatype="html">
|
||||
<source>Add to playlist</source>
|
||||
<target state="translated">Aggiungi a playlist</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/unified-file-card/unified-file-card.component.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Add to playlist menu item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4cd979821c89535df23df1c8ac8f260673610d90" datatype="html">
|
||||
<source>Resume</source>
|
||||
<target state="translated">Riprendi</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Resume</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html">
|
||||
<source>Title</source>
|
||||
<target state="translated">Titolo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html">
|
||||
<source>Actions</source>
|
||||
<target state="translated">Azioni</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Actions</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d97425ce76bf3df50bcb643b5f409844770458f6" datatype="html">
|
||||
<source>Busy</source>
|
||||
<target state="translated">Occupato</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Busy</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7e121a443a8e9d92218f987001b650c59504d815" datatype="html">
|
||||
<source>Scheduled for</source>
|
||||
<target state="translated">Programmato per</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="2f933b826a570836cab04f683970a2d22068458c" datatype="html">
|
||||
<source>Date</source>
|
||||
<target state="translated">Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Date</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">
|
||||
<source>Pause</source>
|
||||
<target state="translated">Pausa</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Pause</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="8384225360105280028" datatype="html">
|
||||
<source>Complete</source>
|
||||
<target state="translated">Completato</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2560364143605631750" datatype="html">
|
||||
<source>Error for <x id="url" equiv-text="download['url']"/></source>
|
||||
<target state="translated">Errore per <x id="url" equiv-text="download['url']"/></target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3795459839164395144" datatype="html">
|
||||
<source>Copied to clipboard!</source>
|
||||
<target state="translated">Copiato negli appunti!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4e1fdb6039c7c6b7630ed70d6d20eb0c9db7d342" datatype="html">
|
||||
<source>Video only</source>
|
||||
<target state="translated">Solo video</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Video only</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e96c9d4528bf259da3944daac3171d7462b065a" datatype="html">
|
||||
<source>No tasks available!</source>
|
||||
<target state="translated">Nessuna attività disponibile!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">No tasks label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3b7d6ff5d14ab177ce3e2d217b1927fb2e4aefd1" datatype="html">
|
||||
<source>Not scheduled</source>
|
||||
<target state="translated">Non programmato</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Not scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="67aed6c588eb854f2f30ef642e85147da0027a61" datatype="html">
|
||||
<source>Recurring</source>
|
||||
<target state="translated">Ricorrente</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Recurring</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1f6d3986a970af27f16f8a95ce0dc3033cc90a83" datatype="html">
|
||||
<source>With this setting enabled, if a single video matches a category, the entire playlist will receive that category.</source>
|
||||
<target state="translated">Con questa impostazione abilitata, se un singolo video corrisponde a una categoria, l'intera playlist riceverà quella categoria.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Allow playlist categorization setting tooltip</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4920978fc336333b5cda11b1dedf172c3183d2da" datatype="html">
|
||||
<source>Allow autoplay</source>
|
||||
<target state="translated">Concedi riproduzione automatica</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Allow autoplay setting</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="742202f9ba533bc9a92a1aec2862b0485c5f601b" datatype="html">
|
||||
<source>Audio only</source>
|
||||
<target state="translated">Solo audio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Audio only</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="71e477b9cfa411def3404c5fe57d3986772c54e8" datatype="html">
|
||||
<source>Installation type:</source>
|
||||
<target state="translated">Tipo installazione:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Installation type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="682ca154aba791fe87aa293b29c921247e12da9c" datatype="html">
|
||||
<source>Commit hash:</source>
|
||||
<target state="translated">Hash commit:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Commit hash</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
|
||||
<source>Tasks</source>
|
||||
<target state="translated">Attività</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/app.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Navigation menu Tasks Page title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="47bbc861efa59ba4135e6aa8f63213420e3f3b91" datatype="html">
|
||||
<source>Subscription</source>
|
||||
<target state="translated">Iscrizione</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Subscription</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="601a28988581b5398ca6471027487e098d236e0e" datatype="html">
|
||||
<source>Clear finished downloads</source>
|
||||
<target state="translated">Pulisci i downloads terminati</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear finished downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="2827589726081052618" datatype="html">
|
||||
<source>Creating download</source>
|
||||
<target state="translated">Creando download</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4027175717527633324" datatype="html">
|
||||
<source>Getting info</source>
|
||||
<target state="translated">Ottenendo informazioni</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7724483709075923163" datatype="html">
|
||||
<source>Downloading file</source>
|
||||
<target state="translated">Scaricando il file</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7180002287537831534" datatype="html">
|
||||
<source>Clear finished downloads</source>
|
||||
<target state="translated">Pulisci i downloads terminati</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">129</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8007838850199625121" datatype="html">
|
||||
<source>Would you like to clear your finished downloads?</source>
|
||||
<target state="translated">Vuoi pulire i tuoi downloads terminati?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">130</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8700121026680200191" datatype="html">
|
||||
<source>Clear</source>
|
||||
<target state="translated">Pulisci</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">131</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8738732372986673558" datatype="html">
|
||||
<source>Copy to clipboard</source>
|
||||
<target state="translated">Copia negli appunti</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">240</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7819314041543176992" datatype="html">
|
||||
<source>Close</source>
|
||||
<target state="translated">Chiudi</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">241</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b4e61d531b8db72449f043f122119da964f4fc54" datatype="html">
|
||||
<source>File type</source>
|
||||
<target state="translated">Tipo file</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">File type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="a47b663952ecf47fd8bc942a1c08ff0d3893bba5" datatype="html">
|
||||
<source>Both</source>
|
||||
<target state="translated">Entrambi</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">54</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Both</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="82dbc50a84e5c0865aa27479b8ce82da3a85d29b" datatype="html">
|
||||
<source>Skip ad</source>
|
||||
<target state="translated">Salta pubblicità</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/skip-ad-button/skip-ad-button.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Skip ad button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e4c3cd97461b220b9cea67cfe08c5399799cfeed" datatype="html">
|
||||
<source>Last ran</source>
|
||||
<target state="translated">Ultima esecuzione</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last ran</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">
|
||||
<source>N/A</source>
|
||||
<target state="translated">N/A</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">N/A</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="698f716f927f633b16cbe2308d90b2dba51f7556" datatype="html">
|
||||
<source>Last confirmed</source>
|
||||
<target state="translated">Ultimo confermato</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last confirmed</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">
|
||||
<source>Status</source>
|
||||
<target state="translated">Stato</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4391397241847e675f6c38bbdec6b2883157fb1a" datatype="html">
|
||||
<source>Clear duplicate files from DB:</source>
|
||||
<target state="translated">Pulisci i files duplicati dal DB:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear duplicate files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ff9ae1f4c26bf2ddf6e9d5e4136916c5ce6a941" datatype="html">
|
||||
<source>Clear missing files from DB:</source>
|
||||
<target state="translated">Pulisci i files mancanti dal DB:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear missing files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9562dd1e902acc4cc6a6e09cba66a2775daf7794" datatype="html">
|
||||
<source>Update binary to:</source>
|
||||
<target state="translated">Aggiorna binario a:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update binary to</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9b3d305551358858e1892169a94527e0cc4dbf5b" datatype="html">
|
||||
<source>Run</source>
|
||||
<target state="translated">Esegui</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">69</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Run</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a4f46a2dcec36bd5c8c371ceee55c2226dec27f" datatype="html">
|
||||
<source>Schedule</source>
|
||||
<target state="translated">Programma</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="40bd7093f5fbd3fbeff9a50baaf5d4c8416add1e" datatype="html">
|
||||
<source>Restore DB from backup</source>
|
||||
<target state="translated">Ripristina DB da salvataggio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore DB from backup button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f8a2361f3bd8fb05bf92080e2755bddd56ab64d7" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target state="translated">Ripristina attività</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Reset tasks button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5615896113581458384" datatype="html">
|
||||
<source>Successfully ran task!</source>
|
||||
<target state="translated">Attività eseguita con successo!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2106110452479146311" datatype="html">
|
||||
<source>Failed to run task!</source>
|
||||
<target state="translated">Errore nell'esecuzione dell'attività!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4707127982271899773" datatype="html">
|
||||
<source>Successfully confirmed task!</source>
|
||||
<target state="translated">Attività confermata con successo!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9121124215111024650" datatype="html">
|
||||
<source>Failed to confirm task!</source>
|
||||
<target state="translated">Errore nel confermare l'attività!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">92</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5588424857086384816" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target state="translated">Ripristina attività</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">132</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4334913030311371594" datatype="html">
|
||||
<source>Would you like to reset your tasks? All your schedules will be removed as well.</source>
|
||||
<target state="translated">Vuoi ripristinare le tue attività? Saranno rimosse pure tutte le tue programmazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">133</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7808756054397155068" datatype="html">
|
||||
<source>Reset</source>
|
||||
<target state="translated">Ripristina</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">134</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8612475568724527886" datatype="html">
|
||||
<source>Tasks successfully reset!</source>
|
||||
<target state="translated">Attività ripristinata con successo!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">142</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1709994363138824316" datatype="html">
|
||||
<source>Failed to reset tasks!</source>
|
||||
<target state="translated">Errore nel ripristinare l'attività!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="17afa163f202c8ee76e5b731f4bbdd9920fc4a18" datatype="html">
|
||||
<source>Docker tag:</source>
|
||||
<target state="translated">Tag docker:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Docker tag</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4ae1f7f102b455472992ae58bc18426316366760" datatype="html">
|
||||
<source>Build date:</source>
|
||||
<target state="translated">Data build:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Build date</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="cba36d610ddba59b6dd6fbec77199eabf0ff2de3" datatype="html">
|
||||
<source>Randomize order when playing</source>
|
||||
<target state="translated">Ordine casuale durante la riproduzione</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/modify-playlist/modify-playlist.component.html</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Randomize order when playing checkbox label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">
|
||||
<source>Restore</source>
|
||||
<target state="translated">Ripristina</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="94e2674467c7a08a291f9bd97ce694d4e47ffd62" datatype="html">
|
||||
<source>Share file</source>
|
||||
<target state="translated">Condividi file</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/share-media-dialog/share-media-dialog.component.html</context>
|
||||
<context context-type="linenumber">3</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Share video dialog title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="998793c78895d53576f462054f13d6e515e923d9" datatype="html">
|
||||
<source>Update task schedule</source>
|
||||
<target state="translated">Aggiorna programmazione attività</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update task schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">
|
||||
<source>Enabled</source>
|
||||
<target state="translated">Abilitato</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Enabled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">
|
||||
<source>Update</source>
|
||||
<target state="translated">Aggiorna</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="49e09cce4426975ba06c1667063d2c1df9c94362" datatype="html">
|
||||
<source>Autoplay</source>
|
||||
<target state="translated">Riproduzione automatica</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.html</context>
|
||||
<context context-type="linenumber">70,72</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Autoplay checkbox</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="87fd779c638aa5d04e006cd61890b0584c2da385" datatype="html">
|
||||
<source>Replace args</source>
|
||||
<target state="translated">Rimpiazza gli argomenti</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.html</context>
|
||||
<context context-type="linenumber">116,118</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Replace args</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4e1291cb1d579e7b7a1b802e6a8fd16ef7a557fa" datatype="html">
|
||||
<source>Crop file</source>
|
||||
<target state="translated">Ritaglia file</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.html</context>
|
||||
<context context-type="linenumber">160,162</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Crop video checkbox</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="44d007f6f8a2b19f12d85f9e49647b4ac02d7cbe" datatype="html">
|
||||
<source>Crop from (seconds)</source>
|
||||
<target state="translated">Ritaglia da (secondi)</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.html</context>
|
||||
<context context-type="linenumber">164,166</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Crop from placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="661206c3ab91fa81e9d8b40afb29f1866b78432f" datatype="html">
|
||||
<source>Crop to (seconds)</source>
|
||||
<target state="translated">Ritaglia a (secondi)</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.html</context>
|
||||
<context context-type="linenumber">169,171</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Crop to placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7220285196408439810" datatype="html">
|
||||
<source>Download for <x id="url" equiv-text="url"/> has been queued!</source>
|
||||
<target state="translated">Il download per <x id="url" equiv-text="url"/> è stato aggiunto alla coda!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.ts</context>
|
||||
<context context-type="linenumber">403</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fd374bee82dab66055b933496860f82b7b780159" datatype="html">
|
||||
<source>Global custom args for downloads on the home page. (Set args for subscriptions for each subscriptions separately!) Args are delimited using two commas like so: ,,</source>
|
||||
<target state="translated">Argomenti personalizzati globali per i downloads nella pagina principale. (Imposta gli argomenti per ogni iscrizione separatamente!) Gli argomenti sono delimitati usando due virgole così: ,,</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Custom args setting input hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5da94ccb2301f586af26916e921bdad6d673ab58" datatype="html">
|
||||
<source>Allow playlist categorization</source>
|
||||
<target state="translated">Consenti categorizzazione playlist</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Allow playlist categorization setting label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="6c2714fbfa525868fea90cc7a8f8de62458fbecf" datatype="html">
|
||||
<source>Max concurrent downloads</source>
|
||||
<target state="translated">Numero massimo di downloads simultanei</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">177</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Max concurrent downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4f9f174dc9939283b3192acc9e87d6c1e4cca118" datatype="html">
|
||||
<source>Limits the amount of downloads that can be simultaneously downloaded. Use -1 for no limit.</source>
|
||||
<target state="translated">Limita il numero di downloads che possono essere scaricati simultaneamente. Usa -1 per nessun limite.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">178</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Max concurrent downloads input hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="a30fc9944a494022ba67b3046ad3d27c62dd7fee" datatype="html">
|
||||
<source>Download rate limit</source>
|
||||
<target state="translated">Limite di velocità di download</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Download rate limit input placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="0af5ee1867be592a6cd35a94faba8833b52c740f" datatype="html">
|
||||
<source>Rate limits your downloads to the specified amount. Ex: 200K</source>
|
||||
<target state="translated">Limita la velocità di download al limite specificato. Per esempio: 200K</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Download rate limit input hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="c55604d30653e3d8310190d8d26761226132a901" datatype="html">
|
||||
<source>Enables a button to skip ads when viewing supported videos.</source>
|
||||
<target state="translated">Abilita un pulsante per saltare le pubblicità quando si guardano i video supportati.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">SponsorBlock API tooltip</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4c8f776635ead63103de9d21b28e95eceaf5ab53" datatype="html">
|
||||
<source>Use SponsorBlock API</source>
|
||||
<target state="translated">Usa API SponsorBlock</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Use SponsorBlock API setting</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e243d8408e1a3d2ef6501b85899d02374ea34880" datatype="html">
|
||||
<source>Generates NFO files with every download, primarily used by Kodi.</source>
|
||||
<target state="translated">Genera files NFO per ogni download, usati principalmente da Kodi.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Generate NFO files tooltip</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e65fce85d6177d3582b376f9d622daebca5ee0da" datatype="html">
|
||||
<source>Generate NFO files</source>
|
||||
<target state="translated">Genera files NFO</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Generate NFO files setting</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="fb324ec7da611c6283caa6fc6257c39a56d6aaf7" datatype="html">
|
||||
<source>Database</source>
|
||||
<target state="translated">Database</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">305</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Database settings label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9f8de81d44ec2a9a58b97e589b9e3154b3966c60" datatype="html">
|
||||
<source>Records per table</source>
|
||||
<target state="translated">Records per tabella</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">312</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Records per table label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3913164a51898aac444bf6c7150e46ad5a8a18ad" datatype="html">
|
||||
<source>MongoDB Connection String</source>
|
||||
<target state="translated">Stringa di Connessione MongoDB</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">320</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">MongoDB Connection String</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5473e36f5102e2ae22ce4c6620cacc40cc98da95" datatype="html">
|
||||
<source>Example:</source>
|
||||
<target state="translated">Esempio:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">321</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">MongoDB Connection String setting hint AKA preamble</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d54142de169844b014ae913a4056c31495f4a305" datatype="html">
|
||||
<source>Test connection string</source>
|
||||
<target state="translated">Prova stringa di connessione</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">325</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Test connection string button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="98e94c9bdac1ca8beb29d73b2e6f7a9e5e035aec" datatype="html">
|
||||
<source>Transfer DB to</source>
|
||||
<target state="translated">Trasferisci DB a</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">329</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transfer DB button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="b1c08387975e6feada407c9b5f5f564261b8192b" datatype="html">
|
||||
<source>Database information could not be retrieved. Check the server logs for more information.</source>
|
||||
<target state="translated">Impossibile recuperare le informazioni del database. Controllare i registri del server per ulteriori informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">333</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Database info not retrieved error message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7307570005283604795" datatype="html">
|
||||
<source>You must enable multi-user mode to access this tab.</source>
|
||||
<target state="translated">È necessario abilitare la modalità multi-utente per accedere a questa scheda.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">48</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en-US" datatype="plaintext" original="ng2.template" target-language="mk">
|
||||
<body>
|
||||
@@ -91,8 +91,8 @@
|
||||
<note priority="1" from="description">Settings menu label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7220285196408439810" datatype="html">
|
||||
<source>Download for <x id="url" equiv-text="d, cropF"/> has been queued!</source>
|
||||
<target>Превземањето за <x id="url" equiv-text="d, cropF"/> е ставено во редицата за чекање!</target>
|
||||
<source>Download for <x id="url" equiv-text="url"/> has been queued!</source>
|
||||
<target>Превземањето за <x id="url" equiv-text="url"/> е ставено во редицата за чекање!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.ts</context>
|
||||
<context context-type="linenumber">469</context>
|
||||
@@ -2496,8 +2496,8 @@
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2560364143605631750" datatype="html">
|
||||
<source>Error for <x id="url" equiv-text="}); retu"/></source>
|
||||
<target>Грешка за <x id="url" equiv-text="}); retu"/></target>
|
||||
<source>Error for <x id="url" equiv-text="download['url']"/></source>
|
||||
<target>Грешка за <x id="url" equiv-text="download['url']"/></target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
@@ -3035,6 +3035,296 @@
|
||||
</context-group>
|
||||
<note priority="1" from="description">Video duration label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e4c3cd97461b220b9cea67cfe08c5399799cfeed" datatype="html">
|
||||
<source>Last ran</source>
|
||||
<target>Последно извршување</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last ran</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">
|
||||
<source>N/A</source>
|
||||
<target>N/A</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">N/A</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="698f716f927f633b16cbe2308d90b2dba51f7556" datatype="html">
|
||||
<source>Last confirmed</source>
|
||||
<target>Последно потврдено</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last confirmed</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">
|
||||
<source>Status</source>
|
||||
<target>Статус</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d97425ce76bf3df50bcb643b5f409844770458f6" datatype="html">
|
||||
<source>Busy</source>
|
||||
<target>Зафанато</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Busy</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7e121a443a8e9d92218f987001b650c59504d815" datatype="html">
|
||||
<source>Scheduled for</source>
|
||||
<target>Закажано за</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3b7d6ff5d14ab177ce3e2d217b1927fb2e4aefd1" datatype="html">
|
||||
<source>Not scheduled</source>
|
||||
<target>Не закажано</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Not scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ff9ae1f4c26bf2ddf6e9d5e4136916c5ce6a941" datatype="html">
|
||||
<source>Clear missing files from DB:</source>
|
||||
<target>Исчисти ги непостоечките фајлови од базата со податоци:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear missing files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9562dd1e902acc4cc6a6e09cba66a2775daf7794" datatype="html">
|
||||
<source>Update binary to:</source>
|
||||
<target>Ажурирај ја програмата:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update binary to</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a4f46a2dcec36bd5c8c371ceee55c2226dec27f" datatype="html">
|
||||
<source>Schedule</source>
|
||||
<target>Закажи</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9b3d305551358858e1892169a94527e0cc4dbf5b" datatype="html">
|
||||
<source>Run</source>
|
||||
<target>Стартувај</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">69</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Run</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="40bd7093f5fbd3fbeff9a50baaf5d4c8416add1e" datatype="html">
|
||||
<source>Restore DB from backup</source>
|
||||
<target>Враќање на базата со податоци од резервна копија</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore DB from backup button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f8a2361f3bd8fb05bf92080e2755bddd56ab64d7" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target>Ресетирајте ги задачите</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Reset tasks button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e96c9d4528bf259da3944daac3171d7462b065a" datatype="html">
|
||||
<source>No tasks available!</source>
|
||||
<target>Нема достапни задачи!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">No tasks label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5615896113581458384" datatype="html">
|
||||
<source>Successfully ran task!</source>
|
||||
<target>Задачата е успешно извршена!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4707127982271899773" datatype="html">
|
||||
<source>Successfully confirmed task!</source>
|
||||
<target>Задачата е успешно потврдена!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4334913030311371594" datatype="html">
|
||||
<source>Would you like to reset your tasks? All your schedules will be removed as well.</source>
|
||||
<target>Дали сакате да ги ресетирате вашите задачи? Сите ваши распореди исто така ќе бидат отстранети.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">133</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7808756054397155068" datatype="html">
|
||||
<source>Reset</source>
|
||||
<target>Ресетирај</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">134</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8612475568724527886" datatype="html">
|
||||
<source>Tasks successfully reset!</source>
|
||||
<target>Задачите успешно се ресетираа!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">142</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1709994363138824316" datatype="html">
|
||||
<source>Failed to reset tasks!</source>
|
||||
<target>Не успеа да се ресетираат задачите!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">
|
||||
<source>Restore</source>
|
||||
<target>Врати</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="998793c78895d53576f462054f13d6e515e923d9" datatype="html">
|
||||
<source>Update task schedule</source>
|
||||
<target>Ажурирајте го распоредот на задачи</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update task schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">
|
||||
<source>Enabled</source>
|
||||
<target>Овозможено</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Enabled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="67aed6c588eb854f2f30ef642e85147da0027a61" datatype="html">
|
||||
<source>Recurring</source>
|
||||
<target>Повторливи</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Recurring</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="fd374bee82dab66055b933496860f82b7b780159" datatype="html">
|
||||
<source>Global custom args for downloads on the home page. (Set args for subscriptions for each subscriptions separately!) Args are delimited using two commas like so: ,,</source>
|
||||
<target>Глобални сопствени аргументи за преземања на почетната страница. (Поставете аргументи за претплати за секоја претплата посебно!) Аргументите се разграничуваат со користење на две запирки, на пример: ,,</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Custom args setting input hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4391397241847e675f6c38bbdec6b2883157fb1a" datatype="html">
|
||||
<source>Clear duplicate files from DB:</source>
|
||||
<target>Исчисти ги дупликат фајловите од базата со податоци:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear duplicate files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
|
||||
<source>Tasks</source>
|
||||
<target>Задачи</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/app.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Navigation menu Tasks Page title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5588424857086384816" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target>Ресетирајте ги задачите</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">132</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2106110452479146311" datatype="html">
|
||||
<source>Failed to run task!</source>
|
||||
<target>Не успеа да се изврши задачата!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9121124215111024650" datatype="html">
|
||||
<source>Failed to confirm task!</source>
|
||||
<target>Задачата не успеа да се потврди!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">92</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">
|
||||
<source>Update</source>
|
||||
<target>Ажурирање</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update button</note>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -1,222 +0,0 @@
|
||||
{
|
||||
"17f0ea5d2d7a262b0e875acc70475f102aee84e6": "Opprett en spilleliste",
|
||||
"cff1428d10d59d14e45edec3c735a27b5482db59": "Navn",
|
||||
"f0baeb8b69d120073b6d60d34785889b0c3232c8": "Lyd",
|
||||
"2d1ea268a6a9f483dbc2cbfe19bf4256a57a6af4": "Video",
|
||||
"f61c6867295f3b53d23557021f2f4e0aa1d0b8fc": "Type",
|
||||
"f47e2d56dd8a145b2e9599da9730c049d52962a2": "Lydfiler",
|
||||
"a52dae09be10ca3a65da918533ced3d3f4992238": "Videoer",
|
||||
"d9e83ac17026e70ef6e9c0f3240a3b2450367f40": "Endre youtube-dl-argumenter",
|
||||
"7fc1946abe2b40f60059c6cd19975d677095fd19": "Simulerte nye argumenter",
|
||||
"0b71824ae71972f236039bed43f8d2323e8fd570": "Legg til argument",
|
||||
"c8b0e59eb491f2ac7505f0fbab747062e6b32b23": "Søk etter kategori",
|
||||
"9eeb91caef5a50256dd87e1c4b7b3e8216479377": "Bruk argument-verdi",
|
||||
"25d8ad5eba2ec24e68295a27d6a4bb9b49e3dacd": "Argument-verdi",
|
||||
"7de2451ed3fb8d8b847979bd3f0c740b970f167b": "Legg til argument",
|
||||
"d7b35c384aecd25a516200d6921836374613dfe7": "Avbryt",
|
||||
"b2623aee44b70c9a4ba1fce16c8a593b0a4c7974": "Endre",
|
||||
"a38ae1082fec79ba1f379978337385a539a28e73": "Kvalitet",
|
||||
"4be966a9dcfbc9b54dfcc604b831c0289f847fa4": "Bruk nettadresse",
|
||||
"d3f02f845e62cebd75fde451ab8479d2a8ad784d": "Vis",
|
||||
"4a9889d36910edc8323d7bab60858ab3da6d91df": "Kun lyd",
|
||||
"96a01fafe135afc58b0f8071a4ab00234495ce18": "Multi-nedlastingsmodus",
|
||||
"6a21ba5fb0ac804a525bf9ab168038c3ee88e661": "Last ned",
|
||||
"6a3777f913cf3f288664f0632b9f24794fdcc24e": "Avbryt",
|
||||
"322ed150e02666fe2259c5b4614eac7066f4ffa0": "Avansert",
|
||||
"b7ffe7c6586d6f3f18a9246806a7c7d5538ab43e": "Simulert kommando:",
|
||||
"4e4c721129466be9c3862294dc40241b64045998": "Bruk egendefinerte argumenter:",
|
||||
"ad2f8ac8b7de7945b80c8e424484da94e597125f": "Egendefinerte argumenter",
|
||||
"a6911c2157f1b775284bbe9654ce5eb30cf45d7f": "Du trenger ikke å inkludere nettadressen, kun alt etter. Argumenter skilles ved bruk av to komma, slik: ,,",
|
||||
"3a92a3443c65a52f37ca7efb8f453b35dbefbf29": "Bruk defendefinert utdata",
|
||||
"d9c02face477f2f9cdaae318ccee5f89856851fb": "Egendefinert utdata",
|
||||
"fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7": "Dokumentasjon",
|
||||
"19d1ae64d94d28a29b2c57ae8671aace906b5401": "Sti er relativ til oppsettsnedlastingsstien. Ikke inkluder utvidelse.",
|
||||
"8fad10737d3e3735a6699a4d89cbf6c20f6bb55f": "Bruk identitetsbekreftelse",
|
||||
"08c74dc9762957593b91f6eb5d65efdfc975bf48": "Brukernavn",
|
||||
"c32ef07f8803a223a83ed17024b38e8d82292407": "Passord",
|
||||
"616e206cb4f25bd5885fc35925365e43cf5fb929": "Navn:",
|
||||
"c52db455cca9109ee47e1a612c3f4117c09eb71b": "Nettadresse:",
|
||||
"c6eb45d085384903e53ab001a3513d1de6a1dbac": "Opplaster:",
|
||||
"109c6f4a5e46efb933612ededfaf52a13178b7e0": "Filstørrelse:",
|
||||
"bd630d8669b16e5f264ec4649d9b469fe03e5ff4": "Sti:",
|
||||
"a67e7d843cef735c79d5ef1c8ba4af3e758912bb": "Opplastingsdato:",
|
||||
"f4e529ae5ffd73001d1ff4bbdeeb0a72e342e5c8": "Lukk",
|
||||
"4f389e41e4592f7f9bb76abdd8af4afdfb13f4f1": "Endre spilleliste",
|
||||
"511b600ae4cf037e4eb3b7a58410842cd5727490": "Legg til mer innhold",
|
||||
"52c9a103b812f258bcddc3d90a6e3f46871d25fe": "Lagre",
|
||||
"ca3dbbc7f3e011bffe32a10a3ea45cc84f30ecf1": "ID:",
|
||||
"e684046d73bcee88e82f7ff01e2852789a05fc32": "Antall:",
|
||||
"28f86ffd419b869711aa13f5e5ff54be6d70731c": "Rediger",
|
||||
"826b25211922a1b46436589233cb6f1a163d89b7": "Slett",
|
||||
"321e4419a943044e674beb55b8039f42a9761ca5": "Info",
|
||||
"34504b488c24c27e68089be549f0eeae6ebaf30b": "Slett og svartelist",
|
||||
"ebadf946ae90f13ecd0c70f09edbc0f983af8a0f": "Last opp nye kaker",
|
||||
"98a8a42e5efffe17ab786636ed0139b4c7032d0e": "Dra og slipp",
|
||||
"a8b7b9c168fd936a75e500806a8c0d7755ef1198": "Merk: Oppasting av nye kaker overskriver tidligere. Merk deg også at kaker gjelder for hele instansen, ikke per bruker.",
|
||||
"121cc5391cd2a5115bc2b3160379ee5b36cd7716": "Innstillinger",
|
||||
"801b98c6f02fe3b32f6afa3ee854c99ed83474e6": "Nettadresse",
|
||||
"54c512cca1923ab72faf1a0bd98d3d172469629a": "Nettadressen dette programmet nås fra, uten porten.",
|
||||
"cb2741a46e3560f6bc6dfd99d385e86b08b26d72": "Port",
|
||||
"22e8f1d0423a3b784fe40fab187b92c06541b577": "Ønsket port. Forvalet er 17442.",
|
||||
"d4477669a560750d2064051a510ef4d7679e2f3e": "Multi-brukermodus",
|
||||
"2eb03565fcdce7a7a67abc277a936a32fcf51557": "Bruker-basissti",
|
||||
"a64505c41150663968e277ec9b3ddaa5f4838798": "Basissti for brukere og deres nedlastede videoer.",
|
||||
"4e3120311801c4acd18de7146add2ee4a4417773": "Tillat abonnementer",
|
||||
"4bee2a4bef2d26d37c9b353c278e24e5cd309ce3": "Abonnements-basissti",
|
||||
"bc9892814ee2d119ae94378c905ea440a249b84a": "Basissti for videoer fra dine abonnementskanaler og spillelister. Den er relativ til YTDL-Material sin rotmappe.",
|
||||
"5bef4b25ba680da7fff06b86a91b1fc7e6a926e3": "Sjekkintervall",
|
||||
"0f56a7449b77630c114615395bbda4cab398efd8": "I sekunder, kun tall.",
|
||||
"27a56aad79d8b61269ed303f11664cc78bcc2522": "Drakt",
|
||||
"ff7cee38a2259526c519f878e71b964f41db4348": "Forvalg",
|
||||
"adb4562d2dbd3584370e44496969d58c511ecb63": "Mørk",
|
||||
"7a6bacee4c31cb5c0ac2d24274fb4610d8858602": "Tillat draktendring",
|
||||
"fe46ccaae902ce974e2441abe752399288298619": "Språk",
|
||||
"82421c3e46a0453a70c42900eab51d58d79e6599": "Generelt",
|
||||
"ab2756805742e84ad0cc0468f4be2d8aa9f855a5": "Lydmappe",
|
||||
"c2c89cdf45d46ea64d2ed2f9ac15dfa4d77e26ca": "Sti for lydbaserte nedlastinger. Den er relativ til YTDL-Material sin rotmappe.",
|
||||
"46826331da1949bd6fb74624447057099c9d20cd": "Videomappe",
|
||||
"17c92e6d47a213fa95b5aa344b3f258147123f93": "Sti for videonedlastinger. Den er relativ til YTDL-Material sin rotmappe.",
|
||||
"6b995e7130b4d667eaab6c5f61b362ace486d26d": "Egendefinerte argumenter for nedlastninger på hjemmesiden for hele programmet. Argumenter skilles med to komma, slik: ,,",
|
||||
"78e49b7339b4fa7184dd21bcaae107ce9b7076f6": "Bruk youtube-dl-arktivet",
|
||||
"ffc19f32b1cba0daefc0e5668f89346db1db83ad": "Inkluder miniatyrbilde",
|
||||
"384de8f8f112c9e6092eb2698706d391553f3e8d": "Inkluder metadata",
|
||||
"fb35145bfb84521e21b6385363d59221f436a573": "Drep alle nedlastinger",
|
||||
"0ba25ad86a240576c4f20a2fada4722ebba77b1e": "Nedlaster",
|
||||
"61f8fd90b5f8cb20c70371feb2ee5e1fac5a9095": "Topptittel",
|
||||
"78d3531417c0d4ba4c90f0d4ae741edc261ec8df": "Filbehandler påskrudd",
|
||||
"a5a1be0a5df07de9eec57f5d2a86ed0204b2e75a": "Nedlastingsbehandler påskrudd",
|
||||
"c33bd5392b39dbed36b8e5a1145163a15d45835f": "Tillat kvalitetsvalg",
|
||||
"bda5508e24e0d77debb28bcd9194d8fefb1cfb92": "Modus kun for nedlasting",
|
||||
"09d31c803a7252658694e1e3176b97f5655a3fe3": "Tillat multi-nedlastingsmodus",
|
||||
"1c4dbce56d96b8974aac24a02f7ab2ee81415014": "Skru på offentlig API",
|
||||
"23bd81dcc30b74d06279a26d7a42e8901c1b124e": "Offentlig API-nøkkel",
|
||||
"41016a73d8ad85e6cb26dffa0a8fab9fe8f60d8e": "Vis dokumentasjon",
|
||||
"1b258b258b4cc475ceb2871305b61756b0134f4a": "Generer",
|
||||
"00a94f58d9eb2e3aa561440eabea616d0c937fa2": "Dette vil slette din gamle API-nøkkel!",
|
||||
"d5d7c61349f3b0859336066e6d453fc35d334fe5": "Bruk YouTube-API",
|
||||
"ce10d31febb3d9d60c160750570310f303a22c22": "YouTube-API-nøkkel",
|
||||
"8602e313cdfa7c4cc475ccbe86459fce3c3fd986": "Å generere en nøkkel er lett!",
|
||||
"9b3cedfa83c6d7acb3210953289d1be4aab115c7": "Klikk her",
|
||||
"7f09776373995003161235c0c8d02b7f91dbc4df": "for å laste ned den offisielle Chrome-utvidelsen for YouTubeDL-Material selv.",
|
||||
"5b5296423906ab3371fdb2b5a5aaa83acaa2ee52": "Du må manuelt laste ned utvidelsen og endre dens innstillinger for å sette skjermflate-nettadresse.",
|
||||
"9a2ec6da48771128384887525bdcac992632c863": "for å installere den offisielle Firefox-utvidelsen for YouTubeDL-Material rett fra Firefox sin utvidelsesside.",
|
||||
"eb81be6b49e195e5307811d1d08a19259d411f37": "Detaljert oppsettsinstruks",
|
||||
"cb17ff8fe3961cf90f44bee97c88a3f3347a7e55": "Ikke mye kreves annet enn å endre utvidelses innstillinger for å sette skjermflate-nettadresse.",
|
||||
"61b81b11aad0b9d970ece2fce18405f07eac69c2": "Dra lenken nedenfor til bokmerker. Naviger til YouTube-videoen du ønsker å laste ned og klikk på bokmerket.",
|
||||
"c505d6c5de63cc700f0aaf8a4b31fae9e18024e5": "Genrer \"kun lyd\"-bookmerke",
|
||||
"d5f69691f9f05711633128b5a3db696783266b58": "Ekstra",
|
||||
"5fab47f146b0a4b809dcebf3db9da94df6299ea1": "Bruk forvalgt nedlastingsagent",
|
||||
"ec71e08aee647ea4a71fd6b7510c54d84a797ca6": "Velg en nedlaster",
|
||||
"0c43af932e6a4ee85500e28f01b3538b4eb27bc4": "Loggingsnivå",
|
||||
"db6c192032f4cab809aad35215f0aa4765761897": "Innloggingsutløp",
|
||||
"dc3d990391c944d1fbfc7cfb402f7b5e112fb3a8": "Tillat avansert nedlasting",
|
||||
"431e5f3a0dde88768d1074baedd65266412b3f02": "Bruk kaker",
|
||||
"80651a7ad1229ea6613557d3559f702cfa5aecf5": "Sett kaker",
|
||||
"bc2e854e111ecf2bd7db170da5e3c2ed08181d88": "Avansert",
|
||||
"37224420db54d4bc7696f157b779a7225f03ca9d": "Tillat brukerregistrering",
|
||||
"4f56ced9d6b85aeb1d4346433361d47ea72dac1a": "Intern",
|
||||
"e3d7c5f019e79a3235a28ba24df24f11712c7627": "LDAP",
|
||||
"fa548cee6ea11c160a416cac3e6bdec0363883dc": "Autentiseringsmetode",
|
||||
"1db9789b93069861019bd0ccaa5d4706b00afc61": "LDAP-nettadresse",
|
||||
"f50fa6c09c8944aed504f6325f2913ee6c7a296a": "BIND-DN",
|
||||
"080cc6abcba236390fc22e79792d0d3443a3bd2a": "BIND-identitetsdetaljer",
|
||||
"cfa67d14d84fe0e9fadf251dc51ffc181173b662": "Søkebase",
|
||||
"e01d54ecc1a0fcf9525a3c100ed8b83d94e61c23": "Søkefilter",
|
||||
"4d13a9cd5ed3dcee0eab22cb25198d43886942be": "Brukere",
|
||||
"eb3d5aefff38a814b76da74371cbf02c0789a1ef": "Logger",
|
||||
"fe8fd36dbf5deee1d56564965787a782a66eba44": "{VAR_SELECT, select, true {Close} false {Cancel} other {otha} }",
|
||||
"cec82c0a545f37420d55a9b6c45c20546e82f94e": "Om YouTubeDL-Material",
|
||||
"199c17e5d6a419313af3c325f06dcbb9645ca618": "er en fri YouTube-nedlaster bygd i henhold til Google sine Materielle spesifikasjoner. Du kan sømløst laste ned dine favorittvideoer som video- eller lydfiler, og tilogmed abonnere på dine favorittkanaler og spillelister for å holde deg oppdatert med nye videoer.",
|
||||
"bc0ad0ee6630acb7fcb7802ec79f5a0ee943c1a7": "har noen flotte funksjoner inkludert. Et vidtfavnende API, Docker-støtte, og lokalisering (oversettelser)-støtte. Les om alle støttede funksjoner ved å klikke på GitHub-ikonet ovenfor.",
|
||||
"a45e3b05f0529dc5246d70ef62304c94426d4c81": "Installert versjon:",
|
||||
"e22f3a5351944f3a1a10cfc7da6f65dfbe0037fe": "Ser etter oppdateringer …",
|
||||
"a16e92385b4fd9677bb830a4b796b8b79c113290": "Oppdatering tilgjengelig",
|
||||
"189b28aaa19b3c51c6111ad039c4fd5e2a22e370": "Du kan oppdatere fra innstillingsmenyen.",
|
||||
"b33536f59b94ec935a16bd6869d836895dc5300c": "Funnet en feil eller har et forslag å komme med?",
|
||||
"e1f398f38ff1534303d4bb80bd6cece245f24016": "for å opprette en feilrapport.",
|
||||
"42ff677ec14f111e88bd6cdd30145378e994d1bf": "Din profil",
|
||||
"ac9d09de42edca1296371e4d801349c9096ac8de": "UID:",
|
||||
"a5ed099ffc9e96f6970df843289ade8a7d20ab9f": "Opprettet:",
|
||||
"fa96f2137af0a24e6d6d54c598c0af7d5d5ad344": "Du er ikke innlogget.",
|
||||
"6765b4c916060f6bc42d9bb69e80377dbcb5e4e9": "Logg inn",
|
||||
"bb694b49d408265c91c62799c2b3a7e3151c824d": "Logg ut",
|
||||
"a1dbca87b9f36d2b06a5cbcffb5814c4ae9b798a": "Opprett administratorkonto",
|
||||
"2d2adf3ca26a676bca2269295b7455a26fd26980": "Fant ingen administratorkonto. Dette vil opprette og sette passord for en slik konto med brukernavn som «admin».",
|
||||
"70a67e04629f6d412db0a12d51820b480788d795": "Opprett",
|
||||
"994363f08f9fbfa3b3994ff7b35c6904fdff18d8": "Profil",
|
||||
"004b222ff9ef9dd4771b777950ca1d0e4cd4348a": "Om",
|
||||
"92eee6be6de0b11c924e3ab27db30257159c0a7c": "Hjem",
|
||||
"357064ca9d9ac859eb618e28e8126fa32be049e2": "Abonnementer",
|
||||
"822fab38216f64e8166d368b59fe756ca39d301b": "Nedlastinger",
|
||||
"a249a5ae13e0835383885aaf697d2890cc3e53e9": "Del spilleliste",
|
||||
"15da89490e04496ca9ea1e1b3d44fb5efd4a75d9": "Del video",
|
||||
"1d540dcd271b316545d070f9d182c372d923aadd": "Del lyd",
|
||||
"1f6d14a780a37a97899dc611881e6bc971268285": "Skru på deling",
|
||||
"6580b6a950d952df847cb3d8e7176720a740adc8": "Bruk tidsstempel",
|
||||
"4f2ed9e71a7c981db3e50ae2fedb28aff2ec4e6c": "Sekunder",
|
||||
"3a6e5a6aa78ca864f6542410c5dafb6334538106": "Kopier til utklippstavle",
|
||||
"5b3075e8dc3f3921ec316b0bd83b6d14a06c1a4f": "Lagre endringer",
|
||||
"4d8a18b04a1f785ecd8021ac824e0dfd5881dbfc": "Nedlastet",
|
||||
"348cc5d553b18e862eb1c1770e5636f6b05ba130": "En feil inntraff",
|
||||
"4f8b2bb476981727ab34ed40fde1218361f92c45": "Detaljer",
|
||||
"e9aff8e6df2e2bf6299ea27bb2894c70bc48bd4d": "En feil har inntruffet:",
|
||||
"77b0c73840665945b25bd128709aa64c8f017e1c": "Nedlastingsstart:",
|
||||
"08ff9375ec078065bcdd7637b7ea65fce2979266": "Nedlastingsslutt:",
|
||||
"ad127117f9471612f47d01eae09709da444a36a4": "Filsti(er):",
|
||||
"a9806cf78ce00eb2613eeca11354a97e033377b8": "Abonner på en spilleliste eller kanal",
|
||||
"93efc99ae087fc116de708ecd3ace86ca237cf30": "Spilleliste- eller kanal-nettadressen",
|
||||
"08f5d0ef937ae17feb1b04aff15ad88911e87baf": "Egendefinert navn",
|
||||
"ea30873bd3f0d5e4fb2378eec3f0a1db77634a28": "Last ned alle opplastinger",
|
||||
"28a678e9cabf86e44c32594c43fa0e890135c20f": "Last ned videoer oppdatert siste",
|
||||
"c76a955642714b8949ff3e4b4990864a2e2cac95": "Kun lyd-modus",
|
||||
"408ca4911457e84a348cecf214f02c69289aa8f1": "Kun strømming-modus",
|
||||
"f432e1a8d6adb12e612127978ce2e0ced933959c": "Disse legges til etter standard-argumentene.",
|
||||
"98b6ec9ec138186d663e64770267b67334353d63": "Egendefinert filutdata",
|
||||
"d0336848b0c375a1c25ba369b3481ee383217a4f": "Abonner",
|
||||
"e78c0d60ac39787f62c9159646fe0b3c1ed55a1d": "Type:",
|
||||
"a44d86aa1e6c20ced07aca3a7c081d8db9ded1c6": "Arkiv:",
|
||||
"8efc77bf327659c0fec1f518cf48a98cdcd9dddf": "Eksporter arkiv",
|
||||
"3042bd3ad8dffcfeca5fd1ae6159fd1047434e95": "Opphev abonnement",
|
||||
"e2319dec5b4ccfb6ed9f55ccabd63650a8fdf547": "Dine abonnementer",
|
||||
"807cf11e6ac1cde912496f764c176bdfdd6b7e19": "Kanaler",
|
||||
"29b89f751593e1b347eef103891b7a1ff36ec03f": "Navn ikke tilgjengelig. Henter kanal …",
|
||||
"4636cd4a1379c50d471e98786098c4d39e1e82ad": "Du har ingen kanalabonnementer.",
|
||||
"47546e45bbb476baaaad38244db444c427ddc502": "Spillelister",
|
||||
"2e0a410652cb07d069f576b61eab32586a18320d": "Navn ikke tilgjengelig. Henter spilleliste …",
|
||||
"587b57ced54965d8874c3fd0e9dfedb987e5df04": "Du har ingen spillelisteabonnement.",
|
||||
"3697f8583ea42868aa269489ad366103d94aece7": "Redigering",
|
||||
"7e892ba15f2c6c17e83510e273b3e10fc32ea016": "Søk",
|
||||
"2054791b822475aeaea95c0119113de3200f5e1c": "Lengde:",
|
||||
"94e01842dcee90531caa52e4147f70679bac87fe": "Slett og last ned igjen",
|
||||
"2031adb51e07a41844e8ba7704b054e98345c9c1": "Slett for alltid",
|
||||
"91ecce65f1d23f9419d1c953cd6b7bc7f91c110e": "Oppdaterer",
|
||||
"1372e61c5bd06100844bd43b98b016aabc468f62": "Velg en versjon:",
|
||||
"cfc2f436ec2beffb042e7511a73c89c372e86a6c": "Regustrer",
|
||||
"a1ad8b1be9be43b5183bd2c3186d4e19496f2a0b": "Økt-ID:",
|
||||
"eb98135e35af26a9a326ee69bd8ff104d36dd8ec": "(nåværende)",
|
||||
"b6c453e0e61faea184bbaf5c5b0a1e164f4de2a2": "Tøm alle nedlastinger",
|
||||
"7117fc42f860e86d983bfccfcf2654e5750f3406": "Ingen nedlastninger tilgjengelige!",
|
||||
"b7ff2e2b909c53abe088fe60b9f4b6ac7757247f": "Registrer en bruker",
|
||||
"024886ca34a6f309e3e51c2ed849320592c3faaa": "Brukernavn",
|
||||
"2bd201aea09e43fbfd3cd15ec0499b6755302329": "Håndter bruker",
|
||||
"29c97c8e76763bb15b6d515648fa5bd1eb0f7510": "Bruker-UID:",
|
||||
"e70e209561583f360b1e9cefd2cbb1fe434b6229": "Nytt passord",
|
||||
"6498fa1b8f563988f769654a75411bb8060134b9": "Sett nytt passord",
|
||||
"544e09cdc99a8978f48521d45f62db0da6dcf742": "Bruk rolle-forvalg",
|
||||
"4f20f2d5a6882190892e58b85f6ccbedfa737952": "Ja",
|
||||
"3d3ae7deebc5949b0c1c78b9847886a94321d9fd": "Nei",
|
||||
"57c6c05d8ebf4ef1180c2705033c044f655bb2c4": "Håndter rolle",
|
||||
"746f64ddd9001ac456327cd9a3d5152203a4b93c": "Brukernavn",
|
||||
"52c1447c1ec9570a2a3025c7e566557b8d19ed92": "Rolle",
|
||||
"59a8c38db3091a63ac1cb9590188dc3a972acfb3": "Handlinger",
|
||||
"632e8b20c98e8eec4059a605a4b011bb476137af": "Rediger bruker",
|
||||
"95b95a9c79e4fd9ed41f6855e37b3b06af25bcab": "Slett bruker",
|
||||
"4d92a0395dd66778a931460118626c5794a3fc7a": "Legg til brukere",
|
||||
"b0d7dd8a1b0349622d6e0c6e643e24a9ea0efa1d": "Rediger rolle",
|
||||
"5009630cdf32ab4f1c78737b9617b8773512c05a": "Linjer:",
|
||||
"8a0bda4c47f10b2423ff183acefbf70d4ab52ea2": "Tøm logger",
|
||||
"ccf5ea825526ac490974336cb5c24352886abc07": "Åpne fil",
|
||||
"5656a06f17c24b2d7eae9c221567b209743829a9": "Åpne fil i ny fane",
|
||||
"a0720c36ee1057e5c54a86591b722485c62d7b1a": "Gå til abonnement",
|
||||
"d02888c485d3aeab6de628508f4a00312a722894": "Mine videoer"
|
||||
}
|
||||
@@ -1392,7 +1392,7 @@
|
||||
<note priority="1" from="description">Allow subscriptions setting</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4bee2a4bef2d26d37c9b353c278e24e5cd309ce3" datatype="html">
|
||||
<source>Base bath for subscriptions</source>
|
||||
<source>Subscriptions base path</source>
|
||||
<target>Abonnementenbasispad</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
@@ -1545,8 +1545,8 @@
|
||||
<note priority="1" from="description">Custom args input placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="6b995e7130b4d667eaab6c5f61b362ace486d26d" datatype="html">
|
||||
<source>Global custom args for downloads on the home page. Args are delimited using two commas like so: ,,</source>
|
||||
<target>Algemene aanvullende opties voor downloads op de overzichtspagina. Scheidt deze met komma's: ,,</target>
|
||||
<source>Global custom args for downloads on the home page. (Set args for subscriptions for each subscriptions separately!) Args are delimited using two commas like so: ,,</source>
|
||||
<target>Algemene aanvullende opties voor downloads op de overzichtspagina. (Stel de opties per abonnement in!) Scheidt deze met komma's: ,,</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">134</context>
|
||||
@@ -2854,8 +2854,8 @@
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2560364143605631750" datatype="html">
|
||||
<source>Error for <x id="url" equiv-text="}); retu"/></source>
|
||||
<target>Foutmelding bij <x id="url" equiv-text="}); retu"/></target>
|
||||
<source>Error for <x id="url" equiv-text="download['url']"/></source>
|
||||
<target>Foutmelding bij <x id="url" equiv-text="download['url']"/></target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
@@ -3097,13 +3097,303 @@
|
||||
<note priority="1" from="description">Autoplay checkbox</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7220285196408439810" datatype="html">
|
||||
<source>Download for <x id="url" equiv-text="d, cropF"/> has been queued!</source>
|
||||
<target><x id="url" equiv-text="d, cropF"/> staat in de wachtrij!</target>
|
||||
<source>Download for <x id="url" equiv-text="url"/> has been queued!</source>
|
||||
<target><x id="url" equiv-text="url"/> staat in de wachtrij!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.ts</context>
|
||||
<context context-type="linenumber">469</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
|
||||
<source>Tasks</source>
|
||||
<target>Taken</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/app.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Navigation menu Tasks Page title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">
|
||||
<source>N/A</source>
|
||||
<target>n/b</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">N/A</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="698f716f927f633b16cbe2308d90b2dba51f7556" datatype="html">
|
||||
<source>Last confirmed</source>
|
||||
<target>Laatst bevestigd:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last confirmed</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">
|
||||
<source>Status</source>
|
||||
<target>Status</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d97425ce76bf3df50bcb643b5f409844770458f6" datatype="html">
|
||||
<source>Busy</source>
|
||||
<target>Bezig</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Busy</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3b7d6ff5d14ab177ce3e2d217b1927fb2e4aefd1" datatype="html">
|
||||
<source>Not scheduled</source>
|
||||
<target>Niet ingepland</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Not scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ff9ae1f4c26bf2ddf6e9d5e4136916c5ce6a941" datatype="html">
|
||||
<source>Clear missing files from DB:</source>
|
||||
<target>Ontbrekende bestanden wissen uit DB:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear missing files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4391397241847e675f6c38bbdec6b2883157fb1a" datatype="html">
|
||||
<source>Clear duplicate files from DB:</source>
|
||||
<target>Gedupliceerde bestanden wissen uit DB:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear duplicate files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9562dd1e902acc4cc6a6e09cba66a2775daf7794" datatype="html">
|
||||
<source>Update binary to:</source>
|
||||
<target>Uitvoerbaar bestand bijwerken naar</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update binary to</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9b3d305551358858e1892169a94527e0cc4dbf5b" datatype="html">
|
||||
<source>Run</source>
|
||||
<target>Uitvoeren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">69</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Run</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a4f46a2dcec36bd5c8c371ceee55c2226dec27f" datatype="html">
|
||||
<source>Schedule</source>
|
||||
<target>Inplannen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="2106110452479146311" datatype="html">
|
||||
<source>Failed to run task!</source>
|
||||
<target>De taak kan niet worden uitgevoerd!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4707127982271899773" datatype="html">
|
||||
<source>Successfully confirmed task!</source>
|
||||
<target>De taak is bevestigd!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9121124215111024650" datatype="html">
|
||||
<source>Failed to confirm task!</source>
|
||||
<target>De taak kan niet worden bevestigd!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">92</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4334913030311371594" datatype="html">
|
||||
<source>Would you like to reset your tasks? All your schedules will be removed as well.</source>
|
||||
<target>Weet je zeker dat je alle taken wilt herstellen? Alle schema's worden hierdoor gewist.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">133</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7808756054397155068" datatype="html">
|
||||
<source>Reset</source>
|
||||
<target>Herstellen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">134</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1709994363138824316" datatype="html">
|
||||
<source>Failed to reset tasks!</source>
|
||||
<target>De taken kunnen niet worden hersteld!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">
|
||||
<source>Restore</source>
|
||||
<target>Herstellen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="998793c78895d53576f462054f13d6e515e923d9" datatype="html">
|
||||
<source>Update task schedule</source>
|
||||
<target>Taakschema bijwerken</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update task schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">
|
||||
<source>Enabled</source>
|
||||
<target>Ingeschakeld</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Enabled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="67aed6c588eb854f2f30ef642e85147da0027a61" datatype="html">
|
||||
<source>Recurring</source>
|
||||
<target>Herhalen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Recurring</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">
|
||||
<source>Update</source>
|
||||
<target>Bijwerken</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e4c3cd97461b220b9cea67cfe08c5399799cfeed" datatype="html">
|
||||
<source>Last ran</source>
|
||||
<target>Laatst uitgevoerd:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last ran</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7e121a443a8e9d92218f987001b650c59504d815" datatype="html">
|
||||
<source>Scheduled for</source>
|
||||
<target>Ingepland om</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="40bd7093f5fbd3fbeff9a50baaf5d4c8416add1e" datatype="html">
|
||||
<source>Restore DB from backup</source>
|
||||
<target>DB herstellen uit back-up</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore DB from backup button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5588424857086384816" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target>Taken herstellen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">132</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5615896113581458384" datatype="html">
|
||||
<source>Successfully ran task!</source>
|
||||
<target>De taak is uitgevoerd!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f8a2361f3bd8fb05bf92080e2755bddd56ab64d7" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target>Taken herstellen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Reset tasks button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e96c9d4528bf259da3944daac3171d7462b065a" datatype="html">
|
||||
<source>No tasks available!</source>
|
||||
<target>Er zijn geen taken beschikbaar!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">No tasks label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="8612475568724527886" datatype="html">
|
||||
<source>Tasks successfully reset!</source>
|
||||
<target>De taken zijn hersteld!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">142</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fd374bee82dab66055b933496860f82b7b780159" datatype="html">
|
||||
<source>Global custom args for downloads on the home page. (Set args for subscriptions for each subscriptions separately!) Args are delimited using two commas like so: ,,</source>
|
||||
<target>Globale aanvullende opties voor downloades. (Stel ze per abonnement in!) Scheid de opties met twee komma's, dus ,,</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Custom args setting input hint</note>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3104,6 +3104,15 @@
|
||||
</context-group>
|
||||
<note priority="1" from="description">Skip ad button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
|
||||
<source>Tasks</source>
|
||||
<target state="translated">Tarefas</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/app.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Navigation menu Tasks Page title</note>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">
|
||||
<source>Name</source>
|
||||
<target>Имя</target>
|
||||
<target>Название</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/create-playlist/create-playlist.component.html</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
@@ -124,7 +124,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="b2623aee44b70c9a4ba1fce16c8a593b0a4c7974" datatype="html">
|
||||
<source>Modify</source>
|
||||
<target>Модифицировать</target>
|
||||
<target>Изменить</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/arg-modifier-dialog/arg-modifier-dialog.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
@@ -289,7 +289,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="19d1ae64d94d28a29b2c57ae8671aace906b5401" datatype="html">
|
||||
<source>Path is relative to the config download path. Don't include extension.</source>
|
||||
<target>Путь является относительным к пути загрузки конфигурации. Не включайте расширение.</target>
|
||||
<target state="needs-translation">Путь является относительным к пути загрузки конфигурации. Не включайте расширение.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/main/main.component.html</context>
|
||||
<context context-type="linenumber">131</context>
|
||||
@@ -336,9 +336,7 @@
|
||||
<note priority="1" from="description">YT Password placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a0dada6e841a425de3e5006e6a04df26c644fa5" datatype="html">
|
||||
<source>
|
||||
Audio
|
||||
</source>
|
||||
<source>Audio</source>
|
||||
<target/>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/main/main.component.html</context>
|
||||
@@ -347,9 +345,7 @@
|
||||
<note priority="1" from="description">Audio files title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9779715ac05308973d8f1c8658b29b986e92450f" datatype="html">
|
||||
<source>
|
||||
Your audio files are here
|
||||
</source>
|
||||
<source>Your audio files are here</source>
|
||||
<target/>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/main/main.component.html</context>
|
||||
@@ -375,9 +371,7 @@
|
||||
<note priority="1" from="description">Playlists title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="78bd81adb4609b68cfa4c589222bdc233ba1faaa" datatype="html">
|
||||
<source>
|
||||
No playlists available. Create one from your downloading audio files by clicking the blue plus button.
|
||||
</source>
|
||||
<source>No playlists available. Create one from your downloading audio files by clicking the blue plus button.</source>
|
||||
<target/>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/main/main.component.html</context>
|
||||
@@ -386,9 +380,7 @@
|
||||
<note priority="1" from="description">No video playlists available text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9d2b62bb0b91e2e17fb4177a7e3d6756a2e6ee33" datatype="html">
|
||||
<source>
|
||||
Video
|
||||
</source>
|
||||
<source>Video</source>
|
||||
<target/>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/main/main.component.html</context>
|
||||
@@ -397,9 +389,7 @@
|
||||
<note priority="1" from="description">Video files title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="960582a8b9d7942716866ecfb7718309728f2916" datatype="html">
|
||||
<source>
|
||||
Your video files are here
|
||||
</source>
|
||||
<source>Your video files are here</source>
|
||||
<target/>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/main/main.component.html</context>
|
||||
@@ -408,9 +398,7 @@
|
||||
<note priority="1" from="description">Video files description</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="0f59c46ca29e9725898093c9ea6b586730d0624e" datatype="html">
|
||||
<source>
|
||||
No playlists available. Create one from your downloading video files by clicking the blue plus button.
|
||||
</source>
|
||||
<source>No playlists available. Create one from your downloading video files by clicking the blue plus button.</source>
|
||||
<target/>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/main/main.component.html</context>
|
||||
@@ -433,7 +421,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="c52db455cca9109ee47e1a612c3f4117c09eb71b" datatype="html">
|
||||
<source>URL:</source>
|
||||
<target>URL-адрес:</target>
|
||||
<target>Ссылка:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/video-info-dialog/video-info-dialog.component.html</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
@@ -523,7 +511,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="4f389e41e4592f7f9bb76abdd8af4afdfb13f4f1" datatype="html">
|
||||
<source>Modify playlist</source>
|
||||
<target>Изменить список воспроизведения</target>
|
||||
<target>Изменить плейлист</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/modify-playlist/modify-playlist.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
@@ -602,7 +590,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="ebadf946ae90f13ecd0c70f09edbc0f983af8a0f" datatype="html">
|
||||
<source>Upload new cookies</source>
|
||||
<target>Загрузка новых файлов cookie</target>
|
||||
<target>Загрузка новых cookie</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/cookies-uploader-dialog/cookies-uploader-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
@@ -642,7 +630,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="801b98c6f02fe3b32f6afa3ee854c99ed83474e6" datatype="html">
|
||||
<source>URL</source>
|
||||
<target>URL-адрес</target>
|
||||
<target>Ссылка</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">18</context>
|
||||
@@ -744,7 +732,7 @@
|
||||
<note priority="1" from="description">Allow subscriptions setting</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4bee2a4bef2d26d37c9b353c278e24e5cd309ce3" datatype="html">
|
||||
<source>Base bath for subscriptions</source>
|
||||
<source>Subscriptions base path</source>
|
||||
<target>Базовый путь для подписок</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/settings.component.html</context>
|
||||
@@ -1283,7 +1271,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="199c17e5d6a419313af3c325f06dcbb9645ca618" datatype="html">
|
||||
<source>is an open-source YouTube downloader built under Google's Material Design specifications. You can seamlessly download your favorite videos as video or audio files, and even subscribe to your favorite channels and playlists to keep updated with their new videos.</source>
|
||||
<target>это загрузчик YouTube с открытым исходным кодом, созданный в соответствии со спецификациями Material Design от Google. Вы можете легко загружать любимые видеоролики в виде видео- или аудиофайлов и даже подписываться на любимые каналы и плейлисты, чтобы быть в курсе их новых видео.</target>
|
||||
<target>это загрузчик YouTube с открытым исходным кодом, созданный в соответствии со спецификациями Material Design от Google. Вы можете легко загружать любимые видеоролики в виде видео- или аудиофайлов и даже подписываться на любимые каналы и плейлисты, чтобы быть в курсе новых видео.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
@@ -1346,7 +1334,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="e1f398f38ff1534303d4bb80bd6cece245f24016" datatype="html">
|
||||
<source>to create an issue!</source>
|
||||
<target>чтобы создать проблему!</target>
|
||||
<target>чтобы описать проблему!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
@@ -1417,7 +1405,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="a1dbca87b9f36d2b06a5cbcffb5814c4ae9b798a" datatype="html">
|
||||
<source>Create admin account</source>
|
||||
<target>Создайте учетную запись администратора</target>
|
||||
<target>Создание учетной записи администратора</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/set-default-admin-dialog/set-default-admin-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
@@ -1426,7 +1414,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="2d2adf3ca26a676bca2269295b7455a26fd26980" datatype="html">
|
||||
<source>No default admin account detected. This will create and set the password for an admin account with the user name as 'admin'.</source>
|
||||
<target>Учетная запись администратора по умолчанию не обнаружена. Это создаст и установит пароль для учетной записи администратора с именем пользователя 'admin'.</target>
|
||||
<target state="needs-translation">Учетная запись администратора по умолчанию не обнаружена. Это создаст и установит пароль для учетной записи администратора с именем пользователя 'admin'.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/set-default-admin-dialog/set-default-admin-dialog.component.html</context>
|
||||
<context context-type="linenumber">5</context>
|
||||
@@ -1453,7 +1441,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="004b222ff9ef9dd4771b777950ca1d0e4cd4348a" datatype="html">
|
||||
<source>About</source>
|
||||
<target>О</target>
|
||||
<target>О программе</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/app.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
@@ -1462,7 +1450,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="92eee6be6de0b11c924e3ab27db30257159c0a7c" datatype="html">
|
||||
<source>Home</source>
|
||||
<target>Дом</target>
|
||||
<target>Домашняя страница</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/app.component.html</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
@@ -1525,7 +1513,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="6580b6a950d952df847cb3d8e7176720a740adc8" datatype="html">
|
||||
<source>Use timestamp</source>
|
||||
<target>Используйте метку времени</target>
|
||||
<target>Использовать метку времени</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/share-media-dialog/share-media-dialog.component.html</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
@@ -1619,7 +1607,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="93efc99ae087fc116de708ecd3ace86ca237cf30" datatype="html">
|
||||
<source>The playlist or channel URL</source>
|
||||
<target>URL-адрес списка воспроизведения или канала</target>
|
||||
<target>Ссылка на плейлист или канал</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
|
||||
<context context-type="linenumber">9</context>
|
||||
@@ -1637,7 +1625,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="ea30873bd3f0d5e4fb2378eec3f0a1db77634a28" datatype="html">
|
||||
<source>Download all uploads</source>
|
||||
<target>Загрузить все загруженные файлы</target>
|
||||
<target state="needs-translation">Загрузить все загруженные файлы</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
@@ -1646,7 +1634,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="28a678e9cabf86e44c32594c43fa0e890135c20f" datatype="html">
|
||||
<source>Download videos uploaded in the last</source>
|
||||
<target>Скачать видео, загруженное за последние время</target>
|
||||
<target>Скачать видео, загруженные за последнее время</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
@@ -1655,7 +1643,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="c76a955642714b8949ff3e4b4990864a2e2cac95" datatype="html">
|
||||
<source>Audio-only mode</source>
|
||||
<target>Только аудио режим</target>
|
||||
<target>Только звук</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
@@ -1664,7 +1652,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="408ca4911457e84a348cecf214f02c69289aa8f1" datatype="html">
|
||||
<source>Streaming-only mode</source>
|
||||
<target>Режим только для потокового вещания</target>
|
||||
<target>Только потоковое вещание</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
@@ -1682,7 +1670,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="98b6ec9ec138186d663e64770267b67334353d63" datatype="html">
|
||||
<source>Custom file output</source>
|
||||
<target>Пользовательский вывод файлов</target>
|
||||
<target state="needs-translation">Пользовательский файл для вывода</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
@@ -1727,7 +1715,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="3042bd3ad8dffcfeca5fd1ae6159fd1047434e95" datatype="html">
|
||||
<source>Unsubscribe</source>
|
||||
<target>Отписаться от рассылки</target>
|
||||
<target>Отписаться</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/dialogs/subscription-info-dialog/subscription-info-dialog.component.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
@@ -1929,7 +1917,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="6498fa1b8f563988f769654a75411bb8060134b9" datatype="html">
|
||||
<source>Set new password</source>
|
||||
<target>Установите новый пароль</target>
|
||||
<target>Задать новый пароль</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/components/manage-user/manage-user.component.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
@@ -2045,7 +2033,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="56a2a773fbd5a6b9ac2e6b89d29d70a2ed0f3227" datatype="html">
|
||||
<source>See less.</source>
|
||||
<target>Смотреть меньше.</target>
|
||||
<target>Закрыть.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/see-more/see-more.component.html</context>
|
||||
<context context-type="linenumber">8,9</context>
|
||||
@@ -2054,7 +2042,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="ddc31f2885b1b33a7651963254b0c197f2a64086" datatype="html">
|
||||
<source>See more.</source>
|
||||
<target>См. подробнее.</target>
|
||||
<target>Раскрыть.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/see-more/see-more.component.html</context>
|
||||
<context context-type="linenumber">5,6</context>
|
||||
@@ -2099,7 +2087,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="8a0bda4c47f10b2423ff183acefbf70d4ab52ea2" datatype="html">
|
||||
<source>Clear logs</source>
|
||||
<target>Очистить журналы</target>
|
||||
<target>Очистить журнал</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/logs-viewer/logs-viewer.component.html</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
@@ -2404,7 +2392,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="792dc6a57f28a1066db283f2e736484f066005fd" datatype="html">
|
||||
<source>Download Twitch Chat</source>
|
||||
<target>Скачать Чат Twitch</target>
|
||||
<target>Скачать чат Twitch</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/twitch-chat/twitch-chat.component.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
@@ -2431,7 +2419,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="c3b0b86523f1d10e84a71f9b188d54913a11af3b" datatype="html">
|
||||
<source>Editing category</source>
|
||||
<target>Категория редактирования</target>
|
||||
<target>Редактирование категории</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/edit-category-dialog/edit-category-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
@@ -2449,7 +2437,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="3697f8583ea42868aa269489ad366103d94aece7" datatype="html">
|
||||
<source>Editing</source>
|
||||
<target>Редактирование</target>
|
||||
<target>Правка</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/edit-subscription-dialog/edit-subscription-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
@@ -2494,7 +2482,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="5caadefa4143cf6766a621b0f54f91f373a1f164" datatype="html">
|
||||
<source>Add content</source>
|
||||
<target>Добавить содержание</target>
|
||||
<target state="needs-translation">Добавить содержание</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/modify-playlist/modify-playlist.component.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
@@ -2503,7 +2491,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="a8b7b9c168fd936a75e500806a8c0d7755ef1198" datatype="html">
|
||||
<source>NOTE: Uploading new cookies will override your previous cookies. Also note that cookies are instance-wide, not per-user.</source>
|
||||
<target>ПРИМЕЧАНИЕ: Загрузка новых файлов cookie отменяет предыдущие файлы cookie. Также обратите внимание, что файлы cookie используются в масштабах всего экземпляра, а не каждого пользователя.</target>
|
||||
<target state="needs-translation">ПРИМЕЧАНИЕ: Загрузка новых cookie отменяет предыдущие cookie. Также обратите внимание, что cookie используются в масштабах всего экземпляра, а не каждого пользователя.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/cookies-uploader-dialog/cookies-uploader-dialog.component.html</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
@@ -2546,7 +2534,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="d641b8fa5ac5e85114c733b1f7de6976bd091f70" datatype="html">
|
||||
<source>Max quality</source>
|
||||
<target>Максимальное качество</target>
|
||||
<target>Лучшее качество</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/subscribe-dialog/subscribe-dialog.component.html</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
@@ -2760,8 +2748,8 @@
|
||||
<note priority="1" from="description">Download rate limit input hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7220285196408439810" datatype="html">
|
||||
<source>Download for <x id="url" equiv-text="d, cropF"/> has been queued!</source>
|
||||
<target>Загрузка для <x id="url" equiv-text="d, cropF"/> выла добавлена в очередь!</target>
|
||||
<source>Download for <x id="url" equiv-text="url"/> has been queued!</source>
|
||||
<target>Загрузка для <x id="url" equiv-text="url"/> была добавлена в очередь!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.ts</context>
|
||||
<context context-type="linenumber">469</context>
|
||||
@@ -2885,7 +2873,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="4ae1f7f102b455472992ae58bc18426316366760" datatype="html">
|
||||
<source>Build date:</source>
|
||||
<target>Дата постройки:</target>
|
||||
<target>Дата сборки:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
@@ -2894,7 +2882,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="8700121026680200191" datatype="html">
|
||||
<source>Clear</source>
|
||||
<target>Стереть</target>
|
||||
<target>Очистить</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">131</context>
|
||||
@@ -2902,7 +2890,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="8384225360105280028" datatype="html">
|
||||
<source>Complete</source>
|
||||
<target>Закончено</target>
|
||||
<target>Завершено</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
@@ -2910,7 +2898,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="7180002287537831534" datatype="html">
|
||||
<source>Clear finished downloads</source>
|
||||
<target>Очистить законченны загрузки</target>
|
||||
<target>Очистить завершённые загрузки</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">129</context>
|
||||
@@ -2960,7 +2948,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">
|
||||
<source>Clear</source>
|
||||
<target>Стереть</target>
|
||||
<target>Очистить</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
@@ -3033,8 +3021,8 @@
|
||||
<note priority="1" from="description">Progress</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="2560364143605631750" datatype="html">
|
||||
<source>Error for <x id="url" equiv-text="}); retu"/></source>
|
||||
<target>Ошибка для <x id="url" equiv-text="}); retu"/></target>
|
||||
<source>Error for <x id="url" equiv-text="download['url']"/></source>
|
||||
<target>Ошибка с <x id="url" equiv-text="download['url']"/></target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
@@ -3118,7 +3106,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="17afa163f202c8ee76e5b731f4bbdd9920fc4a18" datatype="html">
|
||||
<source>Docker tag:</source>
|
||||
<target>Тег Docker:</target>
|
||||
<target>Метка Docker:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
@@ -3176,6 +3164,296 @@
|
||||
</context-group>
|
||||
<note priority="1" from="description">Commit hash</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
|
||||
<source>Tasks</source>
|
||||
<target>Задачи</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/app.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Navigation menu Tasks Page title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">
|
||||
<source>N/A</source>
|
||||
<target>Неизвестно</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">N/A</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e4c3cd97461b220b9cea67cfe08c5399799cfeed" datatype="html">
|
||||
<source>Last ran</source>
|
||||
<target>Последний запуск</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last ran</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="698f716f927f633b16cbe2308d90b2dba51f7556" datatype="html">
|
||||
<source>Last confirmed</source>
|
||||
<target>Последние подтверждённые</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last confirmed</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">
|
||||
<source>Status</source>
|
||||
<target>Статус</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d97425ce76bf3df50bcb643b5f409844770458f6" datatype="html">
|
||||
<source>Busy</source>
|
||||
<target state="needs-translation">Занято</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Busy</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7e121a443a8e9d92218f987001b650c59504d815" datatype="html">
|
||||
<source>Scheduled for</source>
|
||||
<target>Отложено для</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3b7d6ff5d14ab177ce3e2d217b1927fb2e4aefd1" datatype="html">
|
||||
<source>Not scheduled</source>
|
||||
<target>Не отложено</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Not scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ff9ae1f4c26bf2ddf6e9d5e4136916c5ce6a941" datatype="html">
|
||||
<source>Clear missing files from DB:</source>
|
||||
<target>Очистка потерянных файлов из базы данных:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear missing files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4391397241847e675f6c38bbdec6b2883157fb1a" datatype="html">
|
||||
<source>Clear duplicate files from DB:</source>
|
||||
<target>Очистка дубликатов файлов из базы данных:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear duplicate files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9562dd1e902acc4cc6a6e09cba66a2775daf7794" datatype="html">
|
||||
<source>Update binary to:</source>
|
||||
<target>Обновить бинарный файл на:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update binary to</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9b3d305551358858e1892169a94527e0cc4dbf5b" datatype="html">
|
||||
<source>Run</source>
|
||||
<target>Запустить</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">69</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Run</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a4f46a2dcec36bd5c8c371ceee55c2226dec27f" datatype="html">
|
||||
<source>Schedule</source>
|
||||
<target>Отложить</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="40bd7093f5fbd3fbeff9a50baaf5d4c8416add1e" datatype="html">
|
||||
<source>Restore DB from backup</source>
|
||||
<target>Восстановить базу данных из резервной копии</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore DB from backup button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f8a2361f3bd8fb05bf92080e2755bddd56ab64d7" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target>Сбросить задачи</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Reset tasks button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e96c9d4528bf259da3944daac3171d7462b065a" datatype="html">
|
||||
<source>No tasks available!</source>
|
||||
<target>Нет доступных задач!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">No tasks label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5615896113581458384" datatype="html">
|
||||
<source>Successfully ran task!</source>
|
||||
<target>Задача успешно запущена!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2106110452479146311" datatype="html">
|
||||
<source>Failed to run task!</source>
|
||||
<target>Не удалось запустить задачу!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4707127982271899773" datatype="html">
|
||||
<source>Successfully confirmed task!</source>
|
||||
<target>Задача успешно подтверждена!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4334913030311371594" datatype="html">
|
||||
<source>Would you like to reset your tasks? All your schedules will be removed as well.</source>
|
||||
<target>Хотите ли вы сбросить ваши задачи? Все отложенные задачи также будут удалены.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">133</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">
|
||||
<source>Restore</source>
|
||||
<target>Восстановить</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="998793c78895d53576f462054f13d6e515e923d9" datatype="html">
|
||||
<source>Update task schedule</source>
|
||||
<target>Обновить расписание задачи</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update task schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">
|
||||
<source>Enabled</source>
|
||||
<target>Включено</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Enabled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="67aed6c588eb854f2f30ef642e85147da0027a61" datatype="html">
|
||||
<source>Recurring</source>
|
||||
<target>Повторяющиеся</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Recurring</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">
|
||||
<source>Update</source>
|
||||
<target>Обновить</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="fd374bee82dab66055b933496860f82b7b780159" datatype="html">
|
||||
<source>Global custom args for downloads on the home page. (Set args for subscriptions for each subscriptions separately!) Args are delimited using two commas like so: ,,</source>
|
||||
<target>Глобальные пользовательские аргументы для загрузок на домашней странице. (Установите аргументы подписок для каждой подписки отдельно!) Аргументы разделяются, используя две запятые, как здесь: ,,</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Custom args setting input hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5588424857086384816" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target>Сбросить задачи</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">132</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9121124215111024650" datatype="html">
|
||||
<source>Failed to confirm task!</source>
|
||||
<target>Не удалось подтвердить задачу!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">92</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7808756054397155068" datatype="html">
|
||||
<source>Reset</source>
|
||||
<target>Сбросить</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">134</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1709994363138824316" datatype="html">
|
||||
<source>Failed to reset tasks!</source>
|
||||
<target>Не удалось сбросить задачи!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8612475568724527886" datatype="html">
|
||||
<source>Tasks successfully reset!</source>
|
||||
<target>Задачи успешно сброшены!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">142</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en-US" datatype="plaintext" original="ng2.template" target-language="zh-Hans">
|
||||
<body>
|
||||
@@ -289,7 +289,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="19d1ae64d94d28a29b2c57ae8671aace906b5401" datatype="html">
|
||||
<source>Path is relative to the config download path. Don't include extension.</source>
|
||||
<target>该路径是相对于配置下载路径的,省略文件扩展名</target>
|
||||
<target state="translated">该路径是相对于配置中的下载路径,省略文件扩展名。</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/main/main.component.html</context>
|
||||
<context context-type="linenumber">131</context>
|
||||
@@ -733,7 +733,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="4bee2a4bef2d26d37c9b353c278e24e5cd309ce3" datatype="html">
|
||||
<source>Subscriptions base path</source>
|
||||
<target>订阅文件路径</target>
|
||||
<target>订阅基路径</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
@@ -902,8 +902,8 @@
|
||||
<note priority="1" from="description">Video path setting input hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="6b995e7130b4d667eaab6c5f61b362ace486d26d" datatype="html">
|
||||
<source>Global custom args for downloads on the home page. Args are delimited using two commas like so: ,,</source>
|
||||
<target>开始页面上用于下载的全局自定义参数。参数由两个逗号分隔:,,</target>
|
||||
<source>Global custom args for downloads on the home page. (Set args for subscriptions for each subscriptions separately!) Args are delimited using two commas like so: ,,</source>
|
||||
<target>开始页面上用于下载的全局自定义参数。(单独为每个订阅设置订阅参数!) 参数由两个逗号分隔:,,</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">146</context>
|
||||
@@ -1863,7 +1863,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="7117fc42f860e86d983bfccfcf2654e5750f3406" datatype="html">
|
||||
<source>No downloads available!</source>
|
||||
<target>没有下载可用!</target>
|
||||
<target state="translated">无可用下载!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
@@ -2312,7 +2312,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="56a2a773fbd5a6b9ac2e6b89d29d70a2ed0f3227" datatype="html">
|
||||
<source>See less.</source>
|
||||
<target>查看更少</target>
|
||||
<target state="translated">查看更少。</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/see-more/see-more.component.html</context>
|
||||
<context context-type="linenumber">8,9</context>
|
||||
@@ -2361,7 +2361,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="84ffcebac2709ca0785f4a1d5ba274433b5beabc" datatype="html">
|
||||
<source>Also known as a Client ID.</source>
|
||||
<target>也称为客户ID</target>
|
||||
<target state="translated">也称为客户ID。</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
@@ -2496,7 +2496,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="73423607944a694ce6f9e55cfee329681bb4d9f9" datatype="html">
|
||||
<source>No videos found.</source>
|
||||
<target>找不到视频</target>
|
||||
<target state="translated">找不到视频。</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
@@ -2602,7 +2602,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="98e94c9bdac1ca8beb29d73b2e6f7a9e5e035aec" datatype="html">
|
||||
<source>Transfer DB to</source>
|
||||
<target>数据库转移到</target>
|
||||
<target state="translated">转移数据库到</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">308</context>
|
||||
@@ -2629,7 +2629,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="3913164a51898aac444bf6c7150e46ad5a8a18ad" datatype="html">
|
||||
<source>MongoDB Connection String</source>
|
||||
<target>MongoDB 连接字符串</target>
|
||||
<target state="translated">MongoDB URI 连接</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">299</context>
|
||||
@@ -2717,6 +2717,732 @@
|
||||
</context-group>
|
||||
<note priority="1" from="description">Crop video checkbox</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7180002287537831534" datatype="html">
|
||||
<source>Clear finished downloads</source>
|
||||
<target state="translated">清空已完成任务</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">129</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8738732372986673558" datatype="html">
|
||||
<source>Copy to clipboard</source>
|
||||
<target state="translated">复制到剪切板</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">240</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8700121026680200191" datatype="html">
|
||||
<source>Clear</source>
|
||||
<target state="translated">清空</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">131</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2560364143605631750" datatype="html">
|
||||
<source>Error for <x id="url" equiv-text="download['url']"/></source>
|
||||
<target state="translated"><x id="url" equiv-text="download['url']"/> 报错</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7819314041543176992" datatype="html">
|
||||
<source>Close</source>
|
||||
<target state="translated">关闭</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">241</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3795459839164395144" datatype="html">
|
||||
<source>Copied to clipboard!</source>
|
||||
<target state="translated">已复制到剪切板!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2f933b826a570836cab04f683970a2d22068458c" datatype="html">
|
||||
<source>Date</source>
|
||||
<target state="translated">日期</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Date</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="b2838c6165a9672a17db188f4dd9676574353dd8" datatype="html">
|
||||
<source>Pause</source>
|
||||
<target state="translated">暂停</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Pause</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4cd979821c89535df23df1c8ac8f260673610d90" datatype="html">
|
||||
<source>Resume</source>
|
||||
<target state="translated">继续</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Resume</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1709994363138824316" datatype="html">
|
||||
<source>Failed to reset tasks!</source>
|
||||
<target state="translated">重置失败!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="49e09cce4426975ba06c1667063d2c1df9c94362" datatype="html">
|
||||
<source>Autoplay</source>
|
||||
<target state="translated">自动播放</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.html</context>
|
||||
<context context-type="linenumber">70,72</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Autoplay checkbox</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="87fd779c638aa5d04e006cd61890b0584c2da385" datatype="html">
|
||||
<source>Replace args</source>
|
||||
<target state="translated">替换参数</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.html</context>
|
||||
<context context-type="linenumber">116,118</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Replace args</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e243d8408e1a3d2ef6501b85899d02374ea34880" datatype="html">
|
||||
<source>Generates NFO files with every download, primarily used by Kodi.</source>
|
||||
<target state="translated">每次下载创建一个主要由 Kodi 使用的 NFO 文件。</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Generate NFO files tooltip</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7307570005283604795" datatype="html">
|
||||
<source>You must enable multi-user mode to access this tab.</source>
|
||||
<target state="translated">启用多用户模式来访问此页面。</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">48</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c55604d30653e3d8310190d8d26761226132a901" datatype="html">
|
||||
<source>Enables a button to skip ads when viewing supported videos.</source>
|
||||
<target state="translated">观看视频时启用跳过广告按钮。</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">SponsorBlock API tooltip</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="fdf7cbdc140d0aab0f0b6c06065a0fd448ed6a2e" datatype="html">
|
||||
<source>Title</source>
|
||||
<target state="translated">标题</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">6</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="47bbc861efa59ba4135e6aa8f63213420e3f3b91" datatype="html">
|
||||
<source>Subscription</source>
|
||||
<target state="translated">订阅</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Subscription</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="15793f4cbc261bedbc60f7105533dde536a3f42b" datatype="html">
|
||||
<source>Progress</source>
|
||||
<target state="translated">进度</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Progress</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="030b4423b92167200e39519599f9b863b4f7c62c" datatype="html">
|
||||
<source>Actions</source>
|
||||
<target state="translated">操作</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Actions</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="72c341bca7ebacc66e8a13f1a527d500619e89ff" datatype="html">
|
||||
<source>Stage</source>
|
||||
<target state="translated">状态</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Stage</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9b2084f9aea764292cf0978cb083907d8be51bf7" datatype="html">
|
||||
<source>Resume all downloads</source>
|
||||
<target state="translated">全部开始</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Resume all downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="b6d79c6ff771d7b86ce572306867a1705200f957" datatype="html">
|
||||
<source>Restart</source>
|
||||
<target state="translated">重新开始</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">66</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restart</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="601a28988581b5398ca6471027487e098d236e0e" datatype="html">
|
||||
<source>Clear finished downloads</source>
|
||||
<target state="translated">清空已完成任务</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear finished downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="b36b7458192b833592e13029fa8a0b3555e0d9bd" datatype="html">
|
||||
<source>Pause all downloads</source>
|
||||
<target state="translated">全部暂停</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Pause all downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="50e85c3b33fb74c0d3c0f97182611f6c1d9cf10e" datatype="html">
|
||||
<source>Add to playlist</source>
|
||||
<target state="translated">添加到播放列表</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/unified-file-card/unified-file-card.component.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Add to playlist menu item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="586a5fd72602b5b14ec0c55f84814de47bb21e3a" datatype="html">
|
||||
<source>Tasks</source>
|
||||
<target state="translated">任务</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/app.component.html</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Navigation menu Tasks Page title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html">
|
||||
<source>Clear</source>
|
||||
<target state="translated">清空</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="2827589726081052618" datatype="html">
|
||||
<source>Creating download</source>
|
||||
<target state="translated">新建下载</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4027175717527633324" datatype="html">
|
||||
<source>Getting info</source>
|
||||
<target state="translated">获取信息</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8384225360105280028" datatype="html">
|
||||
<source>Complete</source>
|
||||
<target state="translated">完成</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">61</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8007838850199625121" datatype="html">
|
||||
<source>Would you like to clear your finished downloads?</source>
|
||||
<target state="translated">是否要清空已完成的下载任务?</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">130</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="54cb4c7c3a0da911ebda5a07666b448868020308" datatype="html">
|
||||
<source>Show error</source>
|
||||
<target state="translated">查看错误</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">65</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Show error</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="73a7ade062c611e4bc92f3a4c672bee29b8aae9d" datatype="html">
|
||||
<source>Watch content</source>
|
||||
<target state="translated">查看内容</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">64</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Watch content</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7724483709075923163" datatype="html">
|
||||
<source>Downloading file</source>
|
||||
<target state="translated">下载中</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b4e61d531b8db72449f043f122119da964f4fc54" datatype="html">
|
||||
<source>File type</source>
|
||||
<target state="translated">文件类型</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">File type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4e1fdb6039c7c6b7630ed70d6d20eb0c9db7d342" datatype="html">
|
||||
<source>Video only</source>
|
||||
<target state="translated">只视频</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Video only</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="742202f9ba533bc9a92a1aec2862b0485c5f601b" datatype="html">
|
||||
<source>Audio only</source>
|
||||
<target state="translated">仅音频</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Audio only</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="82dbc50a84e5c0865aa27479b8ce82da3a85d29b" datatype="html">
|
||||
<source>Skip ad</source>
|
||||
<target state="translated">跳过广告</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/skip-ad-button/skip-ad-button.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Skip ad button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e4c3cd97461b220b9cea67cfe08c5399799cfeed" datatype="html">
|
||||
<source>Last ran</source>
|
||||
<target state="translated">上次运行</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last ran</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="81b97b8ea996ad1e4f9fca8415021850214884b1" datatype="html">
|
||||
<source>Status</source>
|
||||
<target state="translated">状态</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d97425ce76bf3df50bcb643b5f409844770458f6" datatype="html">
|
||||
<source>Busy</source>
|
||||
<target state="translated">繁忙</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Busy</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4391397241847e675f6c38bbdec6b2883157fb1a" datatype="html">
|
||||
<source>Clear duplicate files from DB:</source>
|
||||
<target state="translated">清除数据库中重复的文件:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear duplicate files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ff9ae1f4c26bf2ddf6e9d5e4136916c5ce6a941" datatype="html">
|
||||
<source>Clear missing files from DB:</source>
|
||||
<target state="translated">清除数据库中缺失的文件:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">57</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear missing files from DB</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9562dd1e902acc4cc6a6e09cba66a2775daf7794" datatype="html">
|
||||
<source>Update binary to:</source>
|
||||
<target state="translated">升级二进制文件:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update binary to</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a4f46a2dcec36bd5c8c371ceee55c2226dec27f" datatype="html">
|
||||
<source>Schedule</source>
|
||||
<target state="translated">计划</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">72</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="40bd7093f5fbd3fbeff9a50baaf5d4c8416add1e" datatype="html">
|
||||
<source>Restore DB from backup</source>
|
||||
<target state="translated">从备份中恢复数据库</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore DB from backup button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f8a2361f3bd8fb05bf92080e2755bddd56ab64d7" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target state="translated">重设任务</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Reset tasks button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9b3d305551358858e1892169a94527e0cc4dbf5b" datatype="html">
|
||||
<source>Run</source>
|
||||
<target state="translated">运行</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">69</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Run</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="698f716f927f633b16cbe2308d90b2dba51f7556" datatype="html">
|
||||
<source>Last confirmed</source>
|
||||
<target state="translated">上次确认</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Last confirmed</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5e96c9d4528bf259da3944daac3171d7462b065a" datatype="html">
|
||||
<source>No tasks available!</source>
|
||||
<target state="translated">无可用任务!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">No tasks label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5615896113581458384" datatype="html">
|
||||
<source>Successfully ran task!</source>
|
||||
<target state="translated">运行成功!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2106110452479146311" datatype="html">
|
||||
<source>Failed to run task!</source>
|
||||
<target state="translated">运行失败!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5588424857086384816" datatype="html">
|
||||
<source>Reset tasks</source>
|
||||
<target state="translated">重置任务</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">132</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4334913030311371594" datatype="html">
|
||||
<source>Would you like to reset your tasks? All your schedules will be removed as well.</source>
|
||||
<target state="translated">是否确认重置所有任务?您的所有计划都将被移除。</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">133</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7808756054397155068" datatype="html">
|
||||
<source>Reset</source>
|
||||
<target state="translated">重置</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">134</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8612475568724527886" datatype="html">
|
||||
<source>Tasks successfully reset!</source>
|
||||
<target state="translated">重置成功!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">142</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9121124215111024650" datatype="html">
|
||||
<source>Failed to confirm task!</source>
|
||||
<target state="translated">任务确认失败!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">90</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">92</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4707127982271899773" datatype="html">
|
||||
<source>Successfully confirmed task!</source>
|
||||
<target state="translated">任务确认成功!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.ts</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="71e477b9cfa411def3404c5fe57d3986772c54e8" datatype="html">
|
||||
<source>Installation type:</source>
|
||||
<target state="translated">安装类型:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Installation type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="17afa163f202c8ee76e5b731f4bbdd9920fc4a18" datatype="html">
|
||||
<source>Docker tag:</source>
|
||||
<target state="translated">Docker 标签:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Docker tag</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="682ca154aba791fe87aa293b29c921247e12da9c" datatype="html">
|
||||
<source>Commit hash:</source>
|
||||
<target state="translated">Commit hash:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Commit hash</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4ae1f7f102b455472992ae58bc18426316366760" datatype="html">
|
||||
<source>Build date:</source>
|
||||
<target state="translated">构建日期:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/about-dialog/about-dialog.component.html</context>
|
||||
<context context-type="linenumber">33</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Build date</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d5cec7468241d72cafd86ad1af6d55b09a6e3ae5" datatype="html">
|
||||
<source>Restore</source>
|
||||
<target state="translated">恢复</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.html</context>
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Restore button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f50a33d3c339f8f4a465141f8caa5d2d8c005251" datatype="html">
|
||||
<source>Enabled</source>
|
||||
<target state="translated">已启用</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Enabled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="998793c78895d53576f462054f13d6e515e923d9" datatype="html">
|
||||
<source>Update task schedule</source>
|
||||
<target state="translated">更新任务计划</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">1</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update task schedule</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="047f50bc5b5d17b5bec0196355953e1a5c590ddb" datatype="html">
|
||||
<source>Update</source>
|
||||
<target state="translated">更新</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">52</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Update button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7220285196408439810" datatype="html">
|
||||
<source>Download for <x id="url" equiv-text="url"/> has been queued!</source>
|
||||
<target state="translated"><x id="url" equiv-text="url"/> 下载已添加到队列中!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.ts</context>
|
||||
<context context-type="linenumber">403</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fd374bee82dab66055b933496860f82b7b780159" datatype="html">
|
||||
<source>Global custom args for downloads on the home page. (Set args for subscriptions for each subscriptions separately!) Args are delimited using two commas like so: ,,</source>
|
||||
<target state="translated">用于主页下载的全局性自定义变量。(为每个订阅单独设置变量!)变量间使用两个逗号来分隔,例如:, ,</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">128</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Custom args setting input hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="6c2714fbfa525868fea90cc7a8f8de62458fbecf" datatype="html">
|
||||
<source>Max concurrent downloads</source>
|
||||
<target state="translated">同时下载任务数</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">177</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Max concurrent downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4f9f174dc9939283b3192acc9e87d6c1e4cca118" datatype="html">
|
||||
<source>Limits the amount of downloads that can be simultaneously downloaded. Use -1 for no limit.</source>
|
||||
<target state="translated">限制同时下载数。-1 表示无限制。</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">178</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Max concurrent downloads input hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="a30fc9944a494022ba67b3046ad3d27c62dd7fee" datatype="html">
|
||||
<source>Download rate limit</source>
|
||||
<target state="translated">下载限速</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Download rate limit input placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="0af5ee1867be592a6cd35a94faba8833b52c740f" datatype="html">
|
||||
<source>Rate limits your downloads to the specified amount. Ex: 200K</source>
|
||||
<target state="translated">将您的最大下载速率限制为指定数字。例如:200K</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Download rate limit input hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4920978fc336333b5cda11b1dedf172c3183d2da" datatype="html">
|
||||
<source>Allow autoplay</source>
|
||||
<target state="translated">允许自动播放</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Allow autoplay setting</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4c8f776635ead63103de9d21b28e95eceaf5ab53" datatype="html">
|
||||
<source>Use SponsorBlock API</source>
|
||||
<target state="translated">使用 SponsorBlock API</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Use SponsorBlock API setting</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e65fce85d6177d3582b376f9d622daebca5ee0da" datatype="html">
|
||||
<source>Generate NFO files</source>
|
||||
<target state="translated">生成 NFO 文件</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Generate NFO files setting</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="a47b663952ecf47fd8bc942a1c08ff0d3893bba5" datatype="html">
|
||||
<source>Both</source>
|
||||
<target state="translated">全部</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">54</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Both</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="84a36cb75660b736773fe36ffa3d54f0f0fe363e" datatype="html">
|
||||
<source>N/A</source>
|
||||
<target state="translated">N/A</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">N/A</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7e121a443a8e9d92218f987001b650c59504d815" datatype="html">
|
||||
<source>Scheduled for</source>
|
||||
<target state="translated">计划于</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3b7d6ff5d14ab177ce3e2d217b1927fb2e4aefd1" datatype="html">
|
||||
<source>Not scheduled</source>
|
||||
<target state="translated">尚未计划</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/tasks/tasks.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Not scheduled</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="67aed6c588eb854f2f30ef642e85147da0027a61" datatype="html">
|
||||
<source>Recurring</source>
|
||||
<target state="translated">重复</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Recurring</note>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
7
src/bootstrap.min.css
vendored
Normal file
7
src/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
src/fonts/KFOmCnqEu92Fr1Mu4WxKOzY.woff2
Normal file
BIN
src/fonts/KFOmCnqEu92Fr1Mu4WxKOzY.woff2
Normal file
Binary file not shown.
BIN
src/fonts/KFOmCnqEu92Fr1Mu4mxK.woff2
Normal file
BIN
src/fonts/KFOmCnqEu92Fr1Mu4mxK.woff2
Normal file
Binary file not shown.
BIN
src/fonts/KFOmCnqEu92Fr1Mu5mxKOzY.woff2
Normal file
BIN
src/fonts/KFOmCnqEu92Fr1Mu5mxKOzY.woff2
Normal file
Binary file not shown.
BIN
src/fonts/KFOmCnqEu92Fr1Mu72xKOzY.woff2
Normal file
BIN
src/fonts/KFOmCnqEu92Fr1Mu72xKOzY.woff2
Normal file
Binary file not shown.
BIN
src/fonts/KFOmCnqEu92Fr1Mu7GxKOzY.woff2
Normal file
BIN
src/fonts/KFOmCnqEu92Fr1Mu7GxKOzY.woff2
Normal file
Binary file not shown.
BIN
src/fonts/KFOmCnqEu92Fr1Mu7WxKOzY.woff2
Normal file
BIN
src/fonts/KFOmCnqEu92Fr1Mu7WxKOzY.woff2
Normal file
Binary file not shown.
BIN
src/fonts/KFOmCnqEu92Fr1Mu7mxKOzY.woff2
Normal file
BIN
src/fonts/KFOmCnqEu92Fr1Mu7mxKOzY.woff2
Normal file
Binary file not shown.
68
src/fonts/fonts.css
Normal file
68
src/fonts/fonts.css
Normal file
@@ -0,0 +1,68 @@
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(/fonts//KFOmCnqEu92Fr1Mu72xKOzY.woff2) format("woff2");
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F,
|
||||
U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(/fonts//KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format("woff2");
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(/fonts//KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format("woff2");
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(/fonts//KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format("woff2");
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(/fonts//KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format("woff2");
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1,
|
||||
U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(/fonts//KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format("woff2");
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB,
|
||||
U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(/fonts//KFOmCnqEu92Fr1Mu4mxK.woff2) format("woff2");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
||||
U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
|
||||
U+FEFF, U+FFFD;
|
||||
}
|
||||
@@ -1,17 +1,17 @@
|
||||
<!doctype html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>YoutubeDLMaterial</title>
|
||||
<base href="./">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>YoutubeDLMaterial</title>
|
||||
<base href="./" />
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
|
||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
|
||||
</head>
|
||||
<body>
|
||||
<app-root></app-root>
|
||||
</body>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<link href="/fonts/fonts.css" rel="stylesheet" />
|
||||
<link rel="icon" type="image/x-icon" href="favicon.ico" />
|
||||
<link rel="stylesheet" href="/bootstrap.min.css" />
|
||||
</head>
|
||||
<body>
|
||||
<app-root></app-root>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -33,7 +33,18 @@ async function createLocalizationJSON() {
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const file = path.basename(files[i]);
|
||||
const file_parts = file.split('.');
|
||||
locales.push(file_parts[1]);
|
||||
if (file_parts.length !== 3 || file_parts[1] === 'en') continue;
|
||||
try {
|
||||
const locale_json = fs.readJSONSync(files[i]);
|
||||
const locale_json_keys = Object.keys(locale_json);
|
||||
let has_defined_keys = false;
|
||||
for (let i = 0; i < locale_json_keys.length; i++) {
|
||||
if (locale_json[locale_json_keys[i]] !== '') has_defined_keys = true;
|
||||
}
|
||||
if (has_defined_keys) locales.push(file_parts[1]);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
fs.unlinkSync('src/assets/i18n/messages.en.json');
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user