Compare commits
78 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f474651f36 | ||
|
|
11193b1b6d | ||
|
|
3066b3e500 | ||
|
|
217f112bc4 | ||
|
|
e1bb0cf5ec | ||
|
|
3930c25a75 | ||
|
|
b27e79cb52 | ||
|
|
daf6486b86 | ||
|
|
1af41f8ea5 | ||
|
|
70e4ac21df | ||
|
|
95d9d85ca2 | ||
|
|
9cc7a49d12 | ||
|
|
ae73595335 | ||
|
|
ac620082ec | ||
|
|
1e4134c7d1 | ||
|
|
a7bcdd0003 | ||
|
|
121af0501a | ||
|
|
82c4e9cf41 | ||
|
|
142e11a59a | ||
|
|
08205ed32d | ||
|
|
9246b42057 | ||
|
|
67e4d6e3a2 | ||
|
|
cf4613d043 | ||
|
|
2f703796e9 | ||
|
|
731dc3f3dc | ||
|
|
97472310f2 | ||
|
|
ece1d071c0 | ||
|
|
20f532c872 | ||
|
|
bdcccfd937 | ||
|
|
146b8f0103 | ||
|
|
c8a37245fa | ||
|
|
af68c70239 | ||
|
|
5bd544dcd7 | ||
|
|
642b85069d | ||
|
|
6fef4ea82c | ||
|
|
8670afb96f | ||
|
|
33f8d60900 | ||
|
|
4e2156ad79 | ||
|
|
a07245224e | ||
|
|
f96a4cdb59 | ||
|
|
efea22aa6e | ||
|
|
ae9a7dc580 | ||
|
|
7135ace1aa | ||
|
|
625275124a | ||
|
|
c96ebccae4 | ||
|
|
20cb460a7e | ||
|
|
3a62d19979 | ||
|
|
51ad741744 | ||
|
|
673f005fe6 | ||
|
|
8d9f0361d0 | ||
|
|
56e3ec1219 | ||
|
|
a0acafcefc | ||
|
|
918f5954b7 | ||
|
|
148dcdaee7 | ||
|
|
a5f0777892 | ||
|
|
010426d488 | ||
|
|
6fc9c7be90 | ||
|
|
094fde9801 | ||
|
|
e4a76e96af | ||
|
|
68f582bcb9 | ||
|
|
639aed7120 | ||
|
|
994bb4d1d2 | ||
|
|
80b11a55fa | ||
|
|
3cfb554623 | ||
|
|
e84f9c5946 | ||
|
|
17cc31d6e7 | ||
|
|
0c6e10a6dd | ||
|
|
297c57631f | ||
|
|
bd4e252bb6 | ||
|
|
0ce34c70bc | ||
|
|
4df75cfba1 | ||
|
|
2aa435bcfb | ||
|
|
0a4a9e6947 | ||
|
|
d5860d0b55 | ||
|
|
6a487ce514 | ||
|
|
4f3b85e66b | ||
|
|
370cd97e05 | ||
|
|
55d4fda01b |
@@ -1,2 +1,5 @@
|
|||||||
# Formatting
|
# Formatting
|
||||||
5f771b785130154ed47952635b7acef371ffe0ec
|
5f771b785130154ed47952635b7acef371ffe0ec
|
||||||
|
|
||||||
|
# Normalize files
|
||||||
|
55d4fda01b2f39f5b7d7b4fda5214bd7ff0fd5dd
|
||||||
|
|||||||
51
.github/scripts/check_duplicates.py
vendored
Normal file
51
.github/scripts/check_duplicates.py
vendored
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def find_duplicate_keys(file_path):
|
||||||
|
"""
|
||||||
|
Finds duplicate keys in a properties file and returns their occurrences.
|
||||||
|
|
||||||
|
This function reads a properties file, identifies any keys that occur more than
|
||||||
|
once, and returns a dictionary with these keys and the line numbers of their occurrences.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
file_path (str): The path to the properties file to be checked.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: A dictionary where each key is a duplicated key in the file, and the value is a list
|
||||||
|
of line numbers where the key occurs.
|
||||||
|
"""
|
||||||
|
with open(file_path, "r", encoding="utf-8") as file:
|
||||||
|
lines = file.readlines()
|
||||||
|
|
||||||
|
keys = {}
|
||||||
|
duplicates = {}
|
||||||
|
|
||||||
|
for line_number, line in enumerate(lines, start=1):
|
||||||
|
line = line.strip()
|
||||||
|
if line and not line.startswith("#") and "=" in line:
|
||||||
|
key = line.split("=", 1)[0].strip()
|
||||||
|
if key in keys:
|
||||||
|
# If the key already exists, add the current line number
|
||||||
|
duplicates.setdefault(key, []).append(line_number)
|
||||||
|
# Also add the first instance of the key if not already done
|
||||||
|
if keys[key] not in duplicates[key]:
|
||||||
|
duplicates[key].insert(0, keys[key])
|
||||||
|
else:
|
||||||
|
# Store the line number of the first instance of the key
|
||||||
|
keys[key] = line_number
|
||||||
|
|
||||||
|
return duplicates
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
failed = False
|
||||||
|
for ar in sys.argv[1:]:
|
||||||
|
duplicates = find_duplicate_keys(ar)
|
||||||
|
if duplicates:
|
||||||
|
for key, lines in duplicates.items():
|
||||||
|
lines_str = ", ".join(map(str, lines))
|
||||||
|
print(f"{key} duplicated in {ar} on lines {lines_str}")
|
||||||
|
failed = True
|
||||||
|
if failed:
|
||||||
|
sys.exit(1)
|
||||||
84
.github/scripts/check_tabulator.py
vendored
Normal file
84
.github/scripts/check_tabulator.py
vendored
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
"""check_tabulator.py"""
|
||||||
|
import argparse
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def check_tabs(file_path):
|
||||||
|
"""
|
||||||
|
Checks for tabs in the specified file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
file_path (str): The path to the file to be checked.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True if tabs are found, False otherwise.
|
||||||
|
"""
|
||||||
|
with open(file_path, "r", encoding="utf-8") as file:
|
||||||
|
content = file.read()
|
||||||
|
|
||||||
|
if "\t" in content:
|
||||||
|
print(f"Tab found in {file_path}")
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def replace_tabs_with_spaces(file_path, replace_with=" "):
|
||||||
|
"""
|
||||||
|
Replaces tabs with a specified number of spaces in the file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
file_path (str): The path to the file where tabs will be replaced.
|
||||||
|
replace_with (str): The character(s) to replace tabs with. Defaults to two spaces.
|
||||||
|
"""
|
||||||
|
with open(file_path, "r", encoding="utf-8") as file:
|
||||||
|
content = file.read()
|
||||||
|
|
||||||
|
updated_content = content.replace("\t", replace_with)
|
||||||
|
|
||||||
|
with open(file_path, "w", encoding="utf-8") as file:
|
||||||
|
file.write(updated_content)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""
|
||||||
|
Main function to replace tabs with spaces in the provided files.
|
||||||
|
The replacement character and files to check are taken from command line arguments.
|
||||||
|
"""
|
||||||
|
# Create ArgumentParser instance
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Replace tabs in files with specified characters."
|
||||||
|
)
|
||||||
|
|
||||||
|
# Define optional argument `--replace_with`
|
||||||
|
parser.add_argument(
|
||||||
|
"--replace_with",
|
||||||
|
default=" ",
|
||||||
|
help="Character(s) to replace tabs with. Default is two spaces.",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Define argument for file paths
|
||||||
|
parser.add_argument("files", metavar="FILE", nargs="+", help="Files to process.")
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Extract replacement characters and files from the parsed arguments
|
||||||
|
replace_with = args.replace_with
|
||||||
|
files_checked = args.files
|
||||||
|
|
||||||
|
error = False
|
||||||
|
|
||||||
|
for file_path in files_checked:
|
||||||
|
if check_tabs(file_path):
|
||||||
|
replace_tabs_with_spaces(file_path, replace_with)
|
||||||
|
error = True
|
||||||
|
|
||||||
|
if error:
|
||||||
|
print("Error: Originally found tabs in HTML files, now replaced.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
67
.github/scripts/gradle_to_chart.py
vendored
Normal file
67
.github/scripts/gradle_to_chart.py
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
import re
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
# Paths to the files
|
||||||
|
chart_yaml_path = "chart/stirling-pdf/Chart.yaml"
|
||||||
|
gradle_path = "build.gradle"
|
||||||
|
|
||||||
|
|
||||||
|
def get_chart_version(path):
|
||||||
|
"""
|
||||||
|
Reads the appVersion from Chart.yaml.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path (str): The file path to the Chart.yaml.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: The appVersion if found, otherwise an empty string.
|
||||||
|
"""
|
||||||
|
with open(path, encoding="utf-8") as file:
|
||||||
|
chart_yaml = yaml.safe_load(file)
|
||||||
|
return chart_yaml.get("appVersion", "")
|
||||||
|
|
||||||
|
|
||||||
|
def get_gradle_version(path):
|
||||||
|
"""
|
||||||
|
Extracts the version from build.gradle.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path (str): The file path to the build.gradle.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: The version if found, otherwise an empty string.
|
||||||
|
"""
|
||||||
|
with open(path, encoding="utf-8") as file:
|
||||||
|
for line in file:
|
||||||
|
if "version =" in line:
|
||||||
|
# Extracts the value after 'version ='
|
||||||
|
return re.search(r'version\s*=\s*[\'"](.+?)[\'"]', line).group(1)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
def update_chart_version(path, new_version):
|
||||||
|
"""
|
||||||
|
Updates the appVersion in Chart.yaml with a new version.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path (str): The file path to the Chart.yaml.
|
||||||
|
new_version (str): The new version to update to.
|
||||||
|
"""
|
||||||
|
with open(path, encoding="utf-8") as file:
|
||||||
|
chart_yaml = yaml.safe_load(file)
|
||||||
|
chart_yaml["appVersion"] = new_version
|
||||||
|
with open(path, "w", encoding="utf-8") as file:
|
||||||
|
yaml.safe_dump(chart_yaml, file)
|
||||||
|
|
||||||
|
|
||||||
|
# Main logic
|
||||||
|
chart_version = get_chart_version(chart_yaml_path)
|
||||||
|
gradle_version = get_gradle_version(gradle_path)
|
||||||
|
|
||||||
|
if chart_version != gradle_version:
|
||||||
|
print(
|
||||||
|
f"Versions do not match. Updating Chart.yaml from {chart_version} to {gradle_version}."
|
||||||
|
)
|
||||||
|
update_chart_version(chart_yaml_path, gradle_version)
|
||||||
|
else:
|
||||||
|
print("Versions match. No update required.")
|
||||||
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@@ -3,8 +3,14 @@ name: "Build repo"
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ "main" ]
|
branches: [ "main" ]
|
||||||
|
paths-ignore:
|
||||||
|
- ".github/**"
|
||||||
|
- "**/*.md"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ "main" ]
|
branches: [ "main" ]
|
||||||
|
paths-ignore:
|
||||||
|
- ".github/**"
|
||||||
|
- "**/*.md"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|||||||
33
.github/workflows/licenses-update.yml
vendored
33
.github/workflows/licenses-update.yml
vendored
@@ -32,17 +32,30 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
mv build/reports/dependency-license/index.json src/main/resources/static/3rdPartyLicenses.json
|
mv build/reports/dependency-license/index.json src/main/resources/static/3rdPartyLicenses.json
|
||||||
|
|
||||||
- name: Check for Changes
|
- name: Set up git config
|
||||||
id: git-check
|
run: |
|
||||||
|
git config --global user.email "GitHub Action <action@github.com>"
|
||||||
|
git config --global user.name "GitHub Action <action@github.com>"
|
||||||
|
|
||||||
|
- name: Run git add
|
||||||
run: |
|
run: |
|
||||||
git add src/main/resources/static/3rdPartyLicenses.json
|
git add src/main/resources/static/3rdPartyLicenses.json
|
||||||
git diff --staged --exit-code || echo "changes=true" >> $GITHUB_ENV
|
git diff --staged --quiet || echo "CHANGES_DETECTED=true" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Commit and Push Changes
|
- name: Create Pull Request
|
||||||
if: env.changes == 'true'
|
if: env.CHANGES_DETECTED == 'true'
|
||||||
run: |
|
uses: peter-evans/create-pull-request@v3
|
||||||
git config --global user.name 'Stirling-PDF-Bot'
|
with:
|
||||||
git config --global user.email 'Stirling-PDF-Bot@stirlingtools.com'
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
git commit -m "Update 3rd Party Licenses"
|
commit-message: "Update 3rd Party Licenses"
|
||||||
git push
|
committer: GitHub Action <action@github.com>
|
||||||
|
author: GitHub Action <action@github.com>
|
||||||
|
signoff: true
|
||||||
|
branch: update-3rd-party-licenses
|
||||||
|
title: "Update 3rd Party Licenses"
|
||||||
|
body: |
|
||||||
|
Auto-generated by [create-pull-request][1]
|
||||||
|
[1]: https://github.com/peter-evans/create-pull-request
|
||||||
|
draft: false
|
||||||
|
delete-branch: true
|
||||||
|
|
||||||
|
|||||||
4
.github/workflows/push-docker.yml
vendored
4
.github/workflows/push-docker.yml
vendored
@@ -6,6 +6,10 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
- main
|
- main
|
||||||
|
paths-ignore:
|
||||||
|
- ".github/**"
|
||||||
|
- "**/*.md"
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
packages: write
|
packages: write
|
||||||
|
|||||||
3
.github/workflows/swagger.yml
vendored
3
.github/workflows/swagger.yml
vendored
@@ -5,6 +5,9 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
paths-ignore:
|
||||||
|
- ".github/**"
|
||||||
|
- "**/*.md"
|
||||||
jobs:
|
jobs:
|
||||||
push:
|
push:
|
||||||
|
|
||||||
|
|||||||
51
.github/workflows/sync_versions.yml
vendored
Normal file
51
.github/workflows/sync_versions.yml
vendored
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
name: Sync Versions
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- "build.gradle"
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sync-versions:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4.1.1
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v5.0.0
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pip install pyyaml
|
||||||
|
- name: Sync versions
|
||||||
|
run: python .github/scripts/gradle_to_chart.py
|
||||||
|
- name: Set up git config
|
||||||
|
run: |
|
||||||
|
git config --global user.email "GitHub Action <action@github.com>"
|
||||||
|
git config --global user.name "GitHub Action <action@github.com>"
|
||||||
|
- name: Run git add
|
||||||
|
run: |
|
||||||
|
git add .
|
||||||
|
git diff --staged --quiet || git commit -m ":floppy_disk: Sync Versions
|
||||||
|
> Made via sync_versions.yml" || echo "no changes"
|
||||||
|
- name: Create Pull Request
|
||||||
|
uses: peter-evans/create-pull-request@v6.0.0
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
commit-message: Update files
|
||||||
|
committer: GitHub Action <action@github.com>
|
||||||
|
author: GitHub Action <action@github.com>
|
||||||
|
signoff: true
|
||||||
|
branch: sync_version
|
||||||
|
title: ":floppy_disk: Update Version"
|
||||||
|
body: |
|
||||||
|
Auto-generated by [create-pull-request][1]
|
||||||
|
|
||||||
|
[1]: https://github.com/peter-evans/create-pull-request
|
||||||
|
draft: false
|
||||||
|
delete-branch: true
|
||||||
37
.pre-commit-config.yaml
Normal file
37
.pre-commit-config.yaml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
repos:
|
||||||
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
|
rev: v0.2.1
|
||||||
|
hooks:
|
||||||
|
- id: ruff
|
||||||
|
args:
|
||||||
|
- --fix
|
||||||
|
- --line-length=127
|
||||||
|
files: ^((.github/scripts)/.+)?[^/]+\.py$
|
||||||
|
- id: ruff-format
|
||||||
|
files: ^((.github/scripts)/.+)?[^/]+\.py$
|
||||||
|
- repo: https://github.com/codespell-project/codespell
|
||||||
|
rev: v2.2.6
|
||||||
|
hooks:
|
||||||
|
- id: codespell
|
||||||
|
args:
|
||||||
|
- --ignore-words-list=
|
||||||
|
- --skip="./.*,*.csv,*.json,*.ambr"
|
||||||
|
- --quiet-level=2
|
||||||
|
files: \.(properties|html|css|js|py|md)$
|
||||||
|
exclude: (.vscode|.devcontainer|src/main/resources|Dockerfile)
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: check-duplicate-properties-keys
|
||||||
|
name: Check Duplicate Properties Keys
|
||||||
|
entry: python .github/scripts/check_duplicates.py
|
||||||
|
language: python
|
||||||
|
files: ^(src)/.+\.properties$
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: check-html-tabs
|
||||||
|
name: Check HTML for tabs
|
||||||
|
# args: ["--replace_with= "]
|
||||||
|
entry: python .github/scripts/check_tabulator.py
|
||||||
|
language: python
|
||||||
|
exclude: ^src/main/resources/static/pdfjs/
|
||||||
|
files: ^.*(\.html|\.css|\.js)$
|
||||||
66
Dockerfile
66
Dockerfile
@@ -1,6 +1,26 @@
|
|||||||
# Main stage
|
# Main stage
|
||||||
FROM alpine:3.19.1
|
FROM alpine:3.19.1
|
||||||
|
|
||||||
|
# Copy necessary files
|
||||||
|
COPY scripts /scripts
|
||||||
|
COPY pipeline /pipeline
|
||||||
|
COPY src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto
|
||||||
|
COPY src/main/resources/static/fonts/*.otf /usr/share/fonts/opentype/noto
|
||||||
|
COPY build/libs/*.jar app.jar
|
||||||
|
|
||||||
|
ARG VERSION_TAG
|
||||||
|
|
||||||
|
|
||||||
|
# Set Environment Variables
|
||||||
|
ENV DOCKER_ENABLE_SECURITY=false \
|
||||||
|
VERSION_TAG=$VERSION_TAG \
|
||||||
|
JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -XX:MaxRAMPercentage=75" \
|
||||||
|
HOME=/home/stirlingpdfuser \
|
||||||
|
PUID=1000 \
|
||||||
|
PGID=1000 \
|
||||||
|
UMASK=022
|
||||||
|
|
||||||
|
|
||||||
# JDK for app
|
# JDK for app
|
||||||
RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
|
RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
|
||||||
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \
|
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \
|
||||||
@@ -12,6 +32,8 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et
|
|||||||
bash \
|
bash \
|
||||||
curl \
|
curl \
|
||||||
openjdk17-jre \
|
openjdk17-jre \
|
||||||
|
su-exec \
|
||||||
|
shadow \
|
||||||
# Doc conversion
|
# Doc conversion
|
||||||
libreoffice@testing \
|
libreoffice@testing \
|
||||||
# OCR MY PDF (unpaper for descew and other advanced featues)
|
# OCR MY PDF (unpaper for descew and other advanced featues)
|
||||||
@@ -24,46 +46,18 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et
|
|||||||
wget https://bootstrap.pypa.io/get-pip.py -qO - | python3 - --break-system-packages --no-cache-dir --upgrade && \
|
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 && \
|
||||||
|
mkdir -p $HOME /configs /logs /customFiles /pipeline/watchedFolders /pipeline/finishedFolders && \
|
||||||
|
|
||||||
|
|
||||||
ARG VERSION_TAG
|
|
||||||
|
|
||||||
# Set Environment Variables
|
|
||||||
ENV DOCKER_ENABLE_SECURITY=false \
|
|
||||||
HOME=/home/stirlingpdfuser \
|
|
||||||
VERSION_TAG=$VERSION_TAG \
|
|
||||||
JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -XX:MaxRAMPercentage=75"
|
|
||||||
# PUID=1000 \
|
|
||||||
# PGID=1000 \
|
|
||||||
# UMASK=022 \
|
|
||||||
|
|
||||||
# Copy necessary files
|
|
||||||
COPY scripts /scripts
|
|
||||||
COPY pipeline /pipeline
|
|
||||||
COPY src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto
|
|
||||||
COPY src/main/resources/static/fonts/*.otf /usr/share/fonts/opentype/noto
|
|
||||||
COPY build/libs/*.jar app.jar
|
|
||||||
|
|
||||||
# Create user and group
|
|
||||||
##RUN groupadd -g $PGID stirlingpdfgroup && \
|
|
||||||
## useradd -u $PUID -g stirlingpdfgroup -s /bin/sh stirlingpdfuser && \
|
|
||||||
## mkdir -p $HOME && chown stirlingpdfuser:stirlingpdfgroup $HOME && \
|
|
||||||
# Set up necessary directories and permissions
|
|
||||||
RUN mkdir -p /configs /logs /customFiles /pipeline/watchedFolders /pipeline/finishedFolders && \
|
|
||||||
##&& \
|
|
||||||
## chown -R stirlingpdfuser:stirlingpdfgroup /scripts /usr/share/fonts/opentype/noto /usr/share/tesseract-ocr /configs /customFiles && \
|
|
||||||
## chown -R stirlingpdfuser:stirlingpdfgroup /usr/share/tesseract-ocr-original && \
|
|
||||||
# Set font cache and permissions
|
|
||||||
fc-cache -f -v && \
|
fc-cache -f -v && \
|
||||||
chmod +x /scripts/*
|
chmod +x /scripts/* && \
|
||||||
## chown stirlingpdfuser:stirlingpdfgroup /app.jar && \
|
chmod +x /scripts/init.sh && \
|
||||||
## chmod +x /scripts/init.sh
|
# User permissions
|
||||||
|
addgroup -S stirlingpdfgroup && adduser -S stirlingpdfuser -G stirlingpdfgroup && \
|
||||||
|
chown -R stirlingpdfuser:stirlingpdfgroup $HOME /scripts /usr/share/fonts/opentype/noto /configs /customFiles /pipeline && \
|
||||||
|
chown stirlingpdfuser:stirlingpdfgroup /app.jar
|
||||||
|
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|
||||||
# Set user and run command
|
# Set user and run command
|
||||||
##USER stirlingpdfuser
|
|
||||||
ENTRYPOINT ["tini", "--", "/scripts/init.sh"]
|
ENTRYPOINT ["tini", "--", "/scripts/init.sh"]
|
||||||
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]
|
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ ARG VERSION_TAG
|
|||||||
ENV DOCKER_ENABLE_SECURITY=false \
|
ENV DOCKER_ENABLE_SECURITY=false \
|
||||||
HOME=/home/stirlingpdfuser \
|
HOME=/home/stirlingpdfuser \
|
||||||
VERSION_TAG=$VERSION_TAG \
|
VERSION_TAG=$VERSION_TAG \
|
||||||
JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -XX:MaxRAMPercentage=75"
|
JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -XX:MaxRAMPercentage=75" \
|
||||||
# PUID=1000 \
|
PUID=1000 \
|
||||||
# PGID=1000 \
|
PGID=1000 \
|
||||||
# UMASK=022 \
|
UMASK=022
|
||||||
|
|
||||||
# Copy necessary files
|
# Copy necessary files
|
||||||
COPY scripts/download-security-jar.sh /scripts/download-security-jar.sh
|
COPY scripts/download-security-jar.sh /scripts/download-security-jar.sh
|
||||||
@@ -29,7 +29,10 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et
|
|||||||
tini \
|
tini \
|
||||||
bash \
|
bash \
|
||||||
curl \
|
curl \
|
||||||
|
gcc \
|
||||||
openjdk17-jre \
|
openjdk17-jre \
|
||||||
|
su-exec \
|
||||||
|
shadow \
|
||||||
# Doc conversion
|
# Doc conversion
|
||||||
libreoffice@testing \
|
libreoffice@testing \
|
||||||
# python and pip
|
# python and pip
|
||||||
@@ -37,17 +40,16 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et
|
|||||||
wget https://bootstrap.pypa.io/get-pip.py -qO - | python3 - --break-system-packages --no-cache-dir --upgrade && \
|
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 && \
|
||||||
# Create user and group
|
|
||||||
#RUN groupadd -g $PGID stirlingpdfgroup && \
|
|
||||||
# useradd -u $PUID -g stirlingpdfgroup -s /bin/sh stirlingpdfuser && \
|
|
||||||
# mkdir -p $HOME && chown stirlingpdfuser:stirlingpdfgroup $HOME
|
|
||||||
# Set up necessary directories and permissions
|
# Set up necessary directories and permissions
|
||||||
mkdir -p /configs /logs /customFiles /pipeline/watchedFolders /pipeline/finishedFolders && \
|
mkdir -p /configs /logs /customFiles /pipeline/watchedFolders /pipeline/finishedFolders && \
|
||||||
# chown -R stirlingpdfuser:stirlingpdfgroup /usr/share/fonts/opentype/noto /configs /customFiles
|
|
||||||
# Set font cache and permissions
|
# Set font cache and permissions
|
||||||
fc-cache -f -v && \
|
fc-cache -f -v && \
|
||||||
chmod +x /scripts/*.sh
|
chmod +x /scripts/*.sh && \
|
||||||
# chown stirlingpdfuser:stirlingpdfgroup /app.jar
|
# User permissions
|
||||||
|
addgroup -S stirlingpdfgroup && adduser -S stirlingpdfuser -G stirlingpdfgroup && \
|
||||||
|
chown -R stirlingpdfuser:stirlingpdfgroup $HOME /scripts /usr/share/fonts/opentype/noto /configs /customFiles /pipeline && \
|
||||||
|
chown stirlingpdfuser:stirlingpdfgroup /app.jar
|
||||||
|
|
||||||
|
|
||||||
# Set environment variables
|
# Set environment variables
|
||||||
ENV ENDPOINTS_GROUPS_TO_REMOVE=OpenCV,OCRmyPDF
|
ENV ENDPOINTS_GROUPS_TO_REMOVE=OpenCV,OCRmyPDF
|
||||||
@@ -56,6 +58,6 @@ ENV DOCKER_ENABLE_SECURITY=false
|
|||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|
||||||
# Run the application
|
# Run the application
|
||||||
#USER stirlingpdfuser
|
|
||||||
ENTRYPOINT ["tini", "--", "/scripts/init-without-ocr.sh"]
|
ENTRYPOINT ["tini", "--", "/scripts/init-without-ocr.sh"]
|
||||||
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]
|
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ ARG VERSION_TAG
|
|||||||
ENV DOCKER_ENABLE_SECURITY=false \
|
ENV DOCKER_ENABLE_SECURITY=false \
|
||||||
HOME=/home/stirlingpdfuser \
|
HOME=/home/stirlingpdfuser \
|
||||||
VERSION_TAG=$VERSION_TAG \
|
VERSION_TAG=$VERSION_TAG \
|
||||||
JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -XX:MaxRAMPercentage=75"
|
JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -XX:MaxRAMPercentage=75" \
|
||||||
# PUID=1000 \
|
PUID=1000 \
|
||||||
# PGID=1000 \
|
PGID=1000 \
|
||||||
# UMASK=022 \
|
UMASK=022
|
||||||
|
|
||||||
# Copy necessary files
|
# Copy necessary files
|
||||||
COPY scripts/download-security-jar.sh /scripts/download-security-jar.sh
|
COPY scripts/download-security-jar.sh /scripts/download-security-jar.sh
|
||||||
@@ -18,16 +18,10 @@ COPY scripts/init-without-ocr.sh /scripts/init-without-ocr.sh
|
|||||||
COPY pipeline /pipeline
|
COPY pipeline /pipeline
|
||||||
COPY build/libs/*.jar app.jar
|
COPY build/libs/*.jar app.jar
|
||||||
|
|
||||||
# Create user and group using Alpine's addgroup and adduser
|
|
||||||
#RUN addgroup -g $PGID stirlingpdfgroup && \
|
|
||||||
# adduser -u $PUID -G stirlingpdfgroup -s /bin/sh -D stirlingpdfuser && \
|
|
||||||
# mkdir -p $HOME && chown stirlingpdfuser:stirlingpdfgroup $HOME
|
|
||||||
# Set up necessary directories and permissions
|
# Set up necessary directories and permissions
|
||||||
#RUN mkdir -p /scripts /configs /customFiles && \
|
|
||||||
# chown -R stirlingpdfuser:stirlingpdfgroup /scripts /configs /customFiles /logs /pipeline /pipeline/defaultWebUIConfigs /pipeline/watchedFolders /pipeline/finishedFolders
|
|
||||||
RUN mkdir /configs /logs /customFiles && \
|
RUN mkdir /configs /logs /customFiles && \
|
||||||
# Set font cache and permissions
|
|
||||||
#RUN chown stirlingpdfuser:stirlingpdfgroup /app.jar
|
|
||||||
chmod +x /scripts/*.sh && \
|
chmod +x /scripts/*.sh && \
|
||||||
apk add --no-cache \
|
apk add --no-cache \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
@@ -35,10 +29,16 @@ RUN mkdir /configs /logs /customFiles && \
|
|||||||
tini \
|
tini \
|
||||||
bash \
|
bash \
|
||||||
curl \
|
curl \
|
||||||
|
su-exec \
|
||||||
|
shadow \
|
||||||
openjdk17-jre && \
|
openjdk17-jre && \
|
||||||
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
|
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
|
||||||
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \
|
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \
|
||||||
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" | tee -a /etc/apk/repositories
|
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" | tee -a /etc/apk/repositories && \
|
||||||
|
# User permissions
|
||||||
|
addgroup -S stirlingpdfgroup && adduser -S stirlingpdfuser -G stirlingpdfgroup && \
|
||||||
|
chown -R stirlingpdfuser:stirlingpdfgroup $HOME /scripts /configs /customFiles /pipeline && \
|
||||||
|
chown stirlingpdfuser:stirlingpdfgroup /app.jar
|
||||||
|
|
||||||
# Set environment variables
|
# Set environment variables
|
||||||
ENV ENDPOINTS_GROUPS_TO_REMOVE=CLI
|
ENV ENDPOINTS_GROUPS_TO_REMOVE=CLI
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
## User Guide for Local Directory Scanning and File Processing
|
## User Guide for Local Directory Scanning and File Processing
|
||||||
|
|
||||||
### Whilst Pipelines are in alpha...
|
|
||||||
You must enable this alpha functionality by setting
|
|
||||||
```yaml
|
|
||||||
system:
|
|
||||||
enableAlphaFunctionality: true
|
|
||||||
```
|
|
||||||
To true like in the above for your `/config/settings.yml` file, after restarting Stirling-PDF you should see both UI and folder scanning enabled.
|
|
||||||
|
|
||||||
### Setting Up Watched Folders:
|
### Setting Up Watched Folders:
|
||||||
- Create a folder where you want your files to be monitored. This is your 'watched folder'.
|
- Create a folder where you want your files to be monitored. This is your 'watched folder'.
|
||||||
- The default directory for this is `./pipeline/watchedFolders/`
|
- The default directory for this is `./pipeline/watchedFolders/`
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ https://github.com/Stirling-Tools/Stirling-PDF/blob/main/src/main/resources/temp
|
|||||||
and add a flag svg file to
|
and add a flag svg file to
|
||||||
https://github.com/Stirling-Tools/Stirling-PDF/tree/main/src/main/resources/static/images/flags
|
https://github.com/Stirling-Tools/Stirling-PDF/tree/main/src/main/resources/static/images/flags
|
||||||
Any SVG flags are fine, i got most of mine from [here](https://flagicons.lipis.dev/)
|
Any SVG flags are fine, i got most of mine from [here](https://flagicons.lipis.dev/)
|
||||||
If your language isnt represented by a flag just find whichever closely matches it, such as for Arabic i chose Saudi Arabia
|
If your language isn't represented by a flag just find whichever closely matches it, such as for Arabic i chose Saudi Arabia
|
||||||
|
|
||||||
|
|
||||||
For example to add Polish you would add
|
For example to add Polish you would add
|
||||||
@@ -32,7 +32,7 @@ Copy and rename it to messages_{your data-language-code here}.properties, in the
|
|||||||
|
|
||||||
Then simply translate all property entries within that file and make a PR into main for others to use!
|
Then simply translate all property entries within that file and make a PR into main for others to use!
|
||||||
|
|
||||||
If you do not have a java IDE i am happy to verify the changes worked once you raise PR (but wont be able to verify the translations themselves)
|
If you do not have a java IDE i am happy to verify the changes worked once you raise PR (but won't be able to verify the translations themselves)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
This document provides instructions on how to add additional language packs for the OCR tab in Stirling-PDF, both inside and outside of Docker.
|
This document provides instructions on how to add additional language packs for the OCR tab in Stirling-PDF, both inside and outside of Docker.
|
||||||
|
|
||||||
## My OCR used to work and now doesnt!
|
## My OCR used to work and now doesn't!
|
||||||
Please update your tesseract docker volume path version from 4.00 to 5
|
The paths have changed for the tessadata locations on new docker images, please use ``/usr/share/tessdata`` (Others should still work for backwards compatibility but might not)
|
||||||
|
|
||||||
## How does the OCR Work
|
## How does the OCR Work
|
||||||
Stirling-PDF uses [OCRmyPDF](https://github.com/ocrmypdf/OCRmyPDF) which in turn uses tesseract for its text recognition.
|
Stirling-PDF uses [OCRmyPDF](https://github.com/ocrmypdf/OCRmyPDF) which in turn uses tesseract for its text recognition.
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ sudo make install
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Step 3: Install Additional Software
|
### Step 3: Install Additional Software
|
||||||
Next we need to install LibreOffice for conversions, ocrmypdf for OCR, and opencv for patern recognition functionality.
|
Next we need to install LibreOffice for conversions, ocrmypdf for OCR, and opencv for pattern recognition functionality.
|
||||||
|
|
||||||
Install the following software:
|
Install the following software:
|
||||||
|
|
||||||
@@ -264,7 +264,7 @@ sudo systemctl restart stirlingpdf.service
|
|||||||
|
|
||||||
Remember to set the necessary environment variables before running the project if you want to customize the application the list can be seen in the main readme.
|
Remember to set the necessary environment variables before running the project if you want to customize the application the list can be seen in the main readme.
|
||||||
|
|
||||||
You can do this in the terminal by using the `export` command or -D arguements to java -jar command:
|
You can do this in the terminal by using the `export` command or -D argument to java -jar command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export APP_HOME_NAME="Stirling PDF"
|
export APP_HOME_NAME="Stirling PDF"
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
# Pipeline Configuration and Usage Tutorial
|
# Pipeline Configuration and Usage Tutorial
|
||||||
|
- Configure the pipeline config file and input files to run files against it
|
||||||
## Whilst Pipelines are in alpha...
|
- For reuse, download the config file and re-upload it when needed, or place it in /pipeline/defaultWebUIConfigs/ to auto-load in the web UI for all users
|
||||||
You must enable this alpha functionality by setting
|
|
||||||
```yaml
|
|
||||||
system:
|
|
||||||
enableAlphaFunctionality: true
|
|
||||||
```
|
|
||||||
To true like in the above for your `/config/settings.yml` file, after restarting Stirling-PDF you should see both UI and folder scanning enabled.
|
|
||||||
|
|
||||||
|
|
||||||
## Steps to Configure and Use Your Pipeline
|
## Steps to Configure and Use Your Pipeline
|
||||||
|
|
||||||
@@ -40,3 +33,12 @@ To true like in the above for your `/config/settings.yml` file, after restarting
|
|||||||
|
|
||||||
10. **Note on Web UI Limitations**
|
10. **Note on Web UI Limitations**
|
||||||
- The current web UI version does not support operations that require multiple different types of inputs, such as adding a separate image to a PDF.
|
- The current web UI version does not support operations that require multiple different types of inputs, such as adding a separate image to a PDF.
|
||||||
|
|
||||||
|
|
||||||
|
### Current Limitations
|
||||||
|
- Cannot have more than one of the same operation
|
||||||
|
- Cannot input additional files via UI
|
||||||
|
- All files and operations run in serial mode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
[](https://github.com/Stirling-Tools/Stirling-PDF/)
|
[](https://github.com/Stirling-Tools/Stirling-PDF/)
|
||||||
[](https://github.com/Stirling-Tools/stirling-pdf)
|
[](https://github.com/Stirling-Tools/stirling-pdf)
|
||||||
[](https://www.paypal.com/paypalme/froodleplex)
|
[](https://www.paypal.com/paypalme/froodleplex)
|
||||||
[](https://github.com/sponsors/Frooodle)
|
[](https://github.com/sponsors/Frooodle)
|
||||||
|
|
||||||
[](https://cloud.digitalocean.com/apps/new?repo=https://github.com/Stirling-Tools/Stirling-PDF/tree/digitalOcean&refcode=c3210994b1af)
|
[](https://cloud.digitalocean.com/apps/new?repo=https://github.com/Stirling-Tools/Stirling-PDF/tree/digitalOcean&refcode=c3210994b1af)
|
||||||
|
|
||||||
@@ -114,6 +114,7 @@ docker run -d \
|
|||||||
-v /location/of/extraConfigs:/configs \
|
-v /location/of/extraConfigs:/configs \
|
||||||
-v /location/of/logs:/logs \
|
-v /location/of/logs:/logs \
|
||||||
-e DOCKER_ENABLE_SECURITY=false \
|
-e DOCKER_ENABLE_SECURITY=false \
|
||||||
|
-e INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false \
|
||||||
--name stirling-pdf \
|
--name stirling-pdf \
|
||||||
frooodle/s-pdf:latest
|
frooodle/s-pdf:latest
|
||||||
|
|
||||||
@@ -137,6 +138,7 @@ services:
|
|||||||
# - /location/of/logs:/logs/
|
# - /location/of/logs:/logs/
|
||||||
environment:
|
environment:
|
||||||
- DOCKER_ENABLE_SECURITY=false
|
- DOCKER_ENABLE_SECURITY=false
|
||||||
|
- INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
|
||||||
```
|
```
|
||||||
|
|
||||||
Note: Podman is CLI-compatible with Docker, so simply replace "docker" with "podman".
|
Note: Podman is CLI-compatible with Docker, so simply replace "docker" with "podman".
|
||||||
@@ -172,7 +174,7 @@ Stirling PDF currently supports 26!
|
|||||||
- Hindi (हिंदी) (hi_IN)
|
- Hindi (हिंदी) (hi_IN)
|
||||||
- Hungarian (Magyar) (hu_HU)
|
- Hungarian (Magyar) (hu_HU)
|
||||||
- Bulgarian (Български) (bg_BG)
|
- Bulgarian (Български) (bg_BG)
|
||||||
- Sebian Latin alphabet (Srpski) (sr-Latn-RS)
|
- Sebian Latin alphabet (Srpski) (sr_LATN_RS)
|
||||||
|
|
||||||
## Contributing (creating issues, translations, fixing bugs, etc.)
|
## Contributing (creating issues, translations, fixing bugs, etc.)
|
||||||
|
|
||||||
@@ -228,6 +230,7 @@ metrics:
|
|||||||
- ``SYSTEM_ROOTURIPATH`` ie set to ``/pdf-app`` to Set the application's root URI to ``localhost:8080/pdf-app``
|
- ``SYSTEM_ROOTURIPATH`` ie set to ``/pdf-app`` to Set the application's root URI to ``localhost:8080/pdf-app``
|
||||||
- ``SYSTEM_CONNECTIONTIMEOUTMINUTES`` to set custom connection timeout values
|
- ``SYSTEM_CONNECTIONTIMEOUTMINUTES`` to set custom connection timeout values
|
||||||
- ``DOCKER_ENABLE_SECURITY`` to tell docker to download security jar (required as true for auth login)
|
- ``DOCKER_ENABLE_SECURITY`` to tell docker to download security jar (required as true for auth login)
|
||||||
|
- ``INSTALL_BOOK_AND_ADVANCED_HTML_OPS`` to download calibre onto stirling-pdf enabling pdf to/from book and advanced html conversion
|
||||||
|
|
||||||
## API
|
## API
|
||||||
For those wanting to use Stirling-PDFs backend API to link with their own custom scripting to edit PDFs you can view all existing API documentation
|
For those wanting to use Stirling-PDFs backend API to link with their own custom scripting to edit PDFs you can view all existing API documentation
|
||||||
@@ -262,7 +265,7 @@ For API usage you must provide a header with 'X-API-Key' and the associated API
|
|||||||
- Redact text (Via UI not just automated way)
|
- Redact text (Via UI not just automated way)
|
||||||
- Add Forms
|
- Add Forms
|
||||||
- Multi page layout (Stich PDF pages together) support x rows y columns and custom page sizing
|
- Multi page layout (Stich PDF pages together) support x rows y columns and custom page sizing
|
||||||
- Fill forms mannual and automatic
|
- Fill forms manually or automatically
|
||||||
|
|
||||||
### Q2: Why is my application downloading .htm files?
|
### Q2: Why is my application downloading .htm files?
|
||||||
This is an issue caused commonly by your NGINX configuration. The default file upload size for NGINX is 1MB, you need to add the following in your Nginx sites-available file. ``client_max_body_size SIZE;`` Where "SIZE" is 50M for example for 50MB files.
|
This is an issue caused commonly by your NGINX configuration. The default file upload size for NGINX is 1MB, you need to add the following in your Nginx sites-available file. ``client_max_body_size SIZE;`` Where "SIZE" is 50M for example for 50MB files.
|
||||||
|
|||||||
32
build.gradle
32
build.gradle
@@ -1,6 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'java'
|
id 'java'
|
||||||
id 'org.springframework.boot' version '3.2.2'
|
id 'org.springframework.boot' version '3.2.3'
|
||||||
id 'io.spring.dependency-management' version '1.1.3'
|
id 'io.spring.dependency-management' version '1.1.3'
|
||||||
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"
|
||||||
@@ -12,7 +12,7 @@ plugins {
|
|||||||
import com.github.jk1.license.render.*
|
import com.github.jk1.license.render.*
|
||||||
|
|
||||||
group = 'stirling.software'
|
group = 'stirling.software'
|
||||||
version = '0.21.0'
|
version = '0.22.3'
|
||||||
sourceCompatibility = '17'
|
sourceCompatibility = '17'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
@@ -20,7 +20,6 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
licenseReport {
|
licenseReport {
|
||||||
renderers = [new JsonReportRenderer()]
|
renderers = [new JsonReportRenderer()]
|
||||||
}
|
}
|
||||||
@@ -48,7 +47,6 @@ openApi {
|
|||||||
outputFileName = "SwaggerDoc.json"
|
outputFileName = "SwaggerDoc.json"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
launch4j {
|
launch4j {
|
||||||
icon = "${projectDir}/src/main/resources/static/favicon.ico"
|
icon = "${projectDir}/src/main/resources/static/favicon.ico"
|
||||||
|
|
||||||
@@ -87,26 +85,26 @@ spotless {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
//security updates
|
//security updates
|
||||||
implementation 'ch.qos.logback:logback-classic:1.4.14'
|
implementation 'ch.qos.logback:logback-classic:1.5.3'
|
||||||
implementation 'ch.qos.logback:logback-core:1.4.14'
|
implementation 'ch.qos.logback:logback-core:1.5.3'
|
||||||
implementation 'org.springframework:spring-webmvc:6.1.2'
|
implementation 'org.springframework:spring-webmvc:6.1.4'
|
||||||
|
|
||||||
implementation("io.github.pixee:java-security-toolkit:1.1.2")
|
implementation("io.github.pixee:java-security-toolkit:1.1.2")
|
||||||
|
|
||||||
implementation 'org.yaml:snakeyaml:2.2'
|
implementation 'org.yaml:snakeyaml:2.2'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.2'
|
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.3'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.2.2'
|
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.2.3'
|
||||||
|
|
||||||
if (System.getenv('DOCKER_ENABLE_SECURITY') != 'false') {
|
if (System.getenv('DOCKER_ENABLE_SECURITY') != 'false') {
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-security:3.2.2'
|
implementation 'org.springframework.boot:spring-boot-starter-security:3.2.3'
|
||||||
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.2.RELEASE'
|
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.2.RELEASE'
|
||||||
implementation "org.springframework.boot:spring-boot-starter-data-jpa:3.2.2"
|
implementation "org.springframework.boot:spring-boot-starter-data-jpa:3.2.3"
|
||||||
|
|
||||||
//2.2.x requires rebuild of DB file.. need migration path
|
//2.2.x requires rebuild of DB file.. need migration path
|
||||||
implementation "com.h2database:h2:2.1.214"
|
implementation "com.h2database:h2:2.1.214"
|
||||||
}
|
}
|
||||||
|
|
||||||
testImplementation 'org.springframework.boot:spring-boot-starter-test:3.2.2'
|
testImplementation 'org.springframework.boot:spring-boot-starter-test:3.2.3'
|
||||||
|
|
||||||
// Batik
|
// Batik
|
||||||
implementation 'org.apache.xmlgraphics:batik-all:1.17'
|
implementation 'org.apache.xmlgraphics:batik-all:1.17'
|
||||||
@@ -149,16 +147,18 @@ dependencies {
|
|||||||
|
|
||||||
implementation 'org.bouncycastle:bcprov-jdk18on:1.77'
|
implementation 'org.bouncycastle:bcprov-jdk18on:1.77'
|
||||||
implementation 'org.bouncycastle:bcpkix-jdk18on:1.77'
|
implementation 'org.bouncycastle:bcpkix-jdk18on:1.77'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-actuator:3.2.2'
|
implementation 'org.springframework.boot:spring-boot-starter-actuator:3.2.3'
|
||||||
implementation 'io.micrometer:micrometer-core:1.12.2'
|
implementation 'io.micrometer:micrometer-core:1.12.3'
|
||||||
implementation group: 'com.google.zxing', name: 'core', version: '3.5.2'
|
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.21.0'
|
implementation 'org.commonmark:commonmark:0.21.0'
|
||||||
implementation 'org.commonmark:commonmark-ext-gfm-tables:0.21.0'
|
implementation 'org.commonmark:commonmark-ext-gfm-tables:0.21.0'
|
||||||
// https://mvnrepository.com/artifact/com.github.vladimir-bukhtoyarov/bucket4j-core
|
// https://mvnrepository.com/artifact/com.github.vladimir-bukhtoyarov/bucket4j-core
|
||||||
implementation 'com.github.vladimir-bukhtoyarov:bucket4j-core:7.6.0'
|
implementation 'com.github.vladimir-bukhtoyarov:bucket4j-core:7.6.0'
|
||||||
|
|
||||||
developmentOnly("org.springframework.boot:spring-boot-devtools:3.2.2")
|
implementation 'com.fathzer:javaluator:3.0.3'
|
||||||
|
|
||||||
|
developmentOnly("org.springframework.boot:spring-boot-devtools:3.2.3")
|
||||||
compileOnly 'org.projectlombok:lombok:1.18.30'
|
compileOnly 'org.projectlombok:lombok:1.18.30'
|
||||||
annotationProcessor 'org.projectlombok:lombok:1.18.28'
|
annotationProcessor 'org.projectlombok:lombok:1.18.28'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
appVersion: 0.14.2
|
appVersion: 0.22.3
|
||||||
description: locally hosted web application that allows you to perform various operations on PDF files
|
description: locally hosted web application that allows you to perform various operations on PDF files
|
||||||
home: https://github.com/Stirling-Tools/Stirling-PDF
|
home: https://github.com/Stirling-Tools/Stirling-PDF
|
||||||
keywords:
|
keywords:
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ commonLabels: {}
|
|||||||
# team_name: dev
|
# team_name: dev
|
||||||
|
|
||||||
envs: []
|
envs: []
|
||||||
# - name: PP_HOME_NAME
|
# - name: UI_APP_NAME
|
||||||
# value: "Stirling PDF"
|
# value: "Stirling PDF"
|
||||||
# - name: APP_HOME_DESCRIPTION
|
# - name: UI_HOME_DESCRIPTION
|
||||||
# value: "Your locally hosted one-stop-shop for all your PDF needs."
|
# value: "Your locally hosted one-stop-shop for all your PDF needs."
|
||||||
# - name: APP_NAVBAR_NAME
|
# - name: UI_APP_NAVBAR_NAME
|
||||||
# value: "Stirling PDF"
|
# value: "Stirling PDF"
|
||||||
# - name: ALLOW_GOOGLE_VISIBILITY
|
# - name: ALLOW_GOOGLE_VISIBILITY
|
||||||
# value: "true"
|
# value: "true"
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 8080:8080
|
- 8080:8080
|
||||||
volumes:
|
volumes:
|
||||||
- /stirling/latest/data:/usr/share/tesseract-ocr/5/tessdata:rw
|
- /stirling/latest/data:/usr/share/tessdata:rw
|
||||||
- /stirling/latest/config:/configs:rw
|
- /stirling/latest/config:/configs:rw
|
||||||
- /stirling/latest/logs:/logs:rw
|
- /stirling/latest/logs:/logs:rw
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -15,12 +15,15 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 8080:8080
|
- 8080:8080
|
||||||
volumes:
|
volumes:
|
||||||
- /stirling/latest/data:/usr/share/tesseract-ocr/5/tessdata:rw
|
- /stirling/latest/data:/usr/share/tessdata:rw
|
||||||
- /stirling/latest/config:/configs:rw
|
- /stirling/latest/config:/configs:rw
|
||||||
- /stirling/latest/logs:/logs:rw
|
- /stirling/latest/logs:/logs:rw
|
||||||
environment:
|
environment:
|
||||||
DOCKER_ENABLE_SECURITY: "true"
|
DOCKER_ENABLE_SECURITY: "true"
|
||||||
SECURITY_ENABLELOGIN: "true"
|
SECURITY_ENABLELOGIN: "true"
|
||||||
|
PUID: 1002
|
||||||
|
PGID: 1002
|
||||||
|
UMASK: "022"
|
||||||
SYSTEM_DEFAULTLOCALE: en-US
|
SYSTEM_DEFAULTLOCALE: en-US
|
||||||
UI_APPNAME: Stirling-PDF
|
UI_APPNAME: Stirling-PDF
|
||||||
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest with Security
|
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest with Security
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 8080:8080
|
- 8080:8080
|
||||||
volumes:
|
volumes:
|
||||||
- /stirling/latest/data:/usr/share/tesseract-ocr/5/tessdata:rw
|
- /stirling/latest/data:/usr/share/tessdata:rw
|
||||||
- /stirling/latest/config:/configs:rw
|
- /stirling/latest/config:/configs:rw
|
||||||
- /stirling/latest/logs:/logs:rw
|
- /stirling/latest/logs:/logs:rw
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 8080:8080
|
- 8080:8080
|
||||||
volumes:
|
volumes:
|
||||||
- /stirling/latest/data:/usr/share/tesseract-ocr/5/tessdata:rw
|
- /stirling/latest/data:/usr/share/tessdata:rw
|
||||||
- /stirling/latest/config:/configs:rw
|
- /stirling/latest/config:/configs:rw
|
||||||
- /stirling/latest/logs:/logs:rw
|
- /stirling/latest/logs:/logs:rw
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
"parameters": {
|
"parameters": {
|
||||||
"horizontalDivisions": 2,
|
"horizontalDivisions": 2,
|
||||||
"verticalDivisions": 2,
|
"verticalDivisions": 2,
|
||||||
"fileInput": "automated"
|
"fileInput": "automated",
|
||||||
|
"merge": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
import cv2
|
|
||||||
import sys
|
|
||||||
import argparse
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
def is_blank_image(image_path, threshold=10, white_percent=99, white_value=255, blur_size=5):
|
|
||||||
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
|
|
||||||
|
|
||||||
if image is None:
|
|
||||||
print(f"Error: Unable to read the image file: {image_path}")
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Apply Gaussian blur to reduce noise
|
|
||||||
blurred_image = cv2.GaussianBlur(image, (blur_size, blur_size), 0)
|
|
||||||
|
|
||||||
_, thresholded_image = cv2.threshold(blurred_image, white_value - threshold, white_value, cv2.THRESH_BINARY)
|
|
||||||
|
|
||||||
# Calculate the percentage of white pixels in the thresholded image
|
|
||||||
white_pixels = np.sum(thresholded_image == white_value)
|
|
||||||
white_pixel_percentage = (white_pixels / thresholded_image.size) * 100
|
|
||||||
|
|
||||||
print(f"Page has white pixel percent of {white_pixel_percentage}")
|
|
||||||
return white_pixel_percentage >= white_percent
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
parser = argparse.ArgumentParser(description='Detect if an image is considered blank or not.')
|
|
||||||
parser.add_argument('image_path', help='The path to the image file.')
|
|
||||||
parser.add_argument('-t', '--threshold', type=int, default=10, help='Threshold for determining white pixels. The default value is 10.')
|
|
||||||
parser.add_argument('-w', '--white_percent', type=float, default=99, help='The percentage of white pixels for an image to be considered blank. The default value is 99.')
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
blank = is_blank_image(args.image_path, args.threshold, args.white_percent)
|
|
||||||
|
|
||||||
# Return code 1: The image is considered blank.
|
|
||||||
# Return code 0: The image is not considered blank.
|
|
||||||
sys.exit(int(blank))
|
|
||||||
@@ -14,6 +14,8 @@ if [ "$DOCKER_ENABLE_SECURITY" = "true" ] && [ "$VERSION_TAG" != "alpha" ]; then
|
|||||||
if [ $? -eq 0 ]; then # checks if curl was successful
|
if [ $? -eq 0 ]; then # checks if curl was successful
|
||||||
rm -f app.jar
|
rm -f app.jar
|
||||||
ln -s app-security.jar app.jar
|
ln -s app-security.jar app.jar
|
||||||
|
chown stirlingpdfuser:stirlingpdfgroup app.jar || true
|
||||||
|
chmod 755 app.jar || true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,6 +1,29 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Update the user and group IDs as per environment variables
|
||||||
|
if [ ! -z "$PUID" ] && [ "$PUID" != "$(id -u stirlingpdfuser)" ]; then
|
||||||
|
usermod -o -u "$PUID" stirlingpdfuser || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -z "$PGID" ] && [ "$PGID" != "$(getent group stirlingpdfgroup | cut -d: -f3)" ]; then
|
||||||
|
groupmod -o -g "$PGID" stirlingpdfgroup || true
|
||||||
|
fi
|
||||||
|
umask "$UMASK" || true
|
||||||
|
|
||||||
|
|
||||||
|
if [[ "$INSTALL_BOOK_AND_ADVANCED_HTML_OPS" == "true" ]]; then
|
||||||
|
apk add --no-cache calibre@testing
|
||||||
|
fi
|
||||||
|
|
||||||
/scripts/download-security-jar.sh
|
/scripts/download-security-jar.sh
|
||||||
|
|
||||||
# Run the main command
|
echo "Setting permissions and ownership for necessary directories..."
|
||||||
exec "$@"
|
if chown -R stirlingpdfuser:stirlingpdfgroup $HOME /logs /scripts /usr/share/fonts/opentype/noto /usr/share/tessdata /configs /customFiles /pipeline /app.jar; then
|
||||||
|
chmod -R 755 /logs /scripts /usr/share/fonts/opentype/noto /usr/share/tessdata /configs /customFiles /pipeline /app.jar || true
|
||||||
|
# If chown succeeds, execute the command as stirlingpdfuser
|
||||||
|
exec su-exec stirlingpdfuser "$@"
|
||||||
|
else
|
||||||
|
# If chown fails, execute the command without changing the user context
|
||||||
|
echo "[WARN] Chown failed, running as host user"
|
||||||
|
exec "$@"
|
||||||
|
fi
|
||||||
|
|||||||
@@ -13,18 +13,47 @@ if [ -d /usr/share/tesseract-ocr/5/tessdata ]; then
|
|||||||
cp -r /usr/share/tesseract-ocr/5/tessdata/* /usr/share/tessdata || true;
|
cp -r /usr/share/tesseract-ocr/5/tessdata/* /usr/share/tessdata || true;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Update the user and group IDs as per environment variables
|
||||||
|
if [ ! -z "$PUID" ] && [ "$PUID" != "$(id -u stirlingpdfuser)" ]; then
|
||||||
|
usermod -o -u "$PUID" stirlingpdfuser || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -z "$PGID" ] && [ "$PGID" != "$(getent group stirlingpdfgroup | cut -d: -f3)" ]; then
|
||||||
|
groupmod -o -g "$PGID" stirlingpdfgroup || true
|
||||||
|
fi
|
||||||
|
umask "$UMASK" || true
|
||||||
|
|
||||||
|
|
||||||
# Check if TESSERACT_LANGS environment variable is set and is not empty
|
# Check if TESSERACT_LANGS environment variable is set and is not empty
|
||||||
if [[ -n "$TESSERACT_LANGS" ]]; then
|
if [[ -n "$TESSERACT_LANGS" ]]; then
|
||||||
# Convert comma-separated values to a space-separated list
|
# Convert comma-separated values to a space-separated list
|
||||||
LANGS=$(echo $TESSERACT_LANGS | tr ',' ' ')
|
LANGS=$(echo $TESSERACT_LANGS | tr ',' ' ')
|
||||||
|
pattern='^[a-zA-Z]{2,4}(_[a-zA-Z]{2,4})?$'
|
||||||
# Install each language pack
|
# Install each language pack
|
||||||
for LANG in $LANGS; do
|
for LANG in $LANGS; do
|
||||||
apt-get install -y "tesseract-ocr-$LANG"
|
if [[ $LANG =~ $pattern ]]; then
|
||||||
|
apk add --no-cache "tesseract-ocr-data-$LANG"
|
||||||
|
else
|
||||||
|
echo "Skipping invalid language code"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "$INSTALL_BOOK_AND_ADVANCED_HTML_OPS" == "true" ]]; then
|
||||||
|
apk add --no-cache calibre@testing
|
||||||
|
fi
|
||||||
|
|
||||||
/scripts/download-security-jar.sh
|
/scripts/download-security-jar.sh
|
||||||
|
|
||||||
# Run the main command
|
echo "Setting permissions and ownership for necessary directories..."
|
||||||
exec "$@"
|
# Attempt to change ownership of directories and files
|
||||||
|
if chown -R stirlingpdfuser:stirlingpdfgroup $HOME /logs /scripts /usr/share/fonts/opentype/noto /usr/share/tessdata /configs /customFiles /pipeline /app.jar; then
|
||||||
|
chmod -R 755 /logs /scripts /usr/share/fonts/opentype/noto /usr/share/tessdata /configs /customFiles /pipeline /app.jar || true
|
||||||
|
# If chown succeeds, execute the command as stirlingpdfuser
|
||||||
|
exec su-exec stirlingpdfuser "$@"
|
||||||
|
else
|
||||||
|
# If chown fails, execute the command without changing the user context
|
||||||
|
echo "[WARN] Chown failed, running as host user"
|
||||||
|
exec "$@"
|
||||||
|
fi
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
package stirling.software.SPDF;
|
package stirling.software.SPDF;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
|
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.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
@@ -14,14 +19,25 @@ import io.github.pixee.security.SystemCommand;
|
|||||||
|
|
||||||
import jakarta.annotation.PostConstruct;
|
import jakarta.annotation.PostConstruct;
|
||||||
import stirling.software.SPDF.config.ConfigInitializer;
|
import stirling.software.SPDF.config.ConfigInitializer;
|
||||||
import stirling.software.SPDF.utils.GeneralUtils;
|
import stirling.software.SPDF.model.ApplicationProperties;
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@EnableScheduling
|
@EnableScheduling
|
||||||
public class SPdfApplication {
|
public class SPdfApplication {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(SPdfApplication.class);
|
||||||
|
|
||||||
@Autowired private Environment env;
|
@Autowired private Environment env;
|
||||||
|
|
||||||
|
@Autowired ApplicationProperties applicationProperties;
|
||||||
|
|
||||||
|
private static String serverPortStatic;
|
||||||
|
|
||||||
|
@Value("${server.port:8080}")
|
||||||
|
public void setServerPortStatic(String port) {
|
||||||
|
SPdfApplication.serverPortStatic = port;
|
||||||
|
}
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() {
|
public void init() {
|
||||||
// Check if the BROWSER_OPEN environment variable is set to true
|
// Check if the BROWSER_OPEN environment variable is set to true
|
||||||
@@ -30,7 +46,7 @@ public class SPdfApplication {
|
|||||||
|
|
||||||
if (browserOpen) {
|
if (browserOpen) {
|
||||||
try {
|
try {
|
||||||
String url = "http://localhost:" + getPort();
|
String url = "http://localhost:" + getNonStaticPort();
|
||||||
|
|
||||||
String os = System.getProperty("os.name").toLowerCase();
|
String os = System.getProperty("os.name").toLowerCase();
|
||||||
Runtime rt = Runtime.getRuntime();
|
Runtime rt = Runtime.getRuntime();
|
||||||
@@ -39,12 +55,13 @@ public class SPdfApplication {
|
|||||||
SystemCommand.runCommand(rt, "rundll32 url.dll,FileProtocolHandler " + url);
|
SystemCommand.runCommand(rt, "rundll32 url.dll,FileProtocolHandler " + url);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
logger.error("Error opening browser: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
logger.info("Running configs {}", applicationProperties.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) throws IOException, InterruptedException {
|
||||||
SpringApplication app = new SpringApplication(SPdfApplication.class);
|
SpringApplication app = new SpringApplication(SPdfApplication.class);
|
||||||
app.addInitializers(new ConfigInitializer());
|
app.addInitializers(new ConfigInitializer());
|
||||||
if (Files.exists(Paths.get("configs/settings.yml"))) {
|
if (Files.exists(Paths.get("configs/settings.yml"))) {
|
||||||
@@ -52,7 +69,7 @@ public class SPdfApplication {
|
|||||||
Collections.singletonMap(
|
Collections.singletonMap(
|
||||||
"spring.config.additional-location", "file:configs/settings.yml"));
|
"spring.config.additional-location", "file:configs/settings.yml"));
|
||||||
} else {
|
} else {
|
||||||
System.out.println(
|
logger.warn(
|
||||||
"External configuration file 'configs/settings.yml' does not exist. Using default configuration and environment configuration instead.");
|
"External configuration file 'configs/settings.yml' does not exist. Using default configuration and environment configuration instead.");
|
||||||
}
|
}
|
||||||
app.run(args);
|
app.run(args);
|
||||||
@@ -60,24 +77,30 @@ public class SPdfApplication {
|
|||||||
try {
|
try {
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
// TODO Auto-generated catch block
|
Thread.currentThread().interrupt();
|
||||||
e.printStackTrace();
|
throw new RuntimeException("Thread interrupted while sleeping", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
GeneralUtils.createDir("customFiles/static/");
|
try {
|
||||||
GeneralUtils.createDir("customFiles/templates/");
|
Files.createDirectories(Path.of("customFiles/static/"));
|
||||||
|
Files.createDirectories(Path.of("customFiles/templates/"));
|
||||||
System.out.println("Stirling-PDF Started.");
|
} catch (Exception e) {
|
||||||
|
logger.error("Error creating directories: {}", e.getMessage());
|
||||||
String url = "http://localhost:" + getPort();
|
}
|
||||||
System.out.println("Navigate to " + url);
|
printStartupLogs();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getPort() {
|
private static void printStartupLogs() {
|
||||||
String port = System.getProperty("local.server.port");
|
logger.info("Stirling-PDF Started.");
|
||||||
if (port == null || port.isEmpty()) {
|
String url = "http://localhost:" + getStaticPort();
|
||||||
port = "8080";
|
logger.info("Navigate to {}", url);
|
||||||
}
|
}
|
||||||
return port;
|
|
||||||
|
public static String getStaticPort() {
|
||||||
|
return serverPortStatic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNonStaticPort() {
|
||||||
|
return serverPortStatic;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,9 +79,10 @@ public class AppConfig {
|
|||||||
|
|
||||||
@Bean(name = "bookAndHtmlFormatsInstalled")
|
@Bean(name = "bookAndHtmlFormatsInstalled")
|
||||||
public boolean bookAndHtmlFormatsInstalled() {
|
public boolean bookAndHtmlFormatsInstalled() {
|
||||||
return applicationProperties
|
String installOps = System.getProperty("INSTALL_BOOK_AND_ADVANCED_HTML_OPS");
|
||||||
.getSystem()
|
if (installOps == null) {
|
||||||
.getCustomApplications()
|
installOps = System.getenv("INSTALL_BOOK_AND_ADVANCED_HTML_OPS");
|
||||||
.isInstallBookAndHtmlFormats();
|
}
|
||||||
|
return "true".equalsIgnoreCase(installOps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,6 +79,16 @@ public class ConfigInitializer
|
|||||||
return parts.length > 0 ? parts[0].trim().replace("#", "").trim() : "";
|
return parts.length > 0 ? parts[0].trim().replace("#", "").trim() : "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Function<String, Integer> getIndentationLevel =
|
||||||
|
line -> {
|
||||||
|
int count = 0;
|
||||||
|
for (char ch : line.toCharArray()) {
|
||||||
|
if (ch == ' ') count++;
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
};
|
||||||
|
|
||||||
Set<String> userKeys = userLines.stream().map(extractKey).collect(Collectors.toSet());
|
Set<String> userKeys = userLines.stream().map(extractKey).collect(Collectors.toSet());
|
||||||
|
|
||||||
for (String line : templateLines) {
|
for (String line : templateLines) {
|
||||||
@@ -134,10 +144,77 @@ public class ConfigInitializer
|
|||||||
.map(extractKey)
|
.map(extractKey)
|
||||||
.anyMatch(templateKey -> templateKey.equalsIgnoreCase(userKey));
|
.anyMatch(templateKey -> templateKey.equalsIgnoreCase(userKey));
|
||||||
if (!isPresentInTemplate && !isCommented.apply(userLine)) {
|
if (!isPresentInTemplate && !isCommented.apply(userLine)) {
|
||||||
|
if (!childOfTemplateEntry(
|
||||||
|
isCommented,
|
||||||
|
extractKey,
|
||||||
|
getIndentationLevel,
|
||||||
|
userLines,
|
||||||
|
userLine,
|
||||||
|
templateLines)) {
|
||||||
|
// check if userLine is a child of a entry within templateLines or not, if child
|
||||||
|
// of parent in templateLines then dont add to mergedLines, if anything else
|
||||||
|
// then add
|
||||||
mergedLines.add(userLine);
|
mergedLines.add(userLine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Files.write(outputPath, mergedLines, StandardCharsets.UTF_8);
|
Files.write(outputPath, mergedLines, StandardCharsets.UTF_8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// New method to check if a userLine is a child of an entry in templateLines
|
||||||
|
boolean childOfTemplateEntry(
|
||||||
|
Function<String, Boolean> isCommented,
|
||||||
|
Function<String, String> extractKey,
|
||||||
|
Function<String, Integer> getIndentationLevel,
|
||||||
|
List<String> userLines,
|
||||||
|
String userLine,
|
||||||
|
List<String> templateLines) {
|
||||||
|
String userKey = extractKey.apply(userLine).trim();
|
||||||
|
int userIndentation = getIndentationLevel.apply(userLine);
|
||||||
|
|
||||||
|
// Start by assuming the line is not a child of an entry in templateLines
|
||||||
|
boolean isChild = false;
|
||||||
|
|
||||||
|
// Iterate backwards through userLines from the current line to find any parent
|
||||||
|
for (int i = userLines.indexOf(userLine) - 1; i >= 0; i--) {
|
||||||
|
String potentialParentLine = userLines.get(i);
|
||||||
|
int parentIndentation = getIndentationLevel.apply(potentialParentLine);
|
||||||
|
|
||||||
|
// Check if we've reached a potential parent based on indentation
|
||||||
|
if (parentIndentation < userIndentation) {
|
||||||
|
String parentKey = extractKey.apply(potentialParentLine).trim();
|
||||||
|
|
||||||
|
// Now, check if this potential parent or any of its parents exist in templateLines
|
||||||
|
boolean parentExistsInTemplate =
|
||||||
|
templateLines.stream()
|
||||||
|
.filter(line -> !isCommented.apply(line)) // Skip commented lines
|
||||||
|
.anyMatch(
|
||||||
|
templateLine -> {
|
||||||
|
String templateKey =
|
||||||
|
extractKey.apply(templateLine).trim();
|
||||||
|
return parentKey.equalsIgnoreCase(templateKey);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!parentExistsInTemplate) {
|
||||||
|
// If the parent does not exist in template, check the next level parent
|
||||||
|
userIndentation =
|
||||||
|
parentIndentation; // Update userIndentation to the parent's indentation
|
||||||
|
// for next iteration
|
||||||
|
if (parentIndentation == 0) {
|
||||||
|
// If we've reached the top-level parent and it's not in template, the
|
||||||
|
// original line is considered not a child
|
||||||
|
isChild = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// If any parent exists in template, the original line is considered a child
|
||||||
|
isChild = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return isChild; // Return true if the line is not a child of any entry in templateLines
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,7 +140,6 @@ public class EndpointConfiguration {
|
|||||||
// CLI
|
// CLI
|
||||||
addEndpointToGroup("CLI", "compress-pdf");
|
addEndpointToGroup("CLI", "compress-pdf");
|
||||||
addEndpointToGroup("CLI", "extract-image-scans");
|
addEndpointToGroup("CLI", "extract-image-scans");
|
||||||
addEndpointToGroup("CLI", "remove-blanks");
|
|
||||||
addEndpointToGroup("CLI", "repair");
|
addEndpointToGroup("CLI", "repair");
|
||||||
addEndpointToGroup("CLI", "pdf-to-pdfa");
|
addEndpointToGroup("CLI", "pdf-to-pdfa");
|
||||||
addEndpointToGroup("CLI", "file-to-pdf");
|
addEndpointToGroup("CLI", "file-to-pdf");
|
||||||
@@ -218,6 +217,7 @@ public class EndpointConfiguration {
|
|||||||
addEndpointToGroup("Java", "split-by-size-or-count");
|
addEndpointToGroup("Java", "split-by-size-or-count");
|
||||||
addEndpointToGroup("Java", "overlay-pdf");
|
addEndpointToGroup("Java", "overlay-pdf");
|
||||||
addEndpointToGroup("Java", "split-pdf-by-sections");
|
addEndpointToGroup("Java", "split-pdf-by-sections");
|
||||||
|
addEndpointToGroup("Java", "remove-blanks");
|
||||||
|
|
||||||
// Javascript
|
// Javascript
|
||||||
addEndpointToGroup("Javascript", "pdf-organizer");
|
addEndpointToGroup("Javascript", "pdf-organizer");
|
||||||
|
|||||||
@@ -1,69 +0,0 @@
|
|||||||
package stirling.software.SPDF.config;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import jakarta.annotation.PostConstruct;
|
|
||||||
import stirling.software.SPDF.model.ApplicationProperties;
|
|
||||||
import stirling.software.SPDF.utils.ProcessExecutor;
|
|
||||||
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
public class PostStartupProcesses {
|
|
||||||
|
|
||||||
@Autowired ApplicationProperties applicationProperties;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
@Qualifier("RunningInDocker")
|
|
||||||
private boolean runningInDocker;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
@Qualifier("bookAndHtmlFormatsInstalled")
|
|
||||||
private boolean bookAndHtmlFormatsInstalled;
|
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(PostStartupProcesses.class);
|
|
||||||
|
|
||||||
@PostConstruct
|
|
||||||
public void runInstallCommandBasedOnEnvironment() throws IOException, InterruptedException {
|
|
||||||
List<List<String>> commands = new ArrayList<>();
|
|
||||||
// Checking for DOCKER_INSTALL_BOOK_FORMATS environment variable
|
|
||||||
if (bookAndHtmlFormatsInstalled) {
|
|
||||||
List<String> tmpList = new ArrayList<>();
|
|
||||||
|
|
||||||
tmpList = new ArrayList<>();
|
|
||||||
tmpList.addAll(Arrays.asList("apk add --no-cache calibre"));
|
|
||||||
commands.add(tmpList);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!commands.isEmpty()) {
|
|
||||||
// Run the command
|
|
||||||
if (runningInDocker) {
|
|
||||||
List<String> tmpList = new ArrayList<>();
|
|
||||||
|
|
||||||
for (List<String> list : commands) {
|
|
||||||
ProcessExecutorResult returnCode =
|
|
||||||
ProcessExecutor.getInstance(ProcessExecutor.Processes.INSTALL_APP, true)
|
|
||||||
.runCommandWithOutputHandling(list);
|
|
||||||
logger.info("RC for app installs {}", returnCode.getRc());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
logger.info(
|
|
||||||
"Not running inside Docker so skipping automated install process with command.");
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (runningInDocker) {
|
|
||||||
logger.info("No custom apps to install.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package stirling.software.SPDF.config.security;
|
package stirling.software.SPDF.config.security;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.security.authentication.BadCredentialsException;
|
import org.springframework.security.authentication.BadCredentialsException;
|
||||||
@@ -12,15 +13,19 @@ import org.springframework.stereotype.Component;
|
|||||||
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.model.User;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler {
|
public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler {
|
||||||
|
|
||||||
@Autowired private final LoginAttemptService loginAttemptService;
|
@Autowired private final LoginAttemptService loginAttemptService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired private final UserService userService; // Inject the UserService
|
||||||
public CustomAuthenticationFailureHandler(LoginAttemptService loginAttemptService) {
|
|
||||||
|
public CustomAuthenticationFailureHandler(
|
||||||
|
LoginAttemptService loginAttemptService, UserService userService) {
|
||||||
this.loginAttemptService = loginAttemptService;
|
this.loginAttemptService = loginAttemptService;
|
||||||
|
this.userService = userService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -33,17 +38,27 @@ public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationF
|
|||||||
logger.error("Failed login attempt from IP: " + ip);
|
logger.error("Failed login attempt from IP: " + ip);
|
||||||
|
|
||||||
String username = request.getParameter("username");
|
String username = request.getParameter("username");
|
||||||
|
if (!isDemoUser(username)) {
|
||||||
if (loginAttemptService.loginAttemptCheck(username)) {
|
if (loginAttemptService.loginAttemptCheck(username)) {
|
||||||
setDefaultFailureUrl("/login?error=locked");
|
setDefaultFailureUrl("/login?error=locked");
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (exception.getClass().isAssignableFrom(BadCredentialsException.class)) {
|
if (exception.getClass().isAssignableFrom(LockedException.class)) {
|
||||||
setDefaultFailureUrl("/login?error=badcredentials");
|
|
||||||
} else if (exception.getClass().isAssignableFrom(LockedException.class)) {
|
|
||||||
setDefaultFailureUrl("/login?error=locked");
|
setDefaultFailureUrl("/login?error=locked");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (exception.getClass().isAssignableFrom(BadCredentialsException.class)) {
|
||||||
|
setDefaultFailureUrl("/login?error=badcredentials");
|
||||||
|
}
|
||||||
|
|
||||||
super.onAuthenticationFailure(request, response, exception);
|
super.onAuthenticationFailure(request, response, exception);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isDemoUser(String username) {
|
||||||
|
Optional<User> user = userService.findByUsername(username);
|
||||||
|
return user.isPresent()
|
||||||
|
&& user.get().getAuthorities().stream()
|
||||||
|
.anyMatch(authority -> "ROLE_DEMO_USER".equals(authority.getAuthority()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ import org.springframework.security.authentication.dao.DaoAuthenticationProvider
|
|||||||
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
|
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
|
||||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||||
|
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||||
|
import org.springframework.security.core.session.SessionRegistry;
|
||||||
|
import org.springframework.security.core.session.SessionRegistryImpl;
|
||||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||||
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;
|
||||||
@@ -18,6 +21,7 @@ import org.springframework.security.web.authentication.rememberme.PersistentToke
|
|||||||
import org.springframework.security.web.savedrequest.NullRequestCache;
|
import org.springframework.security.web.savedrequest.NullRequestCache;
|
||||||
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
||||||
|
|
||||||
|
import jakarta.servlet.http.HttpSession;
|
||||||
import stirling.software.SPDF.repository.JPATokenRepositoryImpl;
|
import stirling.software.SPDF.repository.JPATokenRepositoryImpl;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@@ -44,6 +48,11 @@ public class SecurityConfiguration {
|
|||||||
|
|
||||||
@Autowired private FirstLoginFilter firstLoginFilter;
|
@Autowired private FirstLoginFilter firstLoginFilter;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public SessionRegistry sessionRegistry() {
|
||||||
|
return new SessionRegistryImpl();
|
||||||
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
||||||
http.addFilterBefore(userAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
|
http.addFilterBefore(userAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
|
||||||
@@ -53,6 +62,15 @@ public class SecurityConfiguration {
|
|||||||
http.csrf(csrf -> csrf.disable());
|
http.csrf(csrf -> csrf.disable());
|
||||||
http.addFilterBefore(rateLimitingFilter(), UsernamePasswordAuthenticationFilter.class);
|
http.addFilterBefore(rateLimitingFilter(), UsernamePasswordAuthenticationFilter.class);
|
||||||
http.addFilterAfter(firstLoginFilter, UsernamePasswordAuthenticationFilter.class);
|
http.addFilterAfter(firstLoginFilter, UsernamePasswordAuthenticationFilter.class);
|
||||||
|
http.sessionManagement(
|
||||||
|
sessionManagement ->
|
||||||
|
sessionManagement
|
||||||
|
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
|
||||||
|
.maximumSessions(10)
|
||||||
|
.maxSessionsPreventsLogin(false)
|
||||||
|
.sessionRegistry(sessionRegistry())
|
||||||
|
.expiredUrl("/login?logout=true"));
|
||||||
|
|
||||||
http.formLogin(
|
http.formLogin(
|
||||||
formLogin ->
|
formLogin ->
|
||||||
formLogin
|
formLogin
|
||||||
@@ -62,7 +80,7 @@ public class SecurityConfiguration {
|
|||||||
.defaultSuccessUrl("/")
|
.defaultSuccessUrl("/")
|
||||||
.failureHandler(
|
.failureHandler(
|
||||||
new CustomAuthenticationFailureHandler(
|
new CustomAuthenticationFailureHandler(
|
||||||
loginAttemptService))
|
loginAttemptService, userService))
|
||||||
.permitAll())
|
.permitAll())
|
||||||
.requestCache(requestCache -> requestCache.requestCache(new NullRequestCache()))
|
.requestCache(requestCache -> requestCache.requestCache(new NullRequestCache()))
|
||||||
.logout(
|
.logout(
|
||||||
@@ -71,7 +89,18 @@ public class SecurityConfiguration {
|
|||||||
new AntPathRequestMatcher("/logout"))
|
new AntPathRequestMatcher("/logout"))
|
||||||
.logoutSuccessUrl("/login?logout=true")
|
.logoutSuccessUrl("/login?logout=true")
|
||||||
.invalidateHttpSession(true) // Invalidate session
|
.invalidateHttpSession(true) // Invalidate session
|
||||||
.deleteCookies("JSESSIONID", "remember-me"))
|
.deleteCookies("JSESSIONID", "remember-me")
|
||||||
|
.addLogoutHandler(
|
||||||
|
(request, response, authentication) -> {
|
||||||
|
HttpSession session =
|
||||||
|
request.getSession(false);
|
||||||
|
if (session != null) {
|
||||||
|
String sessionId = session.getId();
|
||||||
|
sessionRegistry()
|
||||||
|
.removeSessionInformation(
|
||||||
|
sessionId);
|
||||||
|
}
|
||||||
|
}))
|
||||||
.rememberMe(
|
.rememberMe(
|
||||||
rememberMeConfigurer ->
|
rememberMeConfigurer ->
|
||||||
rememberMeConfigurer // Use the configurator directly
|
rememberMeConfigurer // Use the configurator directly
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public class UserAuthenticationFilter extends OncePerRequestFilter {
|
|||||||
response.setStatus(HttpStatus.UNAUTHORIZED.value());
|
response.setStatus(HttpStatus.UNAUTHORIZED.value());
|
||||||
response.getWriter()
|
response.getWriter()
|
||||||
.write(
|
.write(
|
||||||
"Authentication required. Please provide a X-API-KEY in request header.\nThis is found in Settings -> Account Settings -> API Key\nAlternativly you can disable authentication if this is unexpected");
|
"Authentication required. Please provide a X-API-KEY in request header.\nThis is found in Settings -> Account Settings -> API Key\nAlternatively you can disable authentication if this is unexpected");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -176,6 +176,10 @@ public class UserService implements UserServiceInterface {
|
|||||||
return userRepository.findByUsername(username);
|
return userRepository.findByUsername(username);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Optional<User> findByUsernameIgnoreCase(String username) {
|
||||||
|
return userRepository.findByUsernameIgnoreCase(username);
|
||||||
|
}
|
||||||
|
|
||||||
public void changeUsername(User user, String newUsername) {
|
public void changeUsername(User user, String newUsername) {
|
||||||
user.setUsername(newUsername);
|
user.setUsername(newUsername);
|
||||||
userRepository.save(user);
|
userRepository.save(user);
|
||||||
@@ -194,4 +198,8 @@ public class UserService implements UserServiceInterface {
|
|||||||
public boolean isPasswordCorrect(User user, String currentPassword) {
|
public boolean isPasswordCorrect(User user, String currentPassword) {
|
||||||
return passwordEncoder.matches(currentPassword, user.getPassword());
|
return passwordEncoder.matches(currentPassword, user.getPassword());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isUsernameValid(String username) {
|
||||||
|
return username.matches("[a-zA-Z0-9]+");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class MergeController {
|
|||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(MergeController.class);
|
private static final Logger logger = LoggerFactory.getLogger(MergeController.class);
|
||||||
|
|
||||||
private PDDocument mergeDocuments(List<PDDocument> documents) throws IOException {
|
public PDDocument mergeDocuments(List<PDDocument> documents) throws IOException {
|
||||||
PDDocument mergedDoc = new PDDocument();
|
PDDocument mergedDoc = new PDDocument();
|
||||||
for (PDDocument doc : documents) {
|
for (PDDocument doc : documents) {
|
||||||
for (PDPage page : doc.getPages()) {
|
for (PDPage page : doc.getPages()) {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package stirling.software.SPDF.controller.api;
|
|||||||
|
|
||||||
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 org.apache.pdfbox.Loader;
|
import org.apache.pdfbox.Loader;
|
||||||
@@ -50,7 +51,9 @@ public class RearrangePagesPDFController {
|
|||||||
String[] pageOrderArr = pagesToDelete.split(",");
|
String[] pageOrderArr = pagesToDelete.split(",");
|
||||||
|
|
||||||
List<Integer> pagesToRemove =
|
List<Integer> pagesToRemove =
|
||||||
GeneralUtils.parsePageList(pageOrderArr, document.getNumberOfPages());
|
GeneralUtils.parsePageList(pageOrderArr, document.getNumberOfPages(), false);
|
||||||
|
|
||||||
|
Collections.sort(pagesToRemove);
|
||||||
|
|
||||||
for (int i = pagesToRemove.size() - 1; i >= 0; i--) {
|
for (int i = pagesToRemove.size() - 1; i >= 0; i--) {
|
||||||
int pageIndex = pagesToRemove.get(i);
|
int pageIndex = pagesToRemove.get(i);
|
||||||
@@ -192,7 +195,7 @@ public class RearrangePagesPDFController {
|
|||||||
if (sortType != null && sortType.length() > 0) {
|
if (sortType != null && sortType.length() > 0) {
|
||||||
newPageOrder = processSortTypes(sortType, totalPages);
|
newPageOrder = processSortTypes(sortType, totalPages);
|
||||||
} else {
|
} else {
|
||||||
newPageOrder = GeneralUtils.parsePageList(pageOrderArr, totalPages);
|
newPageOrder = GeneralUtils.parsePageList(pageOrderArr, totalPages, false);
|
||||||
}
|
}
|
||||||
logger.info("newPageOrder = " + newPageOrder);
|
logger.info("newPageOrder = " + newPageOrder);
|
||||||
logger.info("totalPages = " + totalPages);
|
logger.info("totalPages = " + totalPages);
|
||||||
|
|||||||
@@ -49,10 +49,16 @@ public class SplitPDFController {
|
|||||||
// open the pdf document
|
// open the pdf document
|
||||||
|
|
||||||
PDDocument document = Loader.loadPDF(file.getBytes());
|
PDDocument document = Loader.loadPDF(file.getBytes());
|
||||||
|
int totalPages = document.getNumberOfPages();
|
||||||
|
List<Integer> pageNumbers = request.getPageNumbersList(document, false);
|
||||||
|
System.out.println(
|
||||||
|
pageNumbers.stream().map(String::valueOf).collect(Collectors.joining(",")));
|
||||||
|
if (!pageNumbers.contains(totalPages - 1)) {
|
||||||
|
// Create a mutable ArrayList so we can add to it
|
||||||
|
pageNumbers = new ArrayList<>(pageNumbers);
|
||||||
|
pageNumbers.add(totalPages - 1);
|
||||||
|
}
|
||||||
|
|
||||||
List<Integer> pageNumbers = request.getPageNumbersList(document, true);
|
|
||||||
if (!pageNumbers.contains(document.getNumberOfPages() - 1))
|
|
||||||
pageNumbers.add(document.getNumberOfPages() - 1);
|
|
||||||
logger.info(
|
logger.info(
|
||||||
"Splitting PDF into pages: {}",
|
"Splitting PDF into pages: {}",
|
||||||
pageNumbers.stream().map(String::valueOf).collect(Collectors.joining(",")));
|
pageNumbers.stream().map(String::valueOf).collect(Collectors.joining(",")));
|
||||||
@@ -65,7 +71,7 @@ public class SplitPDFController {
|
|||||||
for (int i = previousPageNumber; i <= splitPoint; i++) {
|
for (int i = previousPageNumber; i <= splitPoint; i++) {
|
||||||
PDPage page = document.getPage(i);
|
PDPage page = document.getPage(i);
|
||||||
splitDocument.addPage(page);
|
splitDocument.addPage(page);
|
||||||
logger.debug("Adding page {} to split document", i);
|
logger.info("Adding page {} to split document", i);
|
||||||
}
|
}
|
||||||
previousPageNumber = splitPoint + 1;
|
previousPageNumber = splitPoint + 1;
|
||||||
|
|
||||||
|
|||||||
@@ -53,8 +53,21 @@ public class SplitPdfBySectionsController {
|
|||||||
// Process the PDF based on split parameters
|
// Process the PDF based on split parameters
|
||||||
int horiz = request.getHorizontalDivisions() + 1;
|
int horiz = request.getHorizontalDivisions() + 1;
|
||||||
int verti = request.getVerticalDivisions() + 1;
|
int verti = request.getVerticalDivisions() + 1;
|
||||||
|
boolean merge = request.isMerge();
|
||||||
List<PDDocument> splitDocuments = splitPdfPages(sourceDocument, verti, horiz);
|
List<PDDocument> splitDocuments = splitPdfPages(sourceDocument, verti, horiz);
|
||||||
|
|
||||||
|
String filename =
|
||||||
|
Filenames.toSimpleFileName(file.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "");
|
||||||
|
if (merge) {
|
||||||
|
MergeController mergeController = new MergeController();
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
mergeController.mergeDocuments(splitDocuments).save(baos);
|
||||||
|
return WebResponseUtils.bytesToWebResponse(
|
||||||
|
baos.toByteArray(),
|
||||||
|
filename + "_split.pdf",
|
||||||
|
MediaType.APPLICATION_OCTET_STREAM);
|
||||||
|
}
|
||||||
for (PDDocument doc : splitDocuments) {
|
for (PDDocument doc : splitDocuments) {
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
doc.save(baos);
|
doc.save(baos);
|
||||||
@@ -65,9 +78,6 @@ public class SplitPdfBySectionsController {
|
|||||||
sourceDocument.close();
|
sourceDocument.close();
|
||||||
|
|
||||||
Path zipFile = Files.createTempFile("split_documents", ".zip");
|
Path zipFile = Files.createTempFile("split_documents", ".zip");
|
||||||
String filename =
|
|
||||||
Filenames.toSimpleFileName(file.getOriginalFilename())
|
|
||||||
.replaceFirst("[.][^.]+$", "");
|
|
||||||
byte[] data;
|
byte[] data;
|
||||||
|
|
||||||
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
|
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.ResponseEntity;
|
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.SessionRegistry;
|
||||||
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
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;
|
||||||
@@ -28,7 +31,6 @@ import jakarta.servlet.http.HttpServletResponse;
|
|||||||
import stirling.software.SPDF.config.security.UserService;
|
import stirling.software.SPDF.config.security.UserService;
|
||||||
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.UpdateUserDetails;
|
|
||||||
import stirling.software.SPDF.model.api.user.UsernameAndPass;
|
import stirling.software.SPDF.model.api.user.UsernameAndPass;
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
@@ -50,67 +52,25 @@ public class UserController {
|
|||||||
return "redirect:/login?registered=true";
|
return "redirect:/login?registered=true";
|
||||||
}
|
}
|
||||||
|
|
||||||
@PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
|
|
||||||
@PostMapping("/change-username-and-password")
|
|
||||||
public RedirectView changeUsernameAndPassword(
|
|
||||||
Principal principal,
|
|
||||||
@ModelAttribute UpdateUserDetails requestModel,
|
|
||||||
HttpServletRequest request,
|
|
||||||
HttpServletResponse response,
|
|
||||||
RedirectAttributes redirectAttributes) {
|
|
||||||
|
|
||||||
String currentPassword = requestModel.getPassword();
|
|
||||||
String newPassword = requestModel.getNewPassword();
|
|
||||||
String newUsername = requestModel.getNewUsername();
|
|
||||||
|
|
||||||
if (principal == null) {
|
|
||||||
return new RedirectView("/change-creds?messageType=notAuthenticated");
|
|
||||||
}
|
|
||||||
|
|
||||||
Optional<User> userOpt = userService.findByUsername(principal.getName());
|
|
||||||
|
|
||||||
if (userOpt == null || userOpt.isEmpty()) {
|
|
||||||
return new RedirectView("/change-creds?messageType=userNotFound");
|
|
||||||
}
|
|
||||||
|
|
||||||
User user = userOpt.get();
|
|
||||||
|
|
||||||
if (!userService.isPasswordCorrect(user, currentPassword)) {
|
|
||||||
return new RedirectView("/change-creds?messageType=incorrectPassword");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!user.getUsername().equals(newUsername) && userService.usernameExists(newUsername)) {
|
|
||||||
return new RedirectView("/change-creds?messageType=usernameExists");
|
|
||||||
}
|
|
||||||
|
|
||||||
userService.changePassword(user, newPassword);
|
|
||||||
if (newUsername != null
|
|
||||||
&& newUsername.length() > 0
|
|
||||||
&& !user.getUsername().equals(newUsername)) {
|
|
||||||
userService.changeUsername(user, newUsername);
|
|
||||||
}
|
|
||||||
userService.changeFirstUse(user, false);
|
|
||||||
|
|
||||||
// Logout using Spring's utility
|
|
||||||
new SecurityContextLogoutHandler().logout(request, response, null);
|
|
||||||
|
|
||||||
return new RedirectView("/login?messageType=credsUpdated");
|
|
||||||
}
|
|
||||||
|
|
||||||
@PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
|
@PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
|
||||||
@PostMapping("/change-username")
|
@PostMapping("/change-username")
|
||||||
public RedirectView changeUsername(
|
public RedirectView changeUsername(
|
||||||
Principal principal,
|
Principal principal,
|
||||||
@RequestParam String currentPassword,
|
@RequestParam(name = "currentPassword") String currentPassword,
|
||||||
@RequestParam String newUsername,
|
@RequestParam(name = "newUsername") String newUsername,
|
||||||
HttpServletRequest request,
|
HttpServletRequest request,
|
||||||
HttpServletResponse response,
|
HttpServletResponse response,
|
||||||
RedirectAttributes redirectAttributes) {
|
RedirectAttributes redirectAttributes) {
|
||||||
|
|
||||||
|
if (!userService.isUsernameValid(newUsername)) {
|
||||||
|
return new RedirectView("/account?messageType=invalidUsername");
|
||||||
|
}
|
||||||
|
|
||||||
if (principal == null) {
|
if (principal == null) {
|
||||||
return new RedirectView("/account?messageType=notAuthenticated");
|
return new RedirectView("/account?messageType=notAuthenticated");
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<User> userOpt = userService.findByUsername(principal.getName());
|
Optional<User> userOpt = userService.findByUsernameIgnoreCase(principal.getName());
|
||||||
|
|
||||||
if (userOpt == null || userOpt.isEmpty()) {
|
if (userOpt == null || userOpt.isEmpty()) {
|
||||||
return new RedirectView("/account?messageType=userNotFound");
|
return new RedirectView("/account?messageType=userNotFound");
|
||||||
@@ -118,6 +78,10 @@ public class UserController {
|
|||||||
|
|
||||||
User user = userOpt.get();
|
User user = userOpt.get();
|
||||||
|
|
||||||
|
if (user.getUsername().equals(newUsername)) {
|
||||||
|
return new RedirectView("/account?messageType=usernameExists");
|
||||||
|
}
|
||||||
|
|
||||||
if (!userService.isPasswordCorrect(user, currentPassword)) {
|
if (!userService.isPasswordCorrect(user, currentPassword)) {
|
||||||
return new RedirectView("/account?messageType=incorrectPassword");
|
return new RedirectView("/account?messageType=incorrectPassword");
|
||||||
}
|
}
|
||||||
@@ -136,12 +100,45 @@ public class UserController {
|
|||||||
return new RedirectView("/login?messageType=credsUpdated");
|
return new RedirectView("/login?messageType=credsUpdated");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
|
||||||
|
@PostMapping("/change-password-on-login")
|
||||||
|
public RedirectView changePasswordOnLogin(
|
||||||
|
Principal principal,
|
||||||
|
@RequestParam(name = "currentPassword") String currentPassword,
|
||||||
|
@RequestParam(name = "newPassword") String newPassword,
|
||||||
|
HttpServletRequest request,
|
||||||
|
HttpServletResponse response,
|
||||||
|
RedirectAttributes redirectAttributes) {
|
||||||
|
if (principal == null) {
|
||||||
|
return new RedirectView("/change-creds?messageType=notAuthenticated");
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<User> userOpt = userService.findByUsername(principal.getName());
|
||||||
|
|
||||||
|
if (userOpt == null || userOpt.isEmpty()) {
|
||||||
|
return new RedirectView("/change-creds?messageType=userNotFound");
|
||||||
|
}
|
||||||
|
|
||||||
|
User user = userOpt.get();
|
||||||
|
|
||||||
|
if (!userService.isPasswordCorrect(user, currentPassword)) {
|
||||||
|
return new RedirectView("/change-creds?messageType=incorrectPassword");
|
||||||
|
}
|
||||||
|
|
||||||
|
userService.changePassword(user, newPassword);
|
||||||
|
userService.changeFirstUse(user, false);
|
||||||
|
// Logout using Spring's utility
|
||||||
|
new SecurityContextLogoutHandler().logout(request, response, null);
|
||||||
|
|
||||||
|
return new RedirectView("/login?messageType=credsUpdated");
|
||||||
|
}
|
||||||
|
|
||||||
@PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
|
@PreAuthorize("!hasAuthority('ROLE_DEMO_USER')")
|
||||||
@PostMapping("/change-password")
|
@PostMapping("/change-password")
|
||||||
public RedirectView changePassword(
|
public RedirectView changePassword(
|
||||||
Principal principal,
|
Principal principal,
|
||||||
@RequestParam String currentPassword,
|
@RequestParam(name = "currentPassword") String currentPassword,
|
||||||
@RequestParam String newPassword,
|
@RequestParam(name = "newPassword") String newPassword,
|
||||||
HttpServletRequest request,
|
HttpServletRequest request,
|
||||||
HttpServletResponse response,
|
HttpServletResponse response,
|
||||||
RedirectAttributes redirectAttributes) {
|
RedirectAttributes redirectAttributes) {
|
||||||
@@ -192,12 +189,24 @@ 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 String password,
|
@RequestParam(name = "password") String password,
|
||||||
@RequestParam String role,
|
@RequestParam(name = "role") String role,
|
||||||
@RequestParam(name = "forceChange", required = false, defaultValue = "false")
|
@RequestParam(name = "forceChange", required = false, defaultValue = "false")
|
||||||
boolean forceChange) {
|
boolean forceChange) {
|
||||||
|
|
||||||
|
if (!userService.isUsernameValid(username)) {
|
||||||
|
return new RedirectView("/addUsers?messageType=invalidUsername");
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<User> userOpt = userService.findByUsernameIgnoreCase(username);
|
||||||
|
|
||||||
|
if (userOpt.isPresent()) {
|
||||||
|
User user = userOpt.get();
|
||||||
|
if (user != null && user.getUsername().equalsIgnoreCase(username)) {
|
||||||
|
return new RedirectView("/addUsers?messageType=usernameExists");
|
||||||
|
}
|
||||||
|
}
|
||||||
if (userService.usernameExists(username)) {
|
if (userService.usernameExists(username)) {
|
||||||
return new RedirectView("/addUsers?messageType=usernameExists");
|
return new RedirectView("/addUsers?messageType=usernameExists");
|
||||||
}
|
}
|
||||||
@@ -219,18 +228,39 @@ public class UserController {
|
|||||||
|
|
||||||
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
@PreAuthorize("hasRole('ROLE_ADMIN')")
|
||||||
@PostMapping("/admin/deleteUser/{username}")
|
@PostMapping("/admin/deleteUser/{username}")
|
||||||
public String deleteUser(@PathVariable String username, Authentication authentication) {
|
public RedirectView deleteUser(
|
||||||
|
@PathVariable(name = "username") String username, Authentication authentication) {
|
||||||
|
|
||||||
|
if (!userService.usernameExists(username)) {
|
||||||
|
return new RedirectView("/addUsers?messageType=deleteUsernameExists");
|
||||||
|
}
|
||||||
|
|
||||||
// Get the currently authenticated username
|
// Get the currently authenticated username
|
||||||
String currentUsername = authentication.getName();
|
String currentUsername = authentication.getName();
|
||||||
|
|
||||||
// Check if the provided username matches the current session's username
|
// Check if the provided username matches the current session's username
|
||||||
if (currentUsername.equals(username)) {
|
if (currentUsername.equals(username)) {
|
||||||
throw new IllegalArgumentException("Cannot delete currently logined in user.");
|
return new RedirectView("/addUsers?messageType=deleteCurrentUser");
|
||||||
|
}
|
||||||
|
invalidateUserSessions(username);
|
||||||
|
userService.deleteUser(username);
|
||||||
|
return new RedirectView("/addUsers");
|
||||||
}
|
}
|
||||||
|
|
||||||
userService.deleteUser(username);
|
@Autowired private SessionRegistry sessionRegistry;
|
||||||
return "redirect:/addUsers";
|
|
||||||
|
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')")
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class ConvertBookToPDFController {
|
|||||||
|
|
||||||
if (!bookAndHtmlFormatsInstalled) {
|
if (!bookAndHtmlFormatsInstalled) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"bookAndHtmlFormatsInstalled flag is False, this functionality is not avaiable");
|
"bookAndHtmlFormatsInstalled flag is False, this functionality is not available");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileInput == null) {
|
if (fileInput == null) {
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public class ConvertPDFToBookController {
|
|||||||
|
|
||||||
if (!bookAndHtmlFormatsInstalled) {
|
if (!bookAndHtmlFormatsInstalled) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"bookAndHtmlFormatsInstalled flag is False, this functionality is not avaiable");
|
"bookAndHtmlFormatsInstalled flag is False, this functionality is not available");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileInput == null) {
|
if (fileInput == null) {
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ public class AutoRenameController {
|
|||||||
|
|
||||||
// Sanitize the header string by removing characters not allowed in a filename.
|
// Sanitize the header string by removing characters not allowed in a filename.
|
||||||
if (header != null && header.length() < 255) {
|
if (header != null && header.length() < 255) {
|
||||||
header = header.replaceAll("[/\\\\?%*:|\"<>]", "");
|
header = header.replaceAll("[/\\\\?%*:|\"<>]", "").trim();
|
||||||
return WebResponseUtils.pdfDocToWebResponse(document, header + ".pdf");
|
return WebResponseUtils.pdfDocToWebResponse(document, header + ".pdf");
|
||||||
} else {
|
} else {
|
||||||
logger.info("File has no good title to be found");
|
logger.info("File has no good title to be found");
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public class AutoSplitPdfController {
|
|||||||
|
|
||||||
PDDocument document = Loader.loadPDF(file.getBytes());
|
PDDocument document = Loader.loadPDF(file.getBytes());
|
||||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||||
|
pdfRenderer.setSubsamplingAllowed(true);
|
||||||
List<PDDocument> splitDocuments = new ArrayList<>();
|
List<PDDocument> splitDocuments = new ArrayList<>();
|
||||||
List<ByteArrayOutputStream> splitDocumentsBoas = new ArrayList<>();
|
List<ByteArrayOutputStream> splitDocumentsBoas = new ArrayList<>();
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public class BlankPageController {
|
|||||||
List<Integer> pagesToKeepIndex = new ArrayList<>();
|
List<Integer> pagesToKeepIndex = new ArrayList<>();
|
||||||
int pageIndex = 0;
|
int pageIndex = 0;
|
||||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||||
|
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);
|
||||||
|
|||||||
@@ -2,9 +2,7 @@ package stirling.software.SPDF.controller.api.misc;
|
|||||||
|
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -75,8 +73,11 @@ public class CompressController {
|
|||||||
long inputFileSize = Files.size(tempInputFile);
|
long inputFileSize = Files.size(tempInputFile);
|
||||||
|
|
||||||
// Prepare the output file path
|
// Prepare the output file path
|
||||||
Path tempOutputFile = Files.createTempFile("output_", ".pdf");
|
|
||||||
|
|
||||||
|
Path tempOutputFile = null;
|
||||||
|
byte[] pdfBytes;
|
||||||
|
try {
|
||||||
|
tempOutputFile = Files.createTempFile("output_", ".pdf");
|
||||||
// Determine initial optimization level based on expected size reduction, only if in
|
// Determine initial optimization level based on expected size reduction, only if in
|
||||||
// autoMode
|
// autoMode
|
||||||
if (autoMode) {
|
if (autoMode) {
|
||||||
@@ -134,11 +135,9 @@ public class CompressController {
|
|||||||
} else {
|
} else {
|
||||||
// Increase optimization level for next iteration
|
// Increase optimization level for next iteration
|
||||||
optimizeLevel++;
|
optimizeLevel++;
|
||||||
if (autoMode && optimizeLevel > 3) {
|
if (autoMode && optimizeLevel > 4) {
|
||||||
System.out.println("Skipping level 4 due to bad results in auto mode");
|
System.out.println("Skipping level 5 due to bad results in auto mode");
|
||||||
sizeMet = true;
|
sizeMet = true;
|
||||||
} else if (optimizeLevel == 5) {
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
System.out.println(
|
System.out.println(
|
||||||
"Increasing ghostscript optimisation level to " + optimizeLevel);
|
"Increasing ghostscript optimisation level to " + optimizeLevel);
|
||||||
@@ -148,25 +147,33 @@ public class CompressController {
|
|||||||
|
|
||||||
if (expectedOutputSize != null && autoMode) {
|
if (expectedOutputSize != null && autoMode) {
|
||||||
long outputFileSize = Files.size(tempOutputFile);
|
long outputFileSize = Files.size(tempOutputFile);
|
||||||
|
byte[] fileBytes = Files.readAllBytes(tempOutputFile);
|
||||||
if (outputFileSize > expectedOutputSize) {
|
if (outputFileSize > expectedOutputSize) {
|
||||||
try (PDDocument doc = Loader.loadPDF(new File(tempOutputFile.toString()))) {
|
try (PDDocument doc = Loader.loadPDF(fileBytes)) {
|
||||||
long previousFileSize = 0;
|
long previousFileSize = 0;
|
||||||
double scaleFactor = 1.0;
|
double scaleFactorConst = 0.9f;
|
||||||
|
double scaleFactor = 0.9f;
|
||||||
while (true) {
|
while (true) {
|
||||||
for (PDPage page : doc.getPages()) {
|
for (PDPage page : doc.getPages()) {
|
||||||
PDResources res = page.getResources();
|
PDResources res = page.getResources();
|
||||||
|
if (res != null && res.getXObjectNames() != null) {
|
||||||
for (COSName name : res.getXObjectNames()) {
|
for (COSName name : res.getXObjectNames()) {
|
||||||
PDXObject xobj = res.getXObject(name);
|
PDXObject xobj = res.getXObject(name);
|
||||||
if (xobj instanceof PDImageXObject) {
|
if (xobj != null && xobj instanceof PDImageXObject) {
|
||||||
PDImageXObject image = (PDImageXObject) xobj;
|
PDImageXObject image = (PDImageXObject) xobj;
|
||||||
|
|
||||||
// Get the image in BufferedImage format
|
// Get the image in BufferedImage format
|
||||||
BufferedImage bufferedImage = image.getImage();
|
BufferedImage bufferedImage = image.getImage();
|
||||||
|
|
||||||
// Calculate the new dimensions
|
// Calculate the new dimensions
|
||||||
int newWidth = (int) (bufferedImage.getWidth() * scaleFactor);
|
int newWidth =
|
||||||
int newHeight = (int) (bufferedImage.getHeight() * scaleFactor);
|
(int)
|
||||||
|
(bufferedImage.getWidth()
|
||||||
|
* scaleFactorConst);
|
||||||
|
int newHeight =
|
||||||
|
(int)
|
||||||
|
(bufferedImage.getHeight()
|
||||||
|
* scaleFactorConst);
|
||||||
|
|
||||||
// If the new dimensions are zero, skip this iteration
|
// If the new dimensions are zero, skip this iteration
|
||||||
if (newWidth == 0 || newHeight == 0) {
|
if (newWidth == 0 || newHeight == 0) {
|
||||||
@@ -176,7 +183,9 @@ public class CompressController {
|
|||||||
// Otherwise, proceed with the scaling
|
// Otherwise, proceed with the scaling
|
||||||
Image scaledImage =
|
Image scaledImage =
|
||||||
bufferedImage.getScaledInstance(
|
bufferedImage.getScaledInstance(
|
||||||
newWidth, newHeight, Image.SCALE_SMOOTH);
|
newWidth,
|
||||||
|
newHeight,
|
||||||
|
Image.SCALE_SMOOTH);
|
||||||
|
|
||||||
// Convert the scaled image back to a BufferedImage
|
// Convert the scaled image back to a BufferedImage
|
||||||
BufferedImage scaledBufferedImage =
|
BufferedImage scaledBufferedImage =
|
||||||
@@ -192,25 +201,26 @@ public class CompressController {
|
|||||||
ByteArrayOutputStream compressedImageStream =
|
ByteArrayOutputStream compressedImageStream =
|
||||||
new ByteArrayOutputStream();
|
new ByteArrayOutputStream();
|
||||||
ImageIO.write(
|
ImageIO.write(
|
||||||
scaledBufferedImage, "jpeg", compressedImageStream);
|
scaledBufferedImage,
|
||||||
|
"jpeg",
|
||||||
|
compressedImageStream);
|
||||||
byte[] imageBytes = compressedImageStream.toByteArray();
|
byte[] imageBytes = compressedImageStream.toByteArray();
|
||||||
compressedImageStream.close();
|
compressedImageStream.close();
|
||||||
|
|
||||||
// Convert compressed image back to PDImageXObject
|
|
||||||
ByteArrayInputStream bais =
|
|
||||||
new ByteArrayInputStream(imageBytes);
|
|
||||||
PDImageXObject compressedImage =
|
PDImageXObject compressedImage =
|
||||||
PDImageXObject.createFromByteArray(
|
PDImageXObject.createFromByteArray(
|
||||||
doc,
|
doc,
|
||||||
imageBytes,
|
imageBytes,
|
||||||
image.getCOSObject().toString());
|
image.getCOSObject().toString());
|
||||||
|
|
||||||
// Replace the image in the resources with the compressed
|
// Replace the image in the resources with the
|
||||||
|
// compressed
|
||||||
// version
|
// version
|
||||||
res.put(name, compressedImage);
|
res.put(name, compressedImage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// save the document to tempOutputFile again
|
// save the document to tempOutputFile again
|
||||||
doc.save(tempOutputFile.toString());
|
doc.save(tempOutputFile.toString());
|
||||||
@@ -226,9 +236,10 @@ public class CompressController {
|
|||||||
System.out.println("Current scale factor: " + scaleFactor);
|
System.out.println("Current scale factor: " + scaleFactor);
|
||||||
|
|
||||||
// The file is still too large, reduce scaleFactor and try again
|
// The file is still too large, reduce scaleFactor and try again
|
||||||
scaleFactor *= 0.9; // reduce scaleFactor by 10%
|
scaleFactor *= 0.9f; // reduce scaleFactor by 10%
|
||||||
// Avoid scaleFactor being too small, causing the image to shrink to 0
|
// Avoid scaleFactor being too small, causing the image to shrink to
|
||||||
if (scaleFactor < 0.2 || previousFileSize == currentSize) {
|
// 0
|
||||||
|
if (scaleFactor < 0.2f || previousFileSize == currentSize) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
"Could not reach the desired size without excessively degrading image quality, lowest size recommended is "
|
"Could not reach the desired size without excessively degrading image quality, lowest size recommended is "
|
||||||
+ FileUtils.byteCountToDisplaySize(currentSize)
|
+ FileUtils.byteCountToDisplaySize(currentSize)
|
||||||
@@ -247,7 +258,7 @@ public class CompressController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Read the optimized PDF file
|
// Read the optimized PDF file
|
||||||
byte[] pdfBytes = Files.readAllBytes(tempOutputFile);
|
pdfBytes = Files.readAllBytes(tempOutputFile);
|
||||||
|
|
||||||
// Check if optimized file is larger than the original
|
// Check if optimized file is larger than the original
|
||||||
if (pdfBytes.length > inputFileSize) {
|
if (pdfBytes.length > inputFileSize) {
|
||||||
@@ -258,10 +269,11 @@ public class CompressController {
|
|||||||
// Read the original file again
|
// Read the original file again
|
||||||
pdfBytes = Files.readAllBytes(tempInputFile);
|
pdfBytes = Files.readAllBytes(tempInputFile);
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
// Clean up the temporary files
|
// Clean up the temporary files
|
||||||
Files.delete(tempInputFile);
|
Files.delete(tempInputFile);
|
||||||
Files.delete(tempOutputFile);
|
Files.delete(tempOutputFile);
|
||||||
|
}
|
||||||
|
|
||||||
// Return the optimized PDF as a response
|
// Return the optimized PDF as a response
|
||||||
String outputFilename =
|
String outputFilename =
|
||||||
|
|||||||
@@ -73,11 +73,18 @@ public class ExtractImageScansController {
|
|||||||
|
|
||||||
List<String> images = new ArrayList<>();
|
List<String> images = new ArrayList<>();
|
||||||
|
|
||||||
|
List<Path> tempImageFiles = new ArrayList<>();
|
||||||
|
Path tempInputFile = null;
|
||||||
|
Path tempZipFile = null;
|
||||||
|
List<Path> tempDirs = new ArrayList<>();
|
||||||
|
|
||||||
|
try {
|
||||||
// Check if input file is a PDF
|
// Check if input file is a PDF
|
||||||
if ("pdf".equalsIgnoreCase(extension)) {
|
if ("pdf".equalsIgnoreCase(extension)) {
|
||||||
// Load PDF document
|
// Load PDF document
|
||||||
try (PDDocument document = Loader.loadPDF(form.getFileInput().getBytes())) {
|
try (PDDocument document = Loader.loadPDF(form.getFileInput().getBytes())) {
|
||||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||||
|
pdfRenderer.setSubsamplingAllowed(true);
|
||||||
int pageCount = document.getNumberOfPages();
|
int pageCount = document.getNumberOfPages();
|
||||||
images = new ArrayList<>();
|
images = new ArrayList<>();
|
||||||
|
|
||||||
@@ -92,10 +99,11 @@ public class ExtractImageScansController {
|
|||||||
|
|
||||||
// Add temp file path to images list
|
// Add temp file path to images list
|
||||||
images.add(tempFile.toString());
|
images.add(tempFile.toString());
|
||||||
|
tempImageFiles.add(tempFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Path tempInputFile = Files.createTempFile("input_", "." + extension);
|
tempInputFile = Files.createTempFile("input_", "." + extension);
|
||||||
Files.copy(
|
Files.copy(
|
||||||
form.getFileInput().getInputStream(),
|
form.getFileInput().getInputStream(),
|
||||||
tempInputFile,
|
tempInputFile,
|
||||||
@@ -110,6 +118,7 @@ public class ExtractImageScansController {
|
|||||||
for (int i = 0; i < images.size(); i++) {
|
for (int i = 0; i < images.size(); i++) {
|
||||||
|
|
||||||
Path tempDir = Files.createTempDirectory("openCV_output");
|
Path tempDir = Files.createTempDirectory("openCV_output");
|
||||||
|
tempDirs.add(tempDir);
|
||||||
List<String> command =
|
List<String> command =
|
||||||
new ArrayList<>(
|
new ArrayList<>(
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
@@ -134,7 +143,8 @@ public class ExtractImageScansController {
|
|||||||
.runCommandWithOutputHandling(command);
|
.runCommandWithOutputHandling(command);
|
||||||
|
|
||||||
// Read the output photos in temp directory
|
// Read the output photos in temp directory
|
||||||
List<Path> tempOutputFiles = Files.list(tempDir).sorted().collect(Collectors.toList());
|
List<Path> tempOutputFiles =
|
||||||
|
Files.list(tempDir).sorted().collect(Collectors.toList());
|
||||||
for (Path tempOutputFile : tempOutputFiles) {
|
for (Path tempOutputFile : tempOutputFiles) {
|
||||||
byte[] imageBytes = Files.readAllBytes(tempOutputFile);
|
byte[] imageBytes = Files.readAllBytes(tempOutputFile);
|
||||||
processedImageBytes.add(imageBytes);
|
processedImageBytes.add(imageBytes);
|
||||||
@@ -145,8 +155,9 @@ public class ExtractImageScansController {
|
|||||||
|
|
||||||
// Create zip file if multiple images
|
// Create zip file if multiple images
|
||||||
if (processedImageBytes.size() > 1) {
|
if (processedImageBytes.size() > 1) {
|
||||||
String outputZipFilename = fileName.replaceFirst("[.][^.]+$", "") + "_processed.zip";
|
String outputZipFilename =
|
||||||
Path tempZipFile = Files.createTempFile("output_", ".zip");
|
fileName.replaceFirst("[.][^.]+$", "") + "_processed.zip";
|
||||||
|
tempZipFile = Files.createTempFile("output_", ".zip");
|
||||||
|
|
||||||
try (ZipOutputStream zipOut =
|
try (ZipOutputStream zipOut =
|
||||||
new ZipOutputStream(new FileOutputStream(tempZipFile.toFile()))) {
|
new ZipOutputStream(new FileOutputStream(tempZipFile.toFile()))) {
|
||||||
@@ -179,5 +190,33 @@ public class ExtractImageScansController {
|
|||||||
fileName.replaceFirst("[.][^.]+$", "") + ".png",
|
fileName.replaceFirst("[.][^.]+$", "") + ".png",
|
||||||
MediaType.IMAGE_PNG);
|
MediaType.IMAGE_PNG);
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
// Cleanup logic for all temporary files and directories
|
||||||
|
tempImageFiles.forEach(
|
||||||
|
path -> {
|
||||||
|
try {
|
||||||
|
Files.deleteIfExists(path);
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.error("Failed to delete temporary image file: " + path, e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (tempZipFile != null && Files.exists(tempZipFile)) {
|
||||||
|
try {
|
||||||
|
Files.delete(tempZipFile);
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.error("Failed to delete temporary zip file: " + tempZipFile, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tempDirs.forEach(
|
||||||
|
dir -> {
|
||||||
|
try {
|
||||||
|
FileUtils.deleteDirectory(dir.toFile());
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.error("Failed to delete temporary directory: " + dir, e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ public class FakeScanControllerWIP {
|
|||||||
|
|
||||||
PDDocument document = Loader.loadPDF(inputFile.getBytes());
|
PDDocument document = Loader.loadPDF(inputFile.getBytes());
|
||||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||||
|
pdfRenderer.setSubsamplingAllowed(true);
|
||||||
for (int page = 0; page < document.getNumberOfPages(); ++page) {
|
for (int page = 0; page < document.getNumberOfPages(); ++page) {
|
||||||
BufferedImage image = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
|
BufferedImage image = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
|
||||||
ImageIO.write(image, "png", new File("scanned-" + (page + 1) + ".png"));
|
ImageIO.write(image, "png", new File("scanned-" + (page + 1) + ".png"));
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class OCRController {
|
|||||||
private static final Logger logger = LoggerFactory.getLogger(OCRController.class);
|
private static final Logger logger = LoggerFactory.getLogger(OCRController.class);
|
||||||
|
|
||||||
public List<String> getAvailableTesseractLanguages() {
|
public List<String> getAvailableTesseractLanguages() {
|
||||||
String tessdataDir = "/usr/share/tesseract-ocr/5/tessdata";
|
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();
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ public class StampController {
|
|||||||
// Load the input PDF
|
// Load the input PDF
|
||||||
PDDocument document = Loader.loadPDF(pdfFile.getBytes());
|
PDDocument document = Loader.loadPDF(pdfFile.getBytes());
|
||||||
|
|
||||||
List<Integer> pageNumbers = request.getPageNumbersList(document, false);
|
List<Integer> pageNumbers = request.getPageNumbersList(document, true);
|
||||||
|
|
||||||
for (int pageIndex : pageNumbers) {
|
for (int pageIndex : pageNumbers) {
|
||||||
int zeroBasedIndex = pageIndex - 1;
|
int zeroBasedIndex = pageIndex - 1;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class ApiDocService {
|
|||||||
|
|
||||||
private String getApiDocsUrl() {
|
private String getApiDocsUrl() {
|
||||||
String contextPath = servletContext.getContextPath();
|
String contextPath = servletContext.getContextPath();
|
||||||
String port = SPdfApplication.getPort();
|
String port = SPdfApplication.getStaticPort();
|
||||||
|
|
||||||
return "http://localhost:" + port + contextPath + "/v1/api-docs";
|
return "http://localhost:" + port + contextPath + "/v1/api-docs";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.http.HttpStatus;
|
|
||||||
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;
|
||||||
@@ -50,9 +49,6 @@ public class PipelineController {
|
|||||||
@PostMapping("/handleData")
|
@PostMapping("/handleData")
|
||||||
public ResponseEntity<byte[]> handleData(@ModelAttribute HandleDataRequest request)
|
public ResponseEntity<byte[]> handleData(@ModelAttribute HandleDataRequest request)
|
||||||
throws JsonMappingException, JsonProcessingException {
|
throws JsonMappingException, JsonProcessingException {
|
||||||
if (!Boolean.TRUE.equals(applicationProperties.getSystem().getEnableAlphaFunctionality())) {
|
|
||||||
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
MultipartFile[] files = request.getFileInput();
|
MultipartFile[] files = request.getFileInput();
|
||||||
String jsonString = request.getJson();
|
String jsonString = request.getJson();
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public class PipelineProcessor {
|
|||||||
|
|
||||||
private String getBaseUrl() {
|
private String getBaseUrl() {
|
||||||
String contextPath = servletContext.getContextPath();
|
String contextPath = servletContext.getContextPath();
|
||||||
String port = SPdfApplication.getPort();
|
String port = SPdfApplication.getStaticPort();
|
||||||
|
|
||||||
return "http://localhost:" + port + contextPath + "/";
|
return "http://localhost:" + port + contextPath + "/";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ public class RedactController {
|
|||||||
if (convertPDFToImage) {
|
if (convertPDFToImage) {
|
||||||
PDDocument imageDocument = new PDDocument();
|
PDDocument imageDocument = new PDDocument();
|
||||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||||
|
pdfRenderer.setSubsamplingAllowed(true);
|
||||||
for (int page = 0; page < document.getNumberOfPages(); ++page) {
|
for (int page = 0; page < document.getNumberOfPages(); ++page) {
|
||||||
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
|
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
|
||||||
PDPage newPage = new PDPage(new PDRectangle(bim.getWidth(), bim.getHeight()));
|
PDPage newPage = new PDPage(new PDRectangle(bim.getWidth(), bim.getHeight()));
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public class SanitizeController {
|
|||||||
boolean removeLinks = request.isRemoveLinks();
|
boolean removeLinks = request.isRemoveLinks();
|
||||||
boolean removeFonts = request.isRemoveFonts();
|
boolean removeFonts = request.isRemoveFonts();
|
||||||
|
|
||||||
try (PDDocument document = Loader.loadPDF(inputFile.getBytes())) {
|
PDDocument document = Loader.loadPDF(inputFile.getBytes());
|
||||||
if (removeJavaScript) {
|
if (removeJavaScript) {
|
||||||
sanitizeJavaScript(document);
|
sanitizeJavaScript(document);
|
||||||
}
|
}
|
||||||
@@ -81,7 +81,6 @@ public class SanitizeController {
|
|||||||
.replaceFirst("[.][^.]+$", "")
|
.replaceFirst("[.][^.]+$", "")
|
||||||
+ "_sanitized.pdf");
|
+ "_sanitized.pdf");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void sanitizeJavaScript(PDDocument document) throws IOException {
|
private void sanitizeJavaScript(PDDocument document) throws IOException {
|
||||||
// Get the root dictionary (catalog) of the PDF
|
// Get the root dictionary (catalog) of the PDF
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package stirling.software.SPDF.controller.web;
|
|||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -33,6 +34,8 @@ public class AccountWebController {
|
|||||||
return "redirect:/";
|
return "redirect:/";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model.addAttribute("currentPage", "login");
|
||||||
|
|
||||||
if (request.getParameter("error") != null) {
|
if (request.getParameter("error") != null) {
|
||||||
|
|
||||||
model.addAttribute("error", request.getParameter("error"));
|
model.addAttribute("error", request.getParameter("error"));
|
||||||
@@ -53,6 +56,7 @@ public class AccountWebController {
|
|||||||
public String showAddUserForm(Model model, Authentication authentication) {
|
public String showAddUserForm(Model model, Authentication authentication) {
|
||||||
List<User> allUsers = userRepository.findAll();
|
List<User> allUsers = userRepository.findAll();
|
||||||
Iterator<User> iterator = allUsers.iterator();
|
Iterator<User> iterator = allUsers.iterator();
|
||||||
|
Map<String, String> roleDetails = Role.getAllRoleDetails();
|
||||||
|
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
User user = iterator.next();
|
User user = iterator.next();
|
||||||
@@ -60,6 +64,7 @@ public class AccountWebController {
|
|||||||
for (Authority authority : user.getAuthorities()) {
|
for (Authority authority : user.getAuthorities()) {
|
||||||
if (authority.getAuthority().equals(Role.INTERNAL_API_USER.getRoleId())) {
|
if (authority.getAuthority().equals(Role.INTERNAL_API_USER.getRoleId())) {
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
|
roleDetails.remove(Role.INTERNAL_API_USER.getRoleId());
|
||||||
break; // Break out of the inner loop once the user is removed
|
break; // Break out of the inner loop once the user is removed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,6 +73,7 @@ public class AccountWebController {
|
|||||||
|
|
||||||
model.addAttribute("users", allUsers);
|
model.addAttribute("users", allUsers);
|
||||||
model.addAttribute("currentUsername", authentication.getName());
|
model.addAttribute("currentUsername", authentication.getName());
|
||||||
|
model.addAttribute("roleDetails", roleDetails);
|
||||||
return "addUsers";
|
return "addUsers";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,6 +118,7 @@ public class AccountWebController {
|
|||||||
model.addAttribute("role", user.get().getRolesAsString());
|
model.addAttribute("role", user.get().getRolesAsString());
|
||||||
model.addAttribute("settings", settingsJson);
|
model.addAttribute("settings", settingsJson);
|
||||||
model.addAttribute("changeCredsFlag", user.get().isFirstLogin());
|
model.addAttribute("changeCredsFlag", user.get().isFirstLogin());
|
||||||
|
model.addAttribute("currentPage", "account");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return "redirect:/";
|
return "redirect:/";
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public class OtherWebController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getAvailableTesseractLanguages() {
|
public List<String> getAvailableTesseractLanguages() {
|
||||||
String tessdataDir = "/usr/share/tesseract-ocr/5/tessdata";
|
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();
|
||||||
|
|||||||
@@ -210,7 +210,6 @@ public class ApplicationProperties {
|
|||||||
private String rootURIPath;
|
private String rootURIPath;
|
||||||
private String customStaticFilePath;
|
private String customStaticFilePath;
|
||||||
private Integer maxFileSize;
|
private Integer maxFileSize;
|
||||||
private CustomApplications customApplications;
|
|
||||||
|
|
||||||
private Boolean enableAlphaFunctionality;
|
private Boolean enableAlphaFunctionality;
|
||||||
|
|
||||||
@@ -262,14 +261,6 @@ public class ApplicationProperties {
|
|||||||
this.maxFileSize = maxFileSize;
|
this.maxFileSize = maxFileSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CustomApplications getCustomApplications() {
|
|
||||||
return customApplications != null ? customApplications : new CustomApplications();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCustomApplications(CustomApplications customApplications) {
|
|
||||||
this.customApplications = customApplications;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "System [defaultLocale="
|
return "System [defaultLocale="
|
||||||
@@ -282,31 +273,10 @@ public class ApplicationProperties {
|
|||||||
+ customStaticFilePath
|
+ customStaticFilePath
|
||||||
+ ", maxFileSize="
|
+ ", maxFileSize="
|
||||||
+ maxFileSize
|
+ maxFileSize
|
||||||
+ ", customApplications="
|
|
||||||
+ customApplications
|
|
||||||
+ ", enableAlphaFunctionality="
|
+ ", enableAlphaFunctionality="
|
||||||
+ enableAlphaFunctionality
|
+ enableAlphaFunctionality
|
||||||
+ "]";
|
+ "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class CustomApplications {
|
|
||||||
private boolean installBookAndHtmlFormats;
|
|
||||||
|
|
||||||
public boolean isInstallBookAndHtmlFormats() {
|
|
||||||
return installBookAndHtmlFormats;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInstallBookAndHtmlFormats(boolean installBookAndHtmlFormats) {
|
|
||||||
this.installBookAndHtmlFormats = installBookAndHtmlFormats;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "CustomApplications [installBookAndHtmlFormats="
|
|
||||||
+ installBookAndHtmlFormats
|
|
||||||
+ "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Ui {
|
public static class Ui {
|
||||||
|
|||||||
@@ -1,34 +1,43 @@
|
|||||||
package stirling.software.SPDF.model;
|
package stirling.software.SPDF.model;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public enum Role {
|
public enum Role {
|
||||||
|
|
||||||
// Unlimited access
|
// Unlimited access
|
||||||
ADMIN("ROLE_ADMIN", Integer.MAX_VALUE, Integer.MAX_VALUE),
|
ADMIN("ROLE_ADMIN", Integer.MAX_VALUE, Integer.MAX_VALUE, "adminUserSettings.admin"),
|
||||||
|
|
||||||
// Unlimited access
|
// Unlimited access
|
||||||
USER("ROLE_USER", Integer.MAX_VALUE, Integer.MAX_VALUE),
|
USER("ROLE_USER", Integer.MAX_VALUE, Integer.MAX_VALUE, "adminUserSettings.user"),
|
||||||
|
|
||||||
// 40 API calls Per Day, 40 web calls
|
// 40 API calls Per Day, 40 web calls
|
||||||
LIMITED_API_USER("ROLE_LIMITED_API_USER", 40, 40),
|
LIMITED_API_USER("ROLE_LIMITED_API_USER", 40, 40, "adminUserSettings.apiUser"),
|
||||||
|
|
||||||
// 20 API calls Per Day, 20 web calls
|
// 20 API calls Per Day, 20 web calls
|
||||||
EXTRA_LIMITED_API_USER("ROLE_EXTRA_LIMITED_API_USER", 20, 20),
|
EXTRA_LIMITED_API_USER("ROLE_EXTRA_LIMITED_API_USER", 20, 20, "adminUserSettings.extraApiUser"),
|
||||||
|
|
||||||
// 0 API calls per day and 20 web calls
|
// 0 API calls per day and 20 web calls
|
||||||
WEB_ONLY_USER("ROLE_WEB_ONLY_USER", 0, 20),
|
WEB_ONLY_USER("ROLE_WEB_ONLY_USER", 0, 20, "adminUserSettings.webOnlyUser"),
|
||||||
|
|
||||||
INTERNAL_API_USER("STIRLING-PDF-BACKEND-API-USER", Integer.MAX_VALUE, Integer.MAX_VALUE),
|
INTERNAL_API_USER(
|
||||||
|
"STIRLING-PDF-BACKEND-API-USER",
|
||||||
|
Integer.MAX_VALUE,
|
||||||
|
Integer.MAX_VALUE,
|
||||||
|
"adminUserSettings.internalApiUser"),
|
||||||
|
|
||||||
DEMO_USER("ROLE_DEMO_USER", 100, 100);
|
DEMO_USER("ROLE_DEMO_USER", 100, 100, "adminUserSettings.demoUser");
|
||||||
|
|
||||||
private final String roleId;
|
private final String roleId;
|
||||||
private final int apiCallsPerDay;
|
private final int apiCallsPerDay;
|
||||||
private final int webCallsPerDay;
|
private final int webCallsPerDay;
|
||||||
|
private final String roleName;
|
||||||
|
|
||||||
Role(String roleId, int apiCallsPerDay, int webCallsPerDay) {
|
Role(String roleId, int apiCallsPerDay, int webCallsPerDay, String roleName) {
|
||||||
this.roleId = roleId;
|
this.roleId = roleId;
|
||||||
this.apiCallsPerDay = apiCallsPerDay;
|
this.apiCallsPerDay = apiCallsPerDay;
|
||||||
this.webCallsPerDay = webCallsPerDay;
|
this.webCallsPerDay = webCallsPerDay;
|
||||||
|
this.roleName = roleName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRoleId() {
|
public String getRoleId() {
|
||||||
@@ -43,6 +52,27 @@ public enum Role {
|
|||||||
return webCallsPerDay;
|
return webCallsPerDay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getRoleName() {
|
||||||
|
return roleName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getRoleNameByRoleId(String roleId) {
|
||||||
|
// Using the fromString method to get the Role enum based on the roleId
|
||||||
|
Role role = fromString(roleId);
|
||||||
|
// Return the roleName of the found Role enum
|
||||||
|
return role.getRoleName();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method to retrieve all role IDs and role names
|
||||||
|
public static Map<String, String> getAllRoleDetails() {
|
||||||
|
// Using LinkedHashMap to preserve order
|
||||||
|
Map<String, String> roleDetails = new LinkedHashMap<>();
|
||||||
|
for (Role role : Role.values()) {
|
||||||
|
roleDetails.put(role.getRoleId(), role.getRoleName());
|
||||||
|
}
|
||||||
|
return roleDetails;
|
||||||
|
}
|
||||||
|
|
||||||
public static Role fromString(String roleId) {
|
public static Role fromString(String roleId) {
|
||||||
for (Role role : Role.values()) {
|
for (Role role : Role.values()) {
|
||||||
if (role.getRoleId().equalsIgnoreCase(roleId)) {
|
if (role.getRoleId().equalsIgnoreCase(roleId)) {
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ public class User {
|
|||||||
@Column(name = "isFirstLogin")
|
@Column(name = "isFirstLogin")
|
||||||
private Boolean isFirstLogin = false;
|
private Boolean isFirstLogin = false;
|
||||||
|
|
||||||
|
@Column(name = "roleName")
|
||||||
|
private String roleName;
|
||||||
|
|
||||||
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "user")
|
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "user")
|
||||||
private Set<Authority> authorities = new HashSet<>();
|
private Set<Authority> authorities = new HashSet<>();
|
||||||
|
|
||||||
@@ -53,6 +56,10 @@ public class User {
|
|||||||
@CollectionTable(name = "user_settings", joinColumns = @JoinColumn(name = "user_id"))
|
@CollectionTable(name = "user_settings", joinColumns = @JoinColumn(name = "user_id"))
|
||||||
private Map<String, String> settings = new HashMap<>(); // Key-value pairs of settings.
|
private Map<String, String> settings = new HashMap<>(); // Key-value pairs of settings.
|
||||||
|
|
||||||
|
public String getRoleName() {
|
||||||
|
return Role.getRoleNameByRoleId(getRolesAsString());
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isFirstLogin() {
|
public boolean isFirstLogin() {
|
||||||
return isFirstLogin != null && isFirstLogin;
|
return isFirstLogin != null && isFirstLogin;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,13 +33,13 @@ public class PDFWithPageNums extends PDFFile {
|
|||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return GeneralUtils.parsePageString(pageNumbers, pageCount, zeroCount);
|
return GeneralUtils.parsePageList(pageNumbers, pageCount, zeroCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Hidden
|
@Hidden
|
||||||
public List<Integer> getPageNumbersList(PDDocument doc, boolean zeroCount) {
|
public List<Integer> getPageNumbersList(PDDocument doc, boolean zeroCount) {
|
||||||
int pageCount = 0;
|
int pageCount = 0;
|
||||||
pageCount = doc.getNumberOfPages();
|
pageCount = doc.getNumberOfPages();
|
||||||
return GeneralUtils.parsePageString(pageNumbers, pageCount, zeroCount);
|
return GeneralUtils.parsePageList(pageNumbers, pageCount, zeroCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,4 +15,7 @@ public class SplitPdfBySectionsRequest extends PDFFile {
|
|||||||
|
|
||||||
@Schema(description = "Number of vertical divisions for each PDF page", example = "2")
|
@Schema(description = "Number of vertical divisions for each PDF page", example = "2")
|
||||||
private int verticalDivisions;
|
private int verticalDivisions;
|
||||||
|
|
||||||
|
@Schema(description = "Merge the split documents into a single PDF", example = "true")
|
||||||
|
private boolean merge;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,6 @@ public class PdfToTextOrRTFRequest extends PDFFile {
|
|||||||
|
|
||||||
@Schema(
|
@Schema(
|
||||||
description = "The output Text or RTF format",
|
description = "The output Text or RTF format",
|
||||||
allowableValues = {"rtf", "txt:Text"})
|
allowableValues = {"rtf", "txt"})
|
||||||
private String outputFormat;
|
private String outputFormat;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,14 @@ package stirling.software.SPDF.repository;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
|
|
||||||
import stirling.software.SPDF.model.User;
|
import stirling.software.SPDF.model.User;
|
||||||
|
|
||||||
public interface UserRepository extends JpaRepository<User, String> {
|
public interface UserRepository extends JpaRepository<User, String> {
|
||||||
|
Optional<User> findByUsernameIgnoreCase(String username);
|
||||||
|
|
||||||
Optional<User> findByUsername(String username);
|
Optional<User> findByUsername(String username);
|
||||||
|
|
||||||
User findByApiKey(String apiKey);
|
User findByApiKey(String apiKey);
|
||||||
|
|||||||
@@ -12,11 +12,12 @@ import java.nio.file.Paths;
|
|||||||
import java.nio.file.SimpleFileVisitor;
|
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.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import com.fathzer.soft.javaluator.DoubleEvaluator;
|
||||||
|
|
||||||
import io.github.pixee.security.HostValidator;
|
import io.github.pixee.security.HostValidator;
|
||||||
import io.github.pixee.security.Urls;
|
import io.github.pixee.security.Urls;
|
||||||
|
|
||||||
@@ -115,91 +116,115 @@ public class GeneralUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Integer> parsePageString(String pageOrder, int totalPages) {
|
public static List<Integer> parsePageList(String pages, int totalPages, boolean oneBased) {
|
||||||
return parsePageString(pageOrder, totalPages, false);
|
if (pages == null) {
|
||||||
|
return List.of(1); // Default to first page if input is null
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return parsePageList(pages.split(","), totalPages, oneBased);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
return List.of(1); // Default to first page if input is invalid
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Integer> parsePageString(
|
public static List<Integer> parsePageList(String[] pages, int totalPages) {
|
||||||
String pageOrder, int totalPages, boolean isOneBased) {
|
return parsePageList(pages, totalPages, false);
|
||||||
if (pageOrder == null || pageOrder.isEmpty()) {
|
|
||||||
return Collections.singletonList(1);
|
|
||||||
}
|
|
||||||
if (pageOrder.matches("\\d+")) {
|
|
||||||
// Convert the single number string to an integer and return it in a list
|
|
||||||
return Collections.singletonList(Integer.parseInt(pageOrder));
|
|
||||||
}
|
|
||||||
return parsePageList(pageOrder.split(","), totalPages, isOneBased);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Integer> parsePageList(String[] pageOrderArr, int totalPages) {
|
public static List<Integer> parsePageList(String[] pages, int totalPages, boolean oneBased) {
|
||||||
return parsePageList(pageOrderArr, totalPages, false);
|
List<Integer> result = new ArrayList<>();
|
||||||
}
|
int offset = oneBased ? 1 : 0;
|
||||||
|
for (String page : pages) {
|
||||||
|
if ("all".equalsIgnoreCase(page)) {
|
||||||
|
|
||||||
public static List<Integer> parsePageList(
|
|
||||||
String[] pageOrderArr, int totalPages, boolean isOneBased) {
|
|
||||||
List<Integer> newPageOrder = new ArrayList<>();
|
|
||||||
|
|
||||||
int adjustmentFactor = isOneBased ? 1 : 0;
|
|
||||||
|
|
||||||
// loop through the page order array
|
|
||||||
for (String element : pageOrderArr) {
|
|
||||||
if ("all".equalsIgnoreCase(element)) {
|
|
||||||
for (int i = 0; i < totalPages; i++) {
|
for (int i = 0; i < totalPages; i++) {
|
||||||
newPageOrder.add(i + adjustmentFactor);
|
result.add(i + offset);
|
||||||
}
|
}
|
||||||
// As all pages are already added, no need to check further
|
} else if (page.contains(",")) {
|
||||||
break;
|
// Split the string into parts, could be single pages or ranges
|
||||||
} else if (element.matches("\\d*n\\+?-?\\d*|\\d*\\+?n")) {
|
String[] parts = page.split(",");
|
||||||
// Handle page order as a function
|
for (String part : parts) {
|
||||||
int coefficient = 0;
|
result.addAll(handlePart(part, totalPages, offset));
|
||||||
int constant = 0;
|
|
||||||
boolean coefficientExists = false;
|
|
||||||
boolean constantExists = false;
|
|
||||||
|
|
||||||
if (element.contains("n")) {
|
|
||||||
String[] parts = element.split("n");
|
|
||||||
if (!"".equals(parts[0]) && parts[0] != null) {
|
|
||||||
coefficient = Integer.parseInt(parts[0]);
|
|
||||||
coefficientExists = true;
|
|
||||||
}
|
|
||||||
if (parts.length > 1 && !"".equals(parts[1]) && parts[1] != null) {
|
|
||||||
constant = Integer.parseInt(parts[1]);
|
|
||||||
constantExists = true;
|
|
||||||
}
|
|
||||||
} else if (element.contains("+")) {
|
|
||||||
constant = Integer.parseInt(element.replace("+", ""));
|
|
||||||
constantExists = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 1; i <= totalPages; i++) {
|
|
||||||
int pageNum = coefficientExists ? coefficient * i : i;
|
|
||||||
pageNum += constantExists ? constant : 0;
|
|
||||||
|
|
||||||
if (pageNum <= totalPages && pageNum > 0) {
|
|
||||||
newPageOrder.add(pageNum - adjustmentFactor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (element.contains("-")) {
|
|
||||||
// split the range into start and end page
|
|
||||||
String[] range = element.split("-");
|
|
||||||
int start = Integer.parseInt(range[0]);
|
|
||||||
int end = Integer.parseInt(range[1]);
|
|
||||||
// check if the end page is greater than total pages
|
|
||||||
if (end > totalPages) {
|
|
||||||
end = totalPages;
|
|
||||||
}
|
|
||||||
// loop through the range of pages
|
|
||||||
for (int j = start; j <= end; j++) {
|
|
||||||
// print the current index
|
|
||||||
newPageOrder.add(j - adjustmentFactor);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// if the element is a single page
|
result.addAll(handlePart(page, totalPages, offset));
|
||||||
newPageOrder.add(Integer.parseInt(element) - adjustmentFactor);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return new ArrayList<>(
|
||||||
|
new java.util.LinkedHashSet<>(result)); // Remove duplicates and maintain order
|
||||||
|
}
|
||||||
|
|
||||||
return newPageOrder;
|
public static List<Integer> evaluateNFunc(String expression, int maxValue) {
|
||||||
|
List<Integer> results = new ArrayList<>();
|
||||||
|
DoubleEvaluator evaluator = new DoubleEvaluator();
|
||||||
|
|
||||||
|
// Validate the expression
|
||||||
|
if (!expression.matches("[0-9n+\\-*/() ]+")) {
|
||||||
|
throw new IllegalArgumentException("Invalid expression");
|
||||||
|
}
|
||||||
|
|
||||||
|
int n = 0;
|
||||||
|
while (true) {
|
||||||
|
// Replace 'n' with the current value of n, correctly handling numbers before 'n'
|
||||||
|
String sanitizedExpression = insertMultiplicationBeforeN(expression, n);
|
||||||
|
Double result = evaluator.evaluate(sanitizedExpression);
|
||||||
|
|
||||||
|
// Check if the result is null or not within bounds
|
||||||
|
if (result == null || result <= 0 || result.intValue() > maxValue) {
|
||||||
|
if (n != 0) break;
|
||||||
|
} else {
|
||||||
|
results.add(result.intValue());
|
||||||
|
}
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String insertMultiplicationBeforeN(String expression, int nValue) {
|
||||||
|
// Insert multiplication between a number and 'n' (e.g., "4n" becomes "4*n")
|
||||||
|
String withMultiplication = expression.replaceAll("(\\d)n", "$1*n");
|
||||||
|
// Now replace 'n' with its current value
|
||||||
|
return withMultiplication.replaceAll("n", String.valueOf(nValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<Integer> handlePart(String part, int totalPages, int offset) {
|
||||||
|
List<Integer> partResult = new ArrayList<>();
|
||||||
|
|
||||||
|
// First check for n-syntax because it should not be processed as a range
|
||||||
|
if (part.contains("n")) {
|
||||||
|
partResult = evaluateNFunc(part, totalPages);
|
||||||
|
// Adjust the results according to the offset
|
||||||
|
for (int i = 0; i < partResult.size(); i++) {
|
||||||
|
int adjustedValue = partResult.get(i) - 1 + offset;
|
||||||
|
partResult.set(i, adjustedValue);
|
||||||
|
}
|
||||||
|
} else if (part.contains("-")) {
|
||||||
|
// Process ranges only if it's not n-syntax
|
||||||
|
String[] rangeParts = part.split("-");
|
||||||
|
try {
|
||||||
|
int start = Integer.parseInt(rangeParts[0]);
|
||||||
|
int end = Integer.parseInt(rangeParts[1]);
|
||||||
|
for (int i = start; i <= end; i++) {
|
||||||
|
if (i >= 1 && i <= totalPages) {
|
||||||
|
partResult.add(i - 1 + offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
// Range is invalid, ignore this part
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// This is a single page number
|
||||||
|
try {
|
||||||
|
int pageNum = Integer.parseInt(part.trim());
|
||||||
|
if (pageNum >= 1 && pageNum <= totalPages) {
|
||||||
|
partResult.add(pageNum - 1 + offset);
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException ignored) {
|
||||||
|
// Ignore invalid numbers
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return partResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean createDir(String path) {
|
public static boolean createDir(String path) {
|
||||||
|
|||||||
@@ -214,6 +214,7 @@ public class PdfUtils {
|
|||||||
throws IOException, Exception {
|
throws IOException, Exception {
|
||||||
try (PDDocument document = Loader.loadPDF(inputStream)) {
|
try (PDDocument document = Loader.loadPDF(inputStream)) {
|
||||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||||
|
pdfRenderer.setSubsamplingAllowed(true);
|
||||||
int pageCount = document.getNumberOfPages();
|
int pageCount = document.getNumberOfPages();
|
||||||
|
|
||||||
// Create a ByteArrayOutputStream to save the image(s) to
|
// Create a ByteArrayOutputStream to save the image(s) to
|
||||||
|
|||||||
@@ -189,7 +189,11 @@ public class ProcessExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (exitCode != 0) {
|
} else if (exitCode != 0) {
|
||||||
throw new IOException("Command process failed with exit code " + exitCode);
|
throw new IOException(
|
||||||
|
"Command process failed with exit code "
|
||||||
|
+ exitCode
|
||||||
|
+ "\nLogs: "
|
||||||
|
+ messages);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
semaphore.release();
|
semaphore.release();
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
fileToPDF.fileTypesList=Microsoft Word: (DOC, DOCX, DOT, DOTX) <br> \
|
|
||||||
Microsoft Excel: (CSV, XLS, XLSX, XLT, XLTX, SLK, DIF) <br> \
|
|
||||||
Microsoft PowerPoint: (PPT, PPTX) <br> \
|
|
||||||
OpenDocument Formats: (ODT, OTT, ODS, OTS, ODP, OTP, ODG, OTG) <br> \
|
|
||||||
Plain Text: (TXT, TEXT, XML) <br> \
|
|
||||||
Rich Text Format: (RTF) <br> \
|
|
||||||
Images: (BMP, GIF, JPEG, PNG, TIF, PBM, PGM, PPM, RAS, XBM, XPM, SVG, SVM, WMF) <br> \
|
|
||||||
HTML: (HTML) <br> \
|
|
||||||
Lotus Word Pro: (LWP) <br> \
|
|
||||||
StarOffice formats: (SDA, SDC, SDD, SDW, STC, STD, STI, STW, SXD, SXG, SXI, SXW) <br> \
|
|
||||||
Other formats: (DBF, FODS, VSD, VOR, VOR3, VOR4, UOP, PCT, PS, PDF)
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=اختر صورة
|
|||||||
genericSubmit=إرسال
|
genericSubmit=إرسال
|
||||||
processTimeWarning=تحذير: يمكن أن تستغرق هذه العملية ما يصل إلى دقيقة حسب حجم الملف
|
processTimeWarning=تحذير: يمكن أن تستغرق هذه العملية ما يصل إلى دقيقة حسب حجم الملف
|
||||||
pageOrderPrompt=ترتيب الصفحات (أدخل قائمة بأرقام الصفحات مفصولة بفواصل):
|
pageOrderPrompt=ترتيب الصفحات (أدخل قائمة بأرقام الصفحات مفصولة بفواصل):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=اذهب
|
goToPage=اذهب
|
||||||
true=\u0635\u062D\u064A\u062D
|
true=\u0635\u062D\u064A\u062D
|
||||||
false=\u062E\u0637\u0623
|
false=\u062E\u0637\u0623
|
||||||
unknown=\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
|
unknown=\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
|
||||||
save=\u062D\u0641\u0638
|
save=\u062D\u0641\u0638
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=\u0625\u063A\u0644\u0627\u0642
|
close=\u0625\u063A\u0644\u0627\u0642
|
||||||
filesSelected=الملفات المحددة
|
filesSelected=الملفات المحددة
|
||||||
noFavourites=لم تتم إضافة أي مفضلات
|
noFavourites=لم تتم إضافة أي مفضلات
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=الانتظار بالملل؟
|
bored=الانتظار بالملل؟
|
||||||
alphabet=\u0627\u0644\u0623\u0628\u062C\u062F\u064A\u0629
|
alphabet=\u0627\u0644\u0623\u0628\u062C\u062F\u064A\u0629
|
||||||
downloadPdf=تنزيل PDF
|
downloadPdf=تنزيل PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=User not authenticated.
|
|||||||
userNotFoundMessage=User not found.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Account Settings
|
|||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
|
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
|
||||||
@@ -141,13 +147,16 @@ adminUserSettings.header=Admin User Control Settings
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=User
|
adminUserSettings.user=User
|
||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
adminUserSettings.actions=Actions
|
adminUserSettings.actions=Actions
|
||||||
adminUserSettings.apiUser=Limited API User
|
adminUserSettings.apiUser=Limited API User
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Web Only User
|
adminUserSettings.webOnlyUser=Web Only User
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
adminUserSettings.forceChange=Force user to change username/password on login
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
|
adminUserSettings.forceChange=Force user to change password on login
|
||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
|
|
||||||
#############
|
#############
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Sign in
|
login.title=Sign in
|
||||||
|
login.header=Sign in
|
||||||
login.signin=Sign in
|
login.signin=Sign in
|
||||||
login.rememberme=Remember me
|
login.rememberme=Remember me
|
||||||
login.invalid=Invalid username or password.
|
login.invalid=Invalid username or password.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=المستند 1
|
|||||||
compare.document.2=المستند 2
|
compare.document.2=المستند 2
|
||||||
compare.submit=يقارن
|
compare.submit=يقارن
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=تسجيل الدخول
|
sign.title=تسجيل الدخول
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=??????
|
PDFToCSV.submit=??????
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Изберете изображение(я)
|
|||||||
genericSubmit=Подайте
|
genericSubmit=Подайте
|
||||||
processTimeWarning=Предупреждение: Този процес може да отнеме до минута в зависимост от размера на файла
|
processTimeWarning=Предупреждение: Този процес може да отнеме до минута в зависимост от размера на файла
|
||||||
pageOrderPrompt=Персонализиран ред на страниците (Въведете разделен със запетаи списък с номера на страници или функции като 2n+1):
|
pageOrderPrompt=Персонализиран ред на страниците (Въведете разделен със запетаи списък с номера на страници или функции като 2n+1):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Давай
|
goToPage=Давай
|
||||||
true=Вярно
|
true=Вярно
|
||||||
false=Невярно
|
false=Невярно
|
||||||
unknown=Непознат
|
unknown=Непознат
|
||||||
save=Съхранете
|
save=Съхранете
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Затворете
|
close=Затворете
|
||||||
filesSelected=избрани файлове
|
filesSelected=избрани файлове
|
||||||
noFavourites=Няма добавени любими
|
noFavourites=Няма добавени любими
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Отекчени сте да чакате?
|
bored=Отекчени сте да чакате?
|
||||||
alphabet=Азбука
|
alphabet=Азбука
|
||||||
downloadPdf=Изтеглете PDF
|
downloadPdf=Изтеглете PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=Потребителят не е автентикира
|
|||||||
userNotFoundMessage=Потребителят не е намерен
|
userNotFoundMessage=Потребителят не е намерен
|
||||||
incorrectPasswordMessage=Текущата парола е неправилна.
|
incorrectPasswordMessage=Текущата парола е неправилна.
|
||||||
usernameExistsMessage=Новият потребител вече съществува.
|
usernameExistsMessage=Новият потребител вече съществува.
|
||||||
|
invalidUsernameMessage=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Настройки на акаунта
|
|||||||
|
|
||||||
changeCreds.title=Промяна на идентификационните данни
|
changeCreds.title=Промяна на идентификационните данни
|
||||||
changeCreds.header=Актуализирайте данните за акаунта си
|
changeCreds.header=Актуализирайте данните за акаунта си
|
||||||
changeCreds.changeUserAndPassword=Използвате идентификационни данни за вход по подразбиране. Моля, въведете нова парола (и потребителско име, ако искате)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=Ново потребителско име
|
changeCreds.newUsername=Ново потребителско име
|
||||||
changeCreds.oldPassword=Текуща парола
|
changeCreds.oldPassword=Текуща парола
|
||||||
changeCreds.newPassword=Нова парола
|
changeCreds.newPassword=Нова парола
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=Настройки за администраторск
|
|||||||
adminUserSettings.admin=Администратор
|
adminUserSettings.admin=Администратор
|
||||||
adminUserSettings.user=Потребител
|
adminUserSettings.user=Потребител
|
||||||
adminUserSettings.addUser=Добавяне на нов потребител
|
adminUserSettings.addUser=Добавяне на нов потребител
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Роли
|
adminUserSettings.roles=Роли
|
||||||
adminUserSettings.role=Роля
|
adminUserSettings.role=Роля
|
||||||
adminUserSettings.actions=Действия
|
adminUserSettings.actions=Действия
|
||||||
adminUserSettings.apiUser=Ограничен API потребител
|
adminUserSettings.apiUser=Ограничен API потребител
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Само за уеб-потребител
|
adminUserSettings.webOnlyUser=Само за уеб-потребител
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=Принудете потребителя да промени потребителското име/парола при влизане
|
adminUserSettings.forceChange=Принудете потребителя да промени потребителското име/парола при влизане
|
||||||
adminUserSettings.submit=Съхранете потребителя
|
adminUserSettings.submit=Съхранете потребителя
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Вход
|
login.title=Вход
|
||||||
|
login.header=Вход
|
||||||
login.signin=Впишете се
|
login.signin=Впишете се
|
||||||
login.rememberme=Запомни ме
|
login.rememberme=Запомни ме
|
||||||
login.invalid=Невалидно потребителско име или парола.
|
login.invalid=Невалидно потребителско име или парола.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Документ 1
|
|||||||
compare.document.2=Документ 2
|
compare.document.2=Документ 2
|
||||||
compare.submit=Сравнявай
|
compare.submit=Сравнявай
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Подпишете
|
sign.title=Подпишете
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=????????
|
PDFToCSV.submit=????????
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Selecciona Imatge(s)
|
|||||||
genericSubmit=Envia
|
genericSubmit=Envia
|
||||||
processTimeWarning=Alerta: Aquest procés pot tardar 1 minut depenent de la mida de l'arxiu
|
processTimeWarning=Alerta: Aquest procés pot tardar 1 minut depenent de la mida de l'arxiu
|
||||||
pageOrderPrompt=Ordre de Pàgines (Llista separada per comes) :
|
pageOrderPrompt=Ordre de Pàgines (Llista separada per comes) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Anar
|
goToPage=Anar
|
||||||
true=Verdader
|
true=Verdader
|
||||||
false=Fals
|
false=Fals
|
||||||
unknown=Desconegut
|
unknown=Desconegut
|
||||||
save=Desa
|
save=Desa
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Tanca
|
close=Tanca
|
||||||
filesSelected=fitxers seleccionats
|
filesSelected=fitxers seleccionats
|
||||||
noFavourites=No s'ha afegit cap favorit
|
noFavourites=No s'ha afegit cap favorit
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Avorrit esperant?
|
bored=Avorrit esperant?
|
||||||
alphabet=Alfabet
|
alphabet=Alfabet
|
||||||
downloadPdf=Descarregueu PDF
|
downloadPdf=Descarregueu PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=User not authenticated.
|
|||||||
userNotFoundMessage=User not found.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Account Settings
|
|||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
|
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
|
||||||
@@ -141,13 +147,16 @@ adminUserSettings.header=Usuari Admin Opcions Control
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=Usuari
|
adminUserSettings.user=Usuari
|
||||||
adminUserSettings.addUser=Afegir Usuari
|
adminUserSettings.addUser=Afegir Usuari
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Rols
|
adminUserSettings.roles=Rols
|
||||||
adminUserSettings.role=Rol
|
adminUserSettings.role=Rol
|
||||||
adminUserSettings.actions=Accions
|
adminUserSettings.actions=Accions
|
||||||
adminUserSettings.apiUser=Usuari amb API limitada
|
adminUserSettings.apiUser=Usuari amb API limitada
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Usuari només WEB
|
adminUserSettings.webOnlyUser=Usuari només WEB
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
adminUserSettings.forceChange=Force user to change username/password on login
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
|
adminUserSettings.forceChange=Force user to change password on login
|
||||||
adminUserSettings.submit=Desar Usuari
|
adminUserSettings.submit=Desar Usuari
|
||||||
|
|
||||||
#############
|
#############
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Accedir
|
login.title=Accedir
|
||||||
|
login.header=Accedir
|
||||||
login.signin=Accedir
|
login.signin=Accedir
|
||||||
login.rememberme=Recordar
|
login.rememberme=Recordar
|
||||||
login.invalid=Nom usuari / password no vàlid
|
login.invalid=Nom usuari / password no vàlid
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Document 1
|
|||||||
compare.document.2=Document 2
|
compare.document.2=Document 2
|
||||||
compare.submit=Comparar
|
compare.submit=Comparar
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Sign
|
sign.title=Sign
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=Extracte
|
PDFToCSV.submit=Extracte
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -8,17 +8,20 @@ pdfPrompt=PDF auswählen
|
|||||||
multiPdfPrompt=PDFs auswählen(2+)
|
multiPdfPrompt=PDFs auswählen(2+)
|
||||||
multiPdfDropPrompt=Wählen Sie alle gewünschten PDFs aus (oder ziehen Sie sie per Drag & Drop hierhin)
|
multiPdfDropPrompt=Wählen Sie alle gewünschten PDFs aus (oder ziehen Sie sie per Drag & Drop hierhin)
|
||||||
imgPrompt=Wählen Sie ein Bild
|
imgPrompt=Wählen Sie ein Bild
|
||||||
genericSubmit=Einreichen
|
genericSubmit=Absenden
|
||||||
processTimeWarning=Achtung: Abhängig von der Dateigröße kann dieser Prozess bis zu einer Minute dauern
|
processTimeWarning=Achtung: Abhängig von der Dateigröße kann dieser Prozess bis zu einer Minute dauern
|
||||||
pageOrderPrompt=Seitenreihenfolge (Geben Sie eine durch Komma getrennte Liste von Seitenzahlen ein):
|
pageOrderPrompt=Seitenreihenfolge (Geben Sie eine durch Komma getrennte Liste von Seitenzahlen ein):
|
||||||
|
pageSelectionPrompt=Benutzerdefinierte Seitenauswahl (Geben Sie eine durch Kommas getrennte Liste von Seitenzahlen 1,5,6 oder Funktionen wie 2n+1 ein):
|
||||||
goToPage=Los
|
goToPage=Los
|
||||||
true=Wahr
|
true=Wahr
|
||||||
false=Falsch
|
false=Falsch
|
||||||
unknown=Unbekannt
|
unknown=Unbekannt
|
||||||
save=Speichern
|
save=Speichern
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Schließen
|
close=Schließen
|
||||||
filesSelected=Dateien ausgewählt
|
filesSelected=Dateien ausgewählt
|
||||||
noFavourites=Keine Favoriten hinzugefügt
|
noFavourites=Keine Favoriten hinzugefügt
|
||||||
|
downloadComplete=Download abgeschlossen
|
||||||
bored=Langeweile beim Warten?
|
bored=Langeweile beim Warten?
|
||||||
alphabet=Alphabet
|
alphabet=Alphabet
|
||||||
downloadPdf=PDF herunterladen
|
downloadPdf=PDF herunterladen
|
||||||
@@ -51,6 +54,9 @@ notAuthenticatedMessage=Benutzer nicht authentifiziert.
|
|||||||
userNotFoundMessage=Benutzer nicht gefunden.
|
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 und Zahlen enthalten.
|
||||||
|
deleteCurrentUserMessage=Der aktuell angemeldete Benutzer kann nicht gelöscht werden.
|
||||||
|
deleteUsernameExistsMessage=Der Benutzername existiert nicht und kann nicht gelöscht werden.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
@@ -67,12 +73,12 @@ pipeline.submitButton=Speichern
|
|||||||
######################
|
######################
|
||||||
pipelineOptions.header=Pipeline-Konfiguration
|
pipelineOptions.header=Pipeline-Konfiguration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline-Name
|
pipelineOptions.pipelineNameLabel=Pipeline-Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Operations-Einstellungen speichern
|
||||||
pipelineOptions.pipelineNamePrompt=Geben Sie hier den Namen der Pipeline ein
|
pipelineOptions.pipelineNamePrompt=Geben Sie hier den Namen der Pipeline ein
|
||||||
pipelineOptions.selectOperation=Vorgang auswählen
|
pipelineOptions.selectOperation=Vorgang auswählen
|
||||||
pipelineOptions.addOperationButton=Vorgang hinzufügen
|
pipelineOptions.addOperationButton=Vorgang hinzufügen
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Downloaden
|
pipelineOptions.saveButton=Herunterladen
|
||||||
pipelineOptions.validateButton=Validieren
|
pipelineOptions.validateButton=Validieren
|
||||||
|
|
||||||
|
|
||||||
@@ -84,7 +90,7 @@ pipelineOptions.validateButton=Validieren
|
|||||||
navbar.convert=Konvertieren
|
navbar.convert=Konvertieren
|
||||||
navbar.security=Sicherheit
|
navbar.security=Sicherheit
|
||||||
navbar.other=Anderes
|
navbar.other=Anderes
|
||||||
navbar.darkmode=Dark Mode
|
navbar.darkmode=Dunkler Modus
|
||||||
navbar.pageOps=Seitenoperationen
|
navbar.pageOps=Seitenoperationen
|
||||||
navbar.settings=Einstellungen
|
navbar.settings=Einstellungen
|
||||||
|
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Kontoeinstellungen
|
|||||||
|
|
||||||
changeCreds.title=Anmeldeinformationen ändern
|
changeCreds.title=Anmeldeinformationen ändern
|
||||||
changeCreds.header=Aktualisieren Sie Ihre Kontodaten
|
changeCreds.header=Aktualisieren Sie Ihre Kontodaten
|
||||||
changeCreds.changeUserAndPassword=Sie verwenden Standard-Anmeldeinformationen. Bitte geben Sie ein neues Passwort (und ggf. einen Benutzernamen) ein.
|
changeCreds.changePassword=Sie verwenden die Standard-Zugangsdaten. Bitte geben Sie ein neues Passwort ein.
|
||||||
changeCreds.newUsername=Neuer Benutzername
|
changeCreds.newUsername=Neuer Benutzername
|
||||||
changeCreds.oldPassword=Aktuelles Passwort
|
changeCreds.oldPassword=Aktuelles Passwort
|
||||||
changeCreds.newPassword=Neues Passwort
|
changeCreds.newPassword=Neues Passwort
|
||||||
@@ -127,7 +133,7 @@ account.newPassword=Neues Passwort
|
|||||||
account.changePassword=Passwort ändern
|
account.changePassword=Passwort ändern
|
||||||
account.confirmNewPassword=Neues Passwort bestätigen
|
account.confirmNewPassword=Neues Passwort bestätigen
|
||||||
account.signOut=Abmelden
|
account.signOut=Abmelden
|
||||||
account.yourApiKey=Dein API Schlüssel
|
account.yourApiKey=Dein API-Schlüssel
|
||||||
account.syncTitle=Browsereinstellungen mit Konto synchronisieren
|
account.syncTitle=Browsereinstellungen mit Konto synchronisieren
|
||||||
account.settingsCompare=Einstellungen vergleichen:
|
account.settingsCompare=Einstellungen vergleichen:
|
||||||
account.property=Eigenschaft
|
account.property=Eigenschaft
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=Administrator-Benutzerkontrolle
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=Benutzer
|
adminUserSettings.user=Benutzer
|
||||||
adminUserSettings.addUser=Neuen Benutzer hinzufügen
|
adminUserSettings.addUser=Neuen Benutzer hinzufügen
|
||||||
|
adminUserSettings.usernameInfo=Der Benutzername darf nur Buchstaben und Zahlen enthalten, keine Leerzeichen oder Sonderzeichen.
|
||||||
adminUserSettings.roles=Rollen
|
adminUserSettings.roles=Rollen
|
||||||
adminUserSettings.role=Rolle
|
adminUserSettings.role=Rolle
|
||||||
adminUserSettings.actions=Aktion
|
adminUserSettings.actions=Aktion
|
||||||
adminUserSettings.apiUser=Eingeschränkter API-Benutzer
|
adminUserSettings.apiUser=Eingeschränkter API-Benutzer
|
||||||
|
adminUserSettings.extraApiUser=Zusätzlicher eingeschränkter API-Benutzer
|
||||||
adminUserSettings.webOnlyUser=Nur Web-Benutzer
|
adminUserSettings.webOnlyUser=Nur Web-Benutzer
|
||||||
adminUserSettings.demoUser=Demo-Benutzer (Keine benutzerdefinierten Einstellungen)
|
adminUserSettings.demoUser=Demo-Benutzer (Keine benutzerdefinierten Einstellungen)
|
||||||
|
adminUserSettings.internalApiUser=Interner API-Benutzer
|
||||||
adminUserSettings.forceChange=Benutzer dazu zwingen, Benutzernamen/Passwort bei der Anmeldung zu ändern
|
adminUserSettings.forceChange=Benutzer dazu zwingen, Benutzernamen/Passwort bei der Anmeldung zu ändern
|
||||||
adminUserSettings.submit=Benutzer speichern
|
adminUserSettings.submit=Benutzer speichern
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Fügen Sie an festgelegten Stellen Text oder Bildstemp
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,11 +416,12 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Anmelden
|
login.title=Anmelden
|
||||||
|
login.header=Anmelden
|
||||||
login.signin=Anmelden
|
login.signin=Anmelden
|
||||||
login.rememberme=Angemeldet bleiben
|
login.rememberme=Angemeldet bleiben
|
||||||
login.invalid=Ungültiger Benutzername oder Passwort.
|
login.invalid=Benutzername oder Passwort ungültig.
|
||||||
login.locked=Ihr Konto wurde gesperrt.
|
login.locked=Ihr Konto wurde gesperrt.
|
||||||
login.signinTitle=Bitte melden Sie sich an
|
login.signinTitle=Bitte melden Sie sich an.
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Dokument 1
|
|||||||
compare.document.2=Dokument 2
|
compare.document.2=Dokument 2
|
||||||
compare.submit=Vergleichen
|
compare.submit=Vergleichen
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Bücher und Comics zu PDF
|
||||||
|
BookToPDF.header=Buch zu PDF
|
||||||
|
BookToPDF.credit=Verwendet Calibre
|
||||||
|
BookToPDF.submit=Konvertieren
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF zu Buch
|
||||||
|
PDFToBook.header=PDF zu Buch
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Verwendet Calibre
|
||||||
|
PDFToBook.submit=Konvertieren
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Signieren
|
sign.title=Signieren
|
||||||
@@ -746,7 +777,7 @@ pageRemover.submit=Seiten löschen
|
|||||||
rotate.title=PDF drehen
|
rotate.title=PDF drehen
|
||||||
rotate.header=PDF drehen
|
rotate.header=PDF drehen
|
||||||
rotate.selectAngle=Wählen Sie den Winkel (in Vielfachen von 90 Grad):
|
rotate.selectAngle=Wählen Sie den Winkel (in Vielfachen von 90 Grad):
|
||||||
rotate.submit=Drehen
|
rotate.submit=Herunterladen
|
||||||
|
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
@@ -905,15 +936,15 @@ PDFToText.submit=Konvertieren
|
|||||||
|
|
||||||
|
|
||||||
#PDFToHTML
|
#PDFToHTML
|
||||||
PDFToHTML.title=PDF in HTML
|
PDFToHTML.title=PDF zu HTML
|
||||||
PDFToHTML.header=PDF in HTML
|
PDFToHTML.header=PDF zu HTML
|
||||||
PDFToHTML.credit=Dieser Dienst verwendet LibreOffice für die Dateikonvertierung.
|
PDFToHTML.credit=Dieser Dienst verwendet LibreOffice für die Dateikonvertierung.
|
||||||
PDFToHTML.submit=Konvertieren
|
PDFToHTML.submit=Konvertieren
|
||||||
|
|
||||||
|
|
||||||
#PDFToXML
|
#PDFToXML
|
||||||
PDFToXML.title=PDF in XML
|
PDFToXML.title=PDF zu XML
|
||||||
PDFToXML.header=PDF in XML
|
PDFToXML.header=PDF zu XML
|
||||||
PDFToXML.credit=Dieser Dienst verwendet LibreOffice für die Dateikonvertierung.
|
PDFToXML.credit=Dieser Dienst verwendet LibreOffice für die Dateikonvertierung.
|
||||||
PDFToXML.submit=Konvertieren
|
PDFToXML.submit=Konvertieren
|
||||||
|
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Seite mit der zu extrahierenden Tabelle wählen
|
|||||||
PDFToCSV.submit=Extrahieren
|
PDFToCSV.submit=Extrahieren
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=PDF nach Größe oder Anzahl teilen
|
||||||
split-by-size-or-count.header=PDF nach Größe oder Anzahl teilen
|
split-by-size-or-count.header=PDF nach Größe oder Anzahl teilen
|
||||||
split-by-size-or-count.type.label=Teil-Modus wählen
|
split-by-size-or-count.type.label=Teil-Modus wählen
|
||||||
split-by-size-or-count.type.size=Nach Größe
|
split-by-size-or-count.type.size=Nach Größe
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertikale Teiler
|
|||||||
split-by-sections.horizontal.placeholder=Anzahl horizontaler Teiler eingeben
|
split-by-sections.horizontal.placeholder=Anzahl horizontaler Teiler eingeben
|
||||||
split-by-sections.vertical.placeholder=Anzahl vertikaler Teiler eingeben
|
split-by-sections.vertical.placeholder=Anzahl vertikaler Teiler eingeben
|
||||||
split-by-sections.submit=PDF teilen
|
split-by-sections.submit=PDF teilen
|
||||||
|
split-by-sections.merge=In eine PDF zusammenfügen
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Lizenzen
|
licenses.nav=Lizenzen
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u0395\u03B9\u03BA\u03CC\u0
|
|||||||
genericSubmit=\u03A5\u03C0\u03BF\u03B2\u03BF\u03BB\u03AE
|
genericSubmit=\u03A5\u03C0\u03BF\u03B2\u03BF\u03BB\u03AE
|
||||||
processTimeWarning=\u03A0\u03C1\u03BF\u03C3\u03BF\u03C7\u03AE: \u0391\u03C5\u03C4\u03AE \u03B7 \u03B4\u03B9\u03B1\u03B4\u03B9\u03BA\u03B1\u03C3\u03AF\u03B1 \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B4\u03B9\u03B1\u03C1\u03BA\u03AD\u03C3\u03B5\u03B9 \u03AD\u03C9\u03C2 \u03BA\u03B1\u03B9 \u03AD\u03BD\u03B1 \u03BB\u03B5\u03C0\u03C4\u03CC \u03B1\u03BD\u03AC\u03BB\u03BF\u03B3\u03B1 \u03BC\u03B5 \u03C4\u03BF \u03BC\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
|
processTimeWarning=\u03A0\u03C1\u03BF\u03C3\u03BF\u03C7\u03AE: \u0391\u03C5\u03C4\u03AE \u03B7 \u03B4\u03B9\u03B1\u03B4\u03B9\u03BA\u03B1\u03C3\u03AF\u03B1 \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B4\u03B9\u03B1\u03C1\u03BA\u03AD\u03C3\u03B5\u03B9 \u03AD\u03C9\u03C2 \u03BA\u03B1\u03B9 \u03AD\u03BD\u03B1 \u03BB\u03B5\u03C0\u03C4\u03CC \u03B1\u03BD\u03AC\u03BB\u03BF\u03B3\u03B1 \u03BC\u03B5 \u03C4\u03BF \u03BC\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
|
||||||
pageOrderPrompt=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03B7 \u03A3\u03B5\u03B9\u03C1\u03AC \u03A3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2 (\u03A0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C3\u03C4\u03B5 \u03BC\u03AF\u03B1 \u03BB\u03AF\u03C3\u03C4\u03B5 \u03B1\u03C0\u03BF \u03B1\u03C1\u03B9\u03B8\u03BC\u03BF\u03CD\u03C2 \u03C3\u03B5\u03BB\u03B9\u03B4\u03CE\u03BD, \u03C7\u03C9\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B5\u03C2 \u03BC\u03B5 \u03BA\u03CC\u03BC\u03BC\u03B1 \u03AE \u03C3\u03C5\u03BD\u03B1\u03C1\u03C4\u03AE\u03C3\u03B5\u03B9\u03C2 \u03CC\u03C0\u03C9\u03C2 2n+1) :
|
pageOrderPrompt=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03B7 \u03A3\u03B5\u03B9\u03C1\u03AC \u03A3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2 (\u03A0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C3\u03C4\u03B5 \u03BC\u03AF\u03B1 \u03BB\u03AF\u03C3\u03C4\u03B5 \u03B1\u03C0\u03BF \u03B1\u03C1\u03B9\u03B8\u03BC\u03BF\u03CD\u03C2 \u03C3\u03B5\u03BB\u03B9\u03B4\u03CE\u03BD, \u03C7\u03C9\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B5\u03C2 \u03BC\u03B5 \u03BA\u03CC\u03BC\u03BC\u03B1 \u03AE \u03C3\u03C5\u03BD\u03B1\u03C1\u03C4\u03AE\u03C3\u03B5\u03B9\u03C2 \u03CC\u03C0\u03C9\u03C2 2n+1) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Go
|
goToPage=Go
|
||||||
true=\u0391\u03BB\u03B7\u03B8\u03AD\u03C2
|
true=\u0391\u03BB\u03B7\u03B8\u03AD\u03C2
|
||||||
false=\u039B\u03B1\u03BD\u03B8\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF
|
false=\u039B\u03B1\u03BD\u03B8\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF
|
||||||
unknown=\u0386\u03B3\u03BD\u03C9\u03C3\u03C4\u03BF
|
unknown=\u0386\u03B3\u03BD\u03C9\u03C3\u03C4\u03BF
|
||||||
save=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7
|
save=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF
|
close=\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF
|
||||||
filesSelected=\u03B1\u03C1\u03C7\u03B5\u03AF\u03B1 \u03C0\u03BF\u03C5 \u03B5\u03C0\u03B9\u03BB\u03AD\u03C7\u03B8\u03B7\u03BA\u03B1\u03BD
|
filesSelected=\u03B1\u03C1\u03C7\u03B5\u03AF\u03B1 \u03C0\u03BF\u03C5 \u03B5\u03C0\u03B9\u03BB\u03AD\u03C7\u03B8\u03B7\u03BA\u03B1\u03BD
|
||||||
noFavourites=\u039A\u03B1\u03BD\u03AD\u03BD\u03B1 \u03B1\u03B3\u03B1\u03C0\u03AE\u03BC\u03B5\u03BD\u03BF \u03B4\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03C0\u03C1\u03BF\u03C3\u03C4\u03B5\u03B8\u03B5\u03AF
|
noFavourites=\u039A\u03B1\u03BD\u03AD\u03BD\u03B1 \u03B1\u03B3\u03B1\u03C0\u03AE\u03BC\u03B5\u03BD\u03BF \u03B4\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03C0\u03C1\u03BF\u03C3\u03C4\u03B5\u03B8\u03B5\u03AF
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=\u0392\u03B1\u03C1\u03B9\u03AD\u03C3\u03C4\u03B5 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BC\u03AD\u03BD\u03B5\u03C4\u03B5;
|
bored=\u0392\u03B1\u03C1\u03B9\u03AD\u03C3\u03C4\u03B5 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03BC\u03AD\u03BD\u03B5\u03C4\u03B5;
|
||||||
alphabet=\u0391\u03BB\u03C6\u03AC\u03B2\u03B7\u03C4\u03BF
|
alphabet=\u0391\u03BB\u03C6\u03AC\u03B2\u03B7\u03C4\u03BF
|
||||||
downloadPdf=\u039A\u03B1\u03C4\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1 \u03C4\u03BF\u03C5 PDF
|
downloadPdf=\u039A\u03B1\u03C4\u03AD\u03B2\u03B1\u03C3\u03BC\u03B1 \u03C4\u03BF\u03C5 PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=\u039F \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B4
|
|||||||
userNotFoundMessage=\u039F \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5.
|
userNotFoundMessage=\u039F \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5.
|
||||||
incorrectPasswordMessage=\u039F \u03C4\u03C1\u03AD\u03C7\u03C9\u03BD \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BB\u03B1\u03BD\u03B8\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF\u03C2.
|
incorrectPasswordMessage=\u039F \u03C4\u03C1\u03AD\u03C7\u03C9\u03BD \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BB\u03B1\u03BD\u03B8\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF\u03C2.
|
||||||
usernameExistsMessage=\u03A4\u03BF \u03BD\u03AD\u03BF \u03CC\u03BD\u03BF\u03BC\u03B1 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03AE\u03B4\u03B7.
|
usernameExistsMessage=\u03A4\u03BF \u03BD\u03AD\u03BF \u03CC\u03BD\u03BF\u03BC\u03B1 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03AE\u03B4\u03B7.
|
||||||
|
invalidUsernameMessage=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2
|
|||||||
|
|
||||||
changeCreds.title=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u0394\u03B9\u03B1\u03C0\u03B9\u03C3\u03C4\u03B5\u03C5\u03C4\u03B7\u03C1\u03AF\u03C9\u03BD
|
changeCreds.title=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u0394\u03B9\u03B1\u03C0\u03B9\u03C3\u03C4\u03B5\u03C5\u03C4\u03B7\u03C1\u03AF\u03C9\u03BD
|
||||||
changeCreds.header=\u0395\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7 \u03C4\u03C9\u03BD \u03BB\u03B5\u03C0\u03C4\u03BF\u03BC\u03B5\u03C1\u03B5\u03B9\u03CE\u03BD \u03C4\u03BF\u03C5 \u039B\u03BF\u03B3\u03B1\u03C1\u03B9\u03B1\u03C3\u03BC\u03BF\u03CD \u03C3\u03B1\u03C2
|
changeCreds.header=\u0395\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7 \u03C4\u03C9\u03BD \u03BB\u03B5\u03C0\u03C4\u03BF\u03BC\u03B5\u03C1\u03B5\u03B9\u03CE\u03BD \u03C4\u03BF\u03C5 \u039B\u03BF\u03B3\u03B1\u03C1\u03B9\u03B1\u03C3\u03BC\u03BF\u03CD \u03C3\u03B1\u03C2
|
||||||
changeCreds.changeUserAndPassword=\u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B5 \u03C4\u03B1 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B1 \u03B4\u03B9\u03B1\u03C0\u03B9\u03C3\u03C4\u03B5\u03C5\u03C4\u03AE\u03C1\u03B9\u03B1 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\u03C2. \u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03B5\u03B9\u03C3\u03AC\u03B3\u03B5\u03C4\u03B5 \u03BD\u03AD\u03BF \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2 (\u03BA\u03B1\u03B9 \u03CC\u03BD\u03BF\u03BC\u03B1 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 \u03B1\u03BD \u03C4\u03BF \u03B5\u03C0\u03B9\u03B8\u03C5\u03BC\u03B5\u03AF\u03C4\u03B5)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=\u039D\u03AD\u03BF \u038C\u03BD\u03BF\u03BC\u03B1 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7
|
changeCreds.newUsername=\u039D\u03AD\u03BF \u038C\u03BD\u03BF\u03BC\u03B1 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7
|
||||||
changeCreds.oldPassword=\u03A4\u03C1\u03AD\u03C7\u03C9\u03BD \u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2
|
changeCreds.oldPassword=\u03A4\u03C1\u03AD\u03C7\u03C9\u03BD \u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2
|
||||||
changeCreds.newPassword=\u039D\u03AD\u03BF\u03C2 \u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2
|
changeCreds.newPassword=\u039D\u03AD\u03BF\u03C2 \u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2
|
|||||||
adminUserSettings.admin=\u0394\u03B9\u03B1\u03C7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2
|
adminUserSettings.admin=\u0394\u03B9\u03B1\u03C7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2
|
||||||
adminUserSettings.user=\u03A7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2
|
adminUserSettings.user=\u03A7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2
|
||||||
adminUserSettings.addUser=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03BD\u03AD\u03BF\u03C5 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7
|
adminUserSettings.addUser=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03BD\u03AD\u03BF\u03C5 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=\u03A1\u03CC\u03BB\u03BF\u03B9
|
adminUserSettings.roles=\u03A1\u03CC\u03BB\u03BF\u03B9
|
||||||
adminUserSettings.role=\u03A1\u03CC\u03BB\u03BF\u03C2
|
adminUserSettings.role=\u03A1\u03CC\u03BB\u03BF\u03C2
|
||||||
adminUserSettings.actions=\u0395\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B5\u03C2
|
adminUserSettings.actions=\u0395\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B5\u03C2
|
||||||
adminUserSettings.apiUser=\u03A0\u03B5\u03C1\u03B9\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF\u03C2 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B3\u03B9\u03B1 \u03B4\u03B9\u03B5\u03C0\u03B1\u03C6\u03AE \u03C0\u03C1\u03BF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03B9\u03C3\u03BC\u03BF\u03CD \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03CE\u03BD (API User)
|
adminUserSettings.apiUser=\u03A0\u03B5\u03C1\u03B9\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF\u03C2 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B3\u03B9\u03B1 \u03B4\u03B9\u03B5\u03C0\u03B1\u03C6\u03AE \u03C0\u03C1\u03BF\u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03B9\u03C3\u03BC\u03BF\u03CD \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03CE\u03BD (API User)
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=\u03A7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03BC\u03CC\u03BD\u03BF \u0399\u03C3\u03C4\u03BF\u03CD
|
adminUserSettings.webOnlyUser=\u03A7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03BC\u03CC\u03BD\u03BF \u0399\u03C3\u03C4\u03BF\u03CD
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=\u0391\u03BD\u03B1\u03B3\u03BA\u03AC\u03C3\u03C4\u03B5 \u03C4\u03BF\u03BD \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 \u03BD\u03B1 \u03B1\u03BB\u03BB\u03AC\u03BE\u03B5\u03B9 \u03C4\u03BF \u03CC\u03BD\u03BF\u03BC\u03B1 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7/\u03BA\u03C9\u03B4\u03B9\u03BA\u03CC \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2 \u03BA\u03B1\u03C4\u03AC \u03C4\u03B7 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7
|
adminUserSettings.forceChange=\u0391\u03BD\u03B1\u03B3\u03BA\u03AC\u03C3\u03C4\u03B5 \u03C4\u03BF\u03BD \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 \u03BD\u03B1 \u03B1\u03BB\u03BB\u03AC\u03BE\u03B5\u03B9 \u03C4\u03BF \u03CC\u03BD\u03BF\u03BC\u03B1 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7/\u03BA\u03C9\u03B4\u03B9\u03BA\u03CC \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2 \u03BA\u03B1\u03C4\u03AC \u03C4\u03B7 \u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7
|
||||||
adminUserSettings.submit=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7
|
adminUserSettings.submit=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=\u0395\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2
|
login.title=\u0395\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2
|
||||||
|
login.header=\u0395\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2
|
||||||
login.signin=\u0395\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2
|
login.signin=\u0395\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2
|
||||||
login.rememberme=\u039D\u03B1 \u039C\u03B5 \u0398\u03C5\u03BC\u03AC\u03C3\u03B1\u03B9
|
login.rememberme=\u039D\u03B1 \u039C\u03B5 \u0398\u03C5\u03BC\u03AC\u03C3\u03B1\u03B9
|
||||||
login.invalid=\u039B\u03AC\u03B8\u03BF\u03C2 \u03CC\u03BD\u03BF\u03BC\u03B1 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 \u03AE \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03CD \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2.
|
login.invalid=\u039B\u03AC\u03B8\u03BF\u03C2 \u03CC\u03BD\u03BF\u03BC\u03B1 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 \u03AE \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03CD \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=\u0388\u03B3\u03B3\u03C1\u03B1\u03C6\u03BF 1
|
|||||||
compare.document.2=\u0388\u03B3\u03B3\u03C1\u03B1\u03C6\u03BF 2
|
compare.document.2=\u0388\u03B3\u03B3\u03C1\u03B1\u03C6\u03BF 2
|
||||||
compare.submit=\u03A3\u03CD\u03B3\u03BA\u03C1\u03B9\u03C3\u03B7
|
compare.submit=\u03A3\u03CD\u03B3\u03BA\u03C1\u03B9\u03C3\u03B7
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=\u03A5\u03C0\u03BF\u03B3\u03C1\u03B1\u03C6\u03AE
|
sign.title=\u03A5\u03C0\u03BF\u03B3\u03C1\u03B1\u03C6\u03AE
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=?????????
|
PDFToCSV.submit=?????????
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr = left to right, rtl = right to left)
|
# the direction that the language is written (ltr = left to right, rtl = right to left)
|
||||||
@@ -17,9 +17,11 @@ true=True
|
|||||||
false=False
|
false=False
|
||||||
unknown=Unknown
|
unknown=Unknown
|
||||||
save=Save
|
save=Save
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Close
|
close=Close
|
||||||
filesSelected=files selected
|
filesSelected=files selected
|
||||||
noFavourites=No favourites added
|
noFavourites=No favourites added
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Bored Waiting?
|
bored=Bored Waiting?
|
||||||
alphabet=Alphabet
|
alphabet=Alphabet
|
||||||
downloadPdf=Download PDF
|
downloadPdf=Download PDF
|
||||||
@@ -52,12 +54,15 @@ notAuthenticatedMessage=User not authenticated.
|
|||||||
userNotFoundMessage=User not found.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -107,7 +112,7 @@ settings.accountSettings=Account Settings
|
|||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
|
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
|
||||||
@@ -142,13 +147,16 @@ adminUserSettings.header=Admin User Control Settings
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=User
|
adminUserSettings.user=User
|
||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
adminUserSettings.actions=Actions
|
adminUserSettings.actions=Actions
|
||||||
adminUserSettings.apiUser=Limited API User
|
adminUserSettings.apiUser=Limited API User
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Web Only User
|
adminUserSettings.webOnlyUser=Web Only User
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
adminUserSettings.forceChange = Force user to change username/password on login
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
|
adminUserSettings.forceChange=Force user to change password on login
|
||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
|
|
||||||
#############
|
#############
|
||||||
@@ -392,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -399,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Sign in
|
login.title=Sign in
|
||||||
|
login.header=Sign in
|
||||||
login.signin=Sign in
|
login.signin=Sign in
|
||||||
login.rememberme=Remember me
|
login.rememberme=Remember me
|
||||||
login.invalid=Invalid username or password.
|
login.invalid=Invalid username or password.
|
||||||
@@ -623,6 +641,18 @@ compare.document.1=Document 1
|
|||||||
compare.document.2=Document 2
|
compare.document.2=Document 2
|
||||||
compare.submit=Compare
|
compare.submit=Compare
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Sign
|
sign.title=Sign
|
||||||
@@ -925,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=Extract
|
PDFToCSV.submit=Extract
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -959,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Select Image(s)
|
|||||||
genericSubmit=Submit
|
genericSubmit=Submit
|
||||||
processTimeWarning=Warning: This process can take up to a minute depending on file-size
|
processTimeWarning=Warning: This process can take up to a minute depending on file-size
|
||||||
pageOrderPrompt=Custom Page Order (Enter a comma-separated list of page numbers or Functions like 2n+1) :
|
pageOrderPrompt=Custom Page Order (Enter a comma-separated list of page numbers or Functions like 2n+1) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Go
|
goToPage=Go
|
||||||
true=True
|
true=True
|
||||||
false=False
|
false=False
|
||||||
unknown=Unknown
|
unknown=Unknown
|
||||||
save=Save
|
save=Save
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Close
|
close=Close
|
||||||
filesSelected=files selected
|
filesSelected=files selected
|
||||||
noFavourites=No favorites added
|
noFavourites=No favorites added
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Bored Waiting?
|
bored=Bored Waiting?
|
||||||
alphabet=Alphabet
|
alphabet=Alphabet
|
||||||
downloadPdf=Download PDF
|
downloadPdf=Download PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=User not authenticated.
|
|||||||
userNotFoundMessage=User not found.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Account Settings
|
|||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
|
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
|
||||||
@@ -141,13 +147,16 @@ adminUserSettings.header=Admin User Control Settings
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=User
|
adminUserSettings.user=User
|
||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
adminUserSettings.actions=Actions
|
adminUserSettings.actions=Actions
|
||||||
adminUserSettings.apiUser=Limited API User
|
adminUserSettings.apiUser=Limited API User
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Web Only User
|
adminUserSettings.webOnlyUser=Web Only User
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
adminUserSettings.forceChange=Force user to change username/password on login
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
|
adminUserSettings.forceChange=Force user to change password on login
|
||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
|
|
||||||
#############
|
#############
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Sign in
|
login.title=Sign in
|
||||||
|
login.header=Sign in
|
||||||
login.signin=Sign in
|
login.signin=Sign in
|
||||||
login.rememberme=Remember me
|
login.rememberme=Remember me
|
||||||
login.invalid=Invalid username or password.
|
login.invalid=Invalid username or password.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Document 1
|
|||||||
compare.document.2=Document 2
|
compare.document.2=Document 2
|
||||||
compare.submit=Compare
|
compare.submit=Compare
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Sign
|
sign.title=Sign
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=Extract
|
PDFToCSV.submit=Extract
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Seleccionar Imagen(es)
|
|||||||
genericSubmit=Enviar
|
genericSubmit=Enviar
|
||||||
processTimeWarning=Advertencia: este proceso puede tardar hasta un minuto dependiendo del tamaño del archivo
|
processTimeWarning=Advertencia: este proceso puede tardar hasta un minuto dependiendo del tamaño del archivo
|
||||||
pageOrderPrompt=Orden de páginas (Introduzca una lista de números de página separados por coma):
|
pageOrderPrompt=Orden de páginas (Introduzca una lista de números de página separados por coma):
|
||||||
|
pageSelectionPrompt=Selección de página personalizada (Intruduzca una lista de números de página separados por comas 1,5,6 o funciones como 2n+1) :
|
||||||
goToPage=Ir a
|
goToPage=Ir a
|
||||||
true=Verdadero
|
true=Verdadero
|
||||||
false=Falso
|
false=Falso
|
||||||
unknown=Desconocido
|
unknown=Desconocido
|
||||||
save=Guardar
|
save=Guardar
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Cerrar
|
close=Cerrar
|
||||||
filesSelected=archivos seleccionados
|
filesSelected=archivos seleccionados
|
||||||
noFavourites=No se agregaron favoritos
|
noFavourites=No se agregaron favoritos
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=¿Cansado de esperar?
|
bored=¿Cansado de esperar?
|
||||||
alphabet=Alfabeto
|
alphabet=Alfabeto
|
||||||
downloadPdf=Descargar PDF
|
downloadPdf=Descargar PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=Usuario no autentificado.
|
|||||||
userNotFoundMessage=Usuario no encontrado.
|
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=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Menu Pipeline (Alfa)
|
pipeline.header=Menú de canalización (Alfa)
|
||||||
pipeline.uploadButton=Cargar personalización
|
pipeline.uploadButton=Cargar personalización
|
||||||
pipeline.configureButton=Configurar
|
pipeline.configureButton=Configurar
|
||||||
pipeline.defaultOption=Personalizar
|
pipeline.defaultOption=Personalizar
|
||||||
@@ -65,13 +71,13 @@ pipeline.submitButton=Enviar
|
|||||||
######################
|
######################
|
||||||
# Pipeline Options #
|
# Pipeline Options #
|
||||||
######################
|
######################
|
||||||
pipelineOptions.header=Configuración Pipeline
|
pipelineOptions.header=Configuración de la canalización
|
||||||
pipelineOptions.pipelineNameLabel=Nombre del Pipeline
|
pipelineOptions.pipelineNameLabel=Nombre de la canalización
|
||||||
pipelineOptions.saveSettings=Guardar configuración de la oiperación
|
pipelineOptions.saveSettings=Guardar configuración de la canalización
|
||||||
pipelineOptions.pipelineNamePrompt=Introduzca aquí el nombre del pipeline
|
pipelineOptions.pipelineNamePrompt=Introduzca aquí el nombre de la canalización
|
||||||
pipelineOptions.selectOperation=Seleccione la operación
|
pipelineOptions.selectOperation=Seleccione la operación
|
||||||
pipelineOptions.addOperationButton=Añadir operación
|
pipelineOptions.addOperationButton=Añadir operación
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Canalización:
|
||||||
pipelineOptions.saveButton=Descargar
|
pipelineOptions.saveButton=Descargar
|
||||||
pipelineOptions.validateButton=Validar
|
pipelineOptions.validateButton=Validar
|
||||||
|
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Configuración de la cuenta
|
|||||||
|
|
||||||
changeCreds.title=Cambiar Credenciales
|
changeCreds.title=Cambiar Credenciales
|
||||||
changeCreds.header=Actualice los detalles de su cuenta
|
changeCreds.header=Actualice los detalles de su cuenta
|
||||||
changeCreds.changeUserAndPassword=Está usando las credenciales por defecto. Por favor, introduzca una nueva contraseña (y usuario si lo desea)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=Nuevo usuario
|
changeCreds.newUsername=Nuevo usuario
|
||||||
changeCreds.oldPassword=Contraseña actual
|
changeCreds.oldPassword=Contraseña actual
|
||||||
changeCreds.newPassword=Nueva contraseña
|
changeCreds.newPassword=Nueva contraseña
|
||||||
@@ -141,12 +147,15 @@ 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.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Rol
|
adminUserSettings.role=Rol
|
||||||
adminUserSettings.actions=Acciones
|
adminUserSettings.actions=Acciones
|
||||||
adminUserSettings.apiUser=Usuario limitado de API
|
adminUserSettings.apiUser=Usuario limitado de API
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Usuario solo web
|
adminUserSettings.webOnlyUser=Usuario solo web
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
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
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Iniciar sesión
|
login.title=Iniciar sesión
|
||||||
|
login.header=Iniciar sesión
|
||||||
login.signin=Iniciar sesión
|
login.signin=Iniciar sesión
|
||||||
login.rememberme=Recordarme
|
login.rememberme=Recordarme
|
||||||
login.invalid=Nombre de usuario o contraseña erróneos.
|
login.invalid=Nombre de usuario o contraseña erróneos.
|
||||||
@@ -562,7 +581,7 @@ autoSplitPDF.submit=Entregar
|
|||||||
|
|
||||||
|
|
||||||
#pipeline
|
#pipeline
|
||||||
pipeline.title=Pipeline
|
pipeline.title=Canalización
|
||||||
|
|
||||||
|
|
||||||
#pageLayout
|
#pageLayout
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Documento 1
|
|||||||
compare.document.2=Documento 2
|
compare.document.2=Documento 2
|
||||||
compare.submit=Comparar
|
compare.submit=Comparar
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Firmar
|
sign.title=Firmar
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Elija una página para extraer la tabla
|
|||||||
PDFToCSV.submit=Extraer
|
PDFToCSV.submit=Extraer
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Dividir PDF por tamaño o número
|
split-by-size-or-count.header=Dividir PDF por tamaño o número
|
||||||
split-by-size-or-count.type.label=Seleccionar tipo de división
|
split-by-size-or-count.type.label=Seleccionar tipo de división
|
||||||
split-by-size-or-count.type.size=Por tamaño
|
split-by-size-or-count.type.size=Por tamaño
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Divisiones Verticales
|
|||||||
split-by-sections.horizontal.placeholder=Introduzca el número de divisiones horizontales
|
split-by-sections.horizontal.placeholder=Introduzca el número de divisiones horizontales
|
||||||
split-by-sections.vertical.placeholder=Introduzca el número de divisiones verticales
|
split-by-sections.vertical.placeholder=Introduzca el número de divisiones verticales
|
||||||
split-by-sections.submit=Dividir PDF
|
split-by-sections.submit=Dividir PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licencias
|
licenses.nav=Licencias
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Hautatu Irudia(k)
|
|||||||
genericSubmit=Bidali
|
genericSubmit=Bidali
|
||||||
processTimeWarning=Oharra: prozesu honetarako minutu bat ere beharko da fitxategiaren tamaiaren arabera
|
processTimeWarning=Oharra: prozesu honetarako minutu bat ere beharko da fitxategiaren tamaiaren arabera
|
||||||
pageOrderPrompt=Orrialdeen ordena (sartu komaz bereizitako orrialde-zenbakien zerrenda)
|
pageOrderPrompt=Orrialdeen ordena (sartu komaz bereizitako orrialde-zenbakien zerrenda)
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Joan
|
goToPage=Joan
|
||||||
true=Egiazkoa
|
true=Egiazkoa
|
||||||
false=Faltsua
|
false=Faltsua
|
||||||
unknown=Ezezaguna
|
unknown=Ezezaguna
|
||||||
save=Gorde
|
save=Gorde
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Itxi
|
close=Itxi
|
||||||
filesSelected=Hautatutako fitxategiak
|
filesSelected=Hautatutako fitxategiak
|
||||||
noFavourites=Ez dira gogokoak gehitu
|
noFavourites=Ez dira gogokoak gehitu
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Itxaroten aspertuta?
|
bored=Itxaroten aspertuta?
|
||||||
alphabet=Alfabetoa
|
alphabet=Alfabetoa
|
||||||
downloadPdf=PDFa deskargatu
|
downloadPdf=PDFa deskargatu
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=User not authenticated.
|
|||||||
userNotFoundMessage=User not found.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Kontuaren ezarpenak
|
|||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
|
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
|
||||||
@@ -141,13 +147,16 @@ adminUserSettings.header=Admin Erabiltzailearen Ezarpenen Kontrolak
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=Erabiltzaile
|
adminUserSettings.user=Erabiltzaile
|
||||||
adminUserSettings.addUser=Erabiltzaile berria
|
adminUserSettings.addUser=Erabiltzaile berria
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Rolak
|
adminUserSettings.roles=Rolak
|
||||||
adminUserSettings.role=Rol
|
adminUserSettings.role=Rol
|
||||||
adminUserSettings.actions=Ekintzak
|
adminUserSettings.actions=Ekintzak
|
||||||
adminUserSettings.apiUser=APIren erabiltzaile mugatua
|
adminUserSettings.apiUser=APIren erabiltzaile mugatua
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Web-erabiltzailea bakarrik
|
adminUserSettings.webOnlyUser=Web-erabiltzailea bakarrik
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
adminUserSettings.forceChange=Force user to change username/password on login
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
|
adminUserSettings.forceChange=Force user to change password on login
|
||||||
adminUserSettings.submit=Gorde Erabiltzailea
|
adminUserSettings.submit=Gorde Erabiltzailea
|
||||||
|
|
||||||
#############
|
#############
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Saioa hasi
|
login.title=Saioa hasi
|
||||||
|
login.header=Saioa hasi
|
||||||
login.signin=Saioa hasi
|
login.signin=Saioa hasi
|
||||||
login.rememberme=Oroitu nazazu
|
login.rememberme=Oroitu nazazu
|
||||||
login.invalid=Okerreko erabiltzaile izena edo pasahitza.
|
login.invalid=Okerreko erabiltzaile izena edo pasahitza.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=1. dokumentua
|
|||||||
compare.document.2=2. dokumentua
|
compare.document.2=2. dokumentua
|
||||||
compare.submit=Konparatu
|
compare.submit=Konparatu
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Sinatu
|
sign.title=Sinatu
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=Extracto
|
PDFToCSV.submit=Extracto
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Choisir une image
|
|||||||
genericSubmit=Envoyer
|
genericSubmit=Envoyer
|
||||||
processTimeWarning=Attention, ce processus peut prendre jusqu\u2019à une minute en fonction de la taille du fichier.
|
processTimeWarning=Attention, ce processus peut prendre jusqu\u2019à une minute en fonction de la taille du fichier.
|
||||||
pageOrderPrompt=Ordre des pages (entrez une liste de numéros de page séparés par des virgules ou des fonctions telles que 2n+1)\u00a0:
|
pageOrderPrompt=Ordre des pages (entrez une liste de numéros de page séparés par des virgules ou des fonctions telles que 2n+1)\u00a0:
|
||||||
|
pageSelectionPrompt=Sélection des pages (entrez une liste de numéros de page séparés par des virgules ou des fonctions telles que 2n+1)\u00a0:
|
||||||
goToPage=Aller
|
goToPage=Aller
|
||||||
true=Vrai
|
true=Vrai
|
||||||
false=Faux
|
false=Faux
|
||||||
unknown=Inconnu
|
unknown=Inconnu
|
||||||
save=Enregistrer
|
save=Enregistrer
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Fermer
|
close=Fermer
|
||||||
filesSelected=fichiers sélectionnés
|
filesSelected=fichiers sélectionnés
|
||||||
noFavourites=Aucun favori ajouté
|
noFavourites=Aucun favori ajouté
|
||||||
|
downloadComplete=Téléchargement terminé
|
||||||
bored=Ennuyé d\u2019attendre\u00a0?
|
bored=Ennuyé d\u2019attendre\u00a0?
|
||||||
alphabet=Alphabet
|
alphabet=Alphabet
|
||||||
downloadPdf=Télécharger le PDF
|
downloadPdf=Télécharger le PDF
|
||||||
@@ -42,38 +45,41 @@ red=Rouge
|
|||||||
green=Vert
|
green=Vert
|
||||||
blue=Bleu
|
blue=Bleu
|
||||||
custom=Personnalisé\u2026
|
custom=Personnalisé\u2026
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
WorkInProgess=En cours de développement, merci de nous remonter les problèmes que vous pourriez constater!
|
||||||
poweredBy=Powered by
|
poweredBy=Propulsé par
|
||||||
yes=Yes
|
yes=Oui
|
||||||
no=No
|
no=Non
|
||||||
changedCredsMessage=Les identifiants ont été mis à jour\u00a0!
|
changedCredsMessage=Les identifiants ont été mis à jour\u00a0!
|
||||||
notAuthenticatedMessage=Utilisateur non authentifié.
|
notAuthenticatedMessage=Utilisateur non authentifié.
|
||||||
userNotFoundMessage=Utilisateur non trouvé.
|
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\u2019utilisateur existe déjà.
|
usernameExistsMessage=Le nouveau nom d\u2019utilisateur existe déjà.
|
||||||
|
invalidUsernameMessage=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Menu Pipeline (Alpha)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Télécharger une personnalisation
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configurer
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Personnaliser
|
||||||
pipeline.submitButton=Submit
|
pipeline.submitButton=Soumettre
|
||||||
|
|
||||||
######################
|
######################
|
||||||
# Pipeline Options #
|
# Pipeline Options #
|
||||||
######################
|
######################
|
||||||
pipelineOptions.header=Pipeline Configuration
|
pipelineOptions.header=Configuration du pipeline
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Nom du pipeline
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Sauvegarder la configuration
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Entrez ici le nom du pipeline
|
||||||
pipelineOptions.selectOperation=Select Operation
|
pipelineOptions.selectOperation=Sélectionner une opération
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Ajouter une opération
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Télécharger
|
||||||
pipelineOptions.validateButton=Validate
|
pipelineOptions.validateButton=Valider
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Paramètres du compte
|
|||||||
|
|
||||||
changeCreds.title=Modifiez vos identifiants
|
changeCreds.title=Modifiez vos identifiants
|
||||||
changeCreds.header=Mettez à jour vos identifiants de connexion
|
changeCreds.header=Mettez à jour vos identifiants de connexion
|
||||||
changeCreds.changeUserAndPassword=Vous utilisez les identifiants de connexion par défaut. Veuillez entrer un nouveau mot de passe (et nom d\u2019utilisateur si vous le souhaitez)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=Nouveau nom d\u2019utilisateur
|
changeCreds.newUsername=Nouveau nom d\u2019utilisateur
|
||||||
changeCreds.oldPassword=Mot de passe actuel
|
changeCreds.oldPassword=Mot de passe actuel
|
||||||
changeCreds.newPassword=Nouveau mot de passe
|
changeCreds.newPassword=Nouveau mot de passe
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=Administration des paramètres des utilisateurs
|
|||||||
adminUserSettings.admin=Administateur
|
adminUserSettings.admin=Administateur
|
||||||
adminUserSettings.user=Utilisateur
|
adminUserSettings.user=Utilisateur
|
||||||
adminUserSettings.addUser=Ajouter un utilisateur
|
adminUserSettings.addUser=Ajouter un utilisateur
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Rôles
|
adminUserSettings.roles=Rôles
|
||||||
adminUserSettings.role=Rôle
|
adminUserSettings.role=Rôle
|
||||||
adminUserSettings.actions=Actions
|
adminUserSettings.actions=Actions
|
||||||
adminUserSettings.apiUser=Utilisateur API limité
|
adminUserSettings.apiUser=Utilisateur API limité
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Utilisateur Web uniquement
|
adminUserSettings.webOnlyUser=Utilisateur Web uniquement
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (Paramètres par défaut)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=Forcer l\u2019utilisateur à changer son nom d\u2019utilisateur/mot de passe lors de la connexion
|
adminUserSettings.forceChange=Forcer l\u2019utilisateur à changer son nom d\u2019utilisateur/mot de passe lors de la connexion
|
||||||
adminUserSettings.submit=Ajouter
|
adminUserSettings.submit=Ajouter
|
||||||
|
|
||||||
@@ -158,7 +167,7 @@ home.searchBar=Rechercher des fonctionnalités...
|
|||||||
|
|
||||||
|
|
||||||
home.viewPdf.title=Visionner le PDF
|
home.viewPdf.title=Visionner le PDF
|
||||||
home.viewPdf.desc=Visionner, annoter, ajouter du texte ou des images
|
home.viewPdf.desc=Visionner, annoter, ajouter du texte ou des images.
|
||||||
viewPdf.tags=visualiser,lire,annoter,texte,image
|
viewPdf.tags=visualiser,lire,annoter,texte,image
|
||||||
|
|
||||||
home.multiTool.title=Outil multifonction PDF
|
home.multiTool.title=Outil multifonction PDF
|
||||||
@@ -167,7 +176,7 @@ multiTool.tags=outil multifonction,opération multifonction,interface utilisateu
|
|||||||
|
|
||||||
home.merge.title=Fusionner
|
home.merge.title=Fusionner
|
||||||
home.merge.desc=Fusionnez facilement plusieurs PDF en un seul.
|
home.merge.desc=Fusionnez facilement plusieurs PDF en un seul.
|
||||||
merge.tags=fusionner,opérations sur les pages,backeend,server side,merge
|
merge.tags=fusionner,opérations sur les pages,backend,server side,merge
|
||||||
|
|
||||||
home.split.title=Diviser
|
home.split.title=Diviser
|
||||||
home.split.desc=Divisez un PDF en plusieurs documents.
|
home.split.desc=Divisez un PDF en plusieurs documents.
|
||||||
@@ -283,9 +292,9 @@ home.removeBlanks.title=Supprimer les pages vierges
|
|||||||
home.removeBlanks.desc=Détectez et supprimez les pages vierges d\u2019un PDF.
|
home.removeBlanks.desc=Détectez et supprimez les pages vierges d\u2019un PDF.
|
||||||
removeBlanks.tags=pages vierges,supprimer,nettoyer,cleanup,streamline,non-content,organize
|
removeBlanks.tags=pages vierges,supprimer,nettoyer,cleanup,streamline,non-content,organize
|
||||||
|
|
||||||
home.removeAnnotations.title=Remove Annotations
|
home.removeAnnotations.title=Supprimer les annotations
|
||||||
home.removeAnnotations.desc=Removes all comments/annotations from a PDF
|
home.removeAnnotations.desc=Supprimer tous les commentaires/annotations d\u2019un PDF.
|
||||||
removeAnnotations.tags=comments,highlight,notes,markup,remove
|
removeAnnotations.tags=commentaires,supprimer,annotations,highlight,notes,markup,remove
|
||||||
|
|
||||||
home.compare.title=Comparer
|
home.compare.title=Comparer
|
||||||
home.compare.desc=Comparez et visualisez les différences entre deux PDF.
|
home.compare.desc=Comparez et visualisez les différences entre deux PDF.
|
||||||
@@ -369,7 +378,7 @@ home.autoRedact.desc=Caviardez automatiquement les informations sensibles d\u201
|
|||||||
autoRedact.tags=caviarder,redact,auto
|
autoRedact.tags=caviarder,redact,auto
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF en CSV
|
home.tableExtraxt.title=PDF en CSV
|
||||||
home.tableExtraxt.desc=Extrait les tableaux d\u2019un PDF et les transforme en CSV
|
home.tableExtraxt.desc=Extrait les tableaux d\u2019un PDF et les transforme en CSV.
|
||||||
tableExtraxt.tags=CSV,Table Extraction,extract,convert
|
tableExtraxt.tags=CSV,Table Extraction,extract,convert
|
||||||
|
|
||||||
|
|
||||||
@@ -379,16 +388,25 @@ autoSizeSplitPDF.tags=pdf,split,document,organization
|
|||||||
|
|
||||||
|
|
||||||
home.overlay-pdfs.title=Incrustation de PDF
|
home.overlay-pdfs.title=Incrustation de PDF
|
||||||
home.overlay-pdfs.desc=Incrustation d\u2019un PDF sur un autre PDF
|
home.overlay-pdfs.desc=Incrustation d\u2019un PDF sur un autre PDF.
|
||||||
overlay-pdfs.tags=Overlay
|
overlay-pdfs.tags=Overlay,incrustation
|
||||||
|
|
||||||
home.split-by-sections.title=Split PDF by Sections
|
home.split-by-sections.title=Séparer un PDF en sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Diviser chaque page d\u2019un PDF en sections horizontales/verticales plus petites.
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Sections,Diviser,Section Split, Divide, Customize
|
||||||
|
|
||||||
home.AddStampRequest.title=Add Stamp to PDF
|
home.AddStampRequest.title=Ajouter un tampon sur un PDF
|
||||||
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
home.AddStampRequest.desc=Ajouter un texte ou l\u2019image d\u2019un tampon à un emplacement défini.
|
||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Tampon,Ajouter,Stamp,Add image,center image,Watermark,PDF,Embed,Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Connexion
|
login.title=Connexion
|
||||||
|
login.header=Connexion
|
||||||
login.signin=Connexion
|
login.signin=Connexion
|
||||||
login.rememberme=Se souvenir de moi
|
login.rememberme=Se souvenir de moi
|
||||||
login.invalid=Nom d\u2019utilisateur ou mot de passe invalide.
|
login.invalid=Nom d\u2019utilisateur ou mot de passe invalide.
|
||||||
@@ -466,37 +485,37 @@ HTMLToPDF.header=HTML en PDF
|
|||||||
HTMLToPDF.help=Accepte les fichiers HTML et les ZIP contenant du HTML, du CSS, des images, etc. (requis).
|
HTMLToPDF.help=Accepte les fichiers HTML et les ZIP contenant du HTML, du CSS, des images, etc. (requis).
|
||||||
HTMLToPDF.submit=Convertir
|
HTMLToPDF.submit=Convertir
|
||||||
HTMLToPDF.credit=Utilise WeasyPrint.
|
HTMLToPDF.credit=Utilise WeasyPrint.
|
||||||
HTMLToPDF.zoom=Zoom level for displaying the website.
|
HTMLToPDF.zoom=Niveau de zoom pour l\u2019affichage du site web.
|
||||||
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
HTMLToPDF.pageWidth=Largeur de la page en centimètres. (Vide par défaut)
|
||||||
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
HTMLToPDF.pageHeight=Hauteur de la page en centimètres. (Vide par défaut)
|
||||||
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
HTMLToPDF.marginTop=Marge supérieure de la page en millimètres. (Vide par défaut)
|
||||||
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
HTMLToPDF.marginBottom=Marge inférieure de la page en millimètres. (Vide par défaut)
|
||||||
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
HTMLToPDF.marginLeft=Marge gauche de la page en millimètres. (Vide par défaut)
|
||||||
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
HTMLToPDF.marginRight=Marge droite de la page en millimètres. (Vide par défaut)
|
||||||
HTMLToPDF.printBackground=Render the background of websites.
|
HTMLToPDF.printBackground=Restituer l\u2019image de fond des sites web.
|
||||||
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
HTMLToPDF.defaultHeader=Activer l\u2019entête par défaut (Nom et numéro de page)
|
||||||
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
HTMLToPDF.cssMediaType=Modifier le type de média CSS de la page.
|
||||||
HTMLToPDF.none=None
|
HTMLToPDF.none=Aucun
|
||||||
HTMLToPDF.print=Print
|
HTMLToPDF.print=Imprimer
|
||||||
HTMLToPDF.screen=Screen
|
HTMLToPDF.screen=Écran
|
||||||
|
|
||||||
|
|
||||||
#AddStampRequest
|
#AddStampRequest
|
||||||
AddStampRequest.header=Stamp PDF
|
AddStampRequest.header=Tampon PDF
|
||||||
AddStampRequest.title=Stamp PDF
|
AddStampRequest.title=Tampon PDF
|
||||||
AddStampRequest.stampType=Stamp Type
|
AddStampRequest.stampType=Type de tampon
|
||||||
AddStampRequest.stampText=Stamp Text
|
AddStampRequest.stampText=Tampon texte
|
||||||
AddStampRequest.stampImage=Stamp Image
|
AddStampRequest.stampImage=Tampon image
|
||||||
AddStampRequest.alphabet=Alphabet
|
AddStampRequest.alphabet=Alphabet
|
||||||
AddStampRequest.fontSize=Font/Image Size
|
AddStampRequest.fontSize=Taille de fonte/image
|
||||||
AddStampRequest.rotation=Rotation
|
AddStampRequest.rotation=Rotation
|
||||||
AddStampRequest.opacity=Opacity
|
AddStampRequest.opacity=Opacité
|
||||||
AddStampRequest.position=Position
|
AddStampRequest.position=Position
|
||||||
AddStampRequest.overrideX=Override X Coordinate
|
AddStampRequest.overrideX=Définir coordonnées X
|
||||||
AddStampRequest.overrideY=Override Y Coordinate
|
AddStampRequest.overrideY=Définir coordonnées Y
|
||||||
AddStampRequest.customMargin=Custom Margin
|
AddStampRequest.customMargin=Marge personnalisée
|
||||||
AddStampRequest.customColor=Custom Text Color
|
AddStampRequest.customColor=Couleur de texte personnalisée
|
||||||
AddStampRequest.submit=Submit
|
AddStampRequest.submit=Soumettre
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
@@ -585,11 +604,11 @@ scalePages.submit=Ajuster
|
|||||||
certSign.title=Signer avec un certificat
|
certSign.title=Signer avec un certificat
|
||||||
certSign.header=Signer avec un certificat (Travail en cours)
|
certSign.header=Signer avec un certificat (Travail en cours)
|
||||||
certSign.selectPDF=PDF à signer
|
certSign.selectPDF=PDF à signer
|
||||||
certSign.jksNote=Note: If your certificate type is not listed below, please convert it to a Java Keystore (.jks) file using the keytool command line tool. Then, choose the .jks file option below.
|
certSign.jksNote=Note: Si votre type de certificat n\u2019est pas listé ci\u002Ddessous, merci de le convertir en fichier Java Keystore (.jks) en utilisant l\u2019outil en ligne de commande keytool. Puis choisissez l\u2019option Fichier .jks ci\u002Ddessous.
|
||||||
certSign.selectKey=Fichier de clé privée (format PKCS#8, peut être .pem ou .der)
|
certSign.selectKey=Fichier de clé privée (format PKCS#8, peut être .pem ou .der)
|
||||||
certSign.selectCert=Fichier de certificat (format X.509, peut être .pem ou .der)
|
certSign.selectCert=Fichier de certificat (format X.509, peut être .pem ou .der)
|
||||||
certSign.selectP12=Fichier keystore de clés PKCS#12 (.p12 ou .pfx) (facultatif, s\u2019il n\u2019est fourni, il doit contenir votre clé privée et votre certificat)
|
certSign.selectP12=Fichier keystore de clés PKCS#12 (.p12 ou .pfx) (facultatif, s\u2019il n\u2019est fourni, il doit contenir votre clé privée et votre certificat)
|
||||||
certSign.selectJKS=Select Your Java Keystore File (.jks or .keystore):
|
certSign.selectJKS=Sélectionner votre fichier Java Keystore File (.jks or .keystore):
|
||||||
certSign.certType=Type de certificat
|
certSign.certType=Type de certificat
|
||||||
certSign.password=Mot de passe keystore ou clé privée le cas échéant
|
certSign.password=Mot de passe keystore ou clé privée le cas échéant
|
||||||
certSign.showSig=Afficher la signature
|
certSign.showSig=Afficher la signature
|
||||||
@@ -610,9 +629,9 @@ removeBlanks.submit=Supprimer les pages vierges
|
|||||||
|
|
||||||
|
|
||||||
#removeAnnotations
|
#removeAnnotations
|
||||||
removeAnnotations.title=Remove Annotations
|
removeAnnotations.title=Supprimer les annotations
|
||||||
removeAnnotations.header=Remove Annotations
|
removeAnnotations.header=Supprimer les annotations
|
||||||
removeAnnotations.submit=Remove
|
removeAnnotations.submit=Supprimer
|
||||||
|
|
||||||
|
|
||||||
#compare
|
#compare
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Document 1
|
|||||||
compare.document.2=Document 2
|
compare.document.2=Document 2
|
||||||
compare.submit=Comparer
|
compare.submit=Comparer
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Signer
|
sign.title=Signer
|
||||||
@@ -694,14 +725,14 @@ fileToPDF.submit=Convertir
|
|||||||
|
|
||||||
|
|
||||||
#compress
|
#compress
|
||||||
compress.title=Compresser
|
compress.title=Compresser un PDF
|
||||||
compress.header=Compresser
|
compress.header=Compresser un PDF (lorsque c\u2019est possible!)
|
||||||
compress.credit=Ce service utilise Ghostscript pour la compression et l\u2019optimisation des PDF.
|
compress.credit=Ce service utilise Ghostscript pour la compression et l\u2019optimisation des PDF.
|
||||||
compress.selectText.1=Mode manuel \u2013 de 1 à 4
|
compress.selectText.1=Mode manuel \u2013 de 1 à 4
|
||||||
compress.selectText.2=Niveau d\u2019optimisation
|
compress.selectText.2=Niveau d\u2019optimisation
|
||||||
compress.selectText.3=4 (terrible pour les images textuelles)
|
compress.selectText.3=4 (terrible pour les images textuelles)
|
||||||
compress.selectText.4=Mode automatique \u2013 ajuste automatiquement la qualité pour obtenir le PDF à la taille exacte
|
compress.selectText.4=Mode automatique \u2013 ajuste automatiquement la qualité pour obtenir le PDF à la taille exacte
|
||||||
compress.selectText.5=Taille PDF attendue (par exemple, 25\u202fMo, 10,8\u202fMo, 25\u202fKo)
|
compress.selectText.5=Taille PDF attendue (par exemple, 25\u202fMB, 10,8\u202fMB, 25\u202fKB)
|
||||||
compress.submit=Compresser
|
compress.submit=Compresser
|
||||||
|
|
||||||
|
|
||||||
@@ -732,8 +763,8 @@ multiTool.title=Outil multifonction PDF
|
|||||||
multiTool.header=Outil multifonction PDF
|
multiTool.header=Outil multifonction PDF
|
||||||
|
|
||||||
#view pdf
|
#view pdf
|
||||||
viewPdf.title=View PDF
|
viewPdf.title=Visualiser un PDF
|
||||||
viewPdf.header=View PDF
|
viewPdf.header=Visualiser un PDF
|
||||||
|
|
||||||
#pageRemover
|
#pageRemover
|
||||||
pageRemover.title=Supprimer des pages
|
pageRemover.title=Supprimer des pages
|
||||||
@@ -788,7 +819,7 @@ pdfToImage.multi=Plusieurs images
|
|||||||
pdfToImage.colorType=Type d\u2019impression
|
pdfToImage.colorType=Type d\u2019impression
|
||||||
pdfToImage.color=Couleur
|
pdfToImage.color=Couleur
|
||||||
pdfToImage.grey=Niveaux de gris
|
pdfToImage.grey=Niveaux de gris
|
||||||
pdfToImage.blackwhite=Noir et blanc (peut engendre une perde de données\u00a0!)
|
pdfToImage.blackwhite=Noir et blanc (peut engendrer une perte de données\u00a0!)
|
||||||
pdfToImage.submit=Convertir
|
pdfToImage.submit=Convertir
|
||||||
|
|
||||||
|
|
||||||
@@ -867,7 +898,7 @@ changeMetadata.keywords=Mots clés
|
|||||||
changeMetadata.modDate=Date de modification (yyyy/MM/dd HH:mm:ss)
|
changeMetadata.modDate=Date de modification (yyyy/MM/dd HH:mm:ss)
|
||||||
changeMetadata.producer=Producteur
|
changeMetadata.producer=Producteur
|
||||||
changeMetadata.subject=Sujet
|
changeMetadata.subject=Sujet
|
||||||
changeMetadata.trapped=Défoncé (technique d’impression)
|
changeMetadata.trapped=Recouvrement (technique d’impression)
|
||||||
changeMetadata.selectText.4=Autres métadonnées
|
changeMetadata.selectText.4=Autres métadonnées
|
||||||
changeMetadata.selectText.5=Ajouter une entrée de métadonnées personnalisée
|
changeMetadata.selectText.5=Ajouter une entrée de métadonnées personnalisée
|
||||||
changeMetadata.submit=Modifier
|
changeMetadata.submit=Modifier
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choisir la page pour en extraire le tableau
|
|||||||
PDFToCSV.submit=Extrait
|
PDFToCSV.submit=Extrait
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Séparer le PDF par taille ou par nombre
|
||||||
split-by-size-or-count.header=Séparer le PDF par taille ou par nombre
|
split-by-size-or-count.header=Séparer le PDF par taille ou par nombre
|
||||||
split-by-size-or-count.type.label=Sélectionner le type de division
|
split-by-size-or-count.type.label=Sélectionner le type de division
|
||||||
split-by-size-or-count.type.size=Par taille
|
split-by-size-or-count.type.size=Par taille
|
||||||
@@ -935,19 +967,19 @@ split-by-size-or-count.submit=Séparer
|
|||||||
|
|
||||||
|
|
||||||
#overlay-pdfs
|
#overlay-pdfs
|
||||||
overlay-pdfs.header=Overlay PDF Files
|
overlay-pdfs.header=Incrustation de PDF
|
||||||
overlay-pdfs.baseFile.label=Sélectionner le fichier PDF de base
|
overlay-pdfs.baseFile.label=Sélectionner le fichier PDF de base
|
||||||
overlay-pdfs.overlayFiles.label=Sélectionner les fichiers PDF à superposer
|
overlay-pdfs.overlayFiles.label=Sélectionner les fichiers PDF à superposer
|
||||||
overlay-pdfs.mode.label=Select Overlay Mode
|
overlay-pdfs.mode.label=Sélectionner le mode d\u2019incrustation
|
||||||
overlay-pdfs.mode.sequential=Sequential Overlay
|
overlay-pdfs.mode.sequential=Superposition séquentielle
|
||||||
overlay-pdfs.mode.interleaved=Interleaved Overlay
|
overlay-pdfs.mode.interleaved=Superposition entrelacée
|
||||||
overlay-pdfs.mode.fixedRepeat=Superposition à répétition fixe
|
overlay-pdfs.mode.fixedRepeat=Superposition à répétition fixe
|
||||||
overlay-pdfs.counts.label=Nombre de superpositions (pour le mode de répétition fixe)
|
overlay-pdfs.counts.label=Nombre de superpositions (pour le mode de répétition fixe)
|
||||||
overlay-pdfs.counts.placeholder=Enter comma-separated counts (e.g., 2,3,1)
|
overlay-pdfs.counts.placeholder=Compteurs (séparés par des virgules, exemple : 2,3,1)
|
||||||
overlay-pdfs.position.label=Select Overlay Position
|
overlay-pdfs.position.label=Définir la position de l\u2019incrustation
|
||||||
overlay-pdfs.position.foreground=Premier plan
|
overlay-pdfs.position.foreground=Premier plan
|
||||||
overlay-pdfs.position.background=Arrière-plan
|
overlay-pdfs.position.background=Arrière-plan
|
||||||
overlay-pdfs.submit=Submit
|
overlay-pdfs.submit=Soumettre
|
||||||
|
|
||||||
|
|
||||||
#split-by-sections
|
#split-by-sections
|
||||||
@@ -958,14 +990,14 @@ split-by-sections.vertical.label=Divisions verticales
|
|||||||
split-by-sections.horizontal.placeholder=Saisir le nombre de divisions horizontales
|
split-by-sections.horizontal.placeholder=Saisir le nombre de divisions horizontales
|
||||||
split-by-sections.vertical.placeholder=Entrer le nombre de divisions verticales
|
split-by-sections.vertical.placeholder=Entrer le nombre de divisions verticales
|
||||||
split-by-sections.submit=Diviser le PDF
|
split-by-sections.submit=Diviser le PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licences
|
||||||
licenses.title=3rd Party Licenses
|
licenses.title=Licences tierces
|
||||||
licenses.header=3rd Party Licenses
|
licenses.header=Licences tierces
|
||||||
licenses.module=Module
|
licenses.module=Module
|
||||||
licenses.version=Version
|
licenses.version=Version
|
||||||
licenses.license=License
|
licenses.license=Licence
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=छवियों का चयन करें
|
|||||||
genericSubmit=प्रस्तुत करें
|
genericSubmit=प्रस्तुत करें
|
||||||
processTimeWarning=चेतावनी: यह प्रक्रिया फ़ाइल के आकार पर निर्भर करती है और यह से एक मिनट तक लग सकती है
|
processTimeWarning=चेतावनी: यह प्रक्रिया फ़ाइल के आकार पर निर्भर करती है और यह से एक मिनट तक लग सकती है
|
||||||
pageOrderPrompt=कस्टम पेज क्रम (पेज नंबरों या 2n+1 जैसे कार्यों की एक कॉमा से अलग-अलग सूची दर्ज करें):
|
pageOrderPrompt=कस्टम पेज क्रम (पेज नंबरों या 2n+1 जैसे कार्यों की एक कॉमा से अलग-अलग सूची दर्ज करें):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=जाएँ
|
goToPage=जाएँ
|
||||||
true=सही
|
true=सही
|
||||||
false=गलत
|
false=गलत
|
||||||
unknown=अज्ञात
|
unknown=अज्ञात
|
||||||
save=सहेजें
|
save=सहेजें
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=बंद करें
|
close=बंद करें
|
||||||
filesSelected=फ़ाइलें चयनित हैं
|
filesSelected=फ़ाइलें चयनित हैं
|
||||||
noFavourites=कोई पसंदीदा जोड़ा नहीं गया है
|
noFavourites=कोई पसंदीदा जोड़ा नहीं गया है
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=बोर हो रहे हैं?
|
bored=बोर हो रहे हैं?
|
||||||
alphabet=वर्णमाला
|
alphabet=वर्णमाला
|
||||||
downloadPdf=पीडीएफ़ डाउनलोड करें
|
downloadPdf=पीडीएफ़ डाउनलोड करें
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=उपयोगकर्ता प्रमाणित
|
|||||||
userNotFoundMessage=उपयोगकर्ता नहीं मिला।
|
userNotFoundMessage=उपयोगकर्ता नहीं मिला।
|
||||||
incorrectPasswordMessage=वर्तमान पासवर्ड गलत है।
|
incorrectPasswordMessage=वर्तमान पासवर्ड गलत है।
|
||||||
usernameExistsMessage=नया उपयोगकर्ता नाम पहले से मौजूद है।
|
usernameExistsMessage=नया उपयोगकर्ता नाम पहले से मौजूद है।
|
||||||
|
invalidUsernameMessage=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=खाता सेटिंग्स
|
|||||||
|
|
||||||
changeCreds.title=क्रेडेंशियल बदलें
|
changeCreds.title=क्रेडेंशियल बदलें
|
||||||
changeCreds.header=अपना खाता विवरण अपडेट करें
|
changeCreds.header=अपना खाता विवरण अपडेट करें
|
||||||
changeCreds.changeUserAndPassword=आप डिफ़ॉल्ट लॉगिन क्रेडेंशियल का उपयोग कर रहे हैं। कृपया एक नया पासवर्ड दर्ज करें (और यदि चाहें तो उपयोगकर्ता नाम)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=नया उपयोगकर्ता नाम
|
changeCreds.newUsername=नया उपयोगकर्ता नाम
|
||||||
changeCreds.oldPassword=वर्तमान पासवर्ड
|
changeCreds.oldPassword=वर्तमान पासवर्ड
|
||||||
changeCreds.newPassword=नया पासवर्ड
|
changeCreds.newPassword=नया पासवर्ड
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=व्यवस्थापक उपयोगकर्
|
|||||||
adminUserSettings.admin=व्यवस्थापक
|
adminUserSettings.admin=व्यवस्थापक
|
||||||
adminUserSettings.user=उपयोगकर्ता
|
adminUserSettings.user=उपयोगकर्ता
|
||||||
adminUserSettings.addUser=नया उपयोगकर्ता जोड़ें
|
adminUserSettings.addUser=नया उपयोगकर्ता जोड़ें
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=रोल्स
|
adminUserSettings.roles=रोल्स
|
||||||
adminUserSettings.role=रोल
|
adminUserSettings.role=रोल
|
||||||
adminUserSettings.actions=क्रियाएँ
|
adminUserSettings.actions=क्रियाएँ
|
||||||
adminUserSettings.apiUser=सीमित API उपयोगकर्ता
|
adminUserSettings.apiUser=सीमित API उपयोगकर्ता
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=केवल वेब उपयोगकर्ता
|
adminUserSettings.webOnlyUser=केवल वेब उपयोगकर्ता
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=उपयोगकर्ता को लॉगिन पर उपयोगकर्ता नाम/पासवर्ड बदलने के लिए मजबूर करें
|
adminUserSettings.forceChange=उपयोगकर्ता को लॉगिन पर उपयोगकर्ता नाम/पासवर्ड बदलने के लिए मजबूर करें
|
||||||
adminUserSettings.submit=उपयोगकर्ता को सहेजें
|
adminUserSettings.submit=उपयोगकर्ता को सहेजें
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=साइन इन करें
|
login.title=साइन इन करें
|
||||||
|
login.header=साइन इन करें
|
||||||
login.signin=साइन इन करें
|
login.signin=साइन इन करें
|
||||||
login.rememberme=मुझे याद रखें
|
login.rememberme=मुझे याद रखें
|
||||||
login.invalid=अमान्य उपयोगकर्ता नाम या पासवर्ड।
|
login.invalid=अमान्य उपयोगकर्ता नाम या पासवर्ड।
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=दस्तावेज़ 1
|
|||||||
compare.document.2=दस्तावेज़ 2
|
compare.document.2=दस्तावेज़ 2
|
||||||
compare.submit=तुलना करें
|
compare.submit=तुलना करें
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=हस्ताक्षर
|
sign.title=हस्ताक्षर
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=टेबल निकालने के लिए पृष्
|
|||||||
PDFToCSV.submit=निकालें
|
PDFToCSV.submit=निकालें
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=आकार या गणना द्वारा PDF को विभाजित करें
|
||||||
split-by-size-or-count.header=आकार या गणना द्वारा PDF को विभाजित करें
|
split-by-size-or-count.header=आकार या गणना द्वारा PDF को विभाजित करें
|
||||||
split-by-size-or-count.type.label=स्प्लिट प्रकार चुनें
|
split-by-size-or-count.type.label=स्प्लिट प्रकार चुनें
|
||||||
split-by-size-or-count.type.size=आकार द्वारा
|
split-by-size-or-count.type.size=आकार द्वारा
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=लंबवत विभाजन
|
|||||||
split-by-sections.horizontal.placeholder=क्षैतिज विभाजन की संख्या दर्ज करें
|
split-by-sections.horizontal.placeholder=क्षैतिज विभाजन की संख्या दर्ज करें
|
||||||
split-by-sections.vertical.placeholder=लंबवत विभाजन की संख्या दर्ज करें
|
split-by-sections.vertical.placeholder=लंबवत विभाजन की संख्या दर्ज करें
|
||||||
split-by-sections.submit=PDF को विभाजित करें
|
split-by-sections.submit=PDF को विभाजित करें
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Válasszon képeket
|
|||||||
genericSubmit=Beküldés
|
genericSubmit=Beküldés
|
||||||
processTimeWarning=Figyelmeztetés: Ez a folyamat akár egy percig is eltarthat a fájlmérettől függően
|
processTimeWarning=Figyelmeztetés: Ez a folyamat akár egy percig is eltarthat a fájlmérettől függően
|
||||||
pageOrderPrompt=Egyedi oldalsorrend (Adjon meg vesszővel elválasztott oldalszámokat vagy függvényeket, például 2n+1):
|
pageOrderPrompt=Egyedi oldalsorrend (Adjon meg vesszővel elválasztott oldalszámokat vagy függvényeket, például 2n+1):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Ugrás
|
goToPage=Ugrás
|
||||||
true=Igaz
|
true=Igaz
|
||||||
false=Hamis
|
false=Hamis
|
||||||
unknown=Ismeretlen
|
unknown=Ismeretlen
|
||||||
save=Mentés
|
save=Mentés
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Bezárás
|
close=Bezárás
|
||||||
filesSelected=kiválasztott fájlok
|
filesSelected=kiválasztott fájlok
|
||||||
noFavourites=Nincs hozzáadva kedvenc
|
noFavourites=Nincs hozzáadva kedvenc
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Unatkozol?
|
bored=Unatkozol?
|
||||||
alphabet=Ábécé
|
alphabet=Ábécé
|
||||||
downloadPdf=PDF letöltése
|
downloadPdf=PDF letöltése
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=Felhasználó nincs hitelesítve.
|
|||||||
userNotFoundMessage=A felhasználó nem található.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Fiókbeállítások
|
|||||||
|
|
||||||
changeCreds.title=Hitelesítés megváltoztatása
|
changeCreds.title=Hitelesítés megváltoztatása
|
||||||
changeCreds.header=Frissítse fiókadatait
|
changeCreds.header=Frissítse fiókadatait
|
||||||
changeCreds.changeUserAndPassword=Alapértelmezett bejelentkezési adatokat használ. Adjon meg egy új jelszót (és felhasználónevet, ha szeretné)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=Új felhasználónév
|
changeCreds.newUsername=Új felhasználónév
|
||||||
changeCreds.oldPassword=Jelenlegi jelszó
|
changeCreds.oldPassword=Jelenlegi jelszó
|
||||||
changeCreds.newPassword=Új jelszó
|
changeCreds.newPassword=Új jelszó
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=Adminisztrátori Felhasználói Vezérlési Beállítá
|
|||||||
adminUserSettings.admin=Adminisztrátor
|
adminUserSettings.admin=Adminisztrátor
|
||||||
adminUserSettings.user=Felhasználó
|
adminUserSettings.user=Felhasználó
|
||||||
adminUserSettings.addUser=Új felhasználó hozzáadása
|
adminUserSettings.addUser=Új felhasználó hozzáadása
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Szerepek
|
adminUserSettings.roles=Szerepek
|
||||||
adminUserSettings.role=Szerep
|
adminUserSettings.role=Szerep
|
||||||
adminUserSettings.actions=Műveletek
|
adminUserSettings.actions=Műveletek
|
||||||
adminUserSettings.apiUser=Korlátozott API-felhasználó
|
adminUserSettings.apiUser=Korlátozott API-felhasználó
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Csak webes felhasználó
|
adminUserSettings.webOnlyUser=Csak webes felhasználó
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=Kényszerítse a felhasználót a felhasználónév/jelszó megváltoztatására bejelentkezéskor
|
adminUserSettings.forceChange=Kényszerítse a felhasználót a felhasználónév/jelszó megváltoztatására bejelentkezéskor
|
||||||
adminUserSettings.submit=Felhasználó mentése
|
adminUserSettings.submit=Felhasználó mentése
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Bejelentkezés
|
login.title=Bejelentkezés
|
||||||
|
login.header=Bejelentkezés
|
||||||
login.signin=Bejelentkezés
|
login.signin=Bejelentkezés
|
||||||
login.rememberme=Emlékezz rám
|
login.rememberme=Emlékezz rám
|
||||||
login.invalid=Érvénytelen felhasználónév vagy jelszó!
|
login.invalid=Érvénytelen felhasználónév vagy jelszó!
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Dokumentum 1
|
|||||||
compare.document.2=Dokumentum 2
|
compare.document.2=Dokumentum 2
|
||||||
compare.submit=Összehasonlítás
|
compare.submit=Összehasonlítás
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Aláírás
|
sign.title=Aláírás
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Válassza ki az oldalt a táblázat kinyeréséhez
|
|||||||
PDFToCSV.submit=Kinyerés
|
PDFToCSV.submit=Kinyerés
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=PDF felosztása méret vagy oldalszám alapján
|
||||||
split-by-size-or-count.header=PDF felosztása méret vagy oldalszám alapján
|
split-by-size-or-count.header=PDF felosztása méret vagy oldalszám alapján
|
||||||
split-by-size-or-count.type.label=Válassza ki a felosztás típusát
|
split-by-size-or-count.type.label=Válassza ki a felosztás típusát
|
||||||
split-by-size-or-count.type.size=Méret alapján
|
split-by-size-or-count.type.size=Méret alapján
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vízszintes szakaszok
|
|||||||
split-by-sections.horizontal.placeholder=Adja meg a vízszintes szakaszok számát
|
split-by-sections.horizontal.placeholder=Adja meg a vízszintes szakaszok számát
|
||||||
split-by-sections.vertical.placeholder=Adja meg a függőleges szakaszok számát
|
split-by-sections.vertical.placeholder=Adja meg a függőleges szakaszok számát
|
||||||
split-by-sections.submit=Felosztás
|
split-by-sections.submit=Felosztás
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl=right to left)
|
# the direction that the language is written (ltr=left to right, rtl=right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Pilih Gambar
|
|||||||
genericSubmit=Kirim
|
genericSubmit=Kirim
|
||||||
processTimeWarning=Peringatan: Proses ini dapat memakan waktu hingga satu menit, tergantung pada ukuran berkas
|
processTimeWarning=Peringatan: Proses ini dapat memakan waktu hingga satu menit, tergantung pada ukuran berkas
|
||||||
pageOrderPrompt=Urutan Halaman Khusus (Masukkan daftar nomor halaman yang dipisahkan dengan koma atau Fungsi seperti 2n + 1) :
|
pageOrderPrompt=Urutan Halaman Khusus (Masukkan daftar nomor halaman yang dipisahkan dengan koma atau Fungsi seperti 2n + 1) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Ke
|
goToPage=Ke
|
||||||
true=Benar
|
true=Benar
|
||||||
false=Salah
|
false=Salah
|
||||||
unknown=Tidak diketahui
|
unknown=Tidak diketahui
|
||||||
save=Simpan
|
save=Simpan
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Tutup
|
close=Tutup
|
||||||
filesSelected=berkas dipilih
|
filesSelected=berkas dipilih
|
||||||
noFavourites=Tidak ada favorit yang ditambahkan
|
noFavourites=Tidak ada favorit yang ditambahkan
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Bosan Menunggu?
|
bored=Bosan Menunggu?
|
||||||
alphabet=Abjad
|
alphabet=Abjad
|
||||||
downloadPdf=Unduh PDF
|
downloadPdf=Unduh PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=Pengguna tidak ter-autentikasi.
|
|||||||
userNotFoundMessage=Pengguna tidak ditemukan.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Pengaturan Akun
|
|||||||
|
|
||||||
changeCreds.title=Ubah Kredensial
|
changeCreds.title=Ubah Kredensial
|
||||||
changeCreds.header=Perbarui Detail Akun Anda
|
changeCreds.header=Perbarui Detail Akun Anda
|
||||||
changeCreds.changeUserAndPassword=Anda menggunakan kredensial masuk default. Masukkan kata sandi baru (dan nama pengguna jika diinginkan)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=Nama Pengguna Baru
|
changeCreds.newUsername=Nama Pengguna Baru
|
||||||
changeCreds.oldPassword=Kata Sandi Saat Ini
|
changeCreds.oldPassword=Kata Sandi Saat Ini
|
||||||
changeCreds.newPassword=Kata Sandi Baru
|
changeCreds.newPassword=Kata Sandi Baru
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=Pengaturan Kontrol Admin
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=Pengguna
|
adminUserSettings.user=Pengguna
|
||||||
adminUserSettings.addUser=Tambahkan Pengguna Baru
|
adminUserSettings.addUser=Tambahkan Pengguna Baru
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Peran
|
adminUserSettings.roles=Peran
|
||||||
adminUserSettings.role=Peran
|
adminUserSettings.role=Peran
|
||||||
adminUserSettings.actions=Tindakan
|
adminUserSettings.actions=Tindakan
|
||||||
adminUserSettings.apiUser=Pengguna API Terbatas
|
adminUserSettings.apiUser=Pengguna API Terbatas
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Pengguna Khusus Web
|
adminUserSettings.webOnlyUser=Pengguna Khusus Web
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=Memaksa pengguna untuk mengubah nama pengguna/kata sandi saat masuk
|
adminUserSettings.forceChange=Memaksa pengguna untuk mengubah nama pengguna/kata sandi saat masuk
|
||||||
adminUserSettings.submit=Simpan Pengguna
|
adminUserSettings.submit=Simpan Pengguna
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Masuk
|
login.title=Masuk
|
||||||
|
login.header=Masuk
|
||||||
login.signin=Masuk
|
login.signin=Masuk
|
||||||
login.rememberme=Ingat saya
|
login.rememberme=Ingat saya
|
||||||
login.invalid=Nama pengguna atau kata sandi tidak valid.
|
login.invalid=Nama pengguna atau kata sandi tidak valid.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Dokumen 1
|
|||||||
compare.document.2=Dokumen 2
|
compare.document.2=Dokumen 2
|
||||||
compare.submit=Bandingkan
|
compare.submit=Bandingkan
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Tanda
|
sign.title=Tanda
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Pilih halaman untuk mengambil tabel
|
|||||||
PDFToCSV.submit=Ektraksi
|
PDFToCSV.submit=Ektraksi
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Pisahkan PDF berdasarkan ukuran atau jumlah
|
||||||
split-by-size-or-count.header=Pisahkan PDF berdasarkan ukuran atau jumlah
|
split-by-size-or-count.header=Pisahkan PDF berdasarkan ukuran atau jumlah
|
||||||
split-by-size-or-count.type.label=Pilih Tipe Split
|
split-by-size-or-count.type.label=Pilih Tipe Split
|
||||||
split-by-size-or-count.type.size=Berdasarkan Ukuran
|
split-by-size-or-count.type.size=Berdasarkan Ukuran
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Pembagian Vertikal
|
|||||||
split-by-sections.horizontal.placeholder=Input angka untuk pembagian horizontal
|
split-by-sections.horizontal.placeholder=Input angka untuk pembagian horizontal
|
||||||
split-by-sections.vertical.placeholder=Input angka untuk pembagian vertikal
|
split-by-sections.vertical.placeholder=Input angka untuk pembagian vertikal
|
||||||
split-by-sections.submit=Pisahkan PDF
|
split-by-sections.submit=Pisahkan PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Scegli immagine/i
|
|||||||
genericSubmit=Invia
|
genericSubmit=Invia
|
||||||
processTimeWarning=Nota: Questo processo potrebbe richiedere fino a un minuto in base alla dimensione dei file
|
processTimeWarning=Nota: Questo processo potrebbe richiedere fino a un minuto in base alla dimensione dei file
|
||||||
pageOrderPrompt=Ordine delle pagine (inserisci una lista di numeri separati da virgola):
|
pageOrderPrompt=Ordine delle pagine (inserisci una lista di numeri separati da virgola):
|
||||||
|
pageSelectionPrompt=Selezione pagina personalizzata (inserisci un elenco separato da virgole di numeri di pagina 1,5,6 o funzioni come 2n+1) :
|
||||||
goToPage=Vai
|
goToPage=Vai
|
||||||
true=Vero
|
true=Vero
|
||||||
false=Falso
|
false=Falso
|
||||||
unknown=Sconosciuto
|
unknown=Sconosciuto
|
||||||
save=Salva
|
save=Salva
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Chiudi
|
close=Chiudi
|
||||||
filesSelected=file selezionati
|
filesSelected=file selezionati
|
||||||
noFavourites=Nessun preferito
|
noFavourites=Nessun preferito
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Stanco di aspettare?
|
bored=Stanco di aspettare?
|
||||||
alphabet=Alfabeto
|
alphabet=Alfabeto
|
||||||
downloadPdf=Scarica PDF
|
downloadPdf=Scarica PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=Utente non autenticato.
|
|||||||
userNotFoundMessage=Utente non trovato.
|
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=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Impossibile eliminare l'utente attualmente connesso.
|
||||||
|
deleteUsernameExistsMessage=Il nome utente non esiste e non può essere eliminato.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Caricamento personalizzato
|
pipeline.uploadButton=Caricamento personalizzato
|
||||||
pipeline.configureButton=Configura
|
pipeline.configureButton=Configura
|
||||||
pipeline.defaultOption=Personalizzato
|
pipeline.defaultOption=Personalizzato
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Impostazioni Account
|
|||||||
|
|
||||||
changeCreds.title=Cambia credenziali
|
changeCreds.title=Cambia credenziali
|
||||||
changeCreds.header=Aggiorna i dettagli del tuo account
|
changeCreds.header=Aggiorna i dettagli del tuo account
|
||||||
changeCreds.changeUserAndPassword=Stai utilizzando le credenziali di accesso predefinite. Inserisci una nuova password (e un nome utente se lo desideri)
|
changeCreds.changePassword=Stai utilizzando le credenziali di accesso predefinite. Inserisci una nuova password
|
||||||
changeCreds.newUsername=Nuovo nome utente
|
changeCreds.newUsername=Nuovo nome utente
|
||||||
changeCreds.oldPassword=Password attuale
|
changeCreds.oldPassword=Password attuale
|
||||||
changeCreds.newPassword=Nuova Password
|
changeCreds.newPassword=Nuova Password
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=Impostazioni di controllo utente amministratore
|
|||||||
adminUserSettings.admin=Amministratore
|
adminUserSettings.admin=Amministratore
|
||||||
adminUserSettings.user=Utente
|
adminUserSettings.user=Utente
|
||||||
adminUserSettings.addUser=Aggiungi un nuovo Utente
|
adminUserSettings.addUser=Aggiungi un nuovo Utente
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Ruoli
|
adminUserSettings.roles=Ruoli
|
||||||
adminUserSettings.role=Ruolo
|
adminUserSettings.role=Ruolo
|
||||||
adminUserSettings.actions=Azioni
|
adminUserSettings.actions=Azioni
|
||||||
adminUserSettings.apiUser=Utente API limitato
|
adminUserSettings.apiUser=Utente API limitato
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Utente solo Web
|
adminUserSettings.webOnlyUser=Utente solo Web
|
||||||
adminUserSettings.demoUser=Utente demo (nessuna impostazione personalizzata)
|
adminUserSettings.demoUser=Utente demo (nessuna impostazione personalizzata)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=Forza l'utente a cambiare nome username/password all'accesso
|
adminUserSettings.forceChange=Forza l'utente a cambiare nome username/password all'accesso
|
||||||
adminUserSettings.submit=Salva utente
|
adminUserSettings.submit=Salva utente
|
||||||
|
|
||||||
@@ -366,7 +375,7 @@ showJS.tags=JS
|
|||||||
|
|
||||||
home.autoRedact.title=Redazione automatica
|
home.autoRedact.title=Redazione automatica
|
||||||
home.autoRedact.desc=Redige automaticamente (oscura) il testo in un PDF in base al testo immesso
|
home.autoRedact.desc=Redige automaticamente (oscura) il testo in un PDF in base al testo immesso
|
||||||
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
autoRedact.tags=Redigere,nascondere,oscurare,nero,pennarello,nascosto
|
||||||
|
|
||||||
home.tableExtraxt.title=Da PDF a CSV
|
home.tableExtraxt.title=Da PDF a CSV
|
||||||
home.tableExtraxt.desc=Estrae tabelle da un PDF convertendolo in CSV
|
home.tableExtraxt.desc=Estrae tabelle da un PDF convertendolo in CSV
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Aggiungi testo o aggiungi timbri immagine nelle posizi
|
|||||||
AddStampRequest.tags=Timbro, Aggiungi immagine, Centra immagine, Filigrana, PDF, Incorpora, Personalizza
|
AddStampRequest.tags=Timbro, Aggiungi immagine, Centra immagine, Filigrana, PDF, Incorpora, Personalizza
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF in libro
|
||||||
|
home.PDFToBook.desc=Converte PDF in formati libro/fumetto utilizzando Calibre
|
||||||
|
PDFToBook.tags=Libro,fumetto,calibre,conversione,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Libro in PDF
|
||||||
|
home.BookToPDF.desc=Converte i formati di libri/fumetti in PDF utilizzando Calibre
|
||||||
|
BookToPDF.tags=Libro,fumetto,calibre,conversione,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Timbro, Aggiungi immagine, Centra immagine, Filigrana, PDF,
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Accedi
|
login.title=Accedi
|
||||||
|
login.header=Accedi
|
||||||
login.signin=Accedi
|
login.signin=Accedi
|
||||||
login.rememberme=Ricordami
|
login.rememberme=Ricordami
|
||||||
login.invalid=Nome utente o password errati.
|
login.invalid=Nome utente o password errati.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Documento 1
|
|||||||
compare.document.2=Documento 2
|
compare.document.2=Documento 2
|
||||||
compare.submit=Compara
|
compare.submit=Compara
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Libri e fumetti in PDF
|
||||||
|
BookToPDF.header=Libro in PDF
|
||||||
|
BookToPDF.credit=Utilizza Calibre
|
||||||
|
BookToPDF.submit=Converti
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF in libro
|
||||||
|
PDFToBook.header=PDF in libro
|
||||||
|
PDFToBook.selectText.1=Formato
|
||||||
|
PDFToBook.credit=Utilizzo Calibre
|
||||||
|
PDFToBook.submit=Converti
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Firma
|
sign.title=Firma
|
||||||
@@ -867,7 +898,7 @@ changeMetadata.keywords=Parole chiave:
|
|||||||
changeMetadata.modDate=Data di modifica (yyyy/MM/dd HH:mm:ss):
|
changeMetadata.modDate=Data di modifica (yyyy/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=Produttore:
|
changeMetadata.producer=Produttore:
|
||||||
changeMetadata.subject=Oggetto:
|
changeMetadata.subject=Oggetto:
|
||||||
changeMetadata.trapped=Trapped:
|
changeMetadata.trapped=Recuperato:
|
||||||
changeMetadata.selectText.4=Altre proprietà:
|
changeMetadata.selectText.4=Altre proprietà:
|
||||||
changeMetadata.selectText.5=Aggiungi proprietà personalizzata:
|
changeMetadata.selectText.5=Aggiungi proprietà personalizzata:
|
||||||
changeMetadata.submit=Cambia Proprietà
|
changeMetadata.submit=Cambia Proprietà
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Scegli la pagina per estrarre la tabella
|
|||||||
PDFToCSV.submit=Estrai
|
PDFToCSV.submit=Estrai
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Dividi il PDF per dimensione o numero
|
||||||
split-by-size-or-count.header=Dividi il PDF per dimensione o numero
|
split-by-size-or-count.header=Dividi il PDF per dimensione o numero
|
||||||
split-by-size-or-count.type.label=Seleziona il tipo di divisione
|
split-by-size-or-count.type.label=Seleziona il tipo di divisione
|
||||||
split-by-size-or-count.type.size=Per dimensione
|
split-by-size-or-count.type.size=Per dimensione
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Divisioni verticali
|
|||||||
split-by-sections.horizontal.placeholder=Inserire il numero di divisioni orizzontali
|
split-by-sections.horizontal.placeholder=Inserire il numero di divisioni orizzontali
|
||||||
split-by-sections.vertical.placeholder=Inserire il numero di divisioni verticali
|
split-by-sections.vertical.placeholder=Inserire il numero di divisioni verticali
|
||||||
split-by-sections.submit=Dividi PDF
|
split-by-sections.submit=Dividi PDF
|
||||||
|
split-by-sections.merge=Unisci in un unico PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenze
|
licenses.nav=Licenze
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=画像を選択
|
|||||||
genericSubmit=送信
|
genericSubmit=送信
|
||||||
processTimeWarning=警告:この処理はファイルサイズによって1分程度かかることがあります
|
processTimeWarning=警告:この処理はファイルサイズによって1分程度かかることがあります
|
||||||
pageOrderPrompt=ページ順序 (ページ番号をカンマ区切り又は2n+1のような関数で入力):
|
pageOrderPrompt=ページ順序 (ページ番号をカンマ区切り又は2n+1のような関数で入力):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=移動
|
goToPage=移動
|
||||||
true=True
|
true=True
|
||||||
false=False
|
false=False
|
||||||
unknown=不明
|
unknown=不明
|
||||||
save=保存
|
save=保存
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=閉じる
|
close=閉じる
|
||||||
filesSelected=選択されたファイル
|
filesSelected=選択されたファイル
|
||||||
noFavourites=お気に入りはありません
|
noFavourites=お気に入りはありません
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=待ち時間が退屈
|
bored=待ち時間が退屈
|
||||||
alphabet=\u30A2\u30EB\u30D5\u30A1\u30D9\u30C3\u30C8
|
alphabet=\u30A2\u30EB\u30D5\u30A1\u30D9\u30C3\u30C8
|
||||||
downloadPdf=PDFをダウンロード
|
downloadPdf=PDFをダウンロード
|
||||||
@@ -51,6 +54,9 @@ notAuthenticatedMessage=ユーザーが認証されていません。
|
|||||||
userNotFoundMessage=ユーザーが見つかりません。
|
userNotFoundMessage=ユーザーが見つかりません。
|
||||||
incorrectPasswordMessage=現在のパスワードが正しくありません。
|
incorrectPasswordMessage=現在のパスワードが正しくありません。
|
||||||
usernameExistsMessage=新しいユーザー名はすでに存在します。
|
usernameExistsMessage=新しいユーザー名はすでに存在します。
|
||||||
|
invalidUsernameMessage=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=アカウント設定
|
|||||||
|
|
||||||
changeCreds.title=資格情報の変更
|
changeCreds.title=資格情報の変更
|
||||||
changeCreds.header=アカウントの詳細を更新する
|
changeCreds.header=アカウントの詳細を更新する
|
||||||
changeCreds.changeUserAndPassword=デフォルトのログイン認証情報を使用しています。新しいパスワード (必要に応じてユーザー名も) を入力してください
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=新しいユーザー名
|
changeCreds.newUsername=新しいユーザー名
|
||||||
changeCreds.oldPassword=現在のパスワード
|
changeCreds.oldPassword=現在のパスワード
|
||||||
changeCreds.newPassword=新しいパスワード
|
changeCreds.newPassword=新しいパスワード
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=管理者ユーザー制御設定
|
|||||||
adminUserSettings.admin=管理者
|
adminUserSettings.admin=管理者
|
||||||
adminUserSettings.user=ユーザー
|
adminUserSettings.user=ユーザー
|
||||||
adminUserSettings.addUser=新しいユーザを追加
|
adminUserSettings.addUser=新しいユーザを追加
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=役割
|
adminUserSettings.roles=役割
|
||||||
adminUserSettings.role=役割
|
adminUserSettings.role=役割
|
||||||
adminUserSettings.actions=アクション
|
adminUserSettings.actions=アクション
|
||||||
adminUserSettings.apiUser=限定されたAPIユーザー
|
adminUserSettings.apiUser=限定されたAPIユーザー
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=ウェブ専用ユーザー
|
adminUserSettings.webOnlyUser=ウェブ専用ユーザー
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=ログイン時にユーザー名/パスワードを強制的に変更する
|
adminUserSettings.forceChange=ログイン時にユーザー名/パスワードを強制的に変更する
|
||||||
adminUserSettings.submit=ユーザーの保存
|
adminUserSettings.submit=ユーザーの保存
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=サインイン
|
login.title=サインイン
|
||||||
|
login.header=サインイン
|
||||||
login.signin=サインイン
|
login.signin=サインイン
|
||||||
login.rememberme=サインイン状態を記憶する
|
login.rememberme=サインイン状態を記憶する
|
||||||
login.invalid=ユーザー名かパスワードが無効です。
|
login.invalid=ユーザー名かパスワードが無効です。
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=ドキュメント 1
|
|||||||
compare.document.2=ドキュメント 2
|
compare.document.2=ドキュメント 2
|
||||||
compare.submit=比較
|
compare.submit=比較
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=署名
|
sign.title=署名
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=表を抽出するページを選択
|
|||||||
PDFToCSV.submit=変換
|
PDFToCSV.submit=変換
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=サイズまたは数で分割
|
||||||
split-by-size-or-count.header=サイズまたは数で分割
|
split-by-size-or-count.header=サイズまたは数で分割
|
||||||
split-by-size-or-count.type.label=分割タイプの選択
|
split-by-size-or-count.type.label=分割タイプの選択
|
||||||
split-by-size-or-count.type.size=サイズ
|
split-by-size-or-count.type.size=サイズ
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=垂直方向
|
|||||||
split-by-sections.horizontal.placeholder=水平方向の分割数を選択
|
split-by-sections.horizontal.placeholder=水平方向の分割数を選択
|
||||||
split-by-sections.vertical.placeholder=垂直方向の分割数を選択
|
split-by-sections.vertical.placeholder=垂直方向の分割数を選択
|
||||||
split-by-sections.submit=分割
|
split-by-sections.submit=分割
|
||||||
|
split-by-sections.merge=1 つの PDF に結合するかどうか
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=ライセンス
|
licenses.nav=ライセンス
|
||||||
@@ -968,3 +1000,4 @@ licenses.module=モジュール
|
|||||||
licenses.version=バージョン
|
licenses.version=バージョン
|
||||||
licenses.license=ライセンス
|
licenses.license=ライセンス
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=이미지 선택
|
|||||||
genericSubmit=확인
|
genericSubmit=확인
|
||||||
processTimeWarning=경고: 파일 크기에 따라 1분 정도 소요될 수 있습니다
|
processTimeWarning=경고: 파일 크기에 따라 1분 정도 소요될 수 있습니다
|
||||||
pageOrderPrompt=페이지 순서(쉼표로 구분된 페이지 번호 목록 입력):
|
pageOrderPrompt=페이지 순서(쉼표로 구분된 페이지 번호 목록 입력):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=이동
|
goToPage=이동
|
||||||
true=참
|
true=참
|
||||||
false=거짓
|
false=거짓
|
||||||
unknown=알 수 없음
|
unknown=알 수 없음
|
||||||
save=저장
|
save=저장
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=닫기
|
close=닫기
|
||||||
filesSelected=개 파일 선택됨
|
filesSelected=개 파일 선택됨
|
||||||
noFavourites=즐겨찾기 없음
|
noFavourites=즐겨찾기 없음
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=기다리는 게 지루하신가요?
|
bored=기다리는 게 지루하신가요?
|
||||||
alphabet=\uC54C\uD30C\uBCB3
|
alphabet=\uC54C\uD30C\uBCB3
|
||||||
downloadPdf=PDF 다운로드
|
downloadPdf=PDF 다운로드
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=User not authenticated.
|
|||||||
userNotFoundMessage=사용자를 찾을 수 없습니다.
|
userNotFoundMessage=사용자를 찾을 수 없습니다.
|
||||||
incorrectPasswordMessage=현재 비밀번호가 틀립니다.
|
incorrectPasswordMessage=현재 비밀번호가 틀립니다.
|
||||||
usernameExistsMessage=새 사용자명이 이미 존재합니다.
|
usernameExistsMessage=새 사용자명이 이미 존재합니다.
|
||||||
|
invalidUsernameMessage=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=계정 설정
|
|||||||
|
|
||||||
changeCreds.title=계정 정보 변경
|
changeCreds.title=계정 정보 변경
|
||||||
changeCreds.header=계정 정보 업데이트
|
changeCreds.header=계정 정보 업데이트
|
||||||
changeCreds.changeUserAndPassword=기본 제공된 로그인 정보를 사용하고 있습니다. 새 비밀번호를 입력합니다. (필요하다면 사용자명을 변경할 수 있습니다.)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=새 사용자명
|
changeCreds.newUsername=새 사용자명
|
||||||
changeCreds.oldPassword=현재 비밀번호
|
changeCreds.oldPassword=현재 비밀번호
|
||||||
changeCreds.newPassword=새 비밀번호
|
changeCreds.newPassword=새 비밀번호
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=사용자 관리
|
|||||||
adminUserSettings.admin=관리자
|
adminUserSettings.admin=관리자
|
||||||
adminUserSettings.user=사용자
|
adminUserSettings.user=사용자
|
||||||
adminUserSettings.addUser=새 사용자 추가
|
adminUserSettings.addUser=새 사용자 추가
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=역할
|
adminUserSettings.roles=역할
|
||||||
adminUserSettings.role=역할
|
adminUserSettings.role=역할
|
||||||
adminUserSettings.actions=동작
|
adminUserSettings.actions=동작
|
||||||
adminUserSettings.apiUser=제한된 API 사용
|
adminUserSettings.apiUser=제한된 API 사용
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=웹 사용만 허용
|
adminUserSettings.webOnlyUser=웹 사용만 허용
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=다음 로그인 때 사용자명과 비밀번호를 변경하도록 강제
|
adminUserSettings.forceChange=다음 로그인 때 사용자명과 비밀번호를 변경하도록 강제
|
||||||
adminUserSettings.submit=사용자 저장
|
adminUserSettings.submit=사용자 저장
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=로그인
|
login.title=로그인
|
||||||
|
login.header=로그인
|
||||||
login.signin=로그인
|
login.signin=로그인
|
||||||
login.rememberme=로그인 유지
|
login.rememberme=로그인 유지
|
||||||
login.invalid=사용자 이름이나 비밀번호가 틀립니다.
|
login.invalid=사용자 이름이나 비밀번호가 틀립니다.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=문서 1
|
|||||||
compare.document.2=문서 2
|
compare.document.2=문서 2
|
||||||
compare.submit=비교
|
compare.submit=비교
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=서명
|
sign.title=서명
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=??
|
PDFToCSV.submit=??
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Selecteer afbeelding(en)
|
|||||||
genericSubmit=Indienen
|
genericSubmit=Indienen
|
||||||
processTimeWarning=Waarschuwing: Dit proces kan tot een minuut duren afhankelijk van de bestandsgrootte
|
processTimeWarning=Waarschuwing: Dit proces kan tot een minuut duren afhankelijk van de bestandsgrootte
|
||||||
pageOrderPrompt=Aangepaste pagina volgorde (Voer een komma-gescheiden lijst van paginanummers of functies in, zoals 2n+1) :
|
pageOrderPrompt=Aangepaste pagina volgorde (Voer een komma-gescheiden lijst van paginanummers of functies in, zoals 2n+1) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Ga
|
goToPage=Ga
|
||||||
true=Waar
|
true=Waar
|
||||||
false=Onwaar
|
false=Onwaar
|
||||||
unknown=Onbekend
|
unknown=Onbekend
|
||||||
save=Opslaan
|
save=Opslaan
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Sluiten
|
close=Sluiten
|
||||||
filesSelected=Bestanden geselecteerd
|
filesSelected=Bestanden geselecteerd
|
||||||
noFavourites=Geen favorieten toegevoegd
|
noFavourites=Geen favorieten toegevoegd
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Verveeld met wachten?
|
bored=Verveeld met wachten?
|
||||||
alphabet=Alfabet
|
alphabet=Alfabet
|
||||||
downloadPdf=Download PDF
|
downloadPdf=Download PDF
|
||||||
@@ -51,6 +54,9 @@ notAuthenticatedMessage=Gebruiker niet ingelogd.
|
|||||||
userNotFoundMessage=Gebruiker niet gevonden.
|
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=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Account instellingen
|
|||||||
|
|
||||||
changeCreds.title=Inloggegevens wijzigen
|
changeCreds.title=Inloggegevens wijzigen
|
||||||
changeCreds.header=Werk je accountgegevens bij
|
changeCreds.header=Werk je accountgegevens bij
|
||||||
changeCreds.changeUserAndPassword=Je gebruikt de standaard inloggegevens. Voer een nieuw wachtwoord in (en eventueel een gebruikersnaam)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=Nieuwe gebruikersnaam
|
changeCreds.newUsername=Nieuwe gebruikersnaam
|
||||||
changeCreds.oldPassword=Huidige wachtwoord
|
changeCreds.oldPassword=Huidige wachtwoord
|
||||||
changeCreds.newPassword=Nieuw wachtwoord
|
changeCreds.newPassword=Nieuw wachtwoord
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=Beheer gebruikers
|
|||||||
adminUserSettings.admin=Beheerder
|
adminUserSettings.admin=Beheerder
|
||||||
adminUserSettings.user=Gebruiker
|
adminUserSettings.user=Gebruiker
|
||||||
adminUserSettings.addUser=Voeg nieuwe gebruiker toe
|
adminUserSettings.addUser=Voeg nieuwe gebruiker toe
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Rollen
|
adminUserSettings.roles=Rollen
|
||||||
adminUserSettings.role=Rol
|
adminUserSettings.role=Rol
|
||||||
adminUserSettings.actions=Acties
|
adminUserSettings.actions=Acties
|
||||||
adminUserSettings.apiUser=Beperkte API gebruiker
|
adminUserSettings.apiUser=Beperkte API gebruiker
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Alleen web gebruiker
|
adminUserSettings.webOnlyUser=Alleen web gebruiker
|
||||||
adminUserSettings.demoUser=Demogebruiker (geen aangepaste instellingen)
|
adminUserSettings.demoUser=Demogebruiker (geen aangepaste instellingen)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=Forceer gebruiker om gebruikersnaam/wachtwoord te wijzigen bij inloggen
|
adminUserSettings.forceChange=Forceer gebruiker om gebruikersnaam/wachtwoord te wijzigen bij inloggen
|
||||||
adminUserSettings.submit=Gebruiker opslaan
|
adminUserSettings.submit=Gebruiker opslaan
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Voeg tekst of afbeeldingsstempels toe op vaste locatie
|
|||||||
AddStampRequest.tags=Stempel, Afbeelding toevoegen, afbeelding centreren, watermerk, PDF, Insluiten, Aanpassen
|
AddStampRequest.tags=Stempel, Afbeelding toevoegen, afbeelding centreren, watermerk, PDF, Insluiten, Aanpassen
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stempel, Afbeelding toevoegen, afbeelding centreren, waterm
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Inloggen
|
login.title=Inloggen
|
||||||
|
login.header=Inloggen
|
||||||
login.signin=Inloggen
|
login.signin=Inloggen
|
||||||
login.rememberme=Onthoud mij
|
login.rememberme=Onthoud mij
|
||||||
login.invalid=Ongeldige gebruikersnaam of wachtwoord.
|
login.invalid=Ongeldige gebruikersnaam of wachtwoord.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Document 1
|
|||||||
compare.document.2=Document 2
|
compare.document.2=Document 2
|
||||||
compare.submit=Vergelijken
|
compare.submit=Vergelijken
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Ondertekenen
|
sign.title=Ondertekenen
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Kies pagina om tabel te extraheren
|
|||||||
PDFToCSV.submit=Extraheren
|
PDFToCSV.submit=Extraheren
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=PDF splitsen op grootte of aantal
|
||||||
split-by-size-or-count.header=PDF splitsen op grootte of aantal
|
split-by-size-or-count.header=PDF splitsen op grootte of aantal
|
||||||
split-by-size-or-count.type.label=Selecteer splits type
|
split-by-size-or-count.type.label=Selecteer splits type
|
||||||
split-by-size-or-count.type.size=Op grootte
|
split-by-size-or-count.type.size=Op grootte
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Verticale secties
|
|||||||
split-by-sections.horizontal.placeholder=Voer het aantal horizontale secties in
|
split-by-sections.horizontal.placeholder=Voer het aantal horizontale secties in
|
||||||
split-by-sections.vertical.placeholder=Voer het aantal verticale secties in
|
split-by-sections.vertical.placeholder=Voer het aantal verticale secties in
|
||||||
split-by-sections.submit=PDF splitsen
|
split-by-sections.submit=PDF splitsen
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenties
|
licenses.nav=Licenties
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Wybierz obraz(y)
|
|||||||
genericSubmit=Wyślij
|
genericSubmit=Wyślij
|
||||||
processTimeWarning=Ostrzeżenie: Ten proces może potrwać do minuty, w zależności od rozmiaru pliku
|
processTimeWarning=Ostrzeżenie: Ten proces może potrwać do minuty, w zależności od rozmiaru pliku
|
||||||
pageOrderPrompt=Kolejność stron (wprowadź listę numerów stron oddzielonych przecinkami) :
|
pageOrderPrompt=Kolejność stron (wprowadź listę numerów stron oddzielonych przecinkami) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Idź
|
goToPage=Idź
|
||||||
true=Tak
|
true=Tak
|
||||||
false=Nie
|
false=Nie
|
||||||
unknown=Nieznany
|
unknown=Nieznany
|
||||||
save=Zapisz
|
save=Zapisz
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Zamknij
|
close=Zamknij
|
||||||
filesSelected=wybrane pliki
|
filesSelected=wybrane pliki
|
||||||
noFavourites=Nie dodano ulubionych
|
noFavourites=Nie dodano ulubionych
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Znudzony czekaniem?
|
bored=Znudzony czekaniem?
|
||||||
alphabet=Alfabet
|
alphabet=Alfabet
|
||||||
downloadPdf=Pobierz PDF
|
downloadPdf=Pobierz PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=User not authenticated.
|
|||||||
userNotFoundMessage=User not found.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Account Settings
|
|||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
|
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
|
||||||
@@ -141,13 +147,16 @@ adminUserSettings.header=Admin User Control Settings
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=User
|
adminUserSettings.user=User
|
||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
adminUserSettings.actions=Actions
|
adminUserSettings.actions=Actions
|
||||||
adminUserSettings.apiUser=Limited API User
|
adminUserSettings.apiUser=Limited API User
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Web Only User
|
adminUserSettings.webOnlyUser=Web Only User
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
adminUserSettings.forceChange=Force user to change username/password on login
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
|
adminUserSettings.forceChange=Force user to change password on login
|
||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
|
|
||||||
#############
|
#############
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Sign in
|
login.title=Sign in
|
||||||
|
login.header=Sign in
|
||||||
login.signin=Sign in
|
login.signin=Sign in
|
||||||
login.rememberme=Remember me
|
login.rememberme=Remember me
|
||||||
login.invalid=Invalid username or password.
|
login.invalid=Invalid username or password.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Dokument 1
|
|||||||
compare.document.2=Dokument 2
|
compare.document.2=Dokument 2
|
||||||
compare.submit=Porównaj
|
compare.submit=Porównaj
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Podpis
|
sign.title=Podpis
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=Wyci?g
|
PDFToCSV.submit=Wyci?g
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +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=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=Save to Browser
|
||||||
close=Fechar
|
close=Fechar
|
||||||
filesSelected=arquivos selecionados
|
filesSelected=arquivos selecionados
|
||||||
noFavourites=Nenhum favorito adicionado
|
noFavourites=Nenhum favorito adicionado
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Entediado esperando?
|
bored=Entediado esperando?
|
||||||
alphabet=Alfabeto
|
alphabet=Alfabeto
|
||||||
downloadPdf=baixar PDF
|
downloadPdf=baixar PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=User not authenticated.
|
|||||||
userNotFoundMessage=User not found.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Account Settings
|
|||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
|
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
|
||||||
@@ -141,13 +147,16 @@ adminUserSettings.header=Admin User Control Settings
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=User
|
adminUserSettings.user=User
|
||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
adminUserSettings.actions=Actions
|
adminUserSettings.actions=Actions
|
||||||
adminUserSettings.apiUser=Limited API User
|
adminUserSettings.apiUser=Limited API User
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Web Only User
|
adminUserSettings.webOnlyUser=Web Only User
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
adminUserSettings.forceChange=Force user to change username/password on login
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
|
adminUserSettings.forceChange=Force user to change password on login
|
||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
|
|
||||||
#############
|
#############
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Sign in
|
login.title=Sign in
|
||||||
|
login.header=Sign in
|
||||||
login.signin=Sign in
|
login.signin=Sign in
|
||||||
login.rememberme=Remember me
|
login.rememberme=Remember me
|
||||||
login.invalid=Invalid username or password.
|
login.invalid=Invalid username or password.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Documento 1
|
|||||||
compare.document.2=Documento 2
|
compare.document.2=Documento 2
|
||||||
compare.submit=Comparar
|
compare.submit=Comparar
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Assinar
|
sign.title=Assinar
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=Eztenna
|
PDFToCSV.submit=Eztenna
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
1003
src/main/resources/messages_pt_PT.properties
Normal file
1003
src/main/resources/messages_pt_PT.properties
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Selectează imagini
|
|||||||
genericSubmit=Trimite
|
genericSubmit=Trimite
|
||||||
processTimeWarning=Avertisment: Acest proces poate dura până la un minut în funcție de dimensiunea fișierului
|
processTimeWarning=Avertisment: Acest proces poate dura până la un minut în funcție de dimensiunea fișierului
|
||||||
pageOrderPrompt=Ordinea paginilor (Introdu o listă separată prin virgulă de numere de pagină):
|
pageOrderPrompt=Ordinea paginilor (Introdu o listă separată prin virgulă de numere de pagină):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Mergi la pagină
|
goToPage=Mergi la pagină
|
||||||
true=Adevărat
|
true=Adevărat
|
||||||
false=Fals
|
false=Fals
|
||||||
unknown=Necunoscut
|
unknown=Necunoscut
|
||||||
save=Salvează
|
save=Salvează
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Închide
|
close=Închide
|
||||||
filesSelected=fișiere selectate
|
filesSelected=fișiere selectate
|
||||||
noFavourites=Niciun favorit adăugat
|
noFavourites=Niciun favorit adăugat
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Plictisit așteptând?
|
bored=Plictisit așteptând?
|
||||||
alphabet=Alfabet
|
alphabet=Alfabet
|
||||||
downloadPdf=Descarcă PDF
|
downloadPdf=Descarcă PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=User not authenticated.
|
|||||||
userNotFoundMessage=User not found.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Account Settings
|
|||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
|
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
|
||||||
@@ -141,13 +147,16 @@ adminUserSettings.header=Admin User Control Settings
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=User
|
adminUserSettings.user=User
|
||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
adminUserSettings.actions=Actions
|
adminUserSettings.actions=Actions
|
||||||
adminUserSettings.apiUser=Limited API User
|
adminUserSettings.apiUser=Limited API User
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Web Only User
|
adminUserSettings.webOnlyUser=Web Only User
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
adminUserSettings.forceChange=Force user to change username/password on login
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
|
adminUserSettings.forceChange=Force user to change password on login
|
||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
|
|
||||||
#############
|
#############
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Sign in
|
login.title=Sign in
|
||||||
|
login.header=Sign in
|
||||||
login.signin=Sign in
|
login.signin=Sign in
|
||||||
login.rememberme=Remember me
|
login.rememberme=Remember me
|
||||||
login.invalid=Invalid username or password.
|
login.invalid=Invalid username or password.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Document 1
|
|||||||
compare.document.2=Document 2
|
compare.document.2=Document 2
|
||||||
compare.submit=Compară
|
compare.submit=Compară
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Semnează
|
sign.title=Semnează
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=Extrage
|
PDFToCSV.submit=Extrage
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Выберите картинку(и)
|
|||||||
genericSubmit=Отправить
|
genericSubmit=Отправить
|
||||||
processTimeWarning=Внимание: Этот процесс может занять до минуты в зависимости от размера файла.
|
processTimeWarning=Внимание: Этот процесс может занять до минуты в зависимости от размера файла.
|
||||||
pageOrderPrompt=Порядок страниц (введите список номеров страниц через запятую):
|
pageOrderPrompt=Порядок страниц (введите список номеров страниц через запятую):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Вперед
|
goToPage=Вперед
|
||||||
true=Истина
|
true=Истина
|
||||||
false=Ложь
|
false=Ложь
|
||||||
unknown=Неизвестно
|
unknown=Неизвестно
|
||||||
save=Сохранить
|
save=Сохранить
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Закрыть
|
close=Закрыть
|
||||||
filesSelected=файлов выбрано
|
filesSelected=файлов выбрано
|
||||||
noFavourites=Нет избранного
|
noFavourites=Нет избранного
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Скучно ждать?
|
bored=Скучно ждать?
|
||||||
alphabet=Алфавит
|
alphabet=Алфавит
|
||||||
downloadPdf=Скачать PDF
|
downloadPdf=Скачать PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=User not authenticated.
|
|||||||
userNotFoundMessage=User not found.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Account Settings
|
|||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
|
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
|
||||||
@@ -141,13 +147,16 @@ adminUserSettings.header=Admin User Control Settings
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=User
|
adminUserSettings.user=User
|
||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
adminUserSettings.actions=Actions
|
adminUserSettings.actions=Actions
|
||||||
adminUserSettings.apiUser=Limited API User
|
adminUserSettings.apiUser=Limited API User
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Web Only User
|
adminUserSettings.webOnlyUser=Web Only User
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
adminUserSettings.forceChange=Force user to change username/password on login
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
|
adminUserSettings.forceChange=Force user to change password on login
|
||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
|
|
||||||
#############
|
#############
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Sign in
|
login.title=Sign in
|
||||||
|
login.header=Sign in
|
||||||
login.signin=Sign in
|
login.signin=Sign in
|
||||||
login.rememberme=Remember me
|
login.rememberme=Remember me
|
||||||
login.invalid=Invalid username or password.
|
login.invalid=Invalid username or password.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Документ 1
|
|||||||
compare.document.2=Документ 2
|
compare.document.2=Документ 2
|
||||||
compare.submit=Сравнить
|
compare.submit=Сравнить
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Подпись
|
sign.title=Подпись
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=???????
|
PDFToCSV.submit=???????
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Odaberi sliku (slike)
|
|||||||
genericSubmit=Prihvatiti
|
genericSubmit=Prihvatiti
|
||||||
processTimeWarning=Warning:Upozorenje: Ovaj proces može trajati i do minut, u zavisnosti od veličine dokumenta
|
processTimeWarning=Warning:Upozorenje: Ovaj proces može trajati i do minut, u zavisnosti od veličine dokumenta
|
||||||
pageOrderPrompt=Prilagođeni redosled stranica (unesi listu brojeva stranica ili funkcija, kao što su 2n+1, razdvojene zarezima) :
|
pageOrderPrompt=Prilagođeni redosled stranica (unesi listu brojeva stranica ili funkcija, kao što su 2n+1, razdvojene zarezima) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Idi
|
goToPage=Idi
|
||||||
true=Tačno
|
true=Tačno
|
||||||
false=Netačno
|
false=Netačno
|
||||||
unknown=Nepoznato
|
unknown=Nepoznato
|
||||||
save=Sačuvaj
|
save=Sačuvaj
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Zatvori
|
close=Zatvori
|
||||||
filesSelected=odabrani fajlovi
|
filesSelected=odabrani fajlovi
|
||||||
noFavourites=Nema dodatih favorita
|
noFavourites=Nema dodatih favorita
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Da li ti je dosadno dok čekaš?
|
bored=Da li ti je dosadno dok čekaš?
|
||||||
alphabet=Alfabet
|
alphabet=Alfabet
|
||||||
downloadPdf=Skini PDF
|
downloadPdf=Skini PDF
|
||||||
@@ -51,6 +54,9 @@ notAuthenticatedMessage=Korisnik nije autentifikovan.
|
|||||||
userNotFoundMessage=Korisnik nije pronađen.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Podešavanja naloga
|
|||||||
|
|
||||||
changeCreds.title=Promeni pristupne podatke
|
changeCreds.title=Promeni pristupne podatke
|
||||||
changeCreds.header=Ažurirajte detalje svog naloga
|
changeCreds.header=Ažurirajte detalje svog naloga
|
||||||
changeCreds.changeUserAndPassword=Koristite podrazumevane prijavne podatke. Unesite novu lozinku (i korisničko ime ako želite)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=Novo korisničko ime
|
changeCreds.newUsername=Novo korisničko ime
|
||||||
changeCreds.oldPassword=Trenutna lozinka
|
changeCreds.oldPassword=Trenutna lozinka
|
||||||
changeCreds.newPassword=Nova lozinka
|
changeCreds.newPassword=Nova lozinka
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=Podešavanja kontrole korisnika za administratora
|
|||||||
adminUserSettings.admin=Administrator
|
adminUserSettings.admin=Administrator
|
||||||
adminUserSettings.user=Korisnik
|
adminUserSettings.user=Korisnik
|
||||||
adminUserSettings.addUser=Dodaj novog korisnika
|
adminUserSettings.addUser=Dodaj novog korisnika
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Uloge
|
adminUserSettings.roles=Uloge
|
||||||
adminUserSettings.role=Uloga
|
adminUserSettings.role=Uloga
|
||||||
adminUserSettings.actions=Akcije
|
adminUserSettings.actions=Akcije
|
||||||
adminUserSettings.apiUser=Korisnik s ograničenim API pristupom
|
adminUserSettings.apiUser=Korisnik s ograničenim API pristupom
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Korisnik samo za web
|
adminUserSettings.webOnlyUser=Korisnik samo za web
|
||||||
adminUserSettings.demoUser=Demo korisnik (Bez prilagođenih podešavanja)
|
adminUserSettings.demoUser=Demo korisnik (Bez prilagođenih podešavanja)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=Prisili korisnika da promeni korisničko ime/lozinku pri prijavi
|
adminUserSettings.forceChange=Prisili korisnika da promeni korisničko ime/lozinku pri prijavi
|
||||||
adminUserSettings.submit=Sačuvaj korisnika
|
adminUserSettings.submit=Sačuvaj korisnika
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Prijavite se
|
login.title=Prijavite se
|
||||||
|
login.header=Prijavite se
|
||||||
login.signin=Prijavite se
|
login.signin=Prijavite se
|
||||||
login.rememberme=Zapamti me
|
login.rememberme=Zapamti me
|
||||||
login.invalid=Neispravno korisničko ime ili lozinka.
|
login.invalid=Neispravno korisničko ime ili lozinka.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Dokument 1
|
|||||||
compare.document.2=Dokument 2
|
compare.document.2=Dokument 2
|
||||||
compare.submit=Uporedi
|
compare.submit=Uporedi
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Potpiši
|
sign.title=Potpiši
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Izaberite stranicu za ekstrakciju tabele
|
|||||||
PDFToCSV.submit=Izvuci
|
PDFToCSV.submit=Izvuci
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Razdvoji PDF po veličini ili broju
|
||||||
split-by-size-or-count.header=Razdvoji PDF po veličini ili broju
|
split-by-size-or-count.header=Razdvoji PDF po veličini ili broju
|
||||||
split-by-size-or-count.type.label=Izaberite tip razdvajanja
|
split-by-size-or-count.type.label=Izaberite tip razdvajanja
|
||||||
split-by-size-or-count.type.size=Po veličini
|
split-by-size-or-count.type.size=Po veličini
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertikalne podele
|
|||||||
split-by-sections.horizontal.placeholder=Unesite broj horizontalnih podele
|
split-by-sections.horizontal.placeholder=Unesite broj horizontalnih podele
|
||||||
split-by-sections.vertical.placeholder=Unesite broj vertikalnih podele
|
split-by-sections.vertical.placeholder=Unesite broj vertikalnih podele
|
||||||
split-by-sections.submit=Razdvoji PDF
|
split-by-sections.submit=Razdvoji PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Välj bild(er)
|
|||||||
genericSubmit=Skicka
|
genericSubmit=Skicka
|
||||||
processTimeWarning=Varning: Denna process kan ta upp till en minut beroende på filstorlek
|
processTimeWarning=Varning: Denna process kan ta upp till en minut beroende på filstorlek
|
||||||
pageOrderPrompt=Sidordning (Ange en kommaseparerad lista med sidnummer) :
|
pageOrderPrompt=Sidordning (Ange en kommaseparerad lista med sidnummer) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Gå till
|
goToPage=Gå till
|
||||||
true=True
|
true=True
|
||||||
false=Falskt
|
false=Falskt
|
||||||
unknown=Okänt
|
unknown=Okänt
|
||||||
save=Spara
|
save=Spara
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Stäng
|
close=Stäng
|
||||||
filesSelected=filer valda
|
filesSelected=filer valda
|
||||||
noFavourites=Inga favoriter har lagts till
|
noFavourites=Inga favoriter har lagts till
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Utråkad att vänta?
|
bored=Utråkad att vänta?
|
||||||
alphabet=Alfabet
|
alphabet=Alfabet
|
||||||
downloadPdf=Ladda ner PDF
|
downloadPdf=Ladda ner PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=User not authenticated.
|
|||||||
userNotFoundMessage=User not found.
|
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 must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Account Settings
|
|||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Change Credentials
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Update Your Account Details
|
||||||
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
|
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
|
||||||
@@ -141,13 +147,16 @@ adminUserSettings.header=Admin User Control Settings
|
|||||||
adminUserSettings.admin=Admin
|
adminUserSettings.admin=Admin
|
||||||
adminUserSettings.user=User
|
adminUserSettings.user=User
|
||||||
adminUserSettings.addUser=Add New User
|
adminUserSettings.addUser=Add New User
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Roles
|
adminUserSettings.roles=Roles
|
||||||
adminUserSettings.role=Role
|
adminUserSettings.role=Role
|
||||||
adminUserSettings.actions=Actions
|
adminUserSettings.actions=Actions
|
||||||
adminUserSettings.apiUser=Limited API User
|
adminUserSettings.apiUser=Limited API User
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Web Only User
|
adminUserSettings.webOnlyUser=Web Only User
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
adminUserSettings.forceChange=Force user to change username/password on login
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
|
adminUserSettings.forceChange=Force user to change password on login
|
||||||
adminUserSettings.submit=Save User
|
adminUserSettings.submit=Save User
|
||||||
|
|
||||||
#############
|
#############
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Sign in
|
login.title=Sign in
|
||||||
|
login.header=Sign in
|
||||||
login.signin=Sign in
|
login.signin=Sign in
|
||||||
login.rememberme=Remember me
|
login.rememberme=Remember me
|
||||||
login.invalid=Invalid username or password.
|
login.invalid=Invalid username or password.
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=Dokument 1
|
|||||||
compare.document.2=Dokument 2
|
compare.document.2=Dokument 2
|
||||||
compare.submit=Jämför
|
compare.submit=Jämför
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Signera
|
sign.title=Signera
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=Navvit
|
PDFToCSV.submit=Navvit
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=Resim(leri) seçin
|
|||||||
genericSubmit=Gönder
|
genericSubmit=Gönder
|
||||||
processTimeWarning=Uyarı: Bu işlem, dosya boyutuna bağlı olarak bir dakikaya kadar sürebilir.
|
processTimeWarning=Uyarı: Bu işlem, dosya boyutuna bağlı olarak bir dakikaya kadar sürebilir.
|
||||||
pageOrderPrompt=Özel Sayfa Sırası (Virgülle ayrılmış sayfa numaraları veya 2n+1 gibi bir fonksiyon girin) :
|
pageOrderPrompt=Özel Sayfa Sırası (Virgülle ayrılmış sayfa numaraları veya 2n+1 gibi bir fonksiyon girin) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Git
|
goToPage=Git
|
||||||
true=Doğru
|
true=Doğru
|
||||||
false=Yanlış
|
false=Yanlış
|
||||||
unknown=Bilinmeyen
|
unknown=Bilinmeyen
|
||||||
save=Kaydet
|
save=Kaydet
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=Kapat
|
close=Kapat
|
||||||
filesSelected=dosya seçildi
|
filesSelected=dosya seçildi
|
||||||
noFavourites=Favori eklenmedi
|
noFavourites=Favori eklenmedi
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=Sıkıldınız mı?
|
bored=Sıkıldınız mı?
|
||||||
alphabet=Alfabe
|
alphabet=Alfabe
|
||||||
downloadPdf=PDF İndir
|
downloadPdf=PDF İndir
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=Kullanıcı doğrulanmadı.
|
|||||||
userNotFoundMessage=Kullanıcı bulunamadı.
|
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=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=Hesap Ayarları
|
|||||||
|
|
||||||
changeCreds.title=Giriş Bilgilerini Değiştir
|
changeCreds.title=Giriş Bilgilerini Değiştir
|
||||||
changeCreds.header=Hesap Detaylarınızı Güncelleyin
|
changeCreds.header=Hesap Detaylarınızı Güncelleyin
|
||||||
changeCreds.changeUserAndPassword=Varsayılan giriş bilgilerini kullanıyorsunuz. Lütfen yeni bir şifre (ve istenirse kullanıcı adı) girin
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=Yeni Kullanıcı Adı
|
changeCreds.newUsername=Yeni Kullanıcı Adı
|
||||||
changeCreds.oldPassword=Mevcut Şifre
|
changeCreds.oldPassword=Mevcut Şifre
|
||||||
changeCreds.newPassword=Yeni Şifre
|
changeCreds.newPassword=Yeni Şifre
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=Yönetici Kullanıcı Kontrol Ayarları
|
|||||||
adminUserSettings.admin=Yönetici
|
adminUserSettings.admin=Yönetici
|
||||||
adminUserSettings.user=Kullanıcı
|
adminUserSettings.user=Kullanıcı
|
||||||
adminUserSettings.addUser=Yeni Kullanıcı Ekle
|
adminUserSettings.addUser=Yeni Kullanıcı Ekle
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=Roller
|
adminUserSettings.roles=Roller
|
||||||
adminUserSettings.role=Rol
|
adminUserSettings.role=Rol
|
||||||
adminUserSettings.actions=Eylemler
|
adminUserSettings.actions=Eylemler
|
||||||
adminUserSettings.apiUser=Sınırlı API Kullanıcısı
|
adminUserSettings.apiUser=Sınırlı API Kullanıcısı
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=Sadece Web Kullanıcısı
|
adminUserSettings.webOnlyUser=Sadece Web Kullanıcısı
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=Kullanıcının girişte kullanıcı adı/şifre değiştirmesini zorla
|
adminUserSettings.forceChange=Kullanıcının girişte kullanıcı adı/şifre değiştirmesini zorla
|
||||||
adminUserSettings.submit=Kullanıcıyı Kaydet
|
adminUserSettings.submit=Kullanıcıyı Kaydet
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Giriş Yap
|
login.title=Giriş Yap
|
||||||
|
login.header=Giriş Yap
|
||||||
login.signin=Giriş Yap
|
login.signin=Giriş Yap
|
||||||
login.rememberme=Beni hatırla
|
login.rememberme=Beni hatırla
|
||||||
login.invalid=Geçersiz kullanıcı adı veya şifre.
|
login.invalid=Geçersiz kullanıcı adı veya şifre.
|
||||||
@@ -622,6 +641,18 @@ 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
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=İmzala
|
sign.title=İmzala
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=Choose page to extract table
|
|||||||
PDFToCSV.submit=Extract
|
PDFToCSV.submit=Extract
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=Split PDF by Size or Count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=Split PDF by Size or Count
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Select Split Type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=By Size
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=Vertical Divisions
|
|||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=Split PDF
|
||||||
|
split-by-sections.merge=Merge Into One PDF
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=选择图像
|
|||||||
genericSubmit=提交
|
genericSubmit=提交
|
||||||
processTimeWarning=警告:此过程可能需要多达一分钟,具体时间取决于文件大小
|
processTimeWarning=警告:此过程可能需要多达一分钟,具体时间取决于文件大小
|
||||||
pageOrderPrompt=页面顺序(输入逗号分隔的页码列表):
|
pageOrderPrompt=页面顺序(输入逗号分隔的页码列表):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=到
|
goToPage=到
|
||||||
true=对
|
true=对
|
||||||
false=错
|
false=错
|
||||||
unknown=未知
|
unknown=未知
|
||||||
save=保存
|
save=保存
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=关闭
|
close=关闭
|
||||||
filesSelected=选中的文件
|
filesSelected=选中的文件
|
||||||
noFavourites=没有添加收藏夹
|
noFavourites=没有添加收藏夹
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=无聊等待吗?
|
bored=无聊等待吗?
|
||||||
alphabet=字母表
|
alphabet=字母表
|
||||||
downloadPdf=下载PDF
|
downloadPdf=下载PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=用户未经过身份验证。
|
|||||||
userNotFoundMessage=未找到用户。
|
userNotFoundMessage=未找到用户。
|
||||||
incorrectPasswordMessage=当前密码不正确。
|
incorrectPasswordMessage=当前密码不正确。
|
||||||
usernameExistsMessage=新用户名已存在。
|
usernameExistsMessage=新用户名已存在。
|
||||||
|
invalidUsernameMessage=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=帐号设定
|
|||||||
|
|
||||||
changeCreds.title=更改凭证
|
changeCreds.title=更改凭证
|
||||||
changeCreds.header=更新您的账户详情
|
changeCreds.header=更新您的账户详情
|
||||||
changeCreds.changeUserAndPassword=您正在使用默认登录凭据。请输入新密码(如果需要,还可以输入新用户名)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=新用户名
|
changeCreds.newUsername=新用户名
|
||||||
changeCreds.oldPassword=当前密码
|
changeCreds.oldPassword=当前密码
|
||||||
changeCreds.newPassword=新密码
|
changeCreds.newPassword=新密码
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=管理员用户控制设置
|
|||||||
adminUserSettings.admin=管理员
|
adminUserSettings.admin=管理员
|
||||||
adminUserSettings.user=用户
|
adminUserSettings.user=用户
|
||||||
adminUserSettings.addUser=添加新用户
|
adminUserSettings.addUser=添加新用户
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=角色
|
adminUserSettings.roles=角色
|
||||||
adminUserSettings.role=角色
|
adminUserSettings.role=角色
|
||||||
adminUserSettings.actions=操作
|
adminUserSettings.actions=操作
|
||||||
adminUserSettings.apiUser=有限 API 用户
|
adminUserSettings.apiUser=有限 API 用户
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=仅限 Web 用户
|
adminUserSettings.webOnlyUser=仅限 Web 用户
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo User (No custom settings)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=强制用户在登录时更改用户名/密码
|
adminUserSettings.forceChange=强制用户在登录时更改用户名/密码
|
||||||
adminUserSettings.submit=保存用户
|
adminUserSettings.submit=保存用户
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=登录
|
login.title=登录
|
||||||
|
login.header=登录
|
||||||
login.signin=登录
|
login.signin=登录
|
||||||
login.rememberme=记住我
|
login.rememberme=记住我
|
||||||
login.invalid=用户名或密码无效。
|
login.invalid=用户名或密码无效。
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=文档 1
|
|||||||
compare.document.2=文档 2
|
compare.document.2=文档 2
|
||||||
compare.submit=比较
|
compare.submit=比较
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=签名
|
sign.title=签名
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=选择需要提取表格的页面
|
|||||||
PDFToCSV.submit=提取
|
PDFToCSV.submit=提取
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=按照大小或数目拆分PDF
|
||||||
split-by-size-or-count.header=按照大小或数目拆分PDF
|
split-by-size-or-count.header=按照大小或数目拆分PDF
|
||||||
split-by-size-or-count.type.label=选择拆分类型
|
split-by-size-or-count.type.label=选择拆分类型
|
||||||
split-by-size-or-count.type.size=按照大小
|
split-by-size-or-count.type.size=按照大小
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=垂直分割
|
|||||||
split-by-sections.horizontal.placeholder=输入水平分割数
|
split-by-sections.horizontal.placeholder=输入水平分割数
|
||||||
split-by-sections.vertical.placeholder=输入垂直分割数
|
split-by-sections.vertical.placeholder=输入垂直分割数
|
||||||
split-by-sections.submit=分割PDF
|
split-by-sections.submit=分割PDF
|
||||||
|
split-by-sections.merge=是否合并为一个pdf
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
@@ -11,14 +11,17 @@ imgPrompt=選擇圖片
|
|||||||
genericSubmit=送出
|
genericSubmit=送出
|
||||||
processTimeWarning=警告:此過程可能需要長達一分鐘,具體取決於檔案大小
|
processTimeWarning=警告:此過程可能需要長達一分鐘,具體取決於檔案大小
|
||||||
pageOrderPrompt=自訂頁面順序(輸入以逗號分隔的頁碼或函式,如 2n+1):
|
pageOrderPrompt=自訂頁面順序(輸入以逗號分隔的頁碼或函式,如 2n+1):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=前往
|
goToPage=前往
|
||||||
true=是
|
true=是
|
||||||
false=否
|
false=否
|
||||||
unknown=未知
|
unknown=未知
|
||||||
save=儲存
|
save=儲存
|
||||||
|
saveToBrowser=Save to Browser
|
||||||
close=關閉
|
close=關閉
|
||||||
filesSelected=已選擇的檔案
|
filesSelected=已選擇的檔案
|
||||||
noFavourites=未新增收藏
|
noFavourites=未新增收藏
|
||||||
|
downloadComplete=Download Complete
|
||||||
bored=等待時覺得無聊?
|
bored=等待時覺得無聊?
|
||||||
alphabet=字母表
|
alphabet=字母表
|
||||||
downloadPdf=下載 PDF
|
downloadPdf=下載 PDF
|
||||||
@@ -51,12 +54,15 @@ notAuthenticatedMessage=使用者未認證。
|
|||||||
userNotFoundMessage=找不到使用者。
|
userNotFoundMessage=找不到使用者。
|
||||||
incorrectPasswordMessage=目前密碼不正確。
|
incorrectPasswordMessage=目前密碼不正確。
|
||||||
usernameExistsMessage=新使用者名稱已存在。
|
usernameExistsMessage=新使用者名稱已存在。
|
||||||
|
invalidUsernameMessage=Invalid username, Username must only contain alphabet characters and numbers.
|
||||||
|
deleteCurrentUserMessage=Cannot delete currently logged in user.
|
||||||
|
deleteUsernameExistsMessage=The username does not exist and cannot be deleted.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline Menu (Beta)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configure
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Custom
|
||||||
@@ -106,7 +112,7 @@ settings.accountSettings=帳戶設定
|
|||||||
|
|
||||||
changeCreds.title=變更憑證
|
changeCreds.title=變更憑證
|
||||||
changeCreds.header=更新您的帳戶詳細資訊
|
changeCreds.header=更新您的帳戶詳細資訊
|
||||||
changeCreds.changeUserAndPassword=您正在使用預設的登入憑證。請輸入新的密碼(如果需要,也可以輸入使用者名稱)
|
changeCreds.changePassword=You are using default login credentials. Please enter a new password
|
||||||
changeCreds.newUsername=新使用者名稱
|
changeCreds.newUsername=新使用者名稱
|
||||||
changeCreds.oldPassword=目前密碼
|
changeCreds.oldPassword=目前密碼
|
||||||
changeCreds.newPassword=新密碼
|
changeCreds.newPassword=新密碼
|
||||||
@@ -141,12 +147,15 @@ adminUserSettings.header=管理使用者控制設定
|
|||||||
adminUserSettings.admin=管理員
|
adminUserSettings.admin=管理員
|
||||||
adminUserSettings.user=使用者
|
adminUserSettings.user=使用者
|
||||||
adminUserSettings.addUser=新增使用者
|
adminUserSettings.addUser=新增使用者
|
||||||
|
adminUserSettings.usernameInfo=Username must only contain letters and numbers, no spaces or special characters.
|
||||||
adminUserSettings.roles=角色
|
adminUserSettings.roles=角色
|
||||||
adminUserSettings.role=角色
|
adminUserSettings.role=角色
|
||||||
adminUserSettings.actions=操作
|
adminUserSettings.actions=操作
|
||||||
adminUserSettings.apiUser=受限制的 API 使用者
|
adminUserSettings.apiUser=受限制的 API 使用者
|
||||||
|
adminUserSettings.extraApiUser=Additional Limited API User
|
||||||
adminUserSettings.webOnlyUser=僅使用網頁的使用者
|
adminUserSettings.webOnlyUser=僅使用網頁的使用者
|
||||||
adminUserSettings.demoUser=示範用途的使用者(無自訂設定)
|
adminUserSettings.demoUser=示範用途的使用者(無自訂設定)
|
||||||
|
adminUserSettings.internalApiUser=Internal API User
|
||||||
adminUserSettings.forceChange=強制使用者在登入時修改使用者名稱/密碼
|
adminUserSettings.forceChange=強制使用者在登入時修改使用者名稱/密碼
|
||||||
adminUserSettings.submit=儲存
|
adminUserSettings.submit=儲存
|
||||||
|
|
||||||
@@ -391,6 +400,15 @@ home.AddStampRequest.desc=Add text or add image stamps at set locations
|
|||||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
|
home.PDFToBook.title=PDF to Book
|
||||||
|
home.PDFToBook.desc=Converts PDF to Book/Comic formats using calibre
|
||||||
|
PDFToBook.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
home.BookToPDF.title=Book to PDF
|
||||||
|
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||||
|
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
@@ -398,6 +416,7 @@ AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Cust
|
|||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=登入
|
login.title=登入
|
||||||
|
login.header=登入
|
||||||
login.signin=登入
|
login.signin=登入
|
||||||
login.rememberme=記住我
|
login.rememberme=記住我
|
||||||
login.invalid=使用者名稱或密碼無效。
|
login.invalid=使用者名稱或密碼無效。
|
||||||
@@ -622,6 +641,18 @@ compare.document.1=文件 1
|
|||||||
compare.document.2=文件 2
|
compare.document.2=文件 2
|
||||||
compare.submit=比較
|
compare.submit=比較
|
||||||
|
|
||||||
|
#BookToPDF
|
||||||
|
BookToPDF.title=Books and Comics to PDF
|
||||||
|
BookToPDF.header=Book to PDF
|
||||||
|
BookToPDF.credit=Uses Calibre
|
||||||
|
BookToPDF.submit=Convert
|
||||||
|
|
||||||
|
#PDFToBook
|
||||||
|
PDFToBook.title=PDF to Book
|
||||||
|
PDFToBook.header=PDF to Book
|
||||||
|
PDFToBook.selectText.1=Format
|
||||||
|
PDFToBook.credit=Uses Calibre
|
||||||
|
PDFToBook.submit=Convert
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=簽章
|
sign.title=簽章
|
||||||
@@ -924,6 +955,7 @@ PDFToCSV.prompt=選擇要提取表格的頁面
|
|||||||
PDFToCSV.submit=提取
|
PDFToCSV.submit=提取
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
|
split-by-size-or-count.title=依大小或數量分割 PDF
|
||||||
split-by-size-or-count.header=依大小或數量分割 PDF
|
split-by-size-or-count.header=依大小或數量分割 PDF
|
||||||
split-by-size-or-count.type.label=選擇分割類型
|
split-by-size-or-count.type.label=選擇分割類型
|
||||||
split-by-size-or-count.type.size=依大小
|
split-by-size-or-count.type.size=依大小
|
||||||
@@ -958,7 +990,7 @@ split-by-sections.vertical.label=垂直劃分
|
|||||||
split-by-sections.horizontal.placeholder=輸入水平劃分的數量
|
split-by-sections.horizontal.placeholder=輸入水平劃分的數量
|
||||||
split-by-sections.vertical.placeholder=輸入垂直劃分的數量
|
split-by-sections.vertical.placeholder=輸入垂直劃分的數量
|
||||||
split-by-sections.submit=分割 PDF
|
split-by-sections.submit=分割 PDF
|
||||||
|
split-by-sections.merge=是否合併為一個pdf
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenses
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user