mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2026-09-08 19:50:15 -04:00
Compare commits
210
Commits
5.1.0Beta2
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0561dca19a | ||
|
|
b6bb27bf9b | ||
|
|
d73cdc7397 | ||
|
|
c01371a6af | ||
|
|
d8188b5428 | ||
|
|
7d9056736f | ||
|
|
9c76f05b69 | ||
|
|
675d7714ca | ||
|
|
bcd1585ea1 | ||
|
|
9d365facaa | ||
|
|
948500799a | ||
|
|
d8815ef983 | ||
|
|
ff537363c6 | ||
|
|
b58a25df07 | ||
|
|
1ce8faafeb | ||
|
|
7dbecb0a2d | ||
|
|
8343f182aa | ||
|
|
d3f691e695 | ||
|
|
d25d857fc4 | ||
|
|
64f342ca1d | ||
|
|
ab3ba4a53a | ||
|
|
169a42b08c | ||
|
|
6cbe811d10 | ||
|
|
33ff6800d2 | ||
|
|
ec61683097 | ||
|
|
069f978e64 | ||
|
|
c65ce5d5aa | ||
|
|
443b34ce55 | ||
|
|
fbe07dfb7e | ||
|
|
168622ea47 | ||
|
|
ab702860df | ||
|
|
4a999a1908 | ||
|
|
975c552a6a | ||
|
|
20915cc626 | ||
|
|
4fde6e490c | ||
|
|
58c3c13954 | ||
|
|
7b3d1d41ab | ||
|
|
cb1102d992 | ||
|
|
ecf5e27c04 | ||
|
|
cd96dadcc3 | ||
|
|
fb2660dbb9 | ||
|
|
f9cb5b302b | ||
|
|
614b3faca6 | ||
|
|
e4162b093a | ||
|
|
e1009e1e92 | ||
|
|
f8781e1e35 | ||
|
|
be5d394ebd | ||
|
|
55285c5cf9 | ||
|
|
c3f6b2d582 | ||
|
|
5088e14fa6 | ||
|
|
139b4a52b6 | ||
|
|
7a852e8654 | ||
|
|
fd9acd2ea8 | ||
|
|
eb673d3956 | ||
|
|
f7513c05b9 | ||
|
|
e3bc15e8e6 | ||
|
|
b263c6cfe6 | ||
|
|
d990a17424 | ||
|
|
38c2a7bca7 | ||
|
|
e2a4d9953b | ||
|
|
5696a667e7 | ||
|
|
0651dd7a3a | ||
|
|
b192a7eca4 | ||
|
|
75f7db398a | ||
|
|
90f092a1a5 | ||
|
|
f498147189 | ||
|
|
e36d989ee5 | ||
|
|
e0acbd75e2 | ||
|
|
2ce13bdd9a | ||
|
|
93546e5b7a | ||
|
|
5973e5b6ed | ||
|
|
0fe92487b6 | ||
|
|
743ff89cff | ||
|
|
43f22b579f | ||
|
|
817ea452ba | ||
|
|
8c21f47f4c | ||
|
|
3813a810ed | ||
|
|
602464349f | ||
|
|
bdd821233f | ||
|
|
611dfa74d2 | ||
|
|
21d639bf5f | ||
|
|
6d897a5f23 | ||
|
|
537ac2e7a4 | ||
|
|
cb2c44cfc2 | ||
|
|
adde7b961c | ||
|
|
9639d651f4 | ||
|
|
f481496e5d | ||
|
|
e0bf9218bb | ||
|
|
19b597d21b | ||
|
|
86a2025eca | ||
|
|
0996998ed9 | ||
|
|
583617f0a9 | ||
|
|
d45a1d8bf0 | ||
|
|
2e99fd6fd0 | ||
|
|
cf26260910 | ||
|
|
59218a687d | ||
|
|
61df709a04 | ||
|
|
1fcada54f9 | ||
|
|
289b91a3de | ||
|
|
35d5355f49 | ||
|
|
ec6ba3baae | ||
|
|
d6474cb695 | ||
|
|
4520de77ad | ||
|
|
ada9d83593 | ||
|
|
58386e0b61 | ||
|
|
4601f4b690 | ||
|
|
fd191d1b79 | ||
|
|
5014673f87 | ||
|
|
14ce150b31 | ||
|
|
8e39722359 | ||
|
|
ba36e62695 | ||
|
|
250a4dbf2a | ||
|
|
3867cefa0a | ||
|
|
d530764a6d | ||
|
|
b5a7385d48 | ||
|
|
40860c68ca | ||
|
|
3213cd74cf | ||
|
|
b8838c4728 | ||
|
|
047ed77dd4 | ||
|
|
78cb553b14 | ||
|
|
c5ebea7bbd | ||
|
|
7b02c74386 | ||
|
|
0c3464e6a2 | ||
|
|
d889d4fd30 | ||
|
|
70f89e98e8 | ||
|
|
2cb12a07c9 | ||
|
|
3d7f5d4289 | ||
|
|
3abf4c7bdb | ||
|
|
947b2b815c | ||
|
|
d167fb0fe7 | ||
|
|
b7da5b6684 | ||
|
|
df9c57f539 | ||
|
|
d5a7f8631c | ||
|
|
dcb618ce99 | ||
|
|
dc5620a52c | ||
|
|
40a3941b9e | ||
|
|
eb9229d326 | ||
|
|
0411e8acc1 | ||
|
|
f405b8927a | ||
|
|
47a507f5a6 | ||
|
|
bdca9715b2 | ||
|
|
0954ac143d | ||
|
|
9122633907 | ||
|
|
1b6aea3afb | ||
|
|
af10190e0b | ||
|
|
1acfc5139c | ||
|
|
404060373b | ||
|
|
a84544bef8 | ||
|
|
f38b602924 | ||
|
|
db57321cb8 | ||
|
|
b825636d3f | ||
|
|
fa3f8735ea | ||
|
|
c359b21d89 | ||
|
|
3ab1782dc2 | ||
|
|
91c228353b | ||
|
|
1336d66f78 | ||
|
|
1f7bec651d | ||
|
|
8f02e59c31 | ||
|
|
efb16cc69b | ||
|
|
f6020aa9f7 | ||
|
|
2d2b88e771 | ||
|
|
6731da2d68 | ||
|
|
cf8ab5a8d5 | ||
|
|
636aa91e21 | ||
|
|
a1c9a8aab1 | ||
|
|
73e7dd8084 | ||
|
|
6eb257388b | ||
|
|
ba2099d006 | ||
|
|
8f044bb19e | ||
|
|
889fbf688d | ||
|
|
ab879cc7d0 | ||
|
|
5b7a89ffb8 | ||
|
|
1eed5c7866 | ||
|
|
44777dc3cf | ||
|
|
c91b53d290 | ||
|
|
ef2ee17c13 | ||
|
|
a2aec15a38 | ||
|
|
73af985e60 | ||
|
|
988955374c | ||
|
|
28eaa6c20d | ||
|
|
5c247e008c | ||
|
|
bf02e9da44 | ||
|
|
fb9dbcf824 | ||
|
|
6a85b2daea | ||
|
|
a2ac2b0435 | ||
|
|
8a92f4ac71 | ||
|
|
2556ef10c2 | ||
|
|
661b4ae535 | ||
|
|
0bcb28d576 | ||
|
|
02ced74783 | ||
|
|
8afb8a91e2 | ||
|
|
dc421047d3 | ||
|
|
7fd2848278 | ||
|
|
ef8df5b578 | ||
|
|
1b4525656f | ||
|
|
fd6d8c71c7 | ||
|
|
2e202eca23 | ||
|
|
6b76603c60 | ||
|
|
e929a0c6b6 | ||
|
|
ee8d9bdcf9 | ||
|
|
d9cd7a72b1 | ||
|
|
6112ded96b | ||
|
|
dbe7cb336d | ||
|
|
376fc8a1bf | ||
|
|
9e09817722 | ||
|
|
6db37d9883 | ||
|
|
2a9e9954a8 | ||
|
|
e3e7fcf361 | ||
|
|
b057bc6afc | ||
|
|
1b368a4278 |
No files matched your search
@@ -45,7 +45,8 @@
|
||||
"jaraco.text",
|
||||
"jaraco.context",
|
||||
"jaraco.collections",
|
||||
"tempora"
|
||||
"tempora",
|
||||
"cryptography"
|
||||
],
|
||||
"packageRules": [
|
||||
{
|
||||
|
||||
@@ -6,9 +6,12 @@ concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
# Setting PYTHONNODEBUGRANGES reduces binary size
|
||||
env:
|
||||
# Setting PYTHONNODEBUGRANGES reduces binary size
|
||||
PYTHONNODEBUGRANGES: 1
|
||||
# For macOS we download the official Python, because the GitHub one only support newer macOS 11+ versions
|
||||
# We also use the specific pin for Windows release, so Renovate can update it all at once
|
||||
PYTHON_VERSION: "3.14.7"
|
||||
|
||||
jobs:
|
||||
build_windows:
|
||||
@@ -26,11 +29,11 @@ jobs:
|
||||
runs-on: ${{ matrix.runs-on }}
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v6
|
||||
uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version: "3.14"
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
architecture: ${{ matrix.architecture }}
|
||||
cache: pip
|
||||
cache-dependency-path: "**/requirements.txt"
|
||||
@@ -110,26 +113,24 @@ jobs:
|
||||
runs-on: macos-14
|
||||
timeout-minutes: 15
|
||||
env:
|
||||
# We need the official Python, because the GA ones only support newer macOS versions
|
||||
# The deployment target is picked up by the Python build tools automatically
|
||||
# If updated, make sure to also set LSMinimumSystemVersion in SABnzbd.spec
|
||||
PYTHON_VERSION: "3.14.5"
|
||||
MACOSX_DEPLOYMENT_TARGET: "10.15"
|
||||
# We need to force compile for universal2 support
|
||||
CFLAGS: -arch x86_64 -arch arm64
|
||||
ARCHFLAGS: -arch x86_64 -arch arm64
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
- name: Set up Python
|
||||
# Only use this for the caching of pip packages!
|
||||
uses: actions/setup-python@v6
|
||||
uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version: "3.14"
|
||||
cache: pip
|
||||
cache-dependency-path: "**/requirements.txt"
|
||||
- name: Cache Python download
|
||||
id: cache-python-download
|
||||
uses: actions/cache@v5
|
||||
uses: actions/cache@v6
|
||||
with:
|
||||
path: ~/python.pkg
|
||||
key: cache-macOS-Python-${{ env.PYTHON_VERSION }}
|
||||
@@ -143,7 +144,7 @@ jobs:
|
||||
run: |
|
||||
python3 --version
|
||||
pip3 install --upgrade pip wheel
|
||||
pip3 install -r requirements.txt --no-binary cffi,CT3,PyYAML --no-dependencies
|
||||
pip3 install -r requirements.txt --no-binary cffi,CT3,PyYAML,httptools --no-dependencies
|
||||
pip3 install -r builder/requirements.txt --no-dependencies
|
||||
- name: Import macOS codesign certificates
|
||||
# Taken from https://github.com/Apple-Actions/import-codesign-certs/pull/27 (comments)
|
||||
@@ -188,9 +189,9 @@ jobs:
|
||||
if: contains(github.ref, 'refs/tags/')
|
||||
environment: release
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v6
|
||||
uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version: "3.14"
|
||||
cache: pip
|
||||
@@ -213,6 +214,9 @@ jobs:
|
||||
env:
|
||||
AUTOMATION_GITHUB_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
|
||||
REDDIT_TOKEN: ${{ secrets.REDDIT_TOKEN }}
|
||||
LINUXSERVER_WEBHOOK_TOKEN: ${{ secrets.LINUXSERVER_WEBHOOK_TOKEN }}
|
||||
DISCORD_WEBHOOK_TESTING: ${{ secrets.DISCORD_WEBHOOK_TESTING }}
|
||||
DISCORD_WEBHOOK_STABLE: ${{ secrets.DISCORD_WEBHOOK_STABLE }}
|
||||
run: |
|
||||
pip3 install -r builder/release-requirements.txt --no-dependencies
|
||||
python3 builder/release.py
|
||||
@@ -34,9 +34,9 @@ jobs:
|
||||
linux_arch: arm64
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
- name: Cache par2cmdline-turbo tarball
|
||||
uses: actions/cache@v5
|
||||
uses: actions/cache@v6
|
||||
id: cache-par2cmdline
|
||||
# Clearing the cache in case of new version requires manual clearing in GitHub!
|
||||
with:
|
||||
@@ -54,8 +54,16 @@ jobs:
|
||||
run: |
|
||||
sudo snap install --dangerous *.snap
|
||||
sudo snap connect sabnzbd:removable-media
|
||||
# Basic smoke test - check that the binary exists and can show help
|
||||
timeout 10s snap run sabnzbd --help || true
|
||||
# Installing a daemon snap starts the service automatically.
|
||||
if ! curl -fsSL -o /dev/null \
|
||||
--retry 30 --retry-delay 2 --retry-connrefused --retry-all-errors \
|
||||
http://127.0.0.1:8080/; then
|
||||
echo "::error::SABnzbd web UI did not come up"
|
||||
sudo snap logs sabnzbd -n 200 || true
|
||||
systemctl status snap.sabnzbd.sabnzbd.service --no-pager || true
|
||||
exit 1
|
||||
fi
|
||||
echo "SABnzbd web UI responded"
|
||||
sudo snap remove sabnzbd
|
||||
- name: Upload snap
|
||||
uses: actions/upload-artifact@v7
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
name: "Claude Review (manual)"
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
issues: read
|
||||
|
||||
jobs:
|
||||
review:
|
||||
name: "Review PR on @claude mention"
|
||||
# Only PR comments containing @claude, and only from maintainers
|
||||
if: >
|
||||
github.repository_owner == 'sabnzbd' &&
|
||||
github.event.issue.pull_request &&
|
||||
contains(github.event.comment.body, '@claude') &&
|
||||
contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
# Full history so the review can diff the PR against its base branch
|
||||
fetch-depth: 0
|
||||
- uses: anthropics/claude-code-action@v1
|
||||
with:
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
# Actual triggering is gated by the job-level `if` above; this disables
|
||||
# the action's internal write-permission check, which contributors fail
|
||||
allowed_non_write_users: "*"
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
name: Black and Ruff checks
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
- run: pip install ruff black
|
||||
- name: Black code formatter
|
||||
run: >
|
||||
@@ -38,7 +38,8 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14" ]
|
||||
# TODO: Remove libxml2-dev libxslt-dev below once 3.15 is stable and lxml releases wheels!
|
||||
python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14", "3.15-dev" ]
|
||||
name: ["Linux"]
|
||||
os: [ubuntu-latest]
|
||||
include:
|
||||
@@ -50,21 +51,23 @@ jobs:
|
||||
python-version: "3.14"
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v6
|
||||
uses: actions/setup-python@v7
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: pip
|
||||
cache-dependency-path: "**/requirements.txt"
|
||||
- name: Install system dependencies
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo apt-get install unrar 7zip par2
|
||||
run: sudo apt-get install unrar 7zip par2 libxml2-dev libxslt-dev
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
python --version
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install -r requirements.txt --no-dependencies
|
||||
pip install --upgrade -r tests/requirements.txt
|
||||
- name: Install Playwright browser
|
||||
run: python -m playwright install chromium --with-deps
|
||||
- name: Test SABnzbd
|
||||
run: pytest -s
|
||||
run: pytest -n auto --dist loadscope
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
if: github.repository_owner == 'sabnzbd'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v10
|
||||
- uses: actions/stale@v11
|
||||
with:
|
||||
days-before-stale: 21
|
||||
days-before-close: 7
|
||||
|
||||
@@ -16,10 +16,11 @@ jobs:
|
||||
translations:
|
||||
name: Update translatable texts
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
env:
|
||||
TX_TOKEN: ${{ secrets.TX_TOKEN }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
# Need the parent commit too so we can diff HEAD and detect local translation edits
|
||||
fetch-depth: 2
|
||||
|
||||
@@ -0,0 +1,201 @@
|
||||
name: Update bundled tools
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Nightly check for new releases of the bundled tools
|
||||
- cron: "30 4 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
unrar:
|
||||
name: Update unrar
|
||||
if: github.repository == 'sabnzbd/sabnzbd'
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
|
||||
BRANCH: automation/update-unrar
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- name: Determine latest unrar version
|
||||
id: version
|
||||
run: |
|
||||
RAW_VERSION=$(curl -fsSL --retry 3 https://www.rarlab.com/download.htm -o- | sed -n 's%.*/rarmacos-x64-\([0-9]\+\)\.tar\.gz.*%\1%p' | head -1)
|
||||
if [ -z "$RAW_VERSION" ]; then
|
||||
echo "Could not determine the latest unrar version from the rarlab download page"
|
||||
exit 1
|
||||
fi
|
||||
# Version is encoded without separator, e.g. 723 = 7.23
|
||||
VERSION="${RAW_VERSION%??}.${RAW_VERSION: -2}"
|
||||
echo "Latest unrar version: $VERSION"
|
||||
echo "raw_version=$RAW_VERSION" >> "$GITHUB_OUTPUT"
|
||||
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||
- name: Download and extract new binaries
|
||||
env:
|
||||
RAW_VERSION: ${{ steps.version.outputs.raw_version }}
|
||||
run: |
|
||||
mkdir -p "$RUNNER_TEMP/unrar"
|
||||
cd "$RUNNER_TEMP/unrar"
|
||||
for FILE in "rarmacos-x64-$RAW_VERSION.tar.gz" "rarmacos-arm-$RAW_VERSION.tar.gz" "winrar-x64-$RAW_VERSION.exe"; do
|
||||
curl -fsSL --retry 3 -o "$FILE" "https://www.rarlab.com/rar/$FILE"
|
||||
done
|
||||
mkdir macos-x64 macos-arm64 windows
|
||||
tar -xzf "rarmacos-x64-$RAW_VERSION.tar.gz" -C macos-x64
|
||||
tar -xzf "rarmacos-arm-$RAW_VERSION.tar.gz" -C macos-arm64
|
||||
# Unpack UnRAR.exe from the WinRAR installer, which is a self-extracting
|
||||
# RAR archive that the preinstalled 7-Zip can read
|
||||
7z x -y -owindows "winrar-x64-$RAW_VERSION.exe" UnRAR.exe > /dev/null
|
||||
- name: Copy binaries into the repository
|
||||
run: |
|
||||
install -m 755 "$RUNNER_TEMP/unrar/macos-x64/rar/unrar" macos/unrar/unrar
|
||||
install -m 755 "$RUNNER_TEMP/unrar/macos-arm64/rar/unrar" macos/unrar/arm64/unrar
|
||||
install -m 755 "$RUNNER_TEMP/unrar/windows/UnRAR.exe" win/unrar/UnRAR.exe
|
||||
- name: Create pull request
|
||||
env:
|
||||
VERSION: ${{ steps.version.outputs.version }}
|
||||
run: |
|
||||
if git diff --quiet; then
|
||||
echo "Bundled unrar is already at version $VERSION"
|
||||
exit 0
|
||||
fi
|
||||
git config user.name "SABnzbd Automation"
|
||||
git config user.email "bugs@sabnzbd.org"
|
||||
git add macos/unrar win/unrar
|
||||
git commit -m "unrar $VERSION"
|
||||
# Skip the push if an open PR already contains these exact binaries
|
||||
OPEN_PRS=$(gh pr list --head "$BRANCH" --state open --json number --jq length)
|
||||
if [ "$OPEN_PRS" != "0" ] && git fetch origin "$BRANCH" && git diff --quiet FETCH_HEAD HEAD -- macos/unrar win/unrar; then
|
||||
echo "Existing pull request already updates unrar to $VERSION"
|
||||
exit 0
|
||||
fi
|
||||
git push --force origin "HEAD:refs/heads/$BRANCH"
|
||||
if [ "$OPEN_PRS" = "0" ]; then
|
||||
gh pr create --head "$BRANCH" --title "unrar $VERSION" --body "Automated update of the bundled unrar binaries to version $VERSION.
|
||||
|
||||
[Changelog](https://www.rarlab.com/rarnew.htm)"
|
||||
fi
|
||||
|
||||
sevenzip:
|
||||
name: Update 7-Zip
|
||||
if: github.repository == 'sabnzbd/sabnzbd'
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
|
||||
BRANCH: automation/update-7zip
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- name: Determine latest 7-Zip version
|
||||
id: version
|
||||
run: |
|
||||
VERSION=$(gh api repos/ip7z/7zip/releases/latest --jq .tag_name)
|
||||
# Assets are named without separator, e.g. 7z2602-extra.7z for 26.02
|
||||
RAW_VERSION="${VERSION//./}"
|
||||
echo "Latest 7-Zip version: $VERSION"
|
||||
echo "raw_version=$RAW_VERSION" >> "$GITHUB_OUTPUT"
|
||||
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||
- name: Download and extract new binaries
|
||||
env:
|
||||
RAW_VERSION: ${{ steps.version.outputs.raw_version }}
|
||||
VERSION: ${{ steps.version.outputs.version }}
|
||||
run: |
|
||||
mkdir -p "$RUNNER_TEMP/7zip"
|
||||
cd "$RUNNER_TEMP/7zip"
|
||||
gh release download "$VERSION" --repo ip7z/7zip \
|
||||
--pattern "7z$RAW_VERSION-extra.7z" --pattern "7z$RAW_VERSION-mac.tar.xz"
|
||||
mkdir macos windows
|
||||
tar -xJf "7z$RAW_VERSION-mac.tar.xz" -C macos
|
||||
# The preinstalled 7-Zip unpacks the extra package that contains
|
||||
# the standalone Windows console version
|
||||
7z x -y -owindows "7z$RAW_VERSION-extra.7z" 7za.exe > /dev/null
|
||||
- name: Copy binaries into the repository
|
||||
run: |
|
||||
install -m 644 "$RUNNER_TEMP/7zip/windows/7za.exe" win/7zip/7za.exe
|
||||
install -m 755 "$RUNNER_TEMP/7zip/macos/7zz" macos/7zip/7zz
|
||||
- name: Create pull request
|
||||
env:
|
||||
VERSION: ${{ steps.version.outputs.version }}
|
||||
run: |
|
||||
if git diff --quiet; then
|
||||
echo "Bundled 7-Zip is already at version $VERSION"
|
||||
exit 0
|
||||
fi
|
||||
git config user.name "SABnzbd Automation"
|
||||
git config user.email "bugs@sabnzbd.org"
|
||||
git add macos/7zip win/7zip
|
||||
git commit -m "7-Zip $VERSION"
|
||||
# Skip the push if an open PR already contains these exact binaries
|
||||
OPEN_PRS=$(gh pr list --head "$BRANCH" --state open --json number --jq length)
|
||||
if [ "$OPEN_PRS" != "0" ] && git fetch origin "$BRANCH" && git diff --quiet FETCH_HEAD HEAD -- macos/7zip win/7zip; then
|
||||
echo "Existing pull request already updates 7-Zip to $VERSION"
|
||||
exit 0
|
||||
fi
|
||||
git push --force origin "HEAD:refs/heads/$BRANCH"
|
||||
if [ "$OPEN_PRS" = "0" ]; then
|
||||
gh pr create --head "$BRANCH" --title "7-Zip $VERSION" --body "Automated update of the bundled 7-Zip binaries to version $VERSION.
|
||||
|
||||
[Release notes](https://github.com/ip7z/7zip/releases/tag/$VERSION)"
|
||||
fi
|
||||
|
||||
par2:
|
||||
name: Update par2cmdline-turbo
|
||||
if: github.repository == 'sabnzbd/sabnzbd'
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
|
||||
BRANCH: automation/update-par2
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- name: Determine latest par2cmdline-turbo version
|
||||
id: version
|
||||
run: |
|
||||
TAG=$(gh api repos/animetosho/par2cmdline-turbo/releases/latest --jq .tag_name)
|
||||
# Assets are named without the leading v, e.g. par2cmdline-turbo-1.4.0-win-x64.zip for tag v1.4.0
|
||||
VERSION="${TAG#v}"
|
||||
echo "Latest par2cmdline-turbo version: $VERSION"
|
||||
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
|
||||
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||
- name: Download and extract new binaries
|
||||
env:
|
||||
TAG: ${{ steps.version.outputs.tag }}
|
||||
VERSION: ${{ steps.version.outputs.version }}
|
||||
run: |
|
||||
mkdir -p "$RUNNER_TEMP/par2"
|
||||
cd "$RUNNER_TEMP/par2"
|
||||
for ARCH in win-x64 win-arm64 macos-universal; do
|
||||
gh release download "$TAG" --repo animetosho/par2cmdline-turbo \
|
||||
--pattern "par2cmdline-turbo-$VERSION-$ARCH.zip"
|
||||
unzip -q -d "$ARCH" "par2cmdline-turbo-$VERSION-$ARCH.zip"
|
||||
done
|
||||
- name: Copy binaries into the repository
|
||||
run: |
|
||||
install -m 644 "$RUNNER_TEMP/par2/win-x64/par2.exe" win/par2/par2.exe
|
||||
install -m 644 "$RUNNER_TEMP/par2/win-arm64/par2.exe" win/par2/arm64/par2.exe
|
||||
install -m 755 "$RUNNER_TEMP/par2/macos-universal/par2" macos/par2/par2
|
||||
- name: Create pull request
|
||||
env:
|
||||
TAG: ${{ steps.version.outputs.tag }}
|
||||
VERSION: ${{ steps.version.outputs.version }}
|
||||
run: |
|
||||
if git diff --quiet; then
|
||||
echo "Bundled par2cmdline-turbo is already at version $VERSION"
|
||||
exit 0
|
||||
fi
|
||||
git config user.name "SABnzbd Automation"
|
||||
git config user.email "bugs@sabnzbd.org"
|
||||
git add macos/par2 win/par2
|
||||
git commit -m "par2cmdline-turbo $VERSION"
|
||||
# Skip the push if an open PR already contains these exact binaries
|
||||
OPEN_PRS=$(gh pr list --head "$BRANCH" --state open --json number --jq length)
|
||||
if [ "$OPEN_PRS" != "0" ] && git fetch origin "$BRANCH" && git diff --quiet FETCH_HEAD HEAD -- macos/par2 win/par2; then
|
||||
echo "Existing pull request already updates par2cmdline-turbo to $VERSION"
|
||||
exit 0
|
||||
fi
|
||||
git push --force origin "HEAD:refs/heads/$BRANCH"
|
||||
if [ "$OPEN_PRS" = "0" ]; then
|
||||
gh pr create --head "$BRANCH" --title "par2cmdline-turbo $VERSION" --body "Automated update of the bundled par2cmdline-turbo binaries to version $VERSION.
|
||||
|
||||
[Release notes](https://github.com/animetosho/par2cmdline-turbo/releases/tag/$TAG)"
|
||||
fi
|
||||
@@ -32,6 +32,7 @@ SABnzbd-*/
|
||||
|
||||
# Testing folders
|
||||
tests/cache
|
||||
tests/cache_gw*
|
||||
|
||||
# General junk
|
||||
*.keep
|
||||
|
||||
-50
@@ -1,50 +0,0 @@
|
||||
*******************************************
|
||||
*** Known issues ***
|
||||
*******************************************
|
||||
|
||||
- To prevent unexpectedly large NZBs from eating your download quota you can set
|
||||
the option 'size_limit' on the Config->Special page.
|
||||
Any NZB larger than this size will be set to paused and get a low priority.
|
||||
|
||||
- When par2 or unrar hang up, never just stop SABnzbd.
|
||||
Instead use your operating system's task manager to stop the par2 or unrar program.
|
||||
Forcing SABnzbd to quit may damage your queues.
|
||||
|
||||
- Some Usenet servers have intermittent login (or other) problems.
|
||||
For these the server blocking method is not very favourable.
|
||||
There is an INI-only option that will limit blocks to 1 minute.
|
||||
no_penalties = 1
|
||||
See: https://sabnzbd.org/wiki/configuration/3.4/special
|
||||
|
||||
- Some third-party utilities try to probe SABnzbd API in such a way that you will
|
||||
often see warnings about unauthenticated access.
|
||||
If you are sure these probes are harmless, you can suppress the warnings by
|
||||
setting the option "api_warnings" to 0.
|
||||
See: https://sabnzbd.org/wiki/configuration/3.4/special
|
||||
|
||||
- On macOS you may encounter downloaded files with foreign characters.
|
||||
The par2 repair may fail when the files were created on a Windows system.
|
||||
The problem is caused by the PAR2 utility and we cannot fix this now.
|
||||
This does not apply to files inside RAR files.
|
||||
|
||||
- The "Watched Folder" sometimes fails to delete the NZB files it has
|
||||
processed. This happens when other software still accesses these files.
|
||||
Some third-party utilities supporting SABnzbd are known to do this.
|
||||
We cannot solve this problem, because the Operating System (read Windows)
|
||||
prevents the removal.
|
||||
|
||||
- When SABnzbd cannot send notification emails, check your virus scanner,
|
||||
firewall or security suite. It may be blocking outgoing email.
|
||||
|
||||
- When you are using external drives or network shares on macOS or Linux
|
||||
make sure that the drives are mounted.
|
||||
The operating system will simply redirect your files to alternative locations.
|
||||
You may have trouble finding the files when mounting the drive later.
|
||||
On macOS, SABnzbd will not create new folders in /Volumes.
|
||||
The result will be a failed job that can be retried once the volume has been mounted.
|
||||
|
||||
- If you use a mounted drive as "temporary download folder", it must be present when SABnzbd
|
||||
starts up. If not, SABnzbd will use the default location.
|
||||
You can make SABnzbd wait for a mount of the "temporary download folder" by setting
|
||||
Config->Special->wait_for_dfolder to 1.
|
||||
SABnzbd will appear to hang until the drive is mounted.
|
||||
+22
-14
@@ -1,30 +1,44 @@
|
||||
Release Notes - SABnzbd 5.1.0 Beta 2
|
||||
Release Notes - SABnzbd 5.1.0 Release Candidate 2
|
||||
=========================================================
|
||||
|
||||
This is the second beta release of version 5.1.
|
||||
We will probably add (a few) new features in upcoming testing releases,
|
||||
but we already wanted to share the current improvements with you!
|
||||
This is the second release candidate of version 5.1.
|
||||
|
||||
## New features in 5.1.0
|
||||
|
||||
* Refreshed the interface.
|
||||
* When Retrying a job, only the actually missing articles are tried again.
|
||||
This only works for jobs downloaded in 5.1.0 (or newer).
|
||||
* RSS-items are now stored in the database instead of on disk.
|
||||
* Downloaded RSS-items are cleared from RSS-database after 3 days.
|
||||
* Add support for filename and path pattern matching to the `Cleanup List`.
|
||||
* RSS items are now stored in the database instead of on disk.
|
||||
* New RSS `Age` rule to filter jobs based on their age.
|
||||
* Downloaded RSS items are cleared from the RSS database after 3 days.
|
||||
* Added support for filename and path pattern matching to the `Cleanup List`.
|
||||
* `Unwanted extensions` will also be removed after unpacking.
|
||||
* Allow job setting changes directly from `Extra queue columns`.
|
||||
* Added support for unpacking `.tar` files during post-processing.
|
||||
* Improved anonymization of the logs when using `Show Logging`.
|
||||
* Added `SAB_FILES` environment variable to Post-processing scripts,
|
||||
listing all files that resulted from the job.
|
||||
* New Servers will default to 16 connections instead of 8.
|
||||
* Parsing of header-encrypted RAR's will use significantly less resources.
|
||||
* Use media duration as part of `Ignore Samples` detection.
|
||||
* Added option to (auto) sort the queue by Remaining Percentage.
|
||||
* Improved support for screen readers.
|
||||
* Parsing of header-encrypted RARs will use significantly fewer resources.
|
||||
* Add Ayatana AppIndicator tray support on GNOME.
|
||||
* Removed redundant `INSTALL.txt` file.
|
||||
* Dropped support for Python 3.9.
|
||||
* Windows and macOS: Updated Python to 3.14.6, Unrar to 7.23 and 7zip to 26.02.
|
||||
|
||||
## Bug fixes in 5.1.0
|
||||
|
||||
* Prevent incorrect warnings about non-writeable directories.
|
||||
* Files unrelated to job could get removed by the `Cleanup List` logic.
|
||||
* Prevent path traversal in orphaned job APIs.
|
||||
* `Disk Full` errors from unrar were not handled gracefully during unpacking.
|
||||
* Memory leak could occur during article decoding.
|
||||
* In containers (like Docker), the Article Cache could exceed the memory limit.
|
||||
* Diskspace checks would be too strict when unpacking to different disk.
|
||||
* Prevent deadlock when a second signal arrives during shutdown procedure.
|
||||
* Verification using SFV-checks could fail, even though files were correct.
|
||||
* Windows: Uninstall would not remove Settings or Windows Service.
|
||||
* Windows: Warn for OS-limit if more than 1024 connections are configured.
|
||||
* macOS: AppleDouble files could result in failures in `Moving` stage.
|
||||
@@ -34,12 +48,6 @@ but we already wanted to share the current improvements with you!
|
||||
|
||||
* You can directly upgrade from version 3.0.0 and newer.
|
||||
* Upgrading from older versions will require performing a `Queue repair`.
|
||||
* Downgrading from version 4.2.0 or newer to 3.7.2 or older will require
|
||||
performing a `Queue repair` due to changes in the internal data format.
|
||||
|
||||
## Known problems and solutions
|
||||
|
||||
* Read `ISSUES.txt` or https://sabnzbd.org/wiki/introduction/known-issues
|
||||
|
||||
## Code Signing Policy
|
||||
|
||||
|
||||
+134
-226
@@ -40,7 +40,6 @@ import time
|
||||
import re
|
||||
import gc
|
||||
import threading
|
||||
import http.cookies
|
||||
from typing import Any
|
||||
|
||||
try:
|
||||
@@ -48,9 +47,7 @@ try:
|
||||
import Cheetah
|
||||
import feedparser
|
||||
import configobj
|
||||
import cherrypy
|
||||
import cheroot.errors
|
||||
import portend
|
||||
import uvicorn
|
||||
import cryptography
|
||||
import charset_normalizer
|
||||
import guessit
|
||||
@@ -69,6 +66,7 @@ import sabnzbd.interface
|
||||
from sabnzbd.constants import (
|
||||
DEF_NETWORKING_TIMEOUT,
|
||||
DEF_LOG_ERRFILE,
|
||||
DEF_LOG_ACCESSFILE,
|
||||
DEF_MAIN_TMPL,
|
||||
DEF_STD_WEB_DIR,
|
||||
DEF_WORKDIR,
|
||||
@@ -81,13 +79,16 @@ from sabnzbd.constants import (
|
||||
RSS_FILE_NAME,
|
||||
DEF_LOG_FILE,
|
||||
DEF_STD_CONFIG,
|
||||
DEF_LOG_CHERRY,
|
||||
CONFIG_BACKUP_HTTPS,
|
||||
)
|
||||
import sabnzbd.newsunpack
|
||||
from sabnzbd.misc import (
|
||||
exit_sab,
|
||||
split_host,
|
||||
port_is_free,
|
||||
find_free_port,
|
||||
bind_web_socket,
|
||||
HostNotAvailableError,
|
||||
create_https_certificates,
|
||||
ip_extract,
|
||||
set_serv_parms,
|
||||
@@ -99,7 +100,7 @@ from sabnzbd.misc import (
|
||||
set_https_verification,
|
||||
)
|
||||
from sabnzbd.filesystem import get_ext, real_path, long_path, globber_full, remove_file
|
||||
from sabnzbd.panic import panic_tmpl, panic_port, panic_host, panic, launch_a_browser
|
||||
from sabnzbd.panic import panic_tmpl, panic_port, panic_port_permission, panic_host, panic, launch_a_browser
|
||||
import sabnzbd.config as config
|
||||
import sabnzbd.cfg
|
||||
import sabnzbd.notifier as notifier
|
||||
@@ -116,7 +117,7 @@ try:
|
||||
from win32com.shell import shell, shellcon
|
||||
|
||||
from sabnzbd.utils.apireg import get_connection_info, set_connection_info
|
||||
import sabnzbd.sabtray
|
||||
import sabnzbd.sabtraywin
|
||||
|
||||
win32api.SetConsoleCtrlHandler(sabnzbd.sig_handler, True)
|
||||
except ImportError:
|
||||
@@ -205,7 +206,7 @@ def print_help():
|
||||
print(" -t --templates <templ> Template directory [*]")
|
||||
print()
|
||||
print(" -l --logging <-1..2> Set logging level (-1=off, 0=least,2= most) [*]")
|
||||
print(" -w --weblogging Enable cherrypy access logging")
|
||||
print(" -w --weblogging Enable uvicorn access logging")
|
||||
print()
|
||||
print(" -b --browser <0..1> Auto browser launch (0= off, 1= on) [*]")
|
||||
if sabnzbd.WINDOWS:
|
||||
@@ -291,18 +292,41 @@ def daemonize():
|
||||
os.dup2(f.fileno(), sys.stderr.fileno())
|
||||
|
||||
|
||||
def abort_and_show_error(browserhost, web_port, err=""):
|
||||
"""Abort program because of CherryPy troubles"""
|
||||
def abort_and_show_error(browserhost, web_port, err="", panic_func=panic_port):
|
||||
"""Abort program because the web-interface could not be started"""
|
||||
logging.error(T("Failed to start web-interface") + " : " + str(err))
|
||||
if not sabnzbd.DAEMON:
|
||||
if "49" in err:
|
||||
panic_host(browserhost, web_port)
|
||||
else:
|
||||
panic_port(browserhost, web_port)
|
||||
panic_func(browserhost, web_port)
|
||||
sabnzbd.halt()
|
||||
exit_sab(2)
|
||||
|
||||
|
||||
def abort_for_unusable_address(browserhost, port, err):
|
||||
"""Abort with the panic that matches why the address could not be used"""
|
||||
if isinstance(err, PermissionError):
|
||||
abort_and_show_error(browserhost, port, err, panic_func=panic_port_permission)
|
||||
else:
|
||||
abort_and_show_error(browserhost, port, err, panic_func=panic_host)
|
||||
|
||||
|
||||
def port_is_free_or_abort(host, port, browserhost):
|
||||
"""port_is_free(), but abort when the address cannot be used at all. Saying so
|
||||
up front beats a search that can only fail, followed by a message claiming
|
||||
some other program holds the port."""
|
||||
try:
|
||||
return port_is_free(host, port)
|
||||
except (PermissionError, HostNotAvailableError) as err:
|
||||
abort_for_unusable_address(browserhost, port, err)
|
||||
|
||||
|
||||
def find_free_port_or_abort(host, currentport, browserhost):
|
||||
"""find_free_port(), but abort when the address cannot be used at all"""
|
||||
try:
|
||||
return find_free_port(host, currentport)
|
||||
except (PermissionError, HostNotAvailableError) as err:
|
||||
abort_for_unusable_address(browserhost, currentport, err)
|
||||
|
||||
|
||||
def identify_web_template(key, defweb, wdir):
|
||||
"""Determine a correct web template set, return full template path"""
|
||||
if wdir is None:
|
||||
@@ -652,19 +676,6 @@ def get_webhost(web_host, web_port, https_port):
|
||||
return web_host, web_port, browserhost, https_port
|
||||
|
||||
|
||||
def attach_server(host, port, cert=None, key=None, chain=None):
|
||||
"""Define and attach server, optionally HTTPS"""
|
||||
if sabnzbd.cfg.ipv6_hosting() or "::1" not in host:
|
||||
http_server = cherrypy._cpserver.Server()
|
||||
http_server.bind_addr = (host, port)
|
||||
if cert and key:
|
||||
http_server.ssl_module = "builtin"
|
||||
http_server.ssl_certificate = cert
|
||||
http_server.ssl_private_key = key
|
||||
http_server.ssl_certificate_chain = chain
|
||||
http_server.subscribe()
|
||||
|
||||
|
||||
def is_sabnzbd_running(url):
|
||||
"""Return True when there's already a SABnzbd instance running."""
|
||||
try:
|
||||
@@ -678,19 +689,6 @@ def is_sabnzbd_running(url):
|
||||
return False
|
||||
|
||||
|
||||
def find_free_port(host, currentport):
|
||||
"""Return a free port, 0 when nothing is free"""
|
||||
n = 0
|
||||
while n < 10 and currentport <= 49151:
|
||||
try:
|
||||
portend.free(host, currentport, timeout=0.025)
|
||||
return currentport
|
||||
except Exception:
|
||||
currentport += 5
|
||||
n += 1
|
||||
return 0
|
||||
|
||||
|
||||
def check_for_sabnzbd(url, upload_nzbs, allow_browser=True):
|
||||
"""Check for a running instance of sabnzbd on this port
|
||||
allow_browser==True|None will launch the browser, False will not.
|
||||
@@ -837,7 +835,7 @@ def main():
|
||||
web_host = None
|
||||
web_port = None
|
||||
https_port = None
|
||||
cherrypylogging = None
|
||||
weblogging = None
|
||||
clean_up = False
|
||||
logging_level = None
|
||||
console_logging = False
|
||||
@@ -883,7 +881,7 @@ def main():
|
||||
elif opt in ("-c", "--clean"):
|
||||
clean_up = True
|
||||
elif opt in ("-w", "--weblogging"):
|
||||
cherrypylogging = True
|
||||
weblogging = True
|
||||
elif opt in ("-l", "--logging"):
|
||||
try:
|
||||
logging_level = int(arg)
|
||||
@@ -1002,78 +1000,54 @@ def main():
|
||||
# When this is a daemon, just check and bail out if port in use
|
||||
if sabnzbd.DAEMON:
|
||||
if enable_https and https_port:
|
||||
try:
|
||||
portend.free(web_host, https_port, timeout=0.05)
|
||||
except IOError:
|
||||
if not port_is_free_or_abort(web_host, https_port, browserhost):
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
except Exception:
|
||||
abort_and_show_error(browserhost, web_port, "49")
|
||||
try:
|
||||
portend.free(web_host, web_port, timeout=0.05)
|
||||
except IOError:
|
||||
if not port_is_free_or_abort(web_host, web_port, browserhost):
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
except Exception:
|
||||
abort_and_show_error(browserhost, web_port, "49")
|
||||
|
||||
# Windows instance is reachable through registry
|
||||
url = None
|
||||
if sabnzbd.WINDOWS and not new_instance:
|
||||
url = get_connection_info()
|
||||
url = get_connection_info(inifile)
|
||||
if url and check_for_sabnzbd(url, upload_nzbs, autobrowser):
|
||||
exit_sab(0)
|
||||
|
||||
# SSL
|
||||
if enable_https:
|
||||
port = https_port or web_port
|
||||
try:
|
||||
portend.free(browserhost, port, timeout=0.05)
|
||||
except IOError as error:
|
||||
if str(error) == "Port not bound.":
|
||||
pass
|
||||
else:
|
||||
if not url:
|
||||
url = "https://%s:%s%s/api?" % (browserhost, port, sabnzbd.cfg.url_base())
|
||||
if new_instance or not check_for_sabnzbd(url, upload_nzbs, autobrowser):
|
||||
# Bail out if we have fixed our ports after first start-up
|
||||
if sabnzbd.cfg.fixed_ports():
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
# Find free port to bind
|
||||
newport = find_free_port(browserhost, port)
|
||||
if newport > 0:
|
||||
# Save the new port
|
||||
if https_port:
|
||||
https_port = newport
|
||||
sabnzbd.cfg.https_port.set(newport)
|
||||
else:
|
||||
# In case HTTPS == HTTP port
|
||||
web_port = newport
|
||||
sabnzbd.cfg.web_port.set(newport)
|
||||
except Exception:
|
||||
# Something else wrong, probably badly specified host
|
||||
abort_and_show_error(browserhost, web_port, "49")
|
||||
if not port_is_free_or_abort(web_host, port, browserhost):
|
||||
if not url:
|
||||
url = "https://%s:%s%s/api?" % (browserhost, port, sabnzbd.cfg.url_base())
|
||||
if new_instance or not check_for_sabnzbd(url, upload_nzbs, autobrowser):
|
||||
# Bail out if we have fixed our ports after first start-up
|
||||
if sabnzbd.cfg.fixed_ports():
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
# Find free port to bind
|
||||
newport = find_free_port_or_abort(web_host, port, browserhost)
|
||||
if newport:
|
||||
# Save the new port
|
||||
if https_port:
|
||||
https_port = newport
|
||||
sabnzbd.cfg.https_port.set(newport)
|
||||
else:
|
||||
# In case HTTPS == HTTP port
|
||||
web_port = newport
|
||||
sabnzbd.cfg.web_port.set(newport)
|
||||
|
||||
# NonSSL check if there's no HTTPS or we only use 1 port
|
||||
if not (enable_https and not https_port):
|
||||
try:
|
||||
portend.free(browserhost, web_port, timeout=0.05)
|
||||
except IOError as error:
|
||||
if str(error) == "Port not bound.":
|
||||
pass
|
||||
else:
|
||||
if not url:
|
||||
url = "http://%s:%s%s/api?" % (browserhost, web_port, sabnzbd.cfg.url_base())
|
||||
if new_instance or not check_for_sabnzbd(url, upload_nzbs, autobrowser):
|
||||
# Bail out if we have fixed our ports after first start-up
|
||||
if sabnzbd.cfg.fixed_ports():
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
# Find free port to bind
|
||||
port = find_free_port(browserhost, web_port)
|
||||
if port > 0:
|
||||
sabnzbd.cfg.web_port.set(port)
|
||||
web_port = port
|
||||
except Exception:
|
||||
# Something else wrong, probably badly specified host
|
||||
abort_and_show_error(browserhost, web_port, "49")
|
||||
if not port_is_free_or_abort(web_host, web_port, browserhost):
|
||||
if not url:
|
||||
url = "http://%s:%s%s/api?" % (browserhost, web_port, sabnzbd.cfg.url_base())
|
||||
if new_instance or not check_for_sabnzbd(url, upload_nzbs, autobrowser):
|
||||
# Bail out if we have fixed our ports after first start-up
|
||||
if sabnzbd.cfg.fixed_ports():
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
# Find free port to bind
|
||||
port = find_free_port_or_abort(web_host, web_port, browserhost)
|
||||
if port:
|
||||
sabnzbd.cfg.web_port.set(port)
|
||||
web_port = port
|
||||
|
||||
# We found a port, now we never check again
|
||||
sabnzbd.cfg.fixed_ports.set(True)
|
||||
@@ -1111,6 +1085,9 @@ def main():
|
||||
rollover_log = logging.handlers.RotatingFileHandler(
|
||||
sabnzbd.LOGFILE, "a+", sabnzbd.cfg.log_size(), sabnzbd.cfg.log_backups()
|
||||
)
|
||||
# Set the level here as well as on the logger, so records that were
|
||||
# created at a higher level and lowered afterwards are also dropped
|
||||
rollover_log.setLevel(LOGLEVELS[logging_level + 1])
|
||||
rollover_log.setFormatter(logging.Formatter(logformat))
|
||||
logger.addHandler(rollover_log)
|
||||
|
||||
@@ -1171,8 +1148,8 @@ def main():
|
||||
# Handle the several tray icons
|
||||
if sabnzbd.cfg.tray_icon() and not sabnzbd.DAEMON and not sabnzbd.WIN_SERVICE:
|
||||
if sabnzbd.WINDOWS:
|
||||
sabnzbd.WINTRAY = sabnzbd.sabtray.SABTrayThread()
|
||||
elif sabnzbd.LINUX_POWER and os.environ.get("DISPLAY"):
|
||||
sabnzbd.WINTRAY = sabnzbd.sabtraywin.SABTrayThread()
|
||||
elif sabnzbd.LINUX_POWER and (os.environ.get("DISPLAY") or os.environ.get("XDG_CURRENT_DESKTOP")):
|
||||
try:
|
||||
import gi
|
||||
|
||||
@@ -1219,41 +1196,14 @@ def main():
|
||||
# Starting of the webserver
|
||||
# Determine if this system has multiple definitions for 'localhost'
|
||||
hosts = all_localhosts()
|
||||
multilocal = len(hosts) > 1 and web_host in ("localhost", "0.0.0.0")
|
||||
|
||||
# For 0.0.0.0 CherryPy will always pick IPv4, so make sure the secondary localhost is IPv6
|
||||
if multilocal and web_host == "0.0.0.0" and hosts[1] == "127.0.0.1":
|
||||
hosts[1] = "::1"
|
||||
|
||||
# The Windows binary requires numeric localhost as primary address
|
||||
if web_host == "localhost":
|
||||
web_host = hosts[0]
|
||||
|
||||
if enable_https:
|
||||
if https_port:
|
||||
# Extra HTTP port for primary localhost
|
||||
attach_server(web_host, web_port)
|
||||
if multilocal:
|
||||
# Extra HTTP port for secondary localhost
|
||||
attach_server(hosts[1], web_port)
|
||||
# Extra HTTPS port for secondary localhost
|
||||
attach_server(hosts[1], https_port, https_cert, https_key, https_chain)
|
||||
web_port = https_port
|
||||
elif multilocal:
|
||||
# Extra HTTPS port for secondary localhost
|
||||
attach_server(hosts[1], web_port, https_cert, https_key, https_chain)
|
||||
|
||||
cherrypy.config.update(
|
||||
{
|
||||
"server.ssl_module": "builtin",
|
||||
"server.ssl_certificate": https_cert,
|
||||
"server.ssl_private_key": https_key,
|
||||
"server.ssl_certificate_chain": https_chain,
|
||||
}
|
||||
)
|
||||
elif multilocal:
|
||||
# Extra HTTP port for secondary localhost
|
||||
attach_server(hosts[1], web_port)
|
||||
if enable_https and https_port:
|
||||
# Separate HTTPS port: switch the main server to the HTTPS port
|
||||
web_port = https_port
|
||||
|
||||
if no_login:
|
||||
sabnzbd.cfg.username.set("")
|
||||
@@ -1263,108 +1213,56 @@ def main():
|
||||
if inet_exposure:
|
||||
sabnzbd.cfg.inet_exposure.set(inet_exposure)
|
||||
|
||||
mime_gzip = (
|
||||
"text/*",
|
||||
"application/javascript",
|
||||
"application/x-javascript",
|
||||
"application/json",
|
||||
"application/xml",
|
||||
"application/vnd.ms-fontobject",
|
||||
"application/font*",
|
||||
"image/svg+xml",
|
||||
)
|
||||
cherrypy.config.update(
|
||||
{
|
||||
"server.environment": "production",
|
||||
"server.socket_host": web_host,
|
||||
"server.socket_port": web_port,
|
||||
"server.shutdown_timeout": 0,
|
||||
"engine.autoreload.on": False,
|
||||
"tools.encode.on": True,
|
||||
"tools.gzip.on": True,
|
||||
"tools.gzip.mime_types": mime_gzip,
|
||||
"error_page.401": sabnzbd.panic.error_page_401,
|
||||
"error_page.404": sabnzbd.panic.error_page_404,
|
||||
}
|
||||
)
|
||||
|
||||
# Monkey-patch key validation to prevent cherrypy from stumbling over invalid cookies
|
||||
http.cookies._is_legal_key = lambda _: True
|
||||
|
||||
# Catch shutdown errors that can break cherrypy/cheroot
|
||||
# See https://github.com/cherrypy/cheroot/issues/710
|
||||
try:
|
||||
cheroot.errors.acceptable_sock_shutdown_exceptions += (OSError,)
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
# Do we want CherryPy Logging? Cannot be done via the config
|
||||
cherrypy.log.screen = False
|
||||
cherrypy.log.access_log.propagate = False
|
||||
if cherrypylogging:
|
||||
sabnzbd.WEBLOGFILE = os.path.join(logdir, DEF_LOG_CHERRY)
|
||||
cherrypy.log.access_file = str(sabnzbd.WEBLOGFILE)
|
||||
|
||||
# Force mimetypes (OS might overwrite them)
|
||||
forced_mime_types = {"css": "text/css", "js": "application/javascript"}
|
||||
|
||||
static = {
|
||||
"tools.staticdir.on": True,
|
||||
"tools.staticdir.dir": os.path.join(sabnzbd.WEB_DIR, "static"),
|
||||
"tools.staticdir.content_types": forced_mime_types,
|
||||
}
|
||||
staticcfg = {
|
||||
"tools.staticdir.on": True,
|
||||
"tools.staticdir.dir": os.path.join(sabnzbd.WEB_DIR_CONFIG, "staticcfg"),
|
||||
"tools.staticdir.content_types": forced_mime_types,
|
||||
}
|
||||
wizard_static = {
|
||||
"tools.staticdir.on": True,
|
||||
"tools.staticdir.dir": os.path.join(sabnzbd.WIZARD_DIR, "static"),
|
||||
"tools.staticdir.content_types": forced_mime_types,
|
||||
}
|
||||
|
||||
appconfig = {
|
||||
"/api": {
|
||||
"tools.auth_basic.on": False,
|
||||
"tools.response_headers.on": True,
|
||||
"tools.response_headers.headers": [("Access-Control-Allow-Origin", "*")],
|
||||
},
|
||||
"/static": static,
|
||||
"/wizard/static": wizard_static,
|
||||
"/favicon.ico": {
|
||||
"tools.staticfile.on": True,
|
||||
"tools.staticfile.filename": os.path.join(sabnzbd.WEB_DIR_CONFIG, "staticcfg", "ico", "favicon.ico"),
|
||||
},
|
||||
"/staticcfg": staticcfg,
|
||||
}
|
||||
|
||||
# Make available from both URLs
|
||||
main_page = sabnzbd.interface.MainPage()
|
||||
cherrypy.Application.relative_urls = "server"
|
||||
cherrypy.tree.mount(main_page, "/", config=appconfig)
|
||||
cherrypy.tree.mount(main_page, sabnzbd.cfg.url_base(), config=appconfig)
|
||||
|
||||
# Set authentication for CherryPy
|
||||
sabnzbd.interface.set_auth(cherrypy.config)
|
||||
logging.info("Starting web-interface on %s:%s", web_host, web_port)
|
||||
|
||||
sabnzbd.cfg.log_level.callback(guard_loglevel)
|
||||
|
||||
try:
|
||||
cherrypy.engine.start()
|
||||
except Exception:
|
||||
# Since the webserver is started by cherrypy in a separate thread, we can't really catch any
|
||||
# start-up errors. This try/except only catches very few errors, the rest is only shown in the console.
|
||||
logging.error(T("Failed to start web-interface: "), exc_info=True)
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
|
||||
# Create a record of the active cert/key/chain files, for use with config.create_config_backup()
|
||||
if enable_https:
|
||||
for setting in CONFIG_BACKUP_HTTPS.values():
|
||||
if full_path := getattr(sabnzbd.cfg, setting).get_path():
|
||||
sabnzbd.CONFIG_BACKUP_HTTPS_OK.append(full_path)
|
||||
|
||||
# Do we want web-server access logging? Cannot be done via the config
|
||||
if weblogging:
|
||||
sabnzbd.WEBLOGFILE = os.path.join(logdir, DEF_LOG_ACCESSFILE)
|
||||
|
||||
# Catch logging using SABnzbd handlers
|
||||
uvicorn_logging_config = sabnzbd.interface.uvicorn_logging_config(sabnzbd.WEBLOGFILE)
|
||||
|
||||
# Claim the port here rather than letting uvicorn do it, because this is the
|
||||
# first point where the host and port are final. Everything before this was
|
||||
# only picking a port, and anything could still have taken it since.
|
||||
try:
|
||||
web_socket = bind_web_socket(web_host, web_port)
|
||||
except (PermissionError, HostNotAvailableError) as err:
|
||||
abort_for_unusable_address(browserhost, web_port, err)
|
||||
except OSError as err:
|
||||
logging.error(T("Failed to start web-interface: "), exc_info=True)
|
||||
abort_and_show_error(browserhost, web_port, err)
|
||||
|
||||
server_config = uvicorn.Config(
|
||||
sabnzbd.interface.create_app(),
|
||||
host=web_host,
|
||||
port=web_port,
|
||||
log_config=uvicorn_logging_config,
|
||||
ssl_keyfile=https_key if enable_https else None,
|
||||
ssl_certfile=https_cert if enable_https else None,
|
||||
ssl_ca_certs=https_chain if enable_https else None,
|
||||
# Handled by ProxyTrustMiddleware inside the application, which needs the untouched
|
||||
# peer address. Defaults to True, so it has to be turned off rather than left out.
|
||||
proxy_headers=False,
|
||||
)
|
||||
sabnzbd.WEB_SERVER = sabnzbd.interface.ThreadedServer(config=server_config, sockets=[web_socket])
|
||||
try:
|
||||
sabnzbd.WEB_SERVER.run_in_thread()
|
||||
except Exception:
|
||||
# The webserver runs in a separate thread; if it fails to start (bad cert,
|
||||
# unusable TLS material) surface the error and abort instead of hanging.
|
||||
# Details are also shown on the console.
|
||||
logging.error(T("Failed to start web-interface: "), exc_info=True)
|
||||
abort_and_show_error(browserhost, web_port)
|
||||
|
||||
# Set URL for browser
|
||||
if enable_https:
|
||||
sabnzbd.BROWSER_URL = "https://%s:%s%s" % (browserhost, web_port, sabnzbd.cfg.url_base())
|
||||
@@ -1373,7 +1271,7 @@ def main():
|
||||
|
||||
if sabnzbd.WINDOWS:
|
||||
# Write URL for uploads and version check directly to registry
|
||||
set_connection_info(f"{sabnzbd.BROWSER_URL}/api?apikey={sabnzbd.cfg.api_key()}")
|
||||
set_connection_info(f"{sabnzbd.BROWSER_URL}/api?apikey={sabnzbd.cfg.api_key()}", inifile)
|
||||
|
||||
if pid_path or pid_file:
|
||||
sabnzbd.pid_file(pid_path, pid_file, web_port)
|
||||
@@ -1421,6 +1319,8 @@ def main():
|
||||
logger.setLevel(level)
|
||||
if console_logging:
|
||||
console.setLevel(level)
|
||||
if not no_file_log:
|
||||
rollover_log.setLevel(level)
|
||||
|
||||
# 300 sec polling tasks
|
||||
if not timer % 100:
|
||||
@@ -1482,13 +1382,21 @@ def main():
|
||||
# Just a simple restart of the exe
|
||||
os.execv(sys.executable, ['"%s"' % arg for arg in sys.argv])
|
||||
else:
|
||||
# CherryPy has special logic to include interpreter options such as "-OO"
|
||||
cherrypy.engine._do_execv()
|
||||
# Re-exec with interpreter flags (replaces cherrypy.engine._do_execv)
|
||||
args = [sys.executable]
|
||||
if sys.flags.optimize == 1:
|
||||
args.append("-O")
|
||||
elif sys.flags.optimize >= 2:
|
||||
args.append("-OO")
|
||||
args.extend(sys.argv)
|
||||
os.execv(sys.executable, args)
|
||||
|
||||
# Send our final goodbyes!
|
||||
notifier.send_notification("SABnzbd", T("SABnzbd shutdown finished"), "startup")
|
||||
logging.info("Leaving SABnzbd")
|
||||
sabnzbd.pid_file()
|
||||
if sabnzbd.WEB_SERVER:
|
||||
sabnzbd.WEB_SERVER.stop()
|
||||
|
||||
try:
|
||||
sys.stderr.flush()
|
||||
|
||||
@@ -13,7 +13,7 @@ from builder.common import EXTRA_FILES, EXTRA_FOLDERS, RELEASE_VERSION, RELEASE_
|
||||
extra_pyinstaller_files = []
|
||||
|
||||
# Add hidden imports
|
||||
extra_hiddenimports = ["Cheetah.DummyTransaction", "cheroot.ssl.builtin", "certifi"]
|
||||
extra_hiddenimports = ["Cheetah.DummyTransaction", "certifi"]
|
||||
extra_hiddenimports.extend(collect_submodules("apprise"))
|
||||
extra_hiddenimports.extend(collect_submodules("babelfish.converters"))
|
||||
extra_hiddenimports.extend(collect_submodules("guessit.data"))
|
||||
|
||||
@@ -63,7 +63,6 @@ EXTRA_FILES = [
|
||||
"GPL2.txt",
|
||||
"GPL3.txt",
|
||||
"COPYRIGHT.txt",
|
||||
"ISSUES.txt",
|
||||
]
|
||||
EXTRA_FOLDERS = [
|
||||
"scripts/",
|
||||
|
||||
+1
-1
@@ -246,7 +246,7 @@ def test_sab_binary(binary_path: str):
|
||||
|
||||
# Parse API-key so we can do a graceful shutdown
|
||||
sab_config = configobj.ConfigObj(os.path.join(config_dir, "sabnzbd.ini"))
|
||||
urllib.request.urlopen(base_url + "shutdown/?apikey=" + sab_config["misc"]["api_key"], timeout=10)
|
||||
urllib.request.urlopen(base_url + "api?mode=shutdown&apikey=" + sab_config["misc"]["api_key"], timeout=10)
|
||||
sabnzbd_process.wait()
|
||||
|
||||
# Print logs for verification
|
||||
|
||||
@@ -1,26 +1,27 @@
|
||||
# All sub-dependencies are listed below and installed with --no-dependencies for security
|
||||
PyGithub==2.9.1
|
||||
praw==7.8.2
|
||||
PyGithub==2.10.0
|
||||
praw==8.0.3
|
||||
pefile==2024.8.26
|
||||
|
||||
# PyGithub dependencies
|
||||
pynacl==1.6.2
|
||||
requests==2.34.2
|
||||
pyjwt==2.13.0
|
||||
typing-extensions==4.15.0
|
||||
typing-extensions==4.16.0
|
||||
urllib3==2.7.0
|
||||
|
||||
# praw dependencies
|
||||
prawcore==3.1.0
|
||||
prawcore==4.0.0
|
||||
defusedxml==0.7.1
|
||||
update-checker==1.0.0
|
||||
websocket-client==1.9.0
|
||||
|
||||
# requests dependencies
|
||||
charset_normalizer==3.4.7
|
||||
idna==3.18
|
||||
certifi==2026.5.20
|
||||
charset_normalizer==3.5.1
|
||||
idna==3.19
|
||||
certifi==2026.7.22
|
||||
|
||||
# cryptography (via pyjwt[crypto]) dependencies
|
||||
cryptography==49.0.0
|
||||
cffi==2.0.0
|
||||
cffi==2.1.1
|
||||
pycparser==3.0
|
||||
@@ -21,6 +21,7 @@ import re
|
||||
|
||||
import github
|
||||
import praw
|
||||
import requests
|
||||
|
||||
from common import (
|
||||
RELEASE_VERSION,
|
||||
@@ -186,6 +187,20 @@ if RELEASE_THIS and gh_token:
|
||||
print("Merging pull request in sabnzbd/sabnzbd.github.io for the update")
|
||||
update_pr.merge(merge_method="squash")
|
||||
|
||||
# Trigger the Docker image build at linuxserver.io
|
||||
# Branch "develop" builds the pre-releases, "master" the stable releases
|
||||
if linuxserver_token := os.environ.get("LINUXSERVER_WEBHOOK_TOKEN", ""):
|
||||
linuxserver_branch = "develop" if PRERELEASE else "master"
|
||||
print("Triggering linuxserver.io Docker build for branch %s" % linuxserver_branch)
|
||||
requests.post(
|
||||
"https://ci.linuxserver.io/generic-webhook-trigger/invoke?sabnzbd",
|
||||
headers={"Authorization": "Bearer %s" % linuxserver_token},
|
||||
json={"branch": linuxserver_branch},
|
||||
timeout=30,
|
||||
).raise_for_status()
|
||||
else:
|
||||
print("Missing LINUXSERVER_WEBHOOK_TOKEN")
|
||||
|
||||
# Only with GitHub success we proceed to Reddit
|
||||
if reddit_token := os.environ.get("REDDIT_TOKEN", ""):
|
||||
# Token format (without whitespace):
|
||||
@@ -233,6 +248,34 @@ if RELEASE_THIS and gh_token:
|
||||
else:
|
||||
print("Missing REDDIT_TOKEN")
|
||||
|
||||
# Push release notes to Discord via an incoming webhook
|
||||
# Separate channels for testing (pre-release) and stable, both are required
|
||||
discord_webhook_testing = os.environ.get("DISCORD_WEBHOOK_TESTING", "")
|
||||
discord_webhook_stable = os.environ.get("DISCORD_WEBHOOK_STABLE", "")
|
||||
if discord_webhook_testing and discord_webhook_stable:
|
||||
discord_webhook = discord_webhook_testing if PRERELEASE else discord_webhook_stable
|
||||
print("Posting release notes to Discord")
|
||||
# Reuse the release notes read earlier: line 0 is the title header
|
||||
discord_lines = readme_data.splitlines(keepends=True)
|
||||
discord_title = discord_lines[0].lstrip("# ").strip()
|
||||
discord_body = "".join(discord_lines[2:])[:4096]
|
||||
requests.post(
|
||||
discord_webhook,
|
||||
json={
|
||||
"embeds": [
|
||||
{
|
||||
"title": discord_title,
|
||||
"url": gh_release.html_url,
|
||||
"description": discord_body,
|
||||
"color": 0xFFA500 if PRERELEASE else 0x00A550,
|
||||
}
|
||||
]
|
||||
},
|
||||
timeout=30,
|
||||
).raise_for_status()
|
||||
else:
|
||||
print("Missing DISCORD_WEBHOOK_TESTING and/or DISCORD_WEBHOOK_STABLE")
|
||||
|
||||
else:
|
||||
print("To push release to GitHub, first tag the commit.")
|
||||
print("Or missing the AUTOMATION_GITHUB_TOKEN, cannot push to GitHub without it.")
|
||||
@@ -1,11 +1,11 @@
|
||||
# All sub-dependencies are listed below and installed with --no-dependencies for security
|
||||
pyinstaller==6.20.0
|
||||
packaging==26.2
|
||||
pyinstaller-hooks-contrib==2026.5
|
||||
pyinstaller==6.22.2
|
||||
packaging==26.3
|
||||
pyinstaller-hooks-contrib==2026.6
|
||||
altgraph==0.17.5
|
||||
wrapt==2.2.1
|
||||
setuptools==82.0.1
|
||||
markdown==3.10.2
|
||||
wrapt==2.3.0
|
||||
setuptools==84.0.0
|
||||
markdown==3.10.3
|
||||
pefile==2024.8.26
|
||||
|
||||
# For the Windows build
|
||||
@@ -15,7 +15,7 @@ pywin32-ctypes==0.2.3; sys_platform == 'win32'
|
||||
dmgbuild==1.6.7; sys_platform == 'darwin'
|
||||
mac-alias==2.2.3; sys_platform == 'darwin'
|
||||
macholib==1.16.4; sys_platform == 'darwin'
|
||||
ds-store==1.3.2; sys_platform == 'darwin'
|
||||
ds-store==1.3.3; sys_platform == 'darwin'
|
||||
PyNaCl==1.6.2; sys_platform == 'darwin'
|
||||
|
||||
# 48.0.0 is the last cryptography version shipping a macOS universal2 wheel (49+ is arm64-only)
|
||||
|
||||
@@ -548,7 +548,7 @@ SectionEnd
|
||||
LangString MsgNoWin7 ${LANG_SIMPCHINESE} "SABnzbd 仅支持 Windows 8.1 及更高版本。"
|
||||
|
||||
LangString MsgARM64Notice ${LANG_ENGLISH} "An ARM version of SABnzbd is available on our Downloads page. This installer only contains the regular version.$\nPress OK to continue or Cancel to exit."
|
||||
LangString MsgARM64Notice ${LANG_CZECH} "An ARM version of SABnzbd is available on our Downloads page. This installer only contains the regular version.$\nPress OK to continue or Cancel to exit."
|
||||
LangString MsgARM64Notice ${LANG_CZECH} "Na naší stránce „Ke stažení“ je k dispozici verze SABnzbd pro architekturu ARM. Tento instalační program obsahuje pouze standardní verzi.$\nStiskněte tlačítko OK pro pokračování nebo Zrušit pro ukončení."
|
||||
LangString MsgARM64Notice ${LANG_DANISH} "En ARM-version af SABnzbd er tilgængelig på vores downloadside. Dette installationsprogram indeholder kun den almindelige version.$\nTryk på OK for at fortsætte eller Annuller for at afslutte."
|
||||
LangString MsgARM64Notice ${LANG_GERMAN} "Eine ARM-Version von SABnzbd ist auf unserer Downloads-Seite verfügbar. Dieses Installationsprogramm enthält nur die reguläre Version.$\nKlicken Sie auf OK, um fortzufahren, oder auf Abbrechen, um zu beenden."
|
||||
LangString MsgARM64Notice ${LANG_SPANISH} "Hay una versión ARM de SABnzbd disponible en nuestra página de descargas. Este instalador solo contiene la versión normal.$\nPulsa Aceptar para continuar o Cancelar para salir."
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
<div class="clearfix"></div>
|
||||
|
||||
<!-- Filebrowser modal -->
|
||||
<div class="modal fade" id="filebrowser_modal">
|
||||
<div class="modal fade" id="filebrowser_modal" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="filebrowser-modal-title">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title"></h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="filebrowser-modal-title"></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
</div>
|
||||
@@ -33,4 +33,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
@@ -1,10 +1,5 @@
|
||||
#if $pane == "Config"#
|
||||
#set global $root = '../'#
|
||||
#else#
|
||||
#set global $root = '../../'#
|
||||
#end if#
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="$active_lang" #if $rtl#dir="rtl"#end if#>
|
||||
<html lang="$active_lang" #if $rtl#dir="rtl"#end if# data-color-scheme="$color_scheme">
|
||||
<head>
|
||||
<title>
|
||||
SABnzbd $T('menu-config')
|
||||
@@ -14,7 +9,7 @@
|
||||
#if $pane == "Switches" then $T('cmenu-switches') else ""#
|
||||
#if $pane == "Servers" then $T('cmenu-servers') else ""#
|
||||
#if $pane == "Scheduling" then $T('cmenu-scheduling') else ""#
|
||||
#if $pane == "Email" then $T('cmenu-notif') else ""#
|
||||
#if $pane == "Notify" then $T('cmenu-notif') else ""#
|
||||
#if $pane == "Categories" then $T('cmenu-cat') else ""#
|
||||
#if $pane == "Sorting" then $T('cmenu-sorting') else ""#
|
||||
#if $pane == "Special" then $T('cmenu-special') else ""#
|
||||
@@ -25,20 +20,17 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1" />
|
||||
<meta name="apple-mobile-web-app-title" content="SABnzbd" />
|
||||
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="${root}staticcfg/ico/apple-touch-icon-76x76-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="${root}staticcfg/ico/apple-touch-icon-120x120-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="${root}staticcfg/ico/apple-touch-icon-152x152-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="${root}staticcfg/ico/apple-touch-icon-180x180-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="${root}staticcfg/ico/android-192x192.png" />
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="$url('staticcfg/ico/apple-touch-icon-76x76-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="$url('staticcfg/ico/apple-touch-icon-120x120-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="$url('staticcfg/ico/apple-touch-icon-152x152-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="$url('staticcfg/ico/apple-touch-icon-180x180-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="$url('staticcfg/ico/android-192x192.png', v=$cache_buster)" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/bootstrap/css/bootstrap.min.css?v=$cache_buster" />
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/chartist.min.css?v=$cache_buster" />
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/style.css?v=$cache_buster" />
|
||||
<!--#if $color_scheme not in ('Light', '') #-->
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/${color_scheme}.css?v=$cache_buster"/>
|
||||
<!--#end if#-->
|
||||
<link rel="stylesheet" type="text/css" href="$url('staticcfg/bootstrap/css/bootstrap.min.css', v=$cache_buster)" />
|
||||
<link rel="stylesheet" type="text/css" href="$url('staticcfg/css/chartist.min.css', v=$cache_buster)" />
|
||||
<link rel="stylesheet" type="text/css" href="$url('staticcfg/css/style.css', v=$cache_buster)" />
|
||||
|
||||
<link rel="shortcut icon" href="${root}staticcfg/ico/favicon.ico?v=$cache_buster" />
|
||||
<link rel="shortcut icon" href="$url('staticcfg/ico/favicon.ico', v=$cache_buster)" />
|
||||
|
||||
<script type="text/javascript">
|
||||
// Keeping track of the form state
|
||||
@@ -46,10 +38,10 @@
|
||||
var formWasSubmitted = false;
|
||||
|
||||
// Information we need
|
||||
var sabSession = '$apikey';
|
||||
var rootURL = '${root}'
|
||||
var csrfToken = '$csrf_token';
|
||||
var rootURL = '$url()'
|
||||
var urlBase = '${url_base}'
|
||||
var folderBrowseUrl = '${root}api?mode=browse&output=json&apikey=$apikey';
|
||||
var folderBrowseUrl = "$url('api', mode='browse', output='json')";
|
||||
var folderSeperator = '#if $os.sep == '\\' then '\\\\' else '/'#'
|
||||
|
||||
// Translations
|
||||
@@ -65,9 +57,9 @@
|
||||
configTranslate.confirmLeave = "$T('confirmWithoutSavingPrompt')";
|
||||
configTranslate.searchPages = ['$T('cmenu-general')', '$T('cmenu-folders')', '$T('cmenu-switches')', '$T('cmenu-sorting')', '$T('cmenu-notif')', '$T('cmenu-special')']
|
||||
</script>
|
||||
<script type="text/javascript" src="${root}staticcfg/js/jquery-3.5.1.min.js?v=$cache_buster"></script>
|
||||
<script type="text/javascript" src="${root}staticcfg/bootstrap/js/bootstrap.min.js?v=$cache_buster"></script>
|
||||
<script type="text/javascript" src="${root}staticcfg/js/script.js?v=$cache_buster"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/js/jquery-3.7.1.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/bootstrap/js/bootstrap.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/js/script.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript">
|
||||
// Set default functions for the autocomplete everywhere
|
||||
|
||||
@@ -92,62 +84,62 @@
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
|
||||
<a class="navbar-logo navbar-logo-small" href="${root}" title="$T('Home')" data-placement="bottom">
|
||||
<a class="navbar-logo navbar-logo-small" href="$url()" title="$T('Home')" data-placement="bottom">
|
||||
#include $webdir + "/staticcfg/images/logo-small.svg"#
|
||||
</a>
|
||||
</div>
|
||||
<div id="navbar" class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li>
|
||||
<a href="${root}config/general/" #if $pane == "General" then 'class="active"' else ""#>
|
||||
<a href="$url('config/general')" #if $pane == "General" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-cog"></span>
|
||||
<strong>$T('cmenu-general')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/folders/" #if $pane == "Folders" then 'class="active"' else ""#>
|
||||
<a href="$url('config/folders')" #if $pane == "Folders" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-folder-open"></span>
|
||||
<strong>$T('cmenu-folders')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/server/" #if $pane == "Servers" then 'class="active"' else ""#>
|
||||
<a href="$url('config/server')" #if $pane == "Servers" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-sort"></span>
|
||||
<strong>$T('cmenu-servers')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/categories/" #if $pane == "Categories" then 'class="active"' else ""#>
|
||||
<a href="$url('config/categories')" #if $pane == "Categories" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-tag"></span>
|
||||
<strong>$T('cmenu-cat')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/switches/" #if $pane == "Switches" then 'class="active"' else ""#>
|
||||
<a href="$url('config/switches')" #if $pane == "Switches" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
<strong>$T('cmenu-switches')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/sorting/" #if $pane == "Sorting" then 'class="active"' else ""#>
|
||||
<a href="$url('config/sorting')" #if $pane == "Sorting" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-sort-by-alphabet"></span>
|
||||
<strong>$T('cmenu-sorting')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/notify/" #if $pane == "Email" then 'class="active"' else ""#>
|
||||
<a href="$url('config/notify')" #if $pane == "Notify" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-comment"></span>
|
||||
<strong>$T('cmenu-notif')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/scheduling/" #if $pane == "Scheduling" then 'class="active"' else ""#>
|
||||
<a href="$url('config/scheduling')" #if $pane == "Scheduling" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-time"></span>
|
||||
<strong>$T('cmenu-scheduling')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/rss/" #if $pane == "RSS" then 'class="active"' else ""#>
|
||||
<a href="$url('config/rss')" #if $pane == "RSS" then 'class="active"' else ""#>
|
||||
<svg class="rss-icon-svg" viewBox="0 0 8 8">
|
||||
<rect class="rss-button" width="8" height="8" />
|
||||
<circle class="rss-symbol" cx="2" cy="6" r="1" />
|
||||
@@ -158,7 +150,7 @@
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/special/" #if $pane == "Special" then 'class="active"' else ""#>
|
||||
<a href="$url('config/special')" #if $pane == "Special" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-education"></span>
|
||||
<strong>$T('cmenu-special')</strong>
|
||||
</a>
|
||||
@@ -170,14 +162,14 @@
|
||||
</a>
|
||||
</li>
|
||||
<li class="dropdown" id="search-menu">
|
||||
<a data-toggle="dropdown" href="#">
|
||||
<a data-toggle="dropdown" href="#" aria-label="$T('cmenu-search')" aria-controls="search-dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<span class="glyphicon glyphicon-search"></span>
|
||||
<strong><span class="glyphicon glyphicon-search"></span></strong>
|
||||
</a>
|
||||
<ul class="dropdown-menu" id="search-dropdown">
|
||||
<li>
|
||||
<form onsubmit="return false">
|
||||
<input type="text" name="config-search" id="search-box" placeholder="$T('cmenu-search')" onkeyup="doConfigSearch(this)">
|
||||
<input type="text" name="config-search" id="search-box" placeholder="$T('cmenu-search')" aria-label="$T('cmenu-search')" aria-controls="search-dropdown" onkeyup="doConfigSearch(this)">
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<h5 class="darkred"><strong>$T('explain-relFolder'):</strong> <span class="path">$defdir</span></h5>
|
||||
<!--#for $cur, $slot in enumerate($slotinfo)#-->
|
||||
<!--#set $cansort = $slot.name != '*' and $slot.name != ''#-->
|
||||
<form action="save" method="post" <!--#if $cansort#-->class="sorting-row"<!--#end if#-->>
|
||||
<form action="$url('config/categories/save')" method="post" class="fullform <!--#if $cansort then 'sorting-row' else ''#-->">
|
||||
<table class="catTable">
|
||||
<!--#if $cur == 0#-->
|
||||
<tr>
|
||||
@@ -28,7 +28,6 @@
|
||||
<span class="glyphicon glyphicon-option-vertical"></span>
|
||||
</td>
|
||||
<td>
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="order" value="$slot.order" />
|
||||
<input type="hidden" value="$slot.name" name="name" />
|
||||
<!--#if $slot.name != '*'#-->
|
||||
@@ -103,12 +102,12 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="${root}staticcfg/js/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/js/jquery-ui.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('.delCat').click(function() {
|
||||
var theForm = jQuery(this).closest("form");
|
||||
theForm.attr("action", "delete").submit();
|
||||
theForm.attr("action", "$url('config/categories/delete')").submit();
|
||||
});
|
||||
|
||||
// Add autocomplete and file-browser
|
||||
@@ -128,8 +127,8 @@
|
||||
var data = {}
|
||||
jQuery(elm).extractFormDataTo(data);
|
||||
jQuery.ajax({
|
||||
type: "GET",
|
||||
url: window.location.pathname + 'save',
|
||||
type: "POST",
|
||||
url: "$url('config/categories/save')",
|
||||
data: data,
|
||||
async: false // To prevent race-conditions when updating categories
|
||||
})
|
||||
|
||||
@@ -8,10 +8,8 @@
|
||||
<input type="checkbox" id="advanced-settings-button" name="advanced-settings-button"> $T('button-advanced')
|
||||
</label>
|
||||
</div>
|
||||
<form action="saveDirectories" method="post" name="fullform" class="fullform" autocomplete="off">
|
||||
<input type="hidden" id="apikey" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/folders/save')" method="post" class="fullform" autocomplete="off">
|
||||
<input type="hidden" name="output" value="json" />
|
||||
<input type="hidden" id="ajax" name="ajax" value="1" />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('userFolders') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
@@ -35,7 +33,7 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="complete_dir">$T('opt-complete_dir')</label>
|
||||
<input type="text" name="complete_dir" id="complete_dir" value="$complete_dir" data-initialdir="$my_home" />
|
||||
<a class="btn btn-default" href="${root}config/sorting/"><span class="glyphicon glyphicon-sort-by-alphabet"></span> $T('cmenu-sorting')</a>
|
||||
<a class="btn btn-default" href="$url('config/sorting')"><span class="glyphicon glyphicon-sort-by-alphabet"></span> $T('cmenu-sorting')</a>
|
||||
<span class="desc">$T('explain-complete_dir') <br/> $T('explain-complete_dir-sorting')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
@@ -113,7 +111,7 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="log_dir">$T('opt-log_dir')</label>
|
||||
<input type="text" name="log_dir" id="log_dir" value="$log_dir" data-initialdir="$my_lcldata" />
|
||||
<a class="btn btn-default" id="purge_log_files" href="${root}"><span class="glyphicon glyphicon-trash"></span> $T('purge_log_files')</a>
|
||||
<a class="btn btn-default" id="purge_log_files" href="$url()"><span class="glyphicon glyphicon-trash"></span> $T('purge_log_files')</a>
|
||||
<span class="desc">$T('explain-log_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -139,8 +137,8 @@
|
||||
if ( confirm("$T('confirm')") ) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: {mode: 'config', name: 'purge_log_files', output: 'json', apikey: jQuery('#apikey').val()}
|
||||
url: "$url('api')",
|
||||
data: {mode: 'config', name: 'purge_log_files', output: 'json'}
|
||||
})
|
||||
} else {
|
||||
return false;
|
||||
|
||||
@@ -8,9 +8,7 @@
|
||||
<input type="checkbox" id="advanced-settings-button" name="advanced-settings-button"> $T('button-advanced')
|
||||
</label>
|
||||
</div>
|
||||
<form action="saveGeneral" method="post" name="fullform" class="fullform" autocomplete="off">
|
||||
<input type="hidden" id="apikey" name="apikey" value="$apikey" />
|
||||
<input type="hidden" id="ajax" name="ajax" value="1" />
|
||||
<form action="$url('config/general/save')" method="post" class="fullform" autocomplete="off">
|
||||
<input type="hidden" name="output" value="json" />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
@@ -46,7 +44,6 @@
|
||||
<!--#end if#-->
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<span class="desc">$T('explain-web_dir') <a href="$caller_url">$caller_url</a></span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="language">$T('opt-language')</label>
|
||||
@@ -223,9 +220,7 @@
|
||||
</div><!-- /section -->
|
||||
</form>
|
||||
|
||||
<form action="uploadConfig" method="post" name="fullform" class="fullform" autocomplete="off" enctype="multipart/form-data">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="ajax" value="1" />
|
||||
<form action="$url('config/general/upload_config')" method="post" class="fullform" autocomplete="off" enctype="multipart/form-data">
|
||||
<input type="hidden" name="output" value="json" />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
@@ -252,7 +247,7 @@
|
||||
</form>
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<div class="modal fade" id="modal_qr">
|
||||
<div class="modal fade" id="modal_qr" tabindex="-1" role="dialog" aria-modal="true" aria-label="$T('explain-qr-code')">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
@@ -280,8 +275,6 @@ jQuery(document).ready(function(){
|
||||
// Skip the fancy stuff, just submit
|
||||
this.submit()
|
||||
})
|
||||
// No JSON response
|
||||
jQuery('#ajax').val('')
|
||||
})
|
||||
hideOrShowTranslate()
|
||||
|
||||
@@ -312,17 +305,16 @@ jQuery(document).ready(function(){
|
||||
safeCheck.on('change', checkSafety)
|
||||
|
||||
// Click functions
|
||||
jQuery('#apikey, #nzbkey').click(function () { jQuery(this).select() });
|
||||
jQuery('#apikey_display, #nzbkey').click(function () { jQuery(this).select() });
|
||||
|
||||
jQuery('#generate_new_apikey').click(function () {
|
||||
if (confirm("$T('confirm')")) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: {mode:'config', name:'set_apikey', apikey: jQuery('#apikey').val()},
|
||||
url: "$url('api')",
|
||||
data: { mode: 'config', name: 'set_apikey' },
|
||||
success: function(msg){
|
||||
jQuery('#apikey').val(msg);
|
||||
document.location = document.location;
|
||||
jQuery('#apikey_display').val(msg.apikey);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -331,11 +323,10 @@ jQuery(document).ready(function(){
|
||||
if (confirm("$T('confirm')")) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: { mode:'config', name:'set_nzbkey', apikey: jQuery('#apikey').val() },
|
||||
success: function(msg){
|
||||
jQuery('#nzbkey').val(msg);
|
||||
document.location = document.location;
|
||||
url: "$url('api')",
|
||||
data: { mode: 'config', name: 'set_nzbkey' },
|
||||
success: function(msg) {
|
||||
jQuery('#nzbkey').val(msg.nzbkey);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -366,8 +357,8 @@ jQuery(document).ready(function(){
|
||||
// Submit request and then restart
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: { mode: 'config', name: 'regenerate_certs', apikey: jQuery('#apikey').val() },
|
||||
url: "$url('api')",
|
||||
data: { mode: 'config', name: 'regenerate_certs' },
|
||||
success: function(msg) {
|
||||
do_restart()
|
||||
}
|
||||
@@ -404,8 +395,8 @@ jQuery(document).ready(function(){
|
||||
jQuery('#create_backup').click(function () {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: {mode:'config', name:'create_backup', output:'json', apikey: jQuery('#apikey').val()},
|
||||
url: "$url('api')",
|
||||
data: { mode: 'config', name: 'create_backup', output: 'json' },
|
||||
success: function(data) {
|
||||
if(data.value.result) {
|
||||
alert("$T('backup'):\n" + data.value.message)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!--#set global $pane="Email"#-->
|
||||
<!--#set global $pane="Notify"#-->
|
||||
<!--#set global $help_uri = $confighelpuri + "notifications"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
@@ -7,10 +7,11 @@
|
||||
<!--#def show_notify_checkboxes($section_label)#-->
|
||||
<!--#for $type in $notify_types#-->
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="${section_label}_prio_$type">
|
||||
<input type="checkbox" class="notify-checkboxes" name="${section_label}_prio_$type" id="${section_label}_prio_$type" value="1" <!--#if $getVar($section_label + '_prio_' + $type) then 'checked="checked"' else ""#--> />
|
||||
<label class="config" for="${section_label}_prio_$type">
|
||||
$T($notify_types[$type]).replace('/', ' / ')
|
||||
</label>
|
||||
<input type="checkbox" name="${section_label}_prio_$type" id="${section_label}_prio_$type" value="1" <!--#if $getVar($section_label + '_prio_' + $type) then 'checked="checked"' else ""#--> />
|
||||
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
<!--#end def#-->
|
||||
@@ -29,10 +30,8 @@
|
||||
<!--#end def#-->
|
||||
|
||||
<div class="colmask">
|
||||
<form action="saveNotify" method="post" name="fullform" class="fullform" autocomplete="off">
|
||||
<input type="hidden" id="apikey" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/notify/save')" method="post" class="fullform" autocomplete="off">
|
||||
<input type="hidden" name="output" value="json" />
|
||||
<input type="hidden" id="ajax" name="ajax" value="1" />
|
||||
<div class="section" id="email">
|
||||
<div class="col2">
|
||||
<h3>$T('cmenu-email') <a href="$help_uri#toc0" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
@@ -93,8 +92,8 @@
|
||||
</div>
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_email" rel="$T('askTestEmail')"><span class="glyphicon glyphicon-envelope"></span> $T('link-testEmail')</button>
|
||||
<div class="result-box">
|
||||
<button class="btn btn-default" type="button" id="test_email" rel="$T('askTestEmail')" aria-busy="false"><span class="glyphicon glyphicon-envelope" aria-hidden="true"></span> $T('link-testEmail')</button>
|
||||
<div class="result-box" role="status" aria-live="polite" aria-atomic="true">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -117,8 +116,8 @@
|
||||
$show_notify_checkboxes('ncenter')
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_notif"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
<div class="result-box">
|
||||
<button class="btn btn-default" type="button" id="test_notif" aria-busy="false"><span class="glyphicon glyphicon-comment" aria-hidden="true"></span> $T('testNotify')</button>
|
||||
<div class="result-box" role="status" aria-live="polite" aria-atomic="true">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -143,8 +142,8 @@
|
||||
$show_notify_checkboxes('acenter')
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_windows"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
<div class="result-box">
|
||||
<button class="btn btn-default" type="button" id="test_windows" aria-busy="false"><span class="glyphicon glyphicon-comment" aria-hidden="true"></span> $T('testNotify')</button>
|
||||
<div class="result-box" role="status" aria-live="polite" aria-atomic="true">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -169,8 +168,8 @@
|
||||
$show_notify_checkboxes('ntfosd')
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_osd"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
<div class="result-box">
|
||||
<button class="btn btn-default" type="button" id="test_osd" aria-busy="false"><span class="glyphicon glyphicon-comment" aria-hidden="true"></span> $T('testNotify')</button>
|
||||
<div class="result-box" role="status" aria-live="polite" aria-atomic="true">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -209,15 +208,15 @@
|
||||
<label class="config" for="${section_label}_target_${type}">
|
||||
$T($notify_types[$type]).replace('/', ' / ')
|
||||
</label>
|
||||
<input type="checkbox" name="${section_label}_target_${type}_enable" id="${section_label}_target_${type}_enable" value="1" <!--#if $getVar($section_label + '_target_' + $type + '_enable') then 'checked="checked"' else ""#--> />
|
||||
<input type="checkbox" class="notify-checkboxes" name="${section_label}_target_${type}_enable" id="${section_label}_target_${type}_enable" value="1" <!--#if $getVar($section_label + '_target_' + $type + '_enable') then 'checked="checked"' else ""#--> />
|
||||
<input type="text" name="${section_label}_target_${type}" id="${section_label}_target_${type}" value="$getVar($section_label + '_target_' + $type)" placeholder="$T('opt-apprise_urls')" />
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_apprise"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
<div class="result-box">
|
||||
<button class="btn btn-default" type="button" id="test_apprise" aria-busy="false"><span class="glyphicon glyphicon-comment" aria-hidden="true"></span> $T('testNotify')</button>
|
||||
<div class="result-box" role="status" aria-live="polite" aria-atomic="true">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -255,8 +254,8 @@
|
||||
$show_notify_checkboxes('nscript')
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_nscript"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
<div class="result-box">
|
||||
<button class="btn btn-default" type="button" id="test_nscript" aria-busy="false"><span class="glyphicon glyphicon-comment" aria-hidden="true"></span> $T('testNotify')</button>
|
||||
<div class="result-box" role="status" aria-live="polite" aria-atomic="true">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -300,8 +299,8 @@
|
||||
<!--#end for#-->
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_prowl"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
<div class="result-box">
|
||||
<button class="btn btn-default" type="button" id="test_prowl" aria-busy="false"><span class="glyphicon glyphicon-comment" aria-hidden="true"></span> $T('testNotify')</button>
|
||||
<div class="result-box" role="status" aria-live="polite" aria-atomic="true">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -366,8 +365,8 @@
|
||||
<!--#end for#-->
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_pushover"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
<div class="result-box">
|
||||
<button class="btn btn-default" type="button" id="test_pushover" aria-busy="false"><span class="glyphicon glyphicon-comment" aria-hidden="true"></span> $T('testNotify')</button>
|
||||
<div class="result-box" role="status" aria-live="polite" aria-atomic="true">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -403,8 +402,8 @@
|
||||
$show_notify_checkboxes('pushbullet')
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_pushbullet"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
<div class="result-box">
|
||||
<button class="btn btn-default" type="button" id="test_pushbullet" aria-busy="false"><span class="glyphicon glyphicon-comment" aria-hidden="true"></span> $T('testNotify')</button>
|
||||
<div class="result-box" role="status" aria-live="polite" aria-atomic="true">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -445,8 +444,9 @@ jQuery(document).ready(function(){
|
||||
}
|
||||
// Disable button and get the data
|
||||
jQuery(buttonObj).attr("disabled", "disabled")
|
||||
jQuery(buttonObj).attr("aria-busy", "true")
|
||||
jQuery(buttonObj).find('span').toggleClass('glyphicon-comment glyphicon-refresh spin-glyphicon')
|
||||
var data = { mode: buttonObj.id, apikey: '$apikey', output: 'json' };
|
||||
var data = { mode: buttonObj.id, output: 'json' };
|
||||
jQuery(buttonObj).parents('.section').extractFormDataTo(data);
|
||||
|
||||
// Clear up the box
|
||||
@@ -454,22 +454,23 @@ jQuery(document).ready(function(){
|
||||
|
||||
// Get the request
|
||||
jQuery.ajax({
|
||||
type: "GET",
|
||||
url: "../../api",
|
||||
type: "POST",
|
||||
url: "$url('api')",
|
||||
data: data
|
||||
}).then(function(data) {
|
||||
// Remove disabled and make the box
|
||||
jQuery(buttonObj).removeAttr("disabled")
|
||||
jQuery(buttonObj).attr("aria-busy", "false")
|
||||
jQuery(buttonObj).find('span').toggleClass('glyphicon-comment glyphicon-refresh spin-glyphicon')
|
||||
resultBox.removeClass('alert-success alert-danger').show()
|
||||
if(data.status) {
|
||||
resultBox.addClass('alert-success')
|
||||
resultBox.text('$T('notifications-notesent')')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-ok-sign"></span> ')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> ')
|
||||
} else {
|
||||
resultBox.addClass('alert-danger')
|
||||
resultBox.text(data.error)
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-exclamation-sign"></span> ')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> ')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -8,8 +8,7 @@
|
||||
<div class="padTable">
|
||||
<a class="main-helplink" href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<p>$T('explain-RSS')</p>
|
||||
<form action="add_rss_feed" method="post" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form data-form="add-rss-feed" action="$url('config/rss/add_rss_feed')" method="post" autocomplete="off">
|
||||
<table class="catTable addRssTable">
|
||||
<tr>
|
||||
<th> </th>
|
||||
@@ -38,8 +37,7 @@
|
||||
<!--#if $rss#-->
|
||||
<div class="section">
|
||||
<div class="padTable">
|
||||
<form action="save_rss_feed" method="post" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/rss/save_rss_feed')" method="post" autocomplete="off">
|
||||
<table id="subscriptions">
|
||||
<tbody>
|
||||
<!--#set $feeds = sorted($rss.keys(), key=lambda x: x.lower())#-->
|
||||
@@ -75,8 +73,7 @@
|
||||
</form>
|
||||
<!--#if $feeds#-->
|
||||
<br/>
|
||||
<form action="rss_now" method="post" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/rss/rss_now')" method="post" autocomplete="off">
|
||||
<button type="submit" class="btn btn-default readAll"><span class="glyphicon glyphicon-sort"></span> $T('button-rssNow')</button>
|
||||
</form>
|
||||
<!--#end if#-->
|
||||
@@ -84,8 +81,7 @@
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<div class="section">
|
||||
<form action="save_rss_rate" method="post" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/rss/save_rss_rate')" method="post" autocomplete="off">
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
@@ -107,7 +103,7 @@
|
||||
<div class="padTable">
|
||||
<a class="main-helplink" href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<h2 class="nomargin activeRSS">
|
||||
<a href="${root}config/rss/">$T('cmenu-rss')</a> »
|
||||
<a href="$url('config/rss')">$T('cmenu-rss')</a> »
|
||||
$active_feed
|
||||
</h2>
|
||||
<!--#if $error#-->
|
||||
@@ -116,8 +112,7 @@
|
||||
$error
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<form action="upd_rss_feed" method="post">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/rss/upd_rss_feed')" method="post">
|
||||
<input type="hidden" name="feed" value="$active_feed" />
|
||||
<input type="hidden" name="uri" value="$rss[$feed]['uris']" />
|
||||
<table class="catTable">
|
||||
@@ -156,7 +151,8 @@
|
||||
<option value=">"> $T('rss-atleast')</option>
|
||||
<option value="<"> $T('rss-atmost')</option>
|
||||
<option value="F"> $T('rss-from')</option>
|
||||
<option value="F"> $T('rss-from-show') ($T('rss-accept'))</option>
|
||||
<option value="S"> $T('rss-from-show') ($T('rss-accept'))</option>
|
||||
<option value="G"> $T('rss-age')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
@@ -207,8 +203,7 @@
|
||||
</table>
|
||||
</form>
|
||||
<!-- add new filter -->
|
||||
<form action="upd_rss_filter" method="post">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form data-form="update-rss-filter" action="$url('config/rss/upd_rss_filter')" method="post">
|
||||
<input type="hidden" name="index" value="$rss[$feed]['filtercount']" />
|
||||
<input type="hidden" name="feed" value="$active_feed" />
|
||||
<table class="catTable">
|
||||
@@ -230,6 +225,7 @@
|
||||
<option value="<"> $T('rss-atmost')</option>
|
||||
<option value="F"> $T('rss-from')</option>
|
||||
<option value="S"> $T('rss-from-show') ($T('rss-accept'))</option>
|
||||
<option value="G"> $T('rss-age')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
@@ -283,8 +279,7 @@
|
||||
<!--#set $fnum = 0#-->
|
||||
<!--#for $filter in $rss[$feed].filters#-->
|
||||
<!--#set $odd = not $odd#-->
|
||||
<form action="upd_rss_filter" method="post" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form data-form="update-rss-filter" action="$url('config/rss/upd_rss_filter')" method="post" autocomplete="off">
|
||||
<input type="hidden" name="index" value="$fnum" />
|
||||
<input type="hidden" name="feed" value="$active_feed" />
|
||||
<table class="catTable">
|
||||
@@ -306,6 +301,7 @@
|
||||
<option value="<" <!--#if $filter[3]=="<" then 'selected="selected"' else ""#-->> $T('rss-atmost')</option>
|
||||
<option value="F" <!--#if $filter[3]=="F" then 'selected="selected"' else ""#-->> $T('rss-from')</option>
|
||||
<option value="S" <!--#if $filter[3]=="S" then 'selected="selected"' else ""#-->> $T('rss-from-show') ($T('rss-accept'))</option>
|
||||
<option value="G" <!--#if $filter[3]=="G" then 'selected="selected"' else ""#-->> $T('rss-age')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
@@ -361,8 +357,7 @@
|
||||
</form>
|
||||
<!--#set $fnum = $fnum+1#-->
|
||||
<!--#end for#-->
|
||||
<form action="download_rss_feed" method="post">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/rss/download_rss_feed')" method="post">
|
||||
<input type="hidden" name="feed" value="$active_feed" />
|
||||
<div class="padding">
|
||||
<button type="button" class="btn btn-default testFeed" rel="$active_feed"><span class="glyphicon glyphicon-sort"></span> $T('button-preFeed')</button>
|
||||
@@ -397,9 +392,8 @@
|
||||
<!--#for $job in $matched#-->
|
||||
<tr class="infoTableSeperator">
|
||||
<td>
|
||||
<form action="download" method="get">
|
||||
<form data-form="download-rss-job" action="$url('config/rss/download')" method="post">
|
||||
<input type="hidden" value="$active_feed" name="feed" />
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="url" value="$job['url']" />
|
||||
<input type="hidden" name="nzbname" value="$job['nzbname']" />
|
||||
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-plus-sign"></span> $T('link-download')</button>
|
||||
@@ -441,9 +435,8 @@
|
||||
<!--#for $job in $unmatched#-->
|
||||
<tr class="infoTableSeperator">
|
||||
<td>
|
||||
<form action="download" method="get">
|
||||
<form data-form="download-rss-job" action="$url('config/rss/download')" method="post">
|
||||
<input type="hidden" value="$active_feed" name="feed" />
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="url" value="$job['url']" />
|
||||
<input type="hidden" name="nzbname" value="$job['nzbname']" />
|
||||
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-plus-sign"></span> $T('link-download')</button>
|
||||
@@ -470,9 +463,8 @@
|
||||
</div>
|
||||
<div class="tab-pane padTable" id="rss-tab-done">
|
||||
<!--#if $downloaded#-->
|
||||
<form action="clean_rss_jobs" method="post">
|
||||
<form action="$url('config/rss/clean_rss_jobs')" method="post">
|
||||
<input type="hidden" value="$active_feed" name="feed" />
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<table class="catTable">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -505,7 +497,7 @@
|
||||
</table>
|
||||
</form>
|
||||
<!--#else#-->
|
||||
$T('none')
|
||||
$T('none')
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
@@ -514,12 +506,12 @@
|
||||
</div>
|
||||
<!-- /colmask -->
|
||||
|
||||
<form method="post" action="save_rss_feed" class="modal fade" id="rss_edit_modal">
|
||||
<form method="post" action="$url('config/rss/save_rss_feed')" class="modal fade" id="rss_edit_modal" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="rss-edit-modal-title">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('Edit') <span id="feed_edit_name_label"></span></h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="rss-edit-modal-title">$T('Edit') <span id="feed_edit_name_label"></span></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
@@ -532,7 +524,6 @@
|
||||
<span class="help-block">$T('addMultipleFeeds')</span>
|
||||
</div>
|
||||
<input type="hidden" name="feed" id="feed_edit_old_name" />
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-danger" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span> $T('cancel')</button>
|
||||
@@ -542,7 +533,7 @@
|
||||
</div><!-- /.modal-dialog -->
|
||||
</form><!-- /.modal -->
|
||||
|
||||
<script type="text/javascript" src="${root}staticcfg/js/jquery.tablesort.min.js"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/js/jquery.tablesort.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript">
|
||||
function urlencode(str) {
|
||||
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
|
||||
@@ -586,8 +577,8 @@ jQuery(document).ready(function(){
|
||||
var whichFeed = jQuery(this).attr("rel");
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "del_rss_feed",
|
||||
data: {feed: whichFeed, apikey: "$apikey" }
|
||||
url: "$url('config/rss/del_rss_feed')",
|
||||
data: {feed: whichFeed }
|
||||
}).done(function( msg ) {
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
@@ -601,8 +592,8 @@ jQuery(document).ready(function(){
|
||||
var whichFeed = jQuery(this).attr("rel");
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "toggle_rss_feed",
|
||||
data: {feed: whichFeed, apikey: "$apikey" }
|
||||
url: "$url('config/rss/toggle_rss_feed')",
|
||||
data: {feed: whichFeed }
|
||||
}).done(function() {
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
@@ -612,7 +603,7 @@ jQuery(document).ready(function(){
|
||||
});
|
||||
|
||||
// Only the Accept filter needs all the options
|
||||
jQuery('form[action="upd_rss_filter"]').find('select[name="filter_type"]').change(function() {
|
||||
jQuery('form[data-form="update-rss-filter"]').find('select[name="filter_type"]').change(function() {
|
||||
jQuery(this).parent().parent().find('select:not([name="filter_type"])').attr('disabled', jQuery(this).val() !== "A" && jQuery(this).val() !== "S")
|
||||
})
|
||||
// Trigger on-load for all
|
||||
@@ -641,8 +632,8 @@ jQuery(document).ready(function(){
|
||||
var whichFeed = jQuery(this).attr("rel");
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "test_rss_feed",
|
||||
data: {feed: whichFeed, apikey: "$apikey" }
|
||||
url: "$url('config/rss/test_rss_feed')",
|
||||
data: {feed: whichFeed }
|
||||
}).done(function( msg ) {
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
@@ -654,15 +645,21 @@ jQuery(document).ready(function(){
|
||||
jQuery('.cleanFeed').click(function(){
|
||||
setActiveIcon(this)
|
||||
var theForm = jQuery(this).closest("form");
|
||||
theForm.attr("action", "clean_rss_jobs").submit();
|
||||
theForm.attr("action", "$url('config/rss/clean_rss_jobs')").submit();
|
||||
});
|
||||
|
||||
jQuery('.evalFeed').click(function(){
|
||||
setActiveIcon(this)
|
||||
var theForm = jQuery(this).closest("form");
|
||||
theForm.attr("action", "$url('config/rss/eval_rss_feed')").submit();
|
||||
});
|
||||
|
||||
jQuery('.delFilter').click(function(){
|
||||
var theForm = jQuery(this).closest("form");
|
||||
theForm.attr("action", "del_rss_filter").submit();
|
||||
theForm.attr("action", "$url('config/rss/del_rss_filter')").submit();
|
||||
});
|
||||
|
||||
jQuery('form[action="download"]').ajaxForm({
|
||||
jQuery('form[data-form="download-rss-job"]').ajaxForm({
|
||||
datatype: 'json',
|
||||
beforeSubmit: function (_, form) {
|
||||
jQuery(form).find('button').attr("disabled", "disabled")
|
||||
|
||||
@@ -17,17 +17,16 @@ else:
|
||||
<div class="col2">
|
||||
<h3>$T('addSchedule') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<form action="addSchedule" method="post" autocomplete="off">
|
||||
<input type="hidden" id="apikey" name="apikey" value="$apikey" />
|
||||
<form data-form="add-schedule" action="$url('config/scheduling/add_schedule')" method="post" autocomplete="off">
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="hour">$T('hour').capitalize() : $T('minute').capitalize()</label>
|
||||
<select name="hour" id="hour">
|
||||
<select name="hour" id="hour" aria-label="$T('hour').capitalize()">
|
||||
<!--#for $i in range(24)#-->
|
||||
<option value="$i" <!--#if hour == i then 'selected="selected"' else ""#--> > $str($i).zfill(2) </option>
|
||||
<!--#end for#-->
|
||||
</select> <b>:</b> <select name="minute" id="minute">
|
||||
</select> <b>:</b> <select name="minute" id="minute" aria-label="$T('minute').capitalize()">
|
||||
<!--#for $i in range(60)#-->
|
||||
<option value="$i"> $str($i).zfill(2) </option>
|
||||
<!--#end for#-->
|
||||
@@ -90,13 +89,12 @@ else:
|
||||
<!--#set $odd = True#-->
|
||||
<!--#for $schednum, $line in enumerate($schedlines)#-->
|
||||
<!--#set $odd = not $odd#-->
|
||||
<form action="delSchedule" method="post">
|
||||
<input type="hidden" name="apikey" value="$apikey"/>
|
||||
<input type="hidden" name="line" id="line" value="$line"/>
|
||||
<form data-form="del-schedule" action="$url('config/scheduling/del_schedule')" method="post">
|
||||
<input type="hidden" name="line" value="$line"/>
|
||||
<div class="field-pair infoTableSeperator <!--#if $odd then "" else " alt"#-->">
|
||||
<input type="checkbox" name="schedenabled" value="$line" <!--#if int($taskinfo[$schednum][5]) > 0 then 'checked="checked"' else ""#-->>
|
||||
<button class="btn btn-default float-left"><span class="glyphicon glyphicon-trash"></span></button>
|
||||
<div class="scheduleEntry">
|
||||
<input type="checkbox" name="schedenabled" value="$line" aria-label="$T('enabled')" aria-describedby="schedule-description-$schednum" <!--#if int($taskinfo[$schednum][5]) > 0 then 'checked="checked"' else ""#-->>
|
||||
<button class="btn btn-default float-left" type="submit" aria-label="$T('nzo-delete')" aria-describedby="schedule-description-$schednum"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></button>
|
||||
<div class="scheduleEntry" id="schedule-description-$schednum">
|
||||
<span class="time">$taskinfo[$schednum][1]:$taskinfo[$schednum][2]</span><span class="frequency">$taskinfo[$schednum][3]</span> <span class="darkred">$taskinfo[$schednum][4]</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -136,8 +134,8 @@ else:
|
||||
jQuery('[name="schedenabled"]').click(function() {
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "toggleSchedule",
|
||||
data: {line: jQuery(this).val(), apikey: "$apikey" }
|
||||
url: "$url('config/scheduling/toggle_schedule')",
|
||||
data: {line: jQuery(this).val() }
|
||||
}).done(function() {
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
|
||||
@@ -40,8 +40,7 @@
|
||||
<h3>$T('addServer') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div>
|
||||
<div class="col1">
|
||||
<form action="addServer" method="post" autocomplete="off" onsubmit="removeObfuscation();">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form data-form="add-server" action="$url('config/server/add_server')" method="post" autocomplete="off">
|
||||
<input type="hidden" name="output" value="json" />
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
@@ -138,8 +137,8 @@
|
||||
</div>
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default addNewServer" disabled data-toggle="tooltip" data-placement="top" title="$T('wizard-test-server-required')"><span class="glyphicon glyphicon-plus"></span> $T('button-addServer')</button>
|
||||
<button class="btn btn-default testServer" type="button"><span class="glyphicon glyphicon-sort"></span> $T('button-testServer')</button>
|
||||
<div class="result-box">
|
||||
<button class="btn btn-default testServer" type="button" aria-busy="false"><span class="glyphicon glyphicon-sort" aria-hidden="true"></span> $T('button-testServer')</button>
|
||||
<div class="result-box" role="status" aria-live="polite" aria-atomic="true">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -153,11 +152,9 @@
|
||||
<!--#set $cur_prio_color = -1 #-->
|
||||
<!--#set $last_prio = -1 #-->
|
||||
<!--#for $cur, $server in enumerate($servers) #-->
|
||||
<form action="saveServer" method="post" class="fullform" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/server/save_server')" method="post" class="fullform" autocomplete="off">
|
||||
<input type="hidden" name="output" value="json" />
|
||||
<input type="hidden" name="server" value="$server['name']" />
|
||||
<input type="hidden" name="ajax" value=1 />
|
||||
|
||||
<div class="section <!--#if int($server['enable']) == 0 then 'server-disabled' else ""#-->">
|
||||
<div class="col2 <!--#if int($server['enable']) == 0 then 'server-disabled' else ""#-->">
|
||||
@@ -276,10 +273,10 @@
|
||||
</div>
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default testServer" type="button"><span class="glyphicon glyphicon-sort"></span> $T('button-testServer')</button>
|
||||
<button class="btn btn-default testServer" type="button" aria-busy="false"><span class="glyphicon glyphicon-sort" aria-hidden="true"></span> $T('button-testServer')</button>
|
||||
<button class="btn btn-default delServer"><span class="glyphicon glyphicon-trash"></span> $T('button-delServer')</button>
|
||||
|
||||
<div class="result-box">
|
||||
<div class="result-box" role="status" aria-live="polite" aria-atomic="true">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -328,8 +325,8 @@
|
||||
<!--#end for#-->
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="${root}staticcfg/js/chartist.min.js"></script>
|
||||
<script type="text/javascript" src="${root}staticcfg/js/filesize.min.js"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/js/chartist.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/js/filesize.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript">
|
||||
// Standardize chart options
|
||||
var chartOptions = {
|
||||
@@ -480,11 +477,9 @@
|
||||
// Initialize tooltips
|
||||
jQuery('[data-toggle="tooltip"]').tooltip()
|
||||
|
||||
// Reload form in case we change items that make the servers appear different
|
||||
// Reload the page after saving in case we change items that make the servers appear different
|
||||
jQuery('input[name="priority"], input[name="displayname"], textarea[name="notes"]').on('change', function(event) {
|
||||
var parentForm = jQuery(event.target).parents("form")
|
||||
parentForm.unbind("submit")
|
||||
parentForm.find('input[name="ajax"]').val('')
|
||||
jQuery(event.target).parents("form").attr("data-reload-on-save", "")
|
||||
})
|
||||
|
||||
/**
|
||||
@@ -549,28 +544,31 @@
|
||||
var theButton = jQuery(this)
|
||||
var resultBox = theButton.parents('.col1').find('.result-box .alert');
|
||||
theButton.attr("disabled", "disabled")
|
||||
theButton.attr("aria-busy", "true")
|
||||
theButton.find('span').toggleClass('glyphicon-sort glyphicon-refresh spin-glyphicon')
|
||||
resultBox.removeClass('alert-success alert-danger').addClass('alert-info').html("$T('srv-testing')").show()
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
url: "$url('api')",
|
||||
data: "mode=config&name=test_server&" + jQuery(this).parents('form:first').serialize()
|
||||
}).then(function(data) {
|
||||
// Let's replace the link
|
||||
msg = data.value.message.replace('https://sabnzbd.org/certificate-errors', '<a href="https://sabnzbd.org/certificate-errors" class="alert-link" target="_blank">https://sabnzbd.org/certificate-errors</a>')
|
||||
msg = msg.replace('-', '<br>')
|
||||
// Fill the box and enable the button
|
||||
resultBox.removeClass('alert-success alert-danger').show()
|
||||
resultBox.removeClass('alert-info alert-success alert-danger').show()
|
||||
resultBox.html(msg)
|
||||
theButton.removeAttr("disabled")
|
||||
theButton.attr("aria-busy", "false")
|
||||
theButton.find('span').toggleClass('glyphicon-sort glyphicon-refresh spin-glyphicon')
|
||||
|
||||
// Success or not?
|
||||
if(data.value.result) {
|
||||
resultBox.addClass('alert-success')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-ok-sign"></span> ')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span> ')
|
||||
|
||||
// Allow adding the new server if we are in the new-server section
|
||||
if(theButton.parents("form[action='addServer']").length) {
|
||||
if(theButton.parents("form[data-form='add-server']").length) {
|
||||
jQuery(".addNewServer").removeAttr("disabled")
|
||||
jQuery(".addNewServer").removeAttr("data-toggle")
|
||||
jQuery(".addNewServer").removeAttr("title")
|
||||
@@ -578,10 +576,10 @@
|
||||
}
|
||||
} else {
|
||||
resultBox.addClass('alert-danger')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-exclamation-sign"></span> ')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> ')
|
||||
|
||||
// Disable the adding of new server, just to be sure
|
||||
if(theButton.parents("form[action='addServer']").length) {
|
||||
if(theButton.parents("form[data-form='add-server']").length) {
|
||||
jQuery(".addNewServer").attr("disabled", "disabled")
|
||||
jQuery(".addNewServer").attr("data-toggle", "tooltip")
|
||||
jQuery(".addNewServer").attr("data-placement", "top")
|
||||
@@ -592,9 +590,34 @@
|
||||
});
|
||||
});
|
||||
|
||||
jQuery('.addNewServer').click(function(event){
|
||||
event.preventDefault()
|
||||
removeObfuscation()
|
||||
var theButton = jQuery(this)
|
||||
var resultBox = theButton.parents('.col1').find('.result-box .alert')
|
||||
theButton.attr("disabled", "disabled")
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "$url('config/server/add_server')",
|
||||
data: theButton.parents('form:first').serialize()
|
||||
}).then(function(data) {
|
||||
if(data.status) {
|
||||
// Success — reload to show the new server
|
||||
formWasSubmitted = true
|
||||
formHasChanged = false
|
||||
location.reload()
|
||||
} else {
|
||||
// Show error in the result box
|
||||
resultBox.removeClass('alert-success').addClass('alert-danger').show()
|
||||
resultBox.html('<span class="glyphicon glyphicon-exclamation-sign"></span> ' + data.error)
|
||||
theButton.removeAttr("disabled")
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
jQuery('.delServer').click(function(){
|
||||
if( confirm("$T('confirm')") ) {
|
||||
jQuery(this).parents('form:first').attr('action','delServer').submit();
|
||||
jQuery(this).parents('form:first').attr('action',"$url('config/server/delete_server')").submit();
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
@@ -605,7 +628,7 @@
|
||||
|
||||
jQuery('.clrServer').click(function(){
|
||||
if( confirm("$T('confirm')") ) {
|
||||
jQuery(this).parents('form:first').attr('action','clrServer').submit();
|
||||
jQuery(this).parents('form:first').attr('action',"$url('config/server/clear_server')").submit();
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
@@ -618,8 +641,8 @@
|
||||
var whichServer = jQuery(this).attr("name");
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "toggleServer",
|
||||
data: {server: whichServer, apikey: "$apikey" }
|
||||
url: "$url('config/server/toggle_server')",
|
||||
data: {server: whichServer }
|
||||
}).done(function() {
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
|
||||
@@ -20,8 +20,7 @@
|
||||
<!--#set $selected_types = ["0"] if not len($selected_types) else $selected_types #-->
|
||||
<!-- SORTER $cur -->
|
||||
<div class="section <!--#if $cur != 0#-->sorter<!--#end if#-->" id="sorter_$cur" <!--#if $cur == 0#-->style="display: none;"<!--#end if#-->>
|
||||
<form action="save_sorter" method="post" autocomplete="off" <!--#if $cur != 0#-->class="sorting-row"<!--#end if#-->>
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/sorting/save_sorter')" method="post" autocomplete="off" <!--#if $cur != 0#-->class="sorting-row"<!--#end if#-->>
|
||||
<input type="hidden" name="order" value="$slot.order" />
|
||||
<input type="hidden" value="$slot.name" name="name" />
|
||||
<!--#if $cur == 0#-->
|
||||
@@ -347,8 +346,7 @@
|
||||
<div class="section align-center sorting-quick-setup">
|
||||
<h3>$T('sort-quick-add'):</h3>
|
||||
<!--#if "tv" in $categories#-->
|
||||
<form action="save_sorter" method="post" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/sorting/save_sorter')" method="post" autocomplete="off">
|
||||
<input type="hidden" name="order" value="0" />
|
||||
<input type="hidden" name="is_active" value="1" />
|
||||
<input type="hidden" name="name" value="">
|
||||
@@ -366,8 +364,7 @@
|
||||
</form>
|
||||
<!--#end if#-->
|
||||
<!--#if "movies" in $categories#-->
|
||||
<form action="save_sorter" method="post" autocomplete="off">
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/sorting/save_sorter')" method="post" autocomplete="off">
|
||||
<input type="hidden" name="order" value="0" />
|
||||
<input type="hidden" name="is_active" value="1" />
|
||||
<input type="hidden" name="name" value="">
|
||||
@@ -388,7 +385,7 @@
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<script type="text/javascript" src="${root}staticcfg/js/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/js/jquery-ui.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript">
|
||||
// http://stackoverflow.com/questions/2219924/
|
||||
var typewatch = (function(){
|
||||
@@ -414,13 +411,12 @@
|
||||
typewatch(function () {
|
||||
jQuery.ajax({
|
||||
type: "GET",
|
||||
url: "../../api",
|
||||
url: "$url('api')",
|
||||
data: {
|
||||
mode: 'eval_sort',
|
||||
job_name: jQuery('#preview_name_' + sort_nr).val(),
|
||||
sort_string: preview_sort_string,
|
||||
multipart_label: jQuery('#multipart_label_' + sort_nr).val(),
|
||||
apikey: '$apikey',
|
||||
output: 'json'
|
||||
},
|
||||
success: function(data) {
|
||||
@@ -437,7 +433,7 @@
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('.delSorter').click(function() {
|
||||
var theForm = jQuery(this).closest("form");
|
||||
theForm.attr("action", "delete").submit();
|
||||
theForm.attr("action", "$url('config/sorting/delete')").submit();
|
||||
});
|
||||
|
||||
jQuery('.addSorter').click(function(){
|
||||
@@ -494,8 +490,8 @@
|
||||
var data = {}
|
||||
jQuery(elm).extractFormDataTo(data);
|
||||
jQuery.ajax({
|
||||
type: "GET",
|
||||
url: window.location.pathname + 'save_sorter',
|
||||
type: "POST",
|
||||
url: "$url('config/sorting/save_sorter')",
|
||||
data: data,
|
||||
async: false // To prevent race-conditions when updating sorters
|
||||
})
|
||||
@@ -509,8 +505,8 @@
|
||||
var whichSorter = jQuery(this).attr("rel");
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
url: "toggle_sorter",
|
||||
data: {sorter: whichSorter, apikey: "$apikey" }
|
||||
url: "$url('config/sorting/toggle_sorter')",
|
||||
data: {sorter: whichSorter }
|
||||
}).done(function() {
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
<form action="saveSpecial" method="post" autocomplete="off">
|
||||
<input type="hidden" id="apikey" name="apikey" value="$apikey" />
|
||||
<form action="$url('config/special/save')" method="post" class="fullform" autocomplete="off">
|
||||
<div class="padTable">
|
||||
<h4 class="darkred nomargin">$T('explain-special')</h4>
|
||||
</div>
|
||||
|
||||
@@ -8,9 +8,7 @@
|
||||
<input type="checkbox" id="advanced-settings-button" name="advanced-settings-button"> $T('button-advanced')
|
||||
</label>
|
||||
</div>
|
||||
<form action="saveSwitches" method="post" name="fullform" class="fullform" autocomplete="off">
|
||||
<input type="hidden" id="apikey" name="apikey" value="$apikey" />
|
||||
<input type="hidden" id="ajax" name="ajax" value="1" />
|
||||
<form action="$url('config/switches/save')" method="post" class="fullform" autocomplete="off">
|
||||
<input type="hidden" name="output" value="json" />
|
||||
<div class="section advanced-settings">
|
||||
<div class="col2">
|
||||
@@ -152,6 +150,7 @@
|
||||
<select name="auto_sort" id="auto_sort">
|
||||
<option value="">$T('default')</option>
|
||||
<option value="remaining asc" <!--#if $auto_sort == "remaining asc" then 'selected="selected"' else ""#--> >$T('Glitter-sortRemaining')</option>
|
||||
<option value="remaining_bytes asc" <!--#if $auto_sort == "remaining_bytes asc" then 'selected="selected"' else ""#--> >$T('Glitter-sortRemainingBytesAsc')</option>
|
||||
<option value="avg_age desc" <!--#if $auto_sort == "avg_age desc" then 'selected="selected"' else ""#--> >$T('Glitter-sortAgeAsc')</option>
|
||||
<option value="avg_age asc" <!--#if $auto_sort == "avg_age asc" then 'selected="selected"' else ""#--> >$T('Glitter-sortAgeDesc')</option>
|
||||
<option value="name asc" <!--#if $auto_sort == "name asc" then 'selected="selected"' else ""#--> >$T('Glitter-sortNameAsc')</option>
|
||||
@@ -261,7 +260,7 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="history_retention_option">$T('opt-history_retention')</label>
|
||||
<select name="history_retention_option" id="history_retention_option">
|
||||
<option value="all" <!--#if $auto_sort == "all" then 'selected="selected"' else ""#-->>$T('history_retention-all')</option>
|
||||
<option value="all" <!--#if $history_retention_option == "all" then 'selected="selected"' else ""#-->>$T('history_retention-all')</option>
|
||||
<option value="number-archive" <!--#if $history_retention_option == "number-archive" then 'selected="selected"' else ""#-->>$T('history_retention-number-archive')</option>
|
||||
<option value="number-delete" <!--#if $history_retention_option == "number-delete" then 'selected="selected"' else ""#-->>$T('history_retention-number-delete')</option>
|
||||
<option value="days-archive" <!--#if $history_retention_option == "days-archive" then 'selected="selected"' else ""#-->>$T('history_retention-days-archive')</option>
|
||||
@@ -394,9 +393,9 @@ jQuery(document).ready(function() {
|
||||
|
||||
// Send request
|
||||
jQuery.ajax({
|
||||
type: "GET",
|
||||
url: "../../api",
|
||||
data: "mode=set_config_default&apikey=${apikey}&output=json&keyword=" + key_container.join('&keyword=')
|
||||
type: "POST",
|
||||
url: "$url('api')",
|
||||
data: "mode=set_config_default&output=json&keyword=" + key_container.join('&keyword=')
|
||||
}).then(function(data) {
|
||||
// Reload page
|
||||
document.location = document.location
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="$active_lang">
|
||||
<html lang="$active_lang" data-color-scheme="$color_scheme">
|
||||
<head>
|
||||
<title>SABnzbd - $T('login')</title>
|
||||
|
||||
@@ -7,38 +7,34 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1" />
|
||||
<meta name="apple-mobile-web-app-title" content="SABnzbd" />
|
||||
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="../staticcfg/ico/apple-touch-icon-76x76-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="../staticcfg/ico/apple-touch-icon-120x120-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="../staticcfg/ico/apple-touch-icon-152x152-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="../staticcfg/ico/apple-touch-icon-180x180-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="../staticcfg/ico/android-192x192.png" />
|
||||
<link rel="shortcut icon" href="../staticcfg/ico/favicon.ico?v=$cache_buster" />
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="$url('staticcfg/ico/apple-touch-icon-76x76-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="$url('staticcfg/ico/apple-touch-icon-120x120-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="$url('staticcfg/ico/apple-touch-icon-152x152-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="$url('staticcfg/ico/apple-touch-icon-180x180-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="$url('staticcfg/ico/android-192x192.png', v=$cache_buster)" />
|
||||
<link rel="shortcut icon" href="$url('staticcfg/ico/favicon.ico', v=$cache_buster)" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/bootstrap/css/bootstrap.min.css?v=$cache_buster" />
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/css/login.css?v=$cache_buster" />
|
||||
<!--#if $color_scheme not in ('Light', '') #-->
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/css/${color_scheme}.css?v=$cache_buster"/>
|
||||
<!--#end if#-->
|
||||
<link rel="stylesheet" type="text/css" href="$url('staticcfg/bootstrap/css/bootstrap.min.css', v=$cache_buster)" />
|
||||
<link rel="stylesheet" type="text/css" href="$url('staticcfg/css/login.css', v=$cache_buster)" />
|
||||
|
||||
<script type="text/javascript" src="../staticcfg/js/jquery-3.5.1.min.js?v=$cache_buster"></script>
|
||||
<script type="text/javascript" src="../staticcfg/bootstrap/js/bootstrap.min.js?v=$cache_buster"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/js/jquery-3.7.1.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/bootstrap/js/bootstrap.min.js', v=$cache_buster)"></script>
|
||||
</head>
|
||||
<html>
|
||||
<body>
|
||||
<div class="account-wall">
|
||||
<div class="text-center logo-header">
|
||||
<!--#include $webdir + "/staticcfg/images/logo-full.svg"#-->
|
||||
<a href="https://sabnzbd.org/wiki/faq#why-login" target="_blank">
|
||||
<span class="glyphicon glyphicon-question-sign"></span>
|
||||
<a href="https://sabnzbd.org/wiki/faq#why-login" target="_blank" aria-label="$T('menu-help')">
|
||||
<span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span>
|
||||
</a>
|
||||
</div>
|
||||
<form class="form-signin" action="./" method="post">
|
||||
<form class="form-signin" action="./login" method="post">
|
||||
<!--#if $error#-->
|
||||
<div class="alert alert-danger" role="alert">$error</div>
|
||||
<!--#end if#-->
|
||||
|
||||
<input type="text" class="form-control" name="username" placeholder="$T('srv-username')" autocomplete="username" required autofocus>
|
||||
<input type="password" class="form-control" name="password" placeholder="$T('srv-password')" autocomplete="current-password" required>
|
||||
<input type="text" class="form-control" name="username" placeholder="$T('srv-username')" aria-label="$T('srv-username')" autocomplete="username" required autofocus>
|
||||
<input type="password" class="form-control" name="password" placeholder="$T('srv-password')" aria-label="$T('srv-password')" autocomplete="current-password" required>
|
||||
|
||||
<button class="btn btn-default"><span class="glyphicon glyphicon-circle-arrow-right"></span> $T('login') </button>
|
||||
|
||||
@@ -63,4 +59,4 @@
|
||||
} catch(err) { }
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
@@ -1 +0,0 @@
|
||||
@import url('Night.css') screen and (prefers-color-scheme: dark);
|
||||
@@ -1,311 +0,0 @@
|
||||
/*
|
||||
* Night theme — overrides :root color tokens defined in style.css.
|
||||
* Only structural/behavioural rules that can't be expressed as color tokens remain below.
|
||||
*/
|
||||
:root {
|
||||
--clr-page-bg: black;
|
||||
--clr-surface: #303030;
|
||||
--clr-surface-alt: #444444;
|
||||
--clr-surface-hover: #666666;
|
||||
--clr-border: #555555;
|
||||
--clr-border-subtle: #252525;
|
||||
--clr-text: #EBEBEB;
|
||||
--clr-text-muted: #c7c7c7;
|
||||
--clr-error: #ff3333;
|
||||
--clr-link: #63a7e1;
|
||||
--clr-input-bg: #555555;
|
||||
--clr-input-border: #252525;
|
||||
--clr-dropdown-bg: #444444;
|
||||
--clr-modal-bg: #727272;
|
||||
--clr-modal-header-bg: #3C3C3C;
|
||||
--clr-table-bg: #555555;
|
||||
--clr-table-row-alt: #444444;
|
||||
--clr-toggle-inactive: #666666;
|
||||
}
|
||||
|
||||
/* Links use a custom colour in dark mode */
|
||||
a:not(.btn) {
|
||||
color: var(--clr-link);
|
||||
}
|
||||
|
||||
/* Buttons get a subtle white shadow in dark mode for depth */
|
||||
.btn {
|
||||
box-shadow: 1px 1px 1px rgba(255, 255, 255, .1);
|
||||
}
|
||||
|
||||
/* Borders on interactive controls */
|
||||
.btn:not(.btn-danger),
|
||||
.btn-default,
|
||||
input,
|
||||
select,
|
||||
textarea,
|
||||
.advanced-button,
|
||||
.list-group-item {
|
||||
border-color: var(--clr-input-border) !important;
|
||||
}
|
||||
|
||||
.advanced-button {
|
||||
background-color: var(--clr-surface-alt);
|
||||
}
|
||||
|
||||
/* Sidebar section header */
|
||||
.col2 h3 {
|
||||
background: none repeat scroll 0 0 var(--clr-surface-alt);
|
||||
}
|
||||
|
||||
/* Various elements that need the alt surface */
|
||||
.catTable,
|
||||
.dropdown-menu .divider,
|
||||
.Key tr:nth-child(odd),
|
||||
.language:hover,
|
||||
.navbar-default .navbar-nav>.open>a,
|
||||
.navbar-default .navbar-nav>.open>a:focus,
|
||||
.navbar-default .navbar-nav>.open>a:hover,
|
||||
.navbar-default .navbar-nav>li>a.active,
|
||||
.navbar-default .navbar-nav>li>a:hover,
|
||||
.navbar-default .navbar-nav>li>a:focus,
|
||||
.navbar-logo:hover,
|
||||
.quoteBlock,
|
||||
.server-disabled,
|
||||
#serverResponse,
|
||||
.table>tbody>tr:nth-child(odd),
|
||||
.table-striped>tbody>tr:nth-child(odd),
|
||||
ul.tabs li.active a,
|
||||
select[disabled],
|
||||
select:hover {
|
||||
background-color: var(--clr-surface-alt) !important;
|
||||
color: var(--clr-text) !important;
|
||||
}
|
||||
|
||||
/* Button hovers */
|
||||
.btn:not(.btn-danger):hover,
|
||||
.btn:not(.btn-danger):active:focus {
|
||||
background-color: var(--clr-surface-hover);
|
||||
}
|
||||
|
||||
.btn:not(.btn-danger):active {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Error / failed colour */
|
||||
.failed {
|
||||
color: var(--clr-error) !important;
|
||||
}
|
||||
|
||||
/* Secondary text */
|
||||
#rightGreyText,
|
||||
small {
|
||||
color: var(--clr-text-muted) !important;
|
||||
}
|
||||
|
||||
/* Controls and form elements using input bg */
|
||||
.advanced-buttonSeperator,
|
||||
.alt,
|
||||
.infoTableSeperator.alt,
|
||||
.btn:not(.btn-danger),
|
||||
.btn-default.disabled:active,
|
||||
.btn-default.disabled:focus,
|
||||
.btn-default.disabled:hover,
|
||||
a.btn.btn-default,
|
||||
select.form-control,
|
||||
.form-control[disabled],
|
||||
.input-group-addon,
|
||||
#inner,
|
||||
.navbar-default,
|
||||
.search-box input,
|
||||
.select,
|
||||
.table-striped>tbody>tr:nth-child(even),
|
||||
.table>tbody>tr:nth-child(even),
|
||||
.tab-pane tr:nth-child(odd),
|
||||
textarea,
|
||||
ul.tabs a.active,
|
||||
a.list-group-item,
|
||||
.dropdown-menu>li>a,
|
||||
input[type="text"],
|
||||
input[type="email"],
|
||||
input[type="url"],
|
||||
input[type="date"],
|
||||
input[type="number"],
|
||||
input[type="password"],
|
||||
input[disabled],
|
||||
select {
|
||||
background-color: var(--clr-input-bg);
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
.Categories form.sorting-row:nth-child(2n-1) tr {
|
||||
background-color: var(--clr-surface);
|
||||
}
|
||||
|
||||
/* Focus / active border */
|
||||
.btn-default:focus,
|
||||
.form-control:focus,
|
||||
input:focus,
|
||||
textarea:focus,
|
||||
select:focus {
|
||||
border-color: #707070 !important;
|
||||
outline: initial !important;
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
/* Modal backdrop */
|
||||
.modal-backdrop {
|
||||
background-color: #262626 !important;
|
||||
}
|
||||
|
||||
/* Table structural */
|
||||
.Key tr,
|
||||
.Config .table {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table>tbody>tr>td,
|
||||
.table>tbody>tr>th,
|
||||
.infoTableSeperator,
|
||||
.data-row {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
border-top: 1px solid rgb(131 131 131);
|
||||
}
|
||||
|
||||
hr {
|
||||
border-top: 1px solid var(--clr-border);
|
||||
}
|
||||
|
||||
/* Danger button dark border */
|
||||
.btn-danger {
|
||||
border-color: #7b2b28;
|
||||
}
|
||||
|
||||
/* Section borders */
|
||||
.tab-content .catTable tbody,
|
||||
ul.tabs a,
|
||||
.section,
|
||||
#addFeed,
|
||||
#addFeedContent,
|
||||
#subscriptions,
|
||||
.RSS form[action="add_rss_feed"] tr:nth-child(even) {
|
||||
border: 1px solid var(--clr-border);
|
||||
}
|
||||
|
||||
/* Hover states */
|
||||
.Categories form:first-of-type tr:last-of-type,
|
||||
.default,
|
||||
.dropdown-menu>li>a:focus,
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: var(--clr-surface-hover);
|
||||
}
|
||||
|
||||
/* Elements using primary text colour */
|
||||
.activeRSS,
|
||||
.activeRSS a,
|
||||
.activeRSS a:visited,
|
||||
.btn-default,
|
||||
.checkbox label,
|
||||
.feed-row td,
|
||||
.help-block,
|
||||
#content,
|
||||
.navbar-default .navbar-nav>li>a,
|
||||
.navbar-default .navbar-nav>li>a>.glyphicon,
|
||||
.path,
|
||||
.Servers .ct-label,
|
||||
.time,
|
||||
.main-restarting.in,
|
||||
#search-dropdown .dropdown-header,
|
||||
ul.tabs a,
|
||||
a.wizard-advanced-settings,
|
||||
.quoteBlock a,
|
||||
a.main-helplink,
|
||||
.col2 h3 a,
|
||||
.text-center a,
|
||||
.text-center a:hover {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Remove backgrounds on container/content wrappers */
|
||||
.container,
|
||||
#content {
|
||||
background-color: unset !important;
|
||||
}
|
||||
|
||||
/* Server chart lines */
|
||||
.Servers .ct-series-a .ct-line,
|
||||
.Servers .ct-series-a .ct-point {
|
||||
stroke: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Sections/cards use dark surface */
|
||||
#inner,
|
||||
.section,
|
||||
#addFeed,
|
||||
#addFeedContent {
|
||||
background-color: var(--clr-surface);
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
/* Active tab uses card surface */
|
||||
.nav.nav-tabs li a {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
.nav.nav-tabs li a:hover {
|
||||
background-color: var(--clr-surface-alt);
|
||||
border-color: var(--clr-border);
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.nav.nav-tabs li.active a,
|
||||
.nav.nav-tabs li.active a:hover {
|
||||
border-color: var(--clr-border);
|
||||
border-bottom: none;
|
||||
background-color: var(--clr-surface);
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* QR modal needs light background */
|
||||
#modal_qr .modal-body {
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
|
||||
/* RSS icon */
|
||||
.rss-icon-svg {
|
||||
fill: white;
|
||||
}
|
||||
|
||||
.rss-symbol {
|
||||
fill: var(--clr-input-bg);
|
||||
}
|
||||
|
||||
/* Placeholder */
|
||||
::placeholder {
|
||||
color: var(--clr-text) !important;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/* Tooltip — inverted (light tooltip on dark page) */
|
||||
.tooltip-inner {
|
||||
background-color: #E4E4E4 !important;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.tooltip.bottom .tooltip-arrow {
|
||||
border-bottom-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.tooltip.top .tooltip-arrow {
|
||||
border-top-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.tooltip.left .tooltip-arrow {
|
||||
border-left-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.tooltip.right .tooltip-arrow {
|
||||
border-right-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.Special .glyphicon-asterisk {
|
||||
color: #E4E4E4 !important;
|
||||
}
|
||||
@@ -1,19 +1,32 @@
|
||||
:root {
|
||||
/* Light mode defaults — overridden by Night.css */
|
||||
--clr-page-bg: #E4E4E4;
|
||||
--clr-surface: #FFFFFF;
|
||||
--clr-input-bg: #FFFFFF;
|
||||
--clr-border: rgba(0, 0, 0, 0.15);
|
||||
--clr-text: #000000;
|
||||
--clr-text-muted: #636363;
|
||||
/* Follow the OS by default (Auto); forced by data-color-scheme below */
|
||||
color-scheme: light dark;
|
||||
|
||||
/* Color palette — light-dark(light value, dark value) */
|
||||
--clr-page-bg: light-dark(#E4E4E4, black);
|
||||
--clr-surface: light-dark(#FFFFFF, #303030);
|
||||
--clr-input-bg: light-dark(#FFFFFF, #555555);
|
||||
--clr-border: light-dark(rgba(0, 0, 0, 0.15), #555555);
|
||||
--clr-text: light-dark(#000000, #EBEBEB);
|
||||
--clr-text-muted: light-dark(#636363, #c7c7c7);
|
||||
--radius-lg: 8px;
|
||||
--clr-toggle-active: #f9ca33;
|
||||
--clr-toggle-inactive: #aaaaaa;
|
||||
--clr-toggle-inactive: light-dark(#aaaaaa, #666666);
|
||||
}
|
||||
|
||||
/* The server renders the configured scheme into this attribute; empty/unknown = Auto */
|
||||
html[data-color-scheme="light" i] {
|
||||
color-scheme: light;
|
||||
}
|
||||
|
||||
html[data-color-scheme="night" i] {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
body {
|
||||
overflow-y: scroll;
|
||||
background-color: var(--clr-page-bg);
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
.logo-header {
|
||||
@@ -58,10 +71,23 @@ body {
|
||||
margin-top: 5px
|
||||
}
|
||||
|
||||
.form-signin input,
|
||||
.form-signin .btn {
|
||||
background-color: var(--clr-input-bg);
|
||||
color: var(--clr-text);
|
||||
border-color: light-dark(#ccc, #252525);
|
||||
}
|
||||
|
||||
.form-signin .btn {
|
||||
width: 100%;
|
||||
margin-top: 10px;
|
||||
font-weight: bold;
|
||||
box-shadow: 1px 1px 1px light-dark(transparent, rgba(255, 255, 255, .1));
|
||||
}
|
||||
|
||||
::placeholder {
|
||||
color: var(--clr-text) !important;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.btn .glyphicon {
|
||||
@@ -111,3 +137,69 @@ input[type="checkbox"]:focus-visible {
|
||||
outline-offset: 2px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
/***
|
||||
Dark-mode structural rules
|
||||
Colors live in the light-dark() tokens above; these are the rules that cannot
|
||||
be expressed as a color value. The two blocks below MUST stay identical:
|
||||
the first applies when Night is forced, the second when the OS is dark and Light is not forced.
|
||||
***/
|
||||
html[data-color-scheme="night" i] {
|
||||
/* Focus / active border */
|
||||
.form-signin input:focus,
|
||||
.form-signin .btn:focus {
|
||||
border-color: #707070 !important;
|
||||
outline: initial !important;
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
.text-center a,
|
||||
.text-center a:hover {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Tooltip — inverted (light tooltip on dark page) */
|
||||
.tooltip-inner {
|
||||
background-color: #E4E4E4 !important;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.tooltip.bottom .tooltip-arrow {
|
||||
border-bottom-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.tooltip.top .tooltip-arrow {
|
||||
border-top-color: #E4E4E4 !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
html:not([data-color-scheme="light" i]) {
|
||||
/* Focus / active border */
|
||||
.form-signin input:focus,
|
||||
.form-signin .btn:focus {
|
||||
border-color: #707070 !important;
|
||||
outline: initial !important;
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
.text-center a,
|
||||
.text-center a:hover {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Tooltip — inverted (light tooltip on dark page) */
|
||||
.tooltip-inner {
|
||||
background-color: #E4E4E4 !important;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.tooltip.bottom .tooltip-arrow {
|
||||
border-bottom-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.tooltip.top .tooltip-arrow {
|
||||
border-top-color: #E4E4E4 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,29 +1,40 @@
|
||||
:root {
|
||||
/* Follow the OS by default (Auto); forced by data-color-scheme below */
|
||||
color-scheme: light dark;
|
||||
|
||||
/* Border radius scale */
|
||||
--radius-sm: 4px; /* dropdowns */
|
||||
--radius-md: 4px; /* inputs, buttons, section headers */
|
||||
--radius-lg: 6px; /* cards, modals */
|
||||
|
||||
/* Color palette — light mode defaults; override in Night.css */
|
||||
--clr-page-bg: #E4E4E4; /* body/page background */
|
||||
--clr-surface: #FFFFFF; /* cards/sections (.section, #addFeed, etc.) */
|
||||
--clr-surface-alt: #F8F8F8; /* alternating rows, .alt elements */
|
||||
--clr-surface-hover: #f6f6f6; /* hovered rows and buttons */
|
||||
--clr-border: #dfdede; /* card/section borders */
|
||||
--clr-border-subtle: #E5E5E5; /* inner dividers (#subscriptions, data-row) */
|
||||
--clr-text: #000000; /* primary body text */
|
||||
--clr-text-muted: #666666; /* secondary text (.col2 p, .feed-row td) */
|
||||
--clr-error: red; /* errors, failed items */
|
||||
--clr-link: inherit; /* links (Bootstrap default in light) */
|
||||
--clr-input-bg: #FFFFFF; /* form inputs, buttons */
|
||||
--clr-input-border: #d4d0c8; /* input borders */
|
||||
--clr-toggle-active: #f9ca33; /* accent color (toggles, focus rings) */
|
||||
--clr-toggle-inactive: #aaaaaa; /* toggle track when off */
|
||||
--clr-dropdown-bg: #FFFFFF; /* dropdown menus */
|
||||
--clr-modal-bg: #FFFFFF; /* modal body/footer */
|
||||
--clr-modal-header-bg: #3C3C3C; /* modal header (dark in both themes) */
|
||||
--clr-table-bg: #FFFFFF; /* table background */
|
||||
--clr-table-row-alt: #F8F8F8; /* alternating table row background */
|
||||
/* Color palette — light-dark(light value, dark value) */
|
||||
--clr-page-bg: light-dark(#E4E4E4, black); /* body/page background */
|
||||
--clr-surface: light-dark(#FFFFFF, #303030); /* cards/sections (.section, #addFeed, etc.) */
|
||||
--clr-surface-alt: light-dark(#F8F8F8, #444444); /* alternating rows, .alt elements */
|
||||
--clr-surface-hover: light-dark(#f6f6f6, #666666); /* hovered rows and buttons */
|
||||
--clr-border: light-dark(#dfdede, #555555); /* card/section borders */
|
||||
--clr-border-subtle: light-dark(#E5E5E5, #252525); /* inner dividers (#subscriptions, data-row) */
|
||||
--clr-text: light-dark(#000000, #EBEBEB); /* primary body text */
|
||||
--clr-text-muted: light-dark(#666666, #c7c7c7); /* secondary text (.col2 p, .feed-row td) */
|
||||
--clr-error: light-dark(red, #ff3333); /* errors, failed items */
|
||||
--clr-input-bg: light-dark(#FFFFFF, #555555); /* form inputs, buttons */
|
||||
--clr-input-border: light-dark(#d4d0c8, #252525); /* input borders */
|
||||
--clr-toggle-active: #f9ca33; /* accent color (toggles, focus rings) */
|
||||
--clr-toggle-inactive: light-dark(#aaaaaa, #666666); /* toggle track when off */
|
||||
--clr-dropdown-bg: light-dark(#FFFFFF, #444444); /* dropdown menus */
|
||||
--clr-modal-bg: light-dark(#FFFFFF, #727272); /* modal body/footer */
|
||||
--clr-modal-header-bg: #3C3C3C; /* modal header (dark in both themes) */
|
||||
--clr-table-bg: light-dark(#FFFFFF, #555555); /* table background */
|
||||
--clr-table-row-alt: light-dark(#F8F8F8, #444444); /* alternating table row background */
|
||||
}
|
||||
|
||||
/* The server renders the configured scheme into this attribute; empty/unknown = Auto */
|
||||
html[data-color-scheme="light" i] {
|
||||
color-scheme: light;
|
||||
}
|
||||
|
||||
html[data-color-scheme="night" i] {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
body {
|
||||
@@ -31,6 +42,18 @@ body {
|
||||
background-color: var(--clr-page-bg);
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Bootstrap's `a:focus { outline: 5px auto -webkit-focus-ring-color }` renders as a
|
||||
heavy dark ring once color-scheme is declared. Replace it with a subtle themed
|
||||
outline shown only for keyboard focus, matching the toggle-switch focus style. */
|
||||
a:focus {
|
||||
outline: none;
|
||||
}
|
||||
a:focus-visible {
|
||||
outline: 2px solid var(--clr-toggle-active);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
#logo {
|
||||
display: block;
|
||||
margin: 3px auto auto;
|
||||
@@ -253,7 +276,21 @@ input[type="checkbox"]+.desc {
|
||||
margin: 0;
|
||||
padding: 0 12px 0 6px;
|
||||
}
|
||||
textarea, select, input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="email"], input[type="month"], input[type="number"], input[type="password"], input[type="search"], input[type="tel"], input[type="text"], input[type="time"], input[type="url"], input[type="week"] {
|
||||
textarea,
|
||||
select,
|
||||
input[type="date"],
|
||||
input[type="datetime"],
|
||||
input[type="datetime-local"],
|
||||
input[type="email"],
|
||||
input[type="month"],
|
||||
input[type="number"],
|
||||
input[type="password"],
|
||||
input[type="search"],
|
||||
input[type="tel"],
|
||||
input[type="text"],
|
||||
input[type="time"],
|
||||
input[type="url"],
|
||||
input[type="week"] {
|
||||
padding-left: 5px;
|
||||
border: 1px solid #d4d0c8;
|
||||
}
|
||||
@@ -488,7 +525,7 @@ tr.separator {
|
||||
.RSS .catTable select {
|
||||
max-width: 120px;
|
||||
}
|
||||
.RSS form[action="add_rss_feed"] tr:nth-child(even) {
|
||||
.RSS form[data-form="add-rss-feed"] tr:nth-child(even) {
|
||||
border: 1px solid #E5E5E5;
|
||||
}
|
||||
.RSS .tab-pane table th:not(.no-sort) {
|
||||
@@ -689,6 +726,10 @@ input:has(+ .clearBtn) {
|
||||
#filebrowser_modal .list-group-item {
|
||||
font-weight: bold;
|
||||
}
|
||||
#filebrowser_modal a.list-group-item:hover,
|
||||
#filebrowser_modal a.list-group-item:focus {
|
||||
background-color: var(--clr-surface-hover);
|
||||
}
|
||||
#filebrowser_modal .list-group-item span {
|
||||
margin-right: 10px;
|
||||
top: 0;
|
||||
@@ -994,12 +1035,12 @@ input[type="checkbox"] {
|
||||
max-width: 150px !important;
|
||||
}
|
||||
|
||||
.Scheduling form[action="addSchedule"] input[type="checkbox"] {
|
||||
.Scheduling form[data-form="add-schedule"] input[type="checkbox"] {
|
||||
margin-top: 0px;
|
||||
margin-left: -20px;
|
||||
}
|
||||
|
||||
.Scheduling form[action="delSchedule"] input[type="checkbox"] {
|
||||
.Scheduling form[data-form="del-schedule"] input[type="checkbox"] {
|
||||
position: initial;
|
||||
float: left;
|
||||
margin: 9px 10px 0px 5px;
|
||||
@@ -1058,18 +1099,7 @@ input[type="checkbox"] {
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
}
|
||||
/*
|
||||
.navbar-logo-wide {
|
||||
display: none;
|
||||
}
|
||||
.navbar-logo-wide {
|
||||
padding-top: 9px;
|
||||
}
|
||||
.navbar-logo-wide svg {
|
||||
height: 36px;
|
||||
width: 130px;
|
||||
}
|
||||
*/
|
||||
|
||||
.navbar-default .navbar-nav>li>a {
|
||||
color: black;
|
||||
outline: none;
|
||||
@@ -1136,7 +1166,7 @@ input[type="checkbox"] {
|
||||
}
|
||||
|
||||
.Servers .col2 .label {
|
||||
margin-top: 8px;
|
||||
margin-top: 12px;
|
||||
font-size: 0.85em;
|
||||
float: right;
|
||||
line-height: 1.1em;
|
||||
@@ -1207,8 +1237,8 @@ input[type="checkbox"] {
|
||||
}
|
||||
|
||||
.Servers .col2 label,
|
||||
.Email .col2 label {
|
||||
margin: 2px 0 0 4px;
|
||||
.Notify .col2 label {
|
||||
margin: 6px 0 0 6px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@@ -1253,6 +1283,11 @@ input[type="checkbox"] {
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
.Notify .notify-checkboxes {
|
||||
float: left;
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.main-restarting.in {
|
||||
text-align: center;
|
||||
opacity: 0.9;
|
||||
@@ -1394,7 +1429,7 @@ html[dir="rtl"] .checkbox-days {
|
||||
float: none;
|
||||
}
|
||||
|
||||
html[dir="rtl"] .Scheduling form[action="addSchedule"] input[type="checkbox"] {
|
||||
html[dir="rtl"] .Scheduling form[data-form="add-schedule"] input[type="checkbox"] {
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
@@ -1592,3 +1627,591 @@ html[dir="rtl"] .Scheduling form[action="addSchedule"] input[type="checkbox"] {
|
||||
padding-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
Dark-mode structural rules
|
||||
Colors live in the light-dark() tokens above; these are the rules that cannot
|
||||
be expressed as a color value. The two blocks below MUST stay identical:
|
||||
the first applies when Night is forced, the second when the OS is dark and Light is not forced.
|
||||
***/
|
||||
html[data-color-scheme="night" i] {
|
||||
/* Links use a custom colour in dark mode */
|
||||
a:not(.btn) {
|
||||
color: #63a7e1;
|
||||
}
|
||||
|
||||
/* Buttons get a subtle white shadow in dark mode for depth */
|
||||
.btn {
|
||||
box-shadow: 1px 1px 1px rgba(255, 255, 255, .1);
|
||||
}
|
||||
|
||||
/* Borders on interactive controls */
|
||||
.btn:not(.btn-danger),
|
||||
.btn-default,
|
||||
input,
|
||||
select,
|
||||
textarea,
|
||||
.advanced-button,
|
||||
.list-group-item {
|
||||
border-color: var(--clr-input-border) !important;
|
||||
}
|
||||
|
||||
.advanced-button {
|
||||
background-color: var(--clr-surface-alt);
|
||||
}
|
||||
|
||||
/* Sidebar section header */
|
||||
.col2 h3 {
|
||||
background: none repeat scroll 0 0 var(--clr-surface-alt);
|
||||
}
|
||||
|
||||
/* Various elements that need the alt surface */
|
||||
.catTable,
|
||||
.dropdown-menu .divider,
|
||||
.Key tr:nth-child(odd),
|
||||
.language:hover,
|
||||
.navbar-default .navbar-nav>.open>a,
|
||||
.navbar-default .navbar-nav>.open>a:focus,
|
||||
.navbar-default .navbar-nav>.open>a:hover,
|
||||
.navbar-default .navbar-nav>li>a.active,
|
||||
.navbar-default .navbar-nav>li>a:hover,
|
||||
.navbar-default .navbar-nav>li>a:focus,
|
||||
.navbar-logo:hover,
|
||||
.quoteBlock,
|
||||
.server-disabled,
|
||||
#serverResponse,
|
||||
.table>tbody>tr:nth-child(odd),
|
||||
.table-striped>tbody>tr:nth-child(odd),
|
||||
ul.tabs li.active a,
|
||||
select[disabled],
|
||||
select:hover {
|
||||
background-color: var(--clr-surface-alt) !important;
|
||||
color: var(--clr-text) !important;
|
||||
}
|
||||
|
||||
/* Button hovers */
|
||||
.btn:not(.btn-danger):hover,
|
||||
.btn:not(.btn-danger):active:focus {
|
||||
background-color: var(--clr-surface-hover);
|
||||
}
|
||||
|
||||
.btn:not(.btn-danger):active {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Error / failed colour */
|
||||
.failed {
|
||||
color: var(--clr-error) !important;
|
||||
}
|
||||
|
||||
/* Secondary text */
|
||||
#rightGreyText,
|
||||
small {
|
||||
color: var(--clr-text-muted) !important;
|
||||
}
|
||||
|
||||
/* Controls and form elements using input bg */
|
||||
.advanced-buttonSeperator,
|
||||
.alt,
|
||||
.infoTableSeperator.alt,
|
||||
.btn:not(.btn-danger),
|
||||
.btn-default.disabled:active,
|
||||
.btn-default.disabled:focus,
|
||||
.btn-default.disabled:hover,
|
||||
a.btn.btn-default,
|
||||
select.form-control,
|
||||
.form-control[disabled],
|
||||
.input-group-addon,
|
||||
#inner,
|
||||
.navbar-default,
|
||||
.search-box input,
|
||||
.select,
|
||||
.table-striped>tbody>tr:nth-child(even),
|
||||
.table>tbody>tr:nth-child(even),
|
||||
.tab-pane tr:nth-child(odd),
|
||||
textarea,
|
||||
ul.tabs a.active,
|
||||
a.list-group-item,
|
||||
.dropdown-menu>li>a,
|
||||
input[type="text"],
|
||||
input[type="email"],
|
||||
input[type="url"],
|
||||
input[type="date"],
|
||||
input[type="number"],
|
||||
input[type="password"],
|
||||
input[disabled],
|
||||
select {
|
||||
background-color: var(--clr-input-bg);
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
.Categories form.sorting-row:nth-child(2n-1) tr {
|
||||
background-color: var(--clr-surface);
|
||||
}
|
||||
|
||||
/* Focus / active border */
|
||||
.btn-default:focus,
|
||||
.form-control:focus,
|
||||
input:focus,
|
||||
textarea:focus,
|
||||
select:focus {
|
||||
border-color: #707070 !important;
|
||||
outline: initial !important;
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
/* Modal backdrop */
|
||||
.modal-backdrop {
|
||||
background-color: #262626 !important;
|
||||
}
|
||||
|
||||
/* Table structural */
|
||||
.Key tr,
|
||||
.Config .table {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table>tbody>tr>td,
|
||||
.table>tbody>tr>th,
|
||||
.infoTableSeperator,
|
||||
.data-row {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
border-top: 1px solid rgb(131 131 131);
|
||||
}
|
||||
|
||||
hr {
|
||||
border-top: 1px solid var(--clr-border);
|
||||
}
|
||||
|
||||
/* Danger button dark border */
|
||||
.btn-danger {
|
||||
border-color: #7b2b28;
|
||||
}
|
||||
|
||||
/* Section borders */
|
||||
.tab-content .catTable tbody,
|
||||
ul.tabs a,
|
||||
.section,
|
||||
#addFeed,
|
||||
#addFeedContent,
|
||||
#subscriptions,
|
||||
.RSS form[data-form="add-rss-feed"] tr:nth-child(even),
|
||||
.Config .table {
|
||||
border: 1px solid var(--clr-border);
|
||||
}
|
||||
|
||||
/* Hover states */
|
||||
.Categories form:first-of-type tr:last-of-type,
|
||||
.default,
|
||||
.dropdown-menu>li>a:focus,
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: var(--clr-surface-hover);
|
||||
}
|
||||
|
||||
/* Elements using primary text colour */
|
||||
.activeRSS,
|
||||
.activeRSS a,
|
||||
.activeRSS a:visited,
|
||||
.btn-default,
|
||||
.checkbox label,
|
||||
.feed-row td,
|
||||
.help-block,
|
||||
#content,
|
||||
.navbar-default .navbar-nav>li>a,
|
||||
.navbar-default .navbar-nav>li>a>.glyphicon,
|
||||
.path,
|
||||
.Servers .ct-label,
|
||||
.time,
|
||||
.main-restarting.in,
|
||||
#search-dropdown .dropdown-header,
|
||||
ul.tabs a,
|
||||
a.wizard-advanced-settings,
|
||||
.quoteBlock a,
|
||||
a.main-helplink,
|
||||
.col2 h3 a,
|
||||
.text-center a,
|
||||
.text-center a:hover {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Remove backgrounds on container/content wrappers */
|
||||
.container,
|
||||
#content {
|
||||
background-color: unset !important;
|
||||
}
|
||||
|
||||
/* Server chart lines */
|
||||
.Servers .ct-series-a .ct-line,
|
||||
.Servers .ct-series-a .ct-point {
|
||||
stroke: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Sections/cards use dark surface */
|
||||
#inner,
|
||||
.section,
|
||||
#addFeed,
|
||||
#addFeedContent {
|
||||
background-color: var(--clr-surface);
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
/* Active tab uses card surface */
|
||||
.nav.nav-tabs li a {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
.nav.nav-tabs li a:hover {
|
||||
background-color: var(--clr-surface-alt);
|
||||
border-color: var(--clr-border);
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.nav.nav-tabs li.active a,
|
||||
.nav.nav-tabs li.active a:hover {
|
||||
border-color: var(--clr-border);
|
||||
border-bottom: none;
|
||||
background-color: var(--clr-surface);
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* QR modal needs light background */
|
||||
#modal_qr .modal-body {
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
|
||||
/* RSS icon */
|
||||
.rss-icon-svg {
|
||||
fill: white;
|
||||
}
|
||||
|
||||
.rss-symbol {
|
||||
fill: var(--clr-input-bg);
|
||||
}
|
||||
|
||||
/* Placeholder */
|
||||
::placeholder {
|
||||
color: var(--clr-text) !important;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/* Tooltip — inverted (light tooltip on dark page) */
|
||||
.tooltip-inner {
|
||||
background-color: #E4E4E4 !important;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.tooltip.bottom .tooltip-arrow {
|
||||
border-bottom-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.tooltip.top .tooltip-arrow {
|
||||
border-top-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.tooltip.left .tooltip-arrow {
|
||||
border-left-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.tooltip.right .tooltip-arrow {
|
||||
border-right-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.Special .glyphicon-asterisk {
|
||||
color: #E4E4E4 !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
html:not([data-color-scheme="light" i]) {
|
||||
/* Links use a custom colour in dark mode */
|
||||
a:not(.btn) {
|
||||
color: #63a7e1;
|
||||
}
|
||||
|
||||
/* Buttons get a subtle white shadow in dark mode for depth */
|
||||
.btn {
|
||||
box-shadow: 1px 1px 1px rgba(255, 255, 255, .1);
|
||||
}
|
||||
|
||||
/* Borders on interactive controls */
|
||||
.btn:not(.btn-danger),
|
||||
.btn-default,
|
||||
input,
|
||||
select,
|
||||
textarea,
|
||||
.advanced-button,
|
||||
.list-group-item {
|
||||
border-color: var(--clr-input-border) !important;
|
||||
}
|
||||
|
||||
.advanced-button {
|
||||
background-color: var(--clr-surface-alt);
|
||||
}
|
||||
|
||||
/* Sidebar section header */
|
||||
.col2 h3 {
|
||||
background: none repeat scroll 0 0 var(--clr-surface-alt);
|
||||
}
|
||||
|
||||
/* Various elements that need the alt surface */
|
||||
.catTable,
|
||||
.dropdown-menu .divider,
|
||||
.Key tr:nth-child(odd),
|
||||
.language:hover,
|
||||
.navbar-default .navbar-nav>.open>a,
|
||||
.navbar-default .navbar-nav>.open>a:focus,
|
||||
.navbar-default .navbar-nav>.open>a:hover,
|
||||
.navbar-default .navbar-nav>li>a.active,
|
||||
.navbar-default .navbar-nav>li>a:hover,
|
||||
.navbar-default .navbar-nav>li>a:focus,
|
||||
.navbar-logo:hover,
|
||||
.quoteBlock,
|
||||
.server-disabled,
|
||||
#serverResponse,
|
||||
.table>tbody>tr:nth-child(odd),
|
||||
.table-striped>tbody>tr:nth-child(odd),
|
||||
ul.tabs li.active a,
|
||||
select[disabled],
|
||||
select:hover {
|
||||
background-color: var(--clr-surface-alt) !important;
|
||||
color: var(--clr-text) !important;
|
||||
}
|
||||
|
||||
/* Button hovers */
|
||||
.btn:not(.btn-danger):hover,
|
||||
.btn:not(.btn-danger):active:focus {
|
||||
background-color: var(--clr-surface-hover);
|
||||
}
|
||||
|
||||
.btn:not(.btn-danger):active {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Error / failed colour */
|
||||
.failed {
|
||||
color: var(--clr-error) !important;
|
||||
}
|
||||
|
||||
/* Secondary text */
|
||||
#rightGreyText,
|
||||
small {
|
||||
color: var(--clr-text-muted) !important;
|
||||
}
|
||||
|
||||
/* Controls and form elements using input bg */
|
||||
.advanced-buttonSeperator,
|
||||
.alt,
|
||||
.infoTableSeperator.alt,
|
||||
.btn:not(.btn-danger),
|
||||
.btn-default.disabled:active,
|
||||
.btn-default.disabled:focus,
|
||||
.btn-default.disabled:hover,
|
||||
a.btn.btn-default,
|
||||
select.form-control,
|
||||
.form-control[disabled],
|
||||
.input-group-addon,
|
||||
#inner,
|
||||
.navbar-default,
|
||||
.search-box input,
|
||||
.select,
|
||||
.table-striped>tbody>tr:nth-child(even),
|
||||
.table>tbody>tr:nth-child(even),
|
||||
.tab-pane tr:nth-child(odd),
|
||||
textarea,
|
||||
ul.tabs a.active,
|
||||
a.list-group-item,
|
||||
.dropdown-menu>li>a,
|
||||
input[type="text"],
|
||||
input[type="email"],
|
||||
input[type="url"],
|
||||
input[type="date"],
|
||||
input[type="number"],
|
||||
input[type="password"],
|
||||
input[disabled],
|
||||
select {
|
||||
background-color: var(--clr-input-bg);
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
.Categories form.sorting-row:nth-child(2n-1) tr {
|
||||
background-color: var(--clr-surface);
|
||||
}
|
||||
|
||||
/* Focus / active border */
|
||||
.btn-default:focus,
|
||||
.form-control:focus,
|
||||
input:focus,
|
||||
textarea:focus,
|
||||
select:focus {
|
||||
border-color: #707070 !important;
|
||||
outline: initial !important;
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
/* Modal backdrop */
|
||||
.modal-backdrop {
|
||||
background-color: #262626 !important;
|
||||
}
|
||||
|
||||
/* Table structural */
|
||||
.Key tr,
|
||||
.Config .table {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table>tbody>tr>td,
|
||||
.table>tbody>tr>th,
|
||||
.infoTableSeperator,
|
||||
.data-row {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
border-top: 1px solid rgb(131 131 131);
|
||||
}
|
||||
|
||||
hr {
|
||||
border-top: 1px solid var(--clr-border);
|
||||
}
|
||||
|
||||
/* Danger button dark border */
|
||||
.btn-danger {
|
||||
border-color: #7b2b28;
|
||||
}
|
||||
|
||||
/* Section borders */
|
||||
.tab-content .catTable tbody,
|
||||
ul.tabs a,
|
||||
.section,
|
||||
#addFeed,
|
||||
#addFeedContent,
|
||||
#subscriptions,
|
||||
.RSS form[data-form="add-rss-feed"] tr:nth-child(even),
|
||||
.Config .table {
|
||||
border: 1px solid var(--clr-border);
|
||||
}
|
||||
|
||||
/* Hover states */
|
||||
.Categories form:first-of-type tr:last-of-type,
|
||||
.default,
|
||||
.dropdown-menu>li>a:focus,
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: var(--clr-surface-hover);
|
||||
}
|
||||
|
||||
/* Elements using primary text colour */
|
||||
.activeRSS,
|
||||
.activeRSS a,
|
||||
.activeRSS a:visited,
|
||||
.btn-default,
|
||||
.checkbox label,
|
||||
.feed-row td,
|
||||
.help-block,
|
||||
#content,
|
||||
.navbar-default .navbar-nav>li>a,
|
||||
.navbar-default .navbar-nav>li>a>.glyphicon,
|
||||
.path,
|
||||
.Servers .ct-label,
|
||||
.time,
|
||||
.main-restarting.in,
|
||||
#search-dropdown .dropdown-header,
|
||||
ul.tabs a,
|
||||
a.wizard-advanced-settings,
|
||||
.quoteBlock a,
|
||||
a.main-helplink,
|
||||
.col2 h3 a,
|
||||
.text-center a,
|
||||
.text-center a:hover {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Remove backgrounds on container/content wrappers */
|
||||
.container,
|
||||
#content {
|
||||
background-color: unset !important;
|
||||
}
|
||||
|
||||
/* Server chart lines */
|
||||
.Servers .ct-series-a .ct-line,
|
||||
.Servers .ct-series-a .ct-point {
|
||||
stroke: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Sections/cards use dark surface */
|
||||
#inner,
|
||||
.section,
|
||||
#addFeed,
|
||||
#addFeedContent {
|
||||
background-color: var(--clr-surface);
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
/* Active tab uses card surface */
|
||||
.nav.nav-tabs li a {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
.nav.nav-tabs li a:hover {
|
||||
background-color: var(--clr-surface-alt);
|
||||
border-color: var(--clr-border);
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.nav.nav-tabs li.active a,
|
||||
.nav.nav-tabs li.active a:hover {
|
||||
border-color: var(--clr-border);
|
||||
border-bottom: none;
|
||||
background-color: var(--clr-surface);
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* QR modal needs light background */
|
||||
#modal_qr .modal-body {
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
|
||||
/* RSS icon */
|
||||
.rss-icon-svg {
|
||||
fill: white;
|
||||
}
|
||||
|
||||
.rss-symbol {
|
||||
fill: var(--clr-input-bg);
|
||||
}
|
||||
|
||||
/* Placeholder */
|
||||
::placeholder {
|
||||
color: var(--clr-text) !important;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/* Tooltip — inverted (light tooltip on dark page) */
|
||||
.tooltip-inner {
|
||||
background-color: #E4E4E4 !important;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.tooltip.bottom .tooltip-arrow {
|
||||
border-bottom-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.tooltip.top .tooltip-arrow {
|
||||
border-top-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.tooltip.left .tooltip-arrow {
|
||||
border-left-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.tooltip.right .tooltip-arrow {
|
||||
border-right-color: #E4E4E4 !important;
|
||||
}
|
||||
|
||||
.Special .glyphicon-asterisk {
|
||||
color: #E4E4E4 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long.
File diff suppressed because one or more lines are too long.
File diff suppressed because one or more lines are too long.
@@ -243,6 +243,11 @@ $.fn.extractFormDataTo = function(target) {
|
||||
*
|
||||
* (c) 2015 SABnzbd Team, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
$.ajaxSetup({
|
||||
headers: { "X-SABnzbd-CSRF": csrfToken }
|
||||
});
|
||||
|
||||
function config_success() {
|
||||
$('.saveButton[disabled=disabled]').each(function () {
|
||||
$(this).removeAttr("disabled").html('<span class="glyphicon glyphicon-ok"></span> '+configTranslate.saveChanges);
|
||||
@@ -291,7 +296,7 @@ function do_restart() {
|
||||
$('.main-restarting .restarting-url').text(urlTotal)
|
||||
|
||||
// Initiate restart
|
||||
$.ajax({ url: '../../api?mode=restart&apikey=' + sabSession,
|
||||
$.ajax({ url: rootURL + 'api?mode=restart', type: 'POST',
|
||||
complete: function() {
|
||||
// Keep counter of failures
|
||||
var loopCounter = 0;
|
||||
@@ -371,6 +376,8 @@ jQuery.extend(jQuery.fn.typeahead.defaults, {
|
||||
})
|
||||
|
||||
$(document).ready(function () {
|
||||
$('form').append('<input type="hidden" name="csrf_token" value="' + csrfToken + '">');
|
||||
|
||||
/**
|
||||
Restart function
|
||||
**/
|
||||
@@ -403,7 +410,7 @@ $(document).ready(function () {
|
||||
$(this).attr("disabled", "disabled").removeClass('btn-danger').html('<span class="glyphicon glyphicon-transfer"></span> ' + configTranslate.saving);
|
||||
});
|
||||
},
|
||||
success: function (json) {
|
||||
success: function (json, statusText, xhr, form) {
|
||||
if (json.error) {
|
||||
$('#config_err_msg').text(json.error);
|
||||
alert(json.error)
|
||||
@@ -417,6 +424,12 @@ $(document).ready(function () {
|
||||
$('#config_err_msg').text(" ");
|
||||
setTimeout(config_success, 1000);
|
||||
}
|
||||
} else if(form && form.is('[data-reload-on-save]')) {
|
||||
// Values changed that are rendered by the server, so reload the page
|
||||
$('#config_err_msg').text(" ");
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
location.reload();
|
||||
} else {
|
||||
$('#config_err_msg').text(" ");
|
||||
setTimeout(config_success, 1000);
|
||||
@@ -481,6 +494,8 @@ $(document).ready(function () {
|
||||
}
|
||||
|
||||
// Add tooltips
|
||||
// Render tooltips in the body, otherwise they get clipped by sections with overflow: hidden
|
||||
jQuery.fn.tooltip.Constructor.DEFAULTS.container = 'body'
|
||||
jQuery('[title]').tooltip()
|
||||
});
|
||||
|
||||
@@ -501,16 +516,56 @@ var pagesContainer = new Array(arrPages.length);
|
||||
// Add trigger to focus on the field and load the results
|
||||
$(document).ready(function() {
|
||||
$('#search-menu').on('shown.bs.dropdown', function(event) {
|
||||
setConfigSearchExpanded(true)
|
||||
// Focus so easy typing
|
||||
$('#search-box').focus()
|
||||
// Load things to search if we haven't yet
|
||||
if(!pagesContainer[0]) {
|
||||
$.each(arrPages, function(index, page) {
|
||||
$.get(rootURL + 'config/' + page + '/', function(data) {
|
||||
$.get(rootURL + 'config/' + page, function(data) {
|
||||
pagesContainer[index] = $(data).find('label')
|
||||
});
|
||||
});
|
||||
}
|
||||
}).on('hidden.bs.dropdown', function(event) {
|
||||
setConfigSearchExpanded(false)
|
||||
});
|
||||
|
||||
$('#search-box').on('keydown', function(event) {
|
||||
var key = event.key || event.which;
|
||||
var isArrowDown = key === 'ArrowDown' || key === 40;
|
||||
var isArrowUp = key === 'ArrowUp' || key === 38;
|
||||
var isEscape = key === 'Escape' || key === 'Esc' || key === 27;
|
||||
|
||||
if(isArrowDown || isArrowUp) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
focusConfigSearchResult(isArrowDown ? 1 : -1)
|
||||
} else if(isEscape) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
closeConfigSearch()
|
||||
}
|
||||
});
|
||||
|
||||
$('#search-dropdown').on('keydown', 'a.config-search-result', function(event) {
|
||||
var key = event.key || event.which;
|
||||
var isArrowDown = key === 'ArrowDown' || key === 40;
|
||||
var isArrowUp = key === 'ArrowUp' || key === 38;
|
||||
var isEscape = key === 'Escape' || key === 'Esc' || key === 27;
|
||||
|
||||
if(isArrowDown || isArrowUp) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
focusConfigSearchResult(isArrowDown ? 1 : -1)
|
||||
} else if(isEscape) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
closeConfigSearch()
|
||||
}
|
||||
}).on('mouseenter focus', 'a.config-search-result', function() {
|
||||
getConfigSearchResults().parent().removeClass('active')
|
||||
$(this).parent().addClass('active')
|
||||
});
|
||||
|
||||
// For the scrolling
|
||||
@@ -536,11 +591,46 @@ $(document).ready(function() {
|
||||
|
||||
// Don't go too fast
|
||||
var searchTimeout
|
||||
|
||||
function getConfigSearchResults() {
|
||||
return $('#search-dropdown').find('a.config-search-result')
|
||||
}
|
||||
|
||||
function setConfigSearchExpanded(expanded) {
|
||||
$('#search-menu > a[data-toggle="dropdown"]').attr('aria-expanded', expanded ? 'true' : 'false')
|
||||
}
|
||||
|
||||
function closeConfigSearch() {
|
||||
$('#search-menu').removeClass('open')
|
||||
setConfigSearchExpanded(false)
|
||||
$('#search-box').focus()
|
||||
}
|
||||
|
||||
function focusConfigSearchResult(offset) {
|
||||
var $results = getConfigSearchResults()
|
||||
var activeIndex = $results.index(document.activeElement)
|
||||
var nextIndex
|
||||
|
||||
if(!$results.length) return
|
||||
|
||||
if(activeIndex < 0) {
|
||||
nextIndex = offset > 0 ? 0 : $results.length - 1
|
||||
} else {
|
||||
nextIndex = activeIndex + offset
|
||||
if(nextIndex >= $results.length) nextIndex = 0
|
||||
if(nextIndex < 0) nextIndex = $results.length - 1
|
||||
}
|
||||
|
||||
getConfigSearchResults().parent().removeClass('active')
|
||||
$results.eq(nextIndex).parent().addClass('active')
|
||||
$results.eq(nextIndex).focus()
|
||||
}
|
||||
|
||||
function doConfigSearch(value) {
|
||||
// Cancel previous
|
||||
clearTimeout(searchTimeout)
|
||||
// Build new search
|
||||
var searchTerm = $(value).val().replace('"', '\"')
|
||||
var searchTerm = $.trim($(value).val())
|
||||
var searchOutput = $('#search-dropdown')
|
||||
|
||||
// Build new search
|
||||
@@ -551,14 +641,24 @@ function doConfigSearch(value) {
|
||||
if (searchTerm.length < 2) return
|
||||
// Find some results!
|
||||
$.each(pagesContainer, function(page_index, results) {
|
||||
if(!results) return
|
||||
// Get the matches
|
||||
var subResults = results.filter(':contains("'+searchTerm+'")')
|
||||
var subResults = results.filter(function() {
|
||||
return $(this).text().toUpperCase().indexOf(searchTerm.toUpperCase()) >= 0
|
||||
})
|
||||
if(subResults.length > 0) {
|
||||
// Add the section
|
||||
searchOutput.append('<li class="divider"></li>')
|
||||
searchOutput.append('<li class="dropdown-header">'+configTranslate.searchPages[page_index]+'</li>')
|
||||
searchOutput.append($('<li class="divider"></li>'))
|
||||
searchOutput.append($('<li class="dropdown-header"></li>').text(configTranslate.searchPages[page_index]))
|
||||
$.each(subResults, function(index, result) {
|
||||
searchOutput.append('<li><a href="'+rootURL + 'config/' + arrPages[page_index] + '/#' + $(result).attr('for') +'">'+$(result).text()+'</a></li>')
|
||||
var resultUrl = rootURL + 'config/' + arrPages[page_index] + '#' + $(result).attr('for')
|
||||
searchOutput.append(
|
||||
$('<li></li>').append(
|
||||
$('<a class="config-search-result"></a>')
|
||||
.attr('href', resultUrl)
|
||||
.text($(result).text())
|
||||
)
|
||||
)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
<div class="history" id="history-tab">
|
||||
<div class="history-header">
|
||||
<h2>$T('menu-history') <small data-bind="visible: history.showArchive()">($T('archive'))</small></h2>
|
||||
<a href="#" data-bind="click: history.showMultiEdit, visible: hasHistory()">
|
||||
<a href="#" aria-label="$T('Glitter-multiOperations')" data-bind="click: history.showMultiEdit, visible: hasHistory()">
|
||||
<span class="glyphicon glyphicon-tasks" data-tooltip="true" data-placement="left" title="$T('Glitter-multiOperations')"></span>
|
||||
</a>
|
||||
</div>
|
||||
<table class="table table-hover history-table paginated">
|
||||
<table class="table table-hover history-table paginated" aria-label="$T('menu-history')">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 25px;"></th>
|
||||
<th></th>
|
||||
<th class="table-status-header" data-bind="css: { 'table-header-status-smaller' : extraHistoryColumns().length || displayCompact() }"></th>
|
||||
<th scope="col" style="width: 25px;"><span class="sr-only">$T('Glitter-result')</span></th>
|
||||
<th scope="col"><span class="sr-only">$T('name')</span></th>
|
||||
<th class="table-status-header" scope="col" data-bind="css: { 'table-header-status-smaller' : extraHistoryColumns().length || displayCompact() }"><span class="sr-only">$T('status')</span></th>
|
||||
<!-- ko foreach: extraHistoryColumns -->
|
||||
<th class="table-header-extra"></th>
|
||||
<th class="table-header-extra" scope="col"><span class="sr-only" data-bind="text: glitterTranslate.column[\$data]"></span></th>
|
||||
<!-- /ko -->
|
||||
<th style="width: 130px;"></th>
|
||||
<th style="width: 60px;"></th>
|
||||
<th scope="col" style="width: 130px;"><span class="sr-only">$T('post-Completed')</span></th>
|
||||
<th scope="col" style="width: 60px;"><span class="sr-only">$T('Glitter-actions')</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<!-- ko if: !hasHistory() -->
|
||||
@@ -30,10 +30,10 @@
|
||||
<tbody data-bind="foreach: history.historyItems, visible: hasHistory()" style="display: none;">
|
||||
<tr class="history-item" data-bind="css: {'history-failed-download':failed()}">
|
||||
<td>
|
||||
<div data-bind="visible: processingWaiting()">
|
||||
<span class="glyphicon glyphicon-time"></span>
|
||||
<div role="img" aria-label="$T('post-Queued')" data-bind="visible: processingWaiting()">
|
||||
<span class="glyphicon glyphicon-time" aria-hidden="true"></span>
|
||||
</div>
|
||||
<div data-bind="visible: processingDownload()">
|
||||
<div role="img" aria-label="$T('stage-download')" data-bind="visible: processingDownload()">
|
||||
<div class="processing-download">
|
||||
<div class="loader-bar-one"></div>
|
||||
<div class="loader-bar-two"></div>
|
||||
@@ -41,17 +41,17 @@
|
||||
<div class="loader-bar-four"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div data-bind="visible: (!failed() && !processingDownload() && !processingWaiting())">
|
||||
<span class="glyphicon glyphicon-ok"></span>
|
||||
<div role="img" aria-label="$T('post-Completed')" data-bind="visible: (!failed() && !processingDownload() && !processingWaiting())">
|
||||
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
|
||||
</div>
|
||||
<div data-bind="visible: failed() && canRetry()">
|
||||
<a class="retry-button" href="#" data-bind="click: retry">
|
||||
<span class="glyphicon glyphicon-exclamation-sign"></span>
|
||||
<a class="retry-button" href="#" aria-label="$T('button-retry')" data-bind="click: retry">
|
||||
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
|
||||
</a>
|
||||
</div>
|
||||
<div data-bind="visible: failed() && !canRetry()">
|
||||
<span class="retry-button-inactive">
|
||||
<span class="glyphicon glyphicon-exclamation-sign"></span>
|
||||
<span class="retry-button-inactive" role="img" aria-label="$T('post-Failed')">
|
||||
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
@@ -70,10 +70,10 @@
|
||||
<td class="history-completedon row-wrap-text" data-bind="text: completedOn(), attr: { 'data-timestamp': completed }" onclick="showDetails(this)"></td>
|
||||
<td class="delete">
|
||||
<label data-bind="visible: parent.isMultiEditing()">
|
||||
<input type="checkbox" name="multiedit" title="$T('Glitter-multiSelect')" data-bind="click: parent.addMultiEdit, attr: { 'id': 'multiedit_' + id } " />
|
||||
<input type="checkbox" name="multiedit" title="$T('Glitter-multiSelect')" aria-label="$T('Glitter-selectJob')" data-bind="click: parent.addMultiEdit, attr: { 'id': 'multiedit_' + id } " />
|
||||
</label>
|
||||
<div class="dropdown" data-bind="visible: !parent.isMultiEditing()">
|
||||
<a href="#" data-toggle="dropdown" data-bind="click: updateAllHistoryInfo">
|
||||
<a href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="$T('nzoDetails')" data-bind="click: updateAllHistoryInfo">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<!-- ko if: hasDropdown() -->
|
||||
@@ -95,7 +95,6 @@
|
||||
<div class="col-sm-2">$T('status')</div>
|
||||
<div class="col-sm-10">
|
||||
<span data-bind="text: glitterTranslate.status[historyStatus.status()] ? glitterTranslate.status[historyStatus.status()] : statusText()"></span>
|
||||
<a href="#" class="mark-completed-link" data-bind="visible: failed(), click: markAsCompleted" title="$T('button-mark-completed')"><span class="glyphicon glyphicon-ok"></span> $T('post-Completed')</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@@ -120,11 +119,14 @@
|
||||
<div class="col-sm-10 history-status-modallink" data-bind="longText: actions, longTextType: name()"></div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<div class="col-sm-12 text-right" data-bind="visible: failed()">
|
||||
<a href="#" class="btn btn-default mark-completed-btn" data-bind="click: markAsCompleted"><span class="glyphicon glyphicon-ok"></span> $T('button-mark-completed')</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<a href="#" data-bind="click: parent.triggerRemoveDownload">
|
||||
<a href="#" data-bind="click: parent.triggerRemoveDownload, attr: { 'aria-label': processingDownload() == 2 ? '$T('abort')' : '$T('nzo-delete')' }">
|
||||
<span class="hover-button glyphicon glyphicon-trash" data-bind="css: { 'glyphicon-stop' : processingDownload() == 2, disabled : processingDownload() == 1 }, attr: { title: processingDownload() == 2 ? '$T('abort')' : '$T('nzo-delete')' }"></span>
|
||||
</a>
|
||||
</td>
|
||||
@@ -135,15 +137,20 @@
|
||||
<div class="history-footer">
|
||||
|
||||
<div class="input-group search-box">
|
||||
<input type="text" class="form-control" placeholder="$T('Glitter-search')" required data-bind="textInput: history.searchTerm, event: { keydown: history.clearSearchTerm }" />
|
||||
<a data-bind="event: { mousedown: history.clearSearchTerm }">
|
||||
<input type="text" class="form-control" placeholder="$T('Glitter-search')" aria-label="$T('Glitter-search')" required data-bind="textInput: history.searchTerm, event: { keydown: history.clearSearchTerm }" />
|
||||
<a href="#" data-tooltip="true" data-html="true" data-placement="right" title="$T('Glitter-searchExplain')" data-bind="click: history.clearSearchTerm, attr: { 'aria-label': history.searchTerm() ? '$T('Glitter-clearSearch')' : '$T('Glitter-search')' }">
|
||||
<span class="glyphicon" data-bind="css: { 'glyphicon-search' : !history.searchTerm(), 'glyphicon-remove' : history.searchTerm() }"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="pagination" data-bind="foreach: history.pagination.allpages(), visible: history.pagination.hasPagination" style="display: none;">
|
||||
<li data-bind="css: { active: isCurrent, disabled: isDots }, click: onclick">
|
||||
<span data-bind="text: page"></span>
|
||||
<li data-bind="css: { active: isCurrent, disabled: isDots }">
|
||||
<!-- ko ifnot: isDots -->
|
||||
<a href="#" data-bind="text: page, click: onclick, attr: { 'aria-current': isCurrent ? 'page' : null }"></a>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: isDots -->
|
||||
<span aria-hidden="true" data-bind="text: page"></span>
|
||||
<!-- /ko -->
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
<nav class="navbar navbar-inverse main-navbar">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse" aria-label="$T('Glitter-toggleNavigation')" aria-controls="navbar-collapse" aria-expanded="false">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-logo" href="./">
|
||||
<a class="navbar-logo" href="$url()" aria-label="SABnzbd $T('menu-queue')">
|
||||
#include $webdir + "/../../Config/templates/staticcfg/images/logo-small.svg"#
|
||||
</a>
|
||||
<div class="btn-group">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default navbar-btn" data-bind="click: pauseToggle, attr: { 'title': downloadsPaused() ? '$T('link-resume')' : '$T('link-pause')' }">
|
||||
<button type="button" class="btn btn-default navbar-btn" data-bind="click: pauseToggle, attr: { 'title': downloadsPaused() ? '$T('link-resume')' : '$T('link-pause')', 'aria-label': downloadsPaused() ? '$T('link-resume')' : '$T('link-pause')' }">
|
||||
<span class="glyphicon" data-bind="css: { 'glyphicon-play' : downloadsPaused(), 'glyphicon-pause' : !downloadsPaused() }"></span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-default navbar-btn dropdown-toggle" data-toggle="dropdown">
|
||||
<button type="button" class="btn btn-default navbar-btn dropdown-toggle" data-toggle="dropdown" aria-label="$T('pauseFor')" aria-haspopup="true" aria-expanded="false">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
@@ -26,7 +26,7 @@
|
||||
<li class="divider"></li>
|
||||
<li><a href="#" data-bind="click: openCustomPauseTime">$T('Glitter-custom')</a></li>
|
||||
</ul>
|
||||
<span class="btn btn-default navbar-btn navbar-timeleft" data-bind="text: timeLeft" data-toggle="dropdown">0:00</span>
|
||||
<span class="btn btn-default navbar-btn navbar-timeleft" data-bind="text: timeLeft" data-toggle="dropdown">0:00</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -37,18 +37,18 @@
|
||||
<li class="speedlimit-dropdown dropdown">
|
||||
<div class="btn-group">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default navbar-btn navbar-speed" data-toggle="dropdown">
|
||||
<button type="button" class="btn btn-default navbar-btn navbar-speed" data-toggle="dropdown" aria-haspopup="true">
|
||||
<span data-bind="text: speedText">0 KB/s</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-default navbar-btn dropdown-toggle" data-toggle="dropdown" onclick="keepOpen(this)">
|
||||
<button type="button" class="btn btn-default navbar-btn dropdown-toggle" data-toggle="dropdown" onclick="keepOpen(this)" aria-hidden="true" tabindex="-1">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<a href="#" class="max-speed-input-clear hover-button" data-bind="click: clearSpeedLimit, visible:(speedLimit() < 100 && speedLimit() > 0)" style="display: none;">
|
||||
<a href="#" class="max-speed-input-clear hover-button" aria-label="$T('button-clear')" data-bind="click: clearSpeedLimit, visible:(speedLimit() < 100 && speedLimit() > 0)" style="display: none;">
|
||||
<span class="glyphicon glyphicon-link"></span>
|
||||
</a>
|
||||
<div class="dropdown-menu max-speed-input">
|
||||
<div data-bind="visible: !bandwithLimit()">
|
||||
<a href="./config/general/#bandwidth_max_value">
|
||||
<a href="$url('config/general#bandwidth_max_value')">
|
||||
<span class="glyphicon glyphicon-cog"></span> $T('Glitter-setMaxLinespeed')
|
||||
</a>
|
||||
</div>
|
||||
@@ -61,14 +61,14 @@
|
||||
</div>
|
||||
</li>
|
||||
<li data-tooltip="true" data-placement="bottom" title="$T('Glitter-addNZB')">
|
||||
<a href="#modal-add-nzb" data-toggle="modal"><span class="glyphicon glyphicon-plus-sign"></span></a>
|
||||
<a href="#modal-add-nzb" data-toggle="modal" aria-label="$T('Glitter-addNZB')"><span class="glyphicon glyphicon-plus-sign"></span></a>
|
||||
</li>
|
||||
<li data-tooltip="true" data-placement="bottom" title="$T('Glitter-statusInterfaceOptions')" data-bind="click: loadStatusInfo">
|
||||
<a href="#modal-options" data-toggle="modal"><span class="glyphicon glyphicon-wrench"></span></a>
|
||||
<a href="#modal-options" data-toggle="modal" aria-label="$T('Glitter-statusInterfaceOptions')"><span class="glyphicon glyphicon-wrench"></span></a>
|
||||
</li>
|
||||
<!--#if $have_rss_defined#-->
|
||||
<li data-tooltip="true" data-placement="bottom" title="$T('cmenu-rss')">
|
||||
<a href="./config/rss/">
|
||||
<a href="$url('config/rss')" aria-label="$T('cmenu-rss')">
|
||||
<svg class="rss-icon-svg" viewBox="0 0 8 8">
|
||||
<rect class="rss-button" width="8" height="8" />
|
||||
<circle class="rss-symbol" cx="2" cy="6" r="1" />
|
||||
@@ -79,10 +79,10 @@
|
||||
</li>
|
||||
<!--#end if#-->
|
||||
<li data-tooltip="true" data-placement="bottom" title="SABnzbd $T('menu-config')">
|
||||
<a href="./config/"><span class="glyphicon glyphicon-cog"></span></a>
|
||||
<a href="$url('config')" aria-label="SABnzbd $T('menu-config')"><span class="glyphicon glyphicon-cog"></span></a>
|
||||
</li>
|
||||
<li class="dropdown main-menu-link" data-bind="css: { 'active-on-queue-finish-menu': finishaction()}">
|
||||
<a href="#" data-toggle="dropdown" onclick="keepOpen(this)">
|
||||
<a href="#" data-toggle="dropdown" onclick="keepOpen(this)" aria-label="$T('Glitter-mainMenu')" aria-haspopup="true" aria-expanded="false">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
@@ -91,18 +91,32 @@
|
||||
<li><a href="#modal-help" data-toggle="modal"><span class="glyphicon glyphicon-question-sign"></span> $T('menu-help')</a></li>
|
||||
<li><a href="https://sabnzbd.org/donate" target="_blank"><span class="glyphicon glyphicon-heart"></span> $T('menu-donate')</a></li>
|
||||
<!--#if $have_logout or $have_quota or $have_rss_defined or $have_watched_dir or $pp_pause_event#--><li class="divider"></li><!--#end if#-->
|
||||
<!--#if $have_logout#--><li><a href="./login/?logout=1"><span class="glyphicon glyphicon-log-out"></span> $T('logout')</a></li><!--#end if#-->
|
||||
<!--#if $have_logout#--><li>
|
||||
<form method="post" action="$url('logout')">
|
||||
<input type="hidden" name="csrf_token" value="$csrf_token" />
|
||||
<button type="submit"><span class="glyphicon glyphicon-log-out"></span> $T('logout')</button>
|
||||
</form>
|
||||
</li><!--#end if#-->
|
||||
<!--#if $have_quota#--><li><a href="#" data-bind="click: doQueueAction" data-mode="reset_quota">$T('link-resetQuota')</a></li><!--#end if#-->
|
||||
<!--#if $have_rss_defined#--><li><a href="#" data-bind="click: doQueueAction" data-mode="rss_now">$T('button-rssNow')</a></li><!--#end if#-->
|
||||
<!--#if $have_watched_dir#--><li><a href="#" data-bind="click: doQueueAction" data-mode="watched_now">$T('sch-scan_folder')</a></li><!--#end if#-->
|
||||
<!--#if $pp_pause_event#--><li><a href="#" data-bind="click: doQueueAction" data-mode="resume_pp">$T('sch-resume_post')</a></li><!--#end if#-->
|
||||
<li class="divider"></li>
|
||||
<li><a href="./shutdown/?apikey=$apikey&pid=$pid" data-bind="click: shutdownSAB">$T('shutdownSab')</a></li>
|
||||
<li><a href="#" data-bind="click: restartSAB">$T('Glitter-restartSab')</a></li>
|
||||
<li>
|
||||
<form method="post" action="$url('shutdown')" data-bind="submit: shutdownSAB">
|
||||
<input type="hidden" name="csrf_token" value="$csrf_token" />
|
||||
<button type="submit">$T('shutdownSab')</button>
|
||||
</form>
|
||||
</li>
|
||||
<li>
|
||||
<form data-bind="submit: restartSAB">
|
||||
<button type="submit">$T('Glitter-restartSab')</button>
|
||||
</form>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown-header"><span class="glyphicon glyphicon-off"></span> $T('Glitter-onFinish'):</li>
|
||||
<li>
|
||||
<select data-bind="value: finishaction, event: { change: setOnQueueFinish }" class="form-control">
|
||||
<select data-bind="value: finishaction, event: { change: setOnQueueFinish }" class="form-control" aria-label="$T('Glitter-onFinish')">
|
||||
<option value=""></option>
|
||||
<option value="shutdown_program">$T('shutdownSab')</option>
|
||||
<!--#if $power_options#-->
|
||||
@@ -116,4 +130,4 @@
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</nav>
|
||||
@@ -1,8 +1,8 @@
|
||||
<div id="queue-messages" class="queue-messages" data-bind="visible: hasMessages() || displayTabbed()" style="display: none;">
|
||||
<table class="table table-hover table-messages">
|
||||
<table class="table table-hover table-messages" aria-label="$T('warnings')">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="table-messages-header-label"></th>
|
||||
<th class="table-messages-header-label"><span class="sr-only">$T('warnings')</span></th>
|
||||
<th style="width: 30px;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -11,7 +11,7 @@
|
||||
<tr>
|
||||
<td class="table-messages-hide"></td>
|
||||
<td data-bind="attr: { 'rowspan': parseInt(nrWarnings())+1 }, click: clearWarnings" class="table-messages-remove">
|
||||
<a href="#" class="hover-button"><span class="glyphicon glyphicon-remove"></span></a>
|
||||
<a href="#" class="hover-button" aria-label="$T('button-clear')"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- ko foreach: allWarnings -->
|
||||
@@ -32,7 +32,7 @@
|
||||
</td>
|
||||
<!-- ko if: \$data.hasOwnProperty("clear") -->
|
||||
<td class="table-messages-remove">
|
||||
<a href="#" data-bind="click: clear" class="hover-button"><span class="glyphicon glyphicon-remove"></span></a>
|
||||
<a href="#" data-bind="click: clear" class="hover-button" aria-label="$T('button-clear')"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></a>
|
||||
</td>
|
||||
<!-- /ko -->
|
||||
</tr>
|
||||
@@ -45,4 +45,4 @@
|
||||
<!-- /ko -->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@@ -72,13 +72,13 @@
|
||||
</div>
|
||||
|
||||
<!-- Modals -->
|
||||
<div id="modal-options" class="modal fade" tabindex="-1">
|
||||
<div id="modal-options" class="modal fade" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="modal-options-title">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<a href="#" data-bind="click: loadStatusInfo, css: { 'rotate-refresh': !hasStatusInfo() }" title="$T('Glitter-interfaceRefresh')"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<h4 class="modal-title">$T('Glitter-statusInterfaceOptions')</h4>
|
||||
<h4 class="modal-title" id="modal-options-title">$T('Glitter-statusInterfaceOptions')</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<ul class="nav nav-tabs">
|
||||
@@ -197,9 +197,12 @@
|
||||
</div>
|
||||
<div class="row options-function-box">
|
||||
<div class="col-sm-6">
|
||||
<a href="./api?mode=showlog&apikey=$apikey" target="_blank" class="btn btn-default" data-tooltip="true" data-placement="top" title="$T('Glitter-logText')">
|
||||
<span class="glyphicon glyphicon-file"></span> $T('link-showLog')
|
||||
</a>
|
||||
<form method="post" action="$url('log')" target="_blank">
|
||||
<input type="hidden" name="csrf_token" value="$csrf_token" />
|
||||
<button type="submit" class="btn btn-default" data-tooltip="true" data-placement="top" title="$T('Glitter-logText')">
|
||||
<span class="glyphicon glyphicon-file"></span> $T('link-showLog')
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="input-group" data-tooltip="true" data-placement="top" title="$T('logging')">
|
||||
@@ -274,7 +277,7 @@
|
||||
</div>
|
||||
|
||||
<!-- ko if: serverconnections().length > 0 -->
|
||||
<table class="table table-hover table-server-connections" data-bind="visible: \$root.showActiveConnections()">
|
||||
<table class="table table-hover table-server-connections" aria-label="$T('connections')" data-bind="visible: \$root.showActiveConnections()">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><strong>$T('article-id')</strong></th>
|
||||
@@ -304,7 +307,7 @@
|
||||
<a href="#" class="hover-button process-all-orphaned" data-bind="click: removeAllOrphaned">$T('Glitter-purgeOrphaned') <span class="glyphicon glyphicon-trash"></span></a>
|
||||
<a href="#" class="hover-button process-all-orphaned" data-bind="click: addAllOrphaned">$T('Glitter-retryAllOrphaned') <span class="glyphicon glyphicon-plus-sign"></span></a>
|
||||
<div class="clearfix"></div>
|
||||
<table class="table table-hover table-striped">
|
||||
<table class="table table-hover table-striped" aria-label="$T('Glitter-orphanedJobs')">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 30px;"></th>
|
||||
@@ -333,7 +336,7 @@
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-6 control-label">$T('Glitter-interfaceRefresh')</label>
|
||||
<label class="col-sm-6 control-label" for="refreshRate-option">$T('Glitter-interfaceRefresh')</label>
|
||||
<div class="col-sm-4">
|
||||
<select id="refreshRate-option" class="form-control" data-bind="value: refreshRate">
|
||||
<option value="1">1 $T('second')</option>
|
||||
@@ -351,9 +354,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-6 control-label">$T('Glitter-queueItemLimit')</label>
|
||||
<label class="col-sm-6 control-label" for="queue-pagination-limit">$T('Glitter-queueItemLimit')</label>
|
||||
<div class="col-sm-4">
|
||||
<select name="queue-pagination-limit" class="form-control" data-bind="value: queue.paginationLimit">
|
||||
<select name="queue-pagination-limit" id="queue-pagination-limit" class="form-control" data-bind="value: queue.paginationLimit">
|
||||
<option value="5">5 / $T('Glitter-page')</option>
|
||||
<option value="10">10 / $T('Glitter-page')</option>
|
||||
<option value="20">20 / $T('Glitter-page')</option>
|
||||
@@ -366,9 +369,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-6 control-label">$T('Glitter-historyItemLimit')</label>
|
||||
<label class="col-sm-6 control-label" for="history-pagination-limit">$T('Glitter-historyItemLimit')</label>
|
||||
<div class="col-sm-4">
|
||||
<select name="history-pagination-limit" class="form-control" data-bind="value: history.paginationLimit">
|
||||
<select name="history-pagination-limit" id="history-pagination-limit" class="form-control" data-bind="value: history.paginationLimit">
|
||||
<option value="5">5 / $T('Glitter-page')</option>
|
||||
<option value="10">10 / $T('Glitter-page')</option>
|
||||
<option value="20">20 / $T('Glitter-page')</option>
|
||||
@@ -381,9 +384,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-6 control-label">$T('Glitter-dateFormat')</label>
|
||||
<label class="col-sm-6 control-label" for="general-date-format">$T('Glitter-dateFormat')</label>
|
||||
<div class="col-sm-4">
|
||||
<select name="general-date-format" class="form-control" data-bind="value: dateFormat">
|
||||
<select name="general-date-format" id="general-date-format" class="form-control" data-bind="value: dateFormat">
|
||||
<option value="DD/MM/YYYY HH:mm"></option>
|
||||
<option value="DD/MM/YYYY h:mma"></option>
|
||||
<option value="MM/DD/YYYY HH:mm"></option>
|
||||
@@ -399,12 +402,12 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-6 control-label">
|
||||
<label class="col-sm-6 control-label" for="general-extra-queue-columns">
|
||||
$T('Glitter-showExtraQueueColumn')<br />
|
||||
<span class="label label-warning">> 1200 pixels</span>
|
||||
</label>
|
||||
<div class="col-sm-4">
|
||||
<select name="general-extra-column" class="form-control-multiselect form-control" data-bind="selectedOptions: extraQueueColumns" multiple="true">
|
||||
<select name="general-extra-column" id="general-extra-queue-columns" class="form-control-multiselect form-control" data-bind="selectedOptions: extraQueueColumns" multiple="true">
|
||||
<option value="category">$T('category')</option>
|
||||
<option value="priority">$T('priority')</option>
|
||||
<option value="processing">$T('swtag-pp')</option>
|
||||
@@ -414,12 +417,12 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-6 control-label">
|
||||
<label class="col-sm-6 control-label" for="general-extra-history-columns">
|
||||
$T('Glitter-showExtraHistoryColumn')<br />
|
||||
<span class="label label-warning">> 1200 pixels</span>
|
||||
</label>
|
||||
<div class="col-sm-4">
|
||||
<select name="general-extra-column" class="form-control-multiselect form-control" data-bind="selectedOptions: extraHistoryColumns" multiple="true">
|
||||
<select name="general-extra-column" id="general-extra-history-columns" class="form-control-multiselect form-control" data-bind="selectedOptions: extraHistoryColumns" multiple="true">
|
||||
<option value="category">$T('category')</option>
|
||||
<option value="size">$T('size')</option>
|
||||
<option value="speed">$T('Glitter-speed')</option>
|
||||
@@ -485,12 +488,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-add-nzb" class="modal fade" tabindex="-1">
|
||||
<div id="modal-add-nzb" class="modal fade" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="modal-add-nzb-title">
|
||||
<div class="modal-dialog">
|
||||
<form class="modal-content" data-bind="submit: addNZB">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('Glitter-addNZB')</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="modal-add-nzb-title">$T('Glitter-addNZB')</h4>
|
||||
</div>
|
||||
<div class="modal-body form-horizontal">
|
||||
<div class="row">
|
||||
@@ -524,29 +527,29 @@
|
||||
<div class="clearfix"></div>
|
||||
<hr />
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">$T('name')</label>
|
||||
<label class="col-sm-4 control-label" for="nzbname">$T('name')</label>
|
||||
<div class="col-sm-6">
|
||||
<input type="text" name="nzbname" id="nzbname" placeholder="$T('Glitter-addnzbFilename')" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">$T('srv-password')</label>
|
||||
<label class="col-sm-4 control-label" for="password">$T('srv-password')</label>
|
||||
<div class="col-sm-6">
|
||||
<input type="text" name="password" id="password" placeholder="$T('srv-optional')" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">$T('category')</label>
|
||||
<label class="col-sm-4 control-label" for="add-nzb-category">$T('category')</label>
|
||||
<div class="col-sm-6">
|
||||
<select name="Category" class="form-control" data-bind="options: queue.categoriesList, optionsValue: 'catValue', optionsText: 'catText', optionsCaption: ''"></select>
|
||||
<select name="Category" id="add-nzb-category" class="form-control" data-bind="options: queue.categoriesList, optionsValue: 'catValue', optionsText: 'catText', optionsCaption: ''"></select>
|
||||
<span class="glyphicon glyphicon-tag"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">$T('priority')</label>
|
||||
<label class="col-sm-4 control-label" for="add-nzb-priority">$T('priority')</label>
|
||||
<div class="col-sm-6">
|
||||
<!-- This list is different from the one during download! -->
|
||||
<select name="Priority" class="form-control">
|
||||
<select name="Priority" id="add-nzb-priority" class="form-control">
|
||||
<option value=""></option>
|
||||
<option value="2">$T('pr-force')</option>
|
||||
<option value="1">$T('pr-high')</option>
|
||||
@@ -558,16 +561,16 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">$T('swtag-pp')</label>
|
||||
<label class="col-sm-4 control-label" for="add-nzb-processing">$T('swtag-pp')</label>
|
||||
<div class="col-sm-6">
|
||||
<select name="Processing" class="form-control" data-bind="options: queue.processingOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: ''"></select>
|
||||
<select name="Processing" id="add-nzb-processing" class="form-control" data-bind="options: queue.processingOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: ''"></select>
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 control-label">$T('eoq-scripts')</label>
|
||||
<label class="col-sm-4 control-label" for="add-nzb-script">$T('eoq-scripts')</label>
|
||||
<div class="col-sm-6">
|
||||
<select name="Post-processing" class="form-control" data-bind="options: queue.scriptsList, optionsCaption: '', optionsValue: 'scriptValue', optionsText: 'scriptText', enable: (queue.scriptsList().length > 1)"></select>
|
||||
<select name="Post-processing" id="add-nzb-script" class="form-control" data-bind="options: queue.scriptsList, optionsCaption: '', optionsValue: 'scriptValue', optionsText: 'scriptText', enable: (queue.scriptsList().length > 1)"></select>
|
||||
<span class="glyphicon glyphicon-flash"></span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -577,12 +580,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-item-files" class="modal fade" tabindex="-1">
|
||||
<div id="modal-item-files" class="modal fade" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="modal-item-files-title">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title row-wrap-text" data-bind="text: filelist.filelist_name">$T('Glitter-loading')</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title row-wrap-text" id="modal-item-files-title" data-bind="text: filelist.filelist_name">$T('Glitter-loading')</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div id="modal-item-filelist">
|
||||
@@ -645,12 +648,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-delete-queue-job" class="modal modal-delete-job fade" tabindex="-1">
|
||||
<div id="modal-delete-queue-job" class="modal modal-delete-job fade" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="modal-delete-queue-job-title">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title row-wrap-text">$T('removeNZB-Files')</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title row-wrap-text" id="modal-delete-queue-job-title">$T('removeNZB-Files')</h4>
|
||||
</div>
|
||||
<form data-bind="submit: queue.removeDownloads">
|
||||
<div class="modal-body">
|
||||
@@ -669,12 +672,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-delete-history-job" class="modal modal-delete-job fade" tabindex="-1">
|
||||
<div id="modal-delete-history-job" class="modal modal-delete-job fade" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="modal-delete-history-job-title">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title row-wrap-text">$T('nzo-delete')</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title row-wrap-text" id="modal-delete-history-job-title">$T('nzo-delete')</h4>
|
||||
</div>
|
||||
<form data-bind="submit: history.removeDownloads">
|
||||
<div class="modal-body">
|
||||
@@ -698,12 +701,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-retry-job" class="modal modal-small fade" tabindex="-1">
|
||||
<div id="modal-retry-job" class="modal modal-small fade" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="modal-retry-job-title">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('Glitter-retryJob')</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="modal-retry-job-title">$T('Glitter-retryJob')</h4>
|
||||
</div>
|
||||
<form id="retry-job-form" data-bind="submit: history.retryJob">
|
||||
<div class="modal-body">
|
||||
@@ -740,24 +743,24 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="history-script-log" class="modal fade" tabindex="-1">
|
||||
<div id="history-script-log" class="modal fade" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="history-script-log-title">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('Glitter-scriptLog')</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="history-script-log-title">$T('Glitter-scriptLog')</h4>
|
||||
</div>
|
||||
<div class="modal-body"></div>
|
||||
<div class="modal-body"><pre></pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-help" class="modal fade">
|
||||
<div id="modal-help" class="modal fade" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="modal-help-title">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('menu-help')</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="modal-help-title">$T('menu-help')</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
#include $webdir + "/../../Config/templates/staticcfg/images/logo-full.svg"#
|
||||
@@ -790,12 +793,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-purge-history" class="modal modal-small fade" tabindex="-1">
|
||||
<div id="modal-purge-history" class="modal modal-small fade" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="modal-purge-history-title">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('Glitter-clearHistory')</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="modal-purge-history-title">$T('Glitter-clearHistory')</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<button type="button" class="btn btn-danger" data-bind="click: history.emptyHistory" data-action="history-purge-failed"><span class="glyphicon glyphicon-floppy-remove"></span> $T('purgeFailed')</button>
|
||||
@@ -814,12 +817,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-custom-pause" class="modal modal-small fade" tabindex="-1">
|
||||
<div id="modal-custom-pause" class="modal modal-small fade" tabindex="-1" role="dialog" aria-modal="true" aria-labelledby="modal-custom-pause-title">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('Glitter-pauseFor')</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="$T('close')"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="modal-custom-pause-title">$T('Glitter-pauseFor')</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form data-bind="submit: saveCustomPause">
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#" data-action="sortRemainingAsc" data-bind="click: queue.queueSorting">$T('Glitter-sortRemaining')</a></li>
|
||||
<li><a href="#" data-action="sortRemainingBytesAsc" data-bind="click: queue.queueSorting">$T('Glitter-sortRemainingBytesAsc')</a></li>
|
||||
<li><a href="#" data-action="sortAgeAsc" data-bind="click: queue.queueSorting">$T('Glitter-sortAgeAsc')</a></li>
|
||||
<li><a href="#" data-action="sortAgeDesc" data-bind="click: queue.queueSorting">$T('Glitter-sortAgeDesc')</a></li>
|
||||
<li><a href="#" data-action="sortNameAsc" data-bind="click: queue.queueSorting">$T('Glitter-sortNameAsc')</a></li>
|
||||
@@ -57,17 +58,17 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<table class="table table-striped table-hover queue-table">
|
||||
<table class="table table-striped table-hover queue-table" aria-label="$T('menu-queue')">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 25px;"></th>
|
||||
<th></th>
|
||||
<th scope="col" style="width: 25px;"><span class="sr-only">$T('status')</span></th>
|
||||
<th scope="col"><span class="sr-only">$T('name')</span></th>
|
||||
<!-- ko foreach: extraQueueColumns -->
|
||||
<th class="table-header-extra"></th>
|
||||
<th class="table-header-extra" scope="col"><span class="sr-only" data-bind="text: glitterTranslate.column[\$data]"></span></th>
|
||||
<!-- /ko -->
|
||||
<th class="table-header-progress" data-bind="css: { 'table-header-progress-smaller' : extraQueueColumns().length || displayCompact() }"></th>
|
||||
<th style="width: 85px;"></th>
|
||||
<th style="width: 60px;"></th>
|
||||
<th class="table-header-progress" scope="col" data-bind="css: { 'table-header-progress-smaller' : extraQueueColumns().length || displayCompact() }"><span class="sr-only">$T('Glitter-progress')</span></th>
|
||||
<th scope="col" style="width: 85px;"><span class="sr-only">$T('status')</span></th>
|
||||
<th scope="col" style="width: 60px;"><span class="sr-only">$T('Glitter-actions')</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<!-- ko if: !hasQueue() -->
|
||||
@@ -84,7 +85,7 @@
|
||||
<tbody data-bind="visible: hasQueue(), sortable: { data: queue.queueItems, afterMove: queue.move, options: { start: queue.dragStart, stop: queue.dragStop, axis: 'y', containment: '.queue', distance: 10 } }" style="display: none;">
|
||||
<tr class="queue-item">
|
||||
<td>
|
||||
<a href="#" data-bind="click: pauseToggle, attr: { 'title': pausedStatus() ? '$T('link-resume')' : '$T('link-pause')' }">
|
||||
<a href="#" data-bind="click: pauseToggle, attr: { 'title': pausedStatus() ? '$T('link-resume')' : '$T('link-pause')', 'aria-label': pausedStatus() ? '$T('link-resume')' : '$T('link-pause')' }">
|
||||
<span class="hover-button glyphicon" data-bind="css: queueIcon"></span>
|
||||
</a>
|
||||
</td>
|
||||
@@ -102,16 +103,16 @@
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<form data-bind="submit: editingNameSubmit">
|
||||
<input type="text" data-bind="value: nameForEdit, visible: editingName(), hasfocus: editingName" />
|
||||
<input type="text" aria-label="$T('Glitter-rename')" data-bind="value: nameForEdit, visible: editingName(), hasfocus: editingName" />
|
||||
</form>
|
||||
<div class="name-icons direct-unpack hover-button" data-bind="visible: direct_unpack() && !editingName()">
|
||||
<span class="glyphicon glyphicon-compressed"></span> <span data-bind="text: direct_unpack"></span>
|
||||
</div>
|
||||
<div class="name-options" data-bind="visible: !editingName(), css: { disabled: isGrabbing() }">
|
||||
<a href="#" data-bind="click: \$parent.queue.moveButton" class="hover-button buttonMoveToTop" title="$T('Glitter-top')"><span class="glyphicon glyphicon-chevron-up"></span></a>
|
||||
<a href="#" data-bind="click: \$parent.queue.moveButton" class="hover-button buttonMoveToBottom" title="$T('Glitter-bottom')"><span class="glyphicon glyphicon-chevron-down"></span></a>
|
||||
<a href="#" data-bind="click: editName" class="hover-button" title="$T('Glitter-rename')"><span class="glyphicon glyphicon-pencil"></span></a>
|
||||
<a href="#" data-bind="click: showFiles" class="hover-button" title="$T('nzoDetails') - $T('srv-password')"><span class="glyphicon glyphicon-folder-open"></span></a>
|
||||
<a href="#" data-bind="click: \$parent.queue.moveButton" class="hover-button buttonMoveToTop" title="$T('Glitter-top')" aria-label="$T('Glitter-top')"><span class="glyphicon glyphicon-chevron-up"></span></a>
|
||||
<a href="#" data-bind="click: \$parent.queue.moveButton" class="hover-button buttonMoveToBottom" title="$T('Glitter-bottom')" aria-label="$T('Glitter-bottom')"><span class="glyphicon glyphicon-chevron-down"></span></a>
|
||||
<a href="#" data-bind="click: editName" class="hover-button" title="$T('Glitter-rename')" aria-label="$T('Glitter-rename')"><span class="glyphicon glyphicon-pencil"></span></a>
|
||||
<a href="#" data-bind="click: showFiles" class="hover-button" title="$T('nzoDetails') - $T('srv-password')" aria-label="$T('nzoDetails')"><span class="glyphicon glyphicon-folder-open"></span></a>
|
||||
<small data-bind="text: avg_age"></small>
|
||||
</div>
|
||||
</td>
|
||||
@@ -136,7 +137,7 @@
|
||||
<!-- /ko -->
|
||||
<td class="progress-indicator">
|
||||
<div class="progress">
|
||||
<div class="progress-bar progress-bar-info" data-bind="attr: { 'style': 'width: ' + percentage() + '%; background-color: ' + progressColor() + ';' }">
|
||||
<div class="progress-bar progress-bar-info" role="progressbar" aria-label="$T('Glitter-progress')" aria-valuemin="0" aria-valuemax="100" data-bind="attr: { 'style': 'width: ' + percentage() + '%; background-color: ' + progressColor() + ';', 'aria-valuenow': percentage() }">
|
||||
<strong data-bind="text: percentage() + '%'"></strong>
|
||||
<i data-bind="text: missingText"></i>
|
||||
</div>
|
||||
@@ -146,36 +147,36 @@
|
||||
<td class="timeleft row-wrap-text" data-bind="text: statusText"></td>
|
||||
<td class="delete">
|
||||
<label data-bind="visible: parent.isMultiEditing()">
|
||||
<input type="checkbox" name="multiedit" title="$T('Glitter-multiSelect')" data-bind="click: parent.addMultiEdit, attr: { 'id': 'multiedit_' + id } " />
|
||||
<input type="checkbox" name="multiedit" title="$T('Glitter-multiSelect')" aria-label="$T('Glitter-selectJob')" data-bind="click: parent.addMultiEdit, attr: { 'id': 'multiedit_' + id } " />
|
||||
</label>
|
||||
<div class="dropdown" data-bind="visible: !parent.isMultiEditing()">
|
||||
<a href="#" data-toggle="dropdown" data-bind="click: toggleDropdown">
|
||||
<a href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="$T('nzoDetails')" data-bind="click: toggleDropdown">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<!-- ko if: hasDropdown() -->
|
||||
<ul class="dropdown-menu queue-item-settings">
|
||||
<li title="$T('category')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-tag"></span>
|
||||
<select name="Category" class="form-control" data-bind="options: parent.categoriesList, optionsValue: 'catValue', optionsText: 'catText', value: category, valueAllowUnset: true, event: { change: changeCat }"></select>
|
||||
<select name="Category" class="form-control" aria-label="$T('category')" data-bind="options: parent.categoriesList, optionsValue: 'catValue', optionsText: 'catText', value: category, valueAllowUnset: true, event: { change: changeCat }"></select>
|
||||
</li>
|
||||
<!-- ko if: !isFetchingBlocks -->
|
||||
<li title="$T('priority')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-sort-by-attributes-alt"></span>
|
||||
<select name="Priority" class="form-control" data-bind="options: parent.priorityOptions, optionsValue: 'value', optionsText: 'name', value: priority, valueAllowUnset: true, event: { change: changePriority }"></select>
|
||||
<select name="Priority" class="form-control" aria-label="$T('priority')" data-bind="options: parent.priorityOptions, optionsValue: 'value', optionsText: 'name', value: priority, valueAllowUnset: true, event: { change: changePriority }"></select>
|
||||
</li>
|
||||
<!-- /ko -->
|
||||
<li title="$T('swtag-pp')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
<select name="Processing" class="form-control" data-bind="options: parent.processingOptions, optionsValue: 'value', optionsText: 'name', value: unpackopts, valueAllowUnset: true, event: { change: changeProcessing }"></select>
|
||||
<select name="Processing" class="form-control" aria-label="$T('swtag-pp')" data-bind="options: parent.processingOptions, optionsValue: 'value', optionsText: 'name', value: unpackopts, valueAllowUnset: true, event: { change: changeProcessing }"></select>
|
||||
</li>
|
||||
<li title="$T('eoq-scripts')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-flash"></span>
|
||||
<select name="Post-processing" class="form-control" data-bind="options: parent.scriptsList, value: script, valueAllowUnset: true, optionsValue: 'scriptValue', optionsText: 'scriptText', event: { change: changeScript }, enable: (parent.scriptsList().length > 1)"></select>
|
||||
<select name="Post-processing" class="form-control" aria-label="$T('eoq-scripts')" data-bind="options: parent.scriptsList, value: script, valueAllowUnset: true, optionsValue: 'scriptValue', optionsText: 'scriptText', event: { change: changeScript }, enable: (parent.scriptsList().length > 1)"></select>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<a href="#" class="hover-button" title="$T('removeNZB-Files')" data-bind="click: parent.triggerRemoveDownload"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
<a href="#" class="hover-button" title="$T('removeNZB-Files')" aria-label="$T('removeNZB-Files')" data-bind="click: parent.triggerRemoveDownload"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -186,25 +187,25 @@
|
||||
<form class="multioperations-selector" data-bind="visible: (hasQueue() && queue.isMultiEditing())" style="display: none;">
|
||||
<div class="add-nzb-inputbox add-nzb-inputbox-small add-nzb-inputbox-options">
|
||||
<label for="multiedit-checkall-queue">
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall-queue" title="$T('Glitter-checkAll')" data-bind="click: queue.checkAllJobs" data-tooltip="true" data-placement="top" />
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall-queue" title="$T('Glitter-checkAll')" aria-label="$T('Glitter-checkAll')" data-bind="click: queue.checkAllJobs" data-tooltip="true" data-placement="top" />
|
||||
</label>
|
||||
<a href="#" class="hover-button" title="$T('removeNZB-Files')" data-bind="click: queue.doMultiDelete" data-tooltip="true" data-placement="top">
|
||||
<a href="#" class="hover-button" title="$T('removeNZB-Files')" aria-label="$T('Glitter-removeSelected')" data-bind="click: queue.doMultiDelete" data-tooltip="true" data-placement="top">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox add-nzb-inputbox-small">
|
||||
<label for="multiedit-play" data-bind="event: { mousedown: queue.handleMultiEditStatusMouseDown }">
|
||||
<input type="radio" name="multiedit-status" value="resume" id="multiedit-play" data-bind="event: { change: queue.doMultiEditUpdate }" />
|
||||
<input type="radio" name="multiedit-status" value="resume" id="multiedit-play" aria-label="$T('link-resume')" data-bind="event: { change: queue.doMultiEditUpdate }" />
|
||||
<span class="glyphicon glyphicon-play" title="$T('link-resume')" data-tooltip="true" data-placement="top"></span>
|
||||
</label>
|
||||
<label for="multiedit-pause" data-bind="event: { mousedown: queue.handleMultiEditStatusMouseDown }">
|
||||
<input type="radio" name="multiedit-status" value="pause" id="multiedit-pause" data-bind="event: { change: queue.doMultiEditUpdate }" />
|
||||
<input type="radio" name="multiedit-status" value="pause" id="multiedit-pause" aria-label="$T('link-pause')" data-bind="event: { change: queue.doMultiEditUpdate }" />
|
||||
<span class="glyphicon glyphicon-pause" title="$T('link-pause')" data-tooltip="true" data-placement="top"></span>
|
||||
</label>
|
||||
<a href="#" class="hover-button" title="$T('Glitter-top')" data-bind="click: queue.doMultiMoveToTop" data-tooltip="true" data-placement="top">
|
||||
<a href="#" class="hover-button" title="$T('Glitter-top')" aria-label="$T('Glitter-top')" data-bind="click: queue.doMultiMoveToTop" data-tooltip="true" data-placement="top">
|
||||
<span class="glyphicon glyphicon-chevron-up"></span>
|
||||
</a>
|
||||
<a href="#" class="hover-button" title="$T('Glitter-bottom')" data-bind="click: queue.doMultiMoveToBottom" data-tooltip="true" data-placement="top">
|
||||
<a href="#" class="hover-button" title="$T('Glitter-bottom')" aria-label="$T('Glitter-bottom')" data-bind="click: queue.doMultiMoveToBottom" data-tooltip="true" data-placement="top">
|
||||
<span class="glyphicon glyphicon-chevron-down"></span>
|
||||
</a>
|
||||
<span class="label label-default" data-bind="text: queue.multiEditItems().length">0</span>
|
||||
@@ -212,33 +213,38 @@
|
||||
<div class="add-nzb-inputbox-clear"></div>
|
||||
<div class="add-nzb-inputbox" data-tooltip="true" data-placement="top" title="$T('category')">
|
||||
<span class="glyphicon glyphicon-tag"></span>
|
||||
<select name="Category" class="form-control" data-bind="options: queue.categoriesList, optionsValue: 'catValue', optionsText: 'catText', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
<select name="Category" class="form-control" aria-label="$T('category')" data-bind="options: queue.categoriesList, optionsValue: 'catValue', optionsText: 'catText', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" data-tooltip="true" data-placement="top" title="$T('priority')">
|
||||
<span class="glyphicon glyphicon-sort-by-attributes-alt"></span>
|
||||
<select name="Priority" class="form-control" data-bind="options: queue.priorityOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
<select name="Priority" class="form-control" aria-label="$T('priority')" data-bind="options: queue.priorityOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" data-tooltip="true" data-placement="top" title="$T('swtag-pp')">
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
<select name="Processing" class="form-control" data-bind="options: queue.processingOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
<select name="Processing" class="form-control" aria-label="$T('swtag-pp')" data-bind="options: queue.processingOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" data-tooltip="true" data-placement="top" title="$T('eoq-scripts')">
|
||||
<span class="glyphicon glyphicon-flash"></span>
|
||||
<select name="Post-processing" class="form-control" data-bind="options: queue.scriptsList, optionsValue: 'scriptValue', optionsText: 'scriptText', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
<select name="Post-processing" class="form-control" aria-label="$T('eoq-scripts')" data-bind="options: queue.scriptsList, optionsValue: 'scriptValue', optionsText: 'scriptText', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</form>
|
||||
|
||||
<div class="input-group search-box" data-bind="visible: queue.hasQueueSearch" style="display: none;">
|
||||
<input type="text" class="form-control" placeholder="$T('Glitter-search')" required data-bind="textInput: queue.searchTerm, event: { keydown: queue.clearSearchTerm }" />
|
||||
<a data-bind="event: { mousedown: queue.clearSearchTerm }">
|
||||
<input type="text" class="form-control" placeholder="$T('Glitter-search')" aria-label="$T('Glitter-search')" required data-bind="textInput: queue.searchTerm, event: { keydown: queue.clearSearchTerm }" />
|
||||
<a href="#" data-tooltip="true" data-html="true" data-placement="right" title="$T('Glitter-searchExplain')" data-bind="click: queue.clearSearchTerm, attr: { 'aria-label': queue.searchTerm() ? '$T('Glitter-clearSearch')' : '$T('Glitter-search')' }">
|
||||
<span class="glyphicon" data-bind="css: { 'glyphicon-search' : !queue.searchTerm(), 'glyphicon-remove' : queue.searchTerm() }"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="pagination" data-bind="foreach: queue.pagination.allpages, visible: queue.pagination.hasPagination" style="display: none;">
|
||||
<li data-bind="css: { active: isCurrent, disabled: isDots }, click: onclick">
|
||||
<span data-bind="text: page"></span>
|
||||
<li data-bind="css: { active: isCurrent, disabled: isDots }">
|
||||
<!-- ko ifnot: isDots -->
|
||||
<a href="#" data-bind="text: page, click: onclick, attr: { 'aria-current': isCurrent ? 'page' : null }"></a>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: isDots -->
|
||||
<span aria-hidden="true" data-bind="text: page"></span>
|
||||
<!-- /ko -->
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
<!--#set $active_lang=$active_lang.replace('_', '-').lower()#-->
|
||||
<html lang="$active_lang" <!--#if $rtl#-->dir="rtl"<!--#end if#--> id="sabnzbd" data-bind="filedrop: { overlaySelector: '.main-filedrop', onFileDrop: addNZBFromFile }">
|
||||
<html lang="$active_lang" <!--#if $rtl#-->dir="rtl"<!--#end if#--> id="sabnzbd" data-color-scheme="$color_scheme" data-bind="filedrop: { overlaySelector: '.main-filedrop', onFileDrop: addNZBFromFile }">
|
||||
<head>
|
||||
<!--
|
||||
Glitter V2
|
||||
@@ -25,25 +25,23 @@
|
||||
<meta name="msapplication-navbutton-color" content="#000000" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="./staticcfg/ico/apple-touch-icon-76x76-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="./staticcfg/ico/apple-touch-icon-120x120-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="./staticcfg/ico/apple-touch-icon-152x152-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="./staticcfg/ico/apple-touch-icon-180x180-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="./staticcfg/ico/android-192x192.png" />
|
||||
<link rel="mask-icon" href="./staticcfg/ico/safari-pinned-tab.svg" color="#383F45">
|
||||
<link rel="shortcut icon" type="image/ico" href="./staticcfg/ico/favicon.ico?v=$cache_buster" data-bind="attr: { 'href': SABIcon }" />
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="$url('staticcfg/ico/apple-touch-icon-76x76-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="$url('staticcfg/ico/apple-touch-icon-120x120-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="$url('staticcfg/ico/apple-touch-icon-152x152-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="$url('staticcfg/ico/apple-touch-icon-180x180-precomposed.png', v=$cache_buster)" />
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="$url('staticcfg/ico/android-192x192.png', v=$cache_buster)" />
|
||||
<link rel="mask-icon" href="$url('staticcfg/ico/safari-pinned-tab.svg', v=$cache_buster)" color="#383F45">
|
||||
<link rel="shortcut icon" type="image/ico" href="$url('staticcfg/ico/favicon.ico', v=$cache_buster)" data-bind="attr: { 'href': SABIcon }" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="./static/bootstrap/css/bootstrap.min.css?v=$cache_buster" />
|
||||
<link rel="stylesheet" type="text/css" href="./static/stylesheets/glitter.css?v=$cache_buster" />
|
||||
<link rel="stylesheet" type="text/css" href="./static/stylesheets/glitter.mobile.css?v=$cache_buster" media="all and (max-width: 768px)" />
|
||||
<!--#if $color_scheme not in ('Light', '') #-->
|
||||
<link rel="stylesheet" type="text/css" href="./static/stylesheets/colorschemes/${color_scheme}.css?v=$cache_buster"/>
|
||||
<!--#end if#-->
|
||||
<link rel="stylesheet" type="text/css" href="$url('static/bootstrap/css/bootstrap.min.css', v=$cache_buster)" />
|
||||
<link rel="stylesheet" type="text/css" href="$url('static/stylesheets/glitter.css', v=$cache_buster)" />
|
||||
<link rel="stylesheet" type="text/css" href="$url('static/stylesheets/glitter.mobile.css', v=$cache_buster)" media="all and (max-width: 768px)" />
|
||||
|
||||
<!-- Make translations available in scripts -->
|
||||
<script type="text/javascript">
|
||||
var apiKey = "$apikey";
|
||||
var csrfToken = "$csrf_token";
|
||||
var displayLang = "$active_lang";
|
||||
var dateScriptUrl = "$url('static/javascripts/date.min.js', v=$cache_buster)";
|
||||
var sabSpeedHistory = [$bytespersec_list];
|
||||
var newRelease = "$new_release";
|
||||
var newReleaseUrl = "$new_rel_url";
|
||||
@@ -76,7 +74,14 @@
|
||||
glitterTranslate.defaultText = "$T('default')";
|
||||
glitterTranslate.noneText = "$T('None')";
|
||||
glitterTranslate.moreText = "$T('Glitter-more')";
|
||||
|
||||
glitterTranslate.column = [];
|
||||
glitterTranslate.column['category'] = "$T('category')";
|
||||
glitterTranslate.column['priority'] = "$T('priority')";
|
||||
glitterTranslate.column['processing'] = "$T('swtag-pp')";
|
||||
glitterTranslate.column['scripts'] = "$T('eoq-scripts')";
|
||||
glitterTranslate.column['age'] = "$T('nzo-age')";
|
||||
glitterTranslate.column['size'] = "$T('size')";
|
||||
glitterTranslate.column['speed'] = "$T('Glitter-speed')";
|
||||
glitterTranslate.status = [];
|
||||
glitterTranslate.status['DirectUnpack'] = "$T('opt-direct_unpack')";
|
||||
glitterTranslate.status['Completed'] = "$T('post-Completed')";
|
||||
@@ -117,21 +122,27 @@
|
||||
glitterTranslate.priority['Stop'] = "$T('pr-stop')";
|
||||
</script>
|
||||
|
||||
<!-- Inclusion is faster than external scripts. We load momentJS locale separately so failure won't break anything -->
|
||||
<script type="text/javascript" src="$url('staticcfg/js/jquery-3.7.1.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/js/jquery-ui.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/jquery.peity.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/jquery.hotkeys.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/moment-2.26.0.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/knockout-3.5.1.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/knockout-extensions.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/search-query-parser.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/bootstrap/js/bootstrap.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/glitter.basic.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/glitter.main.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/glitter.queue.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/glitter.history.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/glitter.filelist.pagination.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript">
|
||||
<!--#include raw $webdir + "/static/javascripts/jquery-3.5.1.min.js"#-->
|
||||
<!--#include raw $webdir + "/static/javascripts/jquery-ui.min.js"#-->
|
||||
<!--#include raw $webdir + "/static/javascripts/jquery.peity.min.js"#-->
|
||||
<!--#include raw $webdir + "/static/javascripts/jquery.hotkeys.min.js"#-->
|
||||
<!--#include raw $webdir + "/static/javascripts/moment-2.26.0.min.js"#-->
|
||||
<!--#include raw $webdir + "/static/javascripts/knockout-3.5.1.min.js"#-->
|
||||
<!--#include raw $webdir + "/static/javascripts/knockout-extensions.js"#-->
|
||||
<!--#include raw $webdir + "/static/javascripts/search-query-parser.js"#-->
|
||||
<!--#include raw $webdir + "/static/bootstrap/js/bootstrap.min.js"#-->
|
||||
<!--#include $webdir + "/static/javascripts/glitter.js"#-->
|
||||
jQuery(function () {
|
||||
ko.applyBindings(new ViewModel(), document.getElementById("sabnzbd"));
|
||||
});
|
||||
</script>
|
||||
<!--#if active_lang != 'en'#-->
|
||||
<script type="text/javascript" src="./static/javascripts/momentjs_locale/${active_lang}.js?v=$cache_buster"></script>
|
||||
<script type="text/javascript" src="$url('static/javascripts/momentjs_locale/' + $active_lang + '.js', v=$cache_buster)"></script>
|
||||
<!--#end if#-->
|
||||
</head>
|
||||
<body>
|
||||
|
||||
File diff suppressed because one or more lines are too long.
@@ -23,15 +23,17 @@ if(isMobile) {
|
||||
});
|
||||
}
|
||||
|
||||
$.ajaxSetup({
|
||||
headers: { "X-SABnzbd-CSRF": csrfToken }
|
||||
});
|
||||
|
||||
// Basic API-call
|
||||
function callAPI(data, timeout = 10000) {
|
||||
// Fill basis var's
|
||||
data.output = "json";
|
||||
data.apikey = apiKey;
|
||||
var ajaxQuery = $.ajax({
|
||||
url: "./api",
|
||||
type: "GET",
|
||||
cache: false,
|
||||
type: "POST",
|
||||
data: data,
|
||||
timeout: timeout
|
||||
});
|
||||
|
||||
@@ -150,7 +150,6 @@ function HistoryListModel(parent) {
|
||||
data.append("nzbfile", $(form.nzbFile)[0].files[0]);
|
||||
data.append("value", $('#modal-retry-job input[name="retry_job_id"]').val());
|
||||
data.append("password", $('#retry_job_password').val());
|
||||
data.append("apikey", apiKey);
|
||||
|
||||
// Add
|
||||
$.ajax({
|
||||
@@ -184,15 +183,15 @@ function HistoryListModel(parent) {
|
||||
// Clear searchterm
|
||||
self.clearSearchTerm = function(data, event) {
|
||||
// Was it escape key or click?
|
||||
if(event.type === 'mousedown' || (event.keyCode && event.keyCode === 27)) {
|
||||
if(event.type === 'click' || (event.keyCode && event.keyCode === 27)) {
|
||||
// Set the loader so it doesn't flicker and then switch
|
||||
self.isLoading(true)
|
||||
self.searchTerm('');
|
||||
}
|
||||
// Was it click and the field is empty? Then we focus on the field
|
||||
if(event.type === 'mousedown' && self.searchTerm() === '') {
|
||||
if(event.type === 'click' && self.searchTerm() === '') {
|
||||
$(event.target).parents('.search-box').find('input[type="text"]').focus()
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
// Need to return true to allow typing
|
||||
return true;
|
||||
@@ -638,14 +637,13 @@ function HistoryModel(parent, data) {
|
||||
$(this).hide()
|
||||
} else {
|
||||
// Info in modal
|
||||
$('#history-script-log .modal-body').load($(this).attr('href'), function(result) {
|
||||
// Set title and then remove it
|
||||
$('#history-script-log .modal-title').text($(this).find("h3").text())
|
||||
$(this).find("h3, title").remove()
|
||||
$('#history-script-log').modal('show');
|
||||
$('#history-script-log .modal-body pre').load($(this).attr('href'), function(result) {
|
||||
var modal = $('#history-script-log');
|
||||
modal.find('.modal-title').text(self.historyStatus.name());
|
||||
modal.modal('show');
|
||||
});
|
||||
}
|
||||
return false;
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
/******
|
||||
|
||||
Glitter V1
|
||||
By Safihre (2015) - safihre@sabnzbd.org
|
||||
|
||||
Code extended from Shiny-template
|
||||
Code examples used from Knockstrap-template
|
||||
|
||||
The setup is hierarchical, 1 main ViewModel that contains:
|
||||
- ViewModel
|
||||
- QueueListModel
|
||||
- paginationModel
|
||||
- QueueModel (item 1)
|
||||
- QueueModel (item 2)
|
||||
- ...
|
||||
- QueueModel (item n+1)
|
||||
- HistoryListModel
|
||||
- paginationModel
|
||||
- HistoryModel (item 1)
|
||||
- HistoryModel (item 2)
|
||||
- ...
|
||||
- HistoryModel (item n+1)
|
||||
- Fileslisting
|
||||
- FileslistingModel (file 1)
|
||||
- FileslistingModel (file 2)
|
||||
- ...
|
||||
- FileslistingModel (file n+1)
|
||||
|
||||
ViewModel also contains all the code executed on document ready and
|
||||
functions responsible for the status information, adding NZB, etc.
|
||||
The QueueModel/HistoryModel's get added to the list-models when
|
||||
jobs are added or on switching of pages (using paginationModel).
|
||||
Once added only the properties that changed during a refresh
|
||||
get updated. In the history all the detailed information is only
|
||||
updated when created and when the user clicks on a detail.
|
||||
The Fileslisting is only populated and updated when it is opened
|
||||
for one of the QueueModel's.
|
||||
|
||||
******/
|
||||
|
||||
#include raw $webdir + "/static/javascripts/glitter.basic.js"#
|
||||
|
||||
/**
|
||||
GLITTER CODE
|
||||
**/
|
||||
\$(function() {
|
||||
'use strict';
|
||||
|
||||
#include raw $webdir + "/static/javascripts/glitter.main.js"#
|
||||
#include raw $webdir + "/static/javascripts/glitter.queue.js"#
|
||||
#include raw $webdir + "/static/javascripts/glitter.history.js"#
|
||||
#include raw $webdir + "/static/javascripts/glitter.filelist.pagination.js"#
|
||||
|
||||
// GO!!!
|
||||
ko.applyBindings(new ViewModel(), document.getElementById("sabnzbd"));
|
||||
});
|
||||
@@ -425,7 +425,7 @@ function ViewModel() {
|
||||
self.openCustomPauseTime = function() {
|
||||
// Was it loaded already?
|
||||
if (!Date.i18n) {
|
||||
jQuery.getScript('./static/javascripts/date.min.js').then(function() {
|
||||
jQuery.getScript(dateScriptUrl).then(function() {
|
||||
// After loading we start again
|
||||
self.openCustomPauseTime()
|
||||
})
|
||||
@@ -702,7 +702,6 @@ function ViewModel() {
|
||||
data.append("priority", $('#modal-add-nzb select[name="Priority"]').val())
|
||||
data.append("pp", $('#modal-add-nzb select[name="Processing"]').val())
|
||||
data.append("script", $('#modal-add-nzb select[name="Post-processing"]').val())
|
||||
data.append("apikey", apiKey);
|
||||
|
||||
// Add this one
|
||||
$.ajax({
|
||||
@@ -1224,7 +1223,7 @@ function ViewModel() {
|
||||
}
|
||||
});
|
||||
$(document).bind('keydown', 'c', function(e) {
|
||||
window.location.href = './config/';
|
||||
window.location.href = './config';
|
||||
});
|
||||
$(document).bind('keydown', 's', function(e) {
|
||||
// Update the data
|
||||
@@ -1236,41 +1235,41 @@ function ViewModel() {
|
||||
});
|
||||
$(document).bind('keydown', 'shift+left', function(e) {
|
||||
if($("body").hasClass("container-tabbed")) {
|
||||
$('#history-tab.active > ul.pagination li.active').prev().click();
|
||||
$('#queue-tab.active > ul.pagination li.active').prev().click();
|
||||
$('#history-tab.active > ul.pagination li.active').prev().children('a').click();
|
||||
$('#queue-tab.active > ul.pagination li.active').prev().children('a').click();
|
||||
} else {
|
||||
$('#history-tab > ul.pagination li.active').prev().click();
|
||||
$('#queue-tab > ul.pagination li.active').prev().click();
|
||||
$('#history-tab > ul.pagination li.active').prev().children('a').click();
|
||||
$('#queue-tab > ul.pagination li.active').prev().children('a').click();
|
||||
}
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).bind('keydown', 'shift+right', function(e) {
|
||||
if($("body").hasClass("container-tabbed")) {
|
||||
$('#history-tab.active > ul.pagination li.active').next().click();
|
||||
$('#queue-tab.active > ul.pagination li.active').next().click();
|
||||
$('#history-tab.active > ul.pagination li.active').next().children('a').click();
|
||||
$('#queue-tab.active > ul.pagination li.active').next().children('a').click();
|
||||
} else {
|
||||
$('#history-tab > ul.pagination li.active').next().click();
|
||||
$('#queue-tab > ul.pagination li.active').next().click();
|
||||
$('#history-tab > ul.pagination li.active').next().children('a').click();
|
||||
$('#queue-tab > ul.pagination li.active').next().children('a').click();
|
||||
}
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).bind('keydown', 'shift+up', function(e) {
|
||||
if($("body").hasClass("container-tabbed")) {
|
||||
$('#history-tab.active > ul.pagination li').first().click();
|
||||
$('#queue-tab.active > ul.pagination li').first().click();
|
||||
$('#history-tab.active > ul.pagination li').first().children('a').click();
|
||||
$('#queue-tab.active > ul.pagination li').first().children('a').click();
|
||||
} else {
|
||||
$('#history-tab > ul.pagination li').first().click();
|
||||
$('#queue-tab > ul.pagination li').first().click();
|
||||
$('#history-tab > ul.pagination li').first().children('a').click();
|
||||
$('#queue-tab > ul.pagination li').first().children('a').click();
|
||||
}
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).bind('keydown', 'shift+down', function(e) {
|
||||
if($("body").hasClass("container-tabbed")) {
|
||||
$('#history-tab.active > ul.pagination li').last().click();
|
||||
$('#queue-tab.active > ul.pagination li').last().click();
|
||||
$('#history-tab.active > ul.pagination li').last().children('a').click();
|
||||
$('#queue-tab.active > ul.pagination li').last().children('a').click();
|
||||
} else {
|
||||
$('#history-tab > ul.pagination li').last().click();
|
||||
$('#queue-tab > ul.pagination li').last().click();
|
||||
$('#history-tab > ul.pagination li').last().children('a').click();
|
||||
$('#queue-tab > ul.pagination li').last().children('a').click();
|
||||
}
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
@@ -204,14 +204,14 @@ function QueueListModel(parent) {
|
||||
// Clear searchterm
|
||||
self.clearSearchTerm = function(data, event) {
|
||||
// Was it escape key or click?
|
||||
if(event.type === 'mousedown' || (event.keyCode && event.keyCode === 27)) {
|
||||
if(event.type === 'click' || (event.keyCode && event.keyCode === 27)) {
|
||||
self.isLoading(true)
|
||||
self.searchTerm('');
|
||||
}
|
||||
// Was it click and the field is empty? Then we focus on the field
|
||||
if(event.type === 'mousedown' && self.searchTerm() === '') {
|
||||
if(event.type === 'click' && self.searchTerm() === '') {
|
||||
$(event.target).parents('.search-box').find('input[type="text"]').focus()
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
// Need to return true to allow typing
|
||||
return true;
|
||||
@@ -228,6 +228,10 @@ function QueueListModel(parent) {
|
||||
sort = 'remaining';
|
||||
dir = 'asc';
|
||||
break;
|
||||
case 'sortRemainingBytesAsc':
|
||||
sort = 'remaining_bytes';
|
||||
dir = 'asc';
|
||||
break;
|
||||
case 'sortAgeAsc':
|
||||
sort = 'avg_age';
|
||||
dir = 'desc';
|
||||
|
||||
File diff suppressed because one or more lines are too long.
File diff suppressed because one or more lines are too long.
@@ -1 +1 @@
|
||||
@import url('Night.css') screen and (prefers-color-scheme: dark);
|
||||
/* Placeholder — themes live in glitter.css; this file only populates the scheme dropdown */
|
||||
@@ -1,163 +1 @@
|
||||
/*
|
||||
* Night theme — overrides :root color tokens defined in glitter.css.
|
||||
* Only structural/behavioural rules that can't be expressed as color tokens remain below.
|
||||
*/
|
||||
:root {
|
||||
--clr-page-bg: black;
|
||||
--clr-surface: #727272;
|
||||
--clr-surface-alt: #444444;
|
||||
--clr-surface-hover: #666666;
|
||||
--clr-border: #808080;
|
||||
--clr-border-subtle: #252525;
|
||||
--clr-text: #EBEBEB;
|
||||
--clr-text-muted: #D6D6D6;
|
||||
--clr-error: #F95151;
|
||||
--clr-input-bg: #555555;
|
||||
--clr-input-border: #252525;
|
||||
--clr-dropdown-bg: #727272;
|
||||
--clr-modal-bg: #727272;
|
||||
--clr-table-bg: #555555;
|
||||
--clr-table-row-alt: #444444;
|
||||
--clr-progress-track: #DADADA;
|
||||
--clr-toggle-inactive: #666666;
|
||||
}
|
||||
|
||||
/* Links and glyphicons inside links */
|
||||
a, a:active,
|
||||
a:hover,
|
||||
a:focus,
|
||||
.btn:not(.btn-danger):active,
|
||||
.hover-button.glyphicon-play,
|
||||
.hover-button.glyphicon-stop,
|
||||
legend,
|
||||
#modal-options legend label,
|
||||
#modal-options legend a,
|
||||
#modal-item-files .item-files-table .progress small,
|
||||
.text-muted{
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Navbar needs structural dark-mode overrides */
|
||||
nav {
|
||||
background-color: #444444 !important;
|
||||
border: 0 !important;
|
||||
border-radius: var(--radius-lg);
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
nav .btn {
|
||||
background-color: #E4E4E4;
|
||||
border-color: #5D5D5D !important;
|
||||
}
|
||||
|
||||
nav .btn:active {
|
||||
/* Restore bootstrap default */
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
nav {
|
||||
background-color: black !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Collapse dropdown loses border in dark mode */
|
||||
.navbar-collapse.in .dropdown-menu {
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* Feedback slider needs explicit dark bg (not a card, not an input) */
|
||||
#feedback-slider {
|
||||
background-color: var(--clr-input-bg);
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Elements that must be white regardless of --clr-text */
|
||||
.main-restarting,
|
||||
.main-filedrop {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
/* Tab controls — dark-mode specific colours */
|
||||
.max-speed-input-clear,
|
||||
.max-speed-input-clear:hover,
|
||||
.fileControls a {
|
||||
color: black;
|
||||
}
|
||||
|
||||
.nav-tabs>li.active>a,
|
||||
.nav-tabs>li.active>a:focus,
|
||||
.nav-tabs>li.active>a:hover,
|
||||
.nav-tabs>li>a:hover,
|
||||
.nav-tabs>li>a:focus {
|
||||
background-color: #ddd;
|
||||
color: #555 !important;
|
||||
box-shadow: 0px -1px 1px 1px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
/* Opacity */
|
||||
.hover-button,
|
||||
.fileControls a:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.form-control[disabled] {
|
||||
opacity: 0.65;
|
||||
}
|
||||
|
||||
/* Focus ring uses white glow in dark mode */
|
||||
.form-control:focus,
|
||||
input[type="submit"]:focus,
|
||||
button:focus {
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
outline: initial;
|
||||
}
|
||||
|
||||
/* Processing animation bars */
|
||||
.processing-download > div {
|
||||
background-color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Legend / divider borders (dark-specific value, not matching any token) */
|
||||
legend,
|
||||
hr {
|
||||
border-color: #C6C6C6 !important;
|
||||
}
|
||||
|
||||
/* Slider handle */
|
||||
.ui-slider .ui-slider-handle {
|
||||
background-color: #969696;
|
||||
border-color: #969696;
|
||||
}
|
||||
|
||||
/* Compact layout progress shadow boost */
|
||||
.container-compact .progress,
|
||||
.container-compact .queue .progress-bar {
|
||||
box-shadow: inset 1px 0px 1px rgba(0, 0, 0, 1);
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
border-top: 1px solid rgb(131 131 131);
|
||||
}
|
||||
|
||||
/* Help table transparent bg override */
|
||||
#modal-help table td,
|
||||
#modal-help table {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* File items table structural */
|
||||
#modal-item-files .item-files-table td {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
#modal-item-files .item-files-table {
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
||||
/* History/queue tab switcher */
|
||||
.history-queue-swicher .nav-tabs>li>a,
|
||||
.history-queue-swicher .nav-tabs>li.active>a {
|
||||
border-bottom: none;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
/* Placeholder — themes live in glitter.css; this file only populates the scheme dropdown */
|
||||
@@ -1,28 +1,40 @@
|
||||
:root {
|
||||
/* Follow the OS by default (Auto); forced by data-color-scheme below */
|
||||
color-scheme: light dark;
|
||||
|
||||
/* Border radius scale */
|
||||
--radius-sm: 4px; /* small elements: progress bars */
|
||||
--radius-md: 6px; /* search bar, multi-edit toolbar, file controls */
|
||||
--radius-lg: 8px; /* cards, modals, notification box */
|
||||
|
||||
/* Color palette — light mode defaults; override in Night.css */
|
||||
--clr-page-bg: #E4E4E4; /* body/page background */
|
||||
--clr-surface: #FFFFFF; /* cards, modals, notification box */
|
||||
--clr-surface-alt: #F9F9F9; /* multi-edit toolbar, alternating rows */
|
||||
--clr-surface-hover: #f6f6f6; /* hovered rows, inputs, buttons */
|
||||
--clr-border: rgba(0,0,0,0.12); /* card outlines */
|
||||
--clr-border-subtle: #EBEBEB; /* table row separators, inner borders */
|
||||
--clr-text: #333333; /* primary body text */
|
||||
--clr-text-muted: #888888; /* secondary / dimmed text */
|
||||
--clr-error: red; /* errors, failed downloads */
|
||||
--clr-input-bg: #FFFFFF; /* form inputs, buttons */
|
||||
--clr-input-border: #CCCCCC; /* input/search borders */
|
||||
--clr-dropdown-bg: #FFFFFF; /* dropdown menus */
|
||||
--clr-modal-bg: #FFFFFF; /* modal body/footer */
|
||||
--clr-table-bg: #F5F5F5; /* table and even-row background */
|
||||
--clr-table-row-alt: #FDFDFD; /* odd striped row background */
|
||||
--clr-progress-track: #f6f6f6; /* progress bar track */
|
||||
--clr-toggle-active: #f9ca33; /* toggle knob track: on */
|
||||
--clr-toggle-inactive: #aaaaaa; /* toggle knob track: off */
|
||||
/* Color palette — light-dark(light value, dark value) */
|
||||
--clr-page-bg: light-dark(#E4E4E4, black); /* body/page background */
|
||||
--clr-surface: light-dark(#FFFFFF, #727272); /* cards, modals, notification box */
|
||||
--clr-surface-alt: light-dark(#F9F9F9, #444444); /* multi-edit toolbar, alternating rows */
|
||||
--clr-surface-hover: light-dark(#f6f6f6, #666666); /* hovered rows, inputs, buttons */
|
||||
--clr-border: light-dark(rgba(0,0,0,0.12), #808080); /* card outlines */
|
||||
--clr-border-subtle: light-dark(#EBEBEB, #252525); /* table row separators, inner borders */
|
||||
--clr-text: light-dark(#333333, #EBEBEB); /* primary body text */
|
||||
--clr-text-muted: light-dark(#888888, #D6D6D6); /* secondary / dimmed text */
|
||||
--clr-error: light-dark(red, #F95151); /* errors, failed downloads */
|
||||
--clr-input-bg: light-dark(#FFFFFF, #555555); /* form inputs, buttons */
|
||||
--clr-input-border: light-dark(#CCCCCC, #252525); /* input/search borders */
|
||||
--clr-dropdown-bg: light-dark(#FFFFFF, #727272); /* dropdown menus */
|
||||
--clr-modal-bg: light-dark(#FFFFFF, #727272); /* modal body/footer */
|
||||
--clr-table-bg: light-dark(#F5F5F5, #555555); /* table and even-row background */
|
||||
--clr-table-row-alt: light-dark(#FDFDFD, #444444); /* odd striped row background */
|
||||
--clr-progress-track: light-dark(#f6f6f6, #DADADA); /* progress bar track */
|
||||
--clr-toggle-active: #f9ca33; /* toggle knob track: on */
|
||||
--clr-toggle-inactive: light-dark(#aaaaaa, #666666); /* toggle knob track: off */
|
||||
}
|
||||
|
||||
/* The server renders the configured scheme into this attribute (main.tmpl); empty/unknown = Auto */
|
||||
html[data-color-scheme="light" i] {
|
||||
color-scheme: light;
|
||||
}
|
||||
|
||||
html[data-color-scheme="night" i] {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
body {
|
||||
@@ -40,12 +52,16 @@ h2 {
|
||||
|
||||
.container {
|
||||
margin-top: 1em;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.main-navbar {
|
||||
margin-bottom: 2px;
|
||||
z-index: 999;
|
||||
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.navbar.main-navbar {
|
||||
@@ -97,6 +113,25 @@ h2 {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.dropdown-menu > li > form > button {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 5px 15px 5px 25px;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
text-align: left;
|
||||
font-weight: normal;
|
||||
line-height: 1.42857143;
|
||||
color: var(--clr-text);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.dropdown-menu > li > form > button {
|
||||
padding: 3px 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-nav>li>a {
|
||||
color: white !important;
|
||||
opacity: 0.7;
|
||||
@@ -165,7 +200,6 @@ li.dropdown {
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
|
||||
.max-speed-input-clear {
|
||||
position: absolute;
|
||||
top: 16px;
|
||||
@@ -215,8 +249,8 @@ li.dropdown {
|
||||
height: 24px;
|
||||
top: -7px;
|
||||
cursor: ew-resize;
|
||||
background-color: #767676;
|
||||
border: 1px solid white;
|
||||
background-color: light-dark(#767676, #969696);
|
||||
border: 1px solid light-dark(white, #969696);
|
||||
margin-left: -.25em;
|
||||
}
|
||||
|
||||
@@ -323,7 +357,7 @@ li.dropdown {
|
||||
.main-restarting.in {
|
||||
text-align: center;
|
||||
opacity: 0.9;
|
||||
color: black;
|
||||
color: light-dark(black, white);
|
||||
z-index: 2000;
|
||||
padding: 15% 1em 1em;
|
||||
}
|
||||
@@ -364,7 +398,8 @@ li.dropdown {
|
||||
width: 400px;
|
||||
top: 40px;
|
||||
left: -370px;
|
||||
background: white;
|
||||
background: light-dark(white, #555555);
|
||||
color: var(--clr-text);
|
||||
border: 1px solid rgba(0,0,0,.2);
|
||||
border-radius: var(--radius-md);
|
||||
transition-duration: 0.3s;
|
||||
@@ -685,8 +720,15 @@ td.name .row-wrap-text {
|
||||
height: 1.5em;
|
||||
}
|
||||
|
||||
.queue-table td.name .name-options,
|
||||
.queue-table td.name:hover .queue-item-password {
|
||||
.queue-table td.name .name-options {
|
||||
display: block;
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.queue-table td.name:hover .queue-item-password,
|
||||
.queue-table td.name:focus-within .queue-item-password {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@@ -704,20 +746,27 @@ td.name .row-wrap-text {
|
||||
max-width: calc(100% - 75px);
|
||||
}
|
||||
|
||||
.queue-table td.name:hover .row-wrap-text {
|
||||
.queue-table td.name:hover .row-wrap-text,
|
||||
.queue-table td.name:focus-within .row-wrap-text {
|
||||
max-width: calc(100% - 125px);
|
||||
/* Change for each size! */
|
||||
}
|
||||
|
||||
.queue-table td.name:hover .direct-unpack {
|
||||
.queue-table td.name:hover .direct-unpack,
|
||||
.queue-table td.name:focus-within .direct-unpack {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.queue-table td.name:hover .name-options {
|
||||
.queue-table td.name:hover .name-options,
|
||||
.queue-table td.name:focus-within .name-options {
|
||||
display: block;
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
position: static;
|
||||
}
|
||||
|
||||
.queue-table td.name:hover .glyphicon-folder-open {
|
||||
.queue-table td.name:hover .glyphicon-folder-open,
|
||||
.queue-table td.name:focus-within .glyphicon-folder-open {
|
||||
width: 1.5em;
|
||||
margin-left: 1px;
|
||||
}
|
||||
@@ -1182,11 +1231,8 @@ tr.queue-item>td:first-child>a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.mark-completed-link {
|
||||
font-weight: bold !important;
|
||||
color: #28a745 !important;
|
||||
text-decoration: underline;
|
||||
margin-left: 10px;
|
||||
.mark-completed-btn {
|
||||
margin: 4px 0;
|
||||
}
|
||||
|
||||
.history-status-hidden {
|
||||
@@ -1301,7 +1347,7 @@ tr.queue-item>td:first-child>a {
|
||||
}
|
||||
|
||||
.processing-download > div {
|
||||
background-color: #333;
|
||||
background-color: var(--clr-text);
|
||||
height: 100%;
|
||||
width: 2px;
|
||||
float: left;
|
||||
@@ -1967,8 +2013,34 @@ input[name="nzbURL"] {
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
/* Tighten the gaps between the main containers */
|
||||
.container-compact .main-navbar {
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.container-compact:not(.container-tabbed) .main-content {
|
||||
padding-top: 0;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.container-compact .queue,
|
||||
.container-compact .history,
|
||||
.container-compact .queue-messages {
|
||||
padding: 4px 6px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.container-compact .queue-footer,
|
||||
.container-compact .history-footer {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.container-compact .table {
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.container-full-width .container {
|
||||
width: calc(100% - 60px);
|
||||
width: calc(100% - 40px);
|
||||
}
|
||||
|
||||
/***
|
||||
@@ -2281,15 +2353,25 @@ legend {
|
||||
.pagination li.active a,
|
||||
.pagination li.active span,
|
||||
.pagination li.active a:hover,
|
||||
.pagination li.active span:hover {
|
||||
background-color: var(--clr-table-row-alt);
|
||||
.pagination li.active span:hover,
|
||||
.pagination>li>span:hover {
|
||||
background-color: var(--clr-surface-hover);
|
||||
border: 1px solid var(--clr-border-subtle);
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
.pagination>li>a:focus,
|
||||
.pagination>li>a:hover {
|
||||
color: var(--clr-text);
|
||||
background-color: var(--clr-surface-hover);
|
||||
border-color: var(--clr-border-subtle);
|
||||
}
|
||||
|
||||
.pagination>li>a,
|
||||
.pagination>li>span,
|
||||
.pagination>li>span:hover {
|
||||
.pagination>.disabled>span,
|
||||
.pagination>.disabled>span:focus,
|
||||
.pagination>.disabled>span:hover {
|
||||
color: var(--clr-text);
|
||||
background-color: var(--clr-input-bg);
|
||||
border-color: var(--clr-border-subtle);
|
||||
@@ -2358,6 +2440,7 @@ legend {
|
||||
.modal-footer {
|
||||
margin-top: 0;
|
||||
background-color: var(--clr-modal-bg);
|
||||
border-top: 1px solid light-dark(#e5e5e5, rgb(131, 131, 131));
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
@@ -2375,11 +2458,26 @@ legend {
|
||||
}
|
||||
|
||||
legend {
|
||||
border-color: var(--clr-text-muted);
|
||||
border-color: light-dark(#888888, #C6C6C6);
|
||||
}
|
||||
|
||||
hr {
|
||||
border-color: var(--clr-text-muted);
|
||||
border-color: light-dark(#888888, #C6C6C6);
|
||||
}
|
||||
|
||||
/* Bootstrap's `a:focus { outline: 5px auto -webkit-focus-ring-color }` renders as a
|
||||
heavy dark ring once color-scheme is declared. Replace it with a subtle themed
|
||||
outline shown only for keyboard focus, matching the toggle-switch focus style. */
|
||||
a:focus {
|
||||
outline: none !important;
|
||||
}
|
||||
a:focus-visible {
|
||||
outline: 2px solid var(--clr-toggle-active) !important;
|
||||
outline-offset: 2px !important;
|
||||
}
|
||||
|
||||
input[type="checkbox"] {
|
||||
color-scheme: light;
|
||||
}
|
||||
|
||||
/***
|
||||
@@ -2395,7 +2493,9 @@ hr {
|
||||
}
|
||||
|
||||
.dropdown-menu>li>a:hover,
|
||||
.dropdown-menu>li>a:focus {
|
||||
.dropdown-menu>li>a:focus,
|
||||
.dropdown-menu>li>form>button:hover,
|
||||
.dropdown-menu>li>form>button:focus {
|
||||
background-color: var(--clr-surface-hover);
|
||||
color: var(--clr-text);
|
||||
}
|
||||
@@ -2491,4 +2591,226 @@ h2 small {
|
||||
::placeholder {
|
||||
color: var(--clr-text) !important;
|
||||
opacity: 0.5 !important;
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
Dark-mode structural rules
|
||||
Colors live in the light-dark() tokens above; these are the rules that cannot
|
||||
be expressed as a color value. The two blocks below MUST stay identical:
|
||||
the first applies when Night is forced, the second when the OS is dark and Light is not forced.
|
||||
***/
|
||||
html[data-color-scheme="night" i] {
|
||||
/* Links and glyphicons inside links */
|
||||
a, a:active,
|
||||
a:hover,
|
||||
a:focus,
|
||||
.btn:not(.btn-danger):active,
|
||||
.hover-button.glyphicon-play,
|
||||
.hover-button.glyphicon-stop,
|
||||
legend,
|
||||
#modal-options legend label,
|
||||
#modal-options legend a,
|
||||
#modal-item-files .item-files-table .progress small,
|
||||
.text-muted {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Navbar needs structural dark-mode overrides */
|
||||
nav {
|
||||
background-color: #444444 !important;
|
||||
border-radius: var(--radius-lg);
|
||||
}
|
||||
|
||||
nav .btn {
|
||||
background-color: #E4E4E4;
|
||||
border-color: #5D5D5D !important;
|
||||
}
|
||||
|
||||
nav .btn:active {
|
||||
/* Restore bootstrap default */
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
nav {
|
||||
background-color: black !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Collapse dropdown loses border in dark mode */
|
||||
.navbar-collapse.in .dropdown-menu {
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* Tab controls — dark-mode specific colours */
|
||||
.max-speed-input-clear,
|
||||
.max-speed-input-clear:hover,
|
||||
.fileControls a {
|
||||
color: black;
|
||||
}
|
||||
|
||||
.nav-tabs>li.active>a,
|
||||
.nav-tabs>li.active>a:focus,
|
||||
.nav-tabs>li.active>a:hover,
|
||||
.nav-tabs>li>a:hover,
|
||||
.nav-tabs>li>a:focus {
|
||||
background-color: #ddd;
|
||||
color: #555 !important;
|
||||
box-shadow: 0px -1px 1px 1px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
/* Opacity */
|
||||
.hover-button,
|
||||
.fileControls a:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.form-control[disabled] {
|
||||
opacity: 0.65;
|
||||
}
|
||||
|
||||
/* Focus ring uses white glow in dark mode */
|
||||
.form-control:focus,
|
||||
input[type="submit"]:focus,
|
||||
button:focus {
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
outline: initial;
|
||||
}
|
||||
|
||||
/* Compact layout progress shadow boost */
|
||||
.container-compact .progress,
|
||||
.container-compact .queue .progress-bar {
|
||||
box-shadow: inset 1px 0px 1px rgba(0, 0, 0, 1);
|
||||
}
|
||||
|
||||
/* Help table transparent bg override */
|
||||
#modal-help table td,
|
||||
#modal-help table {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* File items table structural */
|
||||
#modal-item-files .item-files-table td {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
#modal-item-files .item-files-table {
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
||||
/* History/queue tab switcher */
|
||||
.history-queue-swicher .nav-tabs>li>a,
|
||||
.history-queue-swicher .nav-tabs>li.active>a {
|
||||
border-bottom: none;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
html:not([data-color-scheme="light" i]) {
|
||||
/* Links and glyphicons inside links */
|
||||
a, a:active,
|
||||
a:hover,
|
||||
a:focus,
|
||||
.btn:not(.btn-danger):active,
|
||||
.hover-button.glyphicon-play,
|
||||
.hover-button.glyphicon-stop,
|
||||
legend,
|
||||
#modal-options legend label,
|
||||
#modal-options legend a,
|
||||
#modal-item-files .item-files-table .progress small,
|
||||
.text-muted {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* Navbar needs structural dark-mode overrides */
|
||||
nav {
|
||||
background-color: #444444 !important;
|
||||
border-radius: var(--radius-lg);
|
||||
}
|
||||
|
||||
nav .btn {
|
||||
background-color: #E4E4E4;
|
||||
border-color: #5D5D5D !important;
|
||||
}
|
||||
|
||||
nav .btn:active {
|
||||
/* Restore bootstrap default */
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
nav {
|
||||
background-color: black !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Collapse dropdown loses border in dark mode */
|
||||
.navbar-collapse.in .dropdown-menu {
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* Tab controls — dark-mode specific colours */
|
||||
.max-speed-input-clear,
|
||||
.max-speed-input-clear:hover,
|
||||
.fileControls a {
|
||||
color: black;
|
||||
}
|
||||
|
||||
.nav-tabs>li.active>a,
|
||||
.nav-tabs>li.active>a:focus,
|
||||
.nav-tabs>li.active>a:hover,
|
||||
.nav-tabs>li>a:hover,
|
||||
.nav-tabs>li>a:focus {
|
||||
background-color: #ddd;
|
||||
color: #555 !important;
|
||||
box-shadow: 0px -1px 1px 1px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
/* Opacity */
|
||||
.hover-button,
|
||||
.fileControls a:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.form-control[disabled] {
|
||||
opacity: 0.65;
|
||||
}
|
||||
|
||||
/* Focus ring uses white glow in dark mode */
|
||||
.form-control:focus,
|
||||
input[type="submit"]:focus,
|
||||
button:focus {
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
outline: initial;
|
||||
}
|
||||
|
||||
/* Compact layout progress shadow boost */
|
||||
.container-compact .progress,
|
||||
.container-compact .queue .progress-bar {
|
||||
box-shadow: inset 1px 0px 1px rgba(0, 0, 0, 1);
|
||||
}
|
||||
|
||||
/* Help table transparent bg override */
|
||||
#modal-help table td,
|
||||
#modal-help table {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* File items table structural */
|
||||
#modal-item-files .item-files-table td {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
#modal-item-files .item-files-table {
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
||||
/* History/queue tab switcher */
|
||||
.history-queue-swicher .nav-tabs>li>a,
|
||||
.history-queue-swicher .nav-tabs>li.active>a {
|
||||
border-bottom: none;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -149,6 +149,9 @@ tr.queue-item>td:first-child>a {
|
||||
|
||||
.queue-table td.name .name-options {
|
||||
display: inline-block;
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
position: static;
|
||||
}
|
||||
|
||||
.queue-table td.name .name-options small {
|
||||
@@ -272,4 +275,4 @@ tr.queue-item>td:first-child>a {
|
||||
#modal-item-files .form-group {
|
||||
clear: left;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,19 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="$active_lang">
|
||||
<html lang="$active_lang" data-color-scheme="$color_scheme">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>$T('wizard-quickstart')</title>
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/bootstrap/css/bootstrap.min.css?v=$cache_buster"/>
|
||||
<link rel="stylesheet" type="text/css" href="static/style.css?v=$cache_buster"/>
|
||||
<!--#if $color_scheme not in ('Light', '') #-->
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/css/${color_scheme}.css?v=$cache_buster"/>
|
||||
<!--#end if#-->
|
||||
<link rel="shortcut icon" href="../staticcfg/ico/favicon.ico?v=$cache_buster" />
|
||||
<script type="text/javascript" src="../staticcfg/js/jquery-3.5.1.min.js?v=$cache_buster"></script>
|
||||
<script type="text/javascript" src="../staticcfg/bootstrap/js/bootstrap.min.js?v=$cache_buster"></script>
|
||||
<link rel="stylesheet" type="text/css" href="$url('staticcfg/bootstrap/css/bootstrap.min.css', v=$cache_buster)"/>
|
||||
<link rel="stylesheet" type="text/css" href="$url('wizard/static/style.css', v=$cache_buster)"/>
|
||||
<link rel="shortcut icon" href="$url('staticcfg/ico/favicon.ico', v=$cache_buster)" />
|
||||
<script type="text/javascript" src="$url('staticcfg/js/jquery-3.7.1.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript" src="$url('staticcfg/bootstrap/js/bootstrap.min.js', v=$cache_buster)"></script>
|
||||
<script type="text/javascript">
|
||||
var csrfToken = "$csrf_token";
|
||||
$.ajaxSetup({
|
||||
headers: { "X-SABnzbd-CSRF": csrfToken }
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="logo">
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
<form action="./one" method="post">
|
||||
<form action="$url('wizard/one')" method="post">
|
||||
<input type="hidden" name="csrf_token" value="$csrf_token" />
|
||||
<div class="container">
|
||||
<div id="inner">
|
||||
<div id="content" class="bigger">
|
||||
@@ -27,10 +28,10 @@
|
||||
<hr />
|
||||
<div class="row">
|
||||
<div class="col-md-4 text-center">
|
||||
<a class="btn btn-danger" href="../shutdown/?apikey=$apikey&pid=$pid"><span class="glyphicon glyphicon-remove"></span> $T('wizard-exit')</a>
|
||||
<button class="btn btn-danger" type="submit" form="shutdown-form"><span class="glyphicon glyphicon-remove"></span> $T('wizard-exit')</button>
|
||||
</div>
|
||||
<div class="col-md-4 text-center">
|
||||
<a class="btn btn-default" href="../config/general/#config_backup_file"><span class="glyphicon glyphicon-open"></span> $T('restore-backup')</a>
|
||||
<a class="btn btn-default" href="$url('config/general#config_backup_file')"><span class="glyphicon glyphicon-open"></span> $T('restore-backup')</a>
|
||||
</div>
|
||||
<div class="col-md-4 text-center">
|
||||
<button class="btn btn-default">$T('wizard-start') <span class="glyphicon glyphicon-chevron-right"></span></button>
|
||||
@@ -39,4 +40,5 @@
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<form id="shutdown-form" method="post" action="$url('shutdown')"><input type="hidden" name="csrf_token" value="$csrf_token" /></form>
|
||||
<!--#include $webdir + "/inc_bottom.tmpl"#-->
|
||||
@@ -1,5 +1,6 @@
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
<form action="./two" method="post" autocomplete="off">
|
||||
<form action="$url('wizard/two')" method="post" autocomplete="off">
|
||||
<input type="hidden" name="csrf_token" value="$csrf_token" />
|
||||
<div class="container">
|
||||
<div id="inner">
|
||||
<div id="content" class="bigger">
|
||||
@@ -89,10 +90,10 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<button id="serverTest" class="btn btn-default" data-toggle="tooltip" data-placement="left"><span class="glyphicon glyphicon-sort"></span> $T('wizard-button-testServer')</button>
|
||||
<button id="serverTest" class="btn btn-default" data-toggle="tooltip" data-placement="left" aria-busy="false"><span class="glyphicon glyphicon-sort" aria-hidden="true"></span> $T('wizard-button-testServer')</button>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<div id="serverResponse" class="well well-sm">$T('wizard-server-text')</div>
|
||||
<div id="serverResponse" class="well well-sm" role="status" aria-live="polite" aria-atomic="true">$T('wizard-server-text')</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -102,12 +103,12 @@
|
||||
<iframe style="float: right; width: 325px; height: 325px;" frameborder="0" src="https://sabnzbd.org/wizard#$active_lang"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="apikey" value="$apikey" />
|
||||
<input type="hidden" name="enable" value="1">
|
||||
</div>
|
||||
<hr />
|
||||
<div class="row">
|
||||
<div class="col-xs-4 text-center">
|
||||
<a class="btn btn-default" href="./index"><span class="glyphicon glyphicon-chevron-left"></span> $T('wizard-previous')</a>
|
||||
<a class="btn btn-default" href="$url('wizard')"><span class="glyphicon glyphicon-chevron-left"></span> $T('wizard-previous')</a>
|
||||
</div>
|
||||
<div class="col-xs-4 text-center">
|
||||
</div>
|
||||
|
||||
@@ -41,22 +41,25 @@ $(document).ready(function() {
|
||||
return false;
|
||||
}
|
||||
|
||||
$('#serverTest').attr('aria-busy', 'true');
|
||||
$('#serverResponse').html(txtChecking);
|
||||
$.getJSON(
|
||||
"../api?mode=config&name=test_server&output=json",
|
||||
$("form").serialize(),
|
||||
function(result) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: "../api?mode=config&name=test_server&output=json",
|
||||
data: $("form").serialize(),
|
||||
success: function(result) {
|
||||
if (result.value.result) {
|
||||
r = '<span class="success"><span class="glyphicon glyphicon-ok"></span> ' + result.value.message + '</span>';
|
||||
r = '<span class="success"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span> ' + result.value.message + '</span>';
|
||||
setTestResult(true);
|
||||
} else {
|
||||
r = '<span class="failed"><span class="glyphicon glyphicon-minus-sign"></span> ' + result.value.message + '</span>';
|
||||
r = '<span class="failed"><span class="glyphicon glyphicon-minus-sign" aria-hidden="true"></span> ' + result.value.message + '</span>';
|
||||
setTestResult(false);
|
||||
}
|
||||
r = r.replace('https://sabnzbd.org/certificate-errors', '<a href="https://sabnzbd.org/certificate-errors" class="failed" target="_blank">https://sabnzbd.org/certificate-errors</a>')
|
||||
$('#serverResponse').html(r);
|
||||
$('#serverTest').attr('aria-busy', 'false');
|
||||
}
|
||||
);
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
@@ -88,4 +91,4 @@ $(document).ready(function() {
|
||||
event.preventDefault();
|
||||
}
|
||||
})
|
||||
});
|
||||
});
|
||||
@@ -4,17 +4,31 @@
|
||||
--radius-md: 6px; /* search bar, multi-edit toolbar, file controls */
|
||||
--radius-lg: 8px; /* cards, modals, notification box */
|
||||
|
||||
/* Color palette — light mode defaults; overridden by Night.css */
|
||||
--clr-page-bg: #E4E4E4;
|
||||
--clr-surface: #FFFFFF;
|
||||
--clr-surface-alt: #F5F5F5;
|
||||
--clr-surface-hover: #E4E4E4;
|
||||
--clr-border: rgba(0, 0, 0, 0.2);
|
||||
--clr-text: #000000;
|
||||
--clr-text-muted: #777777;
|
||||
--clr-link: #555555;
|
||||
/* Follow the OS by default (Auto); forced by data-color-scheme below */
|
||||
color-scheme: light dark;
|
||||
|
||||
/* Color palette — light-dark(light value, dark value) */
|
||||
--clr-page-bg: light-dark(#E4E4E4, black);
|
||||
--clr-surface: light-dark(#FFFFFF, #303030);
|
||||
--clr-surface-alt: light-dark(#F5F5F5, #444444);
|
||||
--clr-surface-hover: light-dark(#E4E4E4, #666666);
|
||||
--clr-border: light-dark(rgba(0, 0, 0, 0.2), #555555);
|
||||
--clr-text: light-dark(#000000, #EBEBEB);
|
||||
--clr-text-muted: light-dark(#777777, #c7c7c7);
|
||||
--clr-link: light-dark(#555555, #63a7e1);
|
||||
--clr-input-bg: light-dark(#FFFFFF, #555555);
|
||||
--clr-input-border: light-dark(#cccccc, #252525);
|
||||
--clr-toggle-active: #f9ca33;
|
||||
--clr-toggle-inactive: #aaaaaa;
|
||||
--clr-toggle-inactive: light-dark(#aaaaaa, #666666);
|
||||
}
|
||||
|
||||
/* The server renders the configured scheme into this attribute; empty/unknown = Auto */
|
||||
html[data-color-scheme="light" i] {
|
||||
color-scheme: light;
|
||||
}
|
||||
|
||||
html[data-color-scheme="night" i] {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
body {
|
||||
@@ -82,10 +96,10 @@ a[target="_blank"] {
|
||||
color: #00cc22;
|
||||
}
|
||||
.failed {
|
||||
color: red !important;
|
||||
color: light-dark(red, #ff3333) !important;
|
||||
}
|
||||
#rightGreyText {
|
||||
color: #ccc;
|
||||
color: light-dark(#cccccc, #c7c7c7);
|
||||
width: 100%;
|
||||
text-align: right;
|
||||
padding-top: 3px;
|
||||
@@ -199,7 +213,25 @@ a:visited,
|
||||
}
|
||||
.btn {
|
||||
min-width: 150px;
|
||||
box-shadow: 1px 0px 1px rgba(0,0,0,.1);
|
||||
box-shadow: 1px 0px 1px light-dark(rgba(0,0,0,.1), rgba(255,255,255,.1));
|
||||
}
|
||||
|
||||
.btn-default,
|
||||
input[type="text"],
|
||||
input[type="number"],
|
||||
input[type="email"],
|
||||
input[type="password"],
|
||||
input[type="url"],
|
||||
select,
|
||||
textarea {
|
||||
background-color: var(--clr-input-bg);
|
||||
color: var(--clr-text);
|
||||
border-color: var(--clr-input-border);
|
||||
}
|
||||
|
||||
::placeholder {
|
||||
color: var(--clr-text) !important;
|
||||
opacity: 0.5;
|
||||
}
|
||||
.btn .glyphicon,
|
||||
a .glyphicon {
|
||||
@@ -207,4 +239,74 @@ a .glyphicon {
|
||||
}
|
||||
small {
|
||||
color: var(--clr-text-muted);
|
||||
}
|
||||
|
||||
/***
|
||||
Dark-mode structural rules
|
||||
Colors live in the light-dark() tokens above; these are the rules that cannot
|
||||
be expressed as a color value. The two blocks below MUST stay identical:
|
||||
the first applies when Night is forced, the second when the OS is dark and Light is not forced.
|
||||
***/
|
||||
html[data-color-scheme="night" i] {
|
||||
.language:hover,
|
||||
.quoteBlock,
|
||||
.server-disabled,
|
||||
#serverResponse {
|
||||
background-color: var(--clr-surface-alt) !important;
|
||||
color: var(--clr-text) !important;
|
||||
}
|
||||
|
||||
.quoteBlock a,
|
||||
.help-block,
|
||||
a.wizard-advanced-settings {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
#inner {
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
/* Focus / active border */
|
||||
.btn-default:focus,
|
||||
.form-control:focus,
|
||||
input:focus,
|
||||
textarea:focus,
|
||||
select:focus {
|
||||
border-color: #707070 !important;
|
||||
outline: initial !important;
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
html:not([data-color-scheme="light" i]) {
|
||||
.language:hover,
|
||||
.quoteBlock,
|
||||
.server-disabled,
|
||||
#serverResponse {
|
||||
background-color: var(--clr-surface-alt) !important;
|
||||
color: var(--clr-text) !important;
|
||||
}
|
||||
|
||||
.quoteBlock a,
|
||||
.help-block,
|
||||
a.wizard-advanced-settings {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
#inner {
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
/* Focus / active border */
|
||||
.btn-default:focus,
|
||||
.form-control:focus,
|
||||
input:focus,
|
||||
textarea:focus,
|
||||
select:focus {
|
||||
border-color: #707070 !important;
|
||||
outline: initial !important;
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,8 +12,8 @@
|
||||
<p>$T('wizard-tip4')</p>
|
||||
|
||||
<div class="quoteBlock">
|
||||
<!--#for $url in $urls#-->
|
||||
<a href="$url">$url</a><br />
|
||||
<!--#for $access_url in $urls#-->
|
||||
<a href="$access_url">$access_url</a><br />
|
||||
<!--#end for#-->
|
||||
</div>
|
||||
|
||||
@@ -22,13 +22,13 @@
|
||||
<p><strong>$T('opt-complete_dir')</strong></p>
|
||||
<div class="quoteBlock">
|
||||
$complete_dir
|
||||
<a href="${access_url}/config/folders#complete_dir" class="indented"><span class="glyphicon glyphicon-cog"></span></a>
|
||||
<a href="$url('config/folders#complete_dir')" class="indented"><span class="glyphicon glyphicon-cog"></span></a>
|
||||
</div>
|
||||
|
||||
<p><strong>$T('opt-download_dir')</strong></p>
|
||||
<div class="quoteBlock">
|
||||
$download_dir
|
||||
<a href="${access_url}/config/folders#complete_dir" class="indented"><span class="glyphicon glyphicon-cog"></span></a>
|
||||
<a href="$url('config/folders#complete_dir')" class="indented"><span class="glyphicon glyphicon-cog"></span></a>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
@@ -38,8 +38,7 @@
|
||||
<hr />
|
||||
<div class="row">
|
||||
<div class="col-xs-12 text-center">
|
||||
<input type="hidden" name="apikey" id="apikey" value="$apikey"/>
|
||||
<a class="btn btn-success" href="$access_url">$T('wizard-goto') <span class="glyphicon glyphicon-chevron-right"></span></a>
|
||||
<a class="btn btn-success" href="$url()">$T('wizard-goto') <span class="glyphicon glyphicon-chevron-right"></span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -4,7 +4,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: team@sabnzbd.org\n"
|
||||
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
|
||||
|
||||
+93
-1
@@ -1,10 +1,14 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2026 by The SABnzbd-Team (sabnzbd.org)
|
||||
#
|
||||
# Translators:
|
||||
# Iamanro, 2026
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Iamanro, 2026\n"
|
||||
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -56,6 +60,47 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Výchozí e-mailová šablona pro SABnzbd\n"
|
||||
"## Toto je šablona Cheetah\n"
|
||||
"## Dokumentace: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Nové řádky a mezery jsou významné!\n"
|
||||
"##\n"
|
||||
"## Toto jsou hlavičky e-mailu\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd <!--#if $status then \"dokončil\" else \"nedokončil\" #--> úlohu $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Poté následuje tělo zprávy, prázdný řádek je povinný!\n"
|
||||
"\n"
|
||||
"Dobrý den,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd stáhl \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd nedokázal stáhnout \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Dokončeno v $end_time\n"
|
||||
"Staženo $size\n"
|
||||
"\n"
|
||||
"Výsledky úlohy:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Fáze $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
"$result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Výstup z uživatelského skriptu \"$script\" (Návratový kód = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Užijte si to!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Je nám líto!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
@@ -85,6 +130,31 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## E-mailová šablona RSS pro SABnzbd\n"
|
||||
"## Toto je šablona Cheetah\n"
|
||||
"## Dokumentace: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Nové řádky a mezery jsou významné!\n"
|
||||
"##\n"
|
||||
"## Toto jsou hlavičky e-mailu\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd přidal $amount úloh do fronty\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Poté následuje tělo zprávy, prázdný řádek je povinný!\n"
|
||||
"\n"
|
||||
"Dobrý den,\n"
|
||||
"\n"
|
||||
"SABnzbd přidal $amount úloh do fronty.\n"
|
||||
"Pocházejí z RSS kanálu \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
"$job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Na shledanou\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
@@ -111,3 +181,25 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## E-mailová šablona SABnzbd pro neúspěšné načtení URL\n"
|
||||
"## Toto je šablona Cheetah\n"
|
||||
"## Dokumentace: https://sabnzbd.org/wiki/extra/email-templates\n"
|
||||
"##\n"
|
||||
"## Nové řádky a mezery jsou významné!\n"
|
||||
"##\n"
|
||||
"## Toto jsou hlavičky e-mailu\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd nedokázal získat NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Poté následuje tělo zprávy, prázdný řádek je povinný!\n"
|
||||
"\n"
|
||||
"Dobrý den,\n"
|
||||
"\n"
|
||||
"SABnzbd nedokázal získat NZB z $url.\n"
|
||||
"Chybová zpráva byla: $msg\n"
|
||||
"\n"
|
||||
"Na shledanou\n"
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2025\n"
|
||||
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Fred L <88com88@gmail.com>, 2025\n"
|
||||
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2025\n"
|
||||
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Italian (https://app.transifex.com/sabnzbd/teams/111101/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2025\n"
|
||||
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Last-Translator: mauron, 2025\n"
|
||||
"Language-Team: Turkish (https://app.transifex.com/sabnzbd/teams/111101/tr/)\n"
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
|
||||
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
||||
+170
-98
@@ -4,7 +4,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: team@sabnzbd.org\n"
|
||||
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
|
||||
@@ -105,7 +105,6 @@ msgstr ""
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr ""
|
||||
@@ -219,12 +218,9 @@ msgstr ""
|
||||
msgid "Connection Successful!"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgid "Server %s took %d ms to respond. On high-latency connections, increasing 'Articles per request' to a value between 5 and 10 can improve download speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
@@ -242,12 +238,12 @@ msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -476,7 +472,7 @@ msgid "Resuming"
|
||||
msgstr ""
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
|
||||
@@ -514,15 +510,7 @@ msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Login from too many different IP addresses to server %s [%s] - https://sabnzbd.org/multiple-adresses"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
@@ -686,11 +674,16 @@ msgid "Direct Write mode has been disabled because %s does not support sparse fi
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgid "API Key incorrect, Use the api key from Config->General in your 3rd party program:"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -698,16 +691,16 @@ msgid "API Key missing, please enter the api key from Config->General into your
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "API Key incorrect, Use the api key from Config->General in your 3rd party program:"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr ""
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
@@ -768,14 +761,6 @@ msgstr ""
|
||||
msgid "Category folder cannot be a subfolder of the Temporary Download Folder."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid "Internet Bandwidth of IPv4 significantly different from IPv6: %f MB/s versus %f MB/s"
|
||||
@@ -786,7 +771,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr ""
|
||||
|
||||
@@ -815,7 +800,7 @@ msgid "Limit Speed"
|
||||
msgstr ""
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr ""
|
||||
|
||||
@@ -825,7 +810,7 @@ msgid "min"
|
||||
msgstr ""
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr ""
|
||||
|
||||
@@ -834,7 +819,7 @@ msgstr ""
|
||||
msgid "Scan watched folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr ""
|
||||
|
||||
@@ -846,16 +831,16 @@ msgstr ""
|
||||
msgid "Incomplete Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr ""
|
||||
|
||||
@@ -923,6 +908,21 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "%s in local_ranges is not a private network, list it in xff_trusted_hosts to trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1205,6 +1205,11 @@ msgstr ""
|
||||
msgid "Queue finished"
|
||||
msgstr ""
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr ""
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1216,7 +1221,7 @@ msgid "Open folder"
|
||||
msgstr ""
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr ""
|
||||
|
||||
@@ -1354,7 +1359,7 @@ msgstr ""
|
||||
msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr ""
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr ""
|
||||
@@ -1439,6 +1444,21 @@ msgstr ""
|
||||
msgid "If you get this error message again, please try a different number.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "To keep using the low port, put a reverse proxy in front of SABnzbd instead.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1501,19 +1521,15 @@ msgstr ""
|
||||
msgid "Unable to bind to port %s on %s. Some other software uses the port or SABnzbd is already running."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1642,6 +1658,10 @@ msgstr ""
|
||||
msgid "Removing %s failed"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1695,45 +1715,7 @@ msgstr ""
|
||||
msgid "Incompatible feed"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr ""
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr ""
|
||||
|
||||
@@ -1741,6 +1723,44 @@ msgstr ""
|
||||
msgid "Add NZB"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr ""
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr ""
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -1761,6 +1781,22 @@ msgstr ""
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received while verify_xff_header is off, turn it on and list %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "Forwarded is not supported, configure the proxy to send X-Forwarded-For instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2076,6 +2112,10 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr ""
|
||||
@@ -2631,10 +2671,6 @@ msgstr ""
|
||||
msgid "Web Interface Theme"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr ""
|
||||
@@ -3218,7 +3254,7 @@ msgid "Automatically sort jobs in the queue when a new job is added."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgid "The queue will resort every 30 seconds if % downloaded or Remaining Size is selected."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3339,7 +3375,7 @@ msgid "Naming"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
|
||||
#. Reset day of the download quota
|
||||
@@ -4216,6 +4252,14 @@ msgstr ""
|
||||
msgid "Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr ""
|
||||
@@ -4224,6 +4268,14 @@ msgstr ""
|
||||
msgid "Temp Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Search by name, or refine with filters <code>cat:</code>, <code>status:</code> and <code>priority:</code> (Queue). For example: <code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr ""
|
||||
@@ -4232,6 +4284,10 @@ msgstr ""
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr ""
|
||||
@@ -4264,6 +4320,10 @@ msgstr ""
|
||||
msgid "WARNING:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr ""
|
||||
@@ -4300,6 +4360,14 @@ msgstr ""
|
||||
msgid "Extra history columns"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr ""
|
||||
@@ -4460,6 +4528,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr ""
|
||||
|
||||
+1007
-677
File diff suppressed because it is too large.
Load diff
+200
-115
@@ -6,7 +6,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2026\n"
|
||||
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"
|
||||
@@ -120,7 +120,6 @@ msgstr "SABnzbd %s startet"
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd lukning udført"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr "Signal %s modtaget, gemmer og lukker..."
|
||||
@@ -263,14 +262,13 @@ msgstr "Serveren kræver brugernavn og adgangskode."
|
||||
msgid "Connection Successful!"
|
||||
msgstr "Tilslutning lykkedes!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Godkendelse mislykkedes, kontrollere brugernavn/adgangskode."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgid ""
|
||||
"Server %s took %d ms to respond. On high-latency connections, increasing "
|
||||
"'Articles per request' to a value between 5 and 10 can improve download "
|
||||
"speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
"Alt for mange forbindelser, pause en download eller forsøg igen senere"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
@@ -287,12 +285,12 @@ msgid "Default"
|
||||
msgstr "Standard"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr "Disken er fuld! Pauser"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr "Diskfejl ved oprettelse af fil %s"
|
||||
|
||||
@@ -551,8 +549,8 @@ msgid "Resuming"
|
||||
msgstr "Genoptager"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "Sat på pause"
|
||||
|
||||
@@ -592,20 +590,8 @@ msgid "Fatal error in Downloader"
|
||||
msgstr "Alvorlig fejl i Downloader"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Alt for mange forbindelser til serveren %s [%s]"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr ""
|
||||
"Login fra for mange forskellige IP-adresser til server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgstr "Det lykkedes ikke at logge på serveren %s [%s]"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
@@ -791,14 +777,23 @@ msgstr ""
|
||||
"sparse-filer. For detaljer og mulige løsninger, se: "
|
||||
"https://sabnzbd.org/wiki/advanced/direct-write"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Afviste forbindelse fra:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr "Afviste forbindelse med værtsnavn \"%s\" fra:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr ""
|
||||
"Forkert API-nøgle, anvend api-nøglen fra Konfiguration->Generelt i dit "
|
||||
"tredjepartsprogram:"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Afviste forbindelse fra:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key missing, please enter the api key from Config->General into your 3rd"
|
||||
@@ -808,21 +803,17 @@ msgstr ""
|
||||
"tredjepartsprogram:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr ""
|
||||
"Forkert API-nøgle, anvend api-nøglen fra Konfiguration->Generelt i dit "
|
||||
"tredjepartsprogram:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr "Bruger logget på webgrænsefladen"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Bruger logget ind"
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Godkendelse mislykkedes, kontrollere brugernavn/adgangskode."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
@@ -884,14 +875,6 @@ msgid ""
|
||||
msgstr ""
|
||||
"Kategorimappe kan ikke være en undermappe i den midlertidige download-mappe."
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "FEJL:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr "Tilbage"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid ""
|
||||
@@ -905,7 +888,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr "Advarsler"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Inaktiv"
|
||||
@@ -936,8 +919,8 @@ msgstr "Hastighedsbegrænsning"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
@@ -947,8 +930,8 @@ msgid "min"
|
||||
msgstr "minut"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Genoptag"
|
||||
|
||||
@@ -957,7 +940,7 @@ msgstr "Genoptag"
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Scan overvåget mappe"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Læs alle RSS feeds"
|
||||
|
||||
@@ -969,17 +952,17 @@ msgstr "Færdig mappe"
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Ufuldstændig mappe"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Fejlfinding"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Genstart"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Genstart uden login"
|
||||
|
||||
@@ -1054,6 +1037,23 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr "Kunne ikke læse adgangskodefilen %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"%s in local_ranges is not a private network, list it in xff_trusted_hosts to"
|
||||
" trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1352,6 +1352,11 @@ msgstr "Jobbet misllykedes"
|
||||
msgid "Queue finished"
|
||||
msgstr "Kø færdig"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Bruger logget ind"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1363,7 +1368,7 @@ msgid "Open folder"
|
||||
msgstr "Åbn mappe"
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Åben færdig mappe"
|
||||
|
||||
@@ -1502,7 +1507,8 @@ msgstr "PROPAGATING %s min"
|
||||
msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr "Hentede i %s med et gennemsnit på %sB/s"
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details
|
||||
#. page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr "Alder"
|
||||
@@ -1594,6 +1600,23 @@ msgid ""
|
||||
"If you get this error message again, please try a different number.<br>"
|
||||
msgstr "Hvis du får denne fejlmeddelelse igen, prøv et andet portnummer.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"To keep using the low port, put a reverse proxy in front of SABnzbd "
|
||||
"instead.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1682,19 +1705,16 @@ msgstr ""
|
||||
"Kan ikke binde til port %s på %s. En anden software bruger porten eller "
|
||||
"SABnzbd kører allerede."
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
msgstr "Kan ikke starte browseren, sandsynligvis ikke fundet"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr "Adgang nægtet"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr "Fejl %s: Du skal angive et gyldigt brugernavn og adgangskode."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1823,6 +1843,10 @@ msgstr "Ingen matchende tidligere rar-fil for %s"
|
||||
msgid "Removing %s failed"
|
||||
msgstr "Fjernelse af %s mislykkedes"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1876,45 +1900,7 @@ msgstr "RSS Feed %s er tom"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Inkompatibel feed"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr "Vis grænseflade"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pause i"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pause 5 minutter"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pause 15 minutter"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pause 30 minutter"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pause 1 time"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pause 3 timer"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pause 6 timer"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Luk ned"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr "Tilbageværende"
|
||||
|
||||
@@ -1922,6 +1908,44 @@ msgstr "Tilbageværende"
|
||||
msgid "Add NZB"
|
||||
msgstr "Tilføj NZB"
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr "Vis grænseflade"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Luk ned"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pause i"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pause 5 minutter"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pause 15 minutter"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pause 30 minutter"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pause 1 time"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pause 3 timer"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pause 6 timer"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -1942,6 +1966,26 @@ msgstr "Tidsplan for ikke-eksisterende server %s"
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Forsøger at sætte status på ikke eksisterende server %s"
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"X-Forwarded-For received while verify_xff_header is off, turn it on and list"
|
||||
" %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"Forwarded is not supported, configure the proxy to send X-Forwarded-For "
|
||||
"instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2257,6 +2301,10 @@ msgstr "Vært"
|
||||
msgid "Cancel"
|
||||
msgstr "Annullér"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr "Log in"
|
||||
@@ -2843,10 +2891,6 @@ msgstr "Port som SABnzbd ska lytte på."
|
||||
msgid "Web Interface Theme"
|
||||
msgstr "Tema for webgrænseflade"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr "Vælg et tema."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr "SABnzbd brugernavn"
|
||||
@@ -3549,8 +3593,10 @@ msgid "Automatically sort jobs in the queue when a new job is added."
|
||||
msgstr "Sortér automatisk jobs i køen, når et nyt job tilføjes."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgstr "Køen vil sortere hver 30. sekund, hvis % downloadet er valgt."
|
||||
msgid ""
|
||||
"The queue will resort every 30 seconds if % downloaded or Remaining Size is "
|
||||
"selected."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Propagation delay"
|
||||
@@ -3689,8 +3735,8 @@ msgid "Naming"
|
||||
msgstr "Navngivning"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgstr "Hvor meget der kan downloades i denne måned (K/M/G)"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
|
||||
#. Reset day of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4674,6 +4720,14 @@ msgstr "Slet"
|
||||
msgid "Filename"
|
||||
msgstr "Filnavn"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Ledig diskplads"
|
||||
@@ -4682,6 +4736,17 @@ msgstr "Ledig diskplads"
|
||||
msgid "Temp Folder"
|
||||
msgstr "Midlertidig mappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Search by name, or refine with filters <code>cat:</code>, "
|
||||
"<code>status:</code> and <code>priority:</code> (Queue). For example: "
|
||||
"<code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr "Multi-operationer"
|
||||
@@ -4690,6 +4755,10 @@ msgstr "Multi-operationer"
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr "Hold Skiftetasten nede for at vælge et område"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr "Tjek alle"
|
||||
@@ -4722,6 +4791,10 @@ msgstr "I tilfælde af SABnzbd genstart vil denne skærm forsvinde automatisk!"
|
||||
msgid "WARNING:"
|
||||
msgstr "ADVARSEL:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "FEJL:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr "Hent"
|
||||
@@ -4758,6 +4831,14 @@ msgstr "Ekstra køkolonner"
|
||||
msgid "Extra history columns"
|
||||
msgstr "Ekstra historikkolonner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr "Fremgang"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Handlinger"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr "side"
|
||||
@@ -4934,6 +5015,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr "Sortér efter % downloadet <small>Mest→Mindst</small>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sortere efter alder <small>Ældst→Nyeste</small>"
|
||||
|
||||
+200
-119
@@ -20,7 +20,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2026\n"
|
||||
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"
|
||||
@@ -138,7 +138,6 @@ msgstr "SABnzbd %s gestartet"
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd wurde beendet"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr "Signal %s erkannt. Wird gespeichert und beendet …"
|
||||
@@ -288,16 +287,13 @@ msgstr "Server benötigt ein Benutzername und ein Passwort."
|
||||
msgid "Connection Successful!"
|
||||
msgstr "Verbindung erfolgreich hergestellt!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr ""
|
||||
"Authentifizierung fehlgeschlagen. Überprüfen Sie Benutzername und Passwort."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgid ""
|
||||
"Server %s took %d ms to respond. On high-latency connections, increasing "
|
||||
"'Articles per request' to a value between 5 and 10 can improve download "
|
||||
"speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
"Zu viele Verbindungen. Bitte halten Sie die Downloads an oder versuchen Sie "
|
||||
"es später erneut."
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
@@ -314,12 +310,12 @@ msgid "Default"
|
||||
msgstr "Standard"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr "Festplatte voll! Downloads werden angehalten."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr "Festplattenfehler beim Anlegen der Datei %s"
|
||||
|
||||
@@ -584,8 +580,8 @@ msgid "Resuming"
|
||||
msgstr "Fortgesetzt"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "Angehalten"
|
||||
|
||||
@@ -625,20 +621,8 @@ msgid "Fatal error in Downloader"
|
||||
msgstr "Schwerer Fehler im Downloader"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Zu viele Verbindungen zu Server %s [%s]"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr ""
|
||||
"Von zu vielen unteschiedlichen IP Adressen beim Server eingeloggt %s[%s] "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgstr "Anmelden beim Server fehlgeschlagen. %s [%s]"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
@@ -831,14 +815,23 @@ msgstr ""
|
||||
"unterstützt. Einzelheiten und mögliche Lösungen finden Sie unter: "
|
||||
"https://sabnzbd.org/wiki/advanced/direct-write"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Abgelehnte Verbindung von:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr "Verbindung vom Host \"%s\" abgelehnt von:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr ""
|
||||
"API-Schlüssel ungültig. Bitte API-Schlüssel aus Einstellungen->Allgemein in "
|
||||
"die externe Anwendung eingeben:"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Abgelehnte Verbindung von:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key missing, please enter the api key from Config->General into your 3rd"
|
||||
@@ -848,21 +841,18 @@ msgstr ""
|
||||
" externe Anwendung eingeben:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr ""
|
||||
"API-Schlüssel ungültig. Bitte API-Schlüssel aus Einstellungen->Allgemein in "
|
||||
"die externe Anwendung eingeben:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr "Benutzer im Web-Interface angemeldet"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Benutzer angemeldet"
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr ""
|
||||
"Authentifizierung fehlgeschlagen. Überprüfen Sie Benutzername und Passwort."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
@@ -925,14 +915,6 @@ msgstr ""
|
||||
"Der Category-Ordner darf kein Unterordner des Temporärer Download-Ordners "
|
||||
"sein."
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "FEHLER:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr "Zurück"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid ""
|
||||
@@ -947,7 +929,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr "Warnungen"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Leerlauf"
|
||||
@@ -978,8 +960,8 @@ msgstr "Geschwindigkeit begrenzen"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Anhalten"
|
||||
|
||||
@@ -989,8 +971,8 @@ msgid "min"
|
||||
msgstr "Minuten"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Fortsetzen"
|
||||
|
||||
@@ -999,7 +981,7 @@ msgstr "Fortsetzen"
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Überwachter Ordner lesen"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Alle RSS-Feeds lesen"
|
||||
|
||||
@@ -1011,17 +993,17 @@ msgstr "Fertige Downloads"
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Unfertige Download"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Fehler suchen"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Neu starten"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Neustart ohne Anmeldung"
|
||||
|
||||
@@ -1097,6 +1079,23 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr "Die Passwortdatei %s konnte nicht gelesen werden"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"%s in local_ranges is not a private network, list it in xff_trusted_hosts to"
|
||||
" trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1400,6 +1399,11 @@ msgstr "Auftrag fehlgeschlagen"
|
||||
msgid "Queue finished"
|
||||
msgstr "Warteschlange abgearbeitet"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Benutzer angemeldet"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1411,7 +1415,7 @@ msgid "Open folder"
|
||||
msgstr "Ordner öffnen"
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Öffne Zielverzeichnis"
|
||||
|
||||
@@ -1554,7 +1558,8 @@ msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr ""
|
||||
"Heruntergeladen in %s mit einer Durchschnittsgeschwindigkeit von %sB/s"
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details
|
||||
#. page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr "Alter"
|
||||
@@ -1648,6 +1653,23 @@ msgstr ""
|
||||
"Wenn Sie diesen Fehler wieder erhalten, probieren Sie eine andere "
|
||||
"Nummer.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"To keep using the low port, put a reverse proxy in front of SABnzbd "
|
||||
"instead.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1736,6 +1758,11 @@ msgstr ""
|
||||
"Konnte nicht an Port %s auf %s starten. Eine andere Software nutzt diesen "
|
||||
"Port oder SABnzbd läuft bereits."
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
@@ -1743,15 +1770,6 @@ msgstr ""
|
||||
"Der Standard-Browser konnte nicht gestartet werden, da er wahrscheinlich "
|
||||
"nicht gefunden wurde."
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr "Zugriff verweigert"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr ""
|
||||
"Fehler %s: Sie müssen einen gültigen Benutzername und ein Passwort angeben."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1884,6 +1902,10 @@ msgstr "Keine zugehörige frühere RAR-Datei für %s"
|
||||
msgid "Removing %s failed"
|
||||
msgstr "Entfernen von %s fehlgeschlagen"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1937,45 +1959,7 @@ msgstr "RSS-Feed %s war leer"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Inkompatibeler RSS-Feed"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr "Interface anzeigen"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Anhalten für"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "5 Minuten anhalten"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "15 Minuten anhalten"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "30 Minuten anhalten"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Eine Stunde anhalten"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "3 Stunden anhalten"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "6 Stunden anhalten"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Beenden"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr "Verbleibend"
|
||||
|
||||
@@ -1983,6 +1967,44 @@ msgstr "Verbleibend"
|
||||
msgid "Add NZB"
|
||||
msgstr "NZB hinzufügen"
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr "Interface anzeigen"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Beenden"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Anhalten für"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "5 Minuten anhalten"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "15 Minuten anhalten"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "30 Minuten anhalten"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Eine Stunde anhalten"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "3 Stunden anhalten"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "6 Stunden anhalten"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -2003,6 +2025,26 @@ msgstr "Regel für nicht existierenden Server %s."
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Status für nicht vorhandenen Server wird versucht %s einzustellen"
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"X-Forwarded-For received while verify_xff_header is off, turn it on and list"
|
||||
" %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"Forwarded is not supported, configure the proxy to send X-Forwarded-For "
|
||||
"instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2318,6 +2360,10 @@ msgstr "Adresse"
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr "Anmelden"
|
||||
@@ -2909,10 +2955,6 @@ msgstr "Port, auf dem SABnzbd auf Anfragen warten soll."
|
||||
msgid "Web Interface Theme"
|
||||
msgstr "Benutzeroberfläche"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr "Wählen Sie ein Theme."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr "SABnzbd-Benutzername"
|
||||
@@ -3649,10 +3691,10 @@ msgstr ""
|
||||
"Warteschlange automatisch sortieren wenn ein neuer Job hinzugefügt wird."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgid ""
|
||||
"The queue will resort every 30 seconds if % downloaded or Remaining Size is "
|
||||
"selected."
|
||||
msgstr ""
|
||||
"Die Warteschlange wird alle 30 Sekunden neu sortiert, wenn % "
|
||||
"heruntergeladen, ausgewählt ist."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Propagation delay"
|
||||
@@ -3795,8 +3837,8 @@ msgid "Naming"
|
||||
msgstr "Benennung"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgstr "Wie viel kann in diesem Monat heruntergeladen werden (K/M/G)?"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
|
||||
#. Reset day of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4794,6 +4836,14 @@ msgstr "Löschen"
|
||||
msgid "Filename"
|
||||
msgstr "Dateiname"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Freier Speicherplatz"
|
||||
@@ -4802,6 +4852,17 @@ msgstr "Freier Speicherplatz"
|
||||
msgid "Temp Folder"
|
||||
msgstr "Temporärer Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Search by name, or refine with filters <code>cat:</code>, "
|
||||
"<code>status:</code> and <code>priority:</code> (Queue). For example: "
|
||||
"<code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr "Mehrfach-Funktionen"
|
||||
@@ -4810,6 +4871,10 @@ msgstr "Mehrfach-Funktionen"
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr "Shift-Taste gedrückt halten, um einen ganzen Bereich auszuwählen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr "Alle auswählen"
|
||||
@@ -4842,6 +4907,10 @@ msgstr "Wenn SABnzbd neustartet, wird diese Anzeige automatisch verschwinden!"
|
||||
msgid "WARNING:"
|
||||
msgstr "WARNUNG:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "FEHLER:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr "Abrufen"
|
||||
@@ -4878,6 +4947,14 @@ msgstr "Weitere Spalten bei der Warteschlange"
|
||||
msgid "Extra history columns"
|
||||
msgstr "Weitere Spalten bei der Verlaufsliste"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr "Fortschritt"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Aktionen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr "Seite"
|
||||
@@ -5055,6 +5132,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr "Sortiere nach % heruntergeladen <small>Viel→Wenig</small>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sortieren nach Alter <small>Älteste→Neuste</small>"
|
||||
|
||||
+200
-115
@@ -9,7 +9,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2026\n"
|
||||
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"
|
||||
@@ -127,7 +127,6 @@ msgstr "SABnzbd %s comenzó"
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "Cierre de SABnzbd terminado"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr "Señal %s capturado, guardando y saliendo..."
|
||||
@@ -273,14 +272,13 @@ msgstr "El servidor necesita usuario y contraseña."
|
||||
msgid "Connection Successful!"
|
||||
msgstr "¡Conexión exitosa!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Autenticación fallida, compruebe el usuario o la contraseña."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgid ""
|
||||
"Server %s took %d ms to respond. On high-latency connections, increasing "
|
||||
"'Articles per request' to a value between 5 and 10 can improve download "
|
||||
"speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
"Demasiadas conexiones; pause las descargas o inténtelo de nuevo más tarde"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
@@ -297,12 +295,12 @@ msgid "Default"
|
||||
msgstr "Predeterminado"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr "Disco lleno! Pausando la cola"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr "Error de disco al crear el archivo %s"
|
||||
|
||||
@@ -569,8 +567,8 @@ msgid "Resuming"
|
||||
msgstr "Reanudando"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "En pausa"
|
||||
|
||||
@@ -610,20 +608,8 @@ msgid "Fatal error in Downloader"
|
||||
msgstr "Error grave en el descargador"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Demasiadas conexiones con el servidor %s [%s]"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr ""
|
||||
"Inicio de sesión desde demasiadas direcciones IP diferentes en el servidor "
|
||||
"%s [%s] - https://sabnzbd.org/multiple-adresses"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgstr "Registraccion fallo para servidor %s [%s]"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
@@ -815,14 +801,23 @@ msgstr ""
|
||||
"dispersos. Para más detalles y posibles soluciones, consulta: "
|
||||
"https://sabnzbd.org/wiki/advanced/direct-write"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Conexión rechazada de:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr "Se deniega la conexión con el nombre de equipo \"%s\" desde:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr ""
|
||||
"Clave de API erróneo, favor ingresar la clave correcta desde Config->General"
|
||||
" en tu aplicacion externa:"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Conexión rechazada de:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key missing, please enter the api key from Config->General into your 3rd"
|
||||
@@ -832,21 +827,17 @@ msgstr ""
|
||||
"aplicacion externa:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr ""
|
||||
"Clave de API erróneo, favor ingresar la clave correcta desde Config->General"
|
||||
" en tu aplicacion externa:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr "Usuario conectado a la interfaz web"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Usuario conectado"
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Autenticación fallida, compruebe el usuario o la contraseña."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
@@ -909,14 +900,6 @@ msgstr ""
|
||||
"El directorio Categoría no puede ser un subdirectorio del directorio de "
|
||||
"descargas temporal."
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "ERROR:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr "Atrás"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid ""
|
||||
@@ -931,7 +914,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr "Advertencias"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Inactivo"
|
||||
@@ -962,8 +945,8 @@ msgstr "Limitar Velocidad"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Pausar"
|
||||
|
||||
@@ -973,8 +956,8 @@ msgid "min"
|
||||
msgstr "mín"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Reanudar"
|
||||
|
||||
@@ -983,7 +966,7 @@ msgstr "Reanudar"
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Escanear directorio bajo observación"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Leer todos los canales RSS"
|
||||
|
||||
@@ -995,17 +978,17 @@ msgstr "Carpeta Completa"
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Carpeta Incompleta"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Resolver un problema"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Reiniciar sin sesión iniciada"
|
||||
|
||||
@@ -1081,6 +1064,23 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr "Error al leer el archivo de contraseña %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"%s in local_ranges is not a private network, list it in xff_trusted_hosts to"
|
||||
" trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1391,6 +1391,11 @@ msgstr "Trabajo fallido"
|
||||
msgid "Queue finished"
|
||||
msgstr "Cola terminada"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Usuario conectado"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1402,7 +1407,7 @@ msgid "Open folder"
|
||||
msgstr "Abrir carpeta"
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Abrir todo el folder"
|
||||
|
||||
@@ -1545,7 +1550,8 @@ msgstr "PROPAGANDO %s min"
|
||||
msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr "Descargado en %s a una media de %sB/s"
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details
|
||||
#. page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr "Edad"
|
||||
@@ -1640,6 +1646,23 @@ msgstr ""
|
||||
"Si obtiene este mensaje de error consecutivamente, por favor inténtelo de "
|
||||
"nuevo con otro número.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"To keep using the low port, put a reverse proxy in front of SABnzbd "
|
||||
"instead.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1728,20 +1751,17 @@ msgstr ""
|
||||
"No es posible vincular al puerto %s en %s. Otro software está utilizando el "
|
||||
"puerto o SABnzbd ya se está ejecutando."
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
msgstr ""
|
||||
"Imposible iniciar el navegador, probablemente no se le haya encontrado"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr "Acceso denegado"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr "Error %s: Necesitas introducir un usuario y contraseña válidos."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1872,6 +1892,10 @@ msgstr "No hay un archivo rar anterior correspondiente para %s"
|
||||
msgid "Removing %s failed"
|
||||
msgstr "Error al eliminar %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1927,45 +1951,7 @@ msgstr "El canal RSS %s estaba vacío"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Canal Incorrecto"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr "Mostrar interfaz"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pausar durante"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pausar 5 minutos"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pausar 15 minutos"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pausar 30 minutos"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pausar 1 hora"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pausar 3 horas"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pausar 6 horas"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Apagar"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr "Restante"
|
||||
|
||||
@@ -1973,6 +1959,44 @@ msgstr "Restante"
|
||||
msgid "Add NZB"
|
||||
msgstr "Añadir NZB"
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr "Mostrar interfaz"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Apagar"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pausar durante"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pausar 5 minutos"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pausar 15 minutos"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pausar 30 minutos"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pausar 1 hora"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pausar 3 horas"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pausar 6 horas"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -1993,6 +2017,26 @@ msgstr "Planificación para servidor %s inexistente"
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Intentando cambiar el estado de servidor inexistente %s"
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"X-Forwarded-For received while verify_xff_header is off, turn it on and list"
|
||||
" %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"Forwarded is not supported, configure the proxy to send X-Forwarded-For "
|
||||
"instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2308,6 +2352,10 @@ msgstr "Equipo"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr "Iniciar sesión"
|
||||
@@ -2894,10 +2942,6 @@ msgstr "Puerto en que SABnzbd debería escuchar"
|
||||
msgid "Web Interface Theme"
|
||||
msgstr "Tema de la interfaz web"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr "Elige un tema."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr "Usuario SABnzbd"
|
||||
@@ -3622,8 +3666,10 @@ msgstr ""
|
||||
"nueva."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgstr "La cola se reordenará cada 30 segundos si se selecciona % descargado."
|
||||
msgid ""
|
||||
"The queue will resort every 30 seconds if % downloaded or Remaining Size is "
|
||||
"selected."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Propagation delay"
|
||||
@@ -3767,8 +3813,8 @@ msgid "Naming"
|
||||
msgstr "Nombrado"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgstr "Cantidad de descarga permitida este mes (K/M/G)"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
|
||||
#. Reset day of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4763,6 +4809,14 @@ msgstr "Eliminar"
|
||||
msgid "Filename"
|
||||
msgstr "Nombre de archivo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Espacio libre"
|
||||
@@ -4771,6 +4825,17 @@ msgstr "Espacio libre"
|
||||
msgid "Temp Folder"
|
||||
msgstr "Carpeta temporal"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Search by name, or refine with filters <code>cat:</code>, "
|
||||
"<code>status:</code> and <code>priority:</code> (Queue). For example: "
|
||||
"<code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr "Op.Múltiples"
|
||||
@@ -4779,6 +4844,10 @@ msgstr "Op.Múltiples"
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr "Mantén presionada la tecla shift para seleccionar un rango"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr "Marcar todo"
|
||||
@@ -4813,6 +4882,10 @@ msgstr ""
|
||||
msgid "WARNING:"
|
||||
msgstr "AVISO:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "ERROR:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr "Obtener"
|
||||
@@ -4849,6 +4922,14 @@ msgstr "Columnas adicionales de la cola"
|
||||
msgid "Extra history columns"
|
||||
msgstr "Columnas adicionales del historial"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr "Progreso"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Acciones"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr "página"
|
||||
@@ -5026,6 +5107,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr "Ordenar por % descargado <small>Mayor→Menor</small>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Ordenar por Fecha <small>Más viejo→Más nuevo</small>"
|
||||
|
||||
+198
-110
@@ -6,7 +6,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2026\n"
|
||||
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
|
||||
@@ -119,7 +119,6 @@ msgstr "SABnzbd %s käynnistetty"
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd sammutus valmis"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr "Signaali %s kaapattu, tallennetaan ja lopetetaan..."
|
||||
@@ -251,13 +250,13 @@ msgstr "Palvelin vaatii käyttäjänimen ja salasanan."
|
||||
msgid "Connection Successful!"
|
||||
msgstr "Yhdistäminen onnistui!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Varmennus epäonnistui, tarkista käyttäjänimi/salasana."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgstr "Liikaa yhteyksiä, keskeytä lataaminen tai yritä myöhemmin uudelleen"
|
||||
msgid ""
|
||||
"Server %s took %d ms to respond. On high-latency connections, increasing "
|
||||
"'Articles per request' to a value between 5 and 10 can improve download "
|
||||
"speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
@@ -274,12 +273,12 @@ msgid "Default"
|
||||
msgstr "Oletus"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr "Levy täynnä! Pakotetaan keskeytys"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr "Levyvirhe luotaessa tiedostoa %s"
|
||||
|
||||
@@ -522,8 +521,8 @@ msgid "Resuming"
|
||||
msgstr "Jatketaan"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "Keskeytetty"
|
||||
|
||||
@@ -562,19 +561,9 @@ msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Liikaa yhteyksiä palvelimelle %s [%s]"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgstr "Kirjautuminen palvelimelle %s epäonnistui [%s]"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Connecting %s@%s failed, message=%s"
|
||||
@@ -753,11 +742,20 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr ""
|
||||
"API avain virheellinen, käytä Asetukset->Yleiset löytyvää api avainta "
|
||||
"käyttämääsi kolmannen osapuolen ohjelmaan:"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -769,21 +767,17 @@ msgstr ""
|
||||
"käyttämääsi kolmannen osapuolen ohjelmaan:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr ""
|
||||
"API avain virheellinen, käytä Asetukset->Yleiset löytyvää api avainta "
|
||||
"käyttämääsi kolmannen osapuolen ohjelmaan:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr "Käyttäjä kirjautui sisään web-käyttöliittymään"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Käyttäjä kirjautui sisään"
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Varmennus epäonnistui, tarkista käyttäjänimi/salasana."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
@@ -844,14 +838,6 @@ msgid ""
|
||||
"Category folder cannot be a subfolder of the Temporary Download Folder."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "VIRHE:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr "Takaisin"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid ""
|
||||
@@ -864,7 +850,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr "Varoitukset"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Toimeton"
|
||||
@@ -895,8 +881,8 @@ msgstr "Nopeusrajoitus"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Keskeytä"
|
||||
|
||||
@@ -906,8 +892,8 @@ msgid "min"
|
||||
msgstr "minuutti"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Jatka"
|
||||
|
||||
@@ -916,7 +902,7 @@ msgstr "Jatka"
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Tarkista vahdittu kansio"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Lue kaikki RSS syötteet"
|
||||
|
||||
@@ -928,17 +914,17 @@ msgstr "Valmistuneet-kansio"
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Lataukset-kansio"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Vianmääritys"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Käynnistä uudelleen"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Käynnistä uudelleen ilman kirjautumista"
|
||||
|
||||
@@ -1009,6 +995,23 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"%s in local_ranges is not a private network, list it in xff_trusted_hosts to"
|
||||
" trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1298,6 +1301,11 @@ msgstr "Lataus epäonnistui"
|
||||
msgid "Queue finished"
|
||||
msgstr "Jono valmistunut"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Käyttäjä kirjautui sisään"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1309,7 +1317,7 @@ msgid "Open folder"
|
||||
msgstr ""
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Avaa valmistuneet-kansio"
|
||||
|
||||
@@ -1448,7 +1456,8 @@ msgstr "LEVITETÄÄN %s min"
|
||||
msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr "Ladattiin ajassa %s keskilatausnopeudella %sB/s"
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details
|
||||
#. page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr "Ikä"
|
||||
@@ -1540,6 +1549,23 @@ msgid ""
|
||||
"If you get this error message again, please try a different number.<br>"
|
||||
msgstr "Jos saat tämän virhesanoman uudestaan, kokeile toista numeroa.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"To keep using the low port, put a reverse proxy in front of SABnzbd "
|
||||
"instead.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1626,19 +1652,16 @@ msgid ""
|
||||
"SABnzbd is already running."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
msgstr "Selainta ei voida käynnistää, todennäköisesti ei löydy"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr "Ei käyttöoikeutta"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr "Virhe %s: Syötä kelvollinen käyttäjänimi ja salasana."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1767,6 +1790,10 @@ msgstr ""
|
||||
msgid "Removing %s failed"
|
||||
msgstr "%s poistaminen epäonnistui"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1820,45 +1847,7 @@ msgstr "RSS syöte %s oli tyhjä"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Puutteellinen syöte"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr "Näytä käyttöliittymä"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Keskeytä ajaksi"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Keskeytä 5:ksi minuutiksi"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Keskeytä 15:ksi minuutiksi"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Keskeytä 30:ksi minuutiksi"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Keskeytä tunniksi"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Keskeytä 3:ksi tunniksi"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Keskeytä 6:ksi tunniksi"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Sammuta"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr "Jäljellä"
|
||||
|
||||
@@ -1866,6 +1855,44 @@ msgstr "Jäljellä"
|
||||
msgid "Add NZB"
|
||||
msgstr "Lisää NZB"
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr "Näytä käyttöliittymä"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Sammuta"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Keskeytä ajaksi"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Keskeytä 5:ksi minuutiksi"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Keskeytä 15:ksi minuutiksi"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Keskeytä 30:ksi minuutiksi"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Keskeytä tunniksi"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Keskeytä 3:ksi tunniksi"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Keskeytä 6:ksi tunniksi"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -1886,6 +1913,26 @@ msgstr "Ajastettu tuntemattomalle palvelimelle %s"
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Yritettiin asettaa tila ei olemassa olevalle palvelimelle %s"
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"X-Forwarded-For received while verify_xff_header is off, turn it on and list"
|
||||
" %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"Forwarded is not supported, configure the proxy to send X-Forwarded-For "
|
||||
"instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2201,6 +2248,10 @@ msgstr "Isäntä"
|
||||
msgid "Cancel"
|
||||
msgstr "Peruuta"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr "Kirjaudu sisään"
|
||||
@@ -2783,10 +2834,6 @@ msgstr "Portti jota SABnzbdn tulisi kuunnella."
|
||||
msgid "Web Interface Theme"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr "SABnzbd käyttäjänimi"
|
||||
@@ -3471,7 +3518,9 @@ msgid "Automatically sort jobs in the queue when a new job is added."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgid ""
|
||||
"The queue will resort every 30 seconds if % downloaded or Remaining Size is "
|
||||
"selected."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3607,8 +3656,8 @@ msgid "Naming"
|
||||
msgstr "Nimeäminen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgstr "Kuinka paljon voidaan ladata tässä kuussa (K/M/G)"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
|
||||
#. Reset day of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4555,6 +4604,14 @@ msgstr "Poista"
|
||||
msgid "Filename"
|
||||
msgstr "Tiedostonimi"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Vapaa tila"
|
||||
@@ -4563,6 +4620,17 @@ msgstr "Vapaa tila"
|
||||
msgid "Temp Folder"
|
||||
msgstr "Väliaikaiskansio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Search by name, or refine with filters <code>cat:</code>, "
|
||||
"<code>status:</code> and <code>priority:</code> (Queue). For example: "
|
||||
"<code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr "Monioperaatiot"
|
||||
@@ -4571,6 +4639,10 @@ msgstr "Monioperaatiot"
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr "Paina vaihto-näppäintä pohjassa valitaksesi alueen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr "Valitse kaikki"
|
||||
@@ -4604,6 +4676,10 @@ msgstr ""
|
||||
msgid "WARNING:"
|
||||
msgstr "VAROITUS:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "VIRHE:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr "Nouda"
|
||||
@@ -4640,6 +4716,14 @@ msgstr ""
|
||||
msgid "Extra history columns"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr "Edistyminen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Toiminnot"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr "sivu"
|
||||
@@ -4811,6 +4895,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Järjestä iän mukaan <small>Vanhin→Uusin</small>"
|
||||
|
||||
+223
-121
@@ -7,7 +7,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Fred L <88com88@gmail.com>, 2026\n"
|
||||
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"
|
||||
@@ -128,7 +128,6 @@ msgstr "SABnzbd %s démarré"
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "Arrêt de SABnzbd terminé"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr "Signal %s intercepté, enregistrement et fermeture en cours..."
|
||||
@@ -277,15 +276,17 @@ msgstr "Le serveur requiert un identifiant et un mot de passe."
|
||||
msgid "Connection Successful!"
|
||||
msgstr "Connexion réussie!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Echec d'authentification, vérifiez les identifiant/mot de passe."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgid ""
|
||||
"Server %s took %d ms to respond. On high-latency connections, increasing "
|
||||
"'Articles per request' to a value between 5 and 10 can improve download "
|
||||
"speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
"Trop de connexions, veuillez mettre en pause le téléchargement ou essayer "
|
||||
"plus tard"
|
||||
"Le serveur %s a mis %d ms à répondre. Sur les connexions à forte latence, "
|
||||
"augmenter le paramètre « Articles par requête » à une valeur comprise entre "
|
||||
"5 et 10 peut améliorer la vitesse de téléchargement. Voir : "
|
||||
"https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
@@ -302,12 +303,12 @@ msgid "Default"
|
||||
msgstr "Par défaut"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr "Disque plein ! Pause forcée"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr "Erreur de disque lors de la création du fichier %s"
|
||||
|
||||
@@ -573,8 +574,8 @@ msgid "Resuming"
|
||||
msgstr "Reprise en cours"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "En pause"
|
||||
|
||||
@@ -614,20 +615,8 @@ msgid "Fatal error in Downloader"
|
||||
msgstr "Erreur fatale dans le Téléchargeur"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Trop de connexions au serveur %s [%s]"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgstr ""
|
||||
"Connexion au serveur %s [%s] à partir de trop d'adresses IP différentes - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgstr "Échec de la connexion au serveur %s [%s]"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr "Le serveur %s a indiqué : %s"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
@@ -820,14 +809,23 @@ msgstr ""
|
||||
"fichiers fragmentés. Pour plus d'informations et les solutions possibles, "
|
||||
"consultez : https://sabnzbd.org/wiki/advanced/direct-write"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Connexion refusée de:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr "Connexion refusée avec le nom d'hôte \"%s\" à partir de :"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr ""
|
||||
"Clé API incorrecte, utilisez la clé API de la configuration générale dans "
|
||||
"votre application tierce :"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Connexion refusée de:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key missing, please enter the api key from Config->General into your 3rd"
|
||||
@@ -837,21 +835,17 @@ msgstr ""
|
||||
" application tierce :"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr ""
|
||||
"Clé API incorrecte, utilisez la clé API de la configuration générale dans "
|
||||
"votre application tierce :"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr "Trop de tentatives de connexion échouées, réessayer ultérieurement."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr "Tentative de connexion refusée, trop d'échecs de %s"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr "Utilisateur connecté à l'interface web"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Utilisateur connecté"
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Echec d'authentification, vérifiez les identifiant/mot de passe."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
@@ -914,14 +908,6 @@ msgstr ""
|
||||
"Le dossier de catégorie ne peut pas être un sous-dossier du dossier de "
|
||||
"téléchargement temporaire."
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "ERREUR:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid ""
|
||||
@@ -936,7 +922,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr "Avertissements"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "A l'arrêt"
|
||||
@@ -967,8 +953,8 @@ msgstr "Limiter la vitesse"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Mettre en pause"
|
||||
|
||||
@@ -978,8 +964,8 @@ msgid "min"
|
||||
msgstr "min"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Reprendre"
|
||||
|
||||
@@ -988,7 +974,7 @@ msgstr "Reprendre"
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Analyser le dossier surveillé"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Lire tous les flux RSS"
|
||||
|
||||
@@ -1000,17 +986,17 @@ msgstr "Dossier des téléchargements terminés"
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Dossier incomplet"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Résoudre les problèmes"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Redémarrer"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Redémarrer sans se connecter"
|
||||
|
||||
@@ -1086,6 +1072,23 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr "Échec de lecture du fichier de mot de passe %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"%s in local_ranges is not a private network, list it in xff_trusted_hosts to"
|
||||
" trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1389,6 +1392,11 @@ msgstr "La tâche a échoué"
|
||||
msgid "Queue finished"
|
||||
msgstr "File d'attente terminée"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Utilisateur connecté"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1400,7 +1408,7 @@ msgid "Open folder"
|
||||
msgstr "Ouvrir le dossier"
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Ouvrir le dossier des complets"
|
||||
|
||||
@@ -1539,7 +1547,8 @@ msgstr "PROPAGATION %s min"
|
||||
msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr "Téléchargé en %s à %sO/s de moyenne"
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details
|
||||
#. page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr "Âge"
|
||||
@@ -1633,6 +1642,32 @@ msgstr ""
|
||||
"Si vous obtenez ce message d'erreur à nouveau, veuillez essayer un nombre "
|
||||
"différent.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" SABnzbd n'est pas autorisé à utiliser le port %s sur %s.<br>\n"
|
||||
" Sur la plupart des systèmes, les numéros de port faibles sont réservés aux processus privilégiés.\n"
|
||||
" le port est donc disponible, mais ne peut pas être utilisé.<br>\n"
|
||||
" <br>\n"
|
||||
" Lancez SABnzbd avec les privilèges requis pour ce port, ou redémarrez-le\n"
|
||||
" en lui attribuant un numéro de port supérieur ou égal à 1024."
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"To keep using the low port, put a reverse proxy in front of SABnzbd "
|
||||
"instead.<br>"
|
||||
msgstr ""
|
||||
"Pour continuer à utiliser un port privilégié, mettez un proxy inverse devant"
|
||||
" SABnzbd.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1721,21 +1756,18 @@ msgstr ""
|
||||
"Impossible de lier le port %s sur %s. Un autre logiciel utilise le port ou "
|
||||
"SABnzbd est déjà en cours d'exécution."
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
"Impossible de se lier au port %s sur %s. Les ports inférieurs à 1024 "
|
||||
"demandent des privilèges élevés."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
msgstr "Impossible de lancer le navigateur web, probablement pas trouvé"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr "Accès refusé"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr ""
|
||||
"Erreur %s: vous devez fournir un nom d'utilisateur et un mot de passe "
|
||||
"valide."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1868,6 +1900,10 @@ msgstr "Aucun fichier rar antérieur correspondant pour %s"
|
||||
msgid "Removing %s failed"
|
||||
msgstr "Échec de la suppression de %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr "Suppression de %s fichiers comportant des extensions indésirables"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1922,45 +1958,7 @@ msgstr "Le flux RSS %s était vide"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Flux incompatible"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr "Afficher l’interface"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pause de"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Mettre en pause pendant 5 minutes"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Mettre en pause pendant 15 minutes"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Mettre en pause pendant 30 minutes"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Mettre en pause pendant 1 heure"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Mettre en pause pendant 3 heures"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Mettre en pause pendant 6 heures"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Arrêter"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr "Restant"
|
||||
|
||||
@@ -1968,6 +1966,44 @@ msgstr "Restant"
|
||||
msgid "Add NZB"
|
||||
msgstr "Ajouter NZB"
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr "Afficher l’interface"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Arrêter"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pause de"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Mettre en pause pendant 5 minutes"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Mettre en pause pendant 15 minutes"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Mettre en pause pendant 30 minutes"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Mettre en pause pendant 1 heure"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Mettre en pause pendant 3 heures"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Mettre en pause pendant 6 heures"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -1988,6 +2024,26 @@ msgstr "Planification pour un serveur non existant %s"
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Test de l'état du serveur inexistant %s"
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"X-Forwarded-For received while verify_xff_header is off, turn it on and list"
|
||||
" %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"Forwarded is not supported, configure the proxy to send X-Forwarded-For "
|
||||
"instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2303,6 +2359,10 @@ msgstr "Hôte"
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr "Fermer"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr "Se connecter"
|
||||
@@ -2894,10 +2954,6 @@ msgstr "Port que SABnzbd doit surveiller."
|
||||
msgid "Web Interface Theme"
|
||||
msgstr "Thème de l'interface web"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr "Choisissez un thème."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr "Identifiant SABnzbd"
|
||||
@@ -3630,10 +3686,12 @@ msgstr ""
|
||||
"ajoutée."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgid ""
|
||||
"The queue will resort every 30 seconds if % downloaded or Remaining Size is "
|
||||
"selected."
|
||||
msgstr ""
|
||||
"La file d'attente sera triée toutes les 30 secondes si le % de "
|
||||
"téléchargement est sélectionné."
|
||||
"La file d'attente sera retriée toutes les 30 secondes si % téléchargé ou "
|
||||
"Taille restante est sélectionné."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Propagation delay"
|
||||
@@ -3777,8 +3835,10 @@ msgid "Naming"
|
||||
msgstr "Appellation"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgstr "Combien peut-être télécharger ce mois (K/M/G)"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
"Quantité de données pouvant être téléchargées durant ce cycle de quota "
|
||||
"(K/M/G)"
|
||||
|
||||
#. Reset day of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4777,6 +4837,14 @@ msgstr "Supprimer"
|
||||
msgid "Filename"
|
||||
msgstr "Nom de fichier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr "Afficher/masquer le menu de navigation de SABnzbd"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr "Ouvrir le menu principal de SABnzbd"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Espace libre"
|
||||
@@ -4785,6 +4853,20 @@ msgstr "Espace libre"
|
||||
msgid "Temp Folder"
|
||||
msgstr "Dossier temporaire"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr "Effacer la recherche"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Search by name, or refine with filters <code>cat:</code>, "
|
||||
"<code>status:</code> and <code>priority:</code> (Queue). For example: "
|
||||
"<code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
"Rechercher par nom, ou affiner avec des filtres <code>cat :</code>, "
|
||||
"<code>statut :</code> et <code>priorité :</code> (file d'attente). Par "
|
||||
"exemple : <code>mon show cat:tv</code>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr "Multi-Operations"
|
||||
@@ -4793,6 +4875,10 @@ msgstr "Multi-Operations"
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr "Maintenez la touche Maj pour sélectionner une plage"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr "Sélectionner la tâche"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr "Tout sélectionner"
|
||||
@@ -4826,6 +4912,10 @@ msgstr ""
|
||||
msgid "WARNING:"
|
||||
msgstr "AVERTISSEMENT :"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "ERREUR:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr "Charger"
|
||||
@@ -4862,6 +4952,14 @@ msgstr "Colonnes de file d'attente supplémentaires"
|
||||
msgid "Extra history columns"
|
||||
msgstr "Colonnes d'historique supplémentaires"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr "Avancement"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Actions"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr "page"
|
||||
@@ -5041,6 +5139,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr "Trier par % téléchargé <small>Most→Least</small>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr "Trier par Taille restante <small>Plus petit→Plus grand</small>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Trier par Age <small>Moins récent→Plus récent</small>"
|
||||
|
||||
+200
-114
@@ -7,7 +7,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2026\n"
|
||||
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
|
||||
@@ -115,7 +115,6 @@ msgstr "SABnzbd %s התחיל"
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "כיבוי SABnzbd הסתיים"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr "אות %s נתפס, שומר ויוצא…"
|
||||
@@ -255,13 +254,13 @@ msgstr ".השרת דורש שם משתמש וסיסמה"
|
||||
msgid "Connection Successful!"
|
||||
msgstr "חיבור מוצלח!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "אימות נכשל, בדוק שם משתמש/סיסמה."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgstr "יותר מדי חיבורים, אנא השהה הורדה או נסה שוב מאוחר יותר"
|
||||
msgid ""
|
||||
"Server %s took %d ms to respond. On high-latency connections, increasing "
|
||||
"'Articles per request' to a value between 5 and 10 can improve download "
|
||||
"speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
@@ -278,12 +277,12 @@ msgid "Default"
|
||||
msgstr "ברירת מחדל"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr "דיסק מלא! מאלץ השהיה"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr "שגיאת דיסק ביצירת קובץ %s"
|
||||
|
||||
@@ -534,8 +533,8 @@ msgid "Resuming"
|
||||
msgstr "ממשיך"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "מושהה"
|
||||
|
||||
@@ -573,20 +572,8 @@ msgid "Fatal error in Downloader"
|
||||
msgstr "שגיאה גורלית במורידן"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "יותר מדי חיבורים לשרת %s [%s]"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr ""
|
||||
"כניסה מיותר מדי כתובות IP שונות אל שרת %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgstr "כניסה נכשלה עבור שרת %s [%s]"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
@@ -769,14 +756,21 @@ msgstr ""
|
||||
"מצב Direct Write הושבת מכיוון ש-%s אינו תומך בקבצים דלילים. לפרטים ולפתרונות"
|
||||
" אפשריים, ראה: https://sabnzbd.org/wiki/advanced/direct-write"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "חיבור מסורב מאת:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr "חיבור מסורב עם שם המארח \"%s\" מאת:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr "מפתח API שגוי, השתמש במפתח ה־API מתצורה->כללי בתוכנית הצד השלישי שלך:"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "חיבור מסורב מאת:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key missing, please enter the api key from Config->General into your 3rd"
|
||||
@@ -786,19 +780,17 @@ msgstr ""
|
||||
"שלך:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr "מפתח API שגוי, השתמש במפתח ה־API מתצורה->כללי בתוכנית הצד השלישי שלך:"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr "משתמש התחבר לממשק הרשת"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "משתמש התחבר"
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "אימות נכשל, בדוק שם משתמש/סיסמה."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
@@ -859,14 +851,6 @@ msgid ""
|
||||
"Category folder cannot be a subfolder of the Temporary Download Folder."
|
||||
msgstr "תיקיית קטגוריה אינה יכולה להיות תת־תיקייה של תיקיית ההורדות הזמניות."
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "שגיאה:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr "הקודם"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid ""
|
||||
@@ -880,7 +864,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr "אזהרות"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "מנוחה"
|
||||
@@ -911,8 +895,8 @@ msgstr "הגבל מהירות"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "השהה"
|
||||
|
||||
@@ -922,8 +906,8 @@ msgid "min"
|
||||
msgstr "דקה"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "המשך"
|
||||
|
||||
@@ -932,7 +916,7 @@ msgstr "המשך"
|
||||
msgid "Scan watched folder"
|
||||
msgstr "סרוק תיקייה מושגחת"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "קרא את כל הזנות RSS"
|
||||
|
||||
@@ -944,17 +928,17 @@ msgstr "תיקייה שלמה"
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "תיקייה בלתי שלמה"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "פתור בעיות"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "הפעל מחדש"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr "הפעל מחדש ללא כניסה"
|
||||
|
||||
@@ -1028,6 +1012,23 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr "כישלון בקריאת קובץ הסיסמה %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"%s in local_ranges is not a private network, list it in xff_trusted_hosts to"
|
||||
" trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1320,6 +1321,11 @@ msgstr "עבודה נכשלה"
|
||||
msgid "Queue finished"
|
||||
msgstr "תור הסתיים"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "משתמש התחבר"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1331,7 +1337,7 @@ msgid "Open folder"
|
||||
msgstr "פתח תיקייה"
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "פתח תיקיית השלמה"
|
||||
|
||||
@@ -1470,7 +1476,8 @@ msgstr "מפיץ %s דקות"
|
||||
msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr "ירד תוך %s בממוצע של %s ב/ש"
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details
|
||||
#. page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr "גיל"
|
||||
@@ -1562,6 +1569,23 @@ msgid ""
|
||||
"If you get this error message again, please try a different number.<br>"
|
||||
msgstr "אם אתה מקבל את הודעת השגיאה הזו שוב, אנא נסה מספר שונה.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"To keep using the low port, put a reverse proxy in front of SABnzbd "
|
||||
"instead.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1650,19 +1674,16 @@ msgstr ""
|
||||
"לא היה ניתן לקשר את פתחה %s על %s. איזשהי תוכנה אחרת משתמשת בפתחה או SABnzbd"
|
||||
" כבר רץ."
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
msgstr "לא היה ניתן להפעיל את הדפדפן, כנראה שהוא לא נמצא"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr "גישה נדחתה"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr "שגיאה %s: אתה צריך לספק שם משתמש וסיסמה תקפים."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1791,6 +1812,10 @@ msgstr "אין קובץ rar קודם תואם עבור %s"
|
||||
msgid "Removing %s failed"
|
||||
msgstr "הסרת %s נכשלה"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1844,45 +1869,7 @@ msgstr "הזנת RSS %s הייתה ריקה"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "הזנה בלתי תואמת"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr "הראה ממשק"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "השהה למשך"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "השהה למשך 5 דקות"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "השהה למשך 15 דקות"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "השהה למשך 30 דקות"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "השהה למשך שעה"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "השהה למשך 3 שעות"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "השהה למשך 6 שעות"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "כבה"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr "נותר"
|
||||
|
||||
@@ -1890,6 +1877,44 @@ msgstr "נותר"
|
||||
msgid "Add NZB"
|
||||
msgstr "הוסף NZB"
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr "הראה ממשק"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "כבה"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "השהה למשך"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "השהה למשך 5 דקות"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "השהה למשך 15 דקות"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "השהה למשך 30 דקות"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "השהה למשך שעה"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "השהה למשך 3 שעות"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "השהה למשך 6 שעות"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -1910,6 +1935,26 @@ msgstr "תזמן עבור שרת בלתי קיים %s"
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "מנסה לקבוע מעמד של שרת בלתי קיים %s"
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"X-Forwarded-For received while verify_xff_header is off, turn it on and list"
|
||||
" %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"Forwarded is not supported, configure the proxy to send X-Forwarded-For "
|
||||
"instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2225,6 +2270,10 @@ msgstr "מארח"
|
||||
msgid "Cancel"
|
||||
msgstr "ביטול"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr "התחבר"
|
||||
@@ -2807,10 +2856,6 @@ msgstr "פתחה אשר SABnzbd צריך להאזין אליה."
|
||||
msgid "Web Interface Theme"
|
||||
msgstr "ערכת נושא של ממשק רשת"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr "בחר ערכת נושא."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr "שם משתמש SABnzbd"
|
||||
@@ -3489,8 +3534,10 @@ msgid "Automatically sort jobs in the queue when a new job is added."
|
||||
msgstr "מיין עבודות בתור באופן אוטומטי כאשר עבודה חדשה מתווספת."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgstr "התור ימוין כל 30 שניות אם האפשרות % ירד נבחרה."
|
||||
msgid ""
|
||||
"The queue will resort every 30 seconds if % downloaded or Remaining Size is "
|
||||
"selected."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Propagation delay"
|
||||
@@ -3625,8 +3672,8 @@ msgid "Naming"
|
||||
msgstr "מתן שמות"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgstr "כמה ניתן להוריד החודש (ק״ב/מ״ב/ג״ב)"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
|
||||
#. Reset day of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4592,6 +4639,14 @@ msgstr "מחק"
|
||||
msgid "Filename"
|
||||
msgstr "שם קובץ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "שטח פנוי"
|
||||
@@ -4600,6 +4655,17 @@ msgstr "שטח פנוי"
|
||||
msgid "Temp Folder"
|
||||
msgstr "תיקייה זמנית"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Search by name, or refine with filters <code>cat:</code>, "
|
||||
"<code>status:</code> and <code>priority:</code> (Queue). For example: "
|
||||
"<code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr "רב־תפעולים"
|
||||
@@ -4608,6 +4674,10 @@ msgstr "רב־תפעולים"
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr "החזק את מקש Shift כדי לבחור טווח"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr "סמן הכל"
|
||||
@@ -4640,6 +4710,10 @@ msgstr "במקרה של הפעלה מחדש של SABnzbd המסך ייעלם ב
|
||||
msgid "WARNING:"
|
||||
msgstr "אזהרה:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "שגיאה:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr "משוך"
|
||||
@@ -4676,6 +4750,14 @@ msgstr "יותר עמודות תור"
|
||||
msgid "Extra history columns"
|
||||
msgstr "יותר עמודות היסטוריה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr "התקדמות"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "פעולות"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr "דף"
|
||||
@@ -4852,6 +4934,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr "מיין לפי % ירד <small>הכי הרבה→הכי מעט</small>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "מיין לפי גיל <small>החדש ביותר←הישן ביותר</small>"
|
||||
|
||||
+199
-116
@@ -6,7 +6,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2026\n"
|
||||
"Language-Team: Italian (https://app.transifex.com/sabnzbd/teams/111101/it/)\n"
|
||||
@@ -122,7 +122,6 @@ msgstr "SABnzbd %s avviato"
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "Arresto di SABnzbd terminato"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr "Segnale %s ricevuto, salvataggio e uscita in corso..."
|
||||
@@ -270,15 +269,13 @@ msgstr "Il server richiede nome utente e password."
|
||||
msgid "Connection Successful!"
|
||||
msgstr "Connessione riuscita!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Autenticazione fallita, controlla nome utente/password."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgid ""
|
||||
"Server %s took %d ms to respond. On high-latency connections, increasing "
|
||||
"'Articles per request' to a value between 5 and 10 can improve download "
|
||||
"speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
"Troppe connessioni, si prega di mettere in pausa il download o riprovare più"
|
||||
" tardi"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
@@ -295,12 +292,12 @@ msgid "Default"
|
||||
msgstr "Predefinito"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr "Disco pieno! Messa in pausa forzata"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr "Errore del disco durante la creazione del file %s"
|
||||
|
||||
@@ -566,8 +563,8 @@ msgid "Resuming"
|
||||
msgstr "Ripresa in corso"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "In pausa"
|
||||
|
||||
@@ -607,20 +604,8 @@ msgid "Fatal error in Downloader"
|
||||
msgstr "Errore fatale nel Downloader"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Troppe connessioni al server %s [%s]"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr ""
|
||||
"Accesso da troppi indirizzi IP diversi al server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgstr "Accesso fallito per il server %s [%s]"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
@@ -811,14 +796,23 @@ msgstr ""
|
||||
"sparsi. Per dettagli e possibili soluzioni, vedi: "
|
||||
"https://sabnzbd.org/wiki/advanced/direct-write"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Connessione rifiutata da:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr "Connessione rifiutata con hostname \"%s\" da:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr ""
|
||||
"Chiave API non corretta, Usa la chiave API da Config->Generale nel tuo "
|
||||
"programma di terze parti:"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Connessione rifiutata da:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key missing, please enter the api key from Config->General into your 3rd"
|
||||
@@ -828,21 +822,17 @@ msgstr ""
|
||||
"nel proprio programma di terze parti:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr ""
|
||||
"Chiave API non corretta, Usa la chiave API da Config->Generale nel tuo "
|
||||
"programma di terze parti:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr "Utente ha effettuato l'accesso all'interfaccia web"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Utente ha effettuato l'accesso"
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Autenticazione fallita, controlla nome utente/password."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
@@ -905,14 +895,6 @@ msgstr ""
|
||||
"La cartella della categoria non può essere una sottocartella della cartella "
|
||||
"dei download temporanei."
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "ERRORE:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid ""
|
||||
@@ -927,7 +909,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr "Avvisi"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Inattivo"
|
||||
@@ -958,8 +940,8 @@ msgstr "Limita velocità"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
@@ -969,8 +951,8 @@ msgid "min"
|
||||
msgstr "min"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Riprendi"
|
||||
|
||||
@@ -979,7 +961,7 @@ msgstr "Riprendi"
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Scansiona cartella sorvegliata"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Leggi tutti i feed RSS"
|
||||
|
||||
@@ -991,17 +973,17 @@ msgstr "Cartella Completi"
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Cartella Incompleti"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Risoluzione problemi"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Riavvia"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Riavvia senza login"
|
||||
|
||||
@@ -1076,6 +1058,23 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr "Lettura del file delle password %s fallita"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"%s in local_ranges is not a private network, list it in xff_trusted_hosts to"
|
||||
" trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1375,6 +1374,11 @@ msgstr "Processo fallito"
|
||||
msgid "Queue finished"
|
||||
msgstr "Coda terminata"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Utente ha effettuato l'accesso"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1386,7 +1390,7 @@ msgid "Open folder"
|
||||
msgstr "Apri cartella"
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Apri cartella completati"
|
||||
|
||||
@@ -1525,7 +1529,8 @@ msgstr "PROPAGAZIONE %s min"
|
||||
msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr "Scaricato in %s a una media di %sB/s"
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details
|
||||
#. page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr "Età"
|
||||
@@ -1618,6 +1623,23 @@ msgid ""
|
||||
msgstr ""
|
||||
"Se ricevi di nuovo questo messaggio di errore, prova un numero diverso.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"To keep using the low port, put a reverse proxy in front of SABnzbd "
|
||||
"instead.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1706,19 +1728,16 @@ msgstr ""
|
||||
"Impossibile collegarsi alla porta %s su %s. Qualche altro software sta "
|
||||
"usando la porta o SABnzbd è già in esecuzione."
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
msgstr "Impossibile avviare il browser, probabilmente non trovato"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr "Accesso negato"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr "Errore %s: È necessario fornire un nome utente e una password validi."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1847,6 +1866,10 @@ msgstr "Nessun file rar precedente corrispondente per %s"
|
||||
msgid "Removing %s failed"
|
||||
msgstr "Rimozione di %s fallita"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1900,45 +1923,7 @@ msgstr "Il feed RSS %s era vuoto"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Feed incompatibile"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr "Mostra interfaccia"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pausa per"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pausa per 5 minuti"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pausa per 15 minuti"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pausa per 30 minuti"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pausa per 1 ora"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pausa per 3 ore"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pausa per 6 ore"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Spegni"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr "Rimanente"
|
||||
|
||||
@@ -1946,6 +1931,44 @@ msgstr "Rimanente"
|
||||
msgid "Add NZB"
|
||||
msgstr "Aggiungi NZB"
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr "Mostra interfaccia"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Spegni"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pausa per"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pausa per 5 minuti"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pausa per 15 minuti"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pausa per 30 minuti"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pausa per 1 ora"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pausa per 3 ore"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pausa per 6 ore"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -1966,6 +1989,26 @@ msgstr "Pianificazione per server inesistente %s"
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Tentativo di impostare lo stato del server inesistente %s"
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"X-Forwarded-For received while verify_xff_header is off, turn it on and list"
|
||||
" %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"Forwarded is not supported, configure the proxy to send X-Forwarded-For "
|
||||
"instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2281,6 +2324,10 @@ msgstr "Host"
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr "Accedi"
|
||||
@@ -2870,10 +2917,6 @@ msgstr "Porta su cui SABnzbd dovrebbe essere in ascolto."
|
||||
msgid "Web Interface Theme"
|
||||
msgstr "Tema interfaccia web"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr "Scegli un tema."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr "Nome utente SABnzbd"
|
||||
@@ -3594,9 +3637,10 @@ msgstr ""
|
||||
"processo."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgid ""
|
||||
"The queue will resort every 30 seconds if % downloaded or Remaining Size is "
|
||||
"selected."
|
||||
msgstr ""
|
||||
"La coda verrà riordinata ogni 30 secondi se è selezionato % scaricato."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Propagation delay"
|
||||
@@ -3735,8 +3779,8 @@ msgid "Naming"
|
||||
msgstr "Denominazione"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgstr "Quanto può essere scaricato questo mese (K/M/G)"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
|
||||
#. Reset day of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4729,6 +4773,14 @@ msgstr "Elimina"
|
||||
msgid "Filename"
|
||||
msgstr "Nome file"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Spazio libero"
|
||||
@@ -4737,6 +4789,17 @@ msgstr "Spazio libero"
|
||||
msgid "Temp Folder"
|
||||
msgstr "Cartella temporanea"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Search by name, or refine with filters <code>cat:</code>, "
|
||||
"<code>status:</code> and <code>priority:</code> (Queue). For example: "
|
||||
"<code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr "Operazioni multiple"
|
||||
@@ -4745,6 +4808,10 @@ msgstr "Operazioni multiple"
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr "Tieni premuto il tasto Maiusc per selezionare un intervallo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr "Seleziona tutto"
|
||||
@@ -4778,6 +4845,10 @@ msgstr ""
|
||||
msgid "WARNING:"
|
||||
msgstr "ATTENZIONE:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "ERRORE:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr "Recupera"
|
||||
@@ -4814,6 +4885,14 @@ msgstr "Colonne extra della coda"
|
||||
msgid "Extra history columns"
|
||||
msgstr "Colonne extra della cronologia"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr "pagina"
|
||||
@@ -4990,6 +5069,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr "Ordina per % scaricato <small>Più→Meno</small>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Ordina per Età <small>Più vecchio→Più nuovo</small>"
|
||||
|
||||
+197
-110
@@ -6,7 +6,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2026\n"
|
||||
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"
|
||||
@@ -116,7 +116,6 @@ msgstr "SABnzbd %s startet"
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd er nå avsluttet"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr "Signal %s mottatt, lagrer og avslutter..."
|
||||
@@ -248,14 +247,13 @@ msgstr "Server krever brukernavn og passord."
|
||||
msgid "Connection Successful!"
|
||||
msgstr "Tilkobling lyktes!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Godkjenning mislyktes, kontroller brukernavn og passord."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgid ""
|
||||
"Server %s took %d ms to respond. On high-latency connections, increasing "
|
||||
"'Articles per request' to a value between 5 and 10 can improve download "
|
||||
"speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
"For mange tilkoblinger, sett nedlasting på pause eller prøv igjen senere"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
@@ -272,12 +270,12 @@ msgid "Default"
|
||||
msgstr "Standard"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr "Disken er full! Pauser..."
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr "Diskfeil under opprettelse av fil %s"
|
||||
|
||||
@@ -520,8 +518,8 @@ msgid "Resuming"
|
||||
msgstr "Gjenopptar"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "Pauset"
|
||||
|
||||
@@ -559,19 +557,9 @@ msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "For mange tilkoblinger til server %s [%s]"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgstr "Kunne ikke logge inn på server %s [%s]"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Connecting %s@%s failed, message=%s"
|
||||
@@ -750,11 +738,20 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr ""
|
||||
"API-nøkkel er feil, bruk API-nøkkel fra Konfigurasjon->Generelt i ditt "
|
||||
"tredjepartsprogram:"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -766,21 +763,17 @@ msgstr ""
|
||||
"ditt tredjepartsprogram:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr ""
|
||||
"API-nøkkel er feil, bruk API-nøkkel fra Konfigurasjon->Generelt i ditt "
|
||||
"tredjepartsprogram:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr "Bruker logget inn i webgrensesnitt"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Bruker pålogget"
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Godkjenning mislyktes, kontroller brukernavn og passord."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
@@ -841,14 +834,6 @@ msgid ""
|
||||
"Category folder cannot be a subfolder of the Temporary Download Folder."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "FEIL:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr "Tilbake"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid ""
|
||||
@@ -861,7 +846,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr "Advarsler"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Ledig"
|
||||
@@ -892,8 +877,8 @@ msgstr "Hastighetsbegrensning"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Stans midlertidig"
|
||||
|
||||
@@ -903,8 +888,8 @@ msgid "min"
|
||||
msgstr "minutt"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Gjenoppta"
|
||||
|
||||
@@ -913,7 +898,7 @@ msgstr "Gjenoppta"
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Sjekk overvåkingsmappe"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Les alle RSS-kanaler"
|
||||
|
||||
@@ -925,17 +910,17 @@ msgstr "Ferdig mappe"
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Ufullstendig mappe"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Feilsøking"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Starte på nytt"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Restart uten å logge inn"
|
||||
|
||||
@@ -1006,6 +991,23 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"%s in local_ranges is not a private network, list it in xff_trusted_hosts to"
|
||||
" trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1296,6 +1298,11 @@ msgstr "Jobb mislyktes"
|
||||
msgid "Queue finished"
|
||||
msgstr "Køen er ferdig"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Bruker pålogget"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1307,7 +1314,7 @@ msgid "Open folder"
|
||||
msgstr ""
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Åpne fullført mappe"
|
||||
|
||||
@@ -1446,7 +1453,8 @@ msgstr ""
|
||||
msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr "Hentet filer på %s med gjenomsnitts hastighet på %sB/s"
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details
|
||||
#. page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr "Tid"
|
||||
@@ -1538,6 +1546,23 @@ msgid ""
|
||||
"If you get this error message again, please try a different number.<br>"
|
||||
msgstr "Prøv et annet nummer hvis du får denne feilmeldingen på nytt.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"To keep using the low port, put a reverse proxy in front of SABnzbd "
|
||||
"instead.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1624,19 +1649,16 @@ msgid ""
|
||||
"SABnzbd is already running."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
msgstr "Kan ikke starte webserveren, ble sannsynlig vis ikke funnet"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr "Ingen tilgang"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr "Feil %s: Du må oppgi et gyldig brukernavn og passord."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1765,6 +1787,10 @@ msgstr ""
|
||||
msgid "Removing %s failed"
|
||||
msgstr "Fjerning av %s mislyktes"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1818,45 +1844,7 @@ msgstr "RSS-kilde %s var tom"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Ukompatibel nyhetsstrøm"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr "Vis grensesnitt"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pause for"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pause 5 minutter"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pause 15 minutter"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pause 30 minutter"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pause 1 time"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pause 3 timer"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pause 6 timer"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Avslutt"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr "Gjenstår"
|
||||
|
||||
@@ -1864,6 +1852,44 @@ msgstr "Gjenstår"
|
||||
msgid "Add NZB"
|
||||
msgstr "Legg til NZB"
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr "Vis grensesnitt"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Avslutt"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pause for"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pause 5 minutter"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pause 15 minutter"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pause 30 minutter"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pause 1 time"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pause 3 timer"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pause 6 timer"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -1884,6 +1910,26 @@ msgstr "Skjema for ikke eksisterende server %s"
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Forsøker å sette status på ikke-eksisterende server %s"
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"X-Forwarded-For received while verify_xff_header is off, turn it on and list"
|
||||
" %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"Forwarded is not supported, configure the proxy to send X-Forwarded-For "
|
||||
"instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2199,6 +2245,10 @@ msgstr "Adresse"
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr "Logg på"
|
||||
@@ -2779,10 +2829,6 @@ msgstr "Porten som SABnzbd skal bruke."
|
||||
msgid "Web Interface Theme"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr "SABnzbd Brukernavn"
|
||||
@@ -3452,7 +3498,9 @@ msgid "Automatically sort jobs in the queue when a new job is added."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgid ""
|
||||
"The queue will resort every 30 seconds if % downloaded or Remaining Size is "
|
||||
"selected."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3584,8 +3632,8 @@ msgid "Naming"
|
||||
msgstr "Filnavn"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgstr "Hvor mye can lastes ned denne måneden (K/M/G)"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
|
||||
#. Reset day of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4529,6 +4577,14 @@ msgstr "Fjern"
|
||||
msgid "Filename"
|
||||
msgstr "Filnavn"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Ledig plass"
|
||||
@@ -4537,6 +4593,17 @@ msgstr "Ledig plass"
|
||||
msgid "Temp Folder"
|
||||
msgstr "Midlertidig Mappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Search by name, or refine with filters <code>cat:</code>, "
|
||||
"<code>status:</code> and <code>priority:</code> (Queue). For example: "
|
||||
"<code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr "Multioperasjoner"
|
||||
@@ -4545,6 +4612,10 @@ msgstr "Multioperasjoner"
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr "Hold shift-tasten for å velge et område"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr "Merk alle"
|
||||
@@ -4578,6 +4649,10 @@ msgstr ""
|
||||
msgid "WARNING:"
|
||||
msgstr "ADVARSEL:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "FEIL:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr "Hent"
|
||||
@@ -4614,6 +4689,14 @@ msgstr ""
|
||||
msgid "Extra history columns"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr "Jobb"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Hendelser"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr "side"
|
||||
@@ -4782,6 +4865,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sorter etter alder <small>Eldst→Ny</small>"
|
||||
|
||||
+199
-116
@@ -8,7 +8,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2026\n"
|
||||
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"
|
||||
@@ -123,7 +123,6 @@ msgstr "SABnzbd %s is gestart"
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd is afgesloten"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr "Signaal %s ontvangen, opslaan en afsluiten..."
|
||||
@@ -269,14 +268,13 @@ msgstr "Server heeft een gebruikersnaam en een wachtwoord nodig."
|
||||
msgid "Connection Successful!"
|
||||
msgstr "Succesvol verbonden!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Inloggen mislukt, controleer gebruikersnaam en wachtwoord."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgid ""
|
||||
"Server %s took %d ms to respond. On high-latency connections, increasing "
|
||||
"'Articles per request' to a value between 5 and 10 can improve download "
|
||||
"speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
"Te veel verbindingen, onderbreek het downloaden of probeer later nog eens."
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
@@ -293,12 +291,12 @@ msgid "Default"
|
||||
msgstr "Standaard"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr "Schijf is vol; gedwongen pauze"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr "Schrijffout bij opslaan van bestand %s"
|
||||
|
||||
@@ -566,8 +564,8 @@ msgid "Resuming"
|
||||
msgstr "Hervatten"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "Gepauzeerd"
|
||||
|
||||
@@ -607,20 +605,8 @@ msgid "Fatal error in Downloader"
|
||||
msgstr "Onherstelbare fout in de Downloader"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Te veel verbindingen met server %s [%s]"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr ""
|
||||
"Teveel verschillende IP-adressen probeerde in te loggen op server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgstr "Aanmelden bij server %s mislukt [%s]"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
@@ -813,14 +799,23 @@ msgstr ""
|
||||
"ondersteunt. Zie voor details en mogelijke oplossingen: "
|
||||
"https://sabnzbd.org/wiki/advanced/direct-write"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Verbinding geweigerd van: "
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr "Verbinding met hostnaam \"%s\" geweigerd van:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr ""
|
||||
"API-sleutel incorrect; vul de API-sleutel van 'Configuratie' => 'Algemeen' "
|
||||
"in bij het externe programma:"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr "Verbinding geweigerd van: "
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key missing, please enter the api key from Config->General into your 3rd"
|
||||
@@ -830,21 +825,17 @@ msgstr ""
|
||||
"in bij het externe programma:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr ""
|
||||
"API-sleutel incorrect; vul de API-sleutel van 'Configuratie' => 'Algemeen' "
|
||||
"in bij het externe programma:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr "Gebruiker heeft ingelogd"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Gebruiker ingelogd"
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Inloggen mislukt, controleer gebruikersnaam en wachtwoord."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
@@ -907,14 +898,6 @@ msgstr ""
|
||||
"Een Categorie specifieke map mag niet een map in de Tijdelijke download map "
|
||||
"zijn."
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "FOUT:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr "Terug"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid ""
|
||||
@@ -929,7 +912,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr "Meldingen"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Rust"
|
||||
@@ -960,8 +943,8 @@ msgstr "Beperk snelheid"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Pauze"
|
||||
|
||||
@@ -971,8 +954,8 @@ msgid "min"
|
||||
msgstr "min"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Doorgaan"
|
||||
|
||||
@@ -981,7 +964,7 @@ msgstr "Doorgaan"
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Bewaakte map uitlezen"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Lees alle RSS-feeds uit"
|
||||
|
||||
@@ -993,17 +976,17 @@ msgstr "Map voltooid"
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Tijdelijke download map"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Probleemoplosser"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Herstart"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Herstarten zonder login"
|
||||
|
||||
@@ -1079,6 +1062,23 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr "Kan het wachtwoord bestand niet uitlezen %s"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"%s in local_ranges is not a private network, list it in xff_trusted_hosts to"
|
||||
" trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1378,6 +1378,11 @@ msgstr "Download mislukt"
|
||||
msgid "Queue finished"
|
||||
msgstr "Wachtrij voltooid"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr "Gebruiker ingelogd"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1389,7 +1394,7 @@ msgid "Open folder"
|
||||
msgstr "Open map"
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Open map met voltooide downloads"
|
||||
|
||||
@@ -1528,7 +1533,8 @@ msgstr "VERSPREIDINGSWACHTTIJD %s min"
|
||||
msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr "Gedownload in %s met een gemiddelde snelheid van %sB/s"
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details
|
||||
#. page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr "Leeftijd"
|
||||
@@ -1620,6 +1626,23 @@ msgid ""
|
||||
"If you get this error message again, please try a different number.<br>"
|
||||
msgstr "Als je dit bericht weer krijgt, probeer dan een ander nummer.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"To keep using the low port, put a reverse proxy in front of SABnzbd "
|
||||
"instead.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1708,19 +1731,16 @@ msgstr ""
|
||||
"Kan niet binden aan poort %s van %s. Andere software gebruikt deze poort of "
|
||||
"SABnzbd is al actief."
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
msgstr "Kan de web-browser niet starten, geen gevonden"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr "Toegang geweigerd"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr "Fout %s: Je moet een geldige gebruikersnaam en wachtwoord invullen."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1850,6 +1870,10 @@ msgstr "Geen voorgaand rar-bestand gevonden bij %s"
|
||||
msgid "Removing %s failed"
|
||||
msgstr "Verwijderen van %s mislukt"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1903,45 +1927,7 @@ msgstr "RSS-feed %s is leeg"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Ongeschikte RSS-feed"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr "Toon webinterface"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pauzeer"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pauzeer 5 minuten"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pauzeer 15 minuten"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pauzeer 30 minuten"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pauzeer 1 uur"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pauzeer 3 uur"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pauzeer 6 uur"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Afsluiten"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr "Nog te doen"
|
||||
|
||||
@@ -1949,6 +1935,44 @@ msgstr "Nog te doen"
|
||||
msgid "Add NZB"
|
||||
msgstr "NZB toevoegen"
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr "Toon webinterface"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Afsluiten"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pauzeer"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pauzeer 5 minuten"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pauzeer 15 minuten"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pauzeer 30 minuten"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pauzeer 1 uur"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pauzeer 3 uur"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pauzeer 6 uur"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -1969,6 +1993,26 @@ msgstr "Taak voor niet bestaande server %s"
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Poging de status van niet-bestaande server %s in te stellen"
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"X-Forwarded-For received while verify_xff_header is off, turn it on and list"
|
||||
" %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"Forwarded is not supported, configure the proxy to send X-Forwarded-For "
|
||||
"instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2284,6 +2328,10 @@ msgstr "Server"
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr "Aanmelden"
|
||||
@@ -2872,10 +2920,6 @@ msgstr "Poort waar op SABnzbd luistert."
|
||||
msgid "Web Interface Theme"
|
||||
msgstr "Webinterface Stijl"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr "Kies een stijl voor de webinterface."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr "Gebruikersnaam"
|
||||
@@ -3595,10 +3639,10 @@ msgstr ""
|
||||
"wordt toegevoegd"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgid ""
|
||||
"The queue will resort every 30 seconds if % downloaded or Remaining Size is "
|
||||
"selected."
|
||||
msgstr ""
|
||||
"De wachtrij wordt elke 30 seconden opnieuw gesorteerd als de optie % "
|
||||
"gedownload is gekozen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Propagation delay"
|
||||
@@ -3737,8 +3781,8 @@ msgid "Naming"
|
||||
msgstr "Naamgeving"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgstr "Hoeval mag deze maand worden gedownload (K/M/G)"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
|
||||
#. Reset day of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4729,6 +4773,14 @@ msgstr "Verwijder"
|
||||
msgid "Filename"
|
||||
msgstr "Bestandsnaam"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Vrije ruimte"
|
||||
@@ -4737,6 +4789,17 @@ msgstr "Vrije ruimte"
|
||||
msgid "Temp Folder"
|
||||
msgstr "Tijdelijke map"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Search by name, or refine with filters <code>cat:</code>, "
|
||||
"<code>status:</code> and <code>priority:</code> (Queue). For example: "
|
||||
"<code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr "Meervoudige bewerking"
|
||||
@@ -4745,6 +4808,10 @@ msgstr "Meervoudige bewerking"
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr "Houdt Shift toets ingedrukt om meer te selecteren"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr "Selecteer alles"
|
||||
@@ -4777,6 +4844,10 @@ msgstr "Wanneer SABnzbd opnieuw is gestart, gaat dit venster vanzelf weg!"
|
||||
msgid "WARNING:"
|
||||
msgstr "WAARSCHUWING:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "FOUT:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr "Ophalen"
|
||||
@@ -4813,6 +4884,14 @@ msgstr "Extra kolommen aan wachtrij toevoegen"
|
||||
msgid "Extra history columns"
|
||||
msgstr "Extra kolommen aan geschiedenis toevoegen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr "Voortgang"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Acties"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr "Pagina"
|
||||
@@ -4990,6 +5069,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr "Sorteer Op % Gedownload <small>Meest→Minst</small>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sorteer op Leeftijd <small>Oud→Nieuw</small>"
|
||||
|
||||
+197
-111
@@ -6,7 +6,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2026\n"
|
||||
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"
|
||||
@@ -114,7 +114,6 @@ msgstr "Uruchomiono SABnzbd %s"
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd został wyłączony"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr "Odebrano sygnał %s, zapisywanie i zamykanie programu..."
|
||||
@@ -246,15 +245,13 @@ msgstr "Serwer wymaga podania nazwy użytkownika i hasła."
|
||||
msgid "Connection Successful!"
|
||||
msgstr "Połączenie udane!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Błąd połączenia, sprawdź nazwę użytkownika i hasło."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgid ""
|
||||
"Server %s took %d ms to respond. On high-latency connections, increasing "
|
||||
"'Articles per request' to a value between 5 and 10 can improve download "
|
||||
"speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
"Zbyt wiele połączeń, proszę wstrzymać pobieranie lub spróbować ponownie "
|
||||
"później"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
@@ -271,12 +268,12 @@ msgid "Default"
|
||||
msgstr "Domyślne"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr "Dysk pełny! Wstrzymuję pobieranie"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr "Błąd dysku podczas tworzenia pliku %s"
|
||||
|
||||
@@ -519,8 +516,8 @@ msgid "Resuming"
|
||||
msgstr "Wznawianie"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "Wstrzymano"
|
||||
|
||||
@@ -560,19 +557,9 @@ msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Zbyt wiele połączeń do serwera %s [%s]"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgstr "Błąd logowania do serwera %s [%s]"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Connecting %s@%s failed, message=%s"
|
||||
@@ -753,11 +740,20 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr ""
|
||||
"Klucz API jest nieprawidłowy, użyj klucza API z sekcji Konfiguracja->Ogólne "
|
||||
"w zewnętrznym programie:"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -769,21 +765,17 @@ msgstr ""
|
||||
"do zewnętrznego programu:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr ""
|
||||
"Klucz API jest nieprawidłowy, użyj klucza API z sekcji Konfiguracja->Ogólne "
|
||||
"w zewnętrznym programie:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr ""
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr ""
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Błąd połączenia, sprawdź nazwę użytkownika i hasło."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
@@ -844,14 +836,6 @@ msgid ""
|
||||
"Category folder cannot be a subfolder of the Temporary Download Folder."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "BŁĄD:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr "Powrót"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid ""
|
||||
@@ -864,7 +848,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr "Ostrzeżenia"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Bezczynny"
|
||||
@@ -895,8 +879,8 @@ msgstr "Ogranicz prędkość"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Wstrzymaj"
|
||||
|
||||
@@ -906,8 +890,8 @@ msgid "min"
|
||||
msgstr "minuta"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Wznów"
|
||||
|
||||
@@ -916,7 +900,7 @@ msgstr "Wznów"
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Przeszukaj obserwowany katalog"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Czytaj wszystkie kanały RSS"
|
||||
|
||||
@@ -928,17 +912,17 @@ msgstr "Katalog zakończonych"
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Katalog niezakończonych"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Rozwiązywanie problemów"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Uruchom ponownie"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Restart bez logowania"
|
||||
|
||||
@@ -1009,6 +993,23 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"%s in local_ranges is not a private network, list it in xff_trusted_hosts to"
|
||||
" trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1301,6 +1302,11 @@ msgstr "Zadanie nie powiodło się"
|
||||
msgid "Queue finished"
|
||||
msgstr "Kolejka ukończona"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr ""
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1312,7 +1318,7 @@ msgid "Open folder"
|
||||
msgstr ""
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Otwórz katalog zakończonych"
|
||||
|
||||
@@ -1451,7 +1457,8 @@ msgstr ""
|
||||
msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr "Pobrano w %s ze średnią %sB/s"
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details
|
||||
#. page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr "Wiek"
|
||||
@@ -1544,6 +1551,23 @@ msgid ""
|
||||
msgstr ""
|
||||
"Jeśli ponownie otrzymasz ten sam błąd, spróbuj zmienić numer portu.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"To keep using the low port, put a reverse proxy in front of SABnzbd "
|
||||
"instead.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1630,20 +1654,17 @@ msgid ""
|
||||
"SABnzbd is already running."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
msgstr ""
|
||||
"Nie można uruchomić przeglądarki, prawdopodobnie nie została znaleziona"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr "Brak dostępu"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr "Błąd %s: należy podać prawidłową nazwę użytkownika i hasło."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1774,6 +1795,10 @@ msgstr ""
|
||||
msgid "Removing %s failed"
|
||||
msgstr "Usuwanie %s nie powiodło się"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1827,45 +1852,7 @@ msgstr "Kanał RSS %s był pusty"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Niekompatybilny kanał"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr "Pokaż interfejs"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Wstrzymaj na"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Wstrzymaj na 5 minut"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Wstrzymaj na 15 minut"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Wstrzymaj na 30 minut"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Wstrzymaj na 1 godzinę"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Wstrzymaj na 2 godziny"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Wstrzymaj na 6 godzin"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Zakończ"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr "Pozostało"
|
||||
|
||||
@@ -1873,6 +1860,44 @@ msgstr "Pozostało"
|
||||
msgid "Add NZB"
|
||||
msgstr "Dodaj NZB"
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr "Pokaż interfejs"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Zakończ"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Wstrzymaj na"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Wstrzymaj na 5 minut"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Wstrzymaj na 15 minut"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Wstrzymaj na 30 minut"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Wstrzymaj na 1 godzinę"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Wstrzymaj na 2 godziny"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Wstrzymaj na 6 godzin"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -1893,6 +1918,26 @@ msgstr "Harmonogram dla nieistniejącego serwera %s"
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Próba ustawienia statusu nieistniejącego serwera %s"
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"X-Forwarded-For received while verify_xff_header is off, turn it on and list"
|
||||
" %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"Forwarded is not supported, configure the proxy to send X-Forwarded-For "
|
||||
"instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2208,6 +2253,10 @@ msgstr "Host"
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr ""
|
||||
@@ -2787,10 +2836,6 @@ msgstr "Port, na którym ma nasłuchiwać SABnzbd"
|
||||
msgid "Web Interface Theme"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr "Użytkownik SABnzbd"
|
||||
@@ -3463,7 +3508,9 @@ msgid "Automatically sort jobs in the queue when a new job is added."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgid ""
|
||||
"The queue will resort every 30 seconds if % downloaded or Remaining Size is "
|
||||
"selected."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3595,8 +3642,8 @@ msgid "Naming"
|
||||
msgstr "Nazwy"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgstr "Ile danych można pobrać w miesiącu (K/M/G)"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
|
||||
#. Reset day of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4541,6 +4588,14 @@ msgstr "Usuń"
|
||||
msgid "Filename"
|
||||
msgstr "Nazwa pliku"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Wolne miejsce"
|
||||
@@ -4549,6 +4604,17 @@ msgstr "Wolne miejsce"
|
||||
msgid "Temp Folder"
|
||||
msgstr "Folder tymczasowy"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Search by name, or refine with filters <code>cat:</code>, "
|
||||
"<code>status:</code> and <code>priority:</code> (Queue). For example: "
|
||||
"<code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr "Operacje na wielu"
|
||||
@@ -4557,6 +4623,10 @@ msgstr "Operacje na wielu"
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr "Przytrzymaj klawisz Shift, aby zaznaczyć zakres"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr "Sprawdź wszystkie"
|
||||
@@ -4590,6 +4660,10 @@ msgstr ""
|
||||
msgid "WARNING:"
|
||||
msgstr "UWAGA:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "BŁĄD:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr "Pobierz"
|
||||
@@ -4626,6 +4700,14 @@ msgstr ""
|
||||
msgid "Extra history columns"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr "Postęp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Działania"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr "strona"
|
||||
@@ -4794,6 +4876,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sortuj według wieku <small>Najstarsze→Najnowsze</small>"
|
||||
|
||||
+197
-111
@@ -7,7 +7,7 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-5.1.0\n"
|
||||
"Project-Id-Version: SABnzbd-5.2.0\n"
|
||||
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2026\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
|
||||
@@ -119,7 +119,6 @@ msgstr "SABnzbd %s iniciado"
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "Encerramento do SABnzbd concluído"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/__init__.py
|
||||
msgid "Signal %s caught, saving and exiting..."
|
||||
msgstr "Sinal %s encontrado. Salvando e saindo..."
|
||||
@@ -252,15 +251,13 @@ msgstr "Servidor requer usuário e senha."
|
||||
msgid "Connection Successful!"
|
||||
msgstr "Conexão com Sucesso!"
|
||||
|
||||
#: sabnzbd/api.py, sabnzbd/interface.py
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Falha de autenticação, verifique usuário / senha."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/api.py
|
||||
msgid "Too many connections, please pause downloading or try again later"
|
||||
msgid ""
|
||||
"Server %s took %d ms to respond. On high-latency connections, increasing "
|
||||
"'Articles per request' to a value between 5 and 10 can improve download "
|
||||
"speed. See: https://sabnzbd.org/wiki/advanced/nntp-pipelining"
|
||||
msgstr ""
|
||||
"Excesso de conexões, por favor pause o download ou tente novamente mais "
|
||||
"tarde"
|
||||
|
||||
#: sabnzbd/api.py
|
||||
msgid "Resolving address"
|
||||
@@ -277,12 +274,12 @@ msgid "Default"
|
||||
msgstr "Padrão"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr "Disco cheio! Forçando Pausa"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/assembler.py
|
||||
#: sabnzbd/assembler.py, sabnzbd/decoder.py
|
||||
msgid "Disk error on creating file %s"
|
||||
msgstr "Erro de disco na criação do arquivo %s"
|
||||
|
||||
@@ -533,8 +530,8 @@ msgid "Resuming"
|
||||
msgstr "Continuar"
|
||||
|
||||
#. PP status - Priority pick list
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/downloader.py, sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Paused"
|
||||
msgstr "Pausado"
|
||||
|
||||
@@ -574,19 +571,9 @@ msgid "Fatal error in Downloader"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Too many connections to server %s [%s]"
|
||||
msgstr "Excesso de conexões ao servidor %s [%s]"
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid ""
|
||||
"Login from too many different IP addresses to server %s [%s] - "
|
||||
"https://sabnzbd.org/multiple-adresses"
|
||||
msgid "Server %s reported: %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Failed login for server %s [%s]"
|
||||
msgstr "Falha de logon ao servidor %s [%s]"
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/downloader.py
|
||||
msgid "Connecting %s@%s failed, message=%s"
|
||||
@@ -765,11 +752,20 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection from:"
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Refused connection with hostname \"%s\" from:"
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgstr ""
|
||||
"Chave de API incorreta. Use a chave de API de Configuração->Geral em seu "
|
||||
"programa de terceiros:"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py, sabnzbd/security.py
|
||||
msgid "Refused connection from:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
@@ -781,21 +777,17 @@ msgstr ""
|
||||
"Configuração->Geral em seu programa de terceiros:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"API Key incorrect, Use the api key from Config->General in your 3rd party "
|
||||
"program:"
|
||||
msgid "Too many failed login attempts, try again later."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Login attempt refused, too many failures from %s"
|
||||
msgstr ""
|
||||
"Chave de API incorreta. Use a chave de API de Configuração->Geral em seu "
|
||||
"programa de terceiros:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "User logged in to the web interface"
|
||||
msgstr ""
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/interface.py, sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr ""
|
||||
msgid "Authentication failed, check username/password."
|
||||
msgstr "Falha de autenticação, verifique usuário / senha."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/interface.py
|
||||
@@ -856,14 +848,6 @@ msgid ""
|
||||
"Category folder cannot be a subfolder of the Temporary Download Folder."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py, sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "ERRO:"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
msgstr "Voltar"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/internetspeed.py
|
||||
msgid ""
|
||||
@@ -876,7 +860,7 @@ msgstr ""
|
||||
msgid "Warnings"
|
||||
msgstr "Alertas"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Idle"
|
||||
msgstr "Inativo"
|
||||
@@ -907,8 +891,8 @@ msgstr "Limitar Velocidade"
|
||||
|
||||
#. Notification - Pause downloading - Four way switch for duplicates -
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause"
|
||||
msgstr "Pausar"
|
||||
|
||||
@@ -918,8 +902,8 @@ msgid "min"
|
||||
msgstr "min"
|
||||
|
||||
#. Notification - Resume downloading - Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtray.py,
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/notifier.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Resume"
|
||||
msgstr "Continuar"
|
||||
|
||||
@@ -928,7 +912,7 @@ msgstr "Continuar"
|
||||
msgid "Scan watched folder"
|
||||
msgstr "Varrer pasta de assistidos"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Read all RSS feeds"
|
||||
msgstr "Ler todos os feeds RSS"
|
||||
|
||||
@@ -940,17 +924,17 @@ msgstr "Pasta de Finalizados"
|
||||
msgid "Incomplete Folder"
|
||||
msgstr "Pasta de Não-Finalizados"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Troubleshoot"
|
||||
msgstr "Resolução de problemas"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py,
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py,
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtray.py
|
||||
#: sabnzbd/macosmenu.py, sabnzbd/sabtraywin.py
|
||||
msgid "Restart without login"
|
||||
msgstr "Reinicie sem login"
|
||||
|
||||
@@ -1021,6 +1005,23 @@ msgstr ""
|
||||
msgid "Failed to read the password file %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid entry in local_ranges: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid ""
|
||||
"%s in local_ranges is not a private network, list it in xff_trusted_hosts to"
|
||||
" trust it"
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "Ignoring invalid network in the forwarded-header trust list: %s"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/misc.py
|
||||
msgid "[%s] The command in build_command is undefined."
|
||||
@@ -1310,6 +1311,11 @@ msgstr "Tarefa com falha"
|
||||
msgid "Queue finished"
|
||||
msgstr "Fila concluída"
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "User logged in"
|
||||
msgstr ""
|
||||
|
||||
#. Notification
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Other Messages"
|
||||
@@ -1321,7 +1327,7 @@ msgid "Open folder"
|
||||
msgstr ""
|
||||
|
||||
#. Notification action
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/notifier.py, sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Open complete folder"
|
||||
msgstr "Abrir pasta de finalizados"
|
||||
|
||||
@@ -1460,7 +1466,8 @@ msgstr ""
|
||||
msgid "Downloaded in %s at an average of %sB/s"
|
||||
msgstr "Baixado em %s a uma média de %sB/s"
|
||||
|
||||
#. Job details page, file age column header
|
||||
#. Config->RSS filter-type selection menu (e.g. ">3d", "<12h") - Job details
|
||||
#. page, file age column header
|
||||
#: sabnzbd/nzb/object.py, sabnzbd/skintext.py
|
||||
msgid "Age"
|
||||
msgstr "Idade"
|
||||
@@ -1554,6 +1561,23 @@ msgstr ""
|
||||
"Se você receber esta mensagem de erro outra vez, tente um número "
|
||||
"diferente.<br>"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
" SABnzbd is not allowed to use port %s on %s.<br>\n"
|
||||
" Low port numbers are reserved for privileged processes on most systems,\n"
|
||||
" so the port itself is available but cannot be claimed.<br>\n"
|
||||
" <br>\n"
|
||||
" Either run SABnzbd with the privileges needed for that port, or restart it\n"
|
||||
" with a port number of 1024 or higher."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"To keep using the low port, put a reverse proxy in front of SABnzbd "
|
||||
"instead.<br>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1640,19 +1664,16 @@ msgid ""
|
||||
"SABnzbd is already running."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid ""
|
||||
"Not allowed to bind to port %s on %s. Low ports need elevated privileges."
|
||||
msgstr ""
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Cannot launch the browser, probably not found"
|
||||
msgstr "Não é possível iniciar o navegador. Provavelmente não foi encontrado"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Access denied"
|
||||
msgstr "Acesso negado"
|
||||
|
||||
#: sabnzbd/panic.py
|
||||
msgid "Error %s: You need to provide a valid username and password."
|
||||
msgstr "Erro %s: Você precisa fornecer um nome de usuário e senha válidos."
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Old queue detected, use Status->Repair to convert the queue"
|
||||
@@ -1784,6 +1805,10 @@ msgstr ""
|
||||
msgid "Removing %s failed"
|
||||
msgstr "A remoção de %s falhou"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Removed %s files with unwanted extensions"
|
||||
msgstr ""
|
||||
|
||||
#. Error message
|
||||
#: sabnzbd/powersup.py
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1838,45 +1863,7 @@ msgstr "O feed RSS %s estava vazio"
|
||||
msgid "Incompatible feed"
|
||||
msgstr "Feed incompatível"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
msgid "Show interface"
|
||||
msgstr "Exibir interface"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pausa de"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pausar por 5 minutos"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pausar por 15 minutos"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pausar por 30 minutos"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pausar por 1 hora"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pausar por 3 horas"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pausar por 6 horas"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Encerrar"
|
||||
|
||||
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Remaining"
|
||||
msgstr "Restante"
|
||||
|
||||
@@ -1884,6 +1871,44 @@ msgstr "Restante"
|
||||
msgid "Add NZB"
|
||||
msgstr "Adicionar NZB"
|
||||
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py
|
||||
msgid "Show interface"
|
||||
msgstr "Exibir interface"
|
||||
|
||||
#. Config->Scheduling
|
||||
#: sabnzbd/sabtraylinux.py, sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Shutdown"
|
||||
msgstr "Encerrar"
|
||||
|
||||
#. Queue page button or entry box
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for"
|
||||
msgstr "Pausa de"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 5 minutes"
|
||||
msgstr "Pausar por 5 minutos"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 15 minutes"
|
||||
msgstr "Pausar por 15 minutos"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 30 minutes"
|
||||
msgstr "Pausar por 30 minutos"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 1 hour"
|
||||
msgstr "Pausar por 1 hora"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 3 hours"
|
||||
msgstr "Pausar por 3 horas"
|
||||
|
||||
#: sabnzbd/sabtraywin.py, sabnzbd/skintext.py
|
||||
msgid "Pause for 6 hours"
|
||||
msgstr "Pausar por 6 horas"
|
||||
|
||||
#. Warning message
|
||||
#: sabnzbd/scheduler.py
|
||||
msgid "Bad schedule %s at %s:%s"
|
||||
@@ -1904,6 +1929,26 @@ msgstr "Agendamento para um servidor inexistente %s"
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Tentando definir o status do servidor inexistente %s"
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"X-Forwarded-For received while verify_xff_header is off, turn it on and list"
|
||||
" %s in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For received from %s, which is not in xff_trusted_hosts"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid "X-Forwarded-For from %s does not name a client address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/security.py
|
||||
msgid ""
|
||||
"Forwarded is not supported, configure the proxy to send X-Forwarded-For "
|
||||
"instead"
|
||||
msgstr ""
|
||||
|
||||
#. PP phase "filejoin"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Join files"
|
||||
@@ -2219,6 +2264,10 @@ msgstr "Host"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Log in"
|
||||
msgstr ""
|
||||
@@ -2798,10 +2847,6 @@ msgstr "Porta onde o SABnzbd será ativado."
|
||||
msgid "Web Interface Theme"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Choose a theme."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "SABnzbd Username"
|
||||
msgstr "Usuário do SABnzbd"
|
||||
@@ -3475,7 +3520,9 @@ msgid "Automatically sort jobs in the queue when a new job is added."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "The queue will resort every 30 seconds if % downloaded is selected."
|
||||
msgid ""
|
||||
"The queue will resort every 30 seconds if % downloaded or Remaining Size is "
|
||||
"selected."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3607,8 +3654,8 @@ msgid "Naming"
|
||||
msgstr "Nomeando"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "How much can be downloaded this month (K/M/G)"
|
||||
msgstr "Quanto pode ser baixado neste mês (K/M/G)"
|
||||
msgid "How much can be downloaded this Quota period (K/M/G)"
|
||||
msgstr ""
|
||||
|
||||
#. Reset day of the download quota
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -4552,6 +4599,14 @@ msgstr "Eliminar"
|
||||
msgid "Filename"
|
||||
msgstr "Nome do arquivo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Toggle SABnzbd navigation menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Open SABnzbd main menu"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Free Space"
|
||||
msgstr "Espaço Disponível"
|
||||
@@ -4560,6 +4615,17 @@ msgstr "Espaço Disponível"
|
||||
msgid "Temp Folder"
|
||||
msgstr "Pasta temporária"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Clear search"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Search by name, or refine with filters <code>cat:</code>, "
|
||||
"<code>status:</code> and <code>priority:</code> (Queue). For example: "
|
||||
"<code>my show cat:tv</code>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multi-Operations"
|
||||
msgstr "Multi-Operações"
|
||||
@@ -4568,6 +4634,10 @@ msgstr "Multi-Operações"
|
||||
msgid "Hold shift key to select a range"
|
||||
msgstr "Segure a tecla shift para selecionar um intervalo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Select job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Check all"
|
||||
msgstr "Selecionar todos"
|
||||
@@ -4601,6 +4671,10 @@ msgstr ""
|
||||
msgid "WARNING:"
|
||||
msgstr "AVISO:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "ERROR:"
|
||||
msgstr "ERRO:"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Fetch"
|
||||
msgstr "Obter"
|
||||
@@ -4637,6 +4711,14 @@ msgstr ""
|
||||
msgid "Extra history columns"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Progress"
|
||||
msgstr "Progresso"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Actions"
|
||||
msgstr "Ações"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "page"
|
||||
msgstr "página"
|
||||
@@ -4805,6 +4887,10 @@ msgstr ""
|
||||
msgid "Sort by % downloaded <small>Most→Least</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Remaining Size <small>Smallest→Largest</small>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Ordenar por Idade <small>Mais antigo→Mais novo</small>"
|
||||
|
||||
Loaded 100 of 233 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user