Compare commits
1 Commits
v0.28.0
...
Frooodle-p
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5f84f3fc9 |
2
.github/ISSUE_TEMPLATE/2-feature.yml
vendored
2
.github/ISSUE_TEMPLATE/2-feature.yml
vendored
@@ -1,8 +1,6 @@
|
|||||||
name: Feature Request
|
name: Feature Request
|
||||||
description: Submit a new feature request.
|
description: Submit a new feature request.
|
||||||
title: "[Feature Request]: "
|
title: "[Feature Request]: "
|
||||||
labels:
|
|
||||||
- enhancement
|
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
2
.github/dependabot.yml
vendored
2
.github/dependabot.yml
vendored
@@ -9,8 +9,6 @@ updates:
|
|||||||
directory: "/" # Location of package manifests
|
directory: "/" # Location of package manifests
|
||||||
schedule:
|
schedule:
|
||||||
interval: "weekly"
|
interval: "weekly"
|
||||||
open-pull-requests-limit: 10
|
|
||||||
rebase-strategy: "auto"
|
|
||||||
- package-ecosystem: "docker"
|
- package-ecosystem: "docker"
|
||||||
directory: "/" # Location of Dockerfile
|
directory: "/" # Location of Dockerfile
|
||||||
schedule:
|
schedule:
|
||||||
|
|||||||
45
.github/labeler-config.yml
vendored
45
.github/labeler-config.yml
vendored
@@ -1,53 +1,20 @@
|
|||||||
Translation:
|
translation:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file: 'src/main/resources/messages_*_*.properties'
|
- any-glob-to-any-file: 'src/main/resources/messages_*_*.properties'
|
||||||
- any-glob-to-any-file: 'scripts/ignore_translation.toml'
|
|
||||||
|
|
||||||
Front End:
|
Front End:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file: 'src/main/resources/templates/**/*'
|
- any-glob-to-any-file: 'src/main/resources/templates/**'
|
||||||
- any-glob-to-any-file: 'src/main/resources/static/**/*'
|
|
||||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/controller/web/**'
|
|
||||||
|
|
||||||
Java:
|
java:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file: 'src/main/java/**/*.java'
|
- any-glob-to-any-file: 'src/main/java/**/*.java'
|
||||||
|
|
||||||
Back End:
|
documentation:
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/config/security/**/*'
|
|
||||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/config/model/provider/**/*'
|
|
||||||
- any-glob-to-any-file: 'src/main/resources/settings.yml.template'
|
|
||||||
- any-glob-to-any-file: 'src/main/resources/banner.txt'
|
|
||||||
|
|
||||||
Security:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/config/security/**/*'
|
|
||||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/config/model/provider/**/*'
|
|
||||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/config/model/AuthenticationType.java'
|
|
||||||
|
|
||||||
API:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/controller/web/MetricsController.java'
|
|
||||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/controller/api/**/*'
|
|
||||||
|
|
||||||
Documentation:
|
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file: '**/*.md'
|
- any-glob-to-any-file: '**/*.md'
|
||||||
- any-glob-to-any-file: 'scripts/counter_translation.py'
|
|
||||||
- any-glob-to-any-file: 'scripts/ignore_translation.toml'
|
|
||||||
|
|
||||||
Docker:
|
docker:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file: 'Dockerfile'
|
- any-glob-to-any-file: 'Dockerfile'
|
||||||
- any-glob-to-any-file: 'Dockerfile-*'
|
- any-glob-to-any-file: 'Dockerfile-*'
|
||||||
- any-glob-to-any-file: 'exampleYmlFiles/*.yml'
|
|
||||||
|
|
||||||
Test:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: 'cucumber/**/*'
|
|
||||||
- any-glob-to-any-file: 'src/test**/*'
|
|
||||||
|
|
||||||
Github:
|
|
||||||
- changed-files:
|
|
||||||
- any-glob-to-any-file: '.github/**/*'
|
|
||||||
4
.github/labels.yml
vendored
4
.github/labels.yml
vendored
@@ -88,6 +88,4 @@
|
|||||||
description: "API-related issues or pull requests"
|
description: "API-related issues or pull requests"
|
||||||
- name: "Test"
|
- name: "Test"
|
||||||
color: "FF9E1F"
|
color: "FF9E1F"
|
||||||
description: "Testing-related issues or pull requests"
|
description: "Testing-related issues or pull requests"
|
||||||
- name: "Stale"
|
|
||||||
color: "000000"
|
|
||||||
1
.github/scripts/check_tabulator.py
vendored
1
.github/scripts/check_tabulator.py
vendored
@@ -1,5 +1,4 @@
|
|||||||
"""check_tabulator.py"""
|
"""check_tabulator.py"""
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|||||||
60
.github/workflows/build.yml
vendored
60
.github/workflows/build.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: Build repo
|
name: "Build repo"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -17,72 +17,20 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
|
||||||
jdk-version: [17, 21]
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up JDK ${{ matrix.jdk-version }}
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v4
|
||||||
with:
|
with:
|
||||||
java-version: ${{ matrix.jdk-version }}
|
java-version: "17"
|
||||||
distribution: "temurin"
|
distribution: "temurin"
|
||||||
|
|
||||||
- name: Set up Gradle
|
- uses: gradle/actions/setup-gradle@v3
|
||||||
uses: gradle/actions/setup-gradle@v3
|
|
||||||
with:
|
with:
|
||||||
gradle-version: 8.7
|
gradle-version: 8.7
|
||||||
|
|
||||||
- name: Build with Gradle
|
- name: Build with Gradle
|
||||||
run: ./gradlew build --no-build-cache
|
run: ./gradlew build --no-build-cache
|
||||||
|
|
||||||
docker-compose-tests:
|
|
||||||
# if: github.event_name == 'push' && github.ref == 'refs/heads/main' ||
|
|
||||||
# (github.event_name == 'pull_request' &&
|
|
||||||
# contains(github.event.pull_request.labels.*.name, 'licenses') == false &&
|
|
||||||
# (
|
|
||||||
# contains(github.event.pull_request.labels.*.name, 'Front End') ||
|
|
||||||
# contains(github.event.pull_request.labels.*.name, 'Java') ||
|
|
||||||
# contains(github.event.pull_request.labels.*.name, 'Back End') ||
|
|
||||||
# contains(github.event.pull_request.labels.*.name, 'Security') ||
|
|
||||||
# contains(github.event.pull_request.labels.*.name, 'API') ||
|
|
||||||
# contains(github.event.pull_request.labels.*.name, 'Docker') ||
|
|
||||||
# contains(github.event.pull_request.labels.*.name, 'Test')
|
|
||||||
# )
|
|
||||||
# )
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up Java 17
|
|
||||||
uses: actions/setup-java@v4
|
|
||||||
with:
|
|
||||||
java-version: "17"
|
|
||||||
distribution: "adopt"
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Install Docker Compose
|
|
||||||
run: |
|
|
||||||
sudo curl -SL "https://github.com/docker/compose/releases/download/v2.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
|
||||||
sudo chmod +x /usr/local/bin/docker-compose
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@v4
|
|
||||||
with:
|
|
||||||
python-version: "3.7"
|
|
||||||
|
|
||||||
- name: Pip requirements
|
|
||||||
run: |
|
|
||||||
pip install -r ./cucumber/requirements.txt
|
|
||||||
|
|
||||||
- name: Run Docker Compose Tests
|
|
||||||
run: |
|
|
||||||
chmod +x ./test.sh
|
|
||||||
./test.sh
|
|
||||||
|
|||||||
@@ -11,9 +11,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/labeler@v5
|
||||||
- name: Apply Labels
|
|
||||||
uses: actions/labeler@v5
|
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
configuration-path: .github/labeler-config.yml
|
configuration-path: .github/labeler-config.yml
|
||||||
16
.github/workflows/licenses-update.yml
vendored
16
.github/workflows/licenses-update.yml
vendored
@@ -45,7 +45,6 @@ jobs:
|
|||||||
git diff --staged --quiet || echo "CHANGES_DETECTED=true" >> $GITHUB_ENV
|
git diff --staged --quiet || echo "CHANGES_DETECTED=true" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Create Pull Request
|
- name: Create Pull Request
|
||||||
id: cpr
|
|
||||||
if: env.CHANGES_DETECTED == 'true'
|
if: env.CHANGES_DETECTED == 'true'
|
||||||
uses: peter-evans/create-pull-request@v6
|
uses: peter-evans/create-pull-request@v6
|
||||||
with:
|
with:
|
||||||
@@ -59,20 +58,5 @@ jobs:
|
|||||||
body: |
|
body: |
|
||||||
Auto-generated by [create-pull-request][1]
|
Auto-generated by [create-pull-request][1]
|
||||||
[1]: https://github.com/peter-evans/create-pull-request
|
[1]: https://github.com/peter-evans/create-pull-request
|
||||||
labels: licenses
|
|
||||||
draft: false
|
draft: false
|
||||||
delete-branch: true
|
delete-branch: true
|
||||||
|
|
||||||
- name: Auto approve
|
|
||||||
if: steps.cpr.outputs.pull-request-operation == 'created'
|
|
||||||
run: gh pr review --approve "${{ steps.cpr.outputs.pull-request-number }}"
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Enable auto-merge
|
|
||||||
if: steps.cpr.outputs.pull-request-operation == 'created'
|
|
||||||
uses: peter-evans/enable-pull-request-automerge@v3
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
pull-request-number: ${{ steps.cpr.outputs.pull-request-number }}
|
|
||||||
merge-method: squash # Choose the merge method: merge, squash, or rebase
|
|
||||||
|
|||||||
2
.github/workflows/sync_files.yml
vendored
2
.github/workflows/sync_files.yml
vendored
@@ -51,7 +51,6 @@ jobs:
|
|||||||
[1]: https://github.com/peter-evans/create-pull-request
|
[1]: https://github.com/peter-evans/create-pull-request
|
||||||
draft: false
|
draft: false
|
||||||
delete-branch: true
|
delete-branch: true
|
||||||
labels: github-actions
|
|
||||||
sync-readme:
|
sync-readme:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
@@ -89,4 +88,3 @@ jobs:
|
|||||||
[1]: https://github.com/peter-evans/create-pull-request
|
[1]: https://github.com/peter-evans/create-pull-request
|
||||||
draft: false
|
draft: false
|
||||||
delete-branch: true
|
delete-branch: true
|
||||||
labels: Documentation,Translation,github-actions
|
|
||||||
|
|||||||
47
.github/workflows/test.yml
vendored
Normal file
47
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
name: Docker Compose Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- "src/**"
|
||||||
|
- "**.gradle"
|
||||||
|
- "!src/main/java/resources/messages*"
|
||||||
|
- "exampleYmlFiles/**"
|
||||||
|
- "Dockerfile"
|
||||||
|
- "Dockerfile**"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Java 17
|
||||||
|
uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
java-version: "17"
|
||||||
|
distribution: "adopt"
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Install Docker Compose
|
||||||
|
run: |
|
||||||
|
sudo curl -SL "https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||||
|
# sudo chmod +x /usr/local/bin/docker-compose
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: "3.7"
|
||||||
|
|
||||||
|
- name: Pip requirements
|
||||||
|
run: |
|
||||||
|
pip install -r ./cucumber/requirements.txt
|
||||||
|
|
||||||
|
- name: Run Docker Compose Tests
|
||||||
|
run: |
|
||||||
|
chmod +x ./test.sh
|
||||||
|
./test.sh
|
||||||
47
.gitignore
vendored
47
.gitignore
vendored
@@ -1,3 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
### Eclipse ###
|
### Eclipse ###
|
||||||
.metadata
|
.metadata
|
||||||
bin/
|
bin/
|
||||||
@@ -20,6 +22,7 @@ customFiles/
|
|||||||
configs/
|
configs/
|
||||||
watchedFolders/
|
watchedFolders/
|
||||||
|
|
||||||
|
|
||||||
# Gradle
|
# Gradle
|
||||||
.gradle
|
.gradle
|
||||||
.lock
|
.lock
|
||||||
@@ -116,48 +119,12 @@ watchedFolders/
|
|||||||
*.db
|
*.db
|
||||||
/build
|
/build
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
/.vscode
|
||||||
__pycache__/
|
/.idea
|
||||||
*.py[cod]
|
|
||||||
*.pyo
|
|
||||||
|
|
||||||
# Virtual environments
|
|
||||||
.env*
|
|
||||||
.venv*
|
|
||||||
env*/
|
|
||||||
venv*/
|
|
||||||
ENV/
|
|
||||||
env.bak/
|
|
||||||
venv.bak/
|
|
||||||
|
|
||||||
# VS Code
|
|
||||||
/.vscode/**/*
|
|
||||||
!/.vscode/settings.json
|
|
||||||
|
|
||||||
# IntelliJ IDEA
|
|
||||||
.idea/
|
|
||||||
*.iml
|
|
||||||
out/
|
|
||||||
|
|
||||||
# Ignore Mac DS_Store files
|
# Ignore Mac DS_Store files
|
||||||
.DS_Store
|
.DS_Store
|
||||||
**/.DS_Store
|
**/.DS_Store
|
||||||
|
|
||||||
# cucumber
|
#cucumber
|
||||||
/cucumber/reports/**
|
/cucumber/reports/**
|
||||||
|
|
||||||
# Certs
|
|
||||||
*.p12
|
|
||||||
*.pem
|
|
||||||
*.crt
|
|
||||||
*.cer
|
|
||||||
*.der
|
|
||||||
*.key
|
|
||||||
*.csr
|
|
||||||
|
|
||||||
# cache
|
|
||||||
.ruff_cache
|
|
||||||
.mypy_cache
|
|
||||||
.pytest_cache
|
|
||||||
.ipynb_checkpoints
|
|
||||||
|
|
||||||
53
.vscode/settings.json
vendored
53
.vscode/settings.json
vendored
@@ -1,53 +0,0 @@
|
|||||||
{
|
|
||||||
"java.compile.nullAnalysis.mode": "automatic",
|
|
||||||
"files.eol": "auto",
|
|
||||||
"java.configuration.updateBuildConfiguration": "interactive",
|
|
||||||
"black-formatter.args": ["--line-length", "127"],
|
|
||||||
"flake8.args": ["--max-line-length", "127"],
|
|
||||||
"pylint.args": ["max-line-length", "127"],
|
|
||||||
"[java]": {
|
|
||||||
"editor.tabSize": 4,
|
|
||||||
"editor.detectIndentation": false,
|
|
||||||
"editor.rulers": [127]
|
|
||||||
},
|
|
||||||
"[python]": {
|
|
||||||
"editor.tabSize": 2,
|
|
||||||
"editor.detectIndentation": false,
|
|
||||||
"editor.rulers": [127]
|
|
||||||
},
|
|
||||||
"[gradle-build]": {
|
|
||||||
"editor.tabSize": 4,
|
|
||||||
"editor.detectIndentation": false,
|
|
||||||
"editor.rulers": [127]
|
|
||||||
},
|
|
||||||
"[gradle]": {
|
|
||||||
"editor.tabSize": 4,
|
|
||||||
"editor.detectIndentation": false,
|
|
||||||
"editor.rulers": [127]
|
|
||||||
},
|
|
||||||
"[html]": {
|
|
||||||
"editor.tabSize": 2,
|
|
||||||
"editor.rulers": [127],
|
|
||||||
"files.trimFinalNewlines": false,
|
|
||||||
"files.insertFinalNewline": false
|
|
||||||
},
|
|
||||||
"[javascript]": {
|
|
||||||
"editor.tabSize": 2,
|
|
||||||
"editor.rulers": [127]
|
|
||||||
},
|
|
||||||
"[yaml]": {
|
|
||||||
"files.trimFinalNewlines": false,
|
|
||||||
"files.insertFinalNewline": false
|
|
||||||
},
|
|
||||||
"diffEditor.maxComputationTime": 0,
|
|
||||||
"editor.wordSegmenterLocales": null,
|
|
||||||
"editor.guides.bracketPairs": "active",
|
|
||||||
"editor.guides.bracketPairsHorizontal": "active",
|
|
||||||
"files.insertFinalNewline": true,
|
|
||||||
"files.trimFinalNewlines": true,
|
|
||||||
"files.trimTrailingWhitespace": true,
|
|
||||||
"editor.indentSize": "tabSize",
|
|
||||||
"editor.stickyScroll.enabled": false,
|
|
||||||
"editor.minimap.enabled": false,
|
|
||||||
"editor.formatOnSave": true
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Main stage
|
# Main stage
|
||||||
FROM alpine:3.20.2
|
FROM alpine:3.20.0
|
||||||
|
|
||||||
# Copy necessary files
|
# Copy necessary files
|
||||||
COPY scripts /scripts
|
COPY scripts /scripts
|
||||||
@@ -45,8 +45,8 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et
|
|||||||
# CV
|
# CV
|
||||||
py3-opencv \
|
py3-opencv \
|
||||||
# python3/pip
|
# python3/pip
|
||||||
python3 \
|
python3 && \
|
||||||
py3-pip && \
|
wget https://bootstrap.pypa.io/get-pip.py -qO - | python3 - --break-system-packages --no-cache-dir --upgrade && \
|
||||||
# uno unoconv and HTML
|
# uno unoconv and HTML
|
||||||
pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint && \
|
pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint && \
|
||||||
mv /usr/share/tessdata /usr/share/tessdata-original && \
|
mv /usr/share/tessdata /usr/share/tessdata-original && \
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ RUN DOCKER_ENABLE_SECURITY=true \
|
|||||||
./gradlew clean build
|
./gradlew clean build
|
||||||
|
|
||||||
# Main stage
|
# Main stage
|
||||||
FROM alpine:3.20.2
|
FROM alpine:3.20.0
|
||||||
|
|
||||||
# Copy necessary files
|
# Copy necessary files
|
||||||
COPY scripts /scripts
|
COPY scripts /scripts
|
||||||
@@ -61,8 +61,8 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et
|
|||||||
# CV
|
# CV
|
||||||
py3-opencv \
|
py3-opencv \
|
||||||
# python3/pip
|
# python3/pip
|
||||||
python3 \
|
python3 && \
|
||||||
py3-pip && \
|
wget https://bootstrap.pypa.io/get-pip.py -qO - | python3 - --break-system-packages --no-cache-dir --upgrade && \
|
||||||
# uno unoconv and HTML
|
# uno unoconv and HTML
|
||||||
pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint && \
|
pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint && \
|
||||||
mv /usr/share/tessdata /usr/share/tessdata-original && \
|
mv /usr/share/tessdata /usr/share/tessdata-original && \
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# use alpine
|
# use alpine
|
||||||
FROM alpine:3.20.2
|
FROM alpine:3.20.0
|
||||||
|
|
||||||
ARG VERSION_TAG
|
ARG VERSION_TAG
|
||||||
|
|
||||||
|
|||||||
66
README.md
66
README.md
@@ -165,46 +165,43 @@ Please view https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToUseOCR
|
|||||||
|
|
||||||
## Supported Languages
|
## Supported Languages
|
||||||
|
|
||||||
Stirling PDF currently supports 38!
|
Stirling PDF currently supports 33!
|
||||||
|
|
||||||
| Language | Progress |
|
| Language | Progress |
|
||||||
| ------------------------------------------- | -------------------------------------- |
|
| ------------------------------------------- | -------------------------------------- |
|
||||||
| Arabic (العربية) (ar_AR) |  |
|
|
||||||
| Basque (Euskara) (eu_ES) |  |
|
|
||||||
| Bulgarian (Български) (bg_BG) |  |
|
|
||||||
| Catalan (Català) (ca_CA) |  |
|
|
||||||
| Croatian (Hrvatski) (hr_HR) |  |
|
|
||||||
| Czech (Česky) (cs_CZ) |  |
|
|
||||||
| Danish (Dansk) (da_DK) |  |
|
|
||||||
| Dutch (Nederlands) (nl_NL) |  |
|
|
||||||
| English (English) (en_GB) |  |
|
| English (English) (en_GB) |  |
|
||||||
| English (US) (en_US) |  |
|
| English (US) (en_US) |  |
|
||||||
| French (Français) (fr_FR) |  |
|
| Arabic (العربية) (ar_AR) |  |
|
||||||
| German (Deutsch) (de_DE) |  |
|
| German (Deutsch) (de_DE) |  |
|
||||||
| Greek (Ελληνικά) (el_GR) |  |
|
| French (Français) (fr_FR) |  |
|
||||||
| Hindi (हिंदी) (hi_IN) |  |
|
| Spanish (Español) (es_ES) |  |
|
||||||
| Hungarian (Magyar) (hu_HU) |  |
|
|
||||||
| Indonesia (Bahasa Indonesia) (id_ID) |  |
|
|
||||||
| Irish (Gaeilge) (ga_IE) |  |
|
|
||||||
| Italian (Italiano) (it_IT) |  |
|
|
||||||
| Japanese (日本語) (ja_JP) |  |
|
|
||||||
| Korean (한국어) (ko_KR) |  |
|
|
||||||
| Norwegian (Norsk) (no_NB) |  |
|
|
||||||
| Polish (Polski) (pl_PL) |  |
|
|
||||||
| Portuguese (Português) (pt_PT) |  |
|
|
||||||
| Portuguese Brazilian (Português) (pt_BR) |  |
|
|
||||||
| Romanian (Română) (ro_RO) |  |
|
|
||||||
| Russian (Русский) (ru_RU) |  |
|
|
||||||
| Sebian Latin alphabet (Srpski) (sr_LATN_RS) |  |
|
|
||||||
| Simplified Chinese (简体中文) (zh_CN) |  |
|
| Simplified Chinese (简体中文) (zh_CN) |  |
|
||||||
| Slovakian (Slovensky) (sk_SK) |  |
|
| Traditional Chinese (繁體中文) (zh_TW) |  |
|
||||||
| Spanish (Español) (es_ES) |  |
|
| Catalan (Català) (ca_CA) |  |
|
||||||
|
| Italian (Italiano) (it_IT) |  |
|
||||||
| Swedish (Svenska) (sv_SE) |  |
|
| Swedish (Svenska) (sv_SE) |  |
|
||||||
| Thai (ไทย) (th_TH) |  |
|
| Polish (Polski) (pl_PL) |  |
|
||||||
| Traditional Chinese (繁體中文) (zh_TW) |  |
|
| Romanian (Română) (ro_RO) |  |
|
||||||
| Turkish (Türkçe) (tr_TR) |  |
|
| Korean (한국어) (ko_KR) |  |
|
||||||
| Ukrainian (Українська) (uk_UA) |  |
|
| Portuguese Brazilian (Português) (pt_BR) |  |
|
||||||
| Vietnamese (Tiếng Việt) (vi_VN) |  |
|
| Portuguese (Português) (pt_PT) |  |
|
||||||
|
| Russian (Русский) (ru_RU) |  |
|
||||||
|
| Basque (Euskara) (eu_ES) |  |
|
||||||
|
| Japanese (日本語) (ja_JP) |  |
|
||||||
|
| Dutch (Nederlands) (nl_NL) |  |
|
||||||
|
| Greek (Ελληνικά) (el_GR) |  |
|
||||||
|
| Turkish (Türkçe) (tr_TR) |  |
|
||||||
|
| Indonesia (Bahasa Indonesia) (id_ID) |  |
|
||||||
|
| Hindi (हिंदी) (hi_IN) |  |
|
||||||
|
| Hungarian (Magyar) (hu_HU) |  |
|
||||||
|
| Bulgarian (Български) (bg_BG) |  |
|
||||||
|
| Sebian Latin alphabet (Srpski) (sr_LATN_RS) |  |
|
||||||
|
| Ukrainian (Українська) (uk_UA) |  |
|
||||||
|
| Slovakian (Slovensky) (sk_SK) |  |
|
||||||
|
| Czech (Česky) (cs_CZ) |  |
|
||||||
|
| Croatian (Hrvatski) (hr_HR) |  |
|
||||||
|
| Norwegian (Norsk) (no_NB) |  |
|
||||||
|
| Thai (ไทย) (th_TH) |  |
|
||||||
|
|
||||||
## Contributing (creating issues, translations, fixing bugs, etc.)
|
## Contributing (creating issues, translations, fixing bugs, etc.)
|
||||||
|
|
||||||
@@ -216,7 +213,7 @@ Stirling PDF allows easy customization of the app.
|
|||||||
Includes things like
|
Includes things like
|
||||||
|
|
||||||
- Custom application name
|
- Custom application name
|
||||||
- Custom slogans, icons, HTML, images CSS etc (via file overrides)
|
- Custom slogans, icons, HTML, images CSS etc (via file overrides)
|
||||||
|
|
||||||
There are two options for this, either using the generated settings file ``settings.yml``
|
There are two options for this, either using the generated settings file ``settings.yml``
|
||||||
This file is located in the ``/configs`` directory and follows standard YAML formatting
|
This file is located in the ``/configs`` directory and follows standard YAML formatting
|
||||||
@@ -266,7 +263,6 @@ security:
|
|||||||
clientId: '' # Client ID from your provider
|
clientId: '' # Client ID from your provider
|
||||||
clientSecret: '' # Client Secret from your provider
|
clientSecret: '' # Client Secret from your provider
|
||||||
autoCreateUser: false # set to 'true' to allow auto-creation of non-existing users
|
autoCreateUser: false # set to 'true' to allow auto-creation of non-existing users
|
||||||
blockRegistration: false # set to 'true' to deny login with SSO without prior registration by an admin
|
|
||||||
useAsUsername: email # Default is 'email'; custom fields can be used as the username
|
useAsUsername: email # Default is 'email'; custom fields can be used as the username
|
||||||
scopes: openid, profile, email # Specify the scopes for which the application will request permissions
|
scopes: openid, profile, email # Specify the scopes for which the application will request permissions
|
||||||
provider: google # Set this to your OAuth provider's name, e.g., 'google' or 'keycloak'
|
provider: google # Set this to your OAuth provider's name, e.g., 'google' or 'keycloak'
|
||||||
|
|||||||
94
build.gradle
94
build.gradle
@@ -1,32 +1,25 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id "java"
|
id "java"
|
||||||
id "org.springframework.boot" version "3.3.2"
|
id "org.springframework.boot" version "3.3.0"
|
||||||
id "io.spring.dependency-management" version "1.1.6"
|
id "io.spring.dependency-management" version "1.1.5"
|
||||||
id "org.springdoc.openapi-gradle-plugin" version "1.8.0"
|
id "org.springdoc.openapi-gradle-plugin" version "1.8.0"
|
||||||
id "io.swagger.swaggerhub" version "1.3.2"
|
id "io.swagger.swaggerhub" version "1.3.2"
|
||||||
id "edu.sc.seis.launch4j" version "3.0.6"
|
id "edu.sc.seis.launch4j" version "3.0.5"
|
||||||
id "com.diffplug.spotless" version "6.25.0"
|
id "com.diffplug.spotless" version "6.25.0"
|
||||||
id "com.github.jk1.dependency-license-report" version "2.9"
|
id "com.github.jk1.dependency-license-report" version "2.8"
|
||||||
}
|
}
|
||||||
|
|
||||||
import com.github.jk1.license.render.*
|
import com.github.jk1.license.render.*
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
springBootVersion = "3.3.2"
|
springBootVersion = "3.3.2"
|
||||||
pdfboxVersion = "3.0.3"
|
|
||||||
logbackVersion = "1.5.7"
|
|
||||||
imageioVersion = "3.11.0"
|
|
||||||
lombokVersion = "1.18.34"
|
|
||||||
bouncycastleVersion = "1.78.1"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "stirling.software"
|
group = "stirling.software"
|
||||||
version = "0.28.0"
|
version = "0.27.0"
|
||||||
|
|
||||||
java {
|
// 17 is lowest but we support and recommend 21
|
||||||
// 17 is lowest but we support and recommend 21
|
sourceCompatibility = "17"
|
||||||
sourceCompatibility = JavaVersion.VERSION_17
|
|
||||||
}
|
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
@@ -47,10 +40,8 @@ sourceSets {
|
|||||||
exclude "stirling/software/SPDF/controller/web/AccountWebController.java"
|
exclude "stirling/software/SPDF/controller/web/AccountWebController.java"
|
||||||
exclude "stirling/software/SPDF/controller/web/DatabaseWebController.java"
|
exclude "stirling/software/SPDF/controller/web/DatabaseWebController.java"
|
||||||
exclude "stirling/software/SPDF/model/ApiKeyAuthenticationToken.java"
|
exclude "stirling/software/SPDF/model/ApiKeyAuthenticationToken.java"
|
||||||
exclude "stirling/software/SPDF/model/AttemptCounter.java"
|
|
||||||
exclude "stirling/software/SPDF/model/Authority.java"
|
exclude "stirling/software/SPDF/model/Authority.java"
|
||||||
exclude "stirling/software/SPDF/model/PersistentLogin.java"
|
exclude "stirling/software/SPDF/model/PersistentLogin.java"
|
||||||
exclude "stirling/software/SPDF/model/SessionEntity.java"
|
|
||||||
exclude "stirling/software/SPDF/model/User.java"
|
exclude "stirling/software/SPDF/model/User.java"
|
||||||
exclude "stirling/software/SPDF/repository/**"
|
exclude "stirling/software/SPDF/repository/**"
|
||||||
}
|
}
|
||||||
@@ -106,15 +97,15 @@ tasks.wrapper {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
//security updates
|
//security updates
|
||||||
implementation "ch.qos.logback:logback-classic:$logbackVersion"
|
implementation "ch.qos.logback:logback-classic:1.5.6"
|
||||||
implementation "ch.qos.logback:logback-core:$logbackVersion"
|
implementation "ch.qos.logback:logback-core:1.5.6"
|
||||||
implementation "org.springframework:spring-webmvc:6.1.12"
|
implementation "org.springframework:spring-webmvc:6.1.9"
|
||||||
|
|
||||||
implementation("io.github.pixee:java-security-toolkit:1.2.0")
|
implementation("io.github.pixee:java-security-toolkit:1.1.3")
|
||||||
|
|
||||||
// implementation "org.yaml:snakeyaml:2.2"
|
// implementation "org.yaml:snakeyaml:2.2"
|
||||||
implementation 'com.github.Carleslc.Simple-YAML:Simple-Yaml:1.8.4'
|
implementation 'com.github.Carleslc.Simple-YAML:Simple-Yaml:1.8.4'
|
||||||
|
|
||||||
// Exclude Tomcat and include Jetty
|
// Exclude Tomcat and include Jetty
|
||||||
implementation("org.springframework.boot:spring-boot-starter-web:$springBootVersion") {
|
implementation("org.springframework.boot:spring-boot-starter-web:$springBootVersion") {
|
||||||
exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
|
exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
|
||||||
@@ -140,22 +131,22 @@ dependencies {
|
|||||||
implementation "org.apache.xmlgraphics:batik-all:1.17"
|
implementation "org.apache.xmlgraphics:batik-all:1.17"
|
||||||
|
|
||||||
// TwelveMonkeys
|
// TwelveMonkeys
|
||||||
implementation "com.twelvemonkeys.imageio:imageio-batik:$imageioVersion"
|
implementation "com.twelvemonkeys.imageio:imageio-batik:3.10.1"
|
||||||
implementation "com.twelvemonkeys.imageio:imageio-bmp:$imageioVersion"
|
implementation "com.twelvemonkeys.imageio:imageio-bmp:3.10.1"
|
||||||
// implementation "com.twelvemonkeys.imageio:imageio-hdr:$imageioVersion"
|
// implementation "com.twelvemonkeys.imageio:imageio-hdr:3.10.1"
|
||||||
// implementation "com.twelvemonkeys.imageio:imageio-icns:$imageioVersion"
|
// implementation "com.twelvemonkeys.imageio:imageio-icns:3.10.1"
|
||||||
// implementation "com.twelvemonkeys.imageio:imageio-iff:$imageioVersion"
|
// implementation "com.twelvemonkeys.imageio:imageio-iff:3.10.1"
|
||||||
implementation "com.twelvemonkeys.imageio:imageio-jpeg:$imageioVersion"
|
implementation "com.twelvemonkeys.imageio:imageio-jpeg:3.11.0"
|
||||||
// implementation "com.twelvemonkeys.imageio:imageio-pcx:$imageioVersion@
|
// implementation "com.twelvemonkeys.imageio:imageio-pcx:3.10.1"
|
||||||
// implementation "com.twelvemonkeys.imageio:imageio-pict:$imageioVersion"
|
// implementation "com.twelvemonkeys.imageio:imageio-pict:3.10.1"
|
||||||
// implementation "com.twelvemonkeys.imageio:imageio-pnm:$imageioVersion"
|
// implementation "com.twelvemonkeys.imageio:imageio-pnm:3.10.1"
|
||||||
// implementation "com.twelvemonkeys.imageio:imageio-psd:$imageioVersion"
|
// implementation "com.twelvemonkeys.imageio:imageio-psd:3.10.1"
|
||||||
// implementation "com.twelvemonkeys.imageio:imageio-sgi:$imageioVersion"
|
// implementation "com.twelvemonkeys.imageio:imageio-sgi:3.10.1"
|
||||||
// implementation "com.twelvemonkeys.imageio:imageio-tga:$imageioVersion"
|
// implementation "com.twelvemonkeys.imageio:imageio-tga:3.10.1"
|
||||||
// implementation "com.twelvemonkeys.imageio:imageio-thumbsdb:$imageioVersion"
|
// implementation "com.twelvemonkeys.imageio:imageio-thumbsdb:3.10.1"
|
||||||
implementation "com.twelvemonkeys.imageio:imageio-tiff:$imageioVersion"
|
implementation "com.twelvemonkeys.imageio:imageio-tiff:3.10.1"
|
||||||
implementation "com.twelvemonkeys.imageio:imageio-webp:$imageioVersion"
|
implementation "com.twelvemonkeys.imageio:imageio-webp:3.10.1"
|
||||||
// implementation "com.twelvemonkeys.imageio:imageio-xwd:$imageioVersion"
|
// implementation "com.twelvemonkeys.imageio:imageio-xwd:3.10.1"
|
||||||
|
|
||||||
implementation "commons-io:commons-io:2.16.1"
|
implementation "commons-io:commons-io:2.16.1"
|
||||||
implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0"
|
implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0"
|
||||||
@@ -167,36 +158,33 @@ dependencies {
|
|||||||
exclude group: "commons-logging", module: "commons-logging"
|
exclude group: "commons-logging", module: "commons-logging"
|
||||||
}
|
}
|
||||||
|
|
||||||
implementation ("org.apache.pdfbox:pdfbox:$pdfboxVersion") {
|
implementation ("org.apache.pdfbox:pdfbox:3.0.2") {
|
||||||
exclude group: "commons-logging", module: "commons-logging"
|
exclude group: "commons-logging", module: "commons-logging"
|
||||||
}
|
}
|
||||||
|
|
||||||
implementation ("org.apache.pdfbox:xmpbox:$pdfboxVersion") {
|
implementation ("org.apache.pdfbox:xmpbox:3.0.2") {
|
||||||
exclude group: "commons-logging", module: "commons-logging"
|
exclude group: "commons-logging", module: "commons-logging"
|
||||||
}
|
}
|
||||||
|
|
||||||
implementation 'org.apache.pdfbox:jbig2-imageio:3.0.4'
|
|
||||||
|
|
||||||
|
|
||||||
implementation "com.github.Carleslc.Simple-YAML:Simple-Yaml:1.8.4"
|
implementation "com.github.Carleslc.Simple-YAML:Simple-Yaml:1.8.4"
|
||||||
|
|
||||||
implementation "org.bouncycastle:bcprov-jdk18on:$bouncycastleVersion"
|
implementation "org.bouncycastle:bcprov-jdk18on:1.78.1"
|
||||||
implementation "org.bouncycastle:bcpkix-jdk18on:$bouncycastleVersion"
|
implementation "org.bouncycastle:bcpkix-jdk18on:1.78.1"
|
||||||
implementation "org.springframework.boot:spring-boot-starter-actuator:$springBootVersion"
|
implementation "org.springframework.boot:spring-boot-starter-actuator:$springBootVersion"
|
||||||
implementation "io.micrometer:micrometer-core:1.13.3"
|
implementation "io.micrometer:micrometer-core:1.13.0"
|
||||||
implementation group: "com.google.zxing", name: "core", version: "3.5.3"
|
implementation group: "com.google.zxing", name: "core", version: "3.5.3"
|
||||||
// https://mvnrepository.com/artifact/org.commonmark/commonmark
|
// https://mvnrepository.com/artifact/org.commonmark/commonmark
|
||||||
implementation "org.commonmark:commonmark:0.22.0"
|
implementation "org.commonmark:commonmark:0.22.0"
|
||||||
implementation "org.commonmark:commonmark-ext-gfm-tables:0.22.0"
|
implementation "org.commonmark:commonmark-ext-gfm-tables:0.22.0"
|
||||||
// https://mvnrepository.com/artifact/com.bucket4j/bucket4j_jdk17
|
// https://mvnrepository.com/artifact/com.bucket4j/bucket4j_jdk17
|
||||||
implementation "com.bucket4j:bucket4j_jdk17-core:8.13.1"
|
implementation "com.bucket4j:bucket4j_jdk17-core:8.12.1"
|
||||||
implementation "com.fathzer:javaluator:3.0.4"
|
|
||||||
|
implementation "com.fathzer:javaluator:3.0.4"
|
||||||
|
|
||||||
developmentOnly("org.springframework.boot:spring-boot-devtools:$springBootVersion")
|
developmentOnly("org.springframework.boot:spring-boot-devtools:$springBootVersion")
|
||||||
compileOnly "org.projectlombok:lombok:$lombokVersion"
|
compileOnly "org.projectlombok:lombok:1.18.32"
|
||||||
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
|
annotationProcessor "org.projectlombok:lombok:1.18.32"
|
||||||
|
|
||||||
testImplementation 'org.mockito:mockito-inline:5.2.0'
|
testImplementation 'org.mockito:mockito-inline:3.12.4'
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
tasks.withType(JavaCompile).configureEach {
|
||||||
@@ -207,7 +195,7 @@ compileJava {
|
|||||||
options.compilerArgs << "-parameters"
|
options.compilerArgs << "-parameters"
|
||||||
}
|
}
|
||||||
|
|
||||||
task writeVersion {
|
task writeVersion {
|
||||||
def propsFile = file("src/main/resources/version.properties")
|
def propsFile = file("src/main/resources/version.properties")
|
||||||
def props = new Properties()
|
def props = new Properties()
|
||||||
props.setProperty("version", version)
|
props.setProperty("version", version)
|
||||||
@@ -237,6 +225,6 @@ tasks.named("test") {
|
|||||||
useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
}
|
}
|
||||||
|
|
||||||
task printVersion {
|
task printVersion {
|
||||||
println project.version
|
println project.version
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
appVersion: 0.28.0
|
appVersion: 0.26.2
|
||||||
description: locally hosted web application that allows you to perform various operations
|
description: locally hosted web application that allows you to perform various operations
|
||||||
on PDF files
|
on PDF files
|
||||||
home: https://github.com/Stirling-Tools/Stirling-PDF
|
home: https://github.com/Stirling-Tools/Stirling-PDF
|
||||||
|
|||||||
@@ -62,10 +62,8 @@ spec:
|
|||||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
securityContext:
|
securityContext:
|
||||||
{{- toYaml .Values.containerSecurityContext | nindent 10 }}
|
{{- toYaml .Values.containerSecurityContext | nindent 10 }}
|
||||||
env:
|
|
||||||
- name: SYSTEM_ROOTURIPATH
|
|
||||||
value: {{ .Values.rootPath}}
|
|
||||||
{{- if .Values.envs }}
|
{{- if .Values.envs }}
|
||||||
|
env:
|
||||||
{{ toYaml .Values.envs | indent 8 }}
|
{{ toYaml .Values.envs | indent 8 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- if .Values.extraArgs }}
|
{{- if .Values.extraArgs }}
|
||||||
@@ -77,13 +75,13 @@ spec:
|
|||||||
containerPort: 8080
|
containerPort: 8080
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
path: {{ .Values.rootPath}}
|
path: /
|
||||||
port: http
|
port: http
|
||||||
{{ toYaml .Values.probes.livenessHttpGetConfig | indent 12 }}
|
{{ toYaml .Values.probes.livenessHttpGetConfig | indent 12 }}
|
||||||
{{ toYaml .Values.probes.liveness | indent 10 }}
|
{{ toYaml .Values.probes.liveness | indent 10 }}
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
path: {{ .Values.rootPath}}
|
path: /
|
||||||
port: http
|
port: http
|
||||||
{{ toYaml .Values.probes.readinessHttpGetConfig | indent 12 }}
|
{{ toYaml .Values.probes.readinessHttpGetConfig | indent 12 }}
|
||||||
{{ toYaml .Values.probes.readiness | indent 10 }}
|
{{ toYaml .Values.probes.readiness | indent 10 }}
|
||||||
|
|||||||
@@ -15,9 +15,6 @@ secret:
|
|||||||
commonLabels: {}
|
commonLabels: {}
|
||||||
# team_name: dev
|
# team_name: dev
|
||||||
|
|
||||||
# rootpath for the application
|
|
||||||
rootPath: /
|
|
||||||
|
|
||||||
envs: []
|
envs: []
|
||||||
# - name: UI_APP_NAME
|
# - name: UI_APP_NAME
|
||||||
# value: "Stirling PDF"
|
# value: "Stirling PDF"
|
||||||
@@ -27,6 +24,8 @@ envs: []
|
|||||||
# value: "Stirling PDF"
|
# value: "Stirling PDF"
|
||||||
# - name: ALLOW_GOOGLE_VISIBILITY
|
# - name: ALLOW_GOOGLE_VISIBILITY
|
||||||
# value: "true"
|
# value: "true"
|
||||||
|
# - name: APP_ROOT_PATH
|
||||||
|
# value: "/"
|
||||||
# - name: APP_LOCALE
|
# - name: APP_LOCALE
|
||||||
# value: "en_GB"
|
# value: "en_GB"
|
||||||
|
|
||||||
|
|||||||
@@ -92,10 +92,10 @@ Feature: API Validation
|
|||||||
| threshold | 90 |
|
| threshold | 90 |
|
||||||
| whitePercent | 99.9 |
|
| whitePercent | 99.9 |
|
||||||
When I send the API request to the endpoint "/api/v1/misc/remove-blanks"
|
When I send the API request to the endpoint "/api/v1/misc/remove-blanks"
|
||||||
Then the response content type should be "application/octet-stream"
|
Then the response content type should be "application/pdf"
|
||||||
And the response file should have extension ".zip"
|
|
||||||
And the response ZIP should contain 1 files
|
|
||||||
And the response file should have size greater than 0
|
And the response file should have size greater than 0
|
||||||
|
And the response PDF should contain 0 pages
|
||||||
|
And the response status code should be 200
|
||||||
|
|
||||||
@positive @flatten
|
@positive @flatten
|
||||||
Scenario: Flatten PDF
|
Scenario: Flatten PDF
|
||||||
@@ -127,4 +127,4 @@ Feature: API Validation
|
|||||||
And the response PDF metadata should include "Title" as "Sample Title"
|
And the response PDF metadata should include "Title" as "Sample Title"
|
||||||
And the response status code should be 200
|
And the response status code should be 200
|
||||||
|
|
||||||
|
|
||||||
@@ -25,11 +25,6 @@ ignore = [
|
|||||||
'text',
|
'text',
|
||||||
]
|
]
|
||||||
|
|
||||||
[da_DK]
|
|
||||||
ignore = [
|
|
||||||
'language.direction',
|
|
||||||
]
|
|
||||||
|
|
||||||
[de_DE]
|
[de_DE]
|
||||||
ignore = [
|
ignore = [
|
||||||
'AddStampRequest.alphabet',
|
'AddStampRequest.alphabet',
|
||||||
@@ -92,11 +87,6 @@ ignore = [
|
|||||||
'watermark.type.2',
|
'watermark.type.2',
|
||||||
]
|
]
|
||||||
|
|
||||||
[ga_IE]
|
|
||||||
ignore = [
|
|
||||||
'language.direction',
|
|
||||||
]
|
|
||||||
|
|
||||||
[hi_IN]
|
[hi_IN]
|
||||||
ignore = [
|
ignore = [
|
||||||
'language.direction',
|
'language.direction',
|
||||||
@@ -240,14 +230,6 @@ ignore = [
|
|||||||
'language.direction',
|
'language.direction',
|
||||||
]
|
]
|
||||||
|
|
||||||
[vi_VN]
|
|
||||||
ignore = [
|
|
||||||
'language.direction',
|
|
||||||
'pipeline.title',
|
|
||||||
'pipelineOptions.pipelineHeader',
|
|
||||||
'showJS.tags',
|
|
||||||
]
|
|
||||||
|
|
||||||
[zh_CN]
|
[zh_CN]
|
||||||
ignore = [
|
ignore = [
|
||||||
'language.direction',
|
'language.direction',
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ public class SPdfApplication {
|
|||||||
// Check if the BROWSER_OPEN environment variable is set to true
|
// Check if the BROWSER_OPEN environment variable is set to true
|
||||||
String browserOpenEnv = env.getProperty("BROWSER_OPEN");
|
String browserOpenEnv = env.getProperty("BROWSER_OPEN");
|
||||||
boolean browserOpen = browserOpenEnv != null && "true".equalsIgnoreCase(browserOpenEnv);
|
boolean browserOpen = browserOpenEnv != null && "true".equalsIgnoreCase(browserOpenEnv);
|
||||||
|
|
||||||
if (browserOpen) {
|
if (browserOpen) {
|
||||||
try {
|
try {
|
||||||
String url = "http://localhost:" + getNonStaticPort();
|
String url = "http://localhost:" + getNonStaticPort();
|
||||||
@@ -78,14 +79,13 @@ public class SPdfApplication {
|
|||||||
|
|
||||||
// custom javs settings file
|
// custom javs settings file
|
||||||
if (Files.exists(Paths.get("configs/custom_settings.yml"))) {
|
if (Files.exists(Paths.get("configs/custom_settings.yml"))) {
|
||||||
String existingLocation =
|
String existing = propertyFiles.getOrDefault("spring.config.additional-location", "");
|
||||||
propertyFiles.getOrDefault("spring.config.additional-location", "");
|
if (!existing.isEmpty()) {
|
||||||
if (!existingLocation.isEmpty()) {
|
existing += ",";
|
||||||
existingLocation += ",";
|
|
||||||
}
|
}
|
||||||
propertyFiles.put(
|
propertyFiles.put(
|
||||||
"spring.config.additional-location",
|
"spring.config.additional-location",
|
||||||
existingLocation + "file:configs/custom_settings.yml");
|
existing + "file:configs/custom_settings.yml");
|
||||||
} else {
|
} else {
|
||||||
logger.warn("Custom configuration file 'configs/custom_settings.yml' does not exist.");
|
logger.warn("Custom configuration file 'configs/custom_settings.yml' does not exist.");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,25 +32,25 @@ public class CleanUrlInterceptor implements HandlerInterceptor {
|
|||||||
String queryString = request.getQueryString();
|
String queryString = request.getQueryString();
|
||||||
if (queryString != null && !queryString.isEmpty()) {
|
if (queryString != null && !queryString.isEmpty()) {
|
||||||
String requestURI = request.getRequestURI();
|
String requestURI = request.getRequestURI();
|
||||||
Map<String, String> allowedParameters = new HashMap<>();
|
Map<String, String> parameters = new HashMap<>();
|
||||||
|
|
||||||
// Keep only the allowed parameters
|
// Keep only the allowed parameters
|
||||||
String[] queryParameters = queryString.split("&");
|
String[] queryParameters = queryString.split("&");
|
||||||
for (String param : queryParameters) {
|
for (String param : queryParameters) {
|
||||||
String[] keyValuePair = param.split("=");
|
String[] keyValue = param.split("=");
|
||||||
if (keyValuePair.length != 2) {
|
if (keyValue.length != 2) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (ALLOWED_PARAMS.contains(keyValuePair[0])) {
|
if (ALLOWED_PARAMS.contains(keyValue[0])) {
|
||||||
allowedParameters.put(keyValuePair[0], keyValuePair[1]);
|
parameters.put(keyValue[0], keyValue[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there are any parameters that are not allowed
|
// If there are any parameters that are not allowed
|
||||||
if (allowedParameters.size() != queryParameters.length) {
|
if (parameters.size() != queryParameters.length) {
|
||||||
// Construct new query string
|
// Construct new query string
|
||||||
StringBuilder newQueryString = new StringBuilder();
|
StringBuilder newQueryString = new StringBuilder();
|
||||||
for (Map.Entry<String, String> entry : allowedParameters.entrySet()) {
|
for (Map.Entry<String, String> entry : parameters.entrySet()) {
|
||||||
if (newQueryString.length() > 0) {
|
if (newQueryString.length() > 0) {
|
||||||
newQueryString.append("&");
|
newQueryString.append("&");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,7 +137,6 @@ public class EndpointConfiguration {
|
|||||||
addEndpointToGroup("Other", "auto-rename");
|
addEndpointToGroup("Other", "auto-rename");
|
||||||
addEndpointToGroup("Other", "get-info-on-pdf");
|
addEndpointToGroup("Other", "get-info-on-pdf");
|
||||||
addEndpointToGroup("Other", "show-javascript");
|
addEndpointToGroup("Other", "show-javascript");
|
||||||
addEndpointToGroup("Other", "remove-image-pdf");
|
|
||||||
|
|
||||||
// CLI
|
// CLI
|
||||||
addEndpointToGroup("CLI", "compress-pdf");
|
addEndpointToGroup("CLI", "compress-pdf");
|
||||||
@@ -222,7 +221,6 @@ public class EndpointConfiguration {
|
|||||||
addEndpointToGroup("Java", "split-pdf-by-sections");
|
addEndpointToGroup("Java", "split-pdf-by-sections");
|
||||||
addEndpointToGroup("Java", REMOVE_BLANKS);
|
addEndpointToGroup("Java", REMOVE_BLANKS);
|
||||||
addEndpointToGroup("Java", "pdf-to-text");
|
addEndpointToGroup("Java", "pdf-to-text");
|
||||||
addEndpointToGroup("Java", "remove-image-pdf");
|
|
||||||
|
|
||||||
// Javascript
|
// Javascript
|
||||||
addEndpointToGroup("Javascript", "pdf-organizer");
|
addEndpointToGroup("Javascript", "pdf-organizer");
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ package stirling.software.SPDF.config.security;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.security.authentication.BadCredentialsException;
|
import org.springframework.security.authentication.BadCredentialsException;
|
||||||
import org.springframework.security.authentication.DisabledException;
|
|
||||||
import org.springframework.security.authentication.InternalAuthenticationServiceException;
|
import org.springframework.security.authentication.InternalAuthenticationServiceException;
|
||||||
import org.springframework.security.authentication.LockedException;
|
import org.springframework.security.authentication.LockedException;
|
||||||
import org.springframework.security.core.AuthenticationException;
|
import org.springframework.security.core.AuthenticationException;
|
||||||
@@ -14,16 +15,17 @@ import org.springframework.security.web.authentication.SimpleUrlAuthenticationFa
|
|||||||
import jakarta.servlet.ServletException;
|
import jakarta.servlet.ServletException;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import stirling.software.SPDF.model.User;
|
import stirling.software.SPDF.model.User;
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler {
|
public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler {
|
||||||
|
|
||||||
private LoginAttemptService loginAttemptService;
|
private LoginAttemptService loginAttemptService;
|
||||||
|
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
|
private static final Logger logger =
|
||||||
|
LoggerFactory.getLogger(CustomAuthenticationFailureHandler.class);
|
||||||
|
|
||||||
public CustomAuthenticationFailureHandler(
|
public CustomAuthenticationFailureHandler(
|
||||||
final LoginAttemptService loginAttemptService, UserService userService) {
|
final LoginAttemptService loginAttemptService, UserService userService) {
|
||||||
this.loginAttemptService = loginAttemptService;
|
this.loginAttemptService = loginAttemptService;
|
||||||
@@ -37,17 +39,14 @@ public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationF
|
|||||||
AuthenticationException exception)
|
AuthenticationException exception)
|
||||||
throws IOException, ServletException {
|
throws IOException, ServletException {
|
||||||
|
|
||||||
if (exception instanceof DisabledException) {
|
|
||||||
log.error("User is deactivated: ", exception);
|
|
||||||
getRedirectStrategy().sendRedirect(request, response, "/logout?userIsDisabled=true");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String ip = request.getRemoteAddr();
|
String ip = request.getRemoteAddr();
|
||||||
log.error("Failed login attempt from IP: {}", ip);
|
logger.error("Failed login attempt from IP: {}", ip);
|
||||||
|
|
||||||
if (exception instanceof LockedException) {
|
String contextPath = request.getContextPath();
|
||||||
getRedirectStrategy().sendRedirect(request, response, "/login?error=locked");
|
|
||||||
|
if (exception.getClass().isAssignableFrom(InternalAuthenticationServiceException.class)
|
||||||
|
|| "Password must not be null".equalsIgnoreCase(exception.getMessage())) {
|
||||||
|
response.sendRedirect(contextPath + "/login?error=oauth2AuthenticationError");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,25 +54,20 @@ public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationF
|
|||||||
Optional<User> optUser = userService.findByUsernameIgnoreCase(username);
|
Optional<User> optUser = userService.findByUsernameIgnoreCase(username);
|
||||||
|
|
||||||
if (username != null && optUser.isPresent() && !isDemoUser(optUser)) {
|
if (username != null && optUser.isPresent() && !isDemoUser(optUser)) {
|
||||||
log.info(
|
logger.info(
|
||||||
"Remaining attempts for user {}: {}",
|
"Remaining attempts for user {}: {}",
|
||||||
username,
|
optUser.get().getUsername(),
|
||||||
loginAttemptService.getRemainingAttempts(username));
|
loginAttemptService.getRemainingAttempts(username));
|
||||||
loginAttemptService.loginFailed(username);
|
loginAttemptService.loginFailed(username);
|
||||||
if (loginAttemptService.isBlocked(username) || exception instanceof LockedException) {
|
if (loginAttemptService.isBlocked(username)
|
||||||
getRedirectStrategy().sendRedirect(request, response, "/login?error=locked");
|
|| exception.getClass().isAssignableFrom(LockedException.class)) {
|
||||||
|
response.sendRedirect(contextPath + "/login?error=locked");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (exception instanceof BadCredentialsException
|
if (exception.getClass().isAssignableFrom(BadCredentialsException.class)
|
||||||
|| exception instanceof UsernameNotFoundException) {
|
|| exception.getClass().isAssignableFrom(UsernameNotFoundException.class)) {
|
||||||
getRedirectStrategy().sendRedirect(request, response, "/login?error=badcredentials");
|
response.sendRedirect(contextPath + "/login?error=badcredentials");
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (exception instanceof InternalAuthenticationServiceException
|
|
||||||
|| "Password must not be null".equalsIgnoreCase(exception.getMessage())) {
|
|
||||||
getRedirectStrategy()
|
|
||||||
.sendRedirect(request, response, "/login?error=oauth2AuthenticationError");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,20 +10,15 @@ import jakarta.servlet.ServletException;
|
|||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.servlet.http.HttpSession;
|
import jakarta.servlet.http.HttpSession;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import stirling.software.SPDF.utils.RequestUriUtils;
|
import stirling.software.SPDF.utils.RequestUriUtils;
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class CustomAuthenticationSuccessHandler
|
public class CustomAuthenticationSuccessHandler
|
||||||
extends SavedRequestAwareAuthenticationSuccessHandler {
|
extends SavedRequestAwareAuthenticationSuccessHandler {
|
||||||
|
|
||||||
private LoginAttemptService loginAttemptService;
|
private LoginAttemptService loginAttemptService;
|
||||||
private UserService userService;
|
|
||||||
|
|
||||||
public CustomAuthenticationSuccessHandler(
|
public CustomAuthenticationSuccessHandler(LoginAttemptService loginAttemptService) {
|
||||||
LoginAttemptService loginAttemptService, UserService userService) {
|
|
||||||
this.loginAttemptService = loginAttemptService;
|
this.loginAttemptService = loginAttemptService;
|
||||||
this.userService = userService;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -32,10 +27,6 @@ public class CustomAuthenticationSuccessHandler
|
|||||||
throws ServletException, IOException {
|
throws ServletException, IOException {
|
||||||
|
|
||||||
String userName = request.getParameter("username");
|
String userName = request.getParameter("username");
|
||||||
if (userService.isUserDisabled(userName)) {
|
|
||||||
getRedirectStrategy().sendRedirect(request, response, "/logout?userIsDisabled=true");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
loginAttemptService.loginSucceeded(userName);
|
loginAttemptService.loginSucceeded(userName);
|
||||||
|
|
||||||
// Get the saved request
|
// Get the saved request
|
||||||
|
|||||||
@@ -2,26 +2,32 @@ package stirling.software.SPDF.config.security;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
|
import org.springframework.security.core.session.SessionRegistry;
|
||||||
import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
|
import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
|
||||||
|
|
||||||
import jakarta.servlet.ServletException;
|
import jakarta.servlet.ServletException;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import jakarta.servlet.http.HttpSession;
|
||||||
|
|
||||||
public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
|
public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
|
||||||
|
|
||||||
|
@Autowired SessionRegistry sessionRegistry;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLogoutSuccess(
|
public void onLogoutSuccess(
|
||||||
HttpServletRequest request, HttpServletResponse response, Authentication authentication)
|
HttpServletRequest request, HttpServletResponse response, Authentication authentication)
|
||||||
throws IOException, ServletException {
|
throws IOException, ServletException {
|
||||||
|
HttpSession session = request.getSession(false);
|
||||||
if (request.getParameter("userIsDisabled") != null) {
|
if (session != null) {
|
||||||
getRedirectStrategy()
|
String sessionId = session.getId();
|
||||||
.sendRedirect(request, response, "/login?erroroauth=userIsDisabled");
|
sessionRegistry.removeSessionInformation(sessionId);
|
||||||
return;
|
session.invalidate();
|
||||||
|
logger.debug("Session invalidated: " + sessionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
getRedirectStrategy().sendRedirect(request, response, "/login?logout=true");
|
response.sendRedirect(request.getContextPath() + "/login?logout=true");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package stirling.software.SPDF.config.security;
|
|||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@@ -15,6 +17,8 @@ public class LoginAttemptService {
|
|||||||
|
|
||||||
@Autowired ApplicationProperties applicationProperties;
|
@Autowired ApplicationProperties applicationProperties;
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(LoginAttemptService.class);
|
||||||
|
|
||||||
private int MAX_ATTEMPT;
|
private int MAX_ATTEMPT;
|
||||||
private long ATTEMPT_INCREMENT_TIME;
|
private long ATTEMPT_INCREMENT_TIME;
|
||||||
private ConcurrentHashMap<String, AttemptCounter> attemptsCache;
|
private ConcurrentHashMap<String, AttemptCounter> attemptsCache;
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ import org.springframework.security.config.http.SessionCreationPolicy;
|
|||||||
import org.springframework.security.core.GrantedAuthority;
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||||
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
|
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper;
|
||||||
|
import org.springframework.security.core.session.SessionRegistry;
|
||||||
|
import org.springframework.security.core.session.SessionRegistryImpl;
|
||||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.security.oauth2.client.registration.ClientRegistration;
|
import org.springframework.security.oauth2.client.registration.ClientRegistration;
|
||||||
@@ -35,7 +37,6 @@ import stirling.software.SPDF.config.security.oauth2.CustomOAuth2AuthenticationF
|
|||||||
import stirling.software.SPDF.config.security.oauth2.CustomOAuth2AuthenticationSuccessHandler;
|
import stirling.software.SPDF.config.security.oauth2.CustomOAuth2AuthenticationSuccessHandler;
|
||||||
import stirling.software.SPDF.config.security.oauth2.CustomOAuth2LogoutSuccessHandler;
|
import stirling.software.SPDF.config.security.oauth2.CustomOAuth2LogoutSuccessHandler;
|
||||||
import stirling.software.SPDF.config.security.oauth2.CustomOAuth2UserService;
|
import stirling.software.SPDF.config.security.oauth2.CustomOAuth2UserService;
|
||||||
import stirling.software.SPDF.config.security.session.SessionPersistentRegistry;
|
|
||||||
import stirling.software.SPDF.model.ApplicationProperties;
|
import stirling.software.SPDF.model.ApplicationProperties;
|
||||||
import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
|
import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
|
||||||
import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2.Client;
|
import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2.Client;
|
||||||
@@ -46,7 +47,7 @@ import stirling.software.SPDF.model.provider.KeycloakProvider;
|
|||||||
import stirling.software.SPDF.repository.JPATokenRepositoryImpl;
|
import stirling.software.SPDF.repository.JPATokenRepositoryImpl;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableWebSecurity
|
@EnableWebSecurity()
|
||||||
@EnableMethodSecurity
|
@EnableMethodSecurity
|
||||||
public class SecurityConfiguration {
|
public class SecurityConfiguration {
|
||||||
|
|
||||||
@@ -72,7 +73,11 @@ public class SecurityConfiguration {
|
|||||||
@Autowired private LoginAttemptService loginAttemptService;
|
@Autowired private LoginAttemptService loginAttemptService;
|
||||||
|
|
||||||
@Autowired private FirstLoginFilter firstLoginFilter;
|
@Autowired private FirstLoginFilter firstLoginFilter;
|
||||||
@Autowired private SessionPersistentRegistry sessionRegistry;
|
|
||||||
|
@Bean
|
||||||
|
public SessionRegistry sessionRegistry() {
|
||||||
|
return new SessionRegistryImpl();
|
||||||
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
||||||
@@ -89,7 +94,7 @@ public class SecurityConfiguration {
|
|||||||
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
|
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
|
||||||
.maximumSessions(10)
|
.maximumSessions(10)
|
||||||
.maxSessionsPreventsLogin(false)
|
.maxSessionsPreventsLogin(false)
|
||||||
.sessionRegistry(sessionRegistry)
|
.sessionRegistry(sessionRegistry())
|
||||||
.expiredUrl("/login?logout=true"));
|
.expiredUrl("/login?logout=true"));
|
||||||
|
|
||||||
http.formLogin(
|
http.formLogin(
|
||||||
@@ -98,7 +103,7 @@ public class SecurityConfiguration {
|
|||||||
.loginPage("/login")
|
.loginPage("/login")
|
||||||
.successHandler(
|
.successHandler(
|
||||||
new CustomAuthenticationSuccessHandler(
|
new CustomAuthenticationSuccessHandler(
|
||||||
loginAttemptService, userService))
|
loginAttemptService))
|
||||||
.defaultSuccessUrl("/")
|
.defaultSuccessUrl("/")
|
||||||
.failureHandler(
|
.failureHandler(
|
||||||
new CustomAuthenticationFailureHandler(
|
new CustomAuthenticationFailureHandler(
|
||||||
@@ -155,11 +160,7 @@ public class SecurityConfiguration {
|
|||||||
|
|
||||||
// Handle OAUTH2 Logins
|
// Handle OAUTH2 Logins
|
||||||
if (applicationProperties.getSecurity().getOAUTH2() != null
|
if (applicationProperties.getSecurity().getOAUTH2() != null
|
||||||
&& applicationProperties.getSecurity().getOAUTH2().getEnabled()
|
&& applicationProperties.getSecurity().getOAUTH2().getEnabled()) {
|
||||||
&& !applicationProperties
|
|
||||||
.getSecurity()
|
|
||||||
.getLoginMethod()
|
|
||||||
.equalsIgnoreCase("normal")) {
|
|
||||||
|
|
||||||
http.oauth2Login(
|
http.oauth2Login(
|
||||||
oauth2 ->
|
oauth2 ->
|
||||||
@@ -190,8 +191,10 @@ public class SecurityConfiguration {
|
|||||||
.logout(
|
.logout(
|
||||||
logout ->
|
logout ->
|
||||||
logout.logoutSuccessHandler(
|
logout.logoutSuccessHandler(
|
||||||
new CustomOAuth2LogoutSuccessHandler(
|
new CustomOAuth2LogoutSuccessHandler(
|
||||||
applicationProperties)));
|
this.applicationProperties,
|
||||||
|
sessionRegistry()))
|
||||||
|
.invalidateHttpSession(true));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
http.csrf(csrf -> csrf.disable())
|
http.csrf(csrf -> csrf.disable())
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package stirling.software.SPDF.config.security;
|
package stirling.software.SPDF.config.security;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
@@ -10,9 +9,8 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.core.AuthenticationException;
|
import org.springframework.security.core.AuthenticationException;
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.security.core.session.SessionInformation;
|
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
import org.springframework.security.oauth2.core.user.OAuth2User;
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.filter.OncePerRequestFilter;
|
import org.springframework.web.filter.OncePerRequestFilter;
|
||||||
|
|
||||||
@@ -20,15 +18,14 @@ import jakarta.servlet.FilterChain;
|
|||||||
import jakarta.servlet.ServletException;
|
import jakarta.servlet.ServletException;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import stirling.software.SPDF.config.security.session.SessionPersistentRegistry;
|
|
||||||
import stirling.software.SPDF.model.ApiKeyAuthenticationToken;
|
import stirling.software.SPDF.model.ApiKeyAuthenticationToken;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class UserAuthenticationFilter extends OncePerRequestFilter {
|
public class UserAuthenticationFilter extends OncePerRequestFilter {
|
||||||
|
|
||||||
@Autowired @Lazy private UserService userService;
|
@Autowired private UserDetailsService userDetailsService;
|
||||||
|
|
||||||
@Autowired private SessionPersistentRegistry sessionPersistentRegistry;
|
@Autowired @Lazy private UserService userService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("loginEnabled")
|
@Qualifier("loginEnabled")
|
||||||
@@ -90,43 +87,6 @@ public class UserAuthenticationFilter extends OncePerRequestFilter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the authenticated user is disabled and invalidate their session if so
|
|
||||||
if (authentication != null && authentication.isAuthenticated()) {
|
|
||||||
Object principal = authentication.getPrincipal();
|
|
||||||
String username = null;
|
|
||||||
if (principal instanceof UserDetails) {
|
|
||||||
username = ((UserDetails) principal).getUsername();
|
|
||||||
} else if (principal instanceof OAuth2User) {
|
|
||||||
username = ((OAuth2User) principal).getName();
|
|
||||||
} else if (principal instanceof String) {
|
|
||||||
username = (String) principal;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<SessionInformation> sessionsInformations =
|
|
||||||
sessionPersistentRegistry.getAllSessions(principal, false);
|
|
||||||
|
|
||||||
if (username != null) {
|
|
||||||
boolean isUserExists = userService.usernameExistsIgnoreCase(username);
|
|
||||||
boolean isUserDisabled = userService.isUserDisabled(username);
|
|
||||||
|
|
||||||
if (!isUserExists || isUserDisabled) {
|
|
||||||
for (SessionInformation sessionsInformation : sessionsInformations) {
|
|
||||||
sessionsInformation.expireNow();
|
|
||||||
sessionPersistentRegistry.expireSession(sessionsInformation.getSessionId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isUserExists) {
|
|
||||||
response.sendRedirect(request.getContextPath() + "/logout?badcredentials=true");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (isUserDisabled) {
|
|
||||||
response.sendRedirect(request.getContextPath() + "/logout?userIsDisabled=true");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
filterChain.doFilter(request, response);
|
filterChain.doFilter(request, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,15 +15,12 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio
|
|||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.core.GrantedAuthority;
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||||
import org.springframework.security.core.session.SessionInformation;
|
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.security.oauth2.core.user.OAuth2User;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import stirling.software.SPDF.config.DatabaseBackupInterface;
|
import stirling.software.SPDF.config.DatabaseBackupInterface;
|
||||||
import stirling.software.SPDF.config.security.session.SessionPersistentRegistry;
|
|
||||||
import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface;
|
import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface;
|
||||||
import stirling.software.SPDF.model.AuthenticationType;
|
import stirling.software.SPDF.model.AuthenticationType;
|
||||||
import stirling.software.SPDF.model.Authority;
|
import stirling.software.SPDF.model.Authority;
|
||||||
@@ -43,8 +40,6 @@ public class UserService implements UserServiceInterface {
|
|||||||
|
|
||||||
@Autowired private MessageSource messageSource;
|
@Autowired private MessageSource messageSource;
|
||||||
|
|
||||||
@Autowired private SessionPersistentRegistry sessionRegistry;
|
|
||||||
|
|
||||||
@Autowired DatabaseBackupInterface databaseBackupHelper;
|
@Autowired DatabaseBackupInterface databaseBackupHelper;
|
||||||
|
|
||||||
// Handle OAUTH2 login and user auto creation.
|
// Handle OAUTH2 login and user auto creation.
|
||||||
@@ -53,7 +48,7 @@ public class UserService implements UserServiceInterface {
|
|||||||
if (!isUsernameValid(username)) {
|
if (!isUsernameValid(username)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Optional<User> existingUser = findByUsernameIgnoreCase(username);
|
Optional<User> existingUser = userRepository.findByUsernameIgnoreCase(username);
|
||||||
if (existingUser.isPresent()) {
|
if (existingUser.isPresent()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -95,7 +90,8 @@ public class UserService implements UserServiceInterface {
|
|||||||
|
|
||||||
public User addApiKeyToUser(String username) {
|
public User addApiKeyToUser(String username) {
|
||||||
User user =
|
User user =
|
||||||
findByUsernameIgnoreCase(username)
|
userRepository
|
||||||
|
.findByUsernameIgnoreCase(username)
|
||||||
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
|
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
|
||||||
|
|
||||||
user.setApiKey(generateApiKey());
|
user.setApiKey(generateApiKey());
|
||||||
@@ -108,7 +104,8 @@ public class UserService implements UserServiceInterface {
|
|||||||
|
|
||||||
public String getApiKeyForUser(String username) {
|
public String getApiKeyForUser(String username) {
|
||||||
User user =
|
User user =
|
||||||
findByUsernameIgnoreCase(username)
|
userRepository
|
||||||
|
.findByUsernameIgnoreCase(username)
|
||||||
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
|
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
|
||||||
return user.getApiKey();
|
return user.getApiKey();
|
||||||
}
|
}
|
||||||
@@ -134,17 +131,12 @@ public class UserService implements UserServiceInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean validateApiKeyForUser(String username, String apiKey) {
|
public boolean validateApiKeyForUser(String username, String apiKey) {
|
||||||
Optional<User> userOpt = findByUsernameIgnoreCase(username);
|
Optional<User> userOpt = userRepository.findByUsernameIgnoreCase(username);
|
||||||
return userOpt.isPresent() && apiKey.equals(userOpt.get().getApiKey());
|
return userOpt.isPresent() && apiKey.equals(userOpt.get().getApiKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveUser(String username, AuthenticationType authenticationType)
|
public void saveUser(String username, AuthenticationType authenticationType)
|
||||||
throws IllegalArgumentException, IOException {
|
throws IllegalArgumentException, IOException {
|
||||||
saveUser(username, authenticationType, Role.USER.getRoleId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void saveUser(String username, AuthenticationType authenticationType, String role)
|
|
||||||
throws IllegalArgumentException, IOException {
|
|
||||||
if (!isUsernameValid(username)) {
|
if (!isUsernameValid(username)) {
|
||||||
throw new IllegalArgumentException(getInvalidUsernameMessage());
|
throw new IllegalArgumentException(getInvalidUsernameMessage());
|
||||||
}
|
}
|
||||||
@@ -152,7 +144,7 @@ public class UserService implements UserServiceInterface {
|
|||||||
user.setUsername(username);
|
user.setUsername(username);
|
||||||
user.setEnabled(true);
|
user.setEnabled(true);
|
||||||
user.setFirstLogin(false);
|
user.setFirstLogin(false);
|
||||||
user.addAuthority(new Authority(role, user));
|
user.addAuthority(new Authority(Role.USER.getRoleId(), user));
|
||||||
user.setAuthenticationType(authenticationType);
|
user.setAuthenticationType(authenticationType);
|
||||||
userRepository.save(user);
|
userRepository.save(user);
|
||||||
databaseBackupHelper.exportDatabase();
|
databaseBackupHelper.exportDatabase();
|
||||||
@@ -194,7 +186,7 @@ public class UserService implements UserServiceInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void deleteUser(String username) {
|
public void deleteUser(String username) {
|
||||||
Optional<User> userOpt = findByUsernameIgnoreCase(username);
|
Optional<User> userOpt = userRepository.findByUsernameIgnoreCase(username);
|
||||||
if (userOpt.isPresent()) {
|
if (userOpt.isPresent()) {
|
||||||
for (Authority authority : userOpt.get().getAuthorities()) {
|
for (Authority authority : userOpt.get().getAuthorities()) {
|
||||||
if (authority.getAuthority().equals(Role.INTERNAL_API_USER.getRoleId())) {
|
if (authority.getAuthority().equals(Role.INTERNAL_API_USER.getRoleId())) {
|
||||||
@@ -203,20 +195,21 @@ public class UserService implements UserServiceInterface {
|
|||||||
}
|
}
|
||||||
userRepository.delete(userOpt.get());
|
userRepository.delete(userOpt.get());
|
||||||
}
|
}
|
||||||
invalidateUserSessions(username);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean usernameExists(String username) {
|
public boolean usernameExists(String username) {
|
||||||
return findByUsername(username).isPresent();
|
return userRepository.findByUsername(username).isPresent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean usernameExistsIgnoreCase(String username) {
|
public boolean usernameExistsIgnoreCase(String username) {
|
||||||
return findByUsernameIgnoreCase(username).isPresent();
|
return userRepository.findByUsernameIgnoreCase(username).isPresent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasUsers() {
|
public boolean hasUsers() {
|
||||||
long userCount = userRepository.count();
|
long userCount = userRepository.count();
|
||||||
if (findByUsernameIgnoreCase(Role.INTERNAL_API_USER.getRoleId()).isPresent()) {
|
if (userRepository
|
||||||
|
.findByUsernameIgnoreCase(Role.INTERNAL_API_USER.getRoleId())
|
||||||
|
.isPresent()) {
|
||||||
userCount -= 1;
|
userCount -= 1;
|
||||||
}
|
}
|
||||||
return userCount > 0;
|
return userCount > 0;
|
||||||
@@ -224,7 +217,7 @@ public class UserService implements UserServiceInterface {
|
|||||||
|
|
||||||
public void updateUserSettings(String username, Map<String, String> updates)
|
public void updateUserSettings(String username, Map<String, String> updates)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
Optional<User> userOpt = findByUsernameIgnoreCase(username);
|
Optional<User> userOpt = userRepository.findByUsernameIgnoreCase(username);
|
||||||
if (userOpt.isPresent()) {
|
if (userOpt.isPresent()) {
|
||||||
User user = userOpt.get();
|
User user = userOpt.get();
|
||||||
Map<String, String> settingsMap = user.getSettings();
|
Map<String, String> settingsMap = user.getSettings();
|
||||||
@@ -275,17 +268,10 @@ public class UserService implements UserServiceInterface {
|
|||||||
databaseBackupHelper.exportDatabase();
|
databaseBackupHelper.exportDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeRole(User user, String newRole) throws IOException {
|
public void changeRole(User user, String newRole) {
|
||||||
Authority userAuthority = this.findRole(user);
|
Authority userAuthority = this.findRole(user);
|
||||||
userAuthority.setAuthority(newRole);
|
userAuthority.setAuthority(newRole);
|
||||||
authorityRepository.save(userAuthority);
|
authorityRepository.save(userAuthority);
|
||||||
databaseBackupHelper.exportDatabase();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void changeUserEnabled(User user, Boolean enbeled) throws IOException {
|
|
||||||
user.setEnabled(enbeled);
|
|
||||||
userRepository.save(user);
|
|
||||||
databaseBackupHelper.exportDatabase();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPasswordCorrect(User user, String currentPassword) {
|
public boolean isPasswordCorrect(User user, String currentPassword) {
|
||||||
@@ -309,40 +295,14 @@ public class UserService implements UserServiceInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasPassword(String username) {
|
public boolean hasPassword(String username) {
|
||||||
Optional<User> user = findByUsernameIgnoreCase(username);
|
Optional<User> user = userRepository.findByUsernameIgnoreCase(username);
|
||||||
return user.isPresent() && user.get().hasPassword();
|
return user.isPresent() && user.get().hasPassword();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAuthenticationTypeByUsername(
|
public boolean isAuthenticationTypeByUsername(
|
||||||
String username, AuthenticationType authenticationType) {
|
String username, AuthenticationType authenticationType) {
|
||||||
Optional<User> user = findByUsernameIgnoreCase(username);
|
Optional<User> user = userRepository.findByUsernameIgnoreCase(username);
|
||||||
return user.isPresent()
|
return user.isPresent()
|
||||||
&& authenticationType.name().equalsIgnoreCase(user.get().getAuthenticationType());
|
&& authenticationType.name().equalsIgnoreCase(user.get().getAuthenticationType());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUserDisabled(String username) {
|
|
||||||
Optional<User> userOpt = findByUsernameIgnoreCase(username);
|
|
||||||
return userOpt.map(user -> !user.isEnabled()).orElse(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void invalidateUserSessions(String username) {
|
|
||||||
String usernameP = "";
|
|
||||||
for (Object principal : sessionRegistry.getAllPrincipals()) {
|
|
||||||
for (SessionInformation sessionsInformation :
|
|
||||||
sessionRegistry.getAllSessions(principal, false)) {
|
|
||||||
if (principal instanceof UserDetails) {
|
|
||||||
UserDetails userDetails = (UserDetails) principal;
|
|
||||||
usernameP = userDetails.getUsername();
|
|
||||||
} else if (principal instanceof OAuth2User) {
|
|
||||||
OAuth2User oAuth2User = (OAuth2User) principal;
|
|
||||||
usernameP = oAuth2User.getName();
|
|
||||||
} else if (principal instanceof String) {
|
|
||||||
usernameP = (String) principal;
|
|
||||||
}
|
|
||||||
if (usernameP.equalsIgnoreCase(username)) {
|
|
||||||
sessionRegistry.expireSession(sessionsInformation.getSessionId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -179,12 +179,11 @@ public class DatabaseBackupHelper implements DatabaseBackupInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean executeDatabaseScript(Path scriptPath) {
|
private boolean executeDatabaseScript(Path scriptPath) {
|
||||||
String query = "RUNSCRIPT from ?;";
|
|
||||||
|
|
||||||
try (Connection conn = DriverManager.getConnection(url, "sa", "");
|
try (Connection conn = DriverManager.getConnection(url, "sa", "");
|
||||||
PreparedStatement stmt = conn.prepareStatement(query)) {
|
Statement stmt = conn.createStatement()) {
|
||||||
stmt.setString(1, scriptPath.toString());
|
|
||||||
stmt.execute();
|
String query = "RUNSCRIPT from '" + scriptPath.toString() + "';";
|
||||||
|
stmt.execute(query);
|
||||||
log.info("Database import completed: {}", scriptPath);
|
log.info("Database import completed: {}", scriptPath);
|
||||||
return true;
|
return true;
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package stirling.software.SPDF.config.security.oauth2;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import org.springframework.security.authentication.BadCredentialsException;
|
import org.slf4j.Logger;
|
||||||
import org.springframework.security.authentication.DisabledException;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.security.authentication.LockedException;
|
import org.springframework.security.authentication.LockedException;
|
||||||
import org.springframework.security.core.AuthenticationException;
|
import org.springframework.security.core.AuthenticationException;
|
||||||
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
|
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
|
||||||
@@ -13,34 +13,19 @@ import org.springframework.security.web.authentication.SimpleUrlAuthenticationFa
|
|||||||
import jakarta.servlet.ServletException;
|
import jakarta.servlet.ServletException;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class CustomOAuth2AuthenticationFailureHandler
|
public class CustomOAuth2AuthenticationFailureHandler
|
||||||
extends SimpleUrlAuthenticationFailureHandler {
|
extends SimpleUrlAuthenticationFailureHandler {
|
||||||
|
|
||||||
|
private static final Logger logger =
|
||||||
|
LoggerFactory.getLogger(CustomOAuth2AuthenticationFailureHandler.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAuthenticationFailure(
|
public void onAuthenticationFailure(
|
||||||
HttpServletRequest request,
|
HttpServletRequest request,
|
||||||
HttpServletResponse response,
|
HttpServletResponse response,
|
||||||
AuthenticationException exception)
|
AuthenticationException exception)
|
||||||
throws IOException, ServletException {
|
throws IOException, ServletException {
|
||||||
|
|
||||||
if (exception instanceof BadCredentialsException) {
|
|
||||||
log.error("BadCredentialsException", exception);
|
|
||||||
getRedirectStrategy().sendRedirect(request, response, "/login?error=badcredentials");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (exception instanceof DisabledException) {
|
|
||||||
log.error("User is deactivated: ", exception);
|
|
||||||
getRedirectStrategy().sendRedirect(request, response, "/logout?userIsDisabled=true");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (exception instanceof LockedException) {
|
|
||||||
log.error("Account locked: ", exception);
|
|
||||||
getRedirectStrategy().sendRedirect(request, response, "/logout?error=locked");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (exception instanceof OAuth2AuthenticationException) {
|
if (exception instanceof OAuth2AuthenticationException) {
|
||||||
OAuth2Error error = ((OAuth2AuthenticationException) exception).getError();
|
OAuth2Error error = ((OAuth2AuthenticationException) exception).getError();
|
||||||
|
|
||||||
@@ -49,13 +34,17 @@ public class CustomOAuth2AuthenticationFailureHandler
|
|||||||
if (error.getErrorCode().equals("Password must not be null")) {
|
if (error.getErrorCode().equals("Password must not be null")) {
|
||||||
errorCode = "userAlreadyExistsWeb";
|
errorCode = "userAlreadyExistsWeb";
|
||||||
}
|
}
|
||||||
log.error("OAuth2 Authentication error: " + errorCode);
|
logger.error("OAuth2 Authentication error: " + errorCode);
|
||||||
log.error("OAuth2AuthenticationException", exception);
|
|
||||||
getRedirectStrategy()
|
getRedirectStrategy()
|
||||||
.sendRedirect(request, response, "/logout?erroroauth=" + errorCode);
|
.sendRedirect(request, response, "/logout?erroroauth=" + errorCode);
|
||||||
return;
|
return;
|
||||||
|
} else if (exception instanceof LockedException) {
|
||||||
|
logger.error("Account locked: ", exception);
|
||||||
|
getRedirectStrategy().sendRedirect(request, response, "/logout?error=locked");
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
logger.error("Unhandled authentication exception", exception);
|
||||||
|
super.onAuthenticationFailure(request, response, exception);
|
||||||
}
|
}
|
||||||
log.error("Unhandled authentication exception", exception);
|
|
||||||
super.onAuthenticationFailure(request, response, exception);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ package stirling.software.SPDF.config.security.oauth2;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.security.authentication.LockedException;
|
import org.springframework.security.authentication.LockedException;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
|
||||||
import org.springframework.security.oauth2.core.user.OAuth2User;
|
import org.springframework.security.oauth2.core.user.OAuth2User;
|
||||||
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
|
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
|
||||||
import org.springframework.security.web.savedrequest.SavedRequest;
|
import org.springframework.security.web.savedrequest.SavedRequest;
|
||||||
@@ -25,6 +26,9 @@ public class CustomOAuth2AuthenticationSuccessHandler
|
|||||||
|
|
||||||
private LoginAttemptService loginAttemptService;
|
private LoginAttemptService loginAttemptService;
|
||||||
|
|
||||||
|
private static final Logger logger =
|
||||||
|
LoggerFactory.getLogger(CustomOAuth2AuthenticationSuccessHandler.class);
|
||||||
|
|
||||||
private ApplicationProperties applicationProperties;
|
private ApplicationProperties applicationProperties;
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
@@ -42,17 +46,6 @@ public class CustomOAuth2AuthenticationSuccessHandler
|
|||||||
HttpServletRequest request, HttpServletResponse response, Authentication authentication)
|
HttpServletRequest request, HttpServletResponse response, Authentication authentication)
|
||||||
throws ServletException, IOException {
|
throws ServletException, IOException {
|
||||||
|
|
||||||
Object principal = authentication.getPrincipal();
|
|
||||||
String username = "";
|
|
||||||
|
|
||||||
if (principal instanceof OAuth2User) {
|
|
||||||
OAuth2User oauthUser = (OAuth2User) principal;
|
|
||||||
username = oauthUser.getName();
|
|
||||||
} else if (principal instanceof UserDetails) {
|
|
||||||
UserDetails oauthUser = (UserDetails) principal;
|
|
||||||
username = oauthUser.getUsername();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the saved request
|
// Get the saved request
|
||||||
HttpSession session = request.getSession(false);
|
HttpSession session = request.getSession(false);
|
||||||
String contextPath = request.getContextPath();
|
String contextPath = request.getContextPath();
|
||||||
@@ -66,8 +59,11 @@ public class CustomOAuth2AuthenticationSuccessHandler
|
|||||||
// Redirect to the original destination
|
// Redirect to the original destination
|
||||||
super.onAuthenticationSuccess(request, response, authentication);
|
super.onAuthenticationSuccess(request, response, authentication);
|
||||||
} else {
|
} else {
|
||||||
|
OAuth2User oauthUser = (OAuth2User) authentication.getPrincipal();
|
||||||
OAUTH2 oAuth = applicationProperties.getSecurity().getOAUTH2();
|
OAUTH2 oAuth = applicationProperties.getSecurity().getOAUTH2();
|
||||||
|
|
||||||
|
String username = oauthUser.getName();
|
||||||
|
|
||||||
if (loginAttemptService.isBlocked(username)) {
|
if (loginAttemptService.isBlocked(username)) {
|
||||||
if (session != null) {
|
if (session != null) {
|
||||||
session.removeAttribute("SPRING_SECURITY_SAVED_REQUEST");
|
session.removeAttribute("SPRING_SECURITY_SAVED_REQUEST");
|
||||||
@@ -82,21 +78,15 @@ public class CustomOAuth2AuthenticationSuccessHandler
|
|||||||
&& oAuth.getAutoCreateUser()) {
|
&& oAuth.getAutoCreateUser()) {
|
||||||
response.sendRedirect(contextPath + "/logout?oauth2AuthenticationErrorWeb=true");
|
response.sendRedirect(contextPath + "/logout?oauth2AuthenticationErrorWeb=true");
|
||||||
return;
|
return;
|
||||||
}
|
} else {
|
||||||
try {
|
try {
|
||||||
if (oAuth.getBlockRegistration()
|
userService.processOAuth2PostLogin(username, oAuth.getAutoCreateUser());
|
||||||
&& !userService.usernameExistsIgnoreCase(username)) {
|
response.sendRedirect(contextPath + "/");
|
||||||
response.sendRedirect(contextPath + "/logout?oauth2_admin_blocked_user=true");
|
return;
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
response.sendRedirect(contextPath + "/logout?invalidUsername=true");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (principal instanceof OAuth2User) {
|
|
||||||
userService.processOAuth2PostLogin(username, oAuth.getAutoCreateUser());
|
|
||||||
}
|
|
||||||
response.sendRedirect(contextPath + "/");
|
|
||||||
return;
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
response.sendRedirect(contextPath + "/logout?invalidUsername=true");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,26 +2,34 @@ package stirling.software.SPDF.config.security.oauth2;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
|
import org.springframework.security.core.session.SessionRegistry;
|
||||||
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
|
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
|
||||||
import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
|
import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
|
||||||
|
|
||||||
import jakarta.servlet.ServletException;
|
import jakarta.servlet.ServletException;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import jakarta.servlet.http.HttpSession;
|
||||||
import stirling.software.SPDF.model.ApplicationProperties;
|
import stirling.software.SPDF.model.ApplicationProperties;
|
||||||
import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
|
import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
|
||||||
import stirling.software.SPDF.model.Provider;
|
import stirling.software.SPDF.model.Provider;
|
||||||
import stirling.software.SPDF.model.provider.UnsupportedProviderException;
|
import stirling.software.SPDF.model.provider.UnsupportedProviderException;
|
||||||
import stirling.software.SPDF.utils.UrlUtils;
|
import stirling.software.SPDF.utils.UrlUtils;
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class CustomOAuth2LogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
|
public class CustomOAuth2LogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
|
||||||
|
|
||||||
|
private static final Logger logger =
|
||||||
|
LoggerFactory.getLogger(CustomOAuth2LogoutSuccessHandler.class);
|
||||||
|
|
||||||
|
private final SessionRegistry sessionRegistry;
|
||||||
private final ApplicationProperties applicationProperties;
|
private final ApplicationProperties applicationProperties;
|
||||||
|
|
||||||
public CustomOAuth2LogoutSuccessHandler(ApplicationProperties applicationProperties) {
|
public CustomOAuth2LogoutSuccessHandler(
|
||||||
|
ApplicationProperties applicationProperties, SessionRegistry sessionRegistry) {
|
||||||
|
this.sessionRegistry = sessionRegistry;
|
||||||
this.applicationProperties = applicationProperties;
|
this.applicationProperties = applicationProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,15 +42,6 @@ public class CustomOAuth2LogoutSuccessHandler extends SimpleUrlLogoutSuccessHand
|
|||||||
String issuer = null;
|
String issuer = null;
|
||||||
String clientId = null;
|
String clientId = null;
|
||||||
|
|
||||||
if (authentication == null) {
|
|
||||||
if (request.getParameter("userIsDisabled") != null) {
|
|
||||||
response.sendRedirect(
|
|
||||||
request.getContextPath() + "/login?erroroauth=userIsDisabled");
|
|
||||||
} else {
|
|
||||||
super.onLogoutSuccess(request, response, authentication);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
OAUTH2 oauth = applicationProperties.getSecurity().getOAUTH2();
|
OAUTH2 oauth = applicationProperties.getSecurity().getOAUTH2();
|
||||||
|
|
||||||
if (authentication instanceof OAuth2AuthenticationToken) {
|
if (authentication instanceof OAuth2AuthenticationToken) {
|
||||||
@@ -54,8 +53,9 @@ public class CustomOAuth2LogoutSuccessHandler extends SimpleUrlLogoutSuccessHand
|
|||||||
issuer = provider.getIssuer();
|
issuer = provider.getIssuer();
|
||||||
clientId = provider.getClientId();
|
clientId = provider.getClientId();
|
||||||
} catch (UnsupportedProviderException e) {
|
} catch (UnsupportedProviderException e) {
|
||||||
log.error(e.getMessage());
|
logger.error(e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
registrationId = oauth.getProvider() != null ? oauth.getProvider() : "";
|
registrationId = oauth.getProvider() != null ? oauth.getProvider() : "";
|
||||||
issuer = oauth.getIssuer();
|
issuer = oauth.getIssuer();
|
||||||
@@ -70,16 +70,18 @@ public class CustomOAuth2LogoutSuccessHandler extends SimpleUrlLogoutSuccessHand
|
|||||||
param = "erroroauth=" + sanitizeInput(errorMessage);
|
param = "erroroauth=" + sanitizeInput(errorMessage);
|
||||||
} else if (request.getParameter("oauth2AutoCreateDisabled") != null) {
|
} else if (request.getParameter("oauth2AutoCreateDisabled") != null) {
|
||||||
param = "error=oauth2AutoCreateDisabled";
|
param = "error=oauth2AutoCreateDisabled";
|
||||||
} else if (request.getParameter("oauth2_admin_blocked_user") != null) {
|
|
||||||
param = "erroroauth=oauth2_admin_blocked_user";
|
|
||||||
} else if (request.getParameter("userIsDisabled") != null) {
|
|
||||||
param = "erroroauth=userIsDisabled";
|
|
||||||
} else if (request.getParameter("badcredentials") != null) {
|
|
||||||
param = "error=badcredentials";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String redirect_url = UrlUtils.getOrigin(request) + "/login?" + param;
|
String redirect_url = UrlUtils.getOrigin(request) + "/login?" + param;
|
||||||
|
|
||||||
|
HttpSession session = request.getSession(false);
|
||||||
|
if (session != null) {
|
||||||
|
String sessionId = session.getId();
|
||||||
|
sessionRegistry.removeSessionInformation(sessionId);
|
||||||
|
session.invalidate();
|
||||||
|
logger.info("Session invalidated: " + sessionId);
|
||||||
|
}
|
||||||
|
|
||||||
switch (registrationId.toLowerCase()) {
|
switch (registrationId.toLowerCase()) {
|
||||||
case "keycloak":
|
case "keycloak":
|
||||||
// Add Keycloak specific logout URL if needed
|
// Add Keycloak specific logout URL if needed
|
||||||
@@ -90,13 +92,13 @@ public class CustomOAuth2LogoutSuccessHandler extends SimpleUrlLogoutSuccessHand
|
|||||||
+ clientId
|
+ clientId
|
||||||
+ "&post_logout_redirect_uri="
|
+ "&post_logout_redirect_uri="
|
||||||
+ response.encodeRedirectURL(redirect_url);
|
+ response.encodeRedirectURL(redirect_url);
|
||||||
log.info("Redirecting to Keycloak logout URL: " + logoutUrl);
|
logger.info("Redirecting to Keycloak logout URL: " + logoutUrl);
|
||||||
response.sendRedirect(logoutUrl);
|
response.sendRedirect(logoutUrl);
|
||||||
break;
|
break;
|
||||||
case "github":
|
case "github":
|
||||||
// Add GitHub specific logout URL if needed
|
// Add GitHub specific logout URL if needed
|
||||||
String githubLogoutUrl = "https://github.com/logout";
|
String githubLogoutUrl = "https://github.com/logout";
|
||||||
log.info("Redirecting to GitHub logout URL: " + githubLogoutUrl);
|
logger.info("Redirecting to GitHub logout URL: " + githubLogoutUrl);
|
||||||
response.sendRedirect(githubLogoutUrl);
|
response.sendRedirect(githubLogoutUrl);
|
||||||
break;
|
break;
|
||||||
case "google":
|
case "google":
|
||||||
@@ -104,14 +106,13 @@ public class CustomOAuth2LogoutSuccessHandler extends SimpleUrlLogoutSuccessHand
|
|||||||
// String googleLogoutUrl =
|
// String googleLogoutUrl =
|
||||||
// "https://accounts.google.com/Logout?continue=https://appengine.google.com/_ah/logout?continue="
|
// "https://accounts.google.com/Logout?continue=https://appengine.google.com/_ah/logout?continue="
|
||||||
// + response.encodeRedirectURL(redirect_url);
|
// + response.encodeRedirectURL(redirect_url);
|
||||||
log.info("Google does not have a specific logout URL");
|
// logger.info("Redirecting to Google logout URL: " + googleLogoutUrl);
|
||||||
// log.info("Redirecting to Google logout URL: " + googleLogoutUrl);
|
|
||||||
// response.sendRedirect(googleLogoutUrl);
|
// response.sendRedirect(googleLogoutUrl);
|
||||||
// break;
|
// break;
|
||||||
default:
|
default:
|
||||||
String defaultRedirectUrl = request.getContextPath() + "/login?" + param;
|
String redirectUrl = request.getContextPath() + "/login?" + param;
|
||||||
log.info("Redirecting to default logout URL: " + defaultRedirectUrl);
|
logger.info("Redirecting to default logout URL: " + redirectUrl);
|
||||||
response.sendRedirect(defaultRedirectUrl);
|
response.sendRedirect(redirectUrl);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
package stirling.software.SPDF.config.security.session;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import jakarta.servlet.http.HttpSessionEvent;
|
|
||||||
import jakarta.servlet.http.HttpSessionListener;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
@Slf4j
|
|
||||||
public class CustomHttpSessionListener implements HttpSessionListener {
|
|
||||||
|
|
||||||
@Autowired private SessionPersistentRegistry sessionPersistentRegistry;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sessionCreated(HttpSessionEvent se) {
|
|
||||||
log.info("Session created: " + se.getSession().getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sessionDestroyed(HttpSessionEvent se) {
|
|
||||||
log.info("Session destroyed: " + se.getSession().getId());
|
|
||||||
sessionPersistentRegistry.expireSession(se.getSession().getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,183 +0,0 @@
|
|||||||
package stirling.software.SPDF.config.security.session;
|
|
||||||
|
|
||||||
import java.time.Duration;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.security.core.session.SessionInformation;
|
|
||||||
import org.springframework.security.core.session.SessionRegistry;
|
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
|
||||||
import org.springframework.security.oauth2.core.user.OAuth2User;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import jakarta.transaction.Transactional;
|
|
||||||
import stirling.software.SPDF.model.SessionEntity;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
public class SessionPersistentRegistry implements SessionRegistry {
|
|
||||||
|
|
||||||
private final SessionRepository sessionRepository;
|
|
||||||
|
|
||||||
@Value("${server.servlet.session.timeout:30m}")
|
|
||||||
private Duration defaultMaxInactiveInterval;
|
|
||||||
|
|
||||||
public SessionPersistentRegistry(SessionRepository sessionRepository) {
|
|
||||||
this.sessionRepository = sessionRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Object> getAllPrincipals() {
|
|
||||||
List<SessionEntity> sessions = sessionRepository.findAll();
|
|
||||||
List<Object> principals = new ArrayList<>();
|
|
||||||
for (SessionEntity session : sessions) {
|
|
||||||
principals.add(session.getPrincipalName());
|
|
||||||
}
|
|
||||||
return principals;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<SessionInformation> getAllSessions(
|
|
||||||
Object principal, boolean includeExpiredSessions) {
|
|
||||||
List<SessionInformation> sessionInformations = new ArrayList<>();
|
|
||||||
String principalName = null;
|
|
||||||
|
|
||||||
if (principal instanceof UserDetails) {
|
|
||||||
principalName = ((UserDetails) principal).getUsername();
|
|
||||||
} else if (principal instanceof OAuth2User) {
|
|
||||||
principalName = ((OAuth2User) principal).getName();
|
|
||||||
} else if (principal instanceof String) {
|
|
||||||
principalName = (String) principal;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (principalName != null) {
|
|
||||||
List<SessionEntity> sessionEntities =
|
|
||||||
sessionRepository.findByPrincipalName(principalName);
|
|
||||||
for (SessionEntity sessionEntity : sessionEntities) {
|
|
||||||
if (includeExpiredSessions || !sessionEntity.isExpired()) {
|
|
||||||
sessionInformations.add(
|
|
||||||
new SessionInformation(
|
|
||||||
sessionEntity.getPrincipalName(),
|
|
||||||
sessionEntity.getSessionId(),
|
|
||||||
sessionEntity.getLastRequest()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sessionInformations;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public void registerNewSession(String sessionId, Object principal) {
|
|
||||||
String principalName = null;
|
|
||||||
|
|
||||||
if (principal instanceof UserDetails) {
|
|
||||||
principalName = ((UserDetails) principal).getUsername();
|
|
||||||
} else if (principal instanceof OAuth2User) {
|
|
||||||
principalName = ((OAuth2User) principal).getName();
|
|
||||||
} else if (principal instanceof String) {
|
|
||||||
principalName = (String) principal;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (principalName != null) {
|
|
||||||
SessionEntity sessionEntity = new SessionEntity();
|
|
||||||
sessionEntity.setSessionId(sessionId);
|
|
||||||
sessionEntity.setPrincipalName(principalName);
|
|
||||||
sessionEntity.setLastRequest(new Date()); // Set lastRequest to the current date
|
|
||||||
sessionEntity.setExpired(false);
|
|
||||||
sessionRepository.save(sessionEntity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public void removeSessionInformation(String sessionId) {
|
|
||||||
sessionRepository.deleteById(sessionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public void refreshLastRequest(String sessionId) {
|
|
||||||
Optional<SessionEntity> sessionEntityOpt = sessionRepository.findById(sessionId);
|
|
||||||
if (sessionEntityOpt.isPresent()) {
|
|
||||||
SessionEntity sessionEntity = sessionEntityOpt.get();
|
|
||||||
sessionEntity.setLastRequest(new Date()); // Update lastRequest to the current date
|
|
||||||
sessionRepository.save(sessionEntity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SessionInformation getSessionInformation(String sessionId) {
|
|
||||||
Optional<SessionEntity> sessionEntityOpt = sessionRepository.findById(sessionId);
|
|
||||||
if (sessionEntityOpt.isPresent()) {
|
|
||||||
SessionEntity sessionEntity = sessionEntityOpt.get();
|
|
||||||
return new SessionInformation(
|
|
||||||
sessionEntity.getPrincipalName(),
|
|
||||||
sessionEntity.getSessionId(),
|
|
||||||
sessionEntity.getLastRequest());
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retrieve all non-expired sessions
|
|
||||||
public List<SessionEntity> getAllSessionsNotExpired() {
|
|
||||||
return sessionRepository.findByExpired(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retrieve all sessions
|
|
||||||
public List<SessionEntity> getAllSessions() {
|
|
||||||
return sessionRepository.findAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mark a session as expired
|
|
||||||
public void expireSession(String sessionId) {
|
|
||||||
Optional<SessionEntity> sessionEntityOpt = sessionRepository.findById(sessionId);
|
|
||||||
if (sessionEntityOpt.isPresent()) {
|
|
||||||
SessionEntity sessionEntity = sessionEntityOpt.get();
|
|
||||||
sessionEntity.setExpired(true); // Set expired to true
|
|
||||||
sessionRepository.save(sessionEntity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the maximum inactive interval for sessions
|
|
||||||
public int getMaxInactiveInterval() {
|
|
||||||
return (int) defaultMaxInactiveInterval.getSeconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retrieve a session entity by session ID
|
|
||||||
public SessionEntity getSessionEntity(String sessionId) {
|
|
||||||
return sessionRepository.findBySessionId(sessionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update session details by principal name
|
|
||||||
public void updateSessionByPrincipalName(
|
|
||||||
String principalName, boolean expired, Date lastRequest) {
|
|
||||||
sessionRepository.saveByPrincipalName(expired, lastRequest, principalName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the latest session for a given principal name
|
|
||||||
public Optional<SessionEntity> findLatestSession(String principalName) {
|
|
||||||
List<SessionEntity> allSessions = sessionRepository.findByPrincipalName(principalName);
|
|
||||||
if (allSessions.isEmpty()) {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sort sessions by lastRequest in descending order
|
|
||||||
Collections.sort(
|
|
||||||
allSessions,
|
|
||||||
new Comparator<SessionEntity>() {
|
|
||||||
@Override
|
|
||||||
public int compare(SessionEntity s1, SessionEntity s2) {
|
|
||||||
// Sort by lastRequest in descending order
|
|
||||||
return s2.getLastRequest().compareTo(s1.getLastRequest());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// The first session in the list is the latest session for the given principal name
|
|
||||||
return Optional.of(allSessions.get(0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
package stirling.software.SPDF.config.security.session;
|
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.security.core.session.SessionRegistryImpl;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
public class SessionRegistryConfig {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public SessionRegistryImpl sessionRegistry() {
|
|
||||||
return new SessionRegistryImpl();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public SessionPersistentRegistry sessionPersistentRegistry(
|
|
||||||
SessionRepository sessionRepository) {
|
|
||||||
return new SessionPersistentRegistry(sessionRepository);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
package stirling.software.SPDF.config.security.session;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
import org.springframework.data.jpa.repository.Modifying;
|
|
||||||
import org.springframework.data.jpa.repository.Query;
|
|
||||||
import org.springframework.data.repository.query.Param;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import jakarta.transaction.Transactional;
|
|
||||||
import stirling.software.SPDF.model.SessionEntity;
|
|
||||||
|
|
||||||
@Repository
|
|
||||||
public interface SessionRepository extends JpaRepository<SessionEntity, String> {
|
|
||||||
List<SessionEntity> findByPrincipalName(String principalName);
|
|
||||||
|
|
||||||
List<SessionEntity> findByExpired(boolean expired);
|
|
||||||
|
|
||||||
SessionEntity findBySessionId(String sessionId);
|
|
||||||
|
|
||||||
@Modifying
|
|
||||||
@Transactional
|
|
||||||
@Query(
|
|
||||||
"UPDATE SessionEntity s SET s.expired = :expired, s.lastRequest = :lastRequest WHERE s.principalName = :principalName")
|
|
||||||
void saveByPrincipalName(
|
|
||||||
@Param("expired") boolean expired,
|
|
||||||
@Param("lastRequest") Date lastRequest,
|
|
||||||
@Param("principalName") String principalName);
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
package stirling.software.SPDF.config.security.session;
|
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.temporal.ChronoUnit;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
|
||||||
import org.springframework.security.core.session.SessionInformation;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
public class SessionScheduled {
|
|
||||||
@Autowired private SessionPersistentRegistry sessionPersistentRegistry;
|
|
||||||
|
|
||||||
@Scheduled(cron = "0 0/5 * * * ?")
|
|
||||||
public void expireSessions() {
|
|
||||||
Instant now = Instant.now();
|
|
||||||
|
|
||||||
for (Object principal : sessionPersistentRegistry.getAllPrincipals()) {
|
|
||||||
List<SessionInformation> sessionInformations =
|
|
||||||
sessionPersistentRegistry.getAllSessions(principal, false);
|
|
||||||
for (SessionInformation sessionInformation : sessionInformations) {
|
|
||||||
Date lastRequest = sessionInformation.getLastRequest();
|
|
||||||
int maxInactiveInterval = sessionPersistentRegistry.getMaxInactiveInterval();
|
|
||||||
Instant expirationTime =
|
|
||||||
lastRequest.toInstant().plus(maxInactiveInterval, ChronoUnit.SECONDS);
|
|
||||||
if (now.isAfter(expirationTime)) {
|
|
||||||
sessionPersistentRegistry.expireSession(sessionInformation.getSessionId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
package stirling.software.SPDF.controller.api;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import org.apache.pdfbox.Loader;
|
|
||||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
|
|
||||||
import stirling.software.SPDF.model.api.PDFFile;
|
|
||||||
import stirling.software.SPDF.service.PdfImageRemovalService;
|
|
||||||
import stirling.software.SPDF.utils.WebResponseUtils;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Controller class for handling PDF image removal requests. Provides an endpoint to remove images
|
|
||||||
* from a PDF file to reduce its size.
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/api/v1/general")
|
|
||||||
public class PdfImageRemovalController {
|
|
||||||
|
|
||||||
// Service for removing images from PDFs
|
|
||||||
@Autowired private PdfImageRemovalService pdfImageRemovalService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor for dependency injection of PdfImageRemovalService.
|
|
||||||
*
|
|
||||||
* @param pdfImageRemovalService The service used for removing images from PDFs.
|
|
||||||
*/
|
|
||||||
public PdfImageRemovalController(PdfImageRemovalService pdfImageRemovalService) {
|
|
||||||
this.pdfImageRemovalService = pdfImageRemovalService;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Endpoint to remove images from a PDF file.
|
|
||||||
*
|
|
||||||
* <p>This method processes the uploaded PDF file, removes all images, and returns the modified
|
|
||||||
* PDF file with a new name indicating that images were removed.
|
|
||||||
*
|
|
||||||
* @param file The PDF file with images to be removed.
|
|
||||||
* @return ResponseEntity containing the modified PDF file as byte array with appropriate
|
|
||||||
* content type and filename.
|
|
||||||
* @throws IOException If an error occurs while processing the PDF file.
|
|
||||||
*/
|
|
||||||
@PostMapping(consumes = "multipart/form-data", value = "/remove-image-pdf")
|
|
||||||
@Operation(
|
|
||||||
summary = "Remove images from file to reduce the file size.",
|
|
||||||
description =
|
|
||||||
"This endpoint remove images from file to reduce the file size.Input:PDF Output:PDF Type:MISO")
|
|
||||||
public ResponseEntity<byte[]> removeImages(@ModelAttribute PDFFile file) throws IOException {
|
|
||||||
|
|
||||||
MultipartFile pdf = file.getFileInput();
|
|
||||||
|
|
||||||
// Convert the MultipartFile to a byte array
|
|
||||||
byte[] pdfBytes = pdf.getBytes();
|
|
||||||
|
|
||||||
// Load the PDF document from the byte array
|
|
||||||
PDDocument document = Loader.loadPDF(pdfBytes);
|
|
||||||
|
|
||||||
// Remove images from the PDF document using the service
|
|
||||||
PDDocument modifiedDocument = pdfImageRemovalService.removeImagesFromPdf(document);
|
|
||||||
|
|
||||||
// Create a ByteArrayOutputStream to hold the modified PDF data
|
|
||||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
|
||||||
|
|
||||||
// Save the modified PDF document to the output stream
|
|
||||||
modifiedDocument.save(outputStream);
|
|
||||||
modifiedDocument.close();
|
|
||||||
|
|
||||||
// Generate a new filename for the modified PDF
|
|
||||||
String mergedFileName =
|
|
||||||
pdf.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_removed_images.pdf";
|
|
||||||
|
|
||||||
// Convert the byte array to a web response and return it
|
|
||||||
return WebResponseUtils.bytesToWebResponse(outputStream.toByteArray(), mergedFileName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -3,7 +3,6 @@ package stirling.software.SPDF.controller.api;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.Principal;
|
import java.security.Principal;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@@ -13,8 +12,8 @@ import org.springframework.http.ResponseEntity;
|
|||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.core.session.SessionInformation;
|
import org.springframework.security.core.session.SessionInformation;
|
||||||
|
import org.springframework.security.core.session.SessionRegistry;
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
import org.springframework.security.oauth2.core.user.OAuth2User;
|
|
||||||
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
|
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.Model;
|
import org.springframework.ui.Model;
|
||||||
@@ -31,8 +30,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
|
|||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import stirling.software.SPDF.config.security.UserService;
|
import stirling.software.SPDF.config.security.UserService;
|
||||||
import stirling.software.SPDF.config.security.session.SessionPersistentRegistry;
|
|
||||||
import stirling.software.SPDF.model.AuthenticationType;
|
|
||||||
import stirling.software.SPDF.model.Role;
|
import stirling.software.SPDF.model.Role;
|
||||||
import stirling.software.SPDF.model.User;
|
import stirling.software.SPDF.model.User;
|
||||||
import stirling.software.SPDF.model.api.user.UsernameAndPass;
|
import stirling.software.SPDF.model.api.user.UsernameAndPass;
|
||||||
@@ -44,8 +41,6 @@ public class UserController {
|
|||||||
|
|
||||||
@Autowired private UserService userService;
|
@Autowired private UserService userService;
|
||||||
|
|
||||||
@Autowired SessionPersistentRegistry sessionRegistry;
|
|
||||||
|
|
||||||
@PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
|
@PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
|
||||||
@PostMapping("/register")
|
@PostMapping("/register")
|
||||||
public String register(@ModelAttribute UsernameAndPass requestModel, Model model)
|
public String register(@ModelAttribute UsernameAndPass requestModel, Model model)
|
||||||
@@ -208,10 +203,9 @@ public class UserController {
|
|||||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||||
@PostMapping("/admin/saveUser")
|
@PostMapping("/admin/saveUser")
|
||||||
public RedirectView saveUser(
|
public RedirectView saveUser(
|
||||||
@RequestParam String username,
|
@RequestParam(name = "username") String username,
|
||||||
@RequestParam(name = "password", required = false) String password,
|
@RequestParam(name = "password") String password,
|
||||||
@RequestParam(name = "role") String role,
|
@RequestParam(name = "role") String role,
|
||||||
@RequestParam(name = "authType") String authType,
|
|
||||||
@RequestParam(name = "forceChange", required = false, defaultValue = "false")
|
@RequestParam(name = "forceChange", required = false, defaultValue = "false")
|
||||||
boolean forceChange)
|
boolean forceChange)
|
||||||
throws IllegalArgumentException, IOException {
|
throws IllegalArgumentException, IOException {
|
||||||
@@ -243,15 +237,7 @@ public class UserController {
|
|||||||
return new RedirectView("/addUsers?messageType=invalidRole", true);
|
return new RedirectView("/addUsers?messageType=invalidRole", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (authType.equalsIgnoreCase(AuthenticationType.OAUTH2.toString())) {
|
userService.saveUser(username, password, role, forceChange);
|
||||||
userService.saveUser(username, AuthenticationType.OAUTH2, role);
|
|
||||||
} else {
|
|
||||||
if (password.isBlank()) {
|
|
||||||
return new RedirectView("/addUsers?messageType=invalidPassword", true);
|
|
||||||
}
|
|
||||||
userService.saveUser(username, password, role, forceChange);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new RedirectView(
|
return new RedirectView(
|
||||||
"/addUsers", true); // Redirect to account page after adding the user
|
"/addUsers", true); // Redirect to account page after adding the user
|
||||||
}
|
}
|
||||||
@@ -261,8 +247,7 @@ public class UserController {
|
|||||||
public RedirectView changeRole(
|
public RedirectView changeRole(
|
||||||
@RequestParam(name = "username") String username,
|
@RequestParam(name = "username") String username,
|
||||||
@RequestParam(name = "role") String role,
|
@RequestParam(name = "role") String role,
|
||||||
Authentication authentication)
|
Authentication authentication) {
|
||||||
throws IOException {
|
|
||||||
|
|
||||||
Optional<User> userOpt = userService.findByUsernameIgnoreCase(username);
|
Optional<User> userOpt = userService.findByUsernameIgnoreCase(username);
|
||||||
|
|
||||||
@@ -293,60 +278,6 @@ public class UserController {
|
|||||||
User user = userOpt.get();
|
User user = userOpt.get();
|
||||||
|
|
||||||
userService.changeRole(user, role);
|
userService.changeRole(user, role);
|
||||||
|
|
||||||
return new RedirectView(
|
|
||||||
"/addUsers", true); // Redirect to account page after adding the user
|
|
||||||
}
|
|
||||||
|
|
||||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
|
||||||
@PostMapping("/admin/changeUserEnabled/{username}")
|
|
||||||
public RedirectView changeUserEnabled(
|
|
||||||
@PathVariable("username") String username,
|
|
||||||
@RequestParam("enabled") boolean enabled,
|
|
||||||
Authentication authentication)
|
|
||||||
throws IOException {
|
|
||||||
|
|
||||||
Optional<User> userOpt = userService.findByUsernameIgnoreCase(username);
|
|
||||||
|
|
||||||
if (!userOpt.isPresent()) {
|
|
||||||
return new RedirectView("/addUsers?messageType=userNotFound", true);
|
|
||||||
}
|
|
||||||
if (!userService.usernameExistsIgnoreCase(username)) {
|
|
||||||
return new RedirectView("/addUsers?messageType=userNotFound", true);
|
|
||||||
}
|
|
||||||
// Get the currently authenticated username
|
|
||||||
String currentUsername = authentication.getName();
|
|
||||||
|
|
||||||
// Check if the provided username matches the current session's username
|
|
||||||
if (currentUsername.equalsIgnoreCase(username)) {
|
|
||||||
return new RedirectView("/addUsers?messageType=disabledCurrentUser", true);
|
|
||||||
}
|
|
||||||
User user = userOpt.get();
|
|
||||||
|
|
||||||
userService.changeUserEnabled(user, enabled);
|
|
||||||
|
|
||||||
if (!enabled) {
|
|
||||||
// Invalidate all sessions if the user is being disabled
|
|
||||||
List<Object> principals = sessionRegistry.getAllPrincipals();
|
|
||||||
String userNameP = "";
|
|
||||||
for (Object principal : principals) {
|
|
||||||
List<SessionInformation> sessionsInformations =
|
|
||||||
sessionRegistry.getAllSessions(principal, false);
|
|
||||||
if (principal instanceof UserDetails) {
|
|
||||||
userNameP = ((UserDetails) principal).getUsername();
|
|
||||||
} else if (principal instanceof OAuth2User) {
|
|
||||||
userNameP = ((OAuth2User) principal).getName();
|
|
||||||
} else if (principal instanceof String) {
|
|
||||||
userNameP = (String) principal;
|
|
||||||
}
|
|
||||||
if (userNameP.equalsIgnoreCase(username)) {
|
|
||||||
for (SessionInformation sessionsInformation : sessionsInformations) {
|
|
||||||
sessionRegistry.expireSession(sessionsInformation.getSessionId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new RedirectView(
|
return new RedirectView(
|
||||||
"/addUsers", true); // Redirect to account page after adding the user
|
"/addUsers", true); // Redirect to account page after adding the user
|
||||||
}
|
}
|
||||||
@@ -354,7 +285,7 @@ public class UserController {
|
|||||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||||
@PostMapping("/admin/deleteUser/{username}")
|
@PostMapping("/admin/deleteUser/{username}")
|
||||||
public RedirectView deleteUser(
|
public RedirectView deleteUser(
|
||||||
@PathVariable("username") String username, Authentication authentication) {
|
@PathVariable(name = "username") String username, Authentication authentication) {
|
||||||
|
|
||||||
if (!userService.usernameExistsIgnoreCase(username)) {
|
if (!userService.usernameExistsIgnoreCase(username)) {
|
||||||
return new RedirectView("/addUsers?messageType=deleteUsernameExists", true);
|
return new RedirectView("/addUsers?messageType=deleteUsernameExists", true);
|
||||||
@@ -367,18 +298,27 @@ public class UserController {
|
|||||||
if (currentUsername.equalsIgnoreCase(username)) {
|
if (currentUsername.equalsIgnoreCase(username)) {
|
||||||
return new RedirectView("/addUsers?messageType=deleteCurrentUser", true);
|
return new RedirectView("/addUsers?messageType=deleteCurrentUser", true);
|
||||||
}
|
}
|
||||||
|
invalidateUserSessions(username);
|
||||||
// Invalidate all sessions before deleting the user
|
|
||||||
List<SessionInformation> sessionsInformations =
|
|
||||||
sessionRegistry.getAllSessions(authentication.getPrincipal(), false);
|
|
||||||
for (SessionInformation sessionsInformation : sessionsInformations) {
|
|
||||||
sessionRegistry.expireSession(sessionsInformation.getSessionId());
|
|
||||||
sessionRegistry.removeSessionInformation(sessionsInformation.getSessionId());
|
|
||||||
}
|
|
||||||
userService.deleteUser(username);
|
userService.deleteUser(username);
|
||||||
return new RedirectView("/addUsers", true);
|
return new RedirectView("/addUsers", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Autowired private SessionRegistry sessionRegistry;
|
||||||
|
|
||||||
|
private void invalidateUserSessions(String username) {
|
||||||
|
for (Object principal : sessionRegistry.getAllPrincipals()) {
|
||||||
|
if (principal instanceof UserDetails) {
|
||||||
|
UserDetails userDetails = (UserDetails) principal;
|
||||||
|
if (userDetails.getUsername().equals(username)) {
|
||||||
|
for (SessionInformation session :
|
||||||
|
sessionRegistry.getAllSessions(principal, false)) {
|
||||||
|
session.expireNow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
|
@PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
|
||||||
@PostMapping("/get-api-key")
|
@PostMapping("/get-api-key")
|
||||||
public ResponseEntity<String> getApiKey(Principal principal) {
|
public ResponseEntity<String> getApiKey(Principal principal) {
|
||||||
|
|||||||
@@ -39,12 +39,6 @@ public class ConvertWebsiteToPDF {
|
|||||||
if (!URL.matches("^https?://.*") || !GeneralUtils.isValidURL(URL)) {
|
if (!URL.matches("^https?://.*") || !GeneralUtils.isValidURL(URL)) {
|
||||||
throw new IllegalArgumentException("Invalid URL format provided.");
|
throw new IllegalArgumentException("Invalid URL format provided.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate the URL is reachable
|
|
||||||
if (!GeneralUtils.isURLReachable(URL)) {
|
|
||||||
throw new IllegalArgumentException("URL is not reachable, please provide a valid URL.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Path tempOutputFile = null;
|
Path tempOutputFile = null;
|
||||||
byte[] pdfBytes;
|
byte[] pdfBytes;
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package stirling.software.SPDF.controller.api.misc;
|
package stirling.software.SPDF.controller.api.misc;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.stream.Collectors;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import org.apache.pdfbox.Loader;
|
import org.apache.pdfbox.Loader;
|
||||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
@@ -17,7 +17,6 @@ import org.apache.pdfbox.text.PDFTextStripper;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.MediaType;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
@@ -51,31 +50,31 @@ public class BlankPageController {
|
|||||||
int threshold = request.getThreshold();
|
int threshold = request.getThreshold();
|
||||||
float whitePercent = request.getWhitePercent();
|
float whitePercent = request.getWhitePercent();
|
||||||
|
|
||||||
try (PDDocument document = Loader.loadPDF(inputFile.getBytes())) {
|
PDDocument document = null;
|
||||||
|
try {
|
||||||
|
document = Loader.loadPDF(inputFile.getBytes());
|
||||||
PDPageTree pages = document.getDocumentCatalog().getPages();
|
PDPageTree pages = document.getDocumentCatalog().getPages();
|
||||||
PDFTextStripper textStripper = new PDFTextStripper();
|
PDFTextStripper textStripper = new PDFTextStripper();
|
||||||
|
|
||||||
List<PDPage> nonBlankPages = new ArrayList<>();
|
List<Integer> pagesToKeepIndex = new ArrayList<>();
|
||||||
List<PDPage> blankPages = new ArrayList<>();
|
|
||||||
int pageIndex = 0;
|
int pageIndex = 0;
|
||||||
|
|
||||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||||
pdfRenderer.setSubsamplingAllowed(true);
|
pdfRenderer.setSubsamplingAllowed(true);
|
||||||
for (PDPage page : pages) {
|
for (PDPage page : pages) {
|
||||||
logger.info("checking page {}", pageIndex);
|
logger.info("checking page " + pageIndex);
|
||||||
textStripper.setStartPage(pageIndex + 1);
|
textStripper.setStartPage(pageIndex + 1);
|
||||||
textStripper.setEndPage(pageIndex + 1);
|
textStripper.setEndPage(pageIndex + 1);
|
||||||
String pageText = textStripper.getText(document);
|
String pageText = textStripper.getText(document);
|
||||||
boolean hasText = !pageText.trim().isEmpty();
|
boolean hasText = !pageText.trim().isEmpty();
|
||||||
|
|
||||||
boolean blank = true;
|
Boolean blank = true;
|
||||||
if (hasText) {
|
if (hasText) {
|
||||||
logger.info("page {} has text, not blank", pageIndex);
|
logger.info("page " + pageIndex + " has text, not blank");
|
||||||
blank = false;
|
blank = false;
|
||||||
} else {
|
} else {
|
||||||
boolean hasImages = PdfUtils.hasImagesOnPage(page);
|
boolean hasImages = PdfUtils.hasImagesOnPage(page);
|
||||||
if (hasImages) {
|
if (hasImages) {
|
||||||
logger.info("page {} has image, running blank detection", pageIndex);
|
logger.info("page " + pageIndex + " has image, running blank detection");
|
||||||
// Render image and save as temp file
|
// Render image and save as temp file
|
||||||
BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 30);
|
BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 30);
|
||||||
blank = isBlankImage(image, threshold, whitePercent, threshold);
|
blank = isBlankImage(image, threshold, whitePercent, threshold);
|
||||||
@@ -83,57 +82,34 @@ public class BlankPageController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (blank) {
|
if (blank) {
|
||||||
logger.info("Skipping, Image was blank for page #{}", pageIndex);
|
logger.info("Skipping, Image was blank for page #" + pageIndex);
|
||||||
blankPages.add(page);
|
|
||||||
} else {
|
} else {
|
||||||
logger.info("page {} has image which is not blank", pageIndex);
|
logger.info("page " + pageIndex + " has image which is not blank");
|
||||||
nonBlankPages.add(page);
|
pagesToKeepIndex.add(pageIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
pageIndex++;
|
pageIndex++;
|
||||||
}
|
}
|
||||||
|
// Remove pages not present in pagesToKeepIndex
|
||||||
|
List<Integer> pageIndices =
|
||||||
|
IntStream.range(0, pages.getCount()).boxed().collect(Collectors.toList());
|
||||||
|
Collections.reverse(pageIndices); // Reverse to prevent index shifting during removal
|
||||||
|
for (Integer i : pageIndices) {
|
||||||
|
if (!pagesToKeepIndex.contains(i)) {
|
||||||
|
pages.remove(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
ZipOutputStream zos = new ZipOutputStream(baos);
|
document,
|
||||||
|
|
||||||
String filename =
|
|
||||||
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
.replaceFirst("[.][^.]+$", "");
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_blanksRemoved.pdf");
|
||||||
if (!nonBlankPages.isEmpty()) {
|
|
||||||
createZipEntry(zos, nonBlankPages, filename + "_nonBlankPages.pdf");
|
|
||||||
} else {
|
|
||||||
createZipEntry(zos, blankPages, filename + "_allBlankPages.pdf");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!nonBlankPages.isEmpty() && !blankPages.isEmpty()) {
|
|
||||||
createZipEntry(zos, blankPages, filename + "_blankPages.pdf");
|
|
||||||
}
|
|
||||||
|
|
||||||
zos.close();
|
|
||||||
|
|
||||||
logger.info("Returning ZIP file: {}", filename + "_processed.zip");
|
|
||||||
return WebResponseUtils.boasToWebResponse(
|
|
||||||
baos, filename + "_processed.zip", MediaType.APPLICATION_OCTET_STREAM);
|
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.error("exception", e);
|
logger.error("exception", e);
|
||||||
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
|
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
|
||||||
}
|
} finally {
|
||||||
}
|
if (document != null) document.close();
|
||||||
|
|
||||||
public void createZipEntry(ZipOutputStream zos, List<PDPage> pages, String entryName)
|
|
||||||
throws IOException {
|
|
||||||
try (PDDocument document = new PDDocument()) {
|
|
||||||
|
|
||||||
for (PDPage page : pages) {
|
|
||||||
document.addPage(page);
|
|
||||||
}
|
|
||||||
|
|
||||||
ZipEntry zipEntry = new ZipEntry(entryName);
|
|
||||||
zos.putNextEntry(zipEntry);
|
|
||||||
document.save(zos);
|
|
||||||
zos.closeEntry();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
package stirling.software.SPDF.controller.api.misc;
|
package stirling.software.SPDF.controller.api.misc;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.Image;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.awt.image.RenderedImage;
|
import java.awt.image.RenderedImage;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
import java.util.zip.Deflater;
|
import java.util.zip.Deflater;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
@@ -50,19 +47,16 @@ public class ExtractImagesController {
|
|||||||
@Operation(
|
@Operation(
|
||||||
summary = "Extract images from a PDF file",
|
summary = "Extract images from a PDF file",
|
||||||
description =
|
description =
|
||||||
"This endpoint extracts images from a given PDF file and returns them in a zip file. Users can specify the output image format. Input: PDF Output: IMAGE/ZIP Type: SIMO")
|
"This endpoint extracts images from a given PDF file and returns them in a zip file. Users can specify the output image format. Input:PDF Output:IMAGE/ZIP Type:SIMO")
|
||||||
public ResponseEntity<byte[]> extractImages(@ModelAttribute PDFWithImageFormatRequest request)
|
public ResponseEntity<byte[]> extractImages(@ModelAttribute PDFWithImageFormatRequest request)
|
||||||
throws IOException, InterruptedException, ExecutionException {
|
throws IOException {
|
||||||
MultipartFile file = request.getFileInput();
|
MultipartFile file = request.getFileInput();
|
||||||
String format = request.getFormat();
|
String format = request.getFormat();
|
||||||
|
|
||||||
System.out.println(
|
System.out.println(
|
||||||
System.currentTimeMillis() + " file=" + file.getName() + ", format=" + format);
|
System.currentTimeMillis() + "file=" + file.getName() + ", format=" + format);
|
||||||
PDDocument document = Loader.loadPDF(file.getBytes());
|
PDDocument document = Loader.loadPDF(file.getBytes());
|
||||||
|
|
||||||
// Determine if multithreading should be used based on PDF size or number of pages
|
|
||||||
boolean useMultithreading = shouldUseMultithreading(file, document);
|
|
||||||
|
|
||||||
// Create ByteArrayOutputStream to write zip file to byte array
|
// Create ByteArrayOutputStream to write zip file to byte array
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
|
||||||
@@ -72,51 +66,71 @@ public class ExtractImagesController {
|
|||||||
// Set compression level
|
// Set compression level
|
||||||
zos.setLevel(Deflater.BEST_COMPRESSION);
|
zos.setLevel(Deflater.BEST_COMPRESSION);
|
||||||
|
|
||||||
|
int imageIndex = 1;
|
||||||
String filename =
|
String filename =
|
||||||
Filenames.toSimpleFileName(file.getOriginalFilename())
|
Filenames.toSimpleFileName(file.getOriginalFilename())
|
||||||
.replaceFirst("[.][^.]+$", "");
|
.replaceFirst("[.][^.]+$", "");
|
||||||
|
int pageNum = 0;
|
||||||
Set<Integer> processedImages = new HashSet<>();
|
Set<Integer> processedImages = new HashSet<>();
|
||||||
|
// Iterate over each page
|
||||||
|
for (PDPage page : document.getPages()) {
|
||||||
|
++pageNum;
|
||||||
|
// Extract images from page
|
||||||
|
for (COSName name : page.getResources().getXObjectNames()) {
|
||||||
|
if (page.getResources().isImageXObject(name)) {
|
||||||
|
PDImageXObject image = (PDImageXObject) page.getResources().getXObject(name);
|
||||||
|
int imageHash = image.hashCode();
|
||||||
|
if (processedImages.contains(imageHash)) {
|
||||||
|
continue; // Skip already processed images
|
||||||
|
}
|
||||||
|
processedImages.add(imageHash);
|
||||||
|
|
||||||
if (useMultithreading) {
|
// Convert image to desired format
|
||||||
// Executor service to handle multithreading
|
RenderedImage renderedImage = image.getImage();
|
||||||
ExecutorService executor =
|
BufferedImage bufferedImage = null;
|
||||||
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
|
if ("png".equalsIgnoreCase(format)) {
|
||||||
Set<Future<Void>> futures = new HashSet<>();
|
bufferedImage =
|
||||||
|
new BufferedImage(
|
||||||
|
renderedImage.getWidth(),
|
||||||
|
renderedImage.getHeight(),
|
||||||
|
BufferedImage.TYPE_INT_ARGB);
|
||||||
|
} else if ("jpeg".equalsIgnoreCase(format) || "jpg".equalsIgnoreCase(format)) {
|
||||||
|
bufferedImage =
|
||||||
|
new BufferedImage(
|
||||||
|
renderedImage.getWidth(),
|
||||||
|
renderedImage.getHeight(),
|
||||||
|
BufferedImage.TYPE_INT_RGB);
|
||||||
|
} else if ("gif".equalsIgnoreCase(format)) {
|
||||||
|
bufferedImage =
|
||||||
|
new BufferedImage(
|
||||||
|
renderedImage.getWidth(),
|
||||||
|
renderedImage.getHeight(),
|
||||||
|
BufferedImage.TYPE_BYTE_INDEXED);
|
||||||
|
}
|
||||||
|
|
||||||
// Iterate over each page
|
// Write image to zip file
|
||||||
for (int pgNum = 0; pgNum < document.getPages().getCount(); pgNum++) {
|
String imageName =
|
||||||
PDPage page = document.getPage(pgNum);
|
filename + "_" + imageIndex + " (Page " + pageNum + ")." + format;
|
||||||
int pageNum = document.getPages().indexOf(page) + 1;
|
ZipEntry zipEntry = new ZipEntry(imageName);
|
||||||
// Submit a task for processing each page
|
zos.putNextEntry(zipEntry);
|
||||||
Future<Void> future =
|
|
||||||
executor.submit(
|
|
||||||
() -> {
|
|
||||||
extractImagesFromPage(
|
|
||||||
page, format, filename, pageNum, processedImages, zos);
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
|
|
||||||
futures.add(future);
|
Graphics2D g = bufferedImage.createGraphics();
|
||||||
}
|
g.drawImage((Image) renderedImage, 0, 0, null);
|
||||||
|
g.dispose();
|
||||||
|
// Write image bytes to zip file
|
||||||
|
ByteArrayOutputStream imageBaos = new ByteArrayOutputStream();
|
||||||
|
ImageIO.write(bufferedImage, format, imageBaos);
|
||||||
|
zos.write(imageBaos.toByteArray());
|
||||||
|
|
||||||
// Wait for all tasks to complete
|
zos.closeEntry();
|
||||||
for (Future<Void> future : futures) {
|
imageIndex++;
|
||||||
future.get();
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Close executor service
|
|
||||||
executor.shutdown();
|
|
||||||
} else {
|
|
||||||
// Single-threaded extraction
|
|
||||||
for (int pgNum = 0; pgNum < document.getPages().getCount(); pgNum++) {
|
|
||||||
PDPage page = document.getPage(pgNum);
|
|
||||||
extractImagesFromPage(page, format, filename, pgNum + 1, processedImages, zos);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close PDDocument and ZipOutputStream
|
// Close ZipOutputStream and PDDocument
|
||||||
document.close();
|
|
||||||
zos.close();
|
zos.close();
|
||||||
|
document.close();
|
||||||
|
|
||||||
// Create ByteArrayResource from byte array
|
// Create ByteArrayResource from byte array
|
||||||
byte[] zipContents = baos.toByteArray();
|
byte[] zipContents = baos.toByteArray();
|
||||||
@@ -124,69 +138,4 @@ public class ExtractImagesController {
|
|||||||
return WebResponseUtils.boasToWebResponse(
|
return WebResponseUtils.boasToWebResponse(
|
||||||
baos, filename + "_extracted-images.zip", MediaType.APPLICATION_OCTET_STREAM);
|
baos, filename + "_extracted-images.zip", MediaType.APPLICATION_OCTET_STREAM);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldUseMultithreading(MultipartFile file, PDDocument document) {
|
|
||||||
// Criteria: Use multithreading if file size > 10MB or number of pages > 20
|
|
||||||
long fileSizeInMB = file.getSize() / (1024 * 1024);
|
|
||||||
int numberOfPages = document.getPages().getCount();
|
|
||||||
return fileSizeInMB > 10 || numberOfPages > 20;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void extractImagesFromPage(
|
|
||||||
PDPage page,
|
|
||||||
String format,
|
|
||||||
String filename,
|
|
||||||
int pageNum,
|
|
||||||
Set<Integer> processedImages,
|
|
||||||
ZipOutputStream zos)
|
|
||||||
throws IOException {
|
|
||||||
for (COSName name : page.getResources().getXObjectNames()) {
|
|
||||||
if (page.getResources().isImageXObject(name)) {
|
|
||||||
PDImageXObject image = (PDImageXObject) page.getResources().getXObject(name);
|
|
||||||
int imageHash = image.hashCode();
|
|
||||||
synchronized (processedImages) {
|
|
||||||
if (processedImages.contains(imageHash)) {
|
|
||||||
continue; // Skip already processed images
|
|
||||||
}
|
|
||||||
processedImages.add(imageHash);
|
|
||||||
}
|
|
||||||
|
|
||||||
RenderedImage renderedImage = image.getImage();
|
|
||||||
|
|
||||||
// Convert to standard RGB colorspace if needed
|
|
||||||
BufferedImage bufferedImage = convertToRGB(renderedImage, format);
|
|
||||||
|
|
||||||
// Write image to zip file
|
|
||||||
String imageName = filename + "_" + imageHash + " (Page " + pageNum + ")." + format;
|
|
||||||
synchronized (zos) {
|
|
||||||
zos.putNextEntry(new ZipEntry(imageName));
|
|
||||||
ByteArrayOutputStream imageBaos = new ByteArrayOutputStream();
|
|
||||||
ImageIO.write(bufferedImage, format, imageBaos);
|
|
||||||
zos.write(imageBaos.toByteArray());
|
|
||||||
zos.closeEntry();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private BufferedImage convertToRGB(RenderedImage renderedImage, String format) {
|
|
||||||
int width = renderedImage.getWidth();
|
|
||||||
int height = renderedImage.getHeight();
|
|
||||||
BufferedImage rgbImage;
|
|
||||||
|
|
||||||
if ("png".equalsIgnoreCase(format)) {
|
|
||||||
rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
|
|
||||||
} else if ("jpeg".equalsIgnoreCase(format) || "jpg".equalsIgnoreCase(format)) {
|
|
||||||
rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
|
||||||
} else if ("gif".equalsIgnoreCase(format)) {
|
|
||||||
rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_INDEXED);
|
|
||||||
} else {
|
|
||||||
rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
|
||||||
}
|
|
||||||
|
|
||||||
Graphics2D g = rgbImage.createGraphics();
|
|
||||||
g.drawImage((Image) renderedImage, 0, 0, null);
|
|
||||||
g.dispose();
|
|
||||||
return rgbImage;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ import java.util.stream.Collectors;
|
|||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
@@ -26,7 +27,6 @@ import io.github.pixee.security.Filenames;
|
|||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
import stirling.software.SPDF.model.ApplicationProperties;
|
|
||||||
import stirling.software.SPDF.model.api.misc.ProcessPdfWithOcrRequest;
|
import stirling.software.SPDF.model.api.misc.ProcessPdfWithOcrRequest;
|
||||||
import stirling.software.SPDF.utils.ProcessExecutor;
|
import stirling.software.SPDF.utils.ProcessExecutor;
|
||||||
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
|
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
|
||||||
@@ -37,10 +37,10 @@ import stirling.software.SPDF.utils.WebResponseUtils;
|
|||||||
@Tag(name = "Misc", description = "Miscellaneous APIs")
|
@Tag(name = "Misc", description = "Miscellaneous APIs")
|
||||||
public class OCRController {
|
public class OCRController {
|
||||||
|
|
||||||
@Autowired ApplicationProperties applicationProperties;
|
private static final Logger logger = LoggerFactory.getLogger(OCRController.class);
|
||||||
|
|
||||||
public List<String> getAvailableTesseractLanguages() {
|
public List<String> getAvailableTesseractLanguages() {
|
||||||
String tessdataDir = applicationProperties.getSystem().getTessdataDir();
|
String tessdataDir = "/usr/share/tessdata";
|
||||||
File[] files = new File(tessdataDir).listFiles();
|
File[] files = new File(tessdataDir).listFiles();
|
||||||
if (files == null) {
|
if (files == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|||||||
@@ -1,14 +1,21 @@
|
|||||||
package stirling.software.SPDF.controller.api.security;
|
package stirling.software.SPDF.controller.api.security;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.pdfbox.Loader;
|
import org.apache.pdfbox.Loader;
|
||||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDPage;
|
||||||
import org.apache.pdfbox.pdmodel.PDPageContentStream;
|
import org.apache.pdfbox.pdmodel.PDPageContentStream;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
|
||||||
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
||||||
|
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
|
||||||
|
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
|
||||||
|
import org.apache.pdfbox.rendering.ImageType;
|
||||||
|
import org.apache.pdfbox.rendering.PDFRenderer;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
@@ -25,7 +32,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
|
|||||||
import stirling.software.SPDF.model.PDFText;
|
import stirling.software.SPDF.model.PDFText;
|
||||||
import stirling.software.SPDF.model.api.security.RedactPdfRequest;
|
import stirling.software.SPDF.model.api.security.RedactPdfRequest;
|
||||||
import stirling.software.SPDF.pdf.TextFinder;
|
import stirling.software.SPDF.pdf.TextFinder;
|
||||||
import stirling.software.SPDF.utils.PdfUtils;
|
|
||||||
import stirling.software.SPDF.utils.WebResponseUtils;
|
import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@@ -75,9 +81,22 @@ public class RedactController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (convertPDFToImage) {
|
if (convertPDFToImage) {
|
||||||
PDDocument convertedPdf = PdfUtils.convertPdfToPdfImage(document);
|
PDDocument imageDocument = new PDDocument();
|
||||||
|
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||||
|
pdfRenderer.setSubsamplingAllowed(true);
|
||||||
|
for (int page = 0; page < document.getNumberOfPages(); ++page) {
|
||||||
|
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
|
||||||
|
PDPage newPage = new PDPage(new PDRectangle(bim.getWidth(), bim.getHeight()));
|
||||||
|
imageDocument.addPage(newPage);
|
||||||
|
PDImageXObject pdImage = LosslessFactory.createFromImage(imageDocument, bim);
|
||||||
|
PDPageContentStream contentStream =
|
||||||
|
new PDPageContentStream(
|
||||||
|
imageDocument, newPage, AppendMode.APPEND, true, true);
|
||||||
|
contentStream.drawImage(pdImage, 0, 0);
|
||||||
|
contentStream.close();
|
||||||
|
}
|
||||||
document.close();
|
document.close();
|
||||||
document = convertedPdf;
|
document = imageDocument;
|
||||||
}
|
}
|
||||||
|
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import io.swagger.v3.oas.annotations.Operation;
|
|||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
import stirling.software.SPDF.model.api.security.AddWatermarkRequest;
|
import stirling.software.SPDF.model.api.security.AddWatermarkRequest;
|
||||||
import stirling.software.SPDF.utils.PdfUtils;
|
|
||||||
import stirling.software.SPDF.utils.WebResponseUtils;
|
import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@@ -61,7 +60,6 @@ public class WatermarkController {
|
|||||||
float opacity = request.getOpacity();
|
float opacity = request.getOpacity();
|
||||||
int widthSpacer = request.getWidthSpacer();
|
int widthSpacer = request.getWidthSpacer();
|
||||||
int heightSpacer = request.getHeightSpacer();
|
int heightSpacer = request.getHeightSpacer();
|
||||||
boolean convertPdfToImage = request.isConvertPDFToImage();
|
|
||||||
|
|
||||||
// Load the input PDF
|
// Load the input PDF
|
||||||
PDDocument document = Loader.loadPDF(pdfFile.getBytes());
|
PDDocument document = Loader.loadPDF(pdfFile.getBytes());
|
||||||
@@ -106,12 +104,6 @@ public class WatermarkController {
|
|||||||
contentStream.close();
|
contentStream.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (convertPdfToImage) {
|
|
||||||
PDDocument convertedPdf = PdfUtils.convertPdfToPdfImage(document);
|
|
||||||
document.close();
|
|
||||||
document = convertedPdf;
|
|
||||||
}
|
|
||||||
|
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
document,
|
document,
|
||||||
Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
|
Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
package stirling.software.SPDF.controller.web;
|
package stirling.software.SPDF.controller.web;
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.temporal.ChronoUnit;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
@@ -25,14 +23,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import stirling.software.SPDF.config.security.session.SessionPersistentRegistry;
|
|
||||||
import stirling.software.SPDF.model.ApplicationProperties;
|
import stirling.software.SPDF.model.ApplicationProperties;
|
||||||
import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
|
import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
|
||||||
import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2.Client;
|
import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2.Client;
|
||||||
import stirling.software.SPDF.model.Authority;
|
import stirling.software.SPDF.model.Authority;
|
||||||
import stirling.software.SPDF.model.Role;
|
import stirling.software.SPDF.model.Role;
|
||||||
import stirling.software.SPDF.model.SessionEntity;
|
|
||||||
import stirling.software.SPDF.model.User;
|
import stirling.software.SPDF.model.User;
|
||||||
import stirling.software.SPDF.model.provider.GithubProvider;
|
import stirling.software.SPDF.model.provider.GithubProvider;
|
||||||
import stirling.software.SPDF.model.provider.GoogleProvider;
|
import stirling.software.SPDF.model.provider.GoogleProvider;
|
||||||
@@ -40,20 +35,15 @@ import stirling.software.SPDF.model.provider.KeycloakProvider;
|
|||||||
import stirling.software.SPDF.repository.UserRepository;
|
import stirling.software.SPDF.repository.UserRepository;
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
@Slf4j
|
|
||||||
@Tag(name = "Account Security", description = "Account Security APIs")
|
@Tag(name = "Account Security", description = "Account Security APIs")
|
||||||
public class AccountWebController {
|
public class AccountWebController {
|
||||||
|
|
||||||
@Autowired ApplicationProperties applicationProperties;
|
@Autowired ApplicationProperties applicationProperties;
|
||||||
@Autowired SessionPersistentRegistry sessionPersistentRegistry;
|
private static final Logger logger = LoggerFactory.getLogger(AccountWebController.class);
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UserRepository userRepository; // Assuming you have a repository for user operations
|
|
||||||
|
|
||||||
@GetMapping("/login")
|
@GetMapping("/login")
|
||||||
public String login(HttpServletRequest request, Model model, Authentication authentication) {
|
public String login(HttpServletRequest request, Model model, Authentication authentication) {
|
||||||
|
|
||||||
// If the user is already authenticated, redirect them to the home page.
|
|
||||||
if (authentication != null && authentication.isAuthenticated()) {
|
if (authentication != null && authentication.isAuthenticated()) {
|
||||||
return "redirect:/";
|
return "redirect:/";
|
||||||
}
|
}
|
||||||
@@ -147,13 +137,6 @@ public class AccountWebController {
|
|||||||
break;
|
break;
|
||||||
case "invalid_id_token":
|
case "invalid_id_token":
|
||||||
erroroauth = "login.oauth2InvalidIdToken";
|
erroroauth = "login.oauth2InvalidIdToken";
|
||||||
break;
|
|
||||||
case "oauth2_admin_blocked_user":
|
|
||||||
erroroauth = "login.oauth2AdminBlockedUser";
|
|
||||||
break;
|
|
||||||
case "userIsDisabled":
|
|
||||||
erroroauth = "login.userIsDisabled";
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -172,6 +155,9 @@ public class AccountWebController {
|
|||||||
return "login";
|
return "login";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserRepository userRepository; // Assuming you have a repository for user operations
|
||||||
|
|
||||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||||
@GetMapping("/addUsers")
|
@GetMapping("/addUsers")
|
||||||
public String showAddUserForm(
|
public String showAddUserForm(
|
||||||
@@ -180,13 +166,6 @@ public class AccountWebController {
|
|||||||
Iterator<User> iterator = allUsers.iterator();
|
Iterator<User> iterator = allUsers.iterator();
|
||||||
Map<String, String> roleDetails = Role.getAllRoleDetails();
|
Map<String, String> roleDetails = Role.getAllRoleDetails();
|
||||||
|
|
||||||
// Map to store session information and user activity status
|
|
||||||
Map<String, Boolean> userSessions = new HashMap<>();
|
|
||||||
Map<String, Date> userLastRequest = new HashMap<>();
|
|
||||||
|
|
||||||
int activeUsers = 0;
|
|
||||||
int disabledUsers = 0;
|
|
||||||
|
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
User user = iterator.next();
|
User user = iterator.next();
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
@@ -197,73 +176,9 @@ public class AccountWebController {
|
|||||||
break; // Break out of the inner loop once the user is removed
|
break; // Break out of the inner loop once the user is removed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine the user's session status and last request time
|
|
||||||
int maxInactiveInterval = sessionPersistentRegistry.getMaxInactiveInterval();
|
|
||||||
boolean hasActiveSession = false;
|
|
||||||
Date lastRequest = null;
|
|
||||||
|
|
||||||
Optional<SessionEntity> latestSession =
|
|
||||||
sessionPersistentRegistry.findLatestSession(user.getUsername());
|
|
||||||
if (latestSession.isPresent()) {
|
|
||||||
SessionEntity sessionEntity = latestSession.get();
|
|
||||||
Date lastAccessedTime = sessionEntity.getLastRequest();
|
|
||||||
Instant now = Instant.now();
|
|
||||||
|
|
||||||
// Calculate session expiration and update session status accordingly
|
|
||||||
Instant expirationTime =
|
|
||||||
lastAccessedTime
|
|
||||||
.toInstant()
|
|
||||||
.plus(maxInactiveInterval, ChronoUnit.SECONDS);
|
|
||||||
if (now.isAfter(expirationTime)) {
|
|
||||||
sessionPersistentRegistry.expireSession(sessionEntity.getSessionId());
|
|
||||||
hasActiveSession = false;
|
|
||||||
} else {
|
|
||||||
hasActiveSession = !sessionEntity.isExpired();
|
|
||||||
}
|
|
||||||
|
|
||||||
lastRequest = sessionEntity.getLastRequest();
|
|
||||||
} else {
|
|
||||||
hasActiveSession = false;
|
|
||||||
lastRequest = new Date(0); // No session, set default last request time
|
|
||||||
}
|
|
||||||
|
|
||||||
userSessions.put(user.getUsername(), hasActiveSession);
|
|
||||||
userLastRequest.put(user.getUsername(), lastRequest);
|
|
||||||
|
|
||||||
if (hasActiveSession) {
|
|
||||||
activeUsers++;
|
|
||||||
}
|
|
||||||
if (!user.isEnabled()) {
|
|
||||||
disabledUsers++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort users by active status and last request date
|
|
||||||
List<User> sortedUsers =
|
|
||||||
allUsers.stream()
|
|
||||||
.sorted(
|
|
||||||
(u1, u2) -> {
|
|
||||||
boolean u1Active = userSessions.get(u1.getUsername());
|
|
||||||
boolean u2Active = userSessions.get(u2.getUsername());
|
|
||||||
|
|
||||||
if (u1Active && !u2Active) {
|
|
||||||
return -1;
|
|
||||||
} else if (!u1Active && u2Active) {
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
Date u1LastRequest =
|
|
||||||
userLastRequest.getOrDefault(
|
|
||||||
u1.getUsername(), new Date(0));
|
|
||||||
Date u2LastRequest =
|
|
||||||
userLastRequest.getOrDefault(
|
|
||||||
u2.getUsername(), new Date(0));
|
|
||||||
return u2LastRequest.compareTo(u1LastRequest);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
String messageType = request.getParameter("messageType");
|
String messageType = request.getParameter("messageType");
|
||||||
|
|
||||||
String deleteMessage = null;
|
String deleteMessage = null;
|
||||||
@@ -288,9 +203,6 @@ public class AccountWebController {
|
|||||||
case "invalidUsername":
|
case "invalidUsername":
|
||||||
addMessage = "invalidUsernameMessage";
|
addMessage = "invalidUsernameMessage";
|
||||||
break;
|
break;
|
||||||
case "invalidPassword":
|
|
||||||
addMessage = "invalidPasswordMessage";
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -306,24 +218,16 @@ public class AccountWebController {
|
|||||||
case "downgradeCurrentUser":
|
case "downgradeCurrentUser":
|
||||||
changeMessage = "downgradeCurrentUserMessage";
|
changeMessage = "downgradeCurrentUserMessage";
|
||||||
break;
|
break;
|
||||||
case "disabledCurrentUser":
|
|
||||||
changeMessage = "disabledCurrentUserMessage";
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
changeMessage = messageType;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
model.addAttribute("changeMessage", changeMessage);
|
model.addAttribute("changeMessage", changeMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
model.addAttribute("users", sortedUsers);
|
model.addAttribute("users", allUsers);
|
||||||
model.addAttribute("currentUsername", authentication.getName());
|
model.addAttribute("currentUsername", authentication.getName());
|
||||||
model.addAttribute("roleDetails", roleDetails);
|
model.addAttribute("roleDetails", roleDetails);
|
||||||
model.addAttribute("userSessions", userSessions);
|
|
||||||
model.addAttribute("userLastRequest", userLastRequest);
|
|
||||||
model.addAttribute("totalUsers", allUsers.size());
|
|
||||||
model.addAttribute("activeUsers", activeUsers);
|
|
||||||
model.addAttribute("disabledUsers", disabledUsers);
|
|
||||||
return "addUsers";
|
return "addUsers";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,7 +278,7 @@ public class AccountWebController {
|
|||||||
settingsJson = objectMapper.writeValueAsString(user.get().getSettings());
|
settingsJson = objectMapper.writeValueAsString(user.get().getSettings());
|
||||||
} catch (JsonProcessingException e) {
|
} catch (JsonProcessingException e) {
|
||||||
// Handle JSON conversion error
|
// Handle JSON conversion error
|
||||||
log.error("exception", e);
|
logger.error("exception", e);
|
||||||
return "redirect:/error";
|
return "redirect:/error";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -310,11 +310,4 @@ public class GeneralWebController {
|
|||||||
model.addAttribute("currentPage", "auto-split-pdf");
|
model.addAttribute("currentPage", "auto-split-pdf");
|
||||||
return "auto-split-pdf";
|
return "auto-split-pdf";
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/remove-image-pdf")
|
|
||||||
@Hidden
|
|
||||||
public String removeImagePdfForm(Model model) {
|
|
||||||
model.addAttribute("currentPage", "remove-image-pdf");
|
|
||||||
return "remove-image-pdf";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.Model;
|
import org.springframework.ui.Model;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@@ -15,14 +14,10 @@ import org.springframework.web.servlet.ModelAndView;
|
|||||||
import io.swagger.v3.oas.annotations.Hidden;
|
import io.swagger.v3.oas.annotations.Hidden;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
import stirling.software.SPDF.model.ApplicationProperties;
|
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
@Tag(name = "Misc", description = "Miscellaneous APIs")
|
@Tag(name = "Misc", description = "Miscellaneous APIs")
|
||||||
public class OtherWebController {
|
public class OtherWebController {
|
||||||
|
|
||||||
@Autowired ApplicationProperties applicationProperties;
|
|
||||||
|
|
||||||
@GetMapping("/compress-pdf")
|
@GetMapping("/compress-pdf")
|
||||||
@Hidden
|
@Hidden
|
||||||
public String compressPdfForm(Model model) {
|
public String compressPdfForm(Model model) {
|
||||||
@@ -102,7 +97,7 @@ public class OtherWebController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getAvailableTesseractLanguages() {
|
public List<String> getAvailableTesseractLanguages() {
|
||||||
String tessdataDir = applicationProperties.getSystem().getTessdataDir();
|
String tessdataDir = "/usr/share/tessdata";
|
||||||
File[] files = new File(tessdataDir).listFiles();
|
File[] files = new File(tessdataDir).listFiles();
|
||||||
if (files == null) {
|
if (files == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|||||||
@@ -241,7 +241,6 @@ public class ApplicationProperties {
|
|||||||
private String clientId;
|
private String clientId;
|
||||||
private String clientSecret;
|
private String clientSecret;
|
||||||
private Boolean autoCreateUser = false;
|
private Boolean autoCreateUser = false;
|
||||||
private Boolean blockRegistration = false;
|
|
||||||
private String useAsUsername;
|
private String useAsUsername;
|
||||||
private Collection<String> scopes = new ArrayList<>();
|
private Collection<String> scopes = new ArrayList<>();
|
||||||
private String provider;
|
private String provider;
|
||||||
@@ -287,14 +286,6 @@ public class ApplicationProperties {
|
|||||||
this.autoCreateUser = autoCreateUser;
|
this.autoCreateUser = autoCreateUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getBlockRegistration() {
|
|
||||||
return blockRegistration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBlockRegistration(Boolean blockRegistration) {
|
|
||||||
this.blockRegistration = blockRegistration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUseAsUsername() {
|
public String getUseAsUsername() {
|
||||||
return useAsUsername;
|
return useAsUsername;
|
||||||
}
|
}
|
||||||
@@ -365,14 +356,10 @@ public class ApplicationProperties {
|
|||||||
+ (clientSecret != null && !clientSecret.isEmpty() ? "MASKED" : "NULL")
|
+ (clientSecret != null && !clientSecret.isEmpty() ? "MASKED" : "NULL")
|
||||||
+ ", autoCreateUser="
|
+ ", autoCreateUser="
|
||||||
+ autoCreateUser
|
+ autoCreateUser
|
||||||
+ ", blockRegistration="
|
|
||||||
+ blockRegistration
|
|
||||||
+ ", useAsUsername="
|
+ ", useAsUsername="
|
||||||
+ useAsUsername
|
+ useAsUsername
|
||||||
+ ", provider="
|
+ ", provider="
|
||||||
+ provider
|
+ provider
|
||||||
+ ", client="
|
|
||||||
+ client
|
|
||||||
+ ", scopes="
|
+ ", scopes="
|
||||||
+ scopes
|
+ scopes
|
||||||
+ "]";
|
+ "]";
|
||||||
@@ -442,15 +429,6 @@ public class ApplicationProperties {
|
|||||||
private boolean showUpdate;
|
private boolean showUpdate;
|
||||||
private Boolean showUpdateOnlyAdmin;
|
private Boolean showUpdateOnlyAdmin;
|
||||||
private boolean customHTMLFiles;
|
private boolean customHTMLFiles;
|
||||||
private String tessdataDir;
|
|
||||||
|
|
||||||
public String getTessdataDir() {
|
|
||||||
return tessdataDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTessdataDir(String tessdataDir) {
|
|
||||||
this.tessdataDir = tessdataDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isCustomHTMLFiles() {
|
public boolean isCustomHTMLFiles() {
|
||||||
return customHTMLFiles;
|
return customHTMLFiles;
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
package stirling.software.SPDF.model;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
import jakarta.persistence.Entity;
|
|
||||||
import jakarta.persistence.Id;
|
|
||||||
import jakarta.persistence.Lob;
|
|
||||||
import jakarta.persistence.Table;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Data
|
|
||||||
@Table(name = "sessions")
|
|
||||||
public class SessionEntity implements Serializable {
|
|
||||||
@Id private String sessionId;
|
|
||||||
|
|
||||||
@Lob private String principalName;
|
|
||||||
|
|
||||||
private Date lastRequest;
|
|
||||||
|
|
||||||
private boolean expired;
|
|
||||||
}
|
|
||||||
@@ -44,7 +44,4 @@ public class AddWatermarkRequest extends PDFFile {
|
|||||||
|
|
||||||
@Schema(description = "The height spacer between watermark elements", example = "50")
|
@Schema(description = "The height spacer between watermark elements", example = "50")
|
||||||
private int heightSpacer;
|
private int heightSpacer;
|
||||||
|
|
||||||
@Schema(description = "Convert the redacted PDF to an image", defaultValue = "false")
|
|
||||||
private boolean convertPDFToImage;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,14 +31,6 @@ public class GoogleProvider extends Provider {
|
|||||||
private Collection<String> scopes = new ArrayList<>();
|
private Collection<String> scopes = new ArrayList<>();
|
||||||
private String useAsUsername = "email";
|
private String useAsUsername = "email";
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getIssuer() {
|
|
||||||
return new String();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setIssuer(String issuer) {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getClientId() {
|
public String getClientId() {
|
||||||
return this.clientId;
|
return this.clientId;
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
package stirling.software.SPDF.service;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import org.apache.pdfbox.cos.COSName;
|
|
||||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
|
||||||
import org.apache.pdfbox.pdmodel.PDPage;
|
|
||||||
import org.apache.pdfbox.pdmodel.PDResources;
|
|
||||||
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
/** Service class responsible for removing image objects from a PDF document. */
|
|
||||||
@Service
|
|
||||||
public class PdfImageRemovalService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes all image objects from the provided PDF document.
|
|
||||||
*
|
|
||||||
* This method iterates over each page in the document and removes any image XObjects found
|
|
||||||
* in the page's resources.
|
|
||||||
*
|
|
||||||
* @param document The PDF document from which images will be removed.
|
|
||||||
* @return The modified PDF document with images removed.
|
|
||||||
* @throws IOException If an error occurs while processing the PDF document.
|
|
||||||
*/
|
|
||||||
public PDDocument removeImagesFromPdf(PDDocument document) throws IOException {
|
|
||||||
// Iterate over each page in the PDF document
|
|
||||||
for (PDPage page : document.getPages()) {
|
|
||||||
PDResources resources = page.getResources();
|
|
||||||
// Iterate over all XObject names in the page's resources
|
|
||||||
for (COSName name : resources.getXObjectNames()) {
|
|
||||||
// Check if the XObject is an image
|
|
||||||
if (resources.isImageXObject(name)) {
|
|
||||||
// Remove the image XObject by setting it to null
|
|
||||||
resources.put(name, (PDXObject) null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return document;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -13,8 +13,6 @@ import java.nio.file.SimpleFileVisitor;
|
|||||||
import java.nio.file.attribute.BasicFileAttributes;
|
import java.nio.file.attribute.BasicFileAttributes;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.net.URL;
|
|
||||||
import java.net.HttpURLConnection;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -73,21 +71,6 @@ public class GeneralUtils {
|
|||||||
} catch (MalformedURLException e) {
|
} catch (MalformedURLException e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isURLReachable(String urlStr) {
|
|
||||||
try {
|
|
||||||
URL url = new URL(urlStr);
|
|
||||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
|
||||||
connection.setRequestMethod("HEAD");
|
|
||||||
int responseCode = connection.getResponseCode();
|
|
||||||
return (200 <= responseCode && responseCode <= 399);
|
|
||||||
} catch (MalformedURLException e) {
|
|
||||||
return false;
|
|
||||||
} catch (IOException e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static File multipartToFile(MultipartFile multipart) throws IOException {
|
public static File multipartToFile(MultipartFile multipart) throws IOException {
|
||||||
@@ -112,16 +95,19 @@ public class GeneralUtils {
|
|||||||
sizeStr = sizeStr.replace(",", ".").replace(" ", "");
|
sizeStr = sizeStr.replace(",", ".").replace(" ", "");
|
||||||
try {
|
try {
|
||||||
if (sizeStr.endsWith("KB")) {
|
if (sizeStr.endsWith("KB")) {
|
||||||
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024);
|
return (long)
|
||||||
|
(Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024);
|
||||||
} else if (sizeStr.endsWith("MB")) {
|
} else if (sizeStr.endsWith("MB")) {
|
||||||
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2))
|
return (long)
|
||||||
* 1024
|
(Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2))
|
||||||
* 1024);
|
* 1024
|
||||||
|
* 1024);
|
||||||
} else if (sizeStr.endsWith("GB")) {
|
} else if (sizeStr.endsWith("GB")) {
|
||||||
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2))
|
return (long)
|
||||||
* 1024
|
(Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2))
|
||||||
* 1024
|
* 1024
|
||||||
* 1024);
|
* 1024
|
||||||
|
* 1024);
|
||||||
} else if (sizeStr.endsWith("B")) {
|
} else if (sizeStr.endsWith("B")) {
|
||||||
return Long.parseLong(sizeStr.substring(0, sizeStr.length() - 1));
|
return Long.parseLong(sizeStr.substring(0, sizeStr.length() - 1));
|
||||||
} else {
|
} else {
|
||||||
@@ -184,15 +170,13 @@ public class GeneralUtils {
|
|||||||
|
|
||||||
int n = 0;
|
int n = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
// Replace 'n' with the current value of n, correctly handling numbers before
|
// Replace 'n' with the current value of n, correctly handling numbers before 'n'
|
||||||
// 'n'
|
|
||||||
String sanitizedExpression = insertMultiplicationBeforeN(expression, n);
|
String sanitizedExpression = insertMultiplicationBeforeN(expression, n);
|
||||||
Double result = evaluator.evaluate(sanitizedExpression);
|
Double result = evaluator.evaluate(sanitizedExpression);
|
||||||
|
|
||||||
// Check if the result is null or not within bounds
|
// Check if the result is null or not within bounds
|
||||||
if (result == null || result <= 0 || result.intValue() > maxValue) {
|
if (result == null || result <= 0 || result.intValue() > maxValue) {
|
||||||
if (n != 0)
|
if (n != 0) break;
|
||||||
break;
|
|
||||||
} else {
|
} else {
|
||||||
results.add(result.intValue());
|
results.add(result.intValue());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -341,30 +341,6 @@ public class PdfUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts a given Pdf file to PDF-Image.
|
|
||||||
*
|
|
||||||
* @param document to be converted. Note: the caller is responsible for closing the document
|
|
||||||
* @return converted document to PDF-Image
|
|
||||||
* @throws IOException if conversion fails
|
|
||||||
*/
|
|
||||||
public static PDDocument convertPdfToPdfImage(PDDocument document) throws IOException {
|
|
||||||
PDDocument imageDocument = new PDDocument();
|
|
||||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
|
||||||
pdfRenderer.setSubsamplingAllowed(true);
|
|
||||||
for (int page = 0; page < document.getNumberOfPages(); ++page) {
|
|
||||||
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
|
|
||||||
PDPage newPage = new PDPage(new PDRectangle(bim.getWidth(), bim.getHeight()));
|
|
||||||
imageDocument.addPage(newPage);
|
|
||||||
PDImageXObject pdImage = LosslessFactory.createFromImage(imageDocument, bim);
|
|
||||||
PDPageContentStream contentStream =
|
|
||||||
new PDPageContentStream(imageDocument, newPage, AppendMode.APPEND, true, true);
|
|
||||||
contentStream.drawImage(pdImage, 0, 0);
|
|
||||||
contentStream.close();
|
|
||||||
}
|
|
||||||
return imageDocument;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static BufferedImage prepareImageForPdfToImage(
|
private static BufferedImage prepareImageForPdfToImage(
|
||||||
int maxWidth, int height, String imageType) {
|
int maxWidth, int height, String imageType) {
|
||||||
BufferedImage combined;
|
BufferedImage combined;
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=User not found.
|
|||||||
incorrectPasswordMessage=Current password is incorrect.
|
incorrectPasswordMessage=Current password is incorrect.
|
||||||
usernameExistsMessage=New Username already exists.
|
usernameExistsMessage=New Username already exists.
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=لا يمكن خفض دور المستخدم الحالي
|
downgradeCurrentUserMessage=لا يمكن خفض دور المستخدم الحالي
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=لا يمكن تخفيض دور المستخدم الحالي. وبالتالي، لن يظهر المستخدم الحالي.
|
downgradeCurrentUserLongMessage=لا يمكن تخفيض دور المستخدم الحالي. وبالتالي، لن يظهر المستخدم الحالي.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=User
|
|||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Force user to change password on login
|
|||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
adminUserSettings.changeUserRole=تغيير دور المستخدم
|
adminUserSettings.changeUserRole=تغيير دور المستخدم
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Your account has been locked.
|
|||||||
login.signinTitle=Please sign in
|
login.signinTitle=Please sign in
|
||||||
login.ssoSignIn=تسجيل الدخول عبر تسجيل الدخول الأحادي
|
login.ssoSignIn=تسجيل الدخول عبر تسجيل الدخول الأحادي
|
||||||
login.oauth2AutoCreateDisabled=تم تعطيل مستخدم الإنشاء التلقائي لـ OAuth2
|
login.oauth2AutoCreateDisabled=تم تعطيل مستخدم الإنشاء التلقائي لـ OAuth2
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer (مسافة بين كل علامة مائي
|
|||||||
watermark.selectText.7=التعتيم (0٪ - 100٪):
|
watermark.selectText.7=التعتيم (0٪ - 100٪):
|
||||||
watermark.selectText.8=Watermark Type:
|
watermark.selectText.8=Watermark Type:
|
||||||
watermark.selectText.9=Watermark Image:
|
watermark.selectText.9=Watermark Image:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=إضافة علامة مائية
|
watermark.submit=إضافة علامة مائية
|
||||||
watermark.type.1=نص
|
watermark.type.1=نص
|
||||||
watermark.type.2=صورة
|
watermark.type.2=صورة
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Потребителят не е намерен
|
|||||||
incorrectPasswordMessage=Текущата парола е неправилна.
|
incorrectPasswordMessage=Текущата парола е неправилна.
|
||||||
usernameExistsMessage=Новият потребител вече съществува.
|
usernameExistsMessage=Новият потребител вече съществува.
|
||||||
invalidUsernameMessage=Невалидно потребителско име, потребителското име може да съдържа само букви, цифри и следните специални знаци @._+- или трябва да е валиден имейл адрес.
|
invalidUsernameMessage=Невалидно потребителско име, потребителското име може да съдържа само букви, цифри и следните специални знаци @._+- или трябва да е валиден имейл адрес.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Не може да се изтрие вписания в момента потребител.
|
deleteCurrentUserMessage=Не може да се изтрие вписания в момента потребител.
|
||||||
deleteUsernameExistsMessage=Потребителското име не съществува и не може да бъде изтрито.
|
deleteUsernameExistsMessage=Потребителското име не съществува и не може да бъде изтрито.
|
||||||
downgradeCurrentUserMessage=Не може да се понижи ролята на текущия потребител
|
downgradeCurrentUserMessage=Не може да се понижи ролята на текущия потребител
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Не може да се понижи ролята на текущия потребител. Следователно текущият потребител няма да бъде показан.
|
downgradeCurrentUserLongMessage=Не може да се понижи ролята на текущия потребител. Следователно текущият потребител няма да бъде показан.
|
||||||
userAlreadyExistsOAuthMessage=Потребителят вече съществува като OAuth2 потребител.
|
userAlreadyExistsOAuthMessage=Потребителят вече съществува като OAuth2 потребител.
|
||||||
userAlreadyExistsWebMessage=Потребителят вече съществува като уеб-потребител.
|
userAlreadyExistsWebMessage=Потребителят вече съществува като уеб-потребител.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Потребител
|
|||||||
adminUserSettings.addUser=Добавяне на нов потребител
|
adminUserSettings.addUser=Добавяне на нов потребител
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Потребителското име може да съдържа само букви, цифри и следните специални символи @._+- или трябва да е валиден имейл адрес.
|
adminUserSettings.usernameInfo=Потребителското име може да съдържа само букви, цифри и следните специални символи @._+- или трябва да е валиден имейл адрес.
|
||||||
adminUserSettings.roles=Роли
|
adminUserSettings.roles=Роли
|
||||||
adminUserSettings.role=Роля
|
adminUserSettings.role=Роля
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Принудете потребителя да п
|
|||||||
adminUserSettings.submit=Съхранете потребителя
|
adminUserSettings.submit=Съхранете потребителя
|
||||||
adminUserSettings.changeUserRole=Промяна на ролята на потребителя
|
adminUserSettings.changeUserRole=Промяна на ролята на потребителя
|
||||||
adminUserSettings.authenticated=Удостоверен
|
adminUserSettings.authenticated=Удостоверен
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Книга към PDF
|
|||||||
home.BookToPDF.desc=Преобразува формати на книги/комикси в PDF с помощта на calibre
|
home.BookToPDF.desc=Преобразува формати на книги/комикси в PDF с помощта на calibre
|
||||||
BookToPDF.tags=Книга,комикс,calibre,конвертиране,манга,Amazon,Kindle
|
BookToPDF.tags=Книга,комикс,calibre,конвертиране,манга,Amazon,Kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Вашият акаунт е заключен.
|
|||||||
login.signinTitle=Моля впишете се
|
login.signinTitle=Моля впишете се
|
||||||
login.ssoSignIn=Влизане чрез еднократно влизане
|
login.ssoSignIn=Влизане чрез еднократно влизане
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Автоматично създаване на потребител е деактивирано
|
login.oauth2AutoCreateDisabled=OAUTH2 Автоматично създаване на потребител е деактивирано
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Заявката за оторизация не е намерена
|
login.oauth2RequestNotFound=Заявката за оторизация не е намерена
|
||||||
login.oauth2InvalidUserInfoResponse=Невалидна информация за потребителя
|
login.oauth2InvalidUserInfoResponse=Невалидна информация за потребителя
|
||||||
login.oauth2invalidRequest=Невалидна заявка
|
login.oauth2invalidRequest=Невалидна заявка
|
||||||
login.oauth2AccessDenied=Отказан достъп
|
login.oauth2AccessDenied=Отказан достъп
|
||||||
login.oauth2InvalidTokenResponse=Невалиден отговор на токена
|
login.oauth2InvalidTokenResponse=Невалиден отговор на токена
|
||||||
login.oauth2InvalidIdToken=Невалиден токен за идентификатор
|
login.oauth2InvalidIdToken=Невалиден токен за идентификатор
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=дължинаSpacer (Разстояние между в
|
|||||||
watermark.selectText.7=Непрозрачност (0% - 100%):
|
watermark.selectText.7=Непрозрачност (0% - 100%):
|
||||||
watermark.selectText.8=Тип воден знак:
|
watermark.selectText.8=Тип воден знак:
|
||||||
watermark.selectText.9=Изображение за воден знак:
|
watermark.selectText.9=Изображение за воден знак:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Добавяне на воден знак
|
watermark.submit=Добавяне на воден знак
|
||||||
watermark.type.1=Текст
|
watermark.type.1=Текст
|
||||||
watermark.type.2=Изображение
|
watermark.type.2=Изображение
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Копиране на проследяване на стека
|
|||||||
error.githubSubmit=GitHub - Изпратете запитване
|
error.githubSubmit=GitHub - Изпратете запитване
|
||||||
error.discordSubmit=Discord - Изпратете запитване за поддръжка
|
error.discordSubmit=Discord - Изпратете запитване за поддръжка
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=User not found.
|
|||||||
incorrectPasswordMessage=Current password is incorrect.
|
incorrectPasswordMessage=Current password is incorrect.
|
||||||
usernameExistsMessage=New Username already exists.
|
usernameExistsMessage=New Username already exists.
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=No es pot reduir la funció de l'usuari actual
|
downgradeCurrentUserMessage=No es pot reduir la funció de l'usuari actual
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=No es pot baixar la funció de l'usuari actual. Per tant, no es mostrarà l'usuari actual.
|
downgradeCurrentUserLongMessage=No es pot baixar la funció de l'usuari actual. Per tant, no es mostrarà l'usuari actual.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Usuari
|
|||||||
adminUserSettings.addUser=Afegir Usuari
|
adminUserSettings.addUser=Afegir Usuari
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Rols
|
adminUserSettings.roles=Rols
|
||||||
adminUserSettings.role=Rol
|
adminUserSettings.role=Rol
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Force user to change password on login
|
|||||||
adminUserSettings.submit=Desar Usuari
|
adminUserSettings.submit=Desar Usuari
|
||||||
adminUserSettings.changeUserRole=Canvia el rol de l'usuari
|
adminUserSettings.changeUserRole=Canvia el rol de l'usuari
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Compte bloquejat
|
|||||||
login.signinTitle=Autenticat
|
login.signinTitle=Autenticat
|
||||||
login.ssoSignIn=Inicia sessió mitjançant l'inici de sessió ún
|
login.ssoSignIn=Inicia sessió mitjançant l'inici de sessió ún
|
||||||
login.oauth2AutoCreateDisabled=L'usuari de creació automàtica OAUTH2 està desactivat
|
login.oauth2AutoCreateDisabled=L'usuari de creació automàtica OAUTH2 està desactivat
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=separació d'alçada (Espai vertical entre cada Marca d'A
|
|||||||
watermark.selectText.7=Opacitat (0% - 100%):
|
watermark.selectText.7=Opacitat (0% - 100%):
|
||||||
watermark.selectText.8=Watermark Type:
|
watermark.selectText.8=Watermark Type:
|
||||||
watermark.selectText.9=Watermark Image:
|
watermark.selectText.9=Watermark Image:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Afegir Marca d'Aigua
|
watermark.submit=Afegir Marca d'Aigua
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Uživatel nenalezen.
|
|||||||
incorrectPasswordMessage=Současné heslo není správné.
|
incorrectPasswordMessage=Současné heslo není správné.
|
||||||
usernameExistsMessage=Nové uživatelské jméno již existuje.
|
usernameExistsMessage=Nové uživatelské jméno již existuje.
|
||||||
invalidUsernameMessage=Nesprávné uživatelské jméno, smí obsahovat pouze písmena, číslice a následující speciální znaky @._+- nebo musí být validní emailová adresa.
|
invalidUsernameMessage=Nesprávné uživatelské jméno, smí obsahovat pouze písmena, číslice a následující speciální znaky @._+- nebo musí být validní emailová adresa.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Nelze smazat aktuální přihlášeného uživatele.
|
deleteCurrentUserMessage=Nelze smazat aktuální přihlášeného uživatele.
|
||||||
deleteUsernameExistsMessage=Uživatelské jméno neexistuje a nelze ho smazat.
|
deleteUsernameExistsMessage=Uživatelské jméno neexistuje a nelze ho smazat.
|
||||||
downgradeCurrentUserMessage=Nelze snížit roli aktuálního uživatele.
|
downgradeCurrentUserMessage=Nelze snížit roli aktuálního uživatele.
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Nelze snížit roli aktuálního uživatele. Proto nebude aktuální uživatel zobrazen.
|
downgradeCurrentUserLongMessage=Nelze snížit roli aktuálního uživatele. Proto nebude aktuální uživatel zobrazen.
|
||||||
userAlreadyExistsOAuthMessage=Uživatel již existuje jako OAuth2 uživatel.
|
userAlreadyExistsOAuthMessage=Uživatel již existuje jako OAuth2 uživatel.
|
||||||
userAlreadyExistsWebMessage=Uživatel již existuje jako webový uživatel.
|
userAlreadyExistsWebMessage=Uživatel již existuje jako webový uživatel.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Uživatel
|
|||||||
adminUserSettings.addUser=Přidat Nového Uživatele
|
adminUserSettings.addUser=Přidat Nového Uživatele
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Uživatelské Jméno může obsahovat pouze písmena, čísla a následující speciální znaky @._+- nebo musí být správná emailová adresa.
|
adminUserSettings.usernameInfo=Uživatelské Jméno může obsahovat pouze písmena, čísla a následující speciální znaky @._+- nebo musí být správná emailová adresa.
|
||||||
adminUserSettings.roles=Role
|
adminUserSettings.roles=Role
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Vynutit uživateli změnu hesla při přihlášen
|
|||||||
adminUserSettings.submit=Uložit Uživatele
|
adminUserSettings.submit=Uložit Uživatele
|
||||||
adminUserSettings.changeUserRole=Zmenit Roli Uživatele
|
adminUserSettings.changeUserRole=Zmenit Roli Uživatele
|
||||||
adminUserSettings.authenticated=Ověřeno
|
adminUserSettings.authenticated=Ověřeno
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Kniha na PDF
|
|||||||
home.BookToPDF.desc=Převádí formáty knih/komiksů do PDF pomocí calibre
|
home.BookToPDF.desc=Převádí formáty knih/komiksů do PDF pomocí calibre
|
||||||
BookToPDF.tags=Kniha,Komiks,Calibre,Konvertovat,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
BookToPDF.tags=Kniha,Komiks,Calibre,Konvertovat,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Your account has been locked.
|
|||||||
login.signinTitle=Please sign in
|
login.signinTitle=Please sign in
|
||||||
login.ssoSignIn=Login via Single Sign-on
|
login.ssoSignIn=Login via Single Sign-on
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Auto-Create User Disabled
|
login.oauth2AutoCreateDisabled=OAUTH2 Auto-Create User Disabled
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=Výška mezery (Mezera mezi každým vodoznakem svisle):
|
|||||||
watermark.selectText.7=Průhlednost (0% - 100%):
|
watermark.selectText.7=Průhlednost (0% - 100%):
|
||||||
watermark.selectText.8=Typ vodoznaku:
|
watermark.selectText.8=Typ vodoznaku:
|
||||||
watermark.selectText.9=Obrázek vodoznaku:
|
watermark.selectText.9=Obrázek vodoznaku:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Přidat vodoznak
|
watermark.submit=Přidat vodoznak
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Obrázek
|
watermark.type.2=Obrázek
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Kopírovat stopu zásobníku
|
|||||||
error.githubSubmit=GitHub - Odeslat požadavek
|
error.githubSubmit=GitHub - Odeslat požadavek
|
||||||
error.discordSubmit=Discord - Odeslat příspěvek podpory
|
error.discordSubmit=Discord - Odeslat příspěvek podpory
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -55,12 +55,10 @@ userNotFoundMessage=Benutzer nicht gefunden.
|
|||||||
incorrectPasswordMessage=Das Passwort ist falsch.
|
incorrectPasswordMessage=Das Passwort ist falsch.
|
||||||
usernameExistsMessage=Neuer Benutzername existiert bereits.
|
usernameExistsMessage=Neuer Benutzername existiert bereits.
|
||||||
invalidUsernameMessage=Ungültiger Benutzername. Der Benutzername darf nur Buchstaben, Zahlen und die folgenden Sonderzeichen @._+- enthalten oder muss eine gültige E-Mail-Adresse sein.
|
invalidUsernameMessage=Ungültiger Benutzername. Der Benutzername darf nur Buchstaben, Zahlen und die folgenden Sonderzeichen @._+- enthalten oder muss eine gültige E-Mail-Adresse sein.
|
||||||
invalidPasswordMessage=Das Passwort darf nicht leer sein und kein Leerzeichen am Anfang und Ende haben.
|
|
||||||
confirmPasswordErrorMessage=„Neues Passwort“ und „Neues Passwort bestätigen“ müssen übereinstimmen.
|
confirmPasswordErrorMessage=„Neues Passwort“ und „Neues Passwort bestätigen“ müssen übereinstimmen.
|
||||||
deleteCurrentUserMessage=Der aktuell angemeldete Benutzer kann nicht gelöscht werden.
|
deleteCurrentUserMessage=Der aktuell angemeldete Benutzer kann nicht gelöscht werden.
|
||||||
deleteUsernameExistsMessage=Der Benutzername existiert nicht und kann nicht gelöscht werden.
|
deleteUsernameExistsMessage=Der Benutzername existiert nicht und kann nicht gelöscht werden.
|
||||||
downgradeCurrentUserMessage=Die Rolle des aktuellen Benutzers kann nicht herabgestuft werden
|
downgradeCurrentUserMessage=Die Rolle des aktuellen Benutzers kann nicht herabgestuft werden
|
||||||
disabledCurrentUserMessage=Der aktuelle Benutzer kann nicht deaktiviert werden
|
|
||||||
downgradeCurrentUserLongMessage=Die Rolle des aktuellen Benutzers kann nicht herabgestuft werden. Daher wird der aktuelle Benutzer nicht angezeigt.
|
downgradeCurrentUserLongMessage=Die Rolle des aktuellen Benutzers kann nicht herabgestuft werden. Daher wird der aktuelle Benutzer nicht angezeigt.
|
||||||
userAlreadyExistsOAuthMessage=Der Benutzer ist bereits als OAuth2-Benutzer vorhanden.
|
userAlreadyExistsOAuthMessage=Der Benutzer ist bereits als OAuth2-Benutzer vorhanden.
|
||||||
userAlreadyExistsWebMessage=Der Benutzer ist bereits als Webbenutzer vorhanden.
|
userAlreadyExistsWebMessage=Der Benutzer ist bereits als Webbenutzer vorhanden.
|
||||||
@@ -179,11 +177,10 @@ adminUserSettings.user=Benutzer
|
|||||||
adminUserSettings.addUser=Neuen Benutzer hinzufügen
|
adminUserSettings.addUser=Neuen Benutzer hinzufügen
|
||||||
adminUserSettings.deleteUser=Benutzer löschen
|
adminUserSettings.deleteUser=Benutzer löschen
|
||||||
adminUserSettings.confirmDeleteUser=Soll der Benutzer gelöscht werden?
|
adminUserSettings.confirmDeleteUser=Soll der Benutzer gelöscht werden?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Der Benutzername darf nur Buchstaben, Zahlen und die folgenden Sonderzeichen @._+- enthalten oder muss eine gültige E-Mail-Adresse sein.
|
adminUserSettings.usernameInfo=Der Benutzername darf nur Buchstaben, Zahlen und die folgenden Sonderzeichen @._+- enthalten oder muss eine gültige E-Mail-Adresse sein.
|
||||||
adminUserSettings.roles=Rollen
|
adminUserSettings.roles=Rollen
|
||||||
adminUserSettings.role=Rolle
|
adminUserSettings.role=Rolle
|
||||||
adminUserSettings.actions=Aktions
|
adminUserSettings.actions=Aktion
|
||||||
adminUserSettings.apiUser=Eingeschränkter API-Benutzer
|
adminUserSettings.apiUser=Eingeschränkter API-Benutzer
|
||||||
adminUserSettings.extraApiUser=Zusätzlicher eingeschränkter API-Benutzer
|
adminUserSettings.extraApiUser=Zusätzlicher eingeschränkter API-Benutzer
|
||||||
adminUserSettings.webOnlyUser=Nur Web-Benutzer
|
adminUserSettings.webOnlyUser=Nur Web-Benutzer
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Benutzer dazu zwingen, Benutzernamen/Passwort bei
|
|||||||
adminUserSettings.submit=Benutzer speichern
|
adminUserSettings.submit=Benutzer speichern
|
||||||
adminUserSettings.changeUserRole=Benutzerrolle ändern
|
adminUserSettings.changeUserRole=Benutzerrolle ändern
|
||||||
adminUserSettings.authenticated=Authentifiziert
|
adminUserSettings.authenticated=Authentifiziert
|
||||||
adminUserSettings.editOwnProfil=Eigenes Profil bearbeiten
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Datenbank Import/Export
|
database.title=Datenbank Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Buch als PDF
|
|||||||
home.BookToPDF.desc=Konvertiert Buch-/Comic-Formate mithilfe von Calibre in PDF
|
home.BookToPDF.desc=Konvertiert Buch-/Comic-Formate mithilfe von Calibre in PDF
|
||||||
BookToPDF.tags=buch,comic,calibre,convert,manga,amazon,kindle
|
BookToPDF.tags=buch,comic,calibre,convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Ihr Konto wurde gesperrt.
|
|||||||
login.signinTitle=Bitte melden Sie sich an.
|
login.signinTitle=Bitte melden Sie sich an.
|
||||||
login.ssoSignIn=Anmeldung per Single Sign-On
|
login.ssoSignIn=Anmeldung per Single Sign-On
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Benutzer automatisch erstellen deaktiviert
|
login.oauth2AutoCreateDisabled=OAUTH2 Benutzer automatisch erstellen deaktiviert
|
||||||
login.oauth2AdminBlockedUser=Die Registrierung bzw. das anmelden von nicht registrierten Benutzern ist derzeit gesperrt. Bitte wenden Sie sich an den Administrator.
|
|
||||||
login.oauth2RequestNotFound=Autorisierungsanfrage nicht gefunden
|
login.oauth2RequestNotFound=Autorisierungsanfrage nicht gefunden
|
||||||
login.oauth2InvalidUserInfoResponse=Ungültige Benutzerinformationsantwort
|
login.oauth2InvalidUserInfoResponse=Ungültige Benutzerinformationsantwort
|
||||||
login.oauth2invalidRequest=ungültige Anfrage
|
login.oauth2invalidRequest=ungültige Anfrage
|
||||||
login.oauth2AccessDenied=Zugriff abgelehnt
|
login.oauth2AccessDenied=Zugriff abgelehnt
|
||||||
login.oauth2InvalidTokenResponse=Ungültige Token-Antwort
|
login.oauth2InvalidTokenResponse=Ungültige Token-Antwort
|
||||||
login.oauth2InvalidIdToken=Ungültiges ID-Token
|
login.oauth2InvalidIdToken=Ungültiges ID-Token
|
||||||
login.userIsDisabled=Benutzer ist deaktiviert, die Anmeldung ist mit diesem Benutzernamen derzeit gesperrt. Bitte wenden Sie sich an den Administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=höheSpacer (vertikaler Abstand zwischen den einzelnen Wa
|
|||||||
watermark.selectText.7=Deckkraft (0% - 100 %):
|
watermark.selectText.7=Deckkraft (0% - 100 %):
|
||||||
watermark.selectText.8=Wasserzeichen Typ:
|
watermark.selectText.8=Wasserzeichen Typ:
|
||||||
watermark.selectText.9=Wasserzeichen-Bild:
|
watermark.selectText.9=Wasserzeichen-Bild:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Wasserzeichen hinzufügen
|
watermark.submit=Wasserzeichen hinzufügen
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Bild
|
watermark.type.2=Bild
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Stack-Trace kopieren
|
|||||||
error.githubSubmit=GitHub - Ein Ticket einreichen
|
error.githubSubmit=GitHub - Ein Ticket einreichen
|
||||||
error.discordSubmit=Discord - Unterstützungsbeitrag einreichen
|
error.discordSubmit=Discord - Unterstützungsbeitrag einreichen
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Ο χρήστης δεν βρέθηκε.
|
|||||||
incorrectPasswordMessage=Ο τρέχων κωδικός πρόσβασης είναι λανθασμένος.
|
incorrectPasswordMessage=Ο τρέχων κωδικός πρόσβασης είναι λανθασμένος.
|
||||||
usernameExistsMessage=Το νέο όνομα χρήστη υπάρχει ήδη.
|
usernameExistsMessage=Το νέο όνομα χρήστη υπάρχει ήδη.
|
||||||
invalidUsernameMessage=Μη έγκυρο όνομα χρήστη, όνομα χρήστη μπορεί να περιέχει μόνο γράμματα, αριθμούς και τους ακόλουθους ειδικούς χαρακτήρες @._+- ή πρέπει να είναι έγκυρη διεύθυνση email.
|
invalidUsernameMessage=Μη έγκυρο όνομα χρήστη, όνομα χρήστη μπορεί να περιέχει μόνο γράμματα, αριθμούς και τους ακόλουθους ειδικούς χαρακτήρες @._+- ή πρέπει να είναι έγκυρη διεύθυνση email.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Δεν είναι δυνατή η διαγραφή του τρέχοντος συνδεδεμένου χρήστη.
|
deleteCurrentUserMessage=Δεν είναι δυνατή η διαγραφή του τρέχοντος συνδεδεμένου χρήστη.
|
||||||
deleteUsernameExistsMessage=Το όνομα χρήστη δεν υπάρχει και δεν μπορεί να διαγραφεί.
|
deleteUsernameExistsMessage=Το όνομα χρήστη δεν υπάρχει και δεν μπορεί να διαγραφεί.
|
||||||
downgradeCurrentUserMessage=Δεν είναι δυνατή η υποβάθμιση του ρόλου του τρέχοντος χρήστη
|
downgradeCurrentUserMessage=Δεν είναι δυνατή η υποβάθμιση του ρόλου του τρέχοντος χρήστη
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Δεν είναι δυνατή η υποβάθμιση του ρόλου του τρέχοντος χρήστη. Ως εκ τούτου, ο τρέχων χρήστης δεν θα εμφανίζεται.
|
downgradeCurrentUserLongMessage=Δεν είναι δυνατή η υποβάθμιση του ρόλου του τρέχοντος χρήστη. Ως εκ τούτου, ο τρέχων χρήστης δεν θα εμφανίζεται.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Χρήστης
|
|||||||
adminUserSettings.addUser=Προσθήκη νέου Χρήστη
|
adminUserSettings.addUser=Προσθήκη νέου Χρήστη
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Ρόλοι
|
adminUserSettings.roles=Ρόλοι
|
||||||
adminUserSettings.role=Ρόλος
|
adminUserSettings.role=Ρόλος
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Αναγκάστε τον χρήστη να αλλ
|
|||||||
adminUserSettings.submit=Αποθήκευση Χρήστη
|
adminUserSettings.submit=Αποθήκευση Χρήστη
|
||||||
adminUserSettings.changeUserRole=Αλλαγή ρόλου χρήστη
|
adminUserSettings.changeUserRole=Αλλαγή ρόλου χρήστη
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book σε PDF
|
|||||||
home.BookToPDF.desc=Μετατρέπει τις μορφές Books/Comics σε PDF χρησιμοποιώντας calibre
|
home.BookToPDF.desc=Μετατρέπει τις μορφές Books/Comics σε PDF χρησιμοποιώντας calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Ο λογαριασμός σας έχει κλειδωθεί.
|
|||||||
login.signinTitle=Παρακαλώ, συνδεθείτε
|
login.signinTitle=Παρακαλώ, συνδεθείτε
|
||||||
login.ssoSignIn=Σύνδεση μέσω μοναδικής σύνδεσης
|
login.ssoSignIn=Σύνδεση μέσω μοναδικής σύνδεσης
|
||||||
login.oauth2AutoCreateDisabled=Απενεργοποιήθηκε ο χρήστης αυτόματης δημιουργίας OAUTH2
|
login.oauth2AutoCreateDisabled=Απενεργοποιήθηκε ο χρήστης αυτόματης δημιουργίας OAUTH2
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer (Κενό μεταξύ κάθε υδατογ
|
|||||||
watermark.selectText.7=Αδιαφάνεια (Opacity) (0% - 100%):
|
watermark.selectText.7=Αδιαφάνεια (Opacity) (0% - 100%):
|
||||||
watermark.selectText.8=Τύπος Υδατογραφήματος:
|
watermark.selectText.8=Τύπος Υδατογραφήματος:
|
||||||
watermark.selectText.9=Εικόνα Υδατογραφήματος:
|
watermark.selectText.9=Εικόνα Υδατογραφήματος:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Προσθήκη Υδατογραφήματος
|
watermark.submit=Προσθήκη Υδατογραφήματος
|
||||||
watermark.type.1=Κείμενο
|
watermark.type.1=Κείμενο
|
||||||
watermark.type.2=Εικόνα
|
watermark.type.2=Εικόνα
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Αντιγραφή Stack Trace
|
|||||||
error.githubSubmit=GitHub - Υποβάλετε ένα ticket
|
error.githubSubmit=GitHub - Υποβάλετε ένα ticket
|
||||||
error.discordSubmit=Discord - Υποβάλετε ένα Support post
|
error.discordSubmit=Discord - Υποβάλετε ένα Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=User not found.
|
|||||||
incorrectPasswordMessage=Current password is incorrect.
|
incorrectPasswordMessage=Current password is incorrect.
|
||||||
usernameExistsMessage=New Username already exists.
|
usernameExistsMessage=New Username already exists.
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=Cannot downgrade current user's role
|
downgradeCurrentUserMessage=Cannot downgrade current user's role
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Cannot downgrade current user's role. Hence, current user will not be shown.
|
downgradeCurrentUserLongMessage=Cannot downgrade current user's role. Hence, current user will not be shown.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -142,7 +140,7 @@ settings.cacheInputs.help=Enable to store previously used inputs for future runs
|
|||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=New Username
|
changeCreds.newUsername=New Username
|
||||||
changeCreds.oldPassword=Current Password
|
changeCreds.oldPassword=Current Password
|
||||||
changeCreds.newPassword=New Password
|
changeCreds.newPassword=New Password
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=User
|
|||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Force user to change password on login
|
|||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
adminUserSettings.changeUserRole=Change User's Role
|
adminUserSettings.changeUserRole=Change User's Role
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Your account has been locked.
|
|||||||
login.signinTitle=Please sign in
|
login.signinTitle=Please sign in
|
||||||
login.ssoSignIn=Login via Single Sign-on
|
login.ssoSignIn=Login via Single Sign-on
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Auto-Create User Disabled
|
login.oauth2AutoCreateDisabled=OAUTH2 Auto-Create User Disabled
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -722,8 +706,8 @@ removeAnnotations.submit=Remove
|
|||||||
#compare
|
#compare
|
||||||
compare.title=Compare
|
compare.title=Compare
|
||||||
compare.header=Compare PDFs
|
compare.header=Compare PDFs
|
||||||
compare.highlightColor.1=Highlight Color 1:
|
compare.highlightColor.1=Highlight Color 1:
|
||||||
compare.highlightColor.2=Highlight Color 2:
|
compare.highlightColor.2=Highlight Color 2:
|
||||||
compare.document.1=Document 1
|
compare.document.1=Document 1
|
||||||
compare.document.2=Document 2
|
compare.document.2=Document 2
|
||||||
compare.submit=Compare
|
compare.submit=Compare
|
||||||
@@ -760,7 +744,7 @@ repair.submit=Repair
|
|||||||
#flatten
|
#flatten
|
||||||
flatten.title=Flatten
|
flatten.title=Flatten
|
||||||
flatten.header=Flatten PDF
|
flatten.header=Flatten PDF
|
||||||
flatten.flattenOnlyForms=Flatten only forms
|
flatten.flattenOnlyForms=Flatten only forms
|
||||||
flatten.submit=Flatten
|
flatten.submit=Flatten
|
||||||
|
|
||||||
|
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer (Space between each watermark vertically):
|
|||||||
watermark.selectText.7=Opacity (0% - 100%):
|
watermark.selectText.7=Opacity (0% - 100%):
|
||||||
watermark.selectText.8=Watermark Type:
|
watermark.selectText.8=Watermark Type:
|
||||||
watermark.selectText.9=Watermark Image:
|
watermark.selectText.9=Watermark Image:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Add Watermark
|
watermark.submit=Add Watermark
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=User not found.
|
|||||||
incorrectPasswordMessage=Current password is incorrect.
|
incorrectPasswordMessage=Current password is incorrect.
|
||||||
usernameExistsMessage=New Username already exists.
|
usernameExistsMessage=New Username already exists.
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=Cannot downgrade current user's role
|
downgradeCurrentUserMessage=Cannot downgrade current user's role
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Cannot downgrade current user's role. Hence, current user will not be shown.
|
downgradeCurrentUserLongMessage=Cannot downgrade current user's role. Hence, current user will not be shown.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=User
|
|||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Force user to change password on login
|
|||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
adminUserSettings.changeUserRole=Change User's Role
|
adminUserSettings.changeUserRole=Change User's Role
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Your account has been locked.
|
|||||||
login.signinTitle=Please sign in
|
login.signinTitle=Please sign in
|
||||||
login.ssoSignIn=Login via Single Sign-on
|
login.ssoSignIn=Login via Single Sign-on
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Auto-Create User Disabled
|
login.oauth2AutoCreateDisabled=OAUTH2 Auto-Create User Disabled
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -722,8 +706,8 @@ removeAnnotations.submit=Remove
|
|||||||
#compare
|
#compare
|
||||||
compare.title=Compare
|
compare.title=Compare
|
||||||
compare.header=Compare PDFs
|
compare.header=Compare PDFs
|
||||||
compare.highlightColor.1=Highlight Color 1:
|
compare.highlightColor.1=Highlight Color 1:
|
||||||
compare.highlightColor.2=Highlight Color 2:
|
compare.highlightColor.2=Highlight Color 2:
|
||||||
compare.document.1=Document 1
|
compare.document.1=Document 1
|
||||||
compare.document.2=Document 2
|
compare.document.2=Document 2
|
||||||
compare.submit=Compare
|
compare.submit=Compare
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer (Space between each watermark vertically):
|
|||||||
watermark.selectText.7=Opacity (0% - 100%):
|
watermark.selectText.7=Opacity (0% - 100%):
|
||||||
watermark.selectText.8=Watermark Type:
|
watermark.selectText.8=Watermark Type:
|
||||||
watermark.selectText.9=Watermark Image:
|
watermark.selectText.9=Watermark Image:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Add Watermark
|
watermark.submit=Add Watermark
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,18 +55,16 @@ userNotFoundMessage=Usuario no encontrado.
|
|||||||
incorrectPasswordMessage=La contraseña actual no es correcta.
|
incorrectPasswordMessage=La contraseña actual no es correcta.
|
||||||
usernameExistsMessage=El nuevo nombre de usuario está en uso.
|
usernameExistsMessage=El nuevo nombre de usuario está en uso.
|
||||||
invalidUsernameMessage=Nombre de usuario no válido, el nombre de usuario solo puede contener letras, números y los siguientes caracteres especiales @._+- o debe ser una dirección de correo electrónico válida.
|
invalidUsernameMessage=Nombre de usuario no válido, el nombre de usuario solo puede contener letras, números y los siguientes caracteres especiales @._+- o debe ser una dirección de correo electrónico válida.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=No puede eliminar el usuario que tiene la sesión actualmente en uso.
|
deleteCurrentUserMessage=No puede eliminar el usuario que tiene la sesión actualmente en uso.
|
||||||
deleteUsernameExistsMessage=El usuario no existe y no puede eliminarse.
|
deleteUsernameExistsMessage=El usuario no existe y no puede eliminarse.
|
||||||
downgradeCurrentUserMessage=No se puede degradar el rol del usuario actual
|
downgradeCurrentUserMessage=No se puede degradar el rol del usuario actual
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=No se puede degradar el rol del usuario actual. Por lo tanto, el usuario actual no se mostrará.
|
downgradeCurrentUserLongMessage=No se puede degradar el rol del usuario actual. Por lo tanto, el usuario actual no se mostrará.
|
||||||
userAlreadyExistsOAuthMessage=La usuario ya existe como usuario de OAuth2.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=El usuario ya existe como usuario web.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
error=Error
|
error=Error
|
||||||
oops=Ups!
|
oops=Ups!
|
||||||
help=Ayuda
|
help=Help
|
||||||
goHomepage=Ir a la página principal
|
goHomepage=Ir a la página principal
|
||||||
joinDiscord=Únase a nuestro servidor Discord
|
joinDiscord=Únase a nuestro servidor Discord
|
||||||
seeDockerHub=Ver Docker Hub
|
seeDockerHub=Ver Docker Hub
|
||||||
@@ -88,7 +86,7 @@ pipeline.defaultOption=Personalizar
|
|||||||
pipeline.submitButton=Enviar
|
pipeline.submitButton=Enviar
|
||||||
pipeline.help=Ayuda de Canalización
|
pipeline.help=Ayuda de Canalización
|
||||||
pipeline.scanHelp=Ayuda de escaneado de carpetas
|
pipeline.scanHelp=Ayuda de escaneado de carpetas
|
||||||
pipeline.deletePrompt=¿Estás segura de que quieres eliminar la canalización?
|
pipeline.deletePrompt=Are you sure you want to delete pipeline
|
||||||
|
|
||||||
######################
|
######################
|
||||||
# Pipeline Options #
|
# Pipeline Options #
|
||||||
@@ -109,18 +107,18 @@ pipelineOptions.validateButton=Validar
|
|||||||
#############
|
#############
|
||||||
# NAVBAR #
|
# NAVBAR #
|
||||||
#############
|
#############
|
||||||
navbar.favorite=Favoritos
|
navbar.favorite=Favorites
|
||||||
navbar.darkmode=Modo oscuro
|
navbar.darkmode=Modo oscuro
|
||||||
navbar.language=Idiomas
|
navbar.language=Languages
|
||||||
navbar.settings=Configuración
|
navbar.settings=Configuración
|
||||||
navbar.allTools=Herramientas
|
navbar.allTools=Tools
|
||||||
navbar.multiTool=Multi herramientas
|
navbar.multiTool=Multi Tools
|
||||||
navbar.sections.organize=Organize
|
navbar.sections.organize=Organize
|
||||||
navbar.sections.convertTo=Convertir a PDF
|
navbar.sections.convertTo=Convert to PDF
|
||||||
navbar.sections.convertFrom=Convertir desde PDF
|
navbar.sections.convertFrom=Convert from PDF
|
||||||
navbar.sections.security=Señalización y seguridad
|
navbar.sections.security=Sign & Security
|
||||||
navbar.sections.advance=Avanzado
|
navbar.sections.advance=Advanced
|
||||||
navbar.sections.edit=Ver y Editar
|
navbar.sections.edit=View & Edit
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# SETTINGS #
|
# SETTINGS #
|
||||||
@@ -177,9 +175,8 @@ adminUserSettings.header=Configuración de control de usuario administrador
|
|||||||
adminUserSettings.admin=Administrador
|
adminUserSettings.admin=Administrador
|
||||||
adminUserSettings.user=Usuario
|
adminUserSettings.user=Usuario
|
||||||
adminUserSettings.addUser=Añadir Nuevo Usuario
|
adminUserSettings.addUser=Añadir Nuevo Usuario
|
||||||
adminUserSettings.deleteUser=Eliminar Usuario
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=¿Se debe eliminar al usuario?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=El nombre de usuario solo puede contener letras, números y los siguientes caracteres especiales @._+- o debe ser una dirección de correo electrónico válida.
|
adminUserSettings.usernameInfo=El nombre de usuario solo puede contener letras, números y los siguientes caracteres especiales @._+- o debe ser una dirección de correo electrónico válida.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Rol
|
adminUserSettings.role=Rol
|
||||||
@@ -192,31 +189,24 @@ adminUserSettings.internalApiUser=Usuario interno de API
|
|||||||
adminUserSettings.forceChange=Forzar usuario a cambiar usuario/contraseña en el acceso
|
adminUserSettings.forceChange=Forzar usuario a cambiar usuario/contraseña en el acceso
|
||||||
adminUserSettings.submit=Guardar Usuario
|
adminUserSettings.submit=Guardar Usuario
|
||||||
adminUserSettings.changeUserRole=Cambiar rol de usuario
|
adminUserSettings.changeUserRole=Cambiar rol de usuario
|
||||||
adminUserSettings.authenticated=Autenticado
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Base de Datos Importar/Exportar
|
database.title=Database Import/Export
|
||||||
database.header=Base de Datos Importar/Exportar
|
database.header=Database Import/Export
|
||||||
database.fileName=Nombre de Archivo
|
database.fileName=File Name
|
||||||
database.creationDate=Fecha de creación
|
database.creationDate=Creation Date
|
||||||
database.fileSize=Tamaño de archivo
|
database.fileSize=File Size
|
||||||
database.deleteBackupFile=Eliminar archivo de copia de seguridad
|
database.deleteBackupFile=Delete Backup File
|
||||||
database.importBackupFile=Importar archivo de copia de seguridad
|
database.importBackupFile=Import Backup File
|
||||||
database.downloadBackupFile=Descargar archivo de copia de seguridad
|
database.downloadBackupFile=Download Backup File
|
||||||
database.info_1=Al importar datos, es fundamental garantizar la estructura correcta. Si no está seguro de lo que está haciendo, busque consejo y apoyo de un profesional. Un error en la estructura puede causar un mal funcionamiento de la aplicación, incluyendo la imposibilidad total de ejecutar la aplicación.
|
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||||
database.info_2=El nombre del archivo no importa al cargarlo. Posteriormente se le cambiará el nombre para que siga el formato backup_user_yyyyMMddHHmm.sql, lo que garantiza una convención de nomenclatura coherente.
|
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||||
database.submit=Importar Backup
|
database.submit=Import Backup
|
||||||
database.importIntoDatabaseSuccessed=Importación a la base de datos ha sido exitosa
|
database.importIntoDatabaseSuccessed=Import into database successed
|
||||||
database.fileNotFound=Archivo no encontrado
|
database.fileNotFound=File not Found
|
||||||
database.fileNullOrEmpty=El archivo no debe ser nulo o vacío.
|
database.fileNullOrEmpty=File must not be null or empty
|
||||||
database.failedImportFile=Archivo de importación fallido
|
database.failedImportFile=Failed Import File
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# HOME-PAGE #
|
# HOME-PAGE #
|
||||||
@@ -363,8 +353,8 @@ home.certSign.title=Firmar con certificado
|
|||||||
home.certSign.desc=Firmar un PDF con un Certificado/Clave (PEM/P12)
|
home.certSign.desc=Firmar un PDF con un Certificado/Clave (PEM/P12)
|
||||||
certSign.tags=autentificar,PEM,P12,oficial,encriptar
|
certSign.tags=autentificar,PEM,P12,oficial,encriptar
|
||||||
|
|
||||||
home.removeCertSign.title=Quitar signo de certificado
|
home.removeCertSign.title=Remove Certificate Sign
|
||||||
home.removeCertSign.desc=Eliminar firma de certificado de PDF
|
home.removeCertSign.desc=Remove certificate signature from PDF
|
||||||
removeCertSign.tags=authenticate,PEM,P12,official,decrypt
|
removeCertSign.tags=authenticate,PEM,P12,official,decrypt
|
||||||
|
|
||||||
home.pageLayout.title=Diseño de varias páginas
|
home.pageLayout.title=Diseño de varias páginas
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Libro a PDF
|
|||||||
home.BookToPDF.desc=Convierte formatos de Libro/Cómic a PDF usando Calibre
|
home.BookToPDF.desc=Convierte formatos de Libro/Cómic a PDF usando Calibre
|
||||||
BookToPDF.tags=Libro,Cómic,Calibre,Convertir,manga,Amazon,Kindle
|
BookToPDF.tags=Libro,Cómic,Calibre,Convertir,manga,Amazon,Kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -490,15 +476,13 @@ login.invalid=Nombre de usuario o contraseña erróneos.
|
|||||||
login.locked=Su cuenta se ha bloqueado.
|
login.locked=Su cuenta se ha bloqueado.
|
||||||
login.signinTitle=Por favor, inicie sesión
|
login.signinTitle=Por favor, inicie sesión
|
||||||
login.ssoSignIn=Iniciar sesión a través del inicio de sesión único
|
login.ssoSignIn=Iniciar sesión a través del inicio de sesión único
|
||||||
login.oauth2AutoCreateDisabled=Usuario de creación automática de OAUTH2 DESACTIVADO
|
login.oauth2AutoCreateDisabled=Usuario DE creación automática de OAUTH2 DESACTIVADO
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2RequestNotFound=Solicitud de autorización no encontrada
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2InvalidUserInfoResponse=Respuesta de información de usuario no válida
|
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Respuesta de token no válida
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Token de identificación no válido
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -697,10 +681,10 @@ certSign.submit=Firmar PDF
|
|||||||
|
|
||||||
|
|
||||||
#removeCertSign
|
#removeCertSign
|
||||||
removeCertSign.title=Eliminar firma del certificado
|
removeCertSign.title=Remove Certificate Signature
|
||||||
removeCertSign.header=Quitar el certificado digital del PDF
|
removeCertSign.header=Remove the digital certificate from the PDF
|
||||||
removeCertSign.selectPDF=Seleccione un archivo PDF:
|
removeCertSign.selectPDF=Select a PDF file:
|
||||||
removeCertSign.submit=Eliminar firma
|
removeCertSign.submit=Remove Signature
|
||||||
|
|
||||||
|
|
||||||
#removeBlanks
|
#removeBlanks
|
||||||
@@ -722,8 +706,8 @@ removeAnnotations.submit=Eliminar
|
|||||||
#compare
|
#compare
|
||||||
compare.title=Comparar
|
compare.title=Comparar
|
||||||
compare.header=Comparar archivos PDF
|
compare.header=Comparar archivos PDF
|
||||||
compare.highlightColor.1=Color resaltado 1:
|
compare.highlightColor.1=Highlight Color 1:
|
||||||
compare.highlightColor.2=Color resaltado 2:
|
compare.highlightColor.2=Highlight Color 2:
|
||||||
compare.document.1=Documento 1
|
compare.document.1=Documento 1
|
||||||
compare.document.2=Documento 2
|
compare.document.2=Documento 2
|
||||||
compare.submit=Comparar
|
compare.submit=Comparar
|
||||||
@@ -760,7 +744,7 @@ repair.submit=Reparar
|
|||||||
#flatten
|
#flatten
|
||||||
flatten.title=Aplanar
|
flatten.title=Aplanar
|
||||||
flatten.header=Acoplar archivos PDF
|
flatten.header=Acoplar archivos PDF
|
||||||
flatten.flattenOnlyForms=Aplanar sólo formularios
|
flatten.flattenOnlyForms=Flatten only forms
|
||||||
flatten.submit=Aplanar
|
flatten.submit=Aplanar
|
||||||
|
|
||||||
|
|
||||||
@@ -808,7 +792,7 @@ extractImages.submit=Extraer
|
|||||||
fileToPDF.title=Archivo a PDF
|
fileToPDF.title=Archivo a PDF
|
||||||
fileToPDF.header=Convertir cualquier archivo a PDF
|
fileToPDF.header=Convertir cualquier archivo a PDF
|
||||||
fileToPDF.credit=Este servicio usa LibreOffice y Unoconv para la conversión de archivos
|
fileToPDF.credit=Este servicio usa LibreOffice y Unoconv para la conversión de archivos
|
||||||
fileToPDF.supportedFileTypesInfo=Tipos de archivos admitidos
|
fileToPDF.supportedFileTypesInfo=Supported File types
|
||||||
fileToPDF.supportedFileTypes=Los tipos de archivo soportados deben incluir los indicados a continuación; sin embargo, para una completa y acutualizada lista de formatos soportados, por favor consulte la documentación de LibreOffice
|
fileToPDF.supportedFileTypes=Los tipos de archivo soportados deben incluir los indicados a continuación; sin embargo, para una completa y acutualizada lista de formatos soportados, por favor consulte la documentación de LibreOffice
|
||||||
fileToPDF.submit=Convertir a PDF
|
fileToPDF.submit=Convertir a PDF
|
||||||
|
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=Alto (Espacio entre cada marca de agua verticalmente):
|
|||||||
watermark.selectText.7=Opacidad (0% - 100%):
|
watermark.selectText.7=Opacidad (0% - 100%):
|
||||||
watermark.selectText.8=Tipo de marca de agua:
|
watermark.selectText.8=Tipo de marca de agua:
|
||||||
watermark.selectText.9=Imagen de marca de agua:
|
watermark.selectText.9=Imagen de marca de agua:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Añadir marca de agua
|
watermark.submit=Añadir marca de agua
|
||||||
watermark.type.1=Texto
|
watermark.type.1=Texto
|
||||||
watermark.type.2=Imagen
|
watermark.type.2=Imagen
|
||||||
@@ -1017,8 +1000,8 @@ pdfToPDFA.header=PDF a PDF/A
|
|||||||
pdfToPDFA.credit=Este servicio usa OCRmyPDF para la conversión a PDF/A
|
pdfToPDFA.credit=Este servicio usa OCRmyPDF para la conversión a PDF/A
|
||||||
pdfToPDFA.submit=Convertir
|
pdfToPDFA.submit=Convertir
|
||||||
pdfToPDFA.tip=Actualmente no funciona para múltiples entrada a la vez
|
pdfToPDFA.tip=Actualmente no funciona para múltiples entrada a la vez
|
||||||
pdfToPDFA.outputFormat=Formato de salida
|
pdfToPDFA.outputFormat=Output format
|
||||||
pdfToPDFA.pdfWithDigitalSignature=El PDF contiene una firma digital. Esto se eliminará en el siguiente paso.
|
pdfToPDFA.pdfWithDigitalSignature=The PDF contains a digital signature. This will be removed in the next step.
|
||||||
|
|
||||||
|
|
||||||
#PDFToWord
|
#PDFToWord
|
||||||
@@ -1120,13 +1103,13 @@ licenses.version=Versión
|
|||||||
licenses.license=Licencia
|
licenses.license=Licencia
|
||||||
|
|
||||||
#survey
|
#survey
|
||||||
survey.nav=Encuesta
|
survey.nav=Survey
|
||||||
survey.title=Encuesta Stirling-PDF
|
survey.title=Stirling-PDF Survey
|
||||||
survey.description=Stirling-PDF no tiene seguimiento, por lo que queremos escuchar a nuestros usuarios para mejorar Stirling-PDF.
|
survey.description=Stirling-PDF has no tracking so we want to hear from our users to improve Stirling-PDF!
|
||||||
survey.please=¡Considere realizar nuestra encuesta!
|
survey.please=Please consider taking our survey!
|
||||||
survey.disabled=(La ventana emergente de la encuesta se desactivará en las siguientes actualizaciones, pero estará disponible al pie de la página.)
|
survey.disabled=(Survey popup will be disabled in following updates but available at foot of page)
|
||||||
survey.button=Realizar encuesta
|
survey.button=Take Survey
|
||||||
survey.dontShowAgain=No volver a mostrar
|
survey.dontShowAgain=Don't show again
|
||||||
|
|
||||||
|
|
||||||
#error
|
#error
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Mostrar seguimiento de pila
|
|||||||
error.githubSubmit=GitHub - Enviar un ticket
|
error.githubSubmit=GitHub - Enviar un ticket
|
||||||
error.discordSubmit=Discord - Enviar mensaje de soporte
|
error.discordSubmit=Discord - Enviar mensaje de soporte
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=User not found.
|
|||||||
incorrectPasswordMessage=Current password is incorrect.
|
incorrectPasswordMessage=Current password is incorrect.
|
||||||
usernameExistsMessage=New Username already exists.
|
usernameExistsMessage=New Username already exists.
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=Ezin da uneko erabiltzailearen rola jaitsi
|
downgradeCurrentUserMessage=Ezin da uneko erabiltzailearen rola jaitsi
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Ezin da uneko erabiltzailearen rola jaitsi. Beraz, oraingo erabiltzailea ez da erakutsiko.
|
downgradeCurrentUserLongMessage=Ezin da uneko erabiltzailearen rola jaitsi. Beraz, oraingo erabiltzailea ez da erakutsiko.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Erabiltzaile
|
|||||||
adminUserSettings.addUser=Erabiltzaile berria
|
adminUserSettings.addUser=Erabiltzaile berria
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Rolak
|
adminUserSettings.roles=Rolak
|
||||||
adminUserSettings.role=Rol
|
adminUserSettings.role=Rol
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Force user to change password on login
|
|||||||
adminUserSettings.submit=Gorde Erabiltzailea
|
adminUserSettings.submit=Gorde Erabiltzailea
|
||||||
adminUserSettings.changeUserRole=Erabiltzailearen rola aldatu
|
adminUserSettings.changeUserRole=Erabiltzailearen rola aldatu
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Zure kontua blokeatu egin da.
|
|||||||
login.signinTitle=Mesedez, hasi saioa
|
login.signinTitle=Mesedez, hasi saioa
|
||||||
login.ssoSignIn=Hasi saioa Saioa hasteko modu bakarraren bidez
|
login.ssoSignIn=Hasi saioa Saioa hasteko modu bakarraren bidez
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Sortu automatikoki erabiltzailea desgaituta dago
|
login.oauth2AutoCreateDisabled=OAUTH2 Sortu automatikoki erabiltzailea desgaituta dago
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=Altuera (ur-marka bakoitzaren arteko espazioa bertikalean
|
|||||||
watermark.selectText.7=Opakutasuna (0% - 100%):
|
watermark.selectText.7=Opakutasuna (0% - 100%):
|
||||||
watermark.selectText.8=Watermark Type:
|
watermark.selectText.8=Watermark Type:
|
||||||
watermark.selectText.9=Watermark Image:
|
watermark.selectText.9=Watermark Image:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Gehitu ur-marka
|
watermark.submit=Gehitu ur-marka
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Utilisateur non trouvé.
|
|||||||
incorrectPasswordMessage=Le mot de passe actuel est incorrect.
|
incorrectPasswordMessage=Le mot de passe actuel est incorrect.
|
||||||
usernameExistsMessage=Le nouveau nom d’utilisateur existe déjà.
|
usernameExistsMessage=Le nouveau nom d’utilisateur existe déjà.
|
||||||
invalidUsernameMessage=Nom d’utilisateur invalide, le nom d’utilisateur ne peut contenir que des lettres, des chiffres et les caractères spéciaux suivants @._+- ou doit être une adresse e-mail valide.
|
invalidUsernameMessage=Nom d’utilisateur invalide, le nom d’utilisateur ne peut contenir que des lettres, des chiffres et les caractères spéciaux suivants @._+- ou doit être une adresse e-mail valide.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Impossible de supprimer l’utilisateur actuellement connecté.
|
deleteCurrentUserMessage=Impossible de supprimer l’utilisateur actuellement connecté.
|
||||||
deleteUsernameExistsMessage=Le nom d’utilisateur n’existe pas et ne peut pas être supprimé.
|
deleteUsernameExistsMessage=Le nom d’utilisateur n’existe pas et ne peut pas être supprimé.
|
||||||
downgradeCurrentUserMessage=Impossible de rétrograder le rôle de l'utilisateur actuel.
|
downgradeCurrentUserMessage=Impossible de rétrograder le rôle de l'utilisateur actuel.
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Impossible de rétrograder le rôle de l'utilisateur actuel. Par conséquent, l'utilisateur actuel ne sera pas affiché.
|
downgradeCurrentUserLongMessage=Impossible de rétrograder le rôle de l'utilisateur actuel. Par conséquent, l'utilisateur actuel ne sera pas affiché.
|
||||||
userAlreadyExistsOAuthMessage=L'utilisateur existe déjà en tant qu'utilisateur OAuth2.
|
userAlreadyExistsOAuthMessage=L'utilisateur existe déjà en tant qu'utilisateur OAuth2.
|
||||||
userAlreadyExistsWebMessage=L'utilisateur existe déjà en tant qu'utilisateur Web.
|
userAlreadyExistsWebMessage=L'utilisateur existe déjà en tant qu'utilisateur Web.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Utilisateur
|
|||||||
adminUserSettings.addUser=Ajouter un utilisateur
|
adminUserSettings.addUser=Ajouter un utilisateur
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Le nom d'utilisateur ne peut contenir que des lettres, des chiffres et les caractères spéciaux suivants @._+- ou doit être une adresse e-mail valide.
|
adminUserSettings.usernameInfo=Le nom d'utilisateur ne peut contenir que des lettres, des chiffres et les caractères spéciaux suivants @._+- ou doit être une adresse e-mail valide.
|
||||||
adminUserSettings.roles=Rôles
|
adminUserSettings.roles=Rôles
|
||||||
adminUserSettings.role=Rôle
|
adminUserSettings.role=Rôle
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Forcer l’utilisateur à changer son nom d’util
|
|||||||
adminUserSettings.submit=Ajouter
|
adminUserSettings.submit=Ajouter
|
||||||
adminUserSettings.changeUserRole=Changer le rôle de l'utilisateur
|
adminUserSettings.changeUserRole=Changer le rôle de l'utilisateur
|
||||||
adminUserSettings.authenticated=Authentifié
|
adminUserSettings.authenticated=Authentifié
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=eBook vers PDF
|
|||||||
home.BookToPDF.desc=Convertit les formats de livres/bandes dessinées en PDF à l'aide de calibre
|
home.BookToPDF.desc=Convertit les formats de livres/bandes dessinées en PDF à l'aide de calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Votre compte a été verrouillé.
|
|||||||
login.signinTitle=Veuillez vous connecter
|
login.signinTitle=Veuillez vous connecter
|
||||||
login.ssoSignIn=Se connecter via l'authentification unique
|
login.ssoSignIn=Se connecter via l'authentification unique
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Création automatique d'utilisateur désactivée
|
login.oauth2AutoCreateDisabled=OAUTH2 Création automatique d'utilisateur désactivée
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Demande d'autorisation introuvable
|
login.oauth2RequestNotFound=Demande d'autorisation introuvable
|
||||||
login.oauth2InvalidUserInfoResponse=Réponse contenant les informations de l'utilisateur est invalide
|
login.oauth2InvalidUserInfoResponse=Réponse contenant les informations de l'utilisateur est invalide
|
||||||
login.oauth2invalidRequest=Requête invalide
|
login.oauth2invalidRequest=Requête invalide
|
||||||
login.oauth2AccessDenied=Accès refusé
|
login.oauth2AccessDenied=Accès refusé
|
||||||
login.oauth2InvalidTokenResponse=Réponse contenant le jeton est invalide
|
login.oauth2InvalidTokenResponse=Réponse contenant le jeton est invalide
|
||||||
login.oauth2InvalidIdToken=Jeton d'identification invalide
|
login.oauth2InvalidIdToken=Jeton d'identification invalide
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer (espace entre chaque filigrane verticalement
|
|||||||
watermark.selectText.7=Opacité (de 0% à 100%)
|
watermark.selectText.7=Opacité (de 0% à 100%)
|
||||||
watermark.selectText.8=Type de filigrane
|
watermark.selectText.8=Type de filigrane
|
||||||
watermark.selectText.9=Image du filigrane
|
watermark.selectText.9=Image du filigrane
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Ajouter un filigrane
|
watermark.submit=Ajouter un filigrane
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copier la Stack Trace
|
|||||||
error.githubSubmit=GitHub - Créer un ticket
|
error.githubSubmit=GitHub - Créer un ticket
|
||||||
error.discordSubmit=Discord - Poster un message de demande d’assistance
|
error.discordSubmit=Discord - Poster un message de demande d’assistance
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -55,12 +55,10 @@ userNotFoundMessage=उपयोगकर्ता नहीं मिला।
|
|||||||
incorrectPasswordMessage=वर्तमान पासवर्ड गलत है।
|
incorrectPasswordMessage=वर्तमान पासवर्ड गलत है।
|
||||||
usernameExistsMessage=नया उपयोगकर्ता नाम पहले से मौजूद है।
|
usernameExistsMessage=नया उपयोगकर्ता नाम पहले से मौजूद है।
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=मौजूदा यूज़र की भूमिका को डाउनग्रेड नहीं किया जा सकता
|
downgradeCurrentUserMessage=मौजूदा यूज़र की भूमिका को डाउनग्रेड नहीं किया जा सकता
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=मौजूदा यूज़र की भूमिका को डाउनग्रेड नहीं किया जा सकता। इसलिए, वर्तमान उपयोगकर्ता को नहीं दिखाया जाएगा।
|
downgradeCurrentUserLongMessage=मौजूदा यूज़र की भूमिका को डाउनग्रेड नहीं किया जा सकता। इसलिए, वर्तमान उपयोगकर्ता को नहीं दिखाया जाएगा।
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=उपयोगकर्ता
|
|||||||
adminUserSettings.addUser=नया उपयोगकर्ता जोड़ें
|
adminUserSettings.addUser=नया उपयोगकर्ता जोड़ें
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=रोल्स
|
adminUserSettings.roles=रोल्स
|
||||||
adminUserSettings.role=रोल
|
adminUserSettings.role=रोल
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=उपयोगकर्ता को लॉगि
|
|||||||
adminUserSettings.submit=उपयोगकर्ता को सहेजें
|
adminUserSettings.submit=उपयोगकर्ता को सहेजें
|
||||||
adminUserSettings.changeUserRole=यूज़र की भूमिका बदलें
|
adminUserSettings.changeUserRole=यूज़र की भूमिका बदलें
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=आपका खाता लॉक कर दिया गया
|
|||||||
login.signinTitle=कृपया साइन इन करें
|
login.signinTitle=कृपया साइन इन करें
|
||||||
login.ssoSignIn=सिंगल साइन - ऑन के ज़रिए लॉग इन करें
|
login.ssoSignIn=सिंगल साइन - ऑन के ज़रिए लॉग इन करें
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 ऑटो - क्रिएट यूज़र अक्षम किया गया
|
login.oauth2AutoCreateDisabled=OAUTH2 ऑटो - क्रिएट यूज़र अक्षम किया गया
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=ऊंचाई स्पेसर (प्रत्ये
|
|||||||
watermark.selectText.7=अपारदर्शिता (0% - 100%):
|
watermark.selectText.7=अपारदर्शिता (0% - 100%):
|
||||||
watermark.selectText.8=वॉटरमार्क प्रकार:
|
watermark.selectText.8=वॉटरमार्क प्रकार:
|
||||||
watermark.selectText.9=वॉटरमार्क छवि:
|
watermark.selectText.9=वॉटरमार्क छवि:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=वॉटरमार्क जोड़ें
|
watermark.submit=वॉटरमार्क जोड़ें
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Korisnik nije pronađen.
|
|||||||
incorrectPasswordMessage=Kriva zaporka.
|
incorrectPasswordMessage=Kriva zaporka.
|
||||||
usernameExistsMessage=Korisničko ime već postoji
|
usernameExistsMessage=Korisničko ime već postoji
|
||||||
invalidUsernameMessage=Nevažeće korisničko ime, korisničko ime može sadržavati samo slova, brojke i sljedeće posebne znakove @._+- ili mora biti važeća adresa e-pošte.
|
invalidUsernameMessage=Nevažeće korisničko ime, korisničko ime može sadržavati samo slova, brojke i sljedeće posebne znakove @._+- ili mora biti važeća adresa e-pošte.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Nije moguće izbrisati trenutno prijavljenog korisnika.
|
deleteCurrentUserMessage=Nije moguće izbrisati trenutno prijavljenog korisnika.
|
||||||
deleteUsernameExistsMessage=Korisničko ime ne postoji i ne može se izbrisati.
|
deleteUsernameExistsMessage=Korisničko ime ne postoji i ne može se izbrisati.
|
||||||
downgradeCurrentUserMessage=Nije moguće vratiti unazad ulogu trenutnog korisnika
|
downgradeCurrentUserMessage=Nije moguće vratiti unazad ulogu trenutnog korisnika
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Nije moguće vratiti unazad ulogu trenutnog korisnika. Dakle, trenutni korisnik neće biti prikazan.
|
downgradeCurrentUserLongMessage=Nije moguće vratiti unazad ulogu trenutnog korisnika. Dakle, trenutni korisnik neće biti prikazan.
|
||||||
userAlreadyExistsOAuthMessage=Korisnik već postoji kao OAuth2 korisnik.
|
userAlreadyExistsOAuthMessage=Korisnik već postoji kao OAuth2 korisnik.
|
||||||
userAlreadyExistsWebMessage=Korisnik već postoji kao web korisnik.
|
userAlreadyExistsWebMessage=Korisnik već postoji kao web korisnik.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Korisnik
|
|||||||
adminUserSettings.addUser=Dodaj novog korisnika
|
adminUserSettings.addUser=Dodaj novog korisnika
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Korisničko ime može sadržavati samo slova, brojke i sljedeće posebne znakove @._+- ili mora biti važeća adresa e-pošte.
|
adminUserSettings.usernameInfo=Korisničko ime može sadržavati samo slova, brojke i sljedeće posebne znakove @._+- ili mora biti važeća adresa e-pošte.
|
||||||
adminUserSettings.roles=Uloge
|
adminUserSettings.roles=Uloge
|
||||||
adminUserSettings.role=Uloga
|
adminUserSettings.role=Uloga
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Prisiliti korisnika da promijeni lozinku prilikom
|
|||||||
adminUserSettings.submit=Spremi korisnika
|
adminUserSettings.submit=Spremi korisnika
|
||||||
adminUserSettings.changeUserRole=Promijenite korisničku ulogu
|
adminUserSettings.changeUserRole=Promijenite korisničku ulogu
|
||||||
adminUserSettings.authenticated=Autentificirano
|
adminUserSettings.authenticated=Autentificirano
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book u PDF
|
|||||||
home.BookToPDF.desc=Pretvara format knjige/stripa u PDF format pomoću calibre
|
home.BookToPDF.desc=Pretvara format knjige/stripa u PDF format pomoću calibre
|
||||||
BookToPDF.tags=Knjiga,Strip,Calibre,Pretvori,manga,amazon,kindle
|
BookToPDF.tags=Knjiga,Strip,Calibre,Pretvori,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Vaš račun je zaključan.
|
|||||||
login.signinTitle=Molimo vas da se prijavite
|
login.signinTitle=Molimo vas da se prijavite
|
||||||
login.ssoSignIn=Prijavite se putem jedinstvene prijave
|
login.ssoSignIn=Prijavite se putem jedinstvene prijave
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 automatsko kreiranje korisnika je onemogućeno
|
login.oauth2AutoCreateDisabled=OAUTH2 automatsko kreiranje korisnika je onemogućeno
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Zahtjev za autorizaciju nije pronađen
|
login.oauth2RequestNotFound=Zahtjev za autorizaciju nije pronađen
|
||||||
login.oauth2InvalidUserInfoResponse=Nevažeće informacije o korisniku
|
login.oauth2InvalidUserInfoResponse=Nevažeće informacije o korisniku
|
||||||
login.oauth2invalidRequest=Neispravan zahtjev
|
login.oauth2invalidRequest=Neispravan zahtjev
|
||||||
login.oauth2AccessDenied=Pristup odbijen
|
login.oauth2AccessDenied=Pristup odbijen
|
||||||
login.oauth2InvalidTokenResponse=Nevažeći odgovor tokena
|
login.oauth2InvalidTokenResponse=Nevažeći odgovor tokena
|
||||||
login.oauth2InvalidIdToken=Nevažeći ID token
|
login.oauth2InvalidIdToken=Nevažeći ID token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=Visina razmaka (Razmak između svakog vodenog žiga okomi
|
|||||||
watermark.selectText.7=Neprozirnost (0% - 100%):
|
watermark.selectText.7=Neprozirnost (0% - 100%):
|
||||||
watermark.selectText.8=Vrsta vodenog žiga:
|
watermark.selectText.8=Vrsta vodenog žiga:
|
||||||
watermark.selectText.9=Slika vodenog žiga:
|
watermark.selectText.9=Slika vodenog žiga:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Dodaj vodeni žig
|
watermark.submit=Dodaj vodeni žig
|
||||||
watermark.type.1=Tekst
|
watermark.type.1=Tekst
|
||||||
watermark.type.2=Slika
|
watermark.type.2=Slika
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Kopiraj Stack Trace
|
|||||||
error.githubSubmit=GitHub - Pošaljite ticket
|
error.githubSubmit=GitHub - Pošaljite ticket
|
||||||
error.discordSubmit=Discord - Pošalji objavu podrške
|
error.discordSubmit=Discord - Pošalji objavu podrške
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=A felhasználó nem található.
|
|||||||
incorrectPasswordMessage=A jelenlegi jelszó helytelen.
|
incorrectPasswordMessage=A jelenlegi jelszó helytelen.
|
||||||
usernameExistsMessage=Az új felhasználónév már létezik.
|
usernameExistsMessage=Az új felhasználónév már létezik.
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=A jelenlegi felhasználó szerepkörét nem lehet visszaminősíteni
|
downgradeCurrentUserMessage=A jelenlegi felhasználó szerepkörét nem lehet visszaminősíteni
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Az aktuális felhasználó szerepkörét nem lehet visszaminősíteni. Ezért az aktuális felhasználó nem jelenik meg.
|
downgradeCurrentUserLongMessage=Az aktuális felhasználó szerepkörét nem lehet visszaminősíteni. Ezért az aktuális felhasználó nem jelenik meg.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Felhasználó
|
|||||||
adminUserSettings.addUser=Új felhasználó hozzáadása
|
adminUserSettings.addUser=Új felhasználó hozzáadása
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Szerepek
|
adminUserSettings.roles=Szerepek
|
||||||
adminUserSettings.role=Szerep
|
adminUserSettings.role=Szerep
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Kényszerítse a felhasználót a felhasználóné
|
|||||||
adminUserSettings.submit=Felhasználó mentése
|
adminUserSettings.submit=Felhasználó mentése
|
||||||
adminUserSettings.changeUserRole=Felhasználó szerepkörének módosítása
|
adminUserSettings.changeUserRole=Felhasználó szerepkörének módosítása
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=A fiókja zárolva lett!
|
|||||||
login.signinTitle=Kérjük, jelentkezzen be!
|
login.signinTitle=Kérjük, jelentkezzen be!
|
||||||
login.ssoSignIn=Bejelentkezés egyszeri bejelentkezéssel
|
login.ssoSignIn=Bejelentkezés egyszeri bejelentkezéssel
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Felhasználó automatikus létrehozása letiltva
|
login.oauth2AutoCreateDisabled=OAUTH2 Felhasználó automatikus létrehozása letiltva
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer (Hely a vízjelek között függőlegesen):
|
|||||||
watermark.selectText.7=Átlátszóság (0% - 100%):
|
watermark.selectText.7=Átlátszóság (0% - 100%):
|
||||||
watermark.selectText.8=Vízjel típusa:
|
watermark.selectText.8=Vízjel típusa:
|
||||||
watermark.selectText.9=Vízjel képe:
|
watermark.selectText.9=Vízjel képe:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Vízjel hozzáadása
|
watermark.submit=Vízjel hozzáadása
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Pengguna tidak ditemukan.
|
|||||||
incorrectPasswordMessage=Kata sandi saat ini salah.
|
incorrectPasswordMessage=Kata sandi saat ini salah.
|
||||||
usernameExistsMessage=Nama pengguna baru sudah ada.
|
usernameExistsMessage=Nama pengguna baru sudah ada.
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=Tidak dapat menurunkan peran pengguna saat ini
|
downgradeCurrentUserMessage=Tidak dapat menurunkan peran pengguna saat ini
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Tidak dapat menurunkan peran pengguna saat ini. Oleh karena itu, pengguna saat ini tidak akan ditampilkan.
|
downgradeCurrentUserLongMessage=Tidak dapat menurunkan peran pengguna saat ini. Oleh karena itu, pengguna saat ini tidak akan ditampilkan.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Pengguna
|
|||||||
adminUserSettings.addUser=Tambahkan Pengguna Baru
|
adminUserSettings.addUser=Tambahkan Pengguna Baru
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Peran
|
adminUserSettings.roles=Peran
|
||||||
adminUserSettings.role=Peran
|
adminUserSettings.role=Peran
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Memaksa pengguna untuk mengubah nama pengguna/kata
|
|||||||
adminUserSettings.submit=Simpan Pengguna
|
adminUserSettings.submit=Simpan Pengguna
|
||||||
adminUserSettings.changeUserRole=Ubah Peran Pengguna
|
adminUserSettings.changeUserRole=Ubah Peran Pengguna
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Akun Anda telah dikunci.
|
|||||||
login.signinTitle=Silakan masuk
|
login.signinTitle=Silakan masuk
|
||||||
login.ssoSignIn=Masuk melalui Single Sign - on
|
login.ssoSignIn=Masuk melalui Single Sign - on
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Buat Otomatis Pengguna Dinonaktifkan
|
login.oauth2AutoCreateDisabled=OAUTH2 Buat Otomatis Pengguna Dinonaktifkan
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer (Spasi diantara setiap watermark vertikal):
|
|||||||
watermark.selectText.7=Opacity (0% - 100%):
|
watermark.selectText.7=Opacity (0% - 100%):
|
||||||
watermark.selectText.8=Tipe Watermark:
|
watermark.selectText.8=Tipe Watermark:
|
||||||
watermark.selectText.9=Gambar Watermark:
|
watermark.selectText.9=Gambar Watermark:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Tambahkan Watermark
|
watermark.submit=Tambahkan Watermark
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Utente non trovato.
|
|||||||
incorrectPasswordMessage=La password attuale non è corretta.
|
incorrectPasswordMessage=La password attuale non è corretta.
|
||||||
usernameExistsMessage=Il nuovo nome utente esiste già.
|
usernameExistsMessage=Il nuovo nome utente esiste già.
|
||||||
invalidUsernameMessage=Nome utente non valido, il nome utente può contenere solo lettere, numeri e i seguenti caratteri speciali @._+- o deve essere un indirizzo email valido.
|
invalidUsernameMessage=Nome utente non valido, il nome utente può contenere solo lettere, numeri e i seguenti caratteri speciali @._+- o deve essere un indirizzo email valido.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=La nuova password e la conferma della nuova password devono corrispondere.
|
confirmPasswordErrorMessage=La nuova password e la conferma della nuova password devono corrispondere.
|
||||||
deleteCurrentUserMessage=Impossibile eliminare l'utente attualmente connesso.
|
deleteCurrentUserMessage=Impossibile eliminare l'utente attualmente connesso.
|
||||||
deleteUsernameExistsMessage=Il nome utente non esiste e non può essere eliminato.
|
deleteUsernameExistsMessage=Il nome utente non esiste e non può essere eliminato.
|
||||||
downgradeCurrentUserMessage=Impossibile declassare il ruolo dell'utente corrente
|
downgradeCurrentUserMessage=Impossibile declassare il ruolo dell'utente corrente
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Impossibile declassare il ruolo dell'utente corrente. Pertanto, l'utente corrente non verrà visualizzato.
|
downgradeCurrentUserLongMessage=Impossibile declassare il ruolo dell'utente corrente. Pertanto, l'utente corrente non verrà visualizzato.
|
||||||
userAlreadyExistsOAuthMessage=L'utente esiste già come utente OAuth2.
|
userAlreadyExistsOAuthMessage=L'utente esiste già come utente OAuth2.
|
||||||
userAlreadyExistsWebMessage=L'utente esiste già come utente web.
|
userAlreadyExistsWebMessage=L'utente esiste già come utente web.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Utente
|
|||||||
adminUserSettings.addUser=Aggiungi un nuovo Utente
|
adminUserSettings.addUser=Aggiungi un nuovo Utente
|
||||||
adminUserSettings.deleteUser=Elimina utente
|
adminUserSettings.deleteUser=Elimina utente
|
||||||
adminUserSettings.confirmDeleteUser=L'utente deve essere eliminato?
|
adminUserSettings.confirmDeleteUser=L'utente deve essere eliminato?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Il nome utente può contenere solo lettere, numeri e i seguenti caratteri speciali @._+- oppure deve essere un indirizzo email valido.
|
adminUserSettings.usernameInfo=Il nome utente può contenere solo lettere, numeri e i seguenti caratteri speciali @._+- oppure deve essere un indirizzo email valido.
|
||||||
adminUserSettings.roles=Ruoli
|
adminUserSettings.roles=Ruoli
|
||||||
adminUserSettings.role=Ruolo
|
adminUserSettings.role=Ruolo
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Forza l'utente a cambiare nome username/password a
|
|||||||
adminUserSettings.submit=Salva utente
|
adminUserSettings.submit=Salva utente
|
||||||
adminUserSettings.changeUserRole=Cambia il ruolo dell'utente
|
adminUserSettings.changeUserRole=Cambia il ruolo dell'utente
|
||||||
adminUserSettings.authenticated=Autenticato
|
adminUserSettings.authenticated=Autenticato
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Importazione/Esportazione database
|
database.title=Importazione/Esportazione database
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Libro in PDF
|
|||||||
home.BookToPDF.desc=Converte i formati di libri/fumetti in PDF utilizzando Calibre
|
home.BookToPDF.desc=Converte i formati di libri/fumetti in PDF utilizzando Calibre
|
||||||
BookToPDF.tags=Libro,fumetto,calibre,conversione,manga,amazon,kindle
|
BookToPDF.tags=Libro,fumetto,calibre,conversione,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Rimuovi immagine
|
|
||||||
home.removeImagePdf.desc=Rimuovi le immagini dal PDF per ridurre la dimensione del file
|
|
||||||
removeImagePdf.tags=Rimuovi immagine,operazioni sulla pagina,back-end,lato server
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Il tuo account è stato bloccato.
|
|||||||
login.signinTitle=Per favore accedi
|
login.signinTitle=Per favore accedi
|
||||||
login.ssoSignIn=Accedi tramite Single Sign-on
|
login.ssoSignIn=Accedi tramite Single Sign-on
|
||||||
login.oauth2AutoCreateDisabled=Creazione automatica utente OAUTH2 DISABILITATA
|
login.oauth2AutoCreateDisabled=Creazione automatica utente OAUTH2 DISABILITATA
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Richiesta di autorizzazione non trovata
|
login.oauth2RequestNotFound=Richiesta di autorizzazione non trovata
|
||||||
login.oauth2InvalidUserInfoResponse=Risposta relativa alle informazioni utente non valida
|
login.oauth2InvalidUserInfoResponse=Risposta relativa alle informazioni utente non valida
|
||||||
login.oauth2invalidRequest=Richiesta non valida
|
login.oauth2invalidRequest=Richiesta non valida
|
||||||
login.oauth2AccessDenied=Accesso negato
|
login.oauth2AccessDenied=Accesso negato
|
||||||
login.oauth2InvalidTokenResponse=Risposta token non valida
|
login.oauth2InvalidTokenResponse=Risposta token non valida
|
||||||
login.oauth2InvalidIdToken=Id Token non valido
|
login.oauth2InvalidIdToken=Id Token non valido
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -722,8 +706,8 @@ removeAnnotations.submit=Rimuovi
|
|||||||
#compare
|
#compare
|
||||||
compare.title=Compara
|
compare.title=Compara
|
||||||
compare.header=Compara PDF
|
compare.header=Compara PDF
|
||||||
compare.highlightColor.1=Evidenzia colore 1:
|
compare.highlightColor.1=Highlight Color 1:
|
||||||
compare.highlightColor.2=Evidenzia colore 2:
|
compare.highlightColor.2=Highlight Color 2:
|
||||||
compare.document.1=Documento 1
|
compare.document.1=Documento 1
|
||||||
compare.document.2=Documento 2
|
compare.document.2=Documento 2
|
||||||
compare.submit=Compara
|
compare.submit=Compara
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=spazio verticale (tra ogni filigrana):
|
|||||||
watermark.selectText.7=Opacità (0% - 100%):
|
watermark.selectText.7=Opacità (0% - 100%):
|
||||||
watermark.selectText.8=Tipo di filigrana:
|
watermark.selectText.8=Tipo di filigrana:
|
||||||
watermark.selectText.9=Immagine filigrana:
|
watermark.selectText.9=Immagine filigrana:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Aggiungi Filigrana
|
watermark.submit=Aggiungi Filigrana
|
||||||
watermark.type.1=Testo
|
watermark.type.1=Testo
|
||||||
watermark.type.2=Immagine
|
watermark.type.2=Immagine
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copia traccia dello stack
|
|||||||
error.githubSubmit=GitHub: invia un ticket
|
error.githubSubmit=GitHub: invia un ticket
|
||||||
error.discordSubmit=Discord: invia post di supporto
|
error.discordSubmit=Discord: invia post di supporto
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Rimuovere immagine
|
|
||||||
removeImage.header=Rimuovi immagine
|
|
||||||
removeImage.removeImage=Rimuovi immagine
|
|
||||||
removeImage.submit=Rimuovi immagine
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=ユーザーが見つかりません。
|
|||||||
incorrectPasswordMessage=現在のパスワードが正しくありません。
|
incorrectPasswordMessage=現在のパスワードが正しくありません。
|
||||||
usernameExistsMessage=新しいユーザー名はすでに存在します。
|
usernameExistsMessage=新しいユーザー名はすでに存在します。
|
||||||
invalidUsernameMessage=ユーザー名が無効です。ユーザー名には文字、数字、およびそれに続く特殊文字 @._+- のみを含めることができます。または、有効な電子メール アドレスである必要があります。
|
invalidUsernameMessage=ユーザー名が無効です。ユーザー名には文字、数字、およびそれに続く特殊文字 @._+- のみを含めることができます。または、有効な電子メール アドレスである必要があります。
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=新しいパスワードと新しいパスワードの確認は一致する必要があります。
|
confirmPasswordErrorMessage=新しいパスワードと新しいパスワードの確認は一致する必要があります。
|
||||||
deleteCurrentUserMessage=現在ログインしているユーザーは削除できません。
|
deleteCurrentUserMessage=現在ログインしているユーザーは削除できません。
|
||||||
deleteUsernameExistsMessage=そのユーザー名は存在しないため削除できません。
|
deleteUsernameExistsMessage=そのユーザー名は存在しないため削除できません。
|
||||||
downgradeCurrentUserMessage=現在のユーザーの役割をダウングレードできません
|
downgradeCurrentUserMessage=現在のユーザーの役割をダウングレードできません
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=現在のユーザーの役割をダウングレードできません。したがって、現在のユーザーは表示されません。
|
downgradeCurrentUserLongMessage=現在のユーザーの役割をダウングレードできません。したがって、現在のユーザーは表示されません。
|
||||||
userAlreadyExistsOAuthMessage=ユーザーは既にOAuth2ユーザーとして存在します。
|
userAlreadyExistsOAuthMessage=ユーザーは既にOAuth2ユーザーとして存在します。
|
||||||
userAlreadyExistsWebMessage=ユーザーは既にWebユーザーとして存在します。
|
userAlreadyExistsWebMessage=ユーザーは既にWebユーザーとして存在します。
|
||||||
@@ -109,7 +107,7 @@ pipelineOptions.validateButton=検証
|
|||||||
#############
|
#############
|
||||||
# NAVBAR #
|
# NAVBAR #
|
||||||
#############
|
#############
|
||||||
navbar.favorite=お気に入り
|
navbar.favorite=Favorites
|
||||||
navbar.darkmode=ダークモード
|
navbar.darkmode=ダークモード
|
||||||
navbar.language=言語
|
navbar.language=言語
|
||||||
navbar.settings=設定
|
navbar.settings=設定
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=ユーザー
|
|||||||
adminUserSettings.addUser=新しいユーザを追加
|
adminUserSettings.addUser=新しいユーザを追加
|
||||||
adminUserSettings.deleteUser=ユーザの削除
|
adminUserSettings.deleteUser=ユーザの削除
|
||||||
adminUserSettings.confirmDeleteUser=ユーザを本当に削除しますか?
|
adminUserSettings.confirmDeleteUser=ユーザを本当に削除しますか?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=ユーザー名には、文字、数字、および次の特殊文字 @._+- のみを含めることができます。または、有効な電子メール アドレスである必要があります。
|
adminUserSettings.usernameInfo=ユーザー名には、文字、数字、および次の特殊文字 @._+- のみを含めることができます。または、有効な電子メール アドレスである必要があります。
|
||||||
adminUserSettings.roles=役割
|
adminUserSettings.roles=役割
|
||||||
adminUserSettings.role=役割
|
adminUserSettings.role=役割
|
||||||
@@ -193,30 +190,23 @@ adminUserSettings.forceChange=ログイン時にユーザー名/パスワード
|
|||||||
adminUserSettings.submit=ユーザーの保存
|
adminUserSettings.submit=ユーザーの保存
|
||||||
adminUserSettings.changeUserRole=ユーザーの役割を変更する
|
adminUserSettings.changeUserRole=ユーザーの役割を変更する
|
||||||
adminUserSettings.authenticated=認証済
|
adminUserSettings.authenticated=認証済
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=データベースのインポート/エクスポート
|
database.title=Database Import/Export
|
||||||
database.header=データベースのインポート/エクスポート
|
database.header=Database Import/Export
|
||||||
database.fileName=ファイル名
|
database.fileName=File Name
|
||||||
database.creationDate=作成日
|
database.creationDate=Creation Date
|
||||||
database.fileSize=ファイルサイズ
|
database.fileSize=File Size
|
||||||
database.deleteBackupFile=バックアップファイルの削除
|
database.deleteBackupFile=Delete Backup File
|
||||||
database.importBackupFile=バックアップファイルをインポート
|
database.importBackupFile=Import Backup File
|
||||||
database.downloadBackupFile=バックアップファイルをダウンロード
|
database.downloadBackupFile=Download Backup File
|
||||||
database.info_1=データをインポートする際には、正しい構造を確保することが極めて重要です。不明な点がある場合は、専門家のアドバイスやサポートを受けてください。構造上のエラーは、アプリケーションの誤動作を引き起こす可能性があります。
|
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||||
database.info_2=ファイル名はアップロード時には関係ありません。アップロード後にbackup_user_yyyyMMddHHmm.sqlという形式にリネームされ、一貫した命名規則が保証されます。
|
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||||
database.submit=バックアップをインポート
|
database.submit=Import Backup
|
||||||
database.importIntoDatabaseSuccessed=データベースへのインポートに成功
|
database.importIntoDatabaseSuccessed=Import into database successed
|
||||||
database.fileNotFound=ファイルが見つかりません
|
database.fileNotFound=File not Found
|
||||||
database.fileNullOrEmpty=ファイルは null または空であってはなりません
|
database.fileNullOrEmpty=File must not be null or empty
|
||||||
database.failedImportFile=ファイルのインポートに失敗
|
database.failedImportFile=Failed Import File
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# HOME-PAGE #
|
# HOME-PAGE #
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=PDFを書籍に変換
|
|||||||
home.BookToPDF.desc=calibreを使用してPDFを書籍/コミック形式に変換します
|
home.BookToPDF.desc=calibreを使用してPDFを書籍/コミック形式に変換します
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=画像の削除
|
|
||||||
home.removeImagePdf.desc=PDFから画像を削除してファイルサイズを小さくします
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=あなたのアカウントはロックされています。
|
|||||||
login.signinTitle=サインインしてください
|
login.signinTitle=サインインしてください
|
||||||
login.ssoSignIn=シングルサインオンでログイン
|
login.ssoSignIn=シングルサインオンでログイン
|
||||||
login.oauth2AutoCreateDisabled=OAuth 2自動作成ユーザーが無効
|
login.oauth2AutoCreateDisabled=OAuth 2自動作成ユーザーが無効
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=認証リクエストが見つかりません
|
login.oauth2RequestNotFound=認証リクエストが見つかりません
|
||||||
login.oauth2InvalidUserInfoResponse=無効なユーザー情報の応答
|
login.oauth2InvalidUserInfoResponse=無効なユーザー情報の応答
|
||||||
login.oauth2invalidRequest=無効なリクエスト
|
login.oauth2invalidRequest=無効なリクエスト
|
||||||
login.oauth2AccessDenied=アクセス拒否
|
login.oauth2AccessDenied=アクセス拒否
|
||||||
login.oauth2InvalidTokenResponse=無効なトークン応答
|
login.oauth2InvalidTokenResponse=無効なトークン応答
|
||||||
login.oauth2InvalidIdToken=無効なIDトークン
|
login.oauth2InvalidIdToken=無効なIDトークン
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=高さスペース (各透かし間の垂直方向のス
|
|||||||
watermark.selectText.7=不透明度 (0% - 100%):
|
watermark.selectText.7=不透明度 (0% - 100%):
|
||||||
watermark.selectText.8=透かしの種類:
|
watermark.selectText.8=透かしの種類:
|
||||||
watermark.selectText.9=透かしの画像:
|
watermark.selectText.9=透かしの画像:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=透かしを追加
|
watermark.submit=透かしを追加
|
||||||
watermark.type.1=テキスト
|
watermark.type.1=テキスト
|
||||||
watermark.type.2=画像
|
watermark.type.2=画像
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=スタックトレースをコピー
|
|||||||
error.githubSubmit=GitHub - チケットを提出
|
error.githubSubmit=GitHub - チケットを提出
|
||||||
error.discordSubmit=Discord - サポート投稿を提出
|
error.discordSubmit=Discord - サポート投稿を提出
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=画像の削除
|
|
||||||
removeImage.header=画像の削除
|
|
||||||
removeImage.removeImage=画像の削除
|
|
||||||
removeImage.submit=画像を削除
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=사용자를 찾을 수 없습니다.
|
|||||||
incorrectPasswordMessage=현재 비밀번호가 틀립니다.
|
incorrectPasswordMessage=현재 비밀번호가 틀립니다.
|
||||||
usernameExistsMessage=새 사용자명이 이미 존재합니다.
|
usernameExistsMessage=새 사용자명이 이미 존재합니다.
|
||||||
invalidUsernameMessage=잘못된 사용자 이름입니다. 사용자 이름에는 문자, 숫자 및 다음 특수 문자(@._+-)만 포함할 수 있거나 유효한 이메일 주소여야 합니다.
|
invalidUsernameMessage=잘못된 사용자 이름입니다. 사용자 이름에는 문자, 숫자 및 다음 특수 문자(@._+-)만 포함할 수 있거나 유효한 이메일 주소여야 합니다.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=현재 로그인한 사용자를 삭제할 수 없습니다.
|
deleteCurrentUserMessage=현재 로그인한 사용자를 삭제할 수 없습니다.
|
||||||
deleteUsernameExistsMessage=사용자 이름이 존재하지 않으며 삭제할 수 없습니다.
|
deleteUsernameExistsMessage=사용자 이름이 존재하지 않으며 삭제할 수 없습니다.
|
||||||
downgradeCurrentUserMessage=현재 사용자의 역할을 다운그레이드할 수 없습니다
|
downgradeCurrentUserMessage=현재 사용자의 역할을 다운그레이드할 수 없습니다
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=현재 사용자의 역할을 다운그레이드할 수 없습니다. 따라서 현재 사용자는 표시되지 않습니다.
|
downgradeCurrentUserLongMessage=현재 사용자의 역할을 다운그레이드할 수 없습니다. 따라서 현재 사용자는 표시되지 않습니다.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=사용자
|
|||||||
adminUserSettings.addUser=새 사용자 추가
|
adminUserSettings.addUser=새 사용자 추가
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=사용자 이름은 문자, 숫자, 특수 문자 @._+-만 포함할 수 있으며 유효한 이메일 주소여야 합니다.
|
adminUserSettings.usernameInfo=사용자 이름은 문자, 숫자, 특수 문자 @._+-만 포함할 수 있으며 유효한 이메일 주소여야 합니다.
|
||||||
adminUserSettings.roles=역할
|
adminUserSettings.roles=역할
|
||||||
adminUserSettings.role=역할
|
adminUserSettings.role=역할
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=다음 로그인 때 사용자명과 비밀번호
|
|||||||
adminUserSettings.submit=사용자 저장
|
adminUserSettings.submit=사용자 저장
|
||||||
adminUserSettings.changeUserRole=사용자의 역할 변경
|
adminUserSettings.changeUserRole=사용자의 역할 변경
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=책을 PDF로
|
|||||||
home.BookToPDF.desc=구경을 사용하여 책/만화 형식을 PDF로 변환
|
home.BookToPDF.desc=구경을 사용하여 책/만화 형식을 PDF로 변환
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=계정이 잠겼습니다.
|
|||||||
login.signinTitle=로그인해 주세요.
|
login.signinTitle=로그인해 주세요.
|
||||||
login.ssoSignIn=싱글사인온을 통한 로그인
|
login.ssoSignIn=싱글사인온을 통한 로그인
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 사용자 자동 생성 비활성화됨
|
login.oauth2AutoCreateDisabled=OAUTH2 사용자 자동 생성 비활성화됨
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=세로 간격 (각 워터마크 사이의 세로 공간):
|
|||||||
watermark.selectText.7=투명도 (0% - 100%):
|
watermark.selectText.7=투명도 (0% - 100%):
|
||||||
watermark.selectText.8=워터마크 유형:
|
watermark.selectText.8=워터마크 유형:
|
||||||
watermark.selectText.9=워터마크 이미지:
|
watermark.selectText.9=워터마크 이미지:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=워터마크 추가
|
watermark.submit=워터마크 추가
|
||||||
watermark.type.1=텍스트
|
watermark.type.1=텍스트
|
||||||
watermark.type.2=이미지
|
watermark.type.2=이미지
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=스택 추적 복사
|
|||||||
error.githubSubmit=GitHub - 티켓 제출
|
error.githubSubmit=GitHub - 티켓 제출
|
||||||
error.discordSubmit=Discord - 문의 게시
|
error.discordSubmit=Discord - 문의 게시
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Gebruiker niet gevonden.
|
|||||||
incorrectPasswordMessage=Huidige wachtwoord is onjuist.
|
incorrectPasswordMessage=Huidige wachtwoord is onjuist.
|
||||||
usernameExistsMessage=Nieuwe gebruikersnaam bestaat al.
|
usernameExistsMessage=Nieuwe gebruikersnaam bestaat al.
|
||||||
invalidUsernameMessage=Ongeldige gebruikersnaam, gebruikersnaam kan alleen letters, nummers en de volgende speciale tekens @._+- bevatten of moet een geldig emailadres zijn.
|
invalidUsernameMessage=Ongeldige gebruikersnaam, gebruikersnaam kan alleen letters, nummers en de volgende speciale tekens @._+- bevatten of moet een geldig emailadres zijn.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=Nieuw wachtwoord en bevestig wachtwoord moeten overeenkomen.
|
confirmPasswordErrorMessage=Nieuw wachtwoord en bevestig wachtwoord moeten overeenkomen.
|
||||||
deleteCurrentUserMessage=Kan niet een momenteel ingelogde gebruiker verwijderen.
|
deleteCurrentUserMessage=Kan niet een momenteel ingelogde gebruiker verwijderen.
|
||||||
deleteUsernameExistsMessage=De gebruikersnaam bestaat niet en kan niet verwijderd worden.
|
deleteUsernameExistsMessage=De gebruikersnaam bestaat niet en kan niet verwijderd worden.
|
||||||
downgradeCurrentUserMessage=Kan de rol van de huidige gebruiker niet downgraden
|
downgradeCurrentUserMessage=Kan de rol van de huidige gebruiker niet downgraden
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Kan de rol van de huidige gebruiker niet downgraden. Huidige gebruiker wordt dus niet weergegeven.
|
downgradeCurrentUserLongMessage=Kan de rol van de huidige gebruiker niet downgraden. Huidige gebruiker wordt dus niet weergegeven.
|
||||||
userAlreadyExistsOAuthMessage=De gebruiker bestaat al als een OAuth2 gebruiker.
|
userAlreadyExistsOAuthMessage=De gebruiker bestaat al als een OAuth2 gebruiker.
|
||||||
userAlreadyExistsWebMessage=De gebruiker bestaat al als een web gebruiker.
|
userAlreadyExistsWebMessage=De gebruiker bestaat al als een web gebruiker.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Gebruiker
|
|||||||
adminUserSettings.addUser=Voeg nieuwe gebruiker toe
|
adminUserSettings.addUser=Voeg nieuwe gebruiker toe
|
||||||
adminUserSettings.deleteUser=Verwijder gebruiker
|
adminUserSettings.deleteUser=Verwijder gebruiker
|
||||||
adminUserSettings.confirmDeleteUser=Moet deze gebruiker verwijderd worden?
|
adminUserSettings.confirmDeleteUser=Moet deze gebruiker verwijderd worden?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Gebruikersnaam kan alleen letters, nummers en de volgende speciale tekens @._+- bevatten of moet een geldig emailadres zijn.
|
adminUserSettings.usernameInfo=Gebruikersnaam kan alleen letters, nummers en de volgende speciale tekens @._+- bevatten of moet een geldig emailadres zijn.
|
||||||
adminUserSettings.roles=Rollen
|
adminUserSettings.roles=Rollen
|
||||||
adminUserSettings.role=Rol
|
adminUserSettings.role=Rol
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Forceer gebruiker om gebruikersnaam/wachtwoord te
|
|||||||
adminUserSettings.submit=Gebruiker opslaan
|
adminUserSettings.submit=Gebruiker opslaan
|
||||||
adminUserSettings.changeUserRole=De rol van de gebruiker wijzigen
|
adminUserSettings.changeUserRole=De rol van de gebruiker wijzigen
|
||||||
adminUserSettings.authenticated=Geauthenticeerd
|
adminUserSettings.authenticated=Geauthenticeerd
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Boek naar PDF
|
|||||||
home.BookToPDF.desc=Converteert boek-/stripformaat naar PDF met gebruik van Calibre
|
home.BookToPDF.desc=Converteert boek-/stripformaat naar PDF met gebruik van Calibre
|
||||||
BookToPDF.tags=Boek,Strip,Comic,Calibre,Converteren,manga,amazon,kindle
|
BookToPDF.tags=Boek,Strip,Comic,Calibre,Converteren,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Je account is geblokkeerd.
|
|||||||
login.signinTitle=Gelieve in te loggen
|
login.signinTitle=Gelieve in te loggen
|
||||||
login.ssoSignIn=Inloggen via Single Sign-on
|
login.ssoSignIn=Inloggen via Single Sign-on
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Automatisch aanmaken gebruiker uitgeschakeld
|
login.oauth2AutoCreateDisabled=OAUTH2 Automatisch aanmaken gebruiker uitgeschakeld
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Autorisatieverzoek niet gevonden
|
login.oauth2RequestNotFound=Autorisatieverzoek niet gevonden
|
||||||
login.oauth2InvalidUserInfoResponse=Ongeldige reactie op gebruikersinfo
|
login.oauth2InvalidUserInfoResponse=Ongeldige reactie op gebruikersinfo
|
||||||
login.oauth2invalidRequest=Ongeldig verzoek
|
login.oauth2invalidRequest=Ongeldig verzoek
|
||||||
login.oauth2AccessDenied=Toegang geweigerd
|
login.oauth2AccessDenied=Toegang geweigerd
|
||||||
login.oauth2InvalidTokenResponse=Ongeldige tokenreactie
|
login.oauth2InvalidTokenResponse=Ongeldige tokenreactie
|
||||||
login.oauth2InvalidIdToken=Ongeldige ID token
|
login.oauth2InvalidIdToken=Ongeldige ID token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=hoogteSpacer (Ruimte tussen elk watermerk verticaal):
|
|||||||
watermark.selectText.7=Transparantie (0% - 100%):
|
watermark.selectText.7=Transparantie (0% - 100%):
|
||||||
watermark.selectText.8=Type watermerk:
|
watermark.selectText.8=Type watermerk:
|
||||||
watermark.selectText.9=Watermerk afbeelding:
|
watermark.selectText.9=Watermerk afbeelding:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Watermerk toevoegen
|
watermark.submit=Watermerk toevoegen
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Kopieer tracering
|
|||||||
error.githubSubmit=GitHub - Dien een ticket in
|
error.githubSubmit=GitHub - Dien een ticket in
|
||||||
error.discordSubmit=Discord - Maak een support post
|
error.discordSubmit=Discord - Maak een support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Bruker ikke funnet.
|
|||||||
incorrectPasswordMessage=Nåværende passord er feil.
|
incorrectPasswordMessage=Nåværende passord er feil.
|
||||||
usernameExistsMessage=Det nye brukernavnet eksisterer allerede.
|
usernameExistsMessage=Det nye brukernavnet eksisterer allerede.
|
||||||
invalidUsernameMessage=Ugyldig brukernavn, brukernavnet kan bare inneholde bokstaver, tall og følgende spesialtegn @._+- eller må være en gyldig e-postadresse.
|
invalidUsernameMessage=Ugyldig brukernavn, brukernavnet kan bare inneholde bokstaver, tall og følgende spesialtegn @._+- eller må være en gyldig e-postadresse.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=Nytt passord og Bekreft nytt passord må være like.
|
confirmPasswordErrorMessage=Nytt passord og Bekreft nytt passord må være like.
|
||||||
deleteCurrentUserMessage=Kan ikke slette den innloggede brukeren.
|
deleteCurrentUserMessage=Kan ikke slette den innloggede brukeren.
|
||||||
deleteUsernameExistsMessage=Brukernavnet eksisterer ikke og kan ikke slettes.
|
deleteUsernameExistsMessage=Brukernavnet eksisterer ikke og kan ikke slettes.
|
||||||
downgradeCurrentUserMessage=Kan ikke nedgradere den innloggede brukerens rolle.
|
downgradeCurrentUserMessage=Kan ikke nedgradere den innloggede brukerens rolle.
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Kan ikke nedgradere den innloggede brukerens rolle. Derfor vil ikke den innloggede brukeren bli vist.
|
downgradeCurrentUserLongMessage=Kan ikke nedgradere den innloggede brukerens rolle. Derfor vil ikke den innloggede brukeren bli vist.
|
||||||
userAlreadyExistsOAuthMessage=Brukeren eksisterer allerede som en OAuth2-bruker.
|
userAlreadyExistsOAuthMessage=Brukeren eksisterer allerede som en OAuth2-bruker.
|
||||||
userAlreadyExistsWebMessage=Brukeren eksisterer allerede som en web-bruker.
|
userAlreadyExistsWebMessage=Brukeren eksisterer allerede som en web-bruker.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Bruker
|
|||||||
adminUserSettings.addUser=Legg til Ny Bruker
|
adminUserSettings.addUser=Legg til Ny Bruker
|
||||||
adminUserSettings.deleteUser=Slett Bruker
|
adminUserSettings.deleteUser=Slett Bruker
|
||||||
adminUserSettings.confirmDeleteUser=Skal brukeren slettes?
|
adminUserSettings.confirmDeleteUser=Skal brukeren slettes?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Brukernavn kan bare inneholde bokstaver, tall og følgende spesialtegn @._+- eller må være en gyldig e-postadresse.
|
adminUserSettings.usernameInfo=Brukernavn kan bare inneholde bokstaver, tall og følgende spesialtegn @._+- eller må være en gyldig e-postadresse.
|
||||||
adminUserSettings.roles=Roller
|
adminUserSettings.roles=Roller
|
||||||
adminUserSettings.role=Rolle
|
adminUserSettings.role=Rolle
|
||||||
@@ -193,30 +190,23 @@ adminUserSettings.forceChange=Tving bruker til å endre passord ved innlogging
|
|||||||
adminUserSettings.submit=Lagre Bruker
|
adminUserSettings.submit=Lagre Bruker
|
||||||
adminUserSettings.changeUserRole=Endre Brukerens Rolle
|
adminUserSettings.changeUserRole=Endre Brukerens Rolle
|
||||||
adminUserSettings.authenticated=Autentisert
|
adminUserSettings.authenticated=Autentisert
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Eksport
|
database.title=Database Import/Export
|
||||||
database.header=Database Import/Eksport
|
database.header=Database Import/Export
|
||||||
database.fileName=Fil navn
|
database.fileName=File Name
|
||||||
database.creationDate=Opprettelsesdato
|
database.creationDate=Creation Date
|
||||||
database.fileSize=Filstørrelse
|
database.fileSize=File Size
|
||||||
database.deleteBackupFile=Slett sikkerhetskopifil
|
database.deleteBackupFile=Delete Backup File
|
||||||
database.importBackupFile=Importer sikkerhetskopifil
|
database.importBackupFile=Import Backup File
|
||||||
database.downloadBackupFile=Last ned sikkerhetskopifil
|
database.downloadBackupFile=Download Backup File
|
||||||
database.info_1=Når du importerer data, er det avgjørende å sikre riktig struktur. Hvis du er usikker på hva du gjør, bør du søke råd og støtte fra en profesjonell. En feil i strukturen kan føre til applikasjonsfeil, inkludert fullstendig manglende evne til å kjøre applikasjonen.
|
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||||
database.info_2=Filnavnet spiller ingen rolle ved opplasting. Det vil bli omdøpt etterpå for å følge formatet backup_user_yyyyMMddHHmm.sql, for å sikre en konsekvent navnekonvensjon.
|
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||||
database.submit=Importer sikkerhetskopi
|
database.submit=Import Backup
|
||||||
database.importIntoDatabaseSuccessed=Import til database vellykket
|
database.importIntoDatabaseSuccessed=Import into database successed
|
||||||
database.fileNotFound=Fil ikke funnet
|
database.fileNotFound=File not Found
|
||||||
database.fileNullOrEmpty=Fil må ikke være tom eller null
|
database.fileNullOrEmpty=File must not be null or empty
|
||||||
database.failedImportFile=Import av fil mislyktes
|
database.failedImportFile=Failed Import File
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# HOME-PAGE #
|
# HOME-PAGE #
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Bok til PDF
|
|||||||
home.BookToPDF.desc=Konverter bøker/tegneserier til PDF ved hjelp av calibre
|
home.BookToPDF.desc=Konverter bøker/tegneserier til PDF ved hjelp av calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Kontoen din har blitt låst.
|
|||||||
login.signinTitle=Vennligst logg inn
|
login.signinTitle=Vennligst logg inn
|
||||||
login.ssoSignIn=Logg inn via Enkel Pålogging
|
login.ssoSignIn=Logg inn via Enkel Pålogging
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Auto-Opretting av bruker deaktivert
|
login.oauth2AutoCreateDisabled=OAUTH2 Auto-Opretting av bruker deaktivert
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Autentiseringsforespørsel ikke funnet
|
login.oauth2RequestNotFound=Autentiseringsforespørsel ikke funnet
|
||||||
login.oauth2InvalidUserInfoResponse=Ugyldig brukerinforespons
|
login.oauth2InvalidUserInfoResponse=Ugyldig brukerinforespons
|
||||||
login.oauth2invalidRequest=Ugyldig forespørsel
|
login.oauth2invalidRequest=Ugyldig forespørsel
|
||||||
login.oauth2AccessDenied=Tilgang nektet
|
login.oauth2AccessDenied=Tilgang nektet
|
||||||
login.oauth2InvalidTokenResponse=Ugyldig tokenrespons
|
login.oauth2InvalidTokenResponse=Ugyldig tokenrespons
|
||||||
login.oauth2InvalidIdToken=Ugyldig Id Token
|
login.oauth2InvalidIdToken=Ugyldig Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -722,8 +706,8 @@ removeAnnotations.submit=Fjern
|
|||||||
#compare
|
#compare
|
||||||
compare.title=Sammenlign
|
compare.title=Sammenlign
|
||||||
compare.header=Sammenlign PDF-er
|
compare.header=Sammenlign PDF-er
|
||||||
compare.highlightColor.1=Uthevingsfarge 1:
|
compare.highlightColor.1=Highlight Color 1:
|
||||||
compare.highlightColor.2=Uthevingsfarge 2:
|
compare.highlightColor.2=Highlight Color 2:
|
||||||
compare.document.1=Dokument 1
|
compare.document.1=Dokument 1
|
||||||
compare.document.2=Dokument 2
|
compare.document.2=Dokument 2
|
||||||
compare.submit=Sammenlign
|
compare.submit=Sammenlign
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=Høydeavstand (Avstand mellom hvert vannmerke vertikalt):
|
|||||||
watermark.selectText.7=Opasitet (0% - 100%):
|
watermark.selectText.7=Opasitet (0% - 100%):
|
||||||
watermark.selectText.8=Vannmerketype:
|
watermark.selectText.8=Vannmerketype:
|
||||||
watermark.selectText.9=Vannmerkebilde:
|
watermark.selectText.9=Vannmerkebilde:
|
||||||
watermark.selectText.10=Konverter PDF til PDF-Bilde
|
|
||||||
watermark.submit=Legg til vannmerke
|
watermark.submit=Legg til vannmerke
|
||||||
watermark.type.1=Tekst
|
watermark.type.1=Tekst
|
||||||
watermark.type.2=Bilde
|
watermark.type.2=Bilde
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Kopier stakksporing
|
|||||||
error.githubSubmit=GitHub - Send inn en billett
|
error.githubSubmit=GitHub - Send inn en billett
|
||||||
error.discordSubmit=Discord - Send inn støtteinnlegg
|
error.discordSubmit=Discord - Send inn støtteinnlegg
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -38,13 +38,13 @@ delete=usuń
|
|||||||
username=nazwa użytkownika
|
username=nazwa użytkownika
|
||||||
password=hasło
|
password=hasło
|
||||||
welcome=Witaj
|
welcome=Witaj
|
||||||
property=własność
|
property=własnośc
|
||||||
black=czarny
|
black=czarny
|
||||||
white=biały
|
white=biały
|
||||||
red=czerwony
|
red=czerwony
|
||||||
green=zielony
|
green=zielony
|
||||||
blue=niebieski
|
blue=niebieski
|
||||||
custom=Własny...
|
custom=Własny
|
||||||
WorkInProgess=Praca w toku, proszę zgłaszać błędy!
|
WorkInProgess=Praca w toku, proszę zgłaszać błędy!
|
||||||
poweredBy=Zasilany
|
poweredBy=Zasilany
|
||||||
yes=tak
|
yes=tak
|
||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Brak użytkownika.
|
|||||||
incorrectPasswordMessage=Nieprawidłowe hasło.
|
incorrectPasswordMessage=Nieprawidłowe hasło.
|
||||||
usernameExistsMessage=Taki uzytkownik już istnieje.
|
usernameExistsMessage=Taki uzytkownik już istnieje.
|
||||||
invalidUsernameMessage=Niewłaściwa nazwa użytkownika - musi zawierać litery, cyfry i @._+- LUB być adresem email.
|
invalidUsernameMessage=Niewłaściwa nazwa użytkownika - musi zawierać litery, cyfry i @._+- LUB być adresem email.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=Wpisz poprawnie hasło w OBA pola.
|
confirmPasswordErrorMessage=Wpisz poprawnie hasło w OBA pola.
|
||||||
deleteCurrentUserMessage=Nie można usunąć zalogowanego użytkownika
|
deleteCurrentUserMessage=Nie można usunąć zalogowanego użytkownika
|
||||||
deleteUsernameExistsMessage=Nie można usunąć zalogowanego użytkownika
|
deleteUsernameExistsMessage=Nie można usunąć zalogowanego użytkownika
|
||||||
downgradeCurrentUserMessage=Nie można obniżyć roli bieżącego użytkownika
|
downgradeCurrentUserMessage=Nie można obniżyć roli bieżącego użytkownika
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Nie można obniżyć roli bieżącego użytkownika. W związku z tym bieżący użytkownik nie zostanie wyświetlony.
|
downgradeCurrentUserLongMessage=Nie można obniżyć roli bieżącego użytkownika. W związku z tym bieżący użytkownik nie zostanie wyświetlony.
|
||||||
userAlreadyExistsOAuthMessage=Takie konto użytkownika istnieje - stworzone za pomocą OAuth2.
|
userAlreadyExistsOAuthMessage=Takie konto użytkownika istnieje - stworzone za pomocą OAuth2.
|
||||||
userAlreadyExistsWebMessage=Takie konto użytkownika istnieje - stworzone za pomocą przeglądarki.
|
userAlreadyExistsWebMessage=Takie konto użytkownika istnieje - stworzone za pomocą przeglądarki.
|
||||||
@@ -95,7 +93,7 @@ pipeline.deletePrompt=Na pewno chcesz skasować automatyzacje
|
|||||||
######################
|
######################
|
||||||
pipelineOptions.header=Konfiguracja automatyzacji
|
pipelineOptions.header=Konfiguracja automatyzacji
|
||||||
pipelineOptions.pipelineNameLabel=Nazwa automatyzacji
|
pipelineOptions.pipelineNameLabel=Nazwa automatyzacji
|
||||||
pipelineOptions.saveSettings=Zapisz ustawienia operacji
|
pipelineOptions.saveSettings=Zapisz automatyzacje
|
||||||
pipelineOptions.pipelineNamePrompt=Podaj nazwę automatyzacji
|
pipelineOptions.pipelineNamePrompt=Podaj nazwę automatyzacji
|
||||||
pipelineOptions.selectOperation=Wybierz operację
|
pipelineOptions.selectOperation=Wybierz operację
|
||||||
pipelineOptions.addOperationButton=Dodaj operację
|
pipelineOptions.addOperationButton=Dodaj operację
|
||||||
@@ -127,7 +125,7 @@ navbar.sections.edit=Podgląd i edycja
|
|||||||
#############
|
#############
|
||||||
settings.title=Ustawienia
|
settings.title=Ustawienia
|
||||||
settings.update=Dostępna aktualizacja
|
settings.update=Dostępna aktualizacja
|
||||||
settings.updateAvailable=Wersja {0} jest obecenia zainstalowana, dostępna jest nowa wersja ({1}).
|
settings.updateAvailable=Wersja {0} jest obecenia zainstalowana , dostępna jest nowa wersja({1}).
|
||||||
settings.appVersion=Wersja aplikacji:
|
settings.appVersion=Wersja aplikacji:
|
||||||
settings.downloadOption.title=Wybierz opcję pobierania (w przypadku pobierania pojedynczych plików innych niż ZIP):
|
settings.downloadOption.title=Wybierz opcję pobierania (w przypadku pobierania pojedynczych plików innych niż ZIP):
|
||||||
settings.downloadOption.1=Otwórz w tym samym oknie
|
settings.downloadOption.1=Otwórz w tym samym oknie
|
||||||
@@ -154,7 +152,7 @@ changeCreds.submit=Zapisz zmiany
|
|||||||
account.title=Ustawienia konta
|
account.title=Ustawienia konta
|
||||||
account.accountSettings=Ustawienia konta
|
account.accountSettings=Ustawienia konta
|
||||||
account.adminSettings=Admin - kontrola kont
|
account.adminSettings=Admin - kontrola kont
|
||||||
account.userControlSettings=Kontrola praw użytkownika
|
account.userControlSettings=Kontrola praw uzytkownika
|
||||||
account.changeUsername=Zmień nazwę użytkownika
|
account.changeUsername=Zmień nazwę użytkownika
|
||||||
account.newUsername=Nowa nazwa użytkownika
|
account.newUsername=Nowa nazwa użytkownika
|
||||||
account.password=Potwierdź hasło
|
account.password=Potwierdź hasło
|
||||||
@@ -174,49 +172,41 @@ account.syncToAccount=Wczytaj dane konta z przeglądarki
|
|||||||
|
|
||||||
adminUserSettings.title=Ustawienia konta użytkownika
|
adminUserSettings.title=Ustawienia konta użytkownika
|
||||||
adminUserSettings.header=Ustawienia praw administratora
|
adminUserSettings.header=Ustawienia praw administratora
|
||||||
adminUserSettings.admin=Administrator
|
adminUserSettings.admin=administrator
|
||||||
adminUserSettings.user=Użytkownik
|
adminUserSettings.user=użytkownik
|
||||||
adminUserSettings.addUser=Dodaj nowego użytkownika
|
adminUserSettings.addUser=dodaj nowego użytkownika
|
||||||
adminUserSettings.deleteUser=Usuń użytkownika
|
adminUserSettings.deleteUser=usuń użytkownika
|
||||||
adminUserSettings.confirmDeleteUser=Czy na pewno usunąć użytkownika?
|
adminUserSettings.confirmDeleteUser=Czy na pewno usunąć użytkownika ?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Niewłaściwa nazwa użytkownika - musi zawierać litery, cyfry i @._+- LUB być adresem email.
|
adminUserSettings.usernameInfo=Niewłaściwa nazwa użytkownika - musi zawierać litery, cyfry i @._+- LUB być adresem email.
|
||||||
adminUserSettings.roles=Role
|
adminUserSettings.roles=Role
|
||||||
adminUserSettings.role=Rola
|
adminUserSettings.role=Rola
|
||||||
adminUserSettings.actions=Akcje
|
adminUserSettings.actions=Akcje
|
||||||
adminUserSettings.apiUser=Ograniczony Użytkownik API
|
adminUserSettings.apiUser=Ograniczony Użytkownik API
|
||||||
adminUserSettings.extraApiUser=Dodatkowy ograniczony Użytkownik API
|
adminUserSettings.extraApiUser=Dodatkowy ograniczony Użytkownik API
|
||||||
adminUserSettings.webOnlyUser=Użytkownik tylko WEB
|
adminUserSettings.webOnlyUser=Uzytkownik tylko WEB
|
||||||
adminUserSettings.demoUser=Użytkownik DEMO
|
adminUserSettings.demoUser=Użytkownik DEMO
|
||||||
adminUserSettings.internalApiUser=Wewnętrzny użytkownik API
|
adminUserSettings.internalApiUser=Wenętrzny użytkownik API
|
||||||
adminUserSettings.forceChange=Wymuś zmianę hasło po zalogowaniu
|
adminUserSettings.forceChange=Wymuś zmianę hasło po zalogowaniu
|
||||||
adminUserSettings.submit=Zapisz użytkownika
|
adminUserSettings.submit=Zapisz użytkownika
|
||||||
adminUserSettings.changeUserRole=Zmień rolę użytkownika
|
adminUserSettings.changeUserRole=Zmień rolę użytkownika
|
||||||
adminUserSettings.authenticated=Zalogowany
|
adminUserSettings.authenticated=Zalogowany
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Import/Eksport bazy danych
|
database.title=Database Import/Export
|
||||||
database.header=Import/Eksport bazy danych
|
database.header=Database Import/Export
|
||||||
database.fileName=Nazwa pliku
|
database.fileName=File Name
|
||||||
database.creationDate=Data utworzenia
|
database.creationDate=Creation Date
|
||||||
database.fileSize=Rozmiar pliku
|
database.fileSize=File Size
|
||||||
database.deleteBackupFile=Usuń plik kopii zapasowej
|
database.deleteBackupFile=Delete Backup File
|
||||||
database.importBackupFile=Importuj plik kopii zapasowej
|
database.importBackupFile=Import Backup File
|
||||||
database.downloadBackupFile=Pobierz plik kopii zapasowej
|
database.downloadBackupFile=Download Backup File
|
||||||
database.info_1=Podczas importowania danych, ważne jest, aby upewnić się, że struktura jest poprawna. Jeśli nie jesteś pewien, co robisz, skontaktuj się z profesjonalistą. Błąd w strukturze może spowodować awarie aplikacji, aż do całkowitej niemożności jej uruchomienia.
|
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||||
database.info_2=Nazwa pliku nie ma znaczenia podczas przesyłania. Zostanie on później przemianowany, aby przestrzegać formatu backup_user_yyyyMMddHHmm.sql, zapewniając spójną konwencję nazewnictwa.
|
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||||
database.submit=Importuj kopię zapasową
|
database.submit=Import Backup
|
||||||
database.importIntoDatabaseSuccessed=Import do bazy danych zakończony sukcesem
|
database.importIntoDatabaseSuccessed=Import into database successed
|
||||||
database.fileNotFound=Plik nie znaleziony
|
database.fileNotFound=File not Found
|
||||||
database.fileNullOrEmpty=Plik nie może być pusty
|
database.fileNullOrEmpty=File must not be null or empty
|
||||||
database.failedImportFile=Nie udało się zaimportować pliku
|
database.failedImportFile=Failed Import File
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# HOME-PAGE #
|
# HOME-PAGE #
|
||||||
@@ -226,8 +216,8 @@ home.searchBar=Szukaj opcji ...
|
|||||||
|
|
||||||
|
|
||||||
home.viewPdf.title=Podejrzyj PDF
|
home.viewPdf.title=Podejrzyj PDF
|
||||||
home.viewPdf.desc=Wyświetl, adnotuj, dodaj tekst lub obrazy
|
home.viewPdf.desc=View, annotate, add text or images
|
||||||
viewPdf.tags=wyświetl,czytaj,adnotuj,tekst,obraz
|
viewPdf.tags=view,read,annotate,text,image
|
||||||
|
|
||||||
home.multiTool.title=Multi narzędzie PDF
|
home.multiTool.title=Multi narzędzie PDF
|
||||||
home.multiTool.desc=Łącz, dziel, obracaj, zmieniaj kolejność i usuwaj strony
|
home.multiTool.desc=Łącz, dziel, obracaj, zmieniaj kolejność i usuwaj strony
|
||||||
@@ -260,7 +250,7 @@ pdfOrganiser.tags=duplex,even,odd,sort,move
|
|||||||
|
|
||||||
|
|
||||||
home.addImage.title=Dodaj obraz
|
home.addImage.title=Dodaj obraz
|
||||||
home.addImage.desc=Dodaje obraz w wybranym miejscu w dokumencie PDF
|
home.addImage.desc=Dodaje obraz w wybranym miejscu w dokumencie PDF (moduł w budowie)
|
||||||
addImage.tags=img,jpg,picture,photo
|
addImage.tags=img,jpg,picture,photo
|
||||||
|
|
||||||
home.watermark.title=Dodaj znak wodny
|
home.watermark.title=Dodaj znak wodny
|
||||||
@@ -291,7 +281,7 @@ compressPdfs.tags=squish,small,tiny
|
|||||||
|
|
||||||
home.changeMetadata.title=Zmień metadane
|
home.changeMetadata.title=Zmień metadane
|
||||||
home.changeMetadata.desc=Zmień/Usuń/Dodaj metadane w dokumencie PDF
|
home.changeMetadata.desc=Zmień/Usuń/Dodaj metadane w dokumencie PDF
|
||||||
changeMetadata.tags=Title,author,date,creation,time,publisher,producer,stats
|
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
|
||||||
|
|
||||||
home.fileToPDF.title=Konwertuj plik do PDF
|
home.fileToPDF.title=Konwertuj plik do PDF
|
||||||
home.fileToPDF.desc=Konwertuj dowolny plik do dokumentu PDF (DOCX, PNG, XLS, PPT, TXT i więcej)
|
home.fileToPDF.desc=Konwertuj dowolny plik do dokumentu PDF (DOCX, PNG, XLS, PPT, TXT i więcej)
|
||||||
@@ -314,7 +304,7 @@ home.PDFToWord.title=PDF na Word
|
|||||||
home.PDFToWord.desc=Konwertuj dokument PDF na formaty Word (DOC, DOCX i ODT)
|
home.PDFToWord.desc=Konwertuj dokument PDF na formaty Word (DOC, DOCX i ODT)
|
||||||
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
|
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
|
||||||
|
|
||||||
home.PDFToPresentation.title=PDF na Prezentację
|
home.PDFToPresentation.title=PDF na Prezentację
|
||||||
home.PDFToPresentation.desc=Konwertuj dokument PDF na formaty prezentacji (PPT, PPTX i ODP)
|
home.PDFToPresentation.desc=Konwertuj dokument PDF na formaty prezentacji (PPT, PPTX i ODP)
|
||||||
PDFToPresentation.tags=slides,show,office,microsoft
|
PDFToPresentation.tags=slides,show,office,microsoft
|
||||||
|
|
||||||
@@ -336,7 +326,7 @@ home.ScannerImageSplit.desc=Podziel na wiele zdjęć z jednego zdjęcia/PDF
|
|||||||
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
|
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
|
||||||
|
|
||||||
home.sign.title=Podpis
|
home.sign.title=Podpis
|
||||||
home.sign.desc=Dodaje podpis do dokumentu PDF za pomocą rysunku, tekstu lub obrazu
|
home.sign.desc=Dodaje podpis do dokument PDF za pomocą rysunku, tekstu lub obrazu
|
||||||
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
|
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
|
||||||
|
|
||||||
home.flatten.title=Spłaszcz
|
home.flatten.title=Spłaszcz
|
||||||
@@ -380,7 +370,7 @@ home.pipeline.desc=Wykonaj wiele akcji na dokumentach PDF, tworząc automatyzacj
|
|||||||
pipeline.tags=automate,sequence,scripted,batch-process
|
pipeline.tags=automate,sequence,scripted,batch-process
|
||||||
|
|
||||||
home.add-page-numbers.title=Dodaj numery stron
|
home.add-page-numbers.title=Dodaj numery stron
|
||||||
home.add-page-numbers.desc=Dodaj numery strony w dokumencie PDF w podanej lokalizacji
|
home.add-page-numbers.desc=Dodaj numbery strony w dokumencie PDF w podanej lokacji
|
||||||
add-page-numbers.tags=paginate,label,organize,index
|
add-page-numbers.tags=paginate,label,organize,index
|
||||||
|
|
||||||
home.auto-rename.title=Automatycznie zmień nazwę PDF
|
home.auto-rename.title=Automatycznie zmień nazwę PDF
|
||||||
@@ -392,7 +382,7 @@ home.adjust-contrast.desc=Zmień kolor/nasycenie/jasność w dokumencie PDF
|
|||||||
adjust-contrast.tags=color-correction,tune,modify,enhance
|
adjust-contrast.tags=color-correction,tune,modify,enhance
|
||||||
|
|
||||||
home.crop.title=Przytnij PDF
|
home.crop.title=Przytnij PDF
|
||||||
home.crop.desc=Przytnij dokument PDF w celu zmniejszenia rozmiaru
|
home.crop.desc=Przytnij dokument PDF w celu zmiejszenia rozmiaru
|
||||||
crop.tags=trim,shrink,edit,shape
|
crop.tags=trim,shrink,edit,shape
|
||||||
|
|
||||||
home.autoSplitPDF.title=Automatycznie podziel strony
|
home.autoSplitPDF.title=Automatycznie podziel strony
|
||||||
@@ -400,7 +390,7 @@ home.autoSplitPDF.desc=Automatycznie podziel dokument na strony
|
|||||||
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
|
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
|
||||||
|
|
||||||
home.sanitizePdf.title=Dezynfekcja
|
home.sanitizePdf.title=Dezynfekcja
|
||||||
home.sanitizePdf.desc=Usuń skrypt i inne elementy z dokumentu PDF
|
home.sanitizePdf.desc=Usuń skrupt i inne elementy z dokumentu PDF
|
||||||
sanitizePdf.tags=clean,secure,safe,remove-threats
|
sanitizePdf.tags=clean,secure,safe,remove-threats
|
||||||
|
|
||||||
home.URLToPDF.title=Strona WWW do PDFa
|
home.URLToPDF.title=Strona WWW do PDFa
|
||||||
@@ -437,16 +427,16 @@ home.showJS.desc=Znajduje i pokazuje załączony kod JS w dokumencie PDF
|
|||||||
showJS.tags=JS
|
showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Zaciemnij
|
home.autoRedact.title=Zaciemnij
|
||||||
home.autoRedact.desc=Zaciemnia dokument PDF bazując na podanej wartości
|
home.autoRedact.desc=Zaciemnia dokument PDF bazująć na podanej wartości
|
||||||
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF do CSV
|
home.tableExtraxt.title=PDF do CSV
|
||||||
home.tableExtraxt.desc=Konwertuje tabele z PDF do pliku CSV
|
home.tableExtraxt.desc=Konwertuje table z PDF do pliku CSV
|
||||||
tableExtraxt.tags=CSV,Table Extraction,extract,convert
|
tableExtraxt.tags=CSV,Table Extraction,extract,convert
|
||||||
|
|
||||||
|
|
||||||
home.autoSizeSplitPDF.title=Podziel (Rozmiar/Ilość stron)
|
home.autoSizeSplitPDF.title=Podziel (Rozmiar/Ilość stron)
|
||||||
home.autoSizeSplitPDF.desc=Rozdziela dokument PDF na wiele dokumentów bazując na podanym rozmiarze, ilości stron bądź ilości dokumentów
|
home.autoSizeSplitPDF.desc=Rozdziela dokument PDF na wiele dokumentów bazujać na podanym rozmiarze, ilości stron bądź ilości dokumentów
|
||||||
autoSizeSplitPDF.tags=pdf,split,document,organization
|
autoSizeSplitPDF.tags=pdf,split,document,organization
|
||||||
|
|
||||||
|
|
||||||
@@ -459,7 +449,7 @@ home.split-by-sections.desc=Podziel strony PDF w mniejsze sekcje
|
|||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
home.AddStampRequest.title=Dodaj pieczęć
|
home.AddStampRequest.title=Dodaj pieczęć
|
||||||
home.AddStampRequest.desc=Dodaj pieczęć tekstową/obrazową w wyznaczonej lokalizacji dokumentu
|
home.AddStampRequest.desc=Dodaj pieczęć tesktową/obrazową w wyznaczonej lokalizacji dokumentu
|
||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=eBook do PDF
|
|||||||
home.BookToPDF.desc=Zapisuje ebooka do PDF za pomocą Calibre
|
home.BookToPDF.desc=Zapisuje ebooka do PDF za pomocą Calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Konto jest zablokowane
|
|||||||
login.signinTitle=Zaloguj się
|
login.signinTitle=Zaloguj się
|
||||||
login.ssoSignIn=Zaloguj się za pomocą logowania jednokrotnego
|
login.ssoSignIn=Zaloguj się za pomocą logowania jednokrotnego
|
||||||
login.oauth2AutoCreateDisabled=Wyłączono automatyczne tworzenie użytkownika OAUTH2
|
login.oauth2AutoCreateDisabled=Wyłączono automatyczne tworzenie użytkownika OAUTH2
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Błąd logowania OAuth2
|
login.oauth2RequestNotFound=Błąd logowania OAuth2
|
||||||
login.oauth2InvalidUserInfoResponse=Niewłaściwe dane logowania
|
login.oauth2InvalidUserInfoResponse=Niewłaściwe dane logowania
|
||||||
login.oauth2invalidRequest=Nieprawidłowe żądanie
|
login.oauth2invalidRequest=Nieprawidłowe żądanie
|
||||||
login.oauth2AccessDenied=Brak dostępu
|
login.oauth2AccessDenied=Brak dostępu
|
||||||
login.oauth2InvalidTokenResponse=Nieprawidłowa odpowiedź na token
|
login.oauth2InvalidTokenResponse=Nieprawidłowy odpowiedź na token
|
||||||
login.oauth2InvalidIdToken=Nieprawidłowa wartość tokenu
|
login.oauth2InvalidIdToken=Nieprawidłowa wartośc tokenu
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -585,7 +569,7 @@ AddStampRequest.stampType=Typ pieczęci
|
|||||||
AddStampRequest.stampText=Tekst w pieczęci
|
AddStampRequest.stampText=Tekst w pieczęci
|
||||||
AddStampRequest.stampImage=Obraz w pieczęci
|
AddStampRequest.stampImage=Obraz w pieczęci
|
||||||
AddStampRequest.alphabet=Alfabet
|
AddStampRequest.alphabet=Alfabet
|
||||||
AddStampRequest.fontSize=Rozmiar czcionki/obrazu
|
AddStampRequest.fontSize=Rozmiar Czcionki/Obrazu
|
||||||
AddStampRequest.rotation=Obrót
|
AddStampRequest.rotation=Obrót
|
||||||
AddStampRequest.opacity=Przeźroczystość
|
AddStampRequest.opacity=Przeźroczystość
|
||||||
AddStampRequest.position=Pozycja
|
AddStampRequest.position=Pozycja
|
||||||
@@ -600,7 +584,7 @@ AddStampRequest.submit=Wyślij
|
|||||||
sanitizePDF.title=Dezynfekuj PDF
|
sanitizePDF.title=Dezynfekuj PDF
|
||||||
sanitizePDF.header=Dezynfekuj dokument PDF
|
sanitizePDF.header=Dezynfekuj dokument PDF
|
||||||
sanitizePDF.selectText.1=Usuń elementy JavaScript
|
sanitizePDF.selectText.1=Usuń elementy JavaScript
|
||||||
sanitizePDF.selectText.2=Usuń załączone pliki
|
sanitizePDF.selectText.2=Usuń załącznone pliki
|
||||||
sanitizePDF.selectText.3=Usuń metadane
|
sanitizePDF.selectText.3=Usuń metadane
|
||||||
sanitizePDF.selectText.4=Usuń linki
|
sanitizePDF.selectText.4=Usuń linki
|
||||||
sanitizePDF.selectText.5=Usuń czcionki
|
sanitizePDF.selectText.5=Usuń czcionki
|
||||||
@@ -617,23 +601,23 @@ addPageNumbers.selectText.4=Numer początkowy
|
|||||||
addPageNumbers.selectText.5=Ilość stron do ponumerowania
|
addPageNumbers.selectText.5=Ilość stron do ponumerowania
|
||||||
addPageNumbers.selectText.6=Tekst własny
|
addPageNumbers.selectText.6=Tekst własny
|
||||||
addPageNumbers.customTextDesc=Tekst własny
|
addPageNumbers.customTextDesc=Tekst własny
|
||||||
addPageNumbers.numberPagesDesc=Strony do numeracji, wszystkie (all), 1-5, 2, 5, 9
|
addPageNumbers.numberPagesDesc=Strony do numeracji, wszystkie (all),1-5, 2,5,9
|
||||||
addPageNumbers.customNumberDesc=Domyślnie do {n}, również akceptuje 'Strona {n} z {total},Teskt-{n},'{filename}-{n}
|
addPageNumbers.customNumberDesc=Domyślnie do {n}, również akceptuje 'Strona {n} z {total},Teskt-{n},'{filename}-{n}
|
||||||
addPageNumbers.submit=Dodaj numerację stron
|
addPageNumbers.submit=Dodaj numerację stron
|
||||||
|
|
||||||
|
|
||||||
#auto-rename
|
#auto-rename
|
||||||
auto-rename.title=Automatyczna zmiana nazwy
|
auto-rename.title=Automatczna zmiana nazwy
|
||||||
auto-rename.header=Automatyczna zmiana nazwy dokumentu PDF
|
auto-rename.header=Automatczna zmiana nazwy dokumentu PDF
|
||||||
auto-rename.submit=Automatyczna zmiana nazwy
|
auto-rename.submit=Automatczna zmiana nazwy
|
||||||
|
|
||||||
|
|
||||||
#adjustContrast
|
#adjustContrast
|
||||||
adjustContrast.title=Dopasuj kontrast
|
adjustContrast.title=Dopasuj kontrast
|
||||||
adjustContrast.header=Dopasuj kontrast
|
adjustContrast.header=Dopasuj kontrast
|
||||||
adjustContrast.contrast=Kontrast:
|
adjustContrast.contrast=kontrast:
|
||||||
adjustContrast.brightness=Jasność:
|
adjustContrast.brightness=jasność:
|
||||||
adjustContrast.saturation=Nasycenie:
|
adjustContrast.saturation=nasycenie:
|
||||||
adjustContrast.download=Pobierz
|
adjustContrast.download=Pobierz
|
||||||
|
|
||||||
|
|
||||||
@@ -646,11 +630,11 @@ crop.submit=Wyślij
|
|||||||
#autoSplitPDF
|
#autoSplitPDF
|
||||||
autoSplitPDF.title=Automatycznie podziel PDF
|
autoSplitPDF.title=Automatycznie podziel PDF
|
||||||
autoSplitPDF.header=Automatycznie podziel PDF
|
autoSplitPDF.header=Automatycznie podziel PDF
|
||||||
autoSplitPDF.description=Drukuj, wstaw, skanuj, wyślij i pozwól nam automatycznie posortować dokumenty. Bez ręcznego sortowania.
|
autoSplitPDF.description=Drukuj, wstaw, skanuj, wyślij i pozwól nam automatycznie posortować dokumenty.
|
||||||
autoSplitPDF.selectText.1=Wydrukuj strony separacji z poniższych wzorów - (mogą być czarno-białe)
|
autoSplitPDF.selectText.1=Wydrukuj strony separacji z poniższych wzorów - (mogą być czarno-białe)
|
||||||
autoSplitPDF.selectText.2=Skanuj wszystkie swoje dokumenty na raz, wstawiając stronę separator między nie.
|
autoSplitPDF.selectText.2=Skanuj wszystkie swoje dokumenty na raz, wstawiając stronę separator między nie.
|
||||||
autoSplitPDF.selectText.3=Wyślij pojedynczy duży plik PDF zawierający skan i pozwól Stirling PDF zająć się resztą.
|
autoSplitPDF.selectText.3=Wyślij pojedyńczy duży plik PDF zawierający skan i pozwól Stirling zająć się resztą.
|
||||||
autoSplitPDF.selectText.4=Strony separacji są automatycznie wykrywane i usuwane, gwarantując ładny finalny dokument.
|
autoSplitPDF.selectText.4=Strony separacji sa automatycznie wykrywane i usuwane, gwarantując ładny finalny dokument.
|
||||||
autoSplitPDF.formPrompt=Wyślij dokument PDF zawierający strony podziału z Stirling PDF.
|
autoSplitPDF.formPrompt=Wyślij dokument PDF zawierający strony podziału z Stirling PDF.
|
||||||
autoSplitPDF.duplexMode=Skanowanie dwustronne
|
autoSplitPDF.duplexMode=Skanowanie dwustronne
|
||||||
autoSplitPDF.dividerDownload1=Pobierz 'Auto Splitter Divider (minimal).pdf'
|
autoSplitPDF.dividerDownload1=Pobierz 'Auto Splitter Divider (minimal).pdf'
|
||||||
@@ -682,11 +666,11 @@ scalePages.submit=Wykonaj
|
|||||||
certSign.title=Podpisywanie certyfikatem
|
certSign.title=Podpisywanie certyfikatem
|
||||||
certSign.header=Podpisz dokument PDF certyfikatem prywatnym (moduł w budowie)
|
certSign.header=Podpisz dokument PDF certyfikatem prywatnym (moduł w budowie)
|
||||||
certSign.selectPDF=Wybierz dokument PDF do podpisania:
|
certSign.selectPDF=Wybierz dokument PDF do podpisania:
|
||||||
certSign.jksNote=Notka: jeśli twój typ certyfikatu nie jest widoczny na liście, skonwertuj go do formatu Java Keystore (.jks) używając polecenia keytool. Następnie wybierz plik .JKS poniżej z listy.
|
certSign.jksNote=Notka: jeśli twój typ certyfikatu nie jest widoczny na liście , skonwertuj go do formatu Java Keystore (.jks) używając polecenia keytool. Następnie wybierz plik .JKS poniżej z listy.
|
||||||
certSign.selectKey=Wybierz plik klucza prywatnego (format PKCS#8, może to być .pem lub .der):
|
certSign.selectKey=Wybierz plik klucza prywatnego (format PKCS#8, może to być .pem lub .der):
|
||||||
certSign.selectCert=Wybierz plik certyfikatu (format X.509, może to być .pem lub .der):
|
certSign.selectCert=Wybierz plik certyfikatu (format X.509, może to być .pem lub .der):
|
||||||
certSign.selectP12=Wybierz plik magazynu kluczy PKCS#12 (.p12 lub .pfx) (opcjonalnie, jeśli jest podany, powinien zawierać klucz prywatny i certyfikat):
|
certSign.selectP12=Wybierz plik magazynu kluczy PKCS#12 (.p12 lub .pfx) (opcjonalnie, jeśli jest podany, powinien zawierać klucz prywatny i certyfikat):
|
||||||
certSign.selectJKS=Wybierz plik Java Keystore (.jks lub .keystore):
|
certSign.selectJKS=Wybierz plik Java Keystore(.jks lub .keystore):
|
||||||
certSign.certType=Typ certyfikatu
|
certSign.certType=Typ certyfikatu
|
||||||
certSign.password=Wprowadź hasło do magazynu kluczy lub klucza prywatnego (jeśli istnieje):
|
certSign.password=Wprowadź hasło do magazynu kluczy lub klucza prywatnego (jeśli istnieje):
|
||||||
certSign.showSig=Wyświetl podpis
|
certSign.showSig=Wyświetl podpis
|
||||||
@@ -808,7 +792,7 @@ extractImages.submit=Wyodrębnij
|
|||||||
fileToPDF.title=Plik na PDF
|
fileToPDF.title=Plik na PDF
|
||||||
fileToPDF.header=Konwertuj dowolny plik na dokument PDF
|
fileToPDF.header=Konwertuj dowolny plik na dokument PDF
|
||||||
fileToPDF.credit=Ta usługa używa LibreOffice i Unoconv do konwersji plików.
|
fileToPDF.credit=Ta usługa używa LibreOffice i Unoconv do konwersji plików.
|
||||||
fileToPDF.supportedFileTypesInfo=Obsługiwane typy plików
|
fileToPDF.supportedFileTypesInfo=Supported File types
|
||||||
fileToPDF.supportedFileTypes=Obsługiwane typy plików powinny być zgodne z poniższymi, jednak pełną zaktualizowaną listę obsługiwanych formatów można znaleźć w dokumentacji LibreOffice
|
fileToPDF.supportedFileTypes=Obsługiwane typy plików powinny być zgodne z poniższymi, jednak pełną zaktualizowaną listę obsługiwanych formatów można znaleźć w dokumentacji LibreOffice
|
||||||
fileToPDF.submit=Konwertuj na PDF
|
fileToPDF.submit=Konwertuj na PDF
|
||||||
|
|
||||||
@@ -819,7 +803,7 @@ compress.header=Kompresuj PDF
|
|||||||
compress.credit=Ta usługa używa Ghostscript do kompresji/optymalizacji PDF.
|
compress.credit=Ta usługa używa Ghostscript do kompresji/optymalizacji PDF.
|
||||||
compress.selectText.1=Tryb ręczny - Od 1 do 4
|
compress.selectText.1=Tryb ręczny - Od 1 do 4
|
||||||
compress.selectText.2=Poziom optymalizacji:
|
compress.selectText.2=Poziom optymalizacji:
|
||||||
compress.selectText.3=4 (Duże dla obrazów tekstowych)
|
compress.selectText.3=4 (Straszne dla obrazów tekstowych)
|
||||||
compress.selectText.4=Tryb automatyczny - Automatycznie dostosowuje jakość, aby uzyskać dokładny rozmiar pliku PDF
|
compress.selectText.4=Tryb automatyczny - Automatycznie dostosowuje jakość, aby uzyskać dokładny rozmiar pliku PDF
|
||||||
compress.selectText.5=Oczekiwany rozmiar pliku PDF (np. 25 MB, 10,8 MB, 25 KB)
|
compress.selectText.5=Oczekiwany rozmiar pliku PDF (np. 25 MB, 10,8 MB, 25 KB)
|
||||||
compress.submit=Kompresuj
|
compress.submit=Kompresuj
|
||||||
@@ -836,9 +820,9 @@ addImage.submit=Dodaj obraz
|
|||||||
#merge
|
#merge
|
||||||
merge.title=Połącz
|
merge.title=Połącz
|
||||||
merge.header=Połącz wiele dokumentów PDF (2+)
|
merge.header=Połącz wiele dokumentów PDF (2+)
|
||||||
merge.sortByName=Sortuj po nazwie
|
merge.sortByName=Sort by name
|
||||||
merge.sortByDate=Sortuj po dacie
|
merge.sortByDate=Sort by date
|
||||||
merge.removeCertSign=Usuń podpis cyfrowy w scalonym pliku?
|
merge.removeCertSign=Remove digital signature in the merged file?
|
||||||
merge.submit=Połącz
|
merge.submit=Połącz
|
||||||
|
|
||||||
|
|
||||||
@@ -850,7 +834,7 @@ pdfOrganiser.mode=Tryb
|
|||||||
pdfOrganiser.mode.1=Własna kolejność stron
|
pdfOrganiser.mode.1=Własna kolejność stron
|
||||||
pdfOrganiser.mode.2=Odwrotny
|
pdfOrganiser.mode.2=Odwrotny
|
||||||
pdfOrganiser.mode.3=Dwustronny
|
pdfOrganiser.mode.3=Dwustronny
|
||||||
pdfOrganiser.mode.4=Książki
|
pdfOrganiser.mode.4=Ksiązki
|
||||||
pdfOrganiser.mode.5=Spiętej książki
|
pdfOrganiser.mode.5=Spiętej książki
|
||||||
pdfOrganiser.mode.6=Rozdziel parzyste-nieparzyste
|
pdfOrganiser.mode.6=Rozdziel parzyste-nieparzyste
|
||||||
pdfOrganiser.mode.7=Usuń pierwszą
|
pdfOrganiser.mode.7=Usuń pierwszą
|
||||||
@@ -932,7 +916,7 @@ addPassword.title=Dodaj hasło
|
|||||||
addPassword.header=Dodaj hasło (zaszyfruj)
|
addPassword.header=Dodaj hasło (zaszyfruj)
|
||||||
addPassword.selectText.1=Wybierz plik PDF do zaszyfrowania
|
addPassword.selectText.1=Wybierz plik PDF do zaszyfrowania
|
||||||
addPassword.selectText.2=Hasło
|
addPassword.selectText.2=Hasło
|
||||||
addPassword.selectText.3=Długość klucza szyfrowania
|
addPassword.selectText.3=Długość hasła
|
||||||
addPassword.selectText.4=Wyższe wartości są silniejsze, ale niższe wartości zapewniają lepszą kompatybilność.
|
addPassword.selectText.4=Wyższe wartości są silniejsze, ale niższe wartości zapewniają lepszą kompatybilność.
|
||||||
addPassword.selectText.5=Uprawnienia do zmian
|
addPassword.selectText.5=Uprawnienia do zmian
|
||||||
addPassword.selectText.6=Zablokuj zmiany w dokumencie
|
addPassword.selectText.6=Zablokuj zmiany w dokumencie
|
||||||
@@ -944,7 +928,7 @@ addPassword.selectText.11=Zablokuj modyfikacje adnotacji
|
|||||||
addPassword.selectText.12=Zablokuj drukowanie
|
addPassword.selectText.12=Zablokuj drukowanie
|
||||||
addPassword.selectText.13=Zablokuj drukowanie różnych formatów
|
addPassword.selectText.13=Zablokuj drukowanie różnych formatów
|
||||||
addPassword.selectText.14=Hasło właściciela
|
addPassword.selectText.14=Hasło właściciela
|
||||||
addPassword.selectText.15=Ogranicza akcje, które można wykonać na dokumencie, kiedy jest otwarty (nie wspierany przez wszystkie przeglądarki)
|
addPassword.selectText.15=Ogranicza akcje które można wykonać na dokumencie, kiedy jest otwarty (nie wspierany przez wszystkie przeglądarki)
|
||||||
addPassword.selectText.16=Ogranicza otwarcie dokumentu
|
addPassword.selectText.16=Ogranicza otwarcie dokumentu
|
||||||
addPassword.submit=Zablokuj
|
addPassword.submit=Zablokuj
|
||||||
|
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=Odstęp w pionie (odstęp między każdym znakiem wodnym
|
|||||||
watermark.selectText.7=Nieprzezroczystość (0% - 100%):
|
watermark.selectText.7=Nieprzezroczystość (0% - 100%):
|
||||||
watermark.selectText.8=Typ znaku wodnego:
|
watermark.selectText.8=Typ znaku wodnego:
|
||||||
watermark.selectText.9=Obraz znaku wodnego:
|
watermark.selectText.9=Obraz znaku wodnego:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Dodaj znak wodny
|
watermark.submit=Dodaj znak wodny
|
||||||
watermark.type.1=Tekst
|
watermark.type.1=Tekst
|
||||||
watermark.type.2=Obraz
|
watermark.type.2=Obraz
|
||||||
@@ -1062,7 +1045,7 @@ PDFToXML.submit=Konwertuj
|
|||||||
PDFToCSV.title=PDF na CSV
|
PDFToCSV.title=PDF na CSV
|
||||||
PDFToCSV.header=PDF na CSV
|
PDFToCSV.header=PDF na CSV
|
||||||
PDFToCSV.prompt=Choose page to extract table
|
PDFToCSV.prompt=Choose page to extract table
|
||||||
PDFToCSV.submit=Zatwierdź
|
PDFToCSV.submit=Wyci?g
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
split-by-size-or-count.title=Podziel PDF przez ilość stron bądź rozmiar
|
split-by-size-or-count.title=Podziel PDF przez ilość stron bądź rozmiar
|
||||||
@@ -1117,7 +1100,7 @@ licenses.title=Licencje stron trzecich
|
|||||||
licenses.header=Licencje stron trzecich
|
licenses.header=Licencje stron trzecich
|
||||||
licenses.module=Moduł
|
licenses.module=Moduł
|
||||||
licenses.version=Wersja
|
licenses.version=Wersja
|
||||||
licenses.license=Licencja
|
licenses.license=Licencha
|
||||||
|
|
||||||
#survey
|
#survey
|
||||||
survey.nav=Ankieta
|
survey.nav=Ankieta
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Kopiuj Stack Trace
|
|||||||
error.githubSubmit=GitHub - wyślij zgłoszenie
|
error.githubSubmit=GitHub - wyślij zgłoszenie
|
||||||
error.discordSubmit=Discord - wyślij posta z prośbą o pomoc
|
error.discordSubmit=Discord - wyślij posta z prośbą o pomoc
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -11,17 +11,17 @@ imgPrompt=Selecione a(s) imagem(ns)
|
|||||||
genericSubmit=Enviar
|
genericSubmit=Enviar
|
||||||
processTimeWarning=Aviso: esse processo pode levar até um minuto, dependendo do tamanho do arquivo
|
processTimeWarning=Aviso: esse processo pode levar até um minuto, dependendo do tamanho do arquivo
|
||||||
pageOrderPrompt=Ordem das páginas (digite uma lista separada por vírgulas de números de página):
|
pageOrderPrompt=Ordem das páginas (digite uma lista separada por vírgulas de números de página):
|
||||||
pageSelectionPrompt=Seleção de página personalizada (Insira uma lista separada por vírgulas de números de página 1,5,6 ou funções como 2n+1) :
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Ir
|
goToPage=Ir
|
||||||
true=Verdadeiro
|
true=Verdadeiro
|
||||||
false=Falso
|
false=Falso
|
||||||
unknown=Desconhecido
|
unknown=Desconhecido
|
||||||
save=Salvar
|
save=Salvar
|
||||||
saveToBrowser=Salvar no navegador
|
saveToBrowser=Save to Browser
|
||||||
close=Fechar
|
close=Fechar
|
||||||
filesSelected=arquivos selecionados
|
filesSelected=arquivos selecionados
|
||||||
noFavourites=Nenhum favorito adicionado
|
noFavourites=Nenhum favorito adicionado
|
||||||
downloadComplete=Download finalizado
|
downloadComplete=Download Complete
|
||||||
bored=Entediado esperando?
|
bored=Entediado esperando?
|
||||||
alphabet=Alfabeto
|
alphabet=Alfabeto
|
||||||
downloadPdf=baixar PDF
|
downloadPdf=baixar PDF
|
||||||
@@ -34,45 +34,43 @@ sizes.medium=Médio
|
|||||||
sizes.large=Grande
|
sizes.large=Grande
|
||||||
sizes.x-large=Muito grande
|
sizes.x-large=Muito grande
|
||||||
error.pdfPassword=O documento PDF está protegido por senha e a senha não foi fornecida ou está incorreta
|
error.pdfPassword=O documento PDF está protegido por senha e a senha não foi fornecida ou está incorreta
|
||||||
delete=apagar
|
delete=Delete
|
||||||
username=Usuário
|
username=Username
|
||||||
password=Senha
|
password=Password
|
||||||
welcome=Bem vindo
|
welcome=Welcome
|
||||||
property=Propriedade
|
property=Property
|
||||||
black=Preto
|
black=Black
|
||||||
white=Branco
|
white=White
|
||||||
red=Vermelho
|
red=Red
|
||||||
green=Verde
|
green=Green
|
||||||
blue=Azul
|
blue=Blue
|
||||||
custom=Personalizado...
|
custom=Custom...
|
||||||
WorkInProgess=Em progesso, Talvez não funcione ou apresente erros, Por favor, reporte qualquer problema!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Distribuído por
|
poweredBy=Powered by
|
||||||
yes=Sim
|
yes=Yes
|
||||||
no=Não
|
no=No
|
||||||
changedCredsMessage=Credenciais alteradas!
|
changedCredsMessage=Credentials changed!
|
||||||
notAuthenticatedMessage=Usuário não autenticado.
|
notAuthenticatedMessage=User not authenticated.
|
||||||
userNotFoundMessage=Usuário não encontrado.
|
userNotFoundMessage=User not found.
|
||||||
incorrectPasswordMessage=A senha atual está incorreta.
|
incorrectPasswordMessage=Current password is incorrect.
|
||||||
usernameExistsMessage=Novo Usuário já existe.
|
usernameExistsMessage=New Username already exists.
|
||||||
invalidUsernameMessage=Usuário inválido, nome de usuário só pode incluir letras, números e os seguintes caracteres especiais @._+- ou deve ser um email válido.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
confirmPasswordErrorMessage=Nova Senha e Confirmar Nova Senha devem ser iguais.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteCurrentUserMessage=Não é possível apagar o usuário da sessão atual.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
deleteUsernameExistsMessage=O usuário não existe e não pode ser apagado.
|
|
||||||
downgradeCurrentUserMessage=Não é possível fazer downgrade da função do usuário atual
|
downgradeCurrentUserMessage=Não é possível fazer downgrade da função do usuário atual
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Não é possível fazer downgrade da função do usuário atual. Portanto, o usuário atual não será mostrado.
|
downgradeCurrentUserLongMessage=Não é possível fazer downgrade da função do usuário atual. Portanto, o usuário atual não será mostrado.
|
||||||
userAlreadyExistsOAuthMessage=O usuário já existe como um usuário OAuth2.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=O usuário já existe como um usuário web.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
error=Erro
|
error=Error
|
||||||
oops=Oops!
|
oops=Oops!
|
||||||
help=Ajuda
|
help=Help
|
||||||
goHomepage=Ir para página inicial
|
goHomepage=Go to Homepage
|
||||||
joinDiscord=Entre em nosso servidor do Discord
|
joinDiscord=Join our Discord server
|
||||||
seeDockerHub=Veja nosso Docker Hub
|
seeDockerHub=See Docker Hub
|
||||||
visitGithub=Visite o repositório no Github
|
visitGithub=Visit Github Repository
|
||||||
donate=Doar
|
donate=Donate
|
||||||
color=Cor
|
color=Color
|
||||||
sponsor=Sponsor
|
sponsor=Sponsor
|
||||||
info=Info
|
info=Info
|
||||||
|
|
||||||
@@ -81,27 +79,27 @@ info=Info
|
|||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Menu de Pipeline (Beta)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Enviar personalizado
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configurar
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Personalizado
|
pipeline.defaultOption=Custom
|
||||||
pipeline.submitButton=Enviar
|
pipeline.submitButton=Submit
|
||||||
pipeline.help=Ajuda de Pipeline
|
pipeline.help=Pipeline Help
|
||||||
pipeline.scanHelp=Ajuda de verificação de pasta
|
pipeline.scanHelp=Folder Scanning Help
|
||||||
pipeline.deletePrompt=Tem certeza que deseja deletar a pipeline
|
pipeline.deletePrompt=Are you sure you want to delete pipeline
|
||||||
|
|
||||||
######################
|
######################
|
||||||
# Pipeline Options #
|
# Pipeline Options #
|
||||||
######################
|
######################
|
||||||
pipelineOptions.header=Configurações de Pipeline
|
pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Nome da Pipeline
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Salvar configurações de operação
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Insira o nome da pipeline aqui
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
pipelineOptions.selectOperation=Selecionar operação
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Adicionar operação
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
pipelineOptions.validateButton=Validar
|
pipelineOptions.validateButton=Validate
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -109,125 +107,117 @@ pipelineOptions.validateButton=Validar
|
|||||||
#############
|
#############
|
||||||
# NAVBAR #
|
# NAVBAR #
|
||||||
#############
|
#############
|
||||||
navbar.favorite=Favoritos
|
navbar.favorite=Favorites
|
||||||
navbar.darkmode=Modo Escuro
|
navbar.darkmode=Modo Escuro
|
||||||
navbar.language=Idiomas
|
navbar.language=Languages
|
||||||
navbar.settings=Configurações
|
navbar.settings=Configurações
|
||||||
navbar.allTools=Ferramentas
|
navbar.allTools=Tools
|
||||||
navbar.multiTool=Multiferramentas
|
navbar.multiTool=Multi Tools
|
||||||
navbar.sections.organize=Organizar
|
navbar.sections.organize=Organize
|
||||||
navbar.sections.convertTo=Converter para PDF
|
navbar.sections.convertTo=Convert to PDF
|
||||||
navbar.sections.convertFrom=Converter de PDF
|
navbar.sections.convertFrom=Convert from PDF
|
||||||
navbar.sections.security=Assinatura & Segurança
|
navbar.sections.security=Sign & Security
|
||||||
navbar.sections.advance=Avançado
|
navbar.sections.advance=Advanced
|
||||||
navbar.sections.edit=Visualizar & Editar
|
navbar.sections.edit=View & Edit
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# SETTINGS #
|
# SETTINGS #
|
||||||
#############
|
#############
|
||||||
settings.title=Configurações
|
settings.title=Configurações
|
||||||
settings.update=Atualização disponível
|
settings.update=Atualização disponível
|
||||||
settings.updateAvailable={0} é a versão instalada. Uma nova versão ({1}) está disponível.
|
settings.updateAvailable={0} is the current installed version. A new version ({1}) is available.
|
||||||
settings.appVersion=Versão do aplicativo:
|
settings.appVersion=Versão do aplicativo:
|
||||||
settings.downloadOption.title=Escolha a opção de download (para downloads não compactados de arquivo único):
|
settings.downloadOption.title=Escolha a opção de download (para downloads não compactados de arquivo único):
|
||||||
settings.downloadOption.1=Abrir na mesma janela
|
settings.downloadOption.1=Abrir na mesma janela
|
||||||
settings.downloadOption.2=Abrir em nova janela
|
settings.downloadOption.2=Abrir em nova janela
|
||||||
settings.downloadOption.3=⇬ Fazer download do arquivo
|
settings.downloadOption.3=⇬ Fazer download do arquivo
|
||||||
settings.zipThreshold=Compactar arquivos quando o número de arquivos baixados exceder
|
settings.zipThreshold=Compactar arquivos quando o número de arquivos baixados exceder
|
||||||
settings.signOut=Encerrar sessão
|
settings.signOut=Sign Out
|
||||||
settings.accountSettings=Configurações de conta
|
settings.accountSettings=Account Settings
|
||||||
settings.bored.help=Habilitar nomes de easter egg
|
settings.bored.help=Enables easter egg game
|
||||||
settings.cacheInputs.name=Salvar campos do formulário
|
settings.cacheInputs.name=Save form inputs
|
||||||
settings.cacheInputs.help=Habilitar salvar campos utilizados anteriormenta para ações futuras
|
settings.cacheInputs.help=Enable to store previously used inputs for future runs
|
||||||
|
|
||||||
changeCreds.title=Alterar credenciais
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Atualizar detalhes da sua conta
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changePassword=Você está usando as credenciais padrões. Por favor, insira uma nova senha
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=Novo usuário
|
changeCreds.newUsername=New Username
|
||||||
changeCreds.oldPassword=Senha atual
|
changeCreds.oldPassword=Current Password
|
||||||
changeCreds.newPassword=Nova senha
|
changeCreds.newPassword=New Password
|
||||||
changeCreds.confirmNewPassword=Confirmar nova senha
|
changeCreds.confirmNewPassword=Confirm New Password
|
||||||
changeCreds.submit=Enviar alterações
|
changeCreds.submit=Submit Changes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
account.title=Configurações da conta
|
account.title=Account Settings
|
||||||
account.accountSettings=Configurações da conta
|
account.accountSettings=Account Settings
|
||||||
account.adminSettings=Configurações administrativas - Visualizar e adicionar usuários
|
account.adminSettings=Admin Settings - View and Add Users
|
||||||
account.userControlSettings=Configurações de controle de usuário
|
account.userControlSettings=User Control Settings
|
||||||
account.changeUsername=Alterar nome de usuário
|
account.changeUsername=Change Username
|
||||||
account.newUsername=Novo usuário
|
account.newUsername=New Username
|
||||||
account.password=Confirmation Password
|
account.password=Confirmation Password
|
||||||
account.oldPassword=Senha antiga
|
account.oldPassword=Old password
|
||||||
account.newPassword=Nova senha
|
account.newPassword=New Password
|
||||||
account.changePassword=Alterar senha
|
account.changePassword=Change Password
|
||||||
account.confirmNewPassword=Confirmar nova senha
|
account.confirmNewPassword=Confirm New Password
|
||||||
account.signOut=Encerrar sessão
|
account.signOut=Sign Out
|
||||||
account.yourApiKey=Insira sua chave de API
|
account.yourApiKey=Your API Key
|
||||||
account.syncTitle=Sincronizar configurações do navegador com a conta
|
account.syncTitle=Sync browser settings with Account
|
||||||
account.settingsCompare=Comparação de configurações:
|
account.settingsCompare=Settings Comparison:
|
||||||
account.property=Propriedade
|
account.property=Property
|
||||||
account.webBrowserSettings=Configurações do navegador
|
account.webBrowserSettings=Web Browser Setting
|
||||||
account.syncToBrowser=Sincronizar conta -> Navegador
|
account.syncToBrowser=Sync Account -> Browser
|
||||||
account.syncToAccount=Sincronizar conta <- Navegador
|
account.syncToAccount=Sync Account <- Browser
|
||||||
|
|
||||||
|
|
||||||
adminUserSettings.title=Configurações de controle de usuário
|
adminUserSettings.title=User Control Settings
|
||||||
adminUserSettings.header=Configurações de controle de usuário administrador
|
adminUserSettings.header=Admin User Control Settings
|
||||||
adminUserSettings.admin=Administrador
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=Usuário
|
adminUserSettings.user=User
|
||||||
adminUserSettings.addUser=Adicionar novo usuário
|
adminUserSettings.addUser=Add New User
|
||||||
adminUserSettings.deleteUser=Apagar usuário
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=O usuário deve ser apagado?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.usernameInfo=Nome de usuário só pode incluir letras, números e os seguintes caracteres especiais @._+- ou deve ser um email válido.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Funções
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Função
|
adminUserSettings.role=Role
|
||||||
adminUserSettings.actions=Ações
|
adminUserSettings.actions=Actions
|
||||||
adminUserSettings.apiUser=Usuário de API limitado
|
adminUserSettings.apiUser=Limited API User
|
||||||
adminUserSettings.extraApiUser=Usuário de API limitado adicional
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Usuário apenas web
|
adminUserSettings.webOnlyUser=Web Only User
|
||||||
adminUserSettings.demoUser=Usuário demo (Sem configurações personalizadas)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
adminUserSettings.internalApiUser=Usuário interno de API
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=Forçar usuário a trocar a senha ao iniciar sessão
|
adminUserSettings.forceChange=Force user to change password on login
|
||||||
adminUserSettings.submit=Salvar usuário
|
adminUserSettings.submit=Save User
|
||||||
adminUserSettings.changeUserRole=Alterar Função de Usuário
|
adminUserSettings.changeUserRole=Alterar Função de Usuário
|
||||||
adminUserSettings.authenticated=Autenticado
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Importar/Exportar banco de dados
|
database.title=Database Import/Export
|
||||||
database.header=Importar/Exportar banco de dados
|
database.header=Database Import/Export
|
||||||
database.fileName=Nome do arquivo
|
database.fileName=File Name
|
||||||
database.creationDate=Data de criação
|
database.creationDate=Creation Date
|
||||||
database.fileSize=Tamanho do arquivo
|
database.fileSize=File Size
|
||||||
database.deleteBackupFile=Apagar arquivo de backup
|
database.deleteBackupFile=Delete Backup File
|
||||||
database.importBackupFile=Importar arquivo de backup
|
database.importBackupFile=Import Backup File
|
||||||
database.downloadBackupFile=Baixar arquivo de backup
|
database.downloadBackupFile=Download Backup File
|
||||||
database.info_1=Ao importar dados, é crucial garantir a estrutura correta. Se você não tem certeza do que está fazendo procure auxílio de um profissional. Um erro na estrutura pode ocasionar em mau funcionamento da aplicação, incluindo a possibilidade de perda total da aplicação.
|
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||||
database.info_2=O nome do arquivo não importa ao enviar. Ele será renomeado em seguida para seguir o formato backup_user_yyyyMMddHHmm.sql, garantindo uma convenção de nomes coerente.
|
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||||
database.submit=Importar Backup
|
database.submit=Import Backup
|
||||||
database.importIntoDatabaseSuccessed=Importação para o banco de dados bem sucedida
|
database.importIntoDatabaseSuccessed=Import into database successed
|
||||||
database.fileNotFound=Arquivo não encontrado
|
database.fileNotFound=File not Found
|
||||||
database.fileNullOrEmpty=O arquivo não estar nulo ou vazio
|
database.fileNullOrEmpty=File must not be null or empty
|
||||||
database.failedImportFile=Falha ao importar arquivo
|
database.failedImportFile=Failed Import File
|
||||||
|
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# HOME-PAGE #
|
# HOME-PAGE #
|
||||||
#############
|
#############
|
||||||
home.desc=Seu melhor utilitário para suas necessidades de PDF.
|
home.desc=Seu melhor utilitário para suas necessidades de PDF.
|
||||||
home.searchBar=Procurar funcionalidades...
|
home.searchBar=Search for features...
|
||||||
|
|
||||||
|
|
||||||
home.viewPdf.title=Visualizar PDF
|
home.viewPdf.title=View PDF
|
||||||
home.viewPdf.desc=Visualize, anote, adicione textos ou imagens
|
home.viewPdf.desc=View, annotate, add text or images
|
||||||
viewPdf.tags=visualize,leia,anote,texto,imagem
|
viewPdf.tags=view,read,annotate,text,image
|
||||||
|
|
||||||
home.multiTool.title=Multiferramenta de PDF
|
home.multiTool.title=Multiferramenta de PDF
|
||||||
home.multiTool.desc=Mesclar, girar, reorganizar e remover páginas
|
home.multiTool.desc=Mesclar, girar, reorganizar e remover páginas
|
||||||
@@ -351,9 +341,9 @@ home.removeBlanks.title=Remover Páginas em Branco
|
|||||||
home.removeBlanks.desc=Detectar e remover páginas em branco de um documento
|
home.removeBlanks.desc=Detectar e remover páginas em branco de um documento
|
||||||
removeBlanks.tags=limpeza,otimização,sem-conteúdo,organizar
|
removeBlanks.tags=limpeza,otimização,sem-conteúdo,organizar
|
||||||
|
|
||||||
home.removeAnnotations.title=Remover anotações
|
home.removeAnnotations.title=Remove Annotations
|
||||||
home.removeAnnotations.desc=Remover todos os comentários/anotações de um PDF
|
home.removeAnnotations.desc=Removes all comments/annotations from a PDF
|
||||||
removeAnnotations.tags=comentários,destaque,notas,markup,remover
|
removeAnnotations.tags=comments,highlight,notes,markup,remove
|
||||||
|
|
||||||
home.compare.title=Comparar
|
home.compare.title=Comparar
|
||||||
home.compare.desc=Comparar e mostrar as diferenças entre 2 documentos PDF
|
home.compare.desc=Comparar e mostrar as diferenças entre 2 documentos PDF
|
||||||
@@ -363,9 +353,9 @@ home.certSign.title=Assinar com Certificado
|
|||||||
home.certSign.desc=Assinar um PDF com um Certificado/Chave (PEM/P12)
|
home.certSign.desc=Assinar um PDF com um Certificado/Chave (PEM/P12)
|
||||||
certSign.tags=autenticar,PEM,P12,oficial,criptografar
|
certSign.tags=autenticar,PEM,P12,oficial,criptografar
|
||||||
|
|
||||||
home.removeCertSign.title=Remover Certificado de assinatura
|
home.removeCertSign.title=Remove Certificate Sign
|
||||||
home.removeCertSign.desc=Remove o certificado de assinatura de um PDF
|
home.removeCertSign.desc=Remove certificate signature from PDF
|
||||||
removeCertSign.tags=autenticar,PEM,P12,oficial,descriptografar
|
removeCertSign.tags=authenticate,PEM,P12,official,decrypt
|
||||||
|
|
||||||
home.pageLayout.title=Layout de Múltiplas Páginas
|
home.pageLayout.title=Layout de Múltiplas Páginas
|
||||||
home.pageLayout.desc=Mesclar várias páginas de um documento PDF em uma única página
|
home.pageLayout.desc=Mesclar várias páginas de um documento PDF em uma única página
|
||||||
@@ -436,44 +426,40 @@ home.showJS.title=Mostrar Javascript
|
|||||||
home.showJS.desc=Procura e exibe qualquer JavaScript injetado em um PDF
|
home.showJS.desc=Procura e exibe qualquer JavaScript injetado em um PDF
|
||||||
showJS.tags=JavaScript
|
showJS.tags=JavaScript
|
||||||
|
|
||||||
home.autoRedact.title=Edição automática
|
home.autoRedact.title=Auto Redact
|
||||||
home.autoRedact.desc=Edita automaticamente(marca em preto) um texto em um PDF baseado no texto de entrada
|
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
||||||
autoRedact.tags=redigir,esconder,escurer,preto,marcador,oculto
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF para CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Extrai tabelas de um PDF convertendo em CSV
|
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
||||||
tableExtraxt.tags=CSV,extração de tabela,extração,conversão
|
tableExtraxt.tags=CSV,Table Extraction,extract,convert
|
||||||
|
|
||||||
|
|
||||||
home.autoSizeSplitPDF.title=Separar automaticamente por tamanho/quantidade
|
home.autoSizeSplitPDF.title=Auto Split by Size/Count
|
||||||
home.autoSizeSplitPDF.desc=Separa um único PDF em múltiplos documentos baseado no tamanho, quantidade de páginas, ou contagem de documentos
|
home.autoSizeSplitPDF.desc=Split a single PDF into multiple documents based on size, page count, or document count
|
||||||
autoSizeSplitPDF.tags=pdf,separar,documento,organização
|
autoSizeSplitPDF.tags=pdf,split,document,organization
|
||||||
|
|
||||||
|
|
||||||
home.overlay-pdfs.title=Sobrepor PDFs
|
home.overlay-pdfs.title=Overlay PDFs
|
||||||
home.overlay-pdfs.desc=Sobrepõe PDFs em cima de outro PDF
|
home.overlay-pdfs.desc=Overlays PDFs on-top of another PDF
|
||||||
overlay-pdfs.tags=sobrepor
|
overlay-pdfs.tags=Overlay
|
||||||
|
|
||||||
home.split-by-sections.title=Separar PDF por seções
|
home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Separa cada página de um pdf em seções verticais ou horizontais menores
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Separação de sessão, separar, customizar
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
home.AddStampRequest.title=Adicionar carimbo ao PDF
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
home.AddStampRequest.desc=Adiciona um texto ou imagem como carimbo em locais definidos
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
AddStampRequest.tags=Carimbo, Adicionar image, centralizar imagem, marca d'agua, PDF, Incorporar, customizar
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
home.PDFToBook.title=PDF para Livro
|
home.PDFToBook.title=PDF to Book
|
||||||
home.PDFToBook.desc=Converte PDF para formatos de Livros/Quadrinhos utilizando calibre
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
PDFToBook.tags=Livro,Quadrinho,Calibre,Converter,manga,amazon,kindle
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.BookToPDF.title=Book to PDF
|
home.BookToPDF.title=Book to PDF
|
||||||
home.BookToPDF.desc=Converte formatos de Livros/Quadrinhos para PDF utilizando calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Livro,Quadrinho,Calibre,Converter,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remover imagem
|
|
||||||
home.removeImagePdf.desc=Remove uma imagem de um PDF para reduzir o tamanho do arquivo
|
|
||||||
removeImagePdf.tags=Remover imagem,Operações de página,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
@@ -482,37 +468,34 @@ removeImagePdf.tags=Remover imagem,Operações de página,Back end,server side
|
|||||||
# #
|
# #
|
||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Iniciar sessão
|
login.title=Sign in
|
||||||
login.header=Iniciar sessão
|
login.header=Sign in
|
||||||
login.signin=Iniciar sessão
|
login.signin=Sign in
|
||||||
login.rememberme=Lembrar de mim
|
login.rememberme=Remember me
|
||||||
login.invalid=Usuário ou senha inválidos.
|
login.invalid=Invalid username or password.
|
||||||
login.locked=Sua conta foi bloqueada.
|
login.locked=Your account has been locked.
|
||||||
login.signinTitle=Por favor, inicie a sessão
|
login.signinTitle=Please sign in
|
||||||
login.ssoSignIn=Iniciar sessão através de início de sessão único
|
login.ssoSignIn=Iniciar sessão através de início de sessão único
|
||||||
login.oauth2AutoCreateDisabled=Auto-Criar Usuário OAUTH2 Desativado
|
login.oauth2AutoCreateDisabled=OAUTH2 Auto-Criar Usuário Desativado
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2RequestNotFound=Solicitação de autorização não encontrada
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2InvalidUserInfoResponse=Resposta de informação de usuário inválida
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2invalidRequest=Requisição inválida
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2AccessDenied=Acesso negado
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidTokenResponse=Resposta de token inválida
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.oauth2InvalidIdToken=Id de token inválido
|
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
autoRedact.title=Edição Automática
|
autoRedact.title=Auto Redact
|
||||||
autoRedact.header=Edição Automática
|
autoRedact.header=Auto Redact
|
||||||
autoRedact.colorLabel=Cor
|
autoRedact.colorLabel=Colour
|
||||||
autoRedact.textsToRedactLabel=Texto para editar (separado por linhas)
|
autoRedact.textsToRedactLabel=Text to Redact (line-separated)
|
||||||
autoRedact.textsToRedactPlaceholder=exemplo: \nConfidencial \nSecreto
|
autoRedact.textsToRedactPlaceholder=e.g. \nConfidential \nTop-Secret
|
||||||
autoRedact.useRegexLabel=Usar Regex (Expressões regulares)
|
autoRedact.useRegexLabel=Use Regex
|
||||||
autoRedact.wholeWordSearchLabel=Pesquisa de palavras inteiras
|
autoRedact.wholeWordSearchLabel=Whole Word Search
|
||||||
autoRedact.customPaddingLabel=Padding extra personalizado
|
autoRedact.customPaddingLabel=Custom Extra Padding
|
||||||
autoRedact.convertPDFToImageLabel=Converter PDF para PDF-Imagem (usado para remover texto atrás de caixas)
|
autoRedact.convertPDFToImageLabel=Convert PDF to PDF-Image (Used to remove text behind the box)
|
||||||
autoRedact.submitButton=Enviar
|
autoRedact.submitButton=Submit
|
||||||
|
|
||||||
|
|
||||||
#showJS
|
#showJS
|
||||||
@@ -532,14 +515,14 @@ pdfToSinglePage.submit=Converter para Página Única
|
|||||||
pageExtracter.title=Extrair Páginas
|
pageExtracter.title=Extrair Páginas
|
||||||
pageExtracter.header=Extrair Páginas
|
pageExtracter.header=Extrair Páginas
|
||||||
pageExtracter.submit=Extrair
|
pageExtracter.submit=Extrair
|
||||||
pageExtracter.placeholder=(exemplo: 1,2,8 ou 4,7,12-16 ou 2n-1)
|
pageExtracter.placeholder=(e.g. 1,2,8 or 4,7,12-16 or 2n-1)
|
||||||
|
|
||||||
|
|
||||||
#getPdfInfo
|
#getPdfInfo
|
||||||
getPdfInfo.title=Obter Informações do PDF
|
getPdfInfo.title=Obter Informações do PDF
|
||||||
getPdfInfo.header=Obter Informações do PDF
|
getPdfInfo.header=Obter Informações do PDF
|
||||||
getPdfInfo.submit=Obter Informações
|
getPdfInfo.submit=Obter Informações
|
||||||
getPdfInfo.downloadJson=Baixar JSON
|
getPdfInfo.downloadJson=Download JSON
|
||||||
|
|
||||||
|
|
||||||
#markdown-to-pdf
|
#markdown-to-pdf
|
||||||
@@ -564,37 +547,37 @@ HTMLToPDF.header=HTML para PDF
|
|||||||
HTMLToPDF.help=Aceita arquivos HTML e ZIPs contendo html/css/imagens etc necessários
|
HTMLToPDF.help=Aceita arquivos HTML e ZIPs contendo html/css/imagens etc necessários
|
||||||
HTMLToPDF.submit=Converter
|
HTMLToPDF.submit=Converter
|
||||||
HTMLToPDF.credit=Usa o WeasyPrint
|
HTMLToPDF.credit=Usa o WeasyPrint
|
||||||
HTMLToPDF.zoom=Nível de zoom para exibição do site.
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
HTMLToPDF.pageWidth=Largura da página em centímetros. (Vazio por padrão)
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
HTMLToPDF.pageHeight=Altura da página em centímetros. (Vazio por padrão)
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
HTMLToPDF.marginTop=Margem superior da página em milímetros. (Vazio por padrão)
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
HTMLToPDF.marginBottom=Margem inferior da página em milímetros. (Vazio por padrão)
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
HTMLToPDF.marginLeft=Margem esquerda da página em milímetros. (Vazio por padrão)
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
HTMLToPDF.marginRight=Margem direita da página em milímetros. (Vazio por padrão)
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
HTMLToPDF.printBackground=Renderize o plano de fundo dos websites.
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
HTMLToPDF.defaultHeader=Habilitar cabeçalho padrão (Nome e número da página)
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
HTMLToPDF.cssMediaType=Altera o tipo da mídia CSS da página.
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
HTMLToPDF.none=Nenhum
|
HTMLToPDF.none=None
|
||||||
HTMLToPDF.print=Imprimir
|
HTMLToPDF.print=Print
|
||||||
HTMLToPDF.screen=Tela
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
#AddStampRequest
|
#AddStampRequest
|
||||||
AddStampRequest.header=Carimbar PDF
|
AddStampRequest.header=Stamp PDF
|
||||||
AddStampRequest.title=Carimbar PDF
|
AddStampRequest.title=Stamp PDF
|
||||||
AddStampRequest.stampType=Tipo de carimbo
|
AddStampRequest.stampType=Stamp Type
|
||||||
AddStampRequest.stampText=Texto do carimbo
|
AddStampRequest.stampText=Stamp Text
|
||||||
AddStampRequest.stampImage=Imagem do carimbo
|
AddStampRequest.stampImage=Stamp Image
|
||||||
AddStampRequest.alphabet=Alfabeto
|
AddStampRequest.alphabet=Alphabet
|
||||||
AddStampRequest.fontSize=Fonte/Tamanho da imagem
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
AddStampRequest.rotation=Rotação
|
AddStampRequest.rotation=Rotation
|
||||||
AddStampRequest.opacity=Opacidade
|
AddStampRequest.opacity=Opacity
|
||||||
AddStampRequest.position=Posição
|
AddStampRequest.position=Position
|
||||||
AddStampRequest.overrideX=Sobrescrever cordenada X
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
AddStampRequest.overrideY=Sobrescrever cordenada Y
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
AddStampRequest.customMargin=Margem personalizada
|
AddStampRequest.customMargin=Custom Margin
|
||||||
AddStampRequest.customColor=Cor de texto personalizada
|
AddStampRequest.customColor=Custom Text Color
|
||||||
AddStampRequest.submit=Carimbar
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
@@ -618,15 +601,15 @@ addPageNumbers.selectText.4=Número Inicial
|
|||||||
addPageNumbers.selectText.5=Páginas a Numerar
|
addPageNumbers.selectText.5=Páginas a Numerar
|
||||||
addPageNumbers.selectText.6=Texto Personalizado
|
addPageNumbers.selectText.6=Texto Personalizado
|
||||||
addPageNumbers.customTextDesc=Custom Text
|
addPageNumbers.customTextDesc=Custom Text
|
||||||
addPageNumbers.numberPagesDesc=Quais páginas devem ser numeradas, o padrão é 'all', também aceita 1-5 ou 2,5,9 etc
|
addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc
|
||||||
addPageNumbers.customNumberDesc=O padrão é {n}, também aceita 'Page {n} of {total}', 'Text-{n}', '{filename}-{n}.
|
addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n}
|
||||||
addPageNumbers.submit=Adicionar Números de Página
|
addPageNumbers.submit=Adicionar Números de Página
|
||||||
|
|
||||||
|
|
||||||
#auto-rename
|
#auto-rename
|
||||||
auto-rename.title=Renomear Automaticamente
|
auto-rename.title=Rename Automático
|
||||||
auto-rename.header=Renomear Automaticamente o PDF
|
auto-rename.header=Rename Automático de PDF
|
||||||
auto-rename.submit=Renomear Automaticamente
|
auto-rename.submit=Rename Automático
|
||||||
|
|
||||||
|
|
||||||
#adjustContrast
|
#adjustContrast
|
||||||
@@ -667,7 +650,7 @@ pipeline.title=Pipeline
|
|||||||
pageLayout.title=Layout de Múltiplas Páginas
|
pageLayout.title=Layout de Múltiplas Páginas
|
||||||
pageLayout.header=Layout de Múltiplas Páginas
|
pageLayout.header=Layout de Múltiplas Páginas
|
||||||
pageLayout.pagesPerSheet=Páginas por folha:
|
pageLayout.pagesPerSheet=Páginas por folha:
|
||||||
pageLayout.addBorder=Adicionar bordas
|
pageLayout.addBorder=Add Borders
|
||||||
pageLayout.submit=Enviar
|
pageLayout.submit=Enviar
|
||||||
|
|
||||||
|
|
||||||
@@ -962,7 +945,6 @@ watermark.selectText.6=Espaçamento Vertical (heightSpacer)
|
|||||||
watermark.selectText.7=Opacidade (0% - 100%)
|
watermark.selectText.7=Opacidade (0% - 100%)
|
||||||
watermark.selectText.8=Tipo de Marca d'Água
|
watermark.selectText.8=Tipo de Marca d'Água
|
||||||
watermark.selectText.9=Imagem da Marca d'Água
|
watermark.selectText.9=Imagem da Marca d'Água
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Adicionar Marca d'Água
|
watermark.submit=Adicionar Marca d'Água
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1143,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Utilizador inexistente.
|
|||||||
incorrectPasswordMessage=Senha incorreta.
|
incorrectPasswordMessage=Senha incorreta.
|
||||||
usernameExistsMessage=Esse utilizador já existe.
|
usernameExistsMessage=Esse utilizador já existe.
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=Não é possível fazer downgrade da função do utilizador atual
|
downgradeCurrentUserMessage=Não é possível fazer downgrade da função do utilizador atual
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Não é possível fazer downgrade da função do utilizador atual. Portanto, o utilizador atual não será mostrado.
|
downgradeCurrentUserLongMessage=Não é possível fazer downgrade da função do utilizador atual. Portanto, o utilizador atual não será mostrado.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=User
|
|||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Force user to change password on login
|
|||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
adminUserSettings.changeUserRole=Alterar usuário
|
adminUserSettings.changeUserRole=Alterar usuário
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=A sua conta foi bloqueada.
|
|||||||
login.signinTitle=Introduza os seus dados de acesso
|
login.signinTitle=Introduza os seus dados de acesso
|
||||||
login.ssoSignIn=Iniciar sessão através de início de sessão único
|
login.ssoSignIn=Iniciar sessão através de início de sessão único
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Criação Automática de Utilizador Desativada
|
login.oauth2AutoCreateDisabled=OAUTH2 Criação Automática de Utilizador Desativada
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=Espaçamento Vertical (heightSpacer)
|
|||||||
watermark.selectText.7=Opacidade (0% - 100%)
|
watermark.selectText.7=Opacidade (0% - 100%)
|
||||||
watermark.selectText.8=Tipo de Marca d'Água
|
watermark.selectText.8=Tipo de Marca d'Água
|
||||||
watermark.selectText.9=Imagem da Marca d'Água
|
watermark.selectText.9=Imagem da Marca d'Água
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Adicionar Marca d'Água
|
watermark.submit=Adicionar Marca d'Água
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=User not found.
|
|||||||
incorrectPasswordMessage=Current password is incorrect.
|
incorrectPasswordMessage=Current password is incorrect.
|
||||||
usernameExistsMessage=New Username already exists.
|
usernameExistsMessage=New Username already exists.
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=Rolul utilizatorului curent nu poate fi retrogradat
|
downgradeCurrentUserMessage=Rolul utilizatorului curent nu poate fi retrogradat
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Rolul utilizatorului curent nu poate fi retrogradat. Prin urmare, utilizatorul curent nu va fi afișat.
|
downgradeCurrentUserLongMessage=Rolul utilizatorului curent nu poate fi retrogradat. Prin urmare, utilizatorul curent nu va fi afișat.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=User
|
|||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Force user to change password on login
|
|||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
adminUserSettings.changeUserRole=Schimbați rolul utilizatorului
|
adminUserSettings.changeUserRole=Schimbați rolul utilizatorului
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Your account has been locked.
|
|||||||
login.signinTitle=Please sign in
|
login.signinTitle=Please sign in
|
||||||
login.ssoSignIn=Conectare prin conectare unică
|
login.ssoSignIn=Conectare prin conectare unică
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Creare automată utilizator dezactivată
|
login.oauth2AutoCreateDisabled=OAUTH2 Creare automată utilizator dezactivată
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer (Spațiu între fiecare filigran pe vertical
|
|||||||
watermark.selectText.7=Opacitate (0% - 100%):
|
watermark.selectText.7=Opacitate (0% - 100%):
|
||||||
watermark.selectText.8=Watermark Type:
|
watermark.selectText.8=Watermark Type:
|
||||||
watermark.selectText.9=Watermark Image:
|
watermark.selectText.9=Watermark Image:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Adăugați Filigran
|
watermark.submit=Adăugați Filigran
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Пользователь не найден.
|
|||||||
incorrectPasswordMessage=Текущий пароль неверен.
|
incorrectPasswordMessage=Текущий пароль неверен.
|
||||||
usernameExistsMessage=Новое имя пользователя уже существует.
|
usernameExistsMessage=Новое имя пользователя уже существует.
|
||||||
invalidUsernameMessage=Неверное имя пользователя. Имя пользователя может содержать только буквы, цифры и следующие специальные символы @._+- или должно быть действительным адресом электронной почты.
|
invalidUsernameMessage=Неверное имя пользователя. Имя пользователя может содержать только буквы, цифры и следующие специальные символы @._+- или должно быть действительным адресом электронной почты.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Невозможно удалить пользователя, вошедшего в систему.
|
deleteCurrentUserMessage=Невозможно удалить пользователя, вошедшего в систему.
|
||||||
deleteUsernameExistsMessage=Имя пользователя не существует и не может быть удалено.
|
deleteUsernameExistsMessage=Имя пользователя не существует и не может быть удалено.
|
||||||
downgradeCurrentUserMessage=Невозможно понизить роль текущего пользователя
|
downgradeCurrentUserMessage=Невозможно понизить роль текущего пользователя
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Невозможно понизить роль текущего пользователя. Следовательно, текущий пользователь не будет отображаться.
|
downgradeCurrentUserLongMessage=Невозможно понизить роль текущего пользователя. Следовательно, текущий пользователь не будет отображаться.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Пользователь
|
|||||||
adminUserSettings.addUser=Добавить нового пользователя
|
adminUserSettings.addUser=Добавить нового пользователя
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Имя пользователя может содержать только буквы, цифры и следующие специальные символы @._+- или должно быть действительным адресом электронной почты.
|
adminUserSettings.usernameInfo=Имя пользователя может содержать только буквы, цифры и следующие специальные символы @._+- или должно быть действительным адресом электронной почты.
|
||||||
adminUserSettings.roles=Роли
|
adminUserSettings.roles=Роли
|
||||||
adminUserSettings.role=Роль
|
adminUserSettings.role=Роль
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Просить пользователя измен
|
|||||||
adminUserSettings.submit=Сохранить пользователя
|
adminUserSettings.submit=Сохранить пользователя
|
||||||
adminUserSettings.changeUserRole=Изменить роль пользователя
|
adminUserSettings.changeUserRole=Изменить роль пользователя
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Книга в PDF
|
|||||||
home.BookToPDF.desc=Конвертирует форматы книги/комикса в PDF с помощью calibre
|
home.BookToPDF.desc=Конвертирует форматы книги/комикса в PDF с помощью calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Ваша учетная запись заблокирована.
|
|||||||
login.signinTitle=Пожалуйста, войдите
|
login.signinTitle=Пожалуйста, войдите
|
||||||
login.ssoSignIn=Вход через единый вход
|
login.ssoSignIn=Вход через единый вход
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Автоматическое создание пользователя отключено
|
login.oauth2AutoCreateDisabled=OAUTH2 Автоматическое создание пользователя отключено
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer (пробел между каждым вод
|
|||||||
watermark.selectText.7=Непрозрачность (0% - 100%):
|
watermark.selectText.7=Непрозрачность (0% - 100%):
|
||||||
watermark.selectText.8=Тип водяного знака:
|
watermark.selectText.8=Тип водяного знака:
|
||||||
watermark.selectText.9=Изображение водяного знака:
|
watermark.selectText.9=Изображение водяного знака:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Добавить водяной знак
|
watermark.submit=Добавить водяной знак
|
||||||
watermark.type.1=Текст
|
watermark.type.1=Текст
|
||||||
watermark.type.2=Изображение
|
watermark.type.2=Изображение
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Скопировать стек вызовов
|
|||||||
error.githubSubmit=GitHub - Отправить заявку
|
error.githubSubmit=GitHub - Отправить заявку
|
||||||
error.discordSubmit=Discord - Отправить запрос в поддержку
|
error.discordSubmit=Discord - Отправить запрос в поддержку
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Používateľ nebol nájdený.
|
|||||||
incorrectPasswordMessage=Aktuálne heslo je nesprávne.
|
incorrectPasswordMessage=Aktuálne heslo je nesprávne.
|
||||||
usernameExistsMessage=Nové používateľské meno už existuje.
|
usernameExistsMessage=Nové používateľské meno už existuje.
|
||||||
invalidUsernameMessage=Neplatné používateľské meno, používateľské meno musí obsahovať len abecedné znaky a čísla.
|
invalidUsernameMessage=Neplatné používateľské meno, používateľské meno musí obsahovať len abecedné znaky a čísla.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Nie je možné zmazať aktuálne prihláseného používateľa.
|
deleteCurrentUserMessage=Nie je možné zmazať aktuálne prihláseného používateľa.
|
||||||
deleteUsernameExistsMessage=Používateľské meno neexistuje a nemôže byť zmazané.
|
deleteUsernameExistsMessage=Používateľské meno neexistuje a nemôže byť zmazané.
|
||||||
downgradeCurrentUserMessage=Nie je možné znížiť rolu aktuálneho používateľa
|
downgradeCurrentUserMessage=Nie je možné znížiť rolu aktuálneho používateľa
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Nie je možné znížiť rolu aktuálneho používateľa. Preto, aktuálny používateľ nebude zobrazený.
|
downgradeCurrentUserLongMessage=Nie je možné znížiť rolu aktuálneho používateľa. Preto, aktuálny používateľ nebude zobrazený.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Používateľ
|
|||||||
adminUserSettings.addUser=Pridať nového používateľa
|
adminUserSettings.addUser=Pridať nového používateľa
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Používateľské meno musí obsahovať iba písmená a čísla, žiadne medzery alebo špeciálne znaky.
|
adminUserSettings.usernameInfo=Používateľské meno musí obsahovať iba písmená a čísla, žiadne medzery alebo špeciálne znaky.
|
||||||
adminUserSettings.roles=Role
|
adminUserSettings.roles=Role
|
||||||
adminUserSettings.role=Rola
|
adminUserSettings.role=Rola
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Donútiť používateľa zmeniť heslo pri prihlá
|
|||||||
adminUserSettings.submit=Uložiť používateľa
|
adminUserSettings.submit=Uložiť používateľa
|
||||||
adminUserSettings.changeUserRole=Zmeniť rolu používateľa
|
adminUserSettings.changeUserRole=Zmeniť rolu používateľa
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Kniha do PDF
|
|||||||
home.BookToPDF.desc=Konvertuje formáty kníh/komiksov do PDF pomocou Calibre
|
home.BookToPDF.desc=Konvertuje formáty kníh/komiksov do PDF pomocou Calibre
|
||||||
BookToPDF.tags=kniha, komiks, Calibre, konvertovať, manga, amazon, kindle
|
BookToPDF.tags=kniha, komiks, Calibre, konvertovať, manga, amazon, kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Váš účet bol uzamknutý.
|
|||||||
login.signinTitle=Prosím, prihláste sa
|
login.signinTitle=Prosím, prihláste sa
|
||||||
login.ssoSignIn=Prihlásiť sa cez Single Sign-on
|
login.ssoSignIn=Prihlásiť sa cez Single Sign-on
|
||||||
login.oauth2AutoCreateDisabled=Vytváranie používateľa cez OAUTH2 je zakázané
|
login.oauth2AutoCreateDisabled=Vytváranie používateľa cez OAUTH2 je zakázané
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=Výška medzery (Medzera medzi jednotlivými vodotlačami
|
|||||||
watermark.selectText.7=Priehľadnosť (0% - 100%):
|
watermark.selectText.7=Priehľadnosť (0% - 100%):
|
||||||
watermark.selectText.8=Typ vodotlače:
|
watermark.selectText.8=Typ vodotlače:
|
||||||
watermark.selectText.9=Obrázok vodotlače:
|
watermark.selectText.9=Obrázok vodotlače:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Pridať vodotlač
|
watermark.submit=Pridať vodotlač
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Obrázok
|
watermark.type.2=Obrázok
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Kopírovať sledovanie zásobníka
|
|||||||
error.githubSubmit=GitHub - Podajte tiket
|
error.githubSubmit=GitHub - Podajte tiket
|
||||||
error.discordSubmit=Discord - Podajte príspevok na podporu
|
error.discordSubmit=Discord - Podajte príspevok na podporu
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Korisnik nije pronađen.
|
|||||||
incorrectPasswordMessage=Trenutna šifra je netačna.
|
incorrectPasswordMessage=Trenutna šifra je netačna.
|
||||||
usernameExistsMessage=Novi korisnik već postoji
|
usernameExistsMessage=Novi korisnik već postoji
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=Nije moguće degradirati ulogu trenutnog korisnika
|
downgradeCurrentUserMessage=Nije moguće degradirati ulogu trenutnog korisnika
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Nije moguće unazaditi ulogu trenutnog korisnika. Dakle, trenutni korisnik neće biti prikazan.
|
downgradeCurrentUserLongMessage=Nije moguće unazaditi ulogu trenutnog korisnika. Dakle, trenutni korisnik neće biti prikazan.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Korisnik
|
|||||||
adminUserSettings.addUser=Dodaj novog korisnika
|
adminUserSettings.addUser=Dodaj novog korisnika
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Uloge
|
adminUserSettings.roles=Uloge
|
||||||
adminUserSettings.role=Uloga
|
adminUserSettings.role=Uloga
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Prisili korisnika da promeni korisničko ime/lozin
|
|||||||
adminUserSettings.submit=Sačuvaj korisnika
|
adminUserSettings.submit=Sačuvaj korisnika
|
||||||
adminUserSettings.changeUserRole=Promenite ulogu korisnika
|
adminUserSettings.changeUserRole=Promenite ulogu korisnika
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Vaš nalog je zaključan.
|
|||||||
login.signinTitle=Molimo vas da se prijavite
|
login.signinTitle=Molimo vas da se prijavite
|
||||||
login.ssoSignIn=Prijavite se putem jedinstvene prijave
|
login.ssoSignIn=Prijavite se putem jedinstvene prijave
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 automatsko kreiranje korisnika je onemogućeno
|
login.oauth2AutoCreateDisabled=OAUTH2 automatsko kreiranje korisnika je onemogućeno
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=Visina razmaka (Razmak između svakog vodenog žiga verti
|
|||||||
watermark.selectText.7=Opačitost (0% - 100%):
|
watermark.selectText.7=Opačitost (0% - 100%):
|
||||||
watermark.selectText.8=Tip vodenog žiga:
|
watermark.selectText.8=Tip vodenog žiga:
|
||||||
watermark.selectText.9=Slika vodenog žiga:
|
watermark.selectText.9=Slika vodenog žiga:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Dodaj vodeni žig
|
watermark.submit=Dodaj vodeni žig
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=User not found.
|
|||||||
incorrectPasswordMessage=Current password is incorrect.
|
incorrectPasswordMessage=Current password is incorrect.
|
||||||
usernameExistsMessage=New Username already exists.
|
usernameExistsMessage=New Username already exists.
|
||||||
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
invalidUsernameMessage=Invalid username, username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
downgradeCurrentUserMessage=Kan inte nedgradera nuvarande användares roll
|
downgradeCurrentUserMessage=Kan inte nedgradera nuvarande användares roll
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Kan inte nedgradera nuvarande användares roll. Därför kommer den aktuella användaren inte att visas.
|
downgradeCurrentUserLongMessage=Kan inte nedgradera nuvarande användares roll. Därför kommer den aktuella användaren inte att visas.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=User
|
|||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
adminUserSettings.deleteUser=Delete User
|
adminUserSettings.deleteUser=Delete User
|
||||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
adminUserSettings.usernameInfo=Username can only contain letters, numbers and the following special characters @._+- or must be a valid email address.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Force user to change password on login
|
|||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
adminUserSettings.changeUserRole=Ändra användarens roll
|
adminUserSettings.changeUserRole=Ändra användarens roll
|
||||||
adminUserSettings.authenticated=Authenticated
|
adminUserSettings.authenticated=Authenticated
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Book to PDF
|
|||||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Your account has been locked.
|
|||||||
login.signinTitle=Please sign in
|
login.signinTitle=Please sign in
|
||||||
login.ssoSignIn=Logga in via enkel inloggning
|
login.ssoSignIn=Logga in via enkel inloggning
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Auto-Create User inaktiverad
|
login.oauth2AutoCreateDisabled=OAUTH2 Auto-Create User inaktiverad
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Authorization request not found
|
login.oauth2RequestNotFound=Authorization request not found
|
||||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||||
login.oauth2invalidRequest=Invalid Request
|
login.oauth2invalidRequest=Invalid Request
|
||||||
login.oauth2AccessDenied=Access Denied
|
login.oauth2AccessDenied=Access Denied
|
||||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||||
login.oauth2InvalidIdToken=Invalid Id Token
|
login.oauth2InvalidIdToken=Invalid Id Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer (mellanrum mellan varje vattenstämpel verti
|
|||||||
watermark.selectText.7=Opacitet (0% - 100%):
|
watermark.selectText.7=Opacitet (0% - 100%):
|
||||||
watermark.selectText.8=Watermark Type:
|
watermark.selectText.8=Watermark Type:
|
||||||
watermark.selectText.9=Watermark Image:
|
watermark.selectText.9=Watermark Image:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Lägg till vattenstämpel
|
watermark.submit=Lägg till vattenstämpel
|
||||||
watermark.type.1=Text
|
watermark.type.1=Text
|
||||||
watermark.type.2=Image
|
watermark.type.2=Image
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Copy Stack Trace
|
|||||||
error.githubSubmit=GitHub - Submit a ticket
|
error.githubSubmit=GitHub - Submit a ticket
|
||||||
error.discordSubmit=Discord - Submit Support post
|
error.discordSubmit=Discord - Submit Support post
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=ไม่พบผู้ใช้
|
|||||||
incorrectPasswordMessage=รหัสผ่านปัจจุบันไม่ถูกต้อง
|
incorrectPasswordMessage=รหัสผ่านปัจจุบันไม่ถูกต้อง
|
||||||
usernameExistsMessage=ชื่อผู้ใช้ใหม่มีอยู่แล้ว
|
usernameExistsMessage=ชื่อผู้ใช้ใหม่มีอยู่แล้ว
|
||||||
invalidUsernameMessage=ชื่อผู้ใช้ไม่ถูกต้อง ชื่อผู้ใช้สามารถประกอบด้วยตัวอักษร ตัวเลข และอักขระพิเศษต่อไปนี้ @._+- หรือจะต้องเป็นที่อยู่อีเมลที่ถูกต้อง
|
invalidUsernameMessage=ชื่อผู้ใช้ไม่ถูกต้อง ชื่อผู้ใช้สามารถประกอบด้วยตัวอักษร ตัวเลข และอักขระพิเศษต่อไปนี้ @._+- หรือจะต้องเป็นที่อยู่อีเมลที่ถูกต้อง
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=รหัสผ่านใหม่และยืนยันรหัสผ่านใหม่ต้องตรงกัน
|
confirmPasswordErrorMessage=รหัสผ่านใหม่และยืนยันรหัสผ่านใหม่ต้องตรงกัน
|
||||||
deleteCurrentUserMessage=ไม่สามารถลบผู้ใช้ที่เข้าสู่ระบบในปัจจุบันได้
|
deleteCurrentUserMessage=ไม่สามารถลบผู้ใช้ที่เข้าสู่ระบบในปัจจุบันได้
|
||||||
deleteUsernameExistsMessage=ชื่อผู้ใช้ไม่ปรากฏและไม่สามารถลบได้
|
deleteUsernameExistsMessage=ชื่อผู้ใช้ไม่ปรากฏและไม่สามารถลบได้
|
||||||
downgradeCurrentUserMessage=ไม่สามารถลดระดับบทบาทของผู้ใช้ปัจจุบันได้
|
downgradeCurrentUserMessage=ไม่สามารถลดระดับบทบาทของผู้ใช้ปัจจุบันได้
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=ไม่สามารถลดระดับบทบาทของผู้ใช้ปัจจุบันได้ ดังนั้นผู้ใช้ปัจจุบันจะไม่ปรากฏ
|
downgradeCurrentUserLongMessage=ไม่สามารถลดระดับบทบาทของผู้ใช้ปัจจุบันได้ ดังนั้นผู้ใช้ปัจจุบันจะไม่ปรากฏ
|
||||||
userAlreadyExistsOAuthMessage=ผู้ใช้มีอยู่แล้วในฐานะผู้ใช้ OAuth2
|
userAlreadyExistsOAuthMessage=ผู้ใช้มีอยู่แล้วในฐานะผู้ใช้ OAuth2
|
||||||
userAlreadyExistsWebMessage=ผู้ใช้มีอยู่แล้วในฐานะผู้ใช้เว็บ
|
userAlreadyExistsWebMessage=ผู้ใช้มีอยู่แล้วในฐานะผู้ใช้เว็บ
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=ผู้ใช้
|
|||||||
adminUserSettings.addUser=เพิ่มผู้ใช้ใหม่
|
adminUserSettings.addUser=เพิ่มผู้ใช้ใหม่
|
||||||
adminUserSettings.deleteUser=ลบผู้ใช้
|
adminUserSettings.deleteUser=ลบผู้ใช้
|
||||||
adminUserSettings.confirmDeleteUser=ควรลบผู้ใช้นี้หรือไม่?
|
adminUserSettings.confirmDeleteUser=ควรลบผู้ใช้นี้หรือไม่?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=ชื่อผู้ใช้สามารถประกอบด้วยตัวอักษร ตัวเลข และอักขระพิเศษต่อไปนี้ @._+- หรือจะต้องเป็นที่อยู่อีเมลที่ถูกต้อง
|
adminUserSettings.usernameInfo=ชื่อผู้ใช้สามารถประกอบด้วยตัวอักษร ตัวเลข และอักขระพิเศษต่อไปนี้ @._+- หรือจะต้องเป็นที่อยู่อีเมลที่ถูกต้อง
|
||||||
adminUserSettings.roles=บทบาท
|
adminUserSettings.roles=บทบาท
|
||||||
adminUserSettings.role=บทบาท
|
adminUserSettings.role=บทบาท
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=บังคับให้ผู้ใช้เ
|
|||||||
adminUserSettings.submit=บันทึกผู้ใช้
|
adminUserSettings.submit=บันทึกผู้ใช้
|
||||||
adminUserSettings.changeUserRole=เปลี่ยนบทบาทของผู้ใช้
|
adminUserSettings.changeUserRole=เปลี่ยนบทบาทของผู้ใช้
|
||||||
adminUserSettings.authenticated=ได้รับการยืนยันแล้ว
|
adminUserSettings.authenticated=ได้รับการยืนยันแล้ว
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=การนำเข้า/ส่งออกฐานข้อมูล
|
database.title=การนำเข้า/ส่งออกฐานข้อมูล
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=หนังสือเป็น PDF
|
|||||||
home.BookToPDF.desc=แปลงรูปแบบหนังสือ/การ์ตูนเป็น PDF โดยใช้ Calibre
|
home.BookToPDF.desc=แปลงรูปแบบหนังสือ/การ์ตูนเป็น PDF โดยใช้ Calibre
|
||||||
BookToPDF.tags=หนังสือ, การ์ตูน, Calibre, แปลง, มังงะ, amazon, kindle
|
BookToPDF.tags=หนังสือ, การ์ตูน, Calibre, แปลง, มังงะ, amazon, kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=บัญชีของคุณถูกล็อค
|
|||||||
login.signinTitle=กรุณาลงชื่อเข้าใช้
|
login.signinTitle=กรุณาลงชื่อเข้าใช้
|
||||||
login.ssoSignIn=เข้าสู่ระบบด้วย Single Sign-on
|
login.ssoSignIn=เข้าสู่ระบบด้วย Single Sign-on
|
||||||
login.oauth2AutoCreateDisabled=การสร้างผู้ใช้ OAuth2 อัตโนมัติถูกปิดใช้งาน
|
login.oauth2AutoCreateDisabled=การสร้างผู้ใช้ OAuth2 อัตโนมัติถูกปิดใช้งาน
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=ไม่พบคำขอการอนุญาต
|
login.oauth2RequestNotFound=ไม่พบคำขอการอนุญาต
|
||||||
login.oauth2InvalidUserInfoResponse=การตอบกลับข้อมูลผู้ใช้ไม่ถูกต้อง
|
login.oauth2InvalidUserInfoResponse=การตอบกลับข้อมูลผู้ใช้ไม่ถูกต้อง
|
||||||
login.oauth2invalidRequest=คำขอไม่ถูกต้อง
|
login.oauth2invalidRequest=คำขอไม่ถูกต้อง
|
||||||
login.oauth2AccessDenied=การเข้าถึงถูกปฏิเสธ
|
login.oauth2AccessDenied=การเข้าถึงถูกปฏิเสธ
|
||||||
login.oauth2InvalidTokenResponse=การตอบกลับโทเค็นไม่ถูกต้อง
|
login.oauth2InvalidTokenResponse=การตอบกลับโทเค็นไม่ถูกต้อง
|
||||||
login.oauth2InvalidIdToken=โทเค็น Id ไม่ถูกต้อง
|
login.oauth2InvalidIdToken=โทเค็น Id ไม่ถูกต้อง
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -722,8 +706,8 @@ removeAnnotations.submit=ลบ
|
|||||||
#compare
|
#compare
|
||||||
compare.title=เปรียบเทียบ
|
compare.title=เปรียบเทียบ
|
||||||
compare.header=เปรียบเทียบ PDF
|
compare.header=เปรียบเทียบ PDF
|
||||||
compare.highlightColor.1=สีเน้น 1:
|
compare.highlightColor.1=สีเน้น 1:
|
||||||
compare.highlightColor.2=สีเน้น 2:
|
compare.highlightColor.2=สีเน้น 2:
|
||||||
compare.document.1=เอกสาร 1
|
compare.document.1=เอกสาร 1
|
||||||
compare.document.2=เอกสาร 2
|
compare.document.2=เอกสาร 2
|
||||||
compare.submit=เปรียบเทียบ
|
compare.submit=เปรียบเทียบ
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=ตัวเว้นระยะความสูง (
|
|||||||
watermark.selectText.7=ความทึบ (0% - 100%):
|
watermark.selectText.7=ความทึบ (0% - 100%):
|
||||||
watermark.selectText.8=ประเภทลายน้ำ:
|
watermark.selectText.8=ประเภทลายน้ำ:
|
||||||
watermark.selectText.9=ภาพลายน้ำ:
|
watermark.selectText.9=ภาพลายน้ำ:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=เพิ่มลายน้ำ
|
watermark.submit=เพิ่มลายน้ำ
|
||||||
watermark.type.1=ข้อความ
|
watermark.type.1=ข้อความ
|
||||||
watermark.type.2=ภาพ
|
watermark.type.2=ภาพ
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=คัดลอก Stack Trace
|
|||||||
error.githubSubmit=GitHub - ส่งตั๋ว
|
error.githubSubmit=GitHub - ส่งตั๋ว
|
||||||
error.discordSubmit=Discord - ส่งโพสต์การสนับสนุน
|
error.discordSubmit=Discord - ส่งโพสต์การสนับสนุน
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Kullanıcı bulunamadı.
|
|||||||
incorrectPasswordMessage=Mevcut şifre yanlış.
|
incorrectPasswordMessage=Mevcut şifre yanlış.
|
||||||
usernameExistsMessage=Yeni Kullanıcı Adı zaten var.
|
usernameExistsMessage=Yeni Kullanıcı Adı zaten var.
|
||||||
invalidUsernameMessage=Geçersiz kullanıcı adı, kullanıcı adı yalnızca harf, rakam ve aşağıdaki özel karakterleri @._+- içerebilir veya geçerli bir e-posta adresi olmalıdır.
|
invalidUsernameMessage=Geçersiz kullanıcı adı, kullanıcı adı yalnızca harf, rakam ve aşağıdaki özel karakterleri @._+- içerebilir veya geçerli bir e-posta adresi olmalıdır.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=Yeni Şifre ve Yeni Şifreyi Onayla eşleşmelidir.
|
confirmPasswordErrorMessage=Yeni Şifre ve Yeni Şifreyi Onayla eşleşmelidir.
|
||||||
deleteCurrentUserMessage=Şu anda oturum açmış olan kullanıcı silinemiyor.
|
deleteCurrentUserMessage=Şu anda oturum açmış olan kullanıcı silinemiyor.
|
||||||
deleteUsernameExistsMessage=Kullanıcı adı mevcut değil ve silinemez.
|
deleteUsernameExistsMessage=Kullanıcı adı mevcut değil ve silinemez.
|
||||||
downgradeCurrentUserMessage=Mevcut kullanıcının rolü düşürülemiyor
|
downgradeCurrentUserMessage=Mevcut kullanıcının rolü düşürülemiyor
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Mevcut kullanıcının rolü düşürülemiyor. Bu nedenle, mevcut kullanıcı gösterilmeyecektir.
|
downgradeCurrentUserLongMessage=Mevcut kullanıcının rolü düşürülemiyor. Bu nedenle, mevcut kullanıcı gösterilmeyecektir.
|
||||||
userAlreadyExistsOAuthMessage=Kullanıcı zaten bir OAuth2 kullanıcısı olarak mevcut.
|
userAlreadyExistsOAuthMessage=Kullanıcı zaten bir OAuth2 kullanıcısı olarak mevcut.
|
||||||
userAlreadyExistsWebMessage=Kullanıcı zaten bir web kullanıcısı olarak mevcut.
|
userAlreadyExistsWebMessage=Kullanıcı zaten bir web kullanıcısı olarak mevcut.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Kullanıcı
|
|||||||
adminUserSettings.addUser=Yeni Kullanıcı Ekle
|
adminUserSettings.addUser=Yeni Kullanıcı Ekle
|
||||||
adminUserSettings.deleteUser=Kullanıcı Sil
|
adminUserSettings.deleteUser=Kullanıcı Sil
|
||||||
adminUserSettings.confirmDeleteUser=Kullanıcı silinsin mi?
|
adminUserSettings.confirmDeleteUser=Kullanıcı silinsin mi?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Kullanıcı adı yalnızca harf, rakam ve aşağıdaki özel karakterleri @._+- içerebilir veya geçerli bir e-posta adresi olmalıdır.
|
adminUserSettings.usernameInfo=Kullanıcı adı yalnızca harf, rakam ve aşağıdaki özel karakterleri @._+- içerebilir veya geçerli bir e-posta adresi olmalıdır.
|
||||||
adminUserSettings.roles=Roller
|
adminUserSettings.roles=Roller
|
||||||
adminUserSettings.role=Rol
|
adminUserSettings.role=Rol
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Kullanıcının girişte kullanıcı adı/şifre d
|
|||||||
adminUserSettings.submit=Kullanıcıyı Kaydet
|
adminUserSettings.submit=Kullanıcıyı Kaydet
|
||||||
adminUserSettings.changeUserRole=Kullanıcı rolünü değiştir
|
adminUserSettings.changeUserRole=Kullanıcı rolünü değiştir
|
||||||
adminUserSettings.authenticated=Onaylandı
|
adminUserSettings.authenticated=Onaylandı
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Veri Tabanını İçe/Dışa Aktar
|
database.title=Veri Tabanını İçe/Dışa Aktar
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Kitaptan PDF'ye
|
|||||||
home.BookToPDF.desc=calibre kullanarak Kitap/Karikatür formatlarını PDF'ye dönüştürür
|
home.BookToPDF.desc=calibre kullanarak Kitap/Karikatür formatlarını PDF'ye dönüştürür
|
||||||
BookToPDF.tags=Kitap,Çizgi Roman,Calibre,Dönüştür,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
BookToPDF.tags=Kitap,Çizgi Roman,Calibre,Dönüştür,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Hesabınız kilitlendi.
|
|||||||
login.signinTitle=Lütfen giriş yapınız.
|
login.signinTitle=Lütfen giriş yapınız.
|
||||||
login.ssoSignIn=Tek Oturum Açma ile Giriş Yap
|
login.ssoSignIn=Tek Oturum Açma ile Giriş Yap
|
||||||
login.oauth2AutoCreateDisabled=OAUTH2 Otomatik Oluşturma Kullanıcı Devre Dışı Bırakıldı
|
login.oauth2AutoCreateDisabled=OAUTH2 Otomatik Oluşturma Kullanıcı Devre Dışı Bırakıldı
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Yetkilendirme isteği bulunamadı
|
login.oauth2RequestNotFound=Yetkilendirme isteği bulunamadı
|
||||||
login.oauth2InvalidUserInfoResponse=Geçersiz Kullanıcı Bilgisi Yanıtı
|
login.oauth2InvalidUserInfoResponse=Geçersiz Kullanıcı Bilgisi Yanıtı
|
||||||
login.oauth2invalidRequest=Geçersiz İstek
|
login.oauth2invalidRequest=Geçersiz İstek
|
||||||
login.oauth2AccessDenied=Erişim Reddedildi
|
login.oauth2AccessDenied=Erişim Reddedildi
|
||||||
login.oauth2InvalidTokenResponse=Geçersiz Belirteç Yanıtı
|
login.oauth2InvalidTokenResponse=Geçersiz Belirteç Yanıtı
|
||||||
login.oauth2InvalidIdToken=Geçersiz Kimlik Belirteci
|
login.oauth2InvalidIdToken=Geçersiz Kimlik Belirteci
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -722,8 +706,8 @@ removeAnnotations.submit=Kaldır
|
|||||||
#compare
|
#compare
|
||||||
compare.title=Karşılaştır
|
compare.title=Karşılaştır
|
||||||
compare.header=PDF'leri Karşılaştır
|
compare.header=PDF'leri Karşılaştır
|
||||||
compare.highlightColor.1=Vurgu Rengi 1:
|
compare.highlightColor.1=Vurgu Rengi 1:
|
||||||
compare.highlightColor.2=Vurgu Rengi 2:
|
compare.highlightColor.2=Vurgu Rengi 2:
|
||||||
compare.document.1=Belge 1
|
compare.document.1=Belge 1
|
||||||
compare.document.2=Belge 2
|
compare.document.2=Belge 2
|
||||||
compare.submit=Karşılaştır
|
compare.submit=Karşılaştır
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=yükseklikBoşluk (Dikeyde her filigran arasında boşluk
|
|||||||
watermark.selectText.7=Opaklık (0% - 100%):
|
watermark.selectText.7=Opaklık (0% - 100%):
|
||||||
watermark.selectText.8=Filigran Türü:
|
watermark.selectText.8=Filigran Türü:
|
||||||
watermark.selectText.9=Filigran Resmi:
|
watermark.selectText.9=Filigran Resmi:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Filigran Ekle
|
watermark.submit=Filigran Ekle
|
||||||
watermark.type.1=Metin
|
watermark.type.1=Metin
|
||||||
watermark.type.2=Resim
|
watermark.type.2=Resim
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Yığın İzini Kopyala
|
|||||||
error.githubSubmit=GitHub - Hata gönderin
|
error.githubSubmit=GitHub - Hata gönderin
|
||||||
error.discordSubmit=Discord - Destek gönderisi gönderin
|
error.discordSubmit=Discord - Destek gönderisi gönderin
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=Користувача не знайдено.
|
|||||||
incorrectPasswordMessage=Поточний пароль невірний.
|
incorrectPasswordMessage=Поточний пароль невірний.
|
||||||
usernameExistsMessage=Нове ім'я користувача вже існує.
|
usernameExistsMessage=Нове ім'я користувача вже існує.
|
||||||
invalidUsernameMessage=Недійсне ім’я користувача, ім’я користувача може містити лише літери, цифри та наступні спеціальні символи @._+- або має бути дійсною електронною адресою.
|
invalidUsernameMessage=Недійсне ім’я користувача, ім’я користувача може містити лише літери, цифри та наступні спеціальні символи @._+- або має бути дійсною електронною адресою.
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
confirmPasswordErrorMessage=New Password and Confirm New Password must match.
|
||||||
deleteCurrentUserMessage=Неможливо видалити користувача, який увійшов в систему.
|
deleteCurrentUserMessage=Неможливо видалити користувача, який увійшов в систему.
|
||||||
deleteUsernameExistsMessage=Ім'я користувача не існує і не може бути видалено.
|
deleteUsernameExistsMessage=Ім'я користувача не існує і не може бути видалено.
|
||||||
downgradeCurrentUserMessage=Неможливо понизити роль поточного користувача
|
downgradeCurrentUserMessage=Неможливо понизити роль поточного користувача
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=Неможливо понизити роль поточного користувача. Отже, поточний користувач не відображатиметься.
|
downgradeCurrentUserLongMessage=Неможливо понизити роль поточного користувача. Отже, поточний користувач не відображатиметься.
|
||||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=Користувач
|
|||||||
adminUserSettings.addUser=Додати нового користувача
|
adminUserSettings.addUser=Додати нового користувача
|
||||||
adminUserSettings.deleteUser=Видалити користувача
|
adminUserSettings.deleteUser=Видалити користувача
|
||||||
adminUserSettings.confirmDeleteUser=Видалити цього користувача?
|
adminUserSettings.confirmDeleteUser=Видалити цього користувача?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=Ім’я користувача може містити лише літери, цифри та наступні спеціальні символи @._+- або має бути дійсною електронною адресою.
|
adminUserSettings.usernameInfo=Ім’я користувача може містити лише літери, цифри та наступні спеціальні символи @._+- або має бути дійсною електронною адресою.
|
||||||
adminUserSettings.roles=Ролі
|
adminUserSettings.roles=Ролі
|
||||||
adminUserSettings.role=Роль
|
adminUserSettings.role=Роль
|
||||||
@@ -193,13 +190,6 @@ adminUserSettings.forceChange=Примусити користувача змін
|
|||||||
adminUserSettings.submit=Зберегти користувача
|
adminUserSettings.submit=Зберегти користувача
|
||||||
adminUserSettings.changeUserRole=Змінити роль користувача
|
adminUserSettings.changeUserRole=Змінити роль користувача
|
||||||
adminUserSettings.authenticated=Автентифіковано
|
adminUserSettings.authenticated=Автентифіковано
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=Database Import/Export
|
database.title=Database Import/Export
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=Книга у PDF
|
|||||||
home.BookToPDF.desc=Конвертує формати книги/комікса у PDF за допомогою calibre
|
home.BookToPDF.desc=Конвертує формати книги/комікса у PDF за допомогою calibre
|
||||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=Ваш обліковий запис заблоковано.
|
|||||||
login.signinTitle=Будь ласка, увійдіть
|
login.signinTitle=Будь ласка, увійдіть
|
||||||
login.ssoSignIn=Увійти через єдиний вхід
|
login.ssoSignIn=Увійти через єдиний вхід
|
||||||
login.oauth2AutoCreateDisabled=Автоматичне створення користувача OAUTH2 ВИМКНЕНО
|
login.oauth2AutoCreateDisabled=Автоматичне створення користувача OAUTH2 ВИМКНЕНО
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=Запит на авторизація не знайдено
|
login.oauth2RequestNotFound=Запит на авторизація не знайдено
|
||||||
login.oauth2InvalidUserInfoResponse=Недійсна відповідь з інформацією користувача
|
login.oauth2InvalidUserInfoResponse=Недійсна відповідь з інформацією користувача
|
||||||
login.oauth2invalidRequest=Недійсний запит
|
login.oauth2invalidRequest=Недійсний запит
|
||||||
login.oauth2AccessDenied=Доступ заблоковано
|
login.oauth2AccessDenied=Доступ заблоковано
|
||||||
login.oauth2InvalidTokenResponse=Недійсна відповідь з токеном
|
login.oauth2InvalidTokenResponse=Недійсна відповідь з токеном
|
||||||
login.oauth2InvalidIdToken=Недійсний Id токен
|
login.oauth2InvalidIdToken=Недійсний Id токен
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer (проміжок між кожним вод
|
|||||||
watermark.selectText.7=Непрозорість (0% - 100%):
|
watermark.selectText.7=Непрозорість (0% - 100%):
|
||||||
watermark.selectText.8=Тип водяного знаку:
|
watermark.selectText.8=Тип водяного знаку:
|
||||||
watermark.selectText.9=Зображення водяного знаку:
|
watermark.selectText.9=Зображення водяного знаку:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=Додати водяний знак
|
watermark.submit=Додати водяний знак
|
||||||
watermark.type.1=Текст
|
watermark.type.1=Текст
|
||||||
watermark.type.2=Зображення
|
watermark.type.2=Зображення
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=Скопіювати стек викликів
|
|||||||
error.githubSubmit=GitHub - Надіслати запит
|
error.githubSubmit=GitHub - Надіслати запит
|
||||||
error.discordSubmit=Discord - Надіслати повідомлення підтримки
|
error.discordSubmit=Discord - Надіслати повідомлення підтримки
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -55,12 +55,10 @@ userNotFoundMessage=未找到用户。
|
|||||||
incorrectPasswordMessage=当前密码不正确。
|
incorrectPasswordMessage=当前密码不正确。
|
||||||
usernameExistsMessage=新用户名已存在。
|
usernameExistsMessage=新用户名已存在。
|
||||||
invalidUsernameMessage=用户名无效,用户名只能包含字母、数字和以下特殊字符@._+- 或必须是有效的电子邮件地址。
|
invalidUsernameMessage=用户名无效,用户名只能包含字母、数字和以下特殊字符@._+- 或必须是有效的电子邮件地址。
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=两次密码不一致。
|
confirmPasswordErrorMessage=两次密码不一致。
|
||||||
deleteCurrentUserMessage=无法删除当前登录的用户。
|
deleteCurrentUserMessage=无法删除当前登录的用户。
|
||||||
deleteUsernameExistsMessage=用户名不存在,无法删除。
|
deleteUsernameExistsMessage=用户名不存在,无法删除。
|
||||||
downgradeCurrentUserMessage=无法降级当前用户的角色
|
downgradeCurrentUserMessage=无法降级当前用户的角色
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=无法降级当前用户的角色。因此,当前用户将不会显示。
|
downgradeCurrentUserLongMessage=无法降级当前用户的角色。因此,当前用户将不会显示。
|
||||||
userAlreadyExistsOAuthMessage=该用户已作为OAuth2用户存在。
|
userAlreadyExistsOAuthMessage=该用户已作为OAuth2用户存在。
|
||||||
userAlreadyExistsWebMessage=该用户已作为Web用户存在。
|
userAlreadyExistsWebMessage=该用户已作为Web用户存在。
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=用户
|
|||||||
adminUserSettings.addUser=添加新用户
|
adminUserSettings.addUser=添加新用户
|
||||||
adminUserSettings.deleteUser=删除用户
|
adminUserSettings.deleteUser=删除用户
|
||||||
adminUserSettings.confirmDeleteUser=确认删除该用户?
|
adminUserSettings.confirmDeleteUser=确认删除该用户?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=用户名只能包含字母、数字和以下特殊字符@._+-,或者必须是有效的电子邮件地址。
|
adminUserSettings.usernameInfo=用户名只能包含字母、数字和以下特殊字符@._+-,或者必须是有效的电子邮件地址。
|
||||||
adminUserSettings.roles=角色
|
adminUserSettings.roles=角色
|
||||||
adminUserSettings.role=角色
|
adminUserSettings.role=角色
|
||||||
@@ -193,30 +190,23 @@ adminUserSettings.forceChange=强制用户在登录时更改用户名/密码
|
|||||||
adminUserSettings.submit=保存用户
|
adminUserSettings.submit=保存用户
|
||||||
adminUserSettings.changeUserRole=更改用户角色
|
adminUserSettings.changeUserRole=更改用户角色
|
||||||
adminUserSettings.authenticated=已验证
|
adminUserSettings.authenticated=已验证
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=数据库 导入/导出
|
database.title=Database Import/Export
|
||||||
database.header=数据库 导入/导出
|
database.header=Database Import/Export
|
||||||
database.fileName=文件名
|
database.fileName=File Name
|
||||||
database.creationDate=创建时间
|
database.creationDate=Creation Date
|
||||||
database.fileSize=文件大小
|
database.fileSize=File Size
|
||||||
database.deleteBackupFile=删除备份文件
|
database.deleteBackupFile=Delete Backup File
|
||||||
database.importBackupFile=导入备份文件
|
database.importBackupFile=Import Backup File
|
||||||
database.downloadBackupFile=下载备份文件
|
database.downloadBackupFile=Download Backup File
|
||||||
database.info_1=导入数据时,确保结构正确至关重要。如果您不确定自己在做什么,请寻求专业人士的建议和支持。结构错误会导致应用程序故障,甚至完全无法运行应用程序。
|
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||||
database.info_2=上传文件时,文件名并不重要。上传后,文件名将重命名为 backup_user_yyyyMMddHHmm.sql,以确保命名规范的一致性。
|
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||||
database.submit=导入备份
|
database.submit=Import Backup
|
||||||
database.importIntoDatabaseSuccessed=导入数据库成功
|
database.importIntoDatabaseSuccessed=Import into database successed
|
||||||
database.fileNotFound=未找到文件
|
database.fileNotFound=File not Found
|
||||||
database.fileNullOrEmpty=文件不能为空
|
database.fileNullOrEmpty=File must not be null or empty
|
||||||
database.failedImportFile=导入文件失败
|
database.failedImportFile=Failed Import File
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# HOME-PAGE #
|
# HOME-PAGE #
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=电子书转PDF
|
|||||||
home.BookToPDF.desc=使用Calibre将电子书/漫画转换成PDF
|
home.BookToPDF.desc=使用Calibre将电子书/漫画转换成PDF
|
||||||
BookToPDF.tags=电子书、漫画、Calibre、转换、日本漫画、亚马逊、kindle
|
BookToPDF.tags=电子书、漫画、Calibre、转换、日本漫画、亚马逊、kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -491,14 +477,12 @@ login.locked=您的账户已被锁定。
|
|||||||
login.signinTitle=请登录
|
login.signinTitle=请登录
|
||||||
login.ssoSignIn=通过单点登录登录
|
login.ssoSignIn=通过单点登录登录
|
||||||
login.oauth2AutoCreateDisabled=OAuth2自动创建用户已禁用
|
login.oauth2AutoCreateDisabled=OAuth2自动创建用户已禁用
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=找不到验证请求
|
login.oauth2RequestNotFound=找不到验证请求
|
||||||
login.oauth2InvalidUserInfoResponse=无效的用户信息响应
|
login.oauth2InvalidUserInfoResponse=无效的用户信息响应
|
||||||
login.oauth2invalidRequest=无效请求
|
login.oauth2invalidRequest=无效请求
|
||||||
login.oauth2AccessDenied=拒绝访问
|
login.oauth2AccessDenied=拒绝访问
|
||||||
login.oauth2InvalidTokenResponse=无效的Token响应
|
login.oauth2InvalidTokenResponse=无效的Token响应
|
||||||
login.oauth2InvalidIdToken=无效的Token
|
login.oauth2InvalidIdToken=无效的Token
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=垂直间距(每个水印之间的垂直距离):
|
|||||||
watermark.selectText.7=透明度(0% - 100%):
|
watermark.selectText.7=透明度(0% - 100%):
|
||||||
watermark.selectText.8=水印类型:
|
watermark.selectText.8=水印类型:
|
||||||
watermark.selectText.9=水印图片:
|
watermark.selectText.9=水印图片:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=添加水印
|
watermark.submit=添加水印
|
||||||
watermark.type.1=文字
|
watermark.type.1=文字
|
||||||
watermark.type.2=图片
|
watermark.type.2=图片
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=复制堆栈跟踪
|
|||||||
error.githubSubmit=GitHub - 提交工单
|
error.githubSubmit=GitHub - 提交工单
|
||||||
error.discordSubmit=Discord - 提交支持帖子
|
error.discordSubmit=Discord - 提交支持帖子
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ multiPdfPrompt=選擇多個 PDF 檔案
|
|||||||
multiPdfDropPrompt=選擇(或拖放)所有需要的 PDF 檔案
|
multiPdfDropPrompt=選擇(或拖放)所有需要的 PDF 檔案
|
||||||
imgPrompt=選擇圖片
|
imgPrompt=選擇圖片
|
||||||
genericSubmit=送出
|
genericSubmit=送出
|
||||||
processTimeWarning=警告:此過程可能長達一分鐘,具體取決於檔案大小
|
processTimeWarning=警告:此過程可能需要長達一分鐘,具體取決於檔案大小
|
||||||
pageOrderPrompt=自訂頁面順序(輸入以逗號分隔的頁碼或函式,如 2n+1):
|
pageOrderPrompt=自訂頁面順序(輸入以逗號分隔的頁碼或函式,如 2n+1):
|
||||||
pageSelectionPrompt=自訂頁面選擇(輸入以逗號分隔的頁碼 1、5、6 或 2n+1 等函數的清單):
|
pageSelectionPrompt=自訂頁面選擇(輸入以逗號分隔的頁碼 1、5、6 或 2n+1 等函數的清單):
|
||||||
goToPage=前往
|
goToPage=前往
|
||||||
@@ -55,12 +55,10 @@ userNotFoundMessage=找不到使用者。
|
|||||||
incorrectPasswordMessage=目前密碼不正確。
|
incorrectPasswordMessage=目前密碼不正確。
|
||||||
usernameExistsMessage=新使用者名稱已存在。
|
usernameExistsMessage=新使用者名稱已存在。
|
||||||
invalidUsernameMessage=使用者名稱無效,使用者名稱只能包含字母、數字和以下特殊字元 @._+- 或必須是有效的電子郵件地址。
|
invalidUsernameMessage=使用者名稱無效,使用者名稱只能包含字母、數字和以下特殊字元 @._+- 或必須是有效的電子郵件地址。
|
||||||
invalidPasswordMessage=The password must not be empty and must not have spaces at the beginning or end.
|
|
||||||
confirmPasswordErrorMessage=輸入的密碼必需和確認密碼相同。
|
confirmPasswordErrorMessage=輸入的密碼必需和確認密碼相同。
|
||||||
deleteCurrentUserMessage=無法刪除目前登錄的使用者。
|
deleteCurrentUserMessage=無法刪除目前登錄的使用者。
|
||||||
deleteUsernameExistsMessage=使用者名不存在,無法刪除。
|
deleteUsernameExistsMessage=使用者名不存在,無法刪除。
|
||||||
downgradeCurrentUserMessage=無法降級目前使用者的角色
|
downgradeCurrentUserMessage=無法降級目前使用者的角色
|
||||||
disabledCurrentUserMessage=The current user cannot be disabled
|
|
||||||
downgradeCurrentUserLongMessage=無法降級目前使用者的角色。因此,不會顯示目前的使用者。
|
downgradeCurrentUserLongMessage=無法降級目前使用者的角色。因此,不會顯示目前的使用者。
|
||||||
userAlreadyExistsOAuthMessage=該使用者已於 OAuth2 註冊。
|
userAlreadyExistsOAuthMessage=該使用者已於 OAuth2 註冊。
|
||||||
userAlreadyExistsWebMessage=該使用者已於網頁註冊。
|
userAlreadyExistsWebMessage=該使用者已於網頁註冊。
|
||||||
@@ -68,7 +66,7 @@ error=錯誤
|
|||||||
oops=哎呀!
|
oops=哎呀!
|
||||||
help=幫助
|
help=幫助
|
||||||
goHomepage=前往首頁
|
goHomepage=前往首頁
|
||||||
joinDiscord=加入我們的 Discord 伺服器
|
joinDiscord=加入我們的 Discord 服務器
|
||||||
seeDockerHub=查看 Docker Hub
|
seeDockerHub=查看 Docker Hub
|
||||||
visitGithub=訪問 GitHub 存儲庫
|
visitGithub=訪問 GitHub 存儲庫
|
||||||
donate=捐贈
|
donate=捐贈
|
||||||
@@ -110,7 +108,7 @@ pipelineOptions.validateButton=驗證
|
|||||||
# NAVBAR #
|
# NAVBAR #
|
||||||
#############
|
#############
|
||||||
navbar.favorite=我的最愛
|
navbar.favorite=我的最愛
|
||||||
navbar.darkmode=深色模式
|
navbar.darkmode=暗黑模式
|
||||||
navbar.language=語言
|
navbar.language=語言
|
||||||
navbar.settings=設定
|
navbar.settings=設定
|
||||||
navbar.allTools=工具
|
navbar.allTools=工具
|
||||||
@@ -127,7 +125,7 @@ navbar.sections.edit=檢視與編輯
|
|||||||
#############
|
#############
|
||||||
settings.title=設定
|
settings.title=設定
|
||||||
settings.update=有更新可用
|
settings.update=有更新可用
|
||||||
settings.updateAvailable=當前版本為 {0}。歡迎你更新至最新版 ({1})。。
|
settings.updateAvailable=當前版本為 {0}。歡迎您更新至最新版 ({1})。。
|
||||||
settings.appVersion=應用版本:
|
settings.appVersion=應用版本:
|
||||||
settings.downloadOption.title=選擇下載選項(對於單一檔案非壓縮下載):
|
settings.downloadOption.title=選擇下載選項(對於單一檔案非壓縮下載):
|
||||||
settings.downloadOption.1=在同一視窗中開啟
|
settings.downloadOption.1=在同一視窗中開啟
|
||||||
@@ -141,8 +139,8 @@ settings.cacheInputs.name=輸入檔案下載
|
|||||||
settings.cacheInputs.help=開啟記住先前的輸入,做為日後使用
|
settings.cacheInputs.help=開啟記住先前的輸入,做為日後使用
|
||||||
|
|
||||||
changeCreds.title=變更憑證
|
changeCreds.title=變更憑證
|
||||||
changeCreds.header=更新你的帳戶詳細資訊
|
changeCreds.header=更新您的帳戶詳細資訊
|
||||||
changeCreds.changePassword=你使用的是預設登錄認證。請輸入新密碼
|
changeCreds.changePassword=您使用的是預設登錄認證。請輸入新密碼
|
||||||
changeCreds.newUsername=新使用者名稱
|
changeCreds.newUsername=新使用者名稱
|
||||||
changeCreds.oldPassword=目前密碼
|
changeCreds.oldPassword=目前密碼
|
||||||
changeCreds.newPassword=新密碼
|
changeCreds.newPassword=新密碼
|
||||||
@@ -163,7 +161,7 @@ account.newPassword=新密碼
|
|||||||
account.changePassword=修改密碼
|
account.changePassword=修改密碼
|
||||||
account.confirmNewPassword=確認新密碼
|
account.confirmNewPassword=確認新密碼
|
||||||
account.signOut=登出
|
account.signOut=登出
|
||||||
account.yourApiKey=你的 API 金鑰
|
account.yourApiKey=您的 API 金鑰
|
||||||
account.syncTitle=將瀏覽器設定與帳戶同步
|
account.syncTitle=將瀏覽器設定與帳戶同步
|
||||||
account.settingsCompare=設定比較:
|
account.settingsCompare=設定比較:
|
||||||
account.property=屬性
|
account.property=屬性
|
||||||
@@ -179,7 +177,6 @@ adminUserSettings.user=使用者
|
|||||||
adminUserSettings.addUser=新增使用者
|
adminUserSettings.addUser=新增使用者
|
||||||
adminUserSettings.deleteUser=刪除使用者
|
adminUserSettings.deleteUser=刪除使用者
|
||||||
adminUserSettings.confirmDeleteUser=確認刪除該使用者?
|
adminUserSettings.confirmDeleteUser=確認刪除該使用者?
|
||||||
adminUserSettings.confirmChangeUserStatus=Should the user be disabled/enabled?
|
|
||||||
adminUserSettings.usernameInfo=使用者名稱只能包含字母、數字和以下特殊字元 @._+-,或必須是有效的電子郵件地址。
|
adminUserSettings.usernameInfo=使用者名稱只能包含字母、數字和以下特殊字元 @._+-,或必須是有效的電子郵件地址。
|
||||||
adminUserSettings.roles=角色
|
adminUserSettings.roles=角色
|
||||||
adminUserSettings.role=角色
|
adminUserSettings.role=角色
|
||||||
@@ -193,35 +190,28 @@ adminUserSettings.forceChange=強制使用者在登入時修改使用者名稱/
|
|||||||
adminUserSettings.submit=儲存
|
adminUserSettings.submit=儲存
|
||||||
adminUserSettings.changeUserRole=更改使用者身份
|
adminUserSettings.changeUserRole=更改使用者身份
|
||||||
adminUserSettings.authenticated=已驗證
|
adminUserSettings.authenticated=已驗證
|
||||||
adminUserSettings.editOwnProfil=Edit own profile
|
|
||||||
adminUserSettings.enabledUser=enabled user
|
|
||||||
adminUserSettings.disabledUser=disabled user
|
|
||||||
adminUserSettings.activeUsers=Active Users:
|
|
||||||
adminUserSettings.disabledUsers=Disabled Users:
|
|
||||||
adminUserSettings.totalUsers=Total Users:
|
|
||||||
adminUserSettings.lastRequest=Last Request
|
|
||||||
|
|
||||||
|
|
||||||
database.title=資料庫匯入/匯出
|
database.title=Database Import/Export
|
||||||
database.header=資料庫匯入/匯出
|
database.header=Database Import/Export
|
||||||
database.fileName=檔案名稱
|
database.fileName=File Name
|
||||||
database.creationDate=建立日期
|
database.creationDate=Creation Date
|
||||||
database.fileSize=檔案大小
|
database.fileSize=File Size
|
||||||
database.deleteBackupFile=刪除備份檔案
|
database.deleteBackupFile=Delete Backup File
|
||||||
database.importBackupFile=匯入備份檔案
|
database.importBackupFile=Import Backup File
|
||||||
database.downloadBackupFile=下載備份檔案
|
database.downloadBackupFile=Download Backup File
|
||||||
database.info_1=在匯入資料時,確保正確的結構是至關重要的。如果你不確定自己在做什麼,請尋求專業人士的建議和支持。結構錯誤可能會導致應用程式故障,甚至完全無法運行。
|
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||||
database.info_2=上傳時檔案名稱無關緊要。上傳後將重新命名為 backup_user_yyyyMMddHHmm.sql 格式,以確保命名規範一致。
|
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||||
database.submit=匯入備份
|
database.submit=Import Backup
|
||||||
database.importIntoDatabaseSuccessed=成功匯入資料庫
|
database.importIntoDatabaseSuccessed=Import into database successed
|
||||||
database.fileNotFound=檔案未找到
|
database.fileNotFound=File not Found
|
||||||
database.fileNullOrEmpty=檔案不能為空或空白
|
database.fileNullOrEmpty=File must not be null or empty
|
||||||
database.failedImportFile=匯入檔案失敗
|
database.failedImportFile=Failed Import File
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# HOME-PAGE #
|
# HOME-PAGE #
|
||||||
#############
|
#############
|
||||||
home.desc=你的本地主機一站式 PDF 需求解決方案。
|
home.desc=您的本地主機一站式 PDF 需求解決方案。
|
||||||
home.searchBar=搜尋功能...
|
home.searchBar=搜尋功能...
|
||||||
|
|
||||||
|
|
||||||
@@ -242,7 +232,7 @@ home.split.desc=將 PDF 分割為多個文件
|
|||||||
split.tags=頁面操作,劃分,多頁,剪下,伺服器端
|
split.tags=頁面操作,劃分,多頁,剪下,伺服器端
|
||||||
|
|
||||||
home.rotate.title=旋轉
|
home.rotate.title=旋轉
|
||||||
home.rotate.desc=輕鬆旋轉你的 PDF。
|
home.rotate.desc=輕鬆旋轉您的 PDF。
|
||||||
rotate.tags=伺服器端
|
rotate.tags=伺服器端
|
||||||
|
|
||||||
|
|
||||||
@@ -264,24 +254,24 @@ home.addImage.desc=在 PDF 的指定位置新增圖片
|
|||||||
addImage.tags=img,jpg,圖片,照片
|
addImage.tags=img,jpg,圖片,照片
|
||||||
|
|
||||||
home.watermark.title=新增浮水印
|
home.watermark.title=新增浮水印
|
||||||
home.watermark.desc=在你的 PDF 檔案中新增自訂浮水印。
|
home.watermark.desc=在您的 PDF 檔案中新增自訂浮水印。
|
||||||
watermark.tags=文字,重複,標籤,自有,版權,商標,img,jpg,圖片,照片
|
watermark.tags=文字,重複,標籤,自有,版權,商標,img,jpg,圖片,照片
|
||||||
|
|
||||||
home.permissions.title=修改權限
|
home.permissions.title=修改權限
|
||||||
home.permissions.desc=修改你的 PDF 檔案權限
|
home.permissions.desc=修改您的 PDF 檔案權限
|
||||||
permissions.tags=讀取,寫入,編輯,列印
|
permissions.tags=讀取,寫入,編輯,列印
|
||||||
|
|
||||||
|
|
||||||
home.removePages.title=移除
|
home.removePages.title=移除
|
||||||
home.removePages.desc=從你的 PDF 檔案中刪除不需要的頁面。
|
home.removePages.desc=從您的 PDF 檔案中刪除不需要的頁面。
|
||||||
removePages.tags=移除頁面,刪除頁面
|
removePages.tags=移除頁面,刪除頁面
|
||||||
|
|
||||||
home.addPassword.title=新增密碼
|
home.addPassword.title=新增密碼
|
||||||
home.addPassword.desc=用密碼加密你的 PDF 檔案。
|
home.addPassword.desc=用密碼加密您的 PDF 檔案。
|
||||||
addPassword.tags=安全,安全性
|
addPassword.tags=安全,安全性
|
||||||
|
|
||||||
home.removePassword.title=移除密碼
|
home.removePassword.title=移除密碼
|
||||||
home.removePassword.desc=從你的 PDF 檔案中移除密碼保護。
|
home.removePassword.desc=從您的 PDF 檔案中移除密碼保護。
|
||||||
removePassword.tags=安全,解密,安全性,取消密碼,刪除密碼
|
removePassword.tags=安全,解密,安全性,取消密碼,刪除密碼
|
||||||
|
|
||||||
home.compressPdfs.title=壓縮
|
home.compressPdfs.title=壓縮
|
||||||
@@ -471,10 +461,6 @@ home.BookToPDF.title=電子書轉 PDF
|
|||||||
home.BookToPDF.desc=使用 calibre 將書籍/漫畫格式轉換為 PDF
|
home.BookToPDF.desc=使用 calibre 將書籍/漫畫格式轉換為 PDF
|
||||||
BookToPDF.tags=電子書,漫畫,Calibre,轉換,日本漫畫,亞馬遜,kindle
|
BookToPDF.tags=電子書,漫畫,Calibre,轉換,日本漫畫,亞馬遜,kindle
|
||||||
|
|
||||||
home.removeImagePdf.title=Remove image
|
|
||||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
|
||||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
@@ -487,18 +473,16 @@ login.header=登入
|
|||||||
login.signin=登入
|
login.signin=登入
|
||||||
login.rememberme=記住我
|
login.rememberme=記住我
|
||||||
login.invalid=使用者名稱或密碼無效。
|
login.invalid=使用者名稱或密碼無效。
|
||||||
login.locked=你的帳戶已被鎖定。
|
login.locked=您的帳戶已被鎖定。
|
||||||
login.signinTitle=請登入
|
login.signinTitle=請登入
|
||||||
login.ssoSignIn=透過織網單一簽入
|
login.ssoSignIn=透過織網單一簽入
|
||||||
login.oauth2AutoCreateDisabled=OAuth 2.0 自動建立使用者已停用
|
login.oauth2AutoCreateDisabled=OAuth 2.0 自動建立使用者已停用
|
||||||
login.oauth2AdminBlockedUser=Registration or logging in of non-registered users is currently blocked. Please contact the administrator.
|
|
||||||
login.oauth2RequestNotFound=找不到驗證請求
|
login.oauth2RequestNotFound=找不到驗證請求
|
||||||
login.oauth2InvalidUserInfoResponse=無效的使用者資訊回應
|
login.oauth2InvalidUserInfoResponse=無效的使用者資訊回應
|
||||||
login.oauth2invalidRequest=無效的回應
|
login.oauth2invalidRequest=無效的回應
|
||||||
login.oauth2AccessDenied=存取被拒
|
login.oauth2AccessDenied=存取被拒
|
||||||
login.oauth2InvalidTokenResponse=無效的 Token 回應
|
login.oauth2InvalidTokenResponse=無效的 Token 回應
|
||||||
login.oauth2InvalidIdToken=無效的 Tokne
|
login.oauth2InvalidIdToken=無效的 Tokne
|
||||||
login.userIsDisabled=User is deactivated, login is currently blocked with this username. Please contact the administrator.
|
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -680,15 +664,15 @@ scalePages.submit=送出
|
|||||||
|
|
||||||
#certSign
|
#certSign
|
||||||
certSign.title=憑證簽章
|
certSign.title=憑證簽章
|
||||||
certSign.header=使用你的憑證簽章(進行中)
|
certSign.header=使用您的憑證簽章(進行中)
|
||||||
certSign.selectPDF=選擇要簽章的 PDF 檔案:
|
certSign.selectPDF=選擇要簽章的 PDF 檔案:
|
||||||
certSign.jksNote=注意:如果你的證書類型未在下面列出,請使用 keytool 命令行工具將其轉換為 Java Keystore (.jks) 檔。 然後,選擇下面的 .jks 文件選項。
|
certSign.jksNote=注意:如果您的證書類型未在下面列出,請使用 keytool 命令行工具將其轉換為 Java Keystore (.jks) 檔。 然後,選擇下面的 .jks 文件選項。
|
||||||
certSign.selectKey=選擇你的私鑰文件(PKCS#8 格式,可能是 .pem 或 .der):
|
certSign.selectKey=選擇您的私鑰文件(PKCS#8 格式,可能是 .pem 或 .der):
|
||||||
certSign.selectCert=選擇你的憑證文件(X.509 格式,可能是 .pem 或 .der):
|
certSign.selectCert=選擇您的憑證文件(X.509 格式,可能是 .pem 或 .der):
|
||||||
certSign.selectP12=選擇你的 PKCS#12 金鑰庫文件(.p12 或 .pfx)(可選,如果提供,它應包含你的私鑰和憑證):
|
certSign.selectP12=選擇您的 PKCS#12 金鑰庫文件(.p12 或 .pfx)(可選,如果提供,它應包含您的私鑰和憑證):
|
||||||
certSign.selectJKS=選擇你的 Java Keystore 檔 (.jks 或 .keystore):
|
certSign.selectJKS=選擇你的 Java Keystore 檔 (.jks 或 .keystore):
|
||||||
certSign.certType=憑證類型
|
certSign.certType=憑證類型
|
||||||
certSign.password=輸入你的金鑰庫或私鑰密碼(如果有):
|
certSign.password=輸入您的金鑰庫或私鑰密碼(如果有):
|
||||||
certSign.showSig=顯示簽章
|
certSign.showSig=顯示簽章
|
||||||
certSign.reason=原因
|
certSign.reason=原因
|
||||||
certSign.location=位置
|
certSign.location=位置
|
||||||
@@ -887,7 +871,7 @@ rotate.submit=旋轉
|
|||||||
#split-pdfs
|
#split-pdfs
|
||||||
split.title=分割 PDF
|
split.title=分割 PDF
|
||||||
split.header=分割 PDF
|
split.header=分割 PDF
|
||||||
split.desc.1=你選擇的數字是你希望進行分割的頁碼
|
split.desc.1=您選擇的數字是您希望進行分割的頁碼
|
||||||
split.desc.2=因此,選擇 1,3,7-9 將會將一個 10 頁的文件分割為 6 個單獨的 PDF,包括:
|
split.desc.2=因此,選擇 1,3,7-9 將會將一個 10 頁的文件分割為 6 個單獨的 PDF,包括:
|
||||||
split.desc.3=文件 #1:頁面 1
|
split.desc.3=文件 #1:頁面 1
|
||||||
split.desc.4=文件 #2:頁面 2 和 3
|
split.desc.4=文件 #2:頁面 2 和 3
|
||||||
@@ -961,7 +945,6 @@ watermark.selectText.6=heightSpacer(每個浮水印之間的垂直間距):
|
|||||||
watermark.selectText.7=不透明度(0% - 100%):
|
watermark.selectText.7=不透明度(0% - 100%):
|
||||||
watermark.selectText.8=浮水印類型:
|
watermark.selectText.8=浮水印類型:
|
||||||
watermark.selectText.9=浮水印影像:
|
watermark.selectText.9=浮水印影像:
|
||||||
watermark.selectText.10=Convert PDF to PDF-Image
|
|
||||||
watermark.submit=新增浮水印
|
watermark.submit=新增浮水印
|
||||||
watermark.type.1=文字
|
watermark.type.1=文字
|
||||||
watermark.type.2=圖片
|
watermark.type.2=圖片
|
||||||
@@ -995,7 +978,7 @@ removePassword.submit=移除
|
|||||||
#changeMetadata
|
#changeMetadata
|
||||||
changeMetadata.title=標題:
|
changeMetadata.title=標題:
|
||||||
changeMetadata.header=變更中繼資料
|
changeMetadata.header=變更中繼資料
|
||||||
changeMetadata.selectText.1=請編輯你希望變更的變數
|
changeMetadata.selectText.1=請編輯您希望變更的變數
|
||||||
changeMetadata.selectText.2=刪除所有中繼資料
|
changeMetadata.selectText.2=刪除所有中繼資料
|
||||||
changeMetadata.selectText.3=顯示自訂中繼資料:
|
changeMetadata.selectText.3=顯示自訂中繼資料:
|
||||||
changeMetadata.author=作者:
|
changeMetadata.author=作者:
|
||||||
@@ -1120,13 +1103,13 @@ licenses.version=版本
|
|||||||
licenses.license=許可證
|
licenses.license=許可證
|
||||||
|
|
||||||
#survey
|
#survey
|
||||||
survey.nav=問卷調查
|
survey.nav=Survey
|
||||||
survey.title=Stirling-PDF 問卷調查
|
survey.title=Stirling-PDF Survey
|
||||||
survey.description=Stirling-PDF 沒有追蹤功能,所以我們希望聽取用戶的意見來改進 Stirling-PDF!
|
survey.description=Stirling-PDF has no tracking so we want to hear from our users to improve Stirling-PDF!
|
||||||
survey.please=請考慮參加我們的問卷調查!
|
survey.please=Please consider taking our survey!
|
||||||
survey.disabled=(問卷調查彈出窗口將在後續更新中停用,但仍可在頁腳處使用)
|
survey.disabled=(Survey popup will be disabled in following updates but available at foot of page)
|
||||||
survey.button=參加問卷調查
|
survey.button=Take Survey
|
||||||
survey.dontShowAgain=不要再次顯示
|
survey.dontShowAgain=Don't show again
|
||||||
|
|
||||||
|
|
||||||
#error
|
#error
|
||||||
@@ -1142,9 +1125,3 @@ error.copyStack=複製堆疊追蹤
|
|||||||
error.githubSubmit=GitHub - 提交工單
|
error.githubSubmit=GitHub - 提交工單
|
||||||
error.discordSubmit=Discord - 提交支援帖子
|
error.discordSubmit=Discord - 提交支援帖子
|
||||||
|
|
||||||
|
|
||||||
#remove-image
|
|
||||||
removeImage.title=Remove image
|
|
||||||
removeImage.header=Remove image
|
|
||||||
removeImage.removeImage=Remove image
|
|
||||||
removeImage.submit=Remove image
|
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ security:
|
|||||||
clientId: '' # Client ID from your provider
|
clientId: '' # Client ID from your provider
|
||||||
clientSecret: '' # Client Secret from your provider
|
clientSecret: '' # Client Secret from your provider
|
||||||
autoCreateUser: false # set to 'true' to allow auto-creation of non-existing users
|
autoCreateUser: false # set to 'true' to allow auto-creation of non-existing users
|
||||||
blockRegistration: false # set to 'true' to deny login with SSO without prior registration by an admin
|
|
||||||
useAsUsername: email # Default is 'email'; custom fields can be used as the username
|
useAsUsername: email # Default is 'email'; custom fields can be used as the username
|
||||||
scopes: openid, profile, email # Specify the scopes for which the application will request permissions
|
scopes: openid, profile, email # Specify the scopes for which the application will request permissions
|
||||||
provider: google # Set this to your OAuth provider's name, e.g., 'google' or 'keycloak'
|
provider: google # Set this to your OAuth provider's name, e.g., 'google' or 'keycloak'
|
||||||
@@ -55,7 +54,6 @@ system:
|
|||||||
showUpdate: false # see when a new update is available
|
showUpdate: false # see when a new update is available
|
||||||
showUpdateOnlyAdmin: false # Only admins can see when a new update is available, depending on showUpdate it must be set to 'true'
|
showUpdateOnlyAdmin: false # Only admins can see when a new update is available, depending on showUpdate it must be set to 'true'
|
||||||
customHTMLFiles: false # enable to have files placed in /customFiles/templates override the existing template html files
|
customHTMLFiles: false # enable to have files placed in /customFiles/templates override the existing template html files
|
||||||
tessdataDir: /usr/share/tessdata # Path to the directory containing the Tessdata files. This setting is relevant for Windows systems. For Windows users, this path should be adjusted to point to the appropriate directory where the Tessdata files are stored.
|
|
||||||
|
|
||||||
ui:
|
ui:
|
||||||
appName: '' # Application's visible name
|
appName: '' # Application's visible name
|
||||||
@@ -71,4 +69,4 @@ metrics:
|
|||||||
|
|
||||||
# Automatically Generated Settings (Do Not Edit Directly)
|
# Automatically Generated Settings (Do Not Edit Directly)
|
||||||
AutomaticallyGenerated:
|
AutomaticallyGenerated:
|
||||||
key: example
|
key: example
|
||||||
@@ -3,77 +3,77 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "ch.qos.logback:logback-classic",
|
"moduleName": "ch.qos.logback:logback-classic",
|
||||||
"moduleUrl": "http://www.qos.ch",
|
"moduleUrl": "http://www.qos.ch",
|
||||||
"moduleVersion": "1.5.7",
|
"moduleVersion": "1.5.6",
|
||||||
"moduleLicense": "GNU Lesser General Public License",
|
"moduleLicense": "GNU Lesser General Public License",
|
||||||
"moduleLicenseUrl": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html"
|
"moduleLicenseUrl": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "ch.qos.logback:logback-core",
|
"moduleName": "ch.qos.logback:logback-core",
|
||||||
"moduleUrl": "http://www.qos.ch",
|
"moduleUrl": "http://www.qos.ch",
|
||||||
"moduleVersion": "1.5.7",
|
"moduleVersion": "1.5.6",
|
||||||
"moduleLicense": "GNU Lesser General Public License",
|
"moduleLicense": "GNU Lesser General Public License",
|
||||||
"moduleLicenseUrl": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html"
|
"moduleLicenseUrl": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.bucket4j:bucket4j_jdk17-core",
|
"moduleName": "com.bucket4j:bucket4j_jdk17-core",
|
||||||
"moduleUrl": "http://github.com/bucket4j/bucket4j/bucket4j_jdk17-core",
|
"moduleUrl": "http://github.com/bucket4j/bucket4j/bucket4j_jdk17-core",
|
||||||
"moduleVersion": "8.13.1",
|
"moduleVersion": "8.12.1",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.fasterxml.jackson.core:jackson-annotations",
|
"moduleName": "com.fasterxml.jackson.core:jackson-annotations",
|
||||||
"moduleUrl": "https://github.com/FasterXML/jackson",
|
"moduleUrl": "https://github.com/FasterXML/jackson",
|
||||||
"moduleVersion": "2.17.2",
|
"moduleVersion": "2.17.1",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.fasterxml.jackson.core:jackson-core",
|
"moduleName": "com.fasterxml.jackson.core:jackson-core",
|
||||||
"moduleUrl": "https://github.com/FasterXML/jackson-core",
|
"moduleUrl": "https://github.com/FasterXML/jackson-core",
|
||||||
"moduleVersion": "2.17.2",
|
"moduleVersion": "2.17.1",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.fasterxml.jackson.core:jackson-databind",
|
"moduleName": "com.fasterxml.jackson.core:jackson-databind",
|
||||||
"moduleUrl": "https://github.com/FasterXML/jackson",
|
"moduleUrl": "https://github.com/FasterXML/jackson",
|
||||||
"moduleVersion": "2.17.2",
|
"moduleVersion": "2.17.1",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml",
|
"moduleName": "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml",
|
||||||
"moduleUrl": "https://github.com/FasterXML/jackson-dataformats-text",
|
"moduleUrl": "https://github.com/FasterXML/jackson-dataformats-text",
|
||||||
"moduleVersion": "2.17.2",
|
"moduleVersion": "2.17.1",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.fasterxml.jackson.datatype:jackson-datatype-jdk8",
|
"moduleName": "com.fasterxml.jackson.datatype:jackson-datatype-jdk8",
|
||||||
"moduleUrl": "https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8",
|
"moduleUrl": "https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8",
|
||||||
"moduleVersion": "2.17.2",
|
"moduleVersion": "2.17.1",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
|
"moduleName": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
|
||||||
"moduleUrl": "https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310",
|
"moduleUrl": "https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310",
|
||||||
"moduleVersion": "2.17.2",
|
"moduleVersion": "2.17.1",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.fasterxml.jackson.module:jackson-module-parameter-names",
|
"moduleName": "com.fasterxml.jackson.module:jackson-module-parameter-names",
|
||||||
"moduleUrl": "https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names",
|
"moduleUrl": "https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names",
|
||||||
"moduleVersion": "2.17.2",
|
"moduleVersion": "2.17.1",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.fasterxml.jackson:jackson-bom",
|
"moduleName": "com.fasterxml.jackson:jackson-bom",
|
||||||
"moduleUrl": "https://github.com/FasterXML/jackson-bom",
|
"moduleUrl": "https://github.com/FasterXML/jackson-bom",
|
||||||
"moduleVersion": "2.17.2",
|
"moduleVersion": "2.17.1",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
@@ -194,13 +194,13 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.twelvemonkeys.imageio:imageio-batik",
|
"moduleName": "com.twelvemonkeys.imageio:imageio-batik",
|
||||||
"moduleVersion": "3.11.0",
|
"moduleVersion": "3.10.1",
|
||||||
"moduleLicense": "The BSD License",
|
"moduleLicense": "The BSD License",
|
||||||
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.twelvemonkeys.imageio:imageio-bmp",
|
"moduleName": "com.twelvemonkeys.imageio:imageio-bmp",
|
||||||
"moduleVersion": "3.11.0",
|
"moduleVersion": "3.10.1",
|
||||||
"moduleLicense": "The BSD License",
|
"moduleLicense": "The BSD License",
|
||||||
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
||||||
},
|
},
|
||||||
@@ -224,13 +224,13 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.twelvemonkeys.imageio:imageio-tiff",
|
"moduleName": "com.twelvemonkeys.imageio:imageio-tiff",
|
||||||
"moduleVersion": "3.11.0",
|
"moduleVersion": "3.10.1",
|
||||||
"moduleLicense": "The BSD License",
|
"moduleLicense": "The BSD License",
|
||||||
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "com.twelvemonkeys.imageio:imageio-webp",
|
"moduleName": "com.twelvemonkeys.imageio:imageio-webp",
|
||||||
"moduleVersion": "3.11.0",
|
"moduleVersion": "3.10.1",
|
||||||
"moduleLicense": "The BSD License",
|
"moduleLicense": "The BSD License",
|
||||||
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
||||||
},
|
},
|
||||||
@@ -272,35 +272,35 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "io.github.pixee:java-security-toolkit",
|
"moduleName": "io.github.pixee:java-security-toolkit",
|
||||||
"moduleUrl": "https://github.com/pixee/java-security-toolkit",
|
"moduleUrl": "https://github.com/pixee/java-security-toolkit",
|
||||||
"moduleVersion": "1.2.0",
|
"moduleVersion": "1.1.3",
|
||||||
"moduleLicense": "MIT License",
|
"moduleLicense": "MIT License",
|
||||||
"moduleLicenseUrl": "http://www.opensource.org/licenses/mit-license.php"
|
"moduleLicenseUrl": "http://www.opensource.org/licenses/mit-license.php"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "io.micrometer:micrometer-commons",
|
"moduleName": "io.micrometer:micrometer-commons",
|
||||||
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
|
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
|
||||||
"moduleVersion": "1.13.2",
|
"moduleVersion": "1.13.0",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "io.micrometer:micrometer-core",
|
"moduleName": "io.micrometer:micrometer-core",
|
||||||
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
|
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
|
||||||
"moduleVersion": "1.13.3",
|
"moduleVersion": "1.13.0",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "io.micrometer:micrometer-jakarta9",
|
"moduleName": "io.micrometer:micrometer-jakarta9",
|
||||||
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
|
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
|
||||||
"moduleVersion": "1.13.2",
|
"moduleVersion": "1.13.0",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "io.micrometer:micrometer-observation",
|
"moduleName": "io.micrometer:micrometer-observation",
|
||||||
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
|
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
|
||||||
"moduleVersion": "1.13.2",
|
"moduleVersion": "1.13.0",
|
||||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
@@ -424,7 +424,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "net.bytebuddy:byte-buddy",
|
"moduleName": "net.bytebuddy:byte-buddy",
|
||||||
"moduleVersion": "1.14.18",
|
"moduleVersion": "1.14.16",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
@@ -485,41 +485,35 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "org.apache.pdfbox:fontbox",
|
"moduleName": "org.apache.pdfbox:fontbox",
|
||||||
"moduleUrl": "https://pdfbox.apache.org",
|
"moduleUrl": "https://pdfbox.apache.org",
|
||||||
"moduleVersion": "3.0.3",
|
"moduleVersion": "3.0.2",
|
||||||
"moduleLicense": "Apache-2.0",
|
"moduleLicense": "Apache-2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"moduleName": "org.apache.pdfbox:jbig2-imageio",
|
|
||||||
"moduleVersion": "3.0.4",
|
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"moduleName": "org.apache.pdfbox:pdfbox",
|
"moduleName": "org.apache.pdfbox:pdfbox",
|
||||||
"moduleUrl": "https://pdfbox.apache.org",
|
"moduleUrl": "https://pdfbox.apache.org",
|
||||||
"moduleVersion": "3.0.3",
|
"moduleVersion": "3.0.2",
|
||||||
"moduleLicense": "Apache-2.0",
|
"moduleLicense": "Apache-2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.apache.pdfbox:pdfbox-io",
|
"moduleName": "org.apache.pdfbox:pdfbox-io",
|
||||||
"moduleUrl": "https://pdfbox.apache.org",
|
"moduleUrl": "https://pdfbox.apache.org",
|
||||||
"moduleVersion": "3.0.3",
|
"moduleVersion": "3.0.2",
|
||||||
"moduleLicense": "Apache-2.0",
|
"moduleLicense": "Apache-2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.apache.pdfbox:xmpbox",
|
"moduleName": "org.apache.pdfbox:xmpbox",
|
||||||
"moduleUrl": "https://pdfbox.apache.org",
|
"moduleUrl": "https://pdfbox.apache.org",
|
||||||
"moduleVersion": "3.0.3",
|
"moduleVersion": "3.0.2",
|
||||||
"moduleLicense": "Apache-2.0",
|
"moduleLicense": "Apache-2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.apache.tomcat.embed:tomcat-embed-el",
|
"moduleName": "org.apache.tomcat.embed:tomcat-embed-el",
|
||||||
"moduleUrl": "https://tomcat.apache.org/",
|
"moduleUrl": "https://tomcat.apache.org/",
|
||||||
"moduleVersion": "10.1.26",
|
"moduleVersion": "10.1.24",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||||
},
|
},
|
||||||
@@ -539,7 +533,7 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "org.aspectj:aspectjweaver",
|
"moduleName": "org.aspectj:aspectjweaver",
|
||||||
"moduleUrl": "https://www.eclipse.org/aspectj/",
|
"moduleUrl": "https://www.eclipse.org/aspectj/",
|
||||||
"moduleVersion": "1.9.22.1",
|
"moduleVersion": "1.9.22",
|
||||||
"moduleLicense": "Eclipse Public License - v 2.0",
|
"moduleLicense": "Eclipse Public License - v 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt"
|
"moduleLicenseUrl": "https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt"
|
||||||
},
|
},
|
||||||
@@ -593,182 +587,182 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-client",
|
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-client",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-common",
|
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-common",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-server",
|
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-server",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jetty-server",
|
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jetty-server",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-servlet",
|
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-servlet",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-annotations",
|
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-annotations",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-plus",
|
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-plus",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-servlet",
|
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-servlet",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-servlets",
|
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-servlets",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-webapp",
|
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-webapp",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-core-client",
|
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-core-client",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-core-common",
|
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-core-common",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-core-server",
|
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-core-server",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-jetty-api",
|
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-jetty-api",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-jetty-common",
|
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-jetty-common",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty:jetty-alpn-client",
|
"moduleName": "org.eclipse.jetty:jetty-alpn-client",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty:jetty-client",
|
"moduleName": "org.eclipse.jetty:jetty-client",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty:jetty-ee",
|
"moduleName": "org.eclipse.jetty:jetty-ee",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty:jetty-http",
|
"moduleName": "org.eclipse.jetty:jetty-http",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty:jetty-io",
|
"moduleName": "org.eclipse.jetty:jetty-io",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty:jetty-plus",
|
"moduleName": "org.eclipse.jetty:jetty-plus",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty:jetty-security",
|
"moduleName": "org.eclipse.jetty:jetty-security",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty:jetty-server",
|
"moduleName": "org.eclipse.jetty:jetty-server",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty:jetty-session",
|
"moduleName": "org.eclipse.jetty:jetty-session",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty:jetty-util",
|
"moduleName": "org.eclipse.jetty:jetty-util",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.jetty:jetty-xml",
|
"moduleName": "org.eclipse.jetty:jetty-xml",
|
||||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||||
"moduleVersion": "12.0.11",
|
"moduleVersion": "12.0.9",
|
||||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||||
},
|
},
|
||||||
@@ -796,7 +790,7 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "org.hdrhistogram:HdrHistogram",
|
"moduleName": "org.hdrhistogram:HdrHistogram",
|
||||||
"moduleUrl": "http://hdrhistogram.github.io/HdrHistogram/",
|
"moduleUrl": "http://hdrhistogram.github.io/HdrHistogram/",
|
||||||
"moduleVersion": "2.2.2",
|
"moduleVersion": "2.2.1",
|
||||||
"moduleLicense": "Public Domain, per Creative Commons CC0",
|
"moduleLicense": "Public Domain, per Creative Commons CC0",
|
||||||
"moduleLicenseUrl": "http://creativecommons.org/publicdomain/zero/1.0/"
|
"moduleLicenseUrl": "http://creativecommons.org/publicdomain/zero/1.0/"
|
||||||
},
|
},
|
||||||
@@ -884,28 +878,28 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "org.springframework.boot:spring-boot",
|
"moduleName": "org.springframework.boot:spring-boot",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||||
"moduleVersion": "3.3.2",
|
"moduleVersion": "3.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.boot:spring-boot-actuator",
|
"moduleName": "org.springframework.boot:spring-boot-actuator",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||||
"moduleVersion": "3.3.2",
|
"moduleVersion": "3.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.boot:spring-boot-actuator-autoconfigure",
|
"moduleName": "org.springframework.boot:spring-boot-actuator-autoconfigure",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||||
"moduleVersion": "3.3.2",
|
"moduleVersion": "3.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.boot:spring-boot-autoconfigure",
|
"moduleName": "org.springframework.boot:spring-boot-autoconfigure",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||||
"moduleVersion": "3.3.2",
|
"moduleVersion": "3.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
@@ -919,7 +913,7 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "org.springframework.boot:spring-boot-starter",
|
"moduleName": "org.springframework.boot:spring-boot-starter",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||||
"moduleVersion": "3.3.2",
|
"moduleVersion": "3.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
@@ -933,7 +927,7 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "org.springframework.boot:spring-boot-starter-aop",
|
"moduleName": "org.springframework.boot:spring-boot-starter-aop",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||||
"moduleVersion": "3.3.2",
|
"moduleVersion": "3.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
@@ -947,7 +941,7 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "org.springframework.boot:spring-boot-starter-jdbc",
|
"moduleName": "org.springframework.boot:spring-boot-starter-jdbc",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||||
"moduleVersion": "3.3.2",
|
"moduleVersion": "3.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
@@ -961,14 +955,14 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "org.springframework.boot:spring-boot-starter-json",
|
"moduleName": "org.springframework.boot:spring-boot-starter-json",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||||
"moduleVersion": "3.3.2",
|
"moduleVersion": "3.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.boot:spring-boot-starter-logging",
|
"moduleName": "org.springframework.boot:spring-boot-starter-logging",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||||
"moduleVersion": "3.3.2",
|
"moduleVersion": "3.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
@@ -1003,147 +997,147 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "org.springframework.data:spring-data-commons",
|
"moduleName": "org.springframework.data:spring-data-commons",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-data",
|
"moduleUrl": "https://spring.io/projects/spring-data",
|
||||||
"moduleVersion": "3.3.2",
|
"moduleVersion": "3.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.data:spring-data-jpa",
|
"moduleName": "org.springframework.data:spring-data-jpa",
|
||||||
"moduleUrl": "https://projects.spring.io/spring-data-jpa",
|
"moduleUrl": "https://projects.spring.io/spring-data-jpa",
|
||||||
"moduleVersion": "3.3.2",
|
"moduleVersion": "3.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.security:spring-security-config",
|
"moduleName": "org.springframework.security:spring-security-config",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||||
"moduleVersion": "6.3.1",
|
"moduleVersion": "6.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.security:spring-security-core",
|
"moduleName": "org.springframework.security:spring-security-core",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||||
"moduleVersion": "6.3.1",
|
"moduleVersion": "6.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.security:spring-security-crypto",
|
"moduleName": "org.springframework.security:spring-security-crypto",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||||
"moduleVersion": "6.3.1",
|
"moduleVersion": "6.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.security:spring-security-oauth2-client",
|
"moduleName": "org.springframework.security:spring-security-oauth2-client",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||||
"moduleVersion": "6.3.1",
|
"moduleVersion": "6.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.security:spring-security-oauth2-core",
|
"moduleName": "org.springframework.security:spring-security-oauth2-core",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||||
"moduleVersion": "6.3.1",
|
"moduleVersion": "6.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.security:spring-security-oauth2-jose",
|
"moduleName": "org.springframework.security:spring-security-oauth2-jose",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||||
"moduleVersion": "6.3.1",
|
"moduleVersion": "6.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework.security:spring-security-web",
|
"moduleName": "org.springframework.security:spring-security-web",
|
||||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||||
"moduleVersion": "6.3.1",
|
"moduleVersion": "6.3.0",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-aop",
|
"moduleName": "org.springframework:spring-aop",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.11",
|
"moduleVersion": "6.1.8",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-aspects",
|
"moduleName": "org.springframework:spring-aspects",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.11",
|
"moduleVersion": "6.1.8",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-beans",
|
"moduleName": "org.springframework:spring-beans",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.11",
|
"moduleVersion": "6.1.8",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-context",
|
"moduleName": "org.springframework:spring-context",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.11",
|
"moduleVersion": "6.1.8",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-core",
|
"moduleName": "org.springframework:spring-core",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.11",
|
"moduleVersion": "6.1.8",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-expression",
|
"moduleName": "org.springframework:spring-expression",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.11",
|
"moduleVersion": "6.1.8",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-jcl",
|
"moduleName": "org.springframework:spring-jcl",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.11",
|
"moduleVersion": "6.1.8",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-jdbc",
|
"moduleName": "org.springframework:spring-jdbc",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.11",
|
"moduleVersion": "6.1.8",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-orm",
|
"moduleName": "org.springframework:spring-orm",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.11",
|
"moduleVersion": "6.1.8",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-tx",
|
"moduleName": "org.springframework:spring-tx",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.11",
|
"moduleVersion": "6.1.8",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-web",
|
"moduleName": "org.springframework:spring-web",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.11",
|
"moduleVersion": "6.1.8",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.springframework:spring-webmvc",
|
"moduleName": "org.springframework:spring-webmvc",
|
||||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||||
"moduleVersion": "6.1.12",
|
"moduleVersion": "6.1.9",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -21,8 +21,4 @@
|
|||||||
|
|
||||||
.footer-icon {
|
.footer-icon {
|
||||||
font-size: 2rem;
|
font-size: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-link {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
.filename {
|
|
||||||
flex-grow: 1;
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.arrows {
|
|
||||||
flex-shrink: 0;
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
}
|
|
||||||
.arrows .btn {
|
|
||||||
margin: 0 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.move-up span,
|
|
||||||
.move-down span {
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-dk" viewBox="0 0 640 480">
|
|
||||||
<path fill="#c8102e" d="M0 0h640.1v480H0z"/>
|
|
||||||
<path fill="#fff" d="M205.7 0h68.6v480h-68.6z"/>
|
|
||||||
<path fill="#fff" d="M0 205.7h640.1v68.6H0z"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 236 B |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user