mirror of
https://github.com/alam00000/bentopdf.git
synced 2026-11-05 11:52:48 +01:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f96cd4e516 | ||
|
|
a453313ff3 | ||
|
|
9132dd42b5 | ||
|
|
f35224f16f | ||
|
|
62041f4677 | ||
|
|
4f57cb076f | ||
|
|
627288ca13 | ||
|
|
480acfdf44 | ||
|
|
7888fca6fa | ||
|
|
921a5b4249 | ||
|
|
4bb43fda08 | ||
|
|
acdca59f18 | ||
|
|
829b13f8ff | ||
|
|
4339d21d41 | ||
|
|
1d78b8ec72 | ||
|
|
bf513bbcb9 | ||
|
|
7831571696 | ||
|
|
c449a85745 | ||
|
|
8e606b652c | ||
|
|
3fa731aa6e | ||
|
|
121c3d891a | ||
|
|
32db7cb173 | ||
|
|
1713fb0991 | ||
|
|
47d6871bc5 | ||
|
|
be36588468 | ||
|
|
532ba68f4f | ||
|
|
5bcdd8deeb | ||
|
|
7f6bebf21f | ||
|
|
0f65fdb2f4 | ||
|
|
09d1860396 | ||
|
|
5b4b40fe81 | ||
|
|
6ac503efae | ||
|
|
c72185ed0b | ||
|
|
aee3e0a65a | ||
|
|
5392c1be76 | ||
|
|
356128c60d | ||
|
|
8dc7509ceb | ||
|
|
cba16fe750 | ||
|
|
a55614d5ab | ||
|
|
6b4e9f2a94 | ||
|
|
75e76c9619 | ||
|
|
6529b0e9b7 | ||
|
|
78cb827ec7 | ||
|
|
dbcb9cc153 | ||
|
|
1d2cd3f805 | ||
|
|
053f22a87b | ||
|
|
e8f26c4a70 | ||
|
|
9635c398d6 | ||
|
|
5bf54f1dad | ||
|
|
ee17fa8760 | ||
|
|
61fde80a90 | ||
|
|
ca95925de9 | ||
|
|
706e74f084 | ||
|
|
e1a4a31458 | ||
|
|
866ecfed2d | ||
|
|
10b63b5f89 | ||
|
|
af5b95e93c | ||
|
|
b8f3d4e582 | ||
|
|
3672ecf91d | ||
|
|
7c8c7600ae | ||
|
|
42b2615882 | ||
|
|
02548b80b1 | ||
|
|
2ed0575ca3 | ||
|
|
54778a7e43 | ||
|
|
59de529311 | ||
|
|
5a4be8e7f2 | ||
|
|
d9183028d5 | ||
|
|
fae0aa4c04 | ||
|
|
55915a2901 | ||
|
|
f2a8b77733 | ||
|
|
c8d04e51b9 | ||
|
|
b003355a0c | ||
|
|
79ae42d73a | ||
|
|
2835e7e5f9 | ||
|
|
a59a1f41cd | ||
|
|
0447cfc032 | ||
|
|
7070bae927 | ||
|
|
a3e64f6340 | ||
|
|
45496fcd2e | ||
|
|
115bc70ad1 | ||
|
|
e59ce4feac | ||
|
|
ea0a8755bf | ||
|
|
21c924a3e6 | ||
|
|
58cd1a8893 | ||
|
|
57a6422e61 | ||
|
|
0ef279e0da | ||
|
|
8dcd936873 | ||
|
|
5ef0b40dea | ||
|
|
6f02f2d2b7 | ||
|
|
b21f602cca | ||
|
|
b09fc21e66 | ||
|
|
fa6355b98a | ||
|
|
53bcf09566 | ||
|
|
d2dc459ba9 | ||
|
|
71ced499e7 | ||
|
|
fc264f796a | ||
|
|
ad5811efb0 | ||
|
|
1ada0cee13 | ||
|
|
d7c14f821a | ||
|
|
98371733a6 | ||
|
|
6c53646e94 | ||
|
|
4812d5b389 | ||
|
|
e55c2ed405 | ||
|
|
4b875a638c | ||
|
|
b71d6c9b96 | ||
|
|
d63d1683c7 | ||
|
|
0347013df1 | ||
|
|
412f2f1acb | ||
|
|
a471bbcf4d | ||
|
|
e1843e17b3 | ||
|
|
ac3ad68b56 | ||
|
|
745698a5ba | ||
|
|
dc1dbb036c | ||
|
|
175c52bb1f | ||
|
|
1d9b7c2a07 | ||
|
|
1534ce4d85 | ||
|
|
72e8c9f7b3 | ||
|
|
3cab1d37c7 | ||
|
|
14e2c53030 | ||
|
|
65335a2b88 | ||
|
|
0ce043c18e | ||
|
|
58a0053778 | ||
|
|
f24bf4ea98 | ||
|
|
1b76465b21 | ||
|
|
741e4fa7bc | ||
|
|
135027fb23 | ||
|
|
878c63d8ba | ||
|
|
fb53fa0d7e | ||
|
|
661b66b765 | ||
|
|
9215a5a943 | ||
|
|
6b119660b0 | ||
|
|
c6ea2ca595 | ||
|
|
7a6cd61286 | ||
|
|
bef12f1d23 | ||
|
|
dd2ee5d5a1 | ||
|
|
3362b63350 | ||
|
|
21bc0a50f0 | ||
|
|
947ae84da8 | ||
|
|
f5d4bde317 | ||
|
|
973c32e500 | ||
|
|
f169308439 | ||
|
|
8b6da83ba7 | ||
|
|
fc941350b3 | ||
|
|
a45f7fb48e | ||
|
|
5f889bcc0a | ||
|
|
3c668bddb1 | ||
|
|
4bde98f2e4 | ||
|
|
0957319e3d | ||
|
|
f41c51eb61 | ||
|
|
5e6af6c0d9 | ||
|
|
249c8ccdfc | ||
|
|
e6c43d38ca | ||
|
|
0c53a4ace6 | ||
|
|
815bd42229 | ||
|
|
4f66a6a41f | ||
|
|
7a248ba882 | ||
|
|
078525171c | ||
|
|
bbffdad609 | ||
|
|
9f11ffa325 | ||
|
|
847ac79f05 | ||
|
|
48c74de326 | ||
|
|
7e9e8f4afd | ||
|
|
14557c123c | ||
|
|
668ea89a48 | ||
|
|
ea53689bba | ||
|
|
6f5c75b913 | ||
|
|
ef3dab5aeb | ||
|
|
1e9175b5e5 | ||
|
|
7f022ea35d | ||
|
|
0040317e48 | ||
|
|
0c19c0d9a3 | ||
|
|
eff1548ebe | ||
|
|
18cdfac8cd | ||
|
|
7587a5f94a | ||
|
|
ac296cdb7f | ||
|
|
81e82918bf | ||
|
|
e37d2d539e | ||
|
|
54c6091e10 | ||
|
|
b612548b78 | ||
|
|
28b4f3ebc4 | ||
|
|
7527187812 | ||
|
|
b040aef729 | ||
|
|
121de29d80 | ||
|
|
df3567a61f | ||
|
|
af763d73c1 | ||
|
|
b9f128f8c7 | ||
|
|
478ccf3eda | ||
|
|
b4779bb49b | ||
|
|
4e1f8c5a24 | ||
|
|
f4a583aa63 | ||
|
|
8c97768d74 | ||
|
|
9c3f652553 | ||
|
|
a3692db354 | ||
|
|
33d7c6ba52 | ||
|
|
4f9431b23e | ||
|
|
0b458ce8c8 | ||
|
|
7f42080a38 | ||
|
|
a8b2b241d1 | ||
|
|
b9dacf5537 | ||
|
|
d92ee1a003 | ||
|
|
4663ae7834 | ||
|
|
2311125d92 | ||
|
|
2807489f2b | ||
|
|
0ea7c69b25 | ||
|
|
bb433b4afb | ||
|
|
84f13cdb93 | ||
|
|
f4a01abffb | ||
|
|
9bc846249e | ||
|
|
cf8dd5ec2c | ||
|
|
2dd58cc894 | ||
|
|
5934430bfc | ||
|
|
2879557d6c | ||
|
|
c67e639dee | ||
|
|
7e61a543e7 | ||
|
|
9cec7fa459 | ||
|
|
75dad6e75d | ||
|
|
0f9eb1bc0b | ||
|
|
63707f0a18 | ||
|
|
0ac37a87bc | ||
|
|
5cc2ec3416 | ||
|
|
412bfcd96b | ||
|
|
d408149720 | ||
|
|
f393962746 | ||
|
|
f4ab00e195 | ||
|
|
651793bffa | ||
|
|
dc87af90ae | ||
|
|
e72df17c38 | ||
|
|
51fab1cbf8 | ||
|
|
1b3df67c47 | ||
|
|
095d68df83 | ||
|
|
5c956a5b15 | ||
|
|
d2e3dc1d89 | ||
|
|
934610522f | ||
|
|
ad4cacd108 | ||
|
|
a55a69487e | ||
|
|
d17969a50d | ||
|
|
ac20897e2a | ||
|
|
c745d55d32 | ||
|
|
2ff4272133 | ||
|
|
1ffe63f9ed | ||
|
|
c80b5e24c6 | ||
|
|
a8c49e1cc4 | ||
|
|
bfe4e5b663 | ||
|
|
2f0d48c01b | ||
|
|
816179edef | ||
|
|
b1a9715c52 | ||
|
|
23602bc8db | ||
|
|
00aef19114 | ||
|
|
38c42fd197 | ||
|
|
4efab56e48 | ||
|
|
12677f1647 | ||
|
|
ffddca2a7d | ||
|
|
6920c999c8 | ||
|
|
fa8bd1c525 | ||
|
|
afa18931c6 | ||
|
|
0ed5e958b1 | ||
|
|
5fb6b416f3 | ||
|
|
ec178bd6d9 | ||
|
|
5b2d764a10 | ||
|
|
e64595a42f | ||
|
|
bd8ebfebcb | ||
|
|
ed6e6c01be | ||
|
|
635f031e2c | ||
|
|
1cbb8e487b | ||
|
|
4eb4efffa2 | ||
|
|
2e8cd3fafd | ||
|
|
882f135abc | ||
|
|
e22229475a | ||
|
|
7e7409de08 | ||
|
|
1d747ffcef | ||
|
|
b19c68c284 | ||
|
|
3673099646 | ||
|
|
2bdacb7507 |
+2
-2
@@ -9,8 +9,8 @@ VITE_CORS_PROXY_SECRET=
|
||||
# Pre-configured defaults enable advanced PDF features out of the box.
|
||||
# For air-gapped / offline deployments, point these to your internal server (e.g., /wasm/pymupdf/).
|
||||
VITE_WASM_PYMUPDF_URL=https://cdn.jsdelivr.net/npm/@bentopdf/[email protected]/
|
||||
VITE_WASM_GS_URL=https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm/assets/
|
||||
VITE_WASM_CPDF_URL=https://cdn.jsdelivr.net/npm/coherentpdf/dist/
|
||||
VITE_WASM_GS_URL=https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm@0.1.1/assets/
|
||||
VITE_WASM_CPDF_URL=https://cdn.jsdelivr.net/npm/coherentpdf@2.5.5/dist/
|
||||
|
||||
# OCR assets (optional)
|
||||
# Set all three together for self-hosted or air-gapped OCR.
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
name: BentoPDF CodeQL config
|
||||
|
||||
paths-ignore:
|
||||
- dist
|
||||
- dist-test
|
||||
- coverage
|
||||
- node_modules
|
||||
- vendor
|
||||
- bentopdf-pymupdf-wasm
|
||||
- libreoffice-wasm-package
|
||||
- bentopdf-airgap-bundle
|
||||
- public/pdfjs-viewer
|
||||
- public/pdfjs-annotation-viewer
|
||||
- public/libreoffice-wasm
|
||||
- public/coherentpdf.browser.min.js
|
||||
- public/workers
|
||||
- public/embedpdf
|
||||
- docs/.vitepress
|
||||
- '**/*.min.js'
|
||||
- '**/*.d.ts'
|
||||
|
||||
query-filters:
|
||||
- exclude:
|
||||
id: js/log-injection
|
||||
- exclude:
|
||||
id: js/tainted-format-string
|
||||
- exclude:
|
||||
id: js/file-system-race
|
||||
@@ -29,6 +29,9 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run tests
|
||||
run: npm run test:run
|
||||
|
||||
- name: Build distribution
|
||||
run: npm run build
|
||||
|
||||
@@ -44,7 +47,9 @@ jobs:
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: dist-${{ steps.version.outputs.version }}.zip
|
||||
files: |
|
||||
dist-${{ steps.version.outputs.version }}.zip
|
||||
dist-simple-${{ steps.version.outputs.version }}.zip
|
||||
generate_release_notes: true
|
||||
draft: false
|
||||
prerelease: false
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
name: CodeQL
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
schedule:
|
||||
- cron: '0 6 * * 1'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze (${{ matrix.language }})
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
security-events: write
|
||||
actions: read
|
||||
contents: read
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [javascript-typescript]
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
queries: security-extended
|
||||
config-file: ./.github/codeql-config.yml
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
with:
|
||||
category: /language:${{ matrix.language }}
|
||||
@@ -0,0 +1,59 @@
|
||||
name: Update Docker Downloads Badge
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '17 4 * * 1'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
concurrency:
|
||||
group: docker-downloads-badge
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
update:
|
||||
if: github.repository == 'alam00000/bentopdf'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Sum GHCR download counts
|
||||
id: counts
|
||||
run: |
|
||||
set -euo pipefail
|
||||
total=0
|
||||
for pkg in bentopdf bentopdf-simple; do
|
||||
raw=$(curl -sf --retry 3 --retry-delay 5 --max-time 30 \
|
||||
"https://ghcr-badge.elias.eu.org/api/alam00000/bentopdf/$pkg" \
|
||||
| jq -e -r '.downloadCountRaw')
|
||||
case "$raw" in ''|*[!0-9]*) echo "::error::invalid count for $pkg: $raw"; exit 1 ;; esac
|
||||
echo "$pkg: $raw"
|
||||
total=$((total + raw))
|
||||
done
|
||||
if [ "$total" -le 0 ]; then echo "::error::total is zero"; exit 1; fi
|
||||
message=$(awk -v n="$total" 'BEGIN{
|
||||
if (n >= 1000000) printf "%.1fM", n/1000000;
|
||||
else if (n >= 1000) printf "%.1fk", n/1000;
|
||||
else printf "%d", n
|
||||
}')
|
||||
echo "total=$total" >> "$GITHUB_OUTPUT"
|
||||
echo "message=$message" >> "$GITHUB_OUTPUT"
|
||||
echo "combined: $total -> $message"
|
||||
|
||||
- name: Publish badge JSON to badges branch
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
MESSAGE: ${{ steps.counts.outputs.message }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
mkdir badges && cd badges
|
||||
jq -n --arg message "$MESSAGE" \
|
||||
'{schemaVersion: 1, label: "Docker Downloads", message: $message, color: "blue", namedLogo: "docker"}' \
|
||||
> docker-downloads.json
|
||||
cat docker-downloads.json
|
||||
git init -q -b badges
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
git add docker-downloads.json
|
||||
git commit -qm "chore: update docker downloads badge ($MESSAGE)"
|
||||
git push -qf "https://x-access-token:${GH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" badges
|
||||
@@ -0,0 +1,35 @@
|
||||
name: SEO audit
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- '**/*.html'
|
||||
- 'public/locales/**'
|
||||
- 'scripts/generate-i18n-pages.mjs'
|
||||
- 'scripts/generate-sitemap.mjs'
|
||||
- 'scripts/seo-audit.mjs'
|
||||
- 'src/partials/**'
|
||||
- 'package.json'
|
||||
- 'package-lock.json'
|
||||
- 'vite.config.ts'
|
||||
|
||||
jobs:
|
||||
audit:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
HUSKY: 0
|
||||
SITE_URL: https://www.bentopdf.com
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: npm
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: Build
|
||||
run: npm run build
|
||||
- name: SEO audit
|
||||
run: npm run seo-audit
|
||||
@@ -1,67 +1,67 @@
|
||||
# Simple workflow for deploying static content to GitHub Pages
|
||||
name: Deploy static content to Pages
|
||||
|
||||
on:
|
||||
# Runs on pushes targeting the default branch
|
||||
push:
|
||||
branches: ["main"]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
||||
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: false
|
||||
|
||||
|
||||
# Configure these variables under your repo settings.
|
||||
# You will likely need to set BASE_URL to be the name of your repo eg 'bentopdf'
|
||||
env:
|
||||
SIMPLE_MODE: ${{ vars.SIMPLE_MODE }}
|
||||
BASE_URL: ${{ vars.BASE_URL }}/
|
||||
HUSKY: 0
|
||||
|
||||
jobs:
|
||||
# Single deploy job since we're just deploying
|
||||
# Simple workflow for deploying static content to GitHub Pages
|
||||
name: Deploy static content to Pages
|
||||
|
||||
on:
|
||||
# Runs on pushes targeting the default branch
|
||||
push:
|
||||
branches: ["main"]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
||||
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: false
|
||||
|
||||
|
||||
# Configure these variables under your repo settings.
|
||||
# You will likely need to set BASE_URL to be the name of your repo eg 'bentopdf'
|
||||
env:
|
||||
SIMPLE_MODE: ${{ vars.SIMPLE_MODE }}
|
||||
BASE_URL: ${{ vars.BASE_URL }}/
|
||||
SITE_URL: ${{ vars.SITE_URL }}
|
||||
HUSKY: 0
|
||||
|
||||
jobs:
|
||||
# Single deploy job since we're just deploying
|
||||
deploy:
|
||||
if: github.repository == 'alam00000/bentopdf'
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: Build distribution
|
||||
run: |
|
||||
# export SIMPLE_MODE=${{ vars.SIMPLE_MODE }}
|
||||
# export BASE_URL=${{ vars.BASE_URL }}/
|
||||
npm run build
|
||||
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v5
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
# Upload entire repository
|
||||
path: dist
|
||||
name: github-pages-deployment
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
with:
|
||||
artifact_name: github-pages-deployment
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: Build distribution
|
||||
run: |
|
||||
# export SIMPLE_MODE=${{ vars.SIMPLE_MODE }}
|
||||
# export BASE_URL=${{ vars.BASE_URL }}/
|
||||
npm run build
|
||||
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v5
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
# Upload entire repository
|
||||
path: dist
|
||||
name: github-pages-deployment
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
with:
|
||||
artifact_name: github-pages-deployment
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
name: Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: tests-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
HUSKY: 0
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Typecheck
|
||||
run: npx tsc --noEmit
|
||||
|
||||
- name: Run tests
|
||||
run: npm run test:run
|
||||
@@ -0,0 +1,198 @@
|
||||
name: Update PDF Engine and Viewer
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '17 4 * * *'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
concurrency:
|
||||
group: update-engine
|
||||
cancel-in-progress: false
|
||||
|
||||
env:
|
||||
FORK_URL: https://github.com/alam00000/bentopdf-pdfium-viewer
|
||||
HUSKY: 0
|
||||
|
||||
jobs:
|
||||
update:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'alam00000/bentopdf'
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Read current upstream marker
|
||||
id: current
|
||||
run: |
|
||||
if [ -f vendor/bentopdf-viewer/.upstream-version ]; then
|
||||
echo "version=$(cat vendor/bentopdf-viewer/.upstream-version)" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "version=" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Read fork HEAD
|
||||
id: upstream
|
||||
run: echo "version=$(git ls-remote "$FORK_URL" refs/heads/main | cut -c1-12)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Should update?
|
||||
id: gate
|
||||
run: |
|
||||
if [ "${{ steps.upstream.outputs.version }}" = "${{ steps.current.outputs.version }}" ]; then
|
||||
echo "run=false" >> "$GITHUB_OUTPUT"
|
||||
echo "Already on ${{ steps.current.outputs.version }}."
|
||||
else
|
||||
echo "run=true" >> "$GITHUB_OUTPUT"
|
||||
echo "Updating ${{ steps.current.outputs.version }} -> ${{ steps.upstream.outputs.version }}"
|
||||
fi
|
||||
|
||||
- name: Setup Node
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
cache: npm
|
||||
|
||||
- name: Enable corepack (pnpm)
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: corepack enable
|
||||
|
||||
- name: Clone the viewer fork
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: git clone --depth 1 --branch main "$FORK_URL" ./_fork
|
||||
|
||||
- name: Require a published engine
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: |
|
||||
test -s ./_fork/packages/pdfium/src/vendor/pdfium.wasm
|
||||
test -s ./_fork/packages/pdfium/src/vendor/pdfium.js
|
||||
|
||||
- name: Pack the engine
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
id: engine
|
||||
run: |
|
||||
set -euo pipefail
|
||||
SHA=${{ steps.upstream.outputs.version }}
|
||||
VENDOR=./_fork/packages/pdfium/src/vendor
|
||||
STAGE=$(mktemp -d)/package
|
||||
mkdir -p "$STAGE"
|
||||
cp "$VENDOR/pdfium.js" "$STAGE/editcore.js"
|
||||
cp "$VENDOR/pdfium.wasm" "$STAGE/editcore.wasm"
|
||||
cat > "$STAGE/package.json" <<JSON
|
||||
{
|
||||
"name": "bentopdf-pdfium",
|
||||
"version": "0.0.0-$SHA",
|
||||
"type": "module",
|
||||
"main": "editcore.js",
|
||||
"exports": { ".": "./editcore.js", "./editcore.wasm": "./editcore.wasm" },
|
||||
"license": "AGPL-3.0"
|
||||
}
|
||||
JSON
|
||||
mkdir -p vendor/bentopdf-pdfium
|
||||
OUT="vendor/bentopdf-pdfium/bentopdf-pdfium-$SHA.tgz"
|
||||
tar -czf "$OUT" -C "$(dirname "$STAGE")" package
|
||||
find vendor/bentopdf-pdfium -maxdepth 1 -name 'bentopdf-pdfium*.tgz' ! -name "$(basename "$OUT")" -delete
|
||||
echo "tarball=$OUT" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Build the viewer
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
working-directory: ./_fork
|
||||
run: |
|
||||
pnpm install --no-frozen-lockfile
|
||||
pnpm run build:snippet
|
||||
|
||||
- name: Pack the viewer without a second engine
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
id: viewer
|
||||
run: |
|
||||
set -euo pipefail
|
||||
SHA=${{ steps.upstream.outputs.version }}
|
||||
WORK=$(mktemp -d)
|
||||
(cd ./_fork && npm pack ./viewers/snippet --pack-destination "$WORK" >/dev/null)
|
||||
TMP=$(mktemp -d)
|
||||
tar -xzf "$WORK"/*.tgz -C "$TMP"
|
||||
rm -f "$TMP/package/dist/pdfium.wasm"
|
||||
PKG="$TMP/package/package.json" node - <<'NODE'
|
||||
const fs = require('fs');
|
||||
const p = process.env.PKG;
|
||||
const pkg = JSON.parse(fs.readFileSync(p, 'utf8'));
|
||||
pkg.name = 'bentopdf-viewer';
|
||||
pkg.dependencies = pkg.dependencies || {};
|
||||
// The rollup bundle inlines every @embedpdf/* package, so these
|
||||
// declared deps would only pull unused copies from upstream npm.
|
||||
for (const k of Object.keys(pkg.dependencies)) {
|
||||
if (k.startsWith('@embedpdf/')) delete pkg.dependencies[k];
|
||||
if (k === 'preact') pkg.dependencies[k] = '^10.17.0';
|
||||
}
|
||||
fs.writeFileSync(p, JSON.stringify(pkg, null, 2) + '\n');
|
||||
NODE
|
||||
mkdir -p vendor/bentopdf-viewer
|
||||
OUT="vendor/bentopdf-viewer/bentopdf-viewer-$SHA.tgz"
|
||||
tar -czf "$OUT" -C "$TMP" package
|
||||
find vendor/bentopdf-viewer -maxdepth 1 -name 'bentopdf-viewer-*.tgz' ! -name "$(basename "$OUT")" -delete
|
||||
echo "tarball=$OUT" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Point dependencies at the new tarballs
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: |
|
||||
node -e "
|
||||
const fs = require('fs');
|
||||
const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
|
||||
pkg.dependencies['bentopdf-pdfium'] = 'file:' + process.argv[1];
|
||||
pkg.dependencies['bentopdf-viewer'] = 'file:' + process.argv[2];
|
||||
fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2) + '\n');
|
||||
" "${{ steps.engine.outputs.tarball }}" "${{ steps.viewer.outputs.tarball }}"
|
||||
|
||||
- name: Cleanup upstream clone
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: rm -rf ./_fork
|
||||
|
||||
- name: Install and verify one shared engine
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: |
|
||||
set -euo pipefail
|
||||
npm install
|
||||
test -s node_modules/bentopdf-pdfium/editcore.wasm
|
||||
if find node_modules/bentopdf-viewer -name '*.wasm' | grep -q .; then
|
||||
echo "::error::viewer package still ships a wasm; the engine would be duplicated"
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -q "bentopdf-pdfium/editcore.wasm" src/js/logic/edit-pdf-page.ts; then
|
||||
echo "::error::the PDF editor no longer points at the shared engine"
|
||||
exit 1
|
||||
fi
|
||||
echo "engine sha256: $(sha256sum node_modules/bentopdf-pdfium/editcore.wasm | cut -c1-16)"
|
||||
|
||||
- name: Typecheck and test
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: |
|
||||
npx tsc --noEmit
|
||||
npm run test:run
|
||||
|
||||
- name: Write upstream marker
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: |
|
||||
echo "${{ steps.upstream.outputs.version }}" > vendor/bentopdf-viewer/.upstream-version
|
||||
echo "${{ steps.upstream.outputs.version }}" > vendor/bentopdf-pdfium/.upstream-version
|
||||
|
||||
- name: Create Pull Request
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
uses: peter-evans/create-pull-request@v6
|
||||
with:
|
||||
commit-message: 'build(deps): bump PDF engine and viewer to ${{ steps.upstream.outputs.version }}'
|
||||
title: 'build(deps): bump PDF engine and viewer to ${{ steps.upstream.outputs.version }}'
|
||||
body: |
|
||||
Both vendored packages built from one clone of the viewer fork at
|
||||
`${{ steps.upstream.outputs.version }}`, so the text editor and the
|
||||
PDF editor run the same engine.
|
||||
|
||||
- `bentopdf-pdfium` — the engine wasm, packed from the fork's published `src/vendor`
|
||||
- `bentopdf-viewer` — the snippet bundle, packed **without** `dist/pdfium.wasm`
|
||||
|
||||
The viewer loads the shared engine through `EmbedPDF.init({ wasmUrl })`.
|
||||
CI verified a single wasm on disk, typecheck, and the test suite.
|
||||
branch: chore/update-pdf-engine
|
||||
delete-branch: true
|
||||
@@ -1,141 +0,0 @@
|
||||
name: Update EmbedPDF Snippet
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
update-snippet:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Read current upstream version marker
|
||||
id: current-version
|
||||
run: |
|
||||
if [ -f vendor/embedpdf/.upstream-version ]; then
|
||||
CUR=$(cat vendor/embedpdf/.upstream-version)
|
||||
else
|
||||
CUR=""
|
||||
fi
|
||||
echo "version=$CUR" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Read latest upstream version (@embedpdf/core)
|
||||
id: upstream-version
|
||||
run: |
|
||||
LATEST=$(npm view @embedpdf/core version)
|
||||
echo "version=$LATEST" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Should update?
|
||||
id: gate
|
||||
run: |
|
||||
if [ "${{ steps.upstream-version.outputs.version }}" = "${{ steps.current-version.outputs.version }}" ]; then
|
||||
echo "run=false" >> "$GITHUB_OUTPUT"
|
||||
echo "No upstream version change detected."
|
||||
else
|
||||
echo "run=true" >> "$GITHUB_OUTPUT"
|
||||
echo "Updating from '${{ steps.current-version.outputs.version }}' to '${{ steps.upstream-version.outputs.version }}'"
|
||||
fi
|
||||
|
||||
- name: Enable corepack (pnpm)
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: corepack enable
|
||||
|
||||
- name: Prepare workspace
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: |
|
||||
mkdir -p vendor/embedpdf
|
||||
npm config set cache ./\.npm-cache
|
||||
|
||||
- name: Clone upstream embed-pdf-viewer
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: git clone --depth 1 --branch main https://github.com/embedpdf/embed-pdf-viewer ./_upstream/embed-pdf-viewer
|
||||
|
||||
- name: Setup Node
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: npm
|
||||
|
||||
- name: Install upstream deps
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
working-directory: ./_upstream/embed-pdf-viewer
|
||||
run: pnpm install --no-frozen-lockfile
|
||||
|
||||
- name: Build snippet
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
working-directory: ./_upstream/embed-pdf-viewer
|
||||
run: pnpm run build:snippet
|
||||
|
||||
- name: Pack snippet tarball
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
working-directory: ./_upstream/embed-pdf-viewer
|
||||
run: |
|
||||
npm pack ./viewers/snippet --pack-destination ../../vendor/embedpdf
|
||||
ls -l ../../vendor/embedpdf
|
||||
|
||||
- name: Sanitize tarball (rename pkg and pin deps)
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
env:
|
||||
UPSTREAM_VERSION: ${{ steps.upstream-version.outputs.version }}
|
||||
run: |
|
||||
TARBALL=$(ls vendor/embedpdf/*.tgz | sort | tail -n1)
|
||||
TMP=$(mktemp -d)
|
||||
tar -xzf "$TARBALL" -C "$TMP"
|
||||
PKG="$TMP/package/package.json"
|
||||
PKG="$PKG" node - <<'NODE'
|
||||
const fs = require("fs");
|
||||
const path = process.env.PKG;
|
||||
const ver = process.env.UPSTREAM_VERSION || "1.4.1";
|
||||
const pkg = JSON.parse(fs.readFileSync(path, "utf8"));
|
||||
pkg.name = "embedpdf-snippet";
|
||||
pkg.dependencies = pkg.dependencies || {};
|
||||
for (const k of Object.keys(pkg.dependencies)) {
|
||||
if (k.startsWith("@embedpdf/")) pkg.dependencies[k] = `^${ver}`;
|
||||
if (k === "preact") pkg.dependencies[k] = "^10.17.0";
|
||||
}
|
||||
fs.writeFileSync(path, JSON.stringify(pkg, null, 2) + "\n");
|
||||
NODE
|
||||
NEW=vendor/embedpdf/embedpdf-snippet-${UPSTREAM_VERSION}.tgz
|
||||
tar -czf "$NEW" -C "$TMP" package
|
||||
# Remove any older snippet tarballs, keep only the new one
|
||||
find vendor/embedpdf -maxdepth 1 -name 'embedpdf-snippet-*.tgz' ! -name "$(basename "$NEW")" -delete
|
||||
rm -rf "$TMP"
|
||||
ls -l vendor/embedpdf
|
||||
|
||||
- name: Update package.json dependency path
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: |
|
||||
TARBALL=$(ls vendor/embedpdf/embedpdf-snippet-*.tgz | sort | tail -n1)
|
||||
node -e "const fs=require('fs');const pkg=require('./package.json');const tar=process.argv[1];pkg.dependencies['embedpdf-snippet']='file:'+tar;fs.writeFileSync('package.json',JSON.stringify(pkg,null,2)+'\n');" "$TARBALL"
|
||||
|
||||
- name: Refresh lockfile
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: npm install --package-lock-only --ignore-scripts
|
||||
|
||||
- name: Write upstream version marker
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: |
|
||||
echo "${{ steps.upstream-version.outputs.version }}" > vendor/embedpdf/.upstream-version
|
||||
|
||||
- name: Cleanup upstream clone
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
run: rm -rf ./_upstream
|
||||
|
||||
- name: Create Pull Request
|
||||
if: steps.gate.outputs.run == 'true'
|
||||
uses: peter-evans/create-pull-request@v6
|
||||
with:
|
||||
commit-message: "build(deps): bump embedpdf-snippet from ${{ steps.current-version.outputs.version }} to ${{ steps.upstream-version.outputs.version }}"
|
||||
title: "build(deps): bump embedpdf-snippet from ${{ steps.current-version.outputs.version }} to ${{ steps.upstream-version.outputs.version }}"
|
||||
body: |
|
||||
- Build snippet from upstream embed-pdf-viewer via `npm run build:snippet`
|
||||
- Pack tarball into `vendor/embedpdf/` and point dependency to it
|
||||
- Refresh package-lock.json
|
||||
branch: chore/update-embedpdf-snippet
|
||||
delete-branch: true
|
||||
+14
-2
@@ -33,12 +33,24 @@ coverage/
|
||||
# Generated sitemap
|
||||
public/sitemap.xml
|
||||
|
||||
# Generated by scripts/generate-security-headers.mjs at build time
|
||||
security-headers.conf
|
||||
|
||||
# CodeQL local scan artifacts (npm run security:codeql)
|
||||
codeql-db/
|
||||
codeql-results.sarif
|
||||
codeql-results.csv
|
||||
|
||||
#backup
|
||||
.seo-backup
|
||||
libreoffice-wasm-package
|
||||
|
||||
# helm chart
|
||||
bentopdf-*.tgz
|
||||
/bentopdf-*.tgz
|
||||
|
||||
# test
|
||||
dist-test
|
||||
dist-test
|
||||
test
|
||||
# Sibling checkouts of the engine/viewer forks
|
||||
bentopdf-pdfium-viewer/
|
||||
bentopdf-pymupdf-wasm/
|
||||
|
||||
@@ -12,8 +12,14 @@ Header always set Referrer-Policy "strict-origin-when-cross-origin"
|
||||
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
|
||||
Header always set Cross-Origin-Opener-Policy "same-origin"
|
||||
Header always set Cross-Origin-Embedder-Policy "require-corp"
|
||||
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'wasm-unsafe-eval' 'unsafe-eval' blob: https://cdn.jsdelivr.net; worker-src 'self' blob:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: blob: https:; font-src 'self' data: https://fonts.gstatic.com https://rawcdn.githack.com; connect-src 'self' blob: https://api.github.com https://fonts.gstatic.com https://cdn.jsdelivr.net https://bentopdf-cors-proxy.bentopdf.workers.dev https://rawcdn.githack.com; object-src 'none'; base-uri 'self'; frame-src 'self' blob:; frame-ancestors 'self'; form-action 'self'"
|
||||
</IfModule>
|
||||
|
||||
# Block source maps from being served
|
||||
<FilesMatch "\.map$">
|
||||
Require all denied
|
||||
</FilesMatch>
|
||||
|
||||
# ============================================
|
||||
# 2. BROWSER CACHING
|
||||
# ============================================
|
||||
|
||||
+4
-2
@@ -1,3 +1,5 @@
|
||||
# Dockerfile.nonroot intentionally starts as root to support PUID/PGID (LSIO pattern).
|
||||
# The entrypoint.sh creates the user at runtime and drops privileges via su-exec.
|
||||
DS-0002
|
||||
|
||||
KSV-0125
|
||||
|
||||
DS-0013
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
name="description"
|
||||
content="Oops! The page you're looking for doesn't exist. Return to BentoPDF's homepage to access our free PDF tools."
|
||||
/>
|
||||
<meta name="robots" content="noindex, follow" />
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="https://www.bentopdf.com/404.html" />
|
||||
<link rel="canonical" href="https://www.bentopdf.com/404" />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website" />
|
||||
@@ -128,25 +128,25 @@
|
||||
<p class="text-gray-500 mb-4">Or try these popular tools:</p>
|
||||
<div class="flex flex-wrap justify-center gap-3">
|
||||
<a
|
||||
href="/src/pages/merge-pdf.html"
|
||||
href="/merge-pdf"
|
||||
class="px-4 py-2 bg-gray-800 text-gray-300 rounded-lg hover:bg-gray-700 hover:text-white transition-colors text-sm"
|
||||
>
|
||||
Merge PDF
|
||||
</a>
|
||||
<a
|
||||
href="/src/pages/split-pdf.html"
|
||||
href="/split-pdf"
|
||||
class="px-4 py-2 bg-gray-800 text-gray-300 rounded-lg hover:bg-gray-700 hover:text-white transition-colors text-sm"
|
||||
>
|
||||
Split PDF
|
||||
</a>
|
||||
<a
|
||||
href="/src/pages/compress-pdf.html"
|
||||
href="/compress-pdf"
|
||||
class="px-4 py-2 bg-gray-800 text-gray-300 rounded-lg hover:bg-gray-700 hover:text-white transition-colors text-sm"
|
||||
>
|
||||
Compress PDF
|
||||
</a>
|
||||
<a
|
||||
href="/src/pages/edit-pdf.html"
|
||||
href="/edit-pdf"
|
||||
class="px-4 py-2 bg-gray-800 text-gray-300 rounded-lg hover:bg-gray-700 hover:text-white transition-colors text-sm"
|
||||
>
|
||||
Edit PDF
|
||||
@@ -159,7 +159,6 @@
|
||||
{{> footer }}
|
||||
|
||||
<script type="module" src="src/js/utils/lucide-init.ts"></script>
|
||||
<script type="module" src="src/version.ts"></script>
|
||||
<script type="module" src="src/js/main.ts"></script>
|
||||
<script type="module" src="src/js/mobileMenu.ts"></script>
|
||||
|
||||
|
||||
+1
-1
@@ -81,7 +81,7 @@ When submitting code contributions, please use our [pull request template](.gith
|
||||
|
||||
```bash
|
||||
git clone https://github.com/alam00000/bentopdf.git
|
||||
cd bento-pdf
|
||||
cd bentopdf
|
||||
npm install
|
||||
```
|
||||
|
||||
|
||||
+18
-7
@@ -19,6 +19,8 @@ COPY . .
|
||||
# Pass SIMPLE_MODE environment variable if provided
|
||||
ARG SIMPLE_MODE=false
|
||||
ENV SIMPLE_MODE=$SIMPLE_MODE
|
||||
ARG DISABLE_GITHUB_STARS=false
|
||||
ENV DISABLE_GITHUB_STARS=$DISABLE_GITHUB_STARS
|
||||
ARG COMPRESSION_MODE=all
|
||||
ENV COMPRESSION_MODE=$COMPRESSION_MODE
|
||||
|
||||
@@ -62,17 +64,22 @@ ENV VITE_FOOTER_TEXT=$VITE_FOOTER_TEXT
|
||||
ARG DISABLE_TOOLS
|
||||
ENV DISABLE_TOOLS=$DISABLE_TOOLS
|
||||
|
||||
# Public-facing canonical site URL. Defaults to the official site so self-hosters
|
||||
# consolidate SEO signals back to bentopdf.com. Override with --build-arg
|
||||
# SITE_URL=https://your-domain.example to claim canonical for your own deployment.
|
||||
ARG SITE_URL=https://www.bentopdf.com
|
||||
ENV SITE_URL=$SITE_URL
|
||||
|
||||
ENV NODE_OPTIONS="--max-old-space-size=3072"
|
||||
|
||||
RUN --mount=type=secret,id=VITE_CORS_PROXY_URL \
|
||||
--mount=type=secret,id=VITE_CORS_PROXY_SECRET \
|
||||
RUN --mount=type=secret,id=VITE_CORS_PROXY_URL,required=false \
|
||||
--mount=type=secret,id=VITE_CORS_PROXY_SECRET,required=false \
|
||||
VITE_CORS_PROXY_URL=$(cat /run/secrets/VITE_CORS_PROXY_URL 2>/dev/null || echo "") \
|
||||
VITE_CORS_PROXY_SECRET=$(cat /run/secrets/VITE_CORS_PROXY_SECRET 2>/dev/null || echo "") \
|
||||
npm run build:with-docs
|
||||
|
||||
# Production stage
|
||||
# TODO@ALAM: Change to quay once fixed
|
||||
FROM nginx:1.28.3-alpine-slim
|
||||
FROM quay.io/nginx/nginx-unprivileged:alpine-slim
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/alam00000/bentopdf"
|
||||
LABEL org.opencontainers.image.url="https://github.com/alam00000/bentopdf"
|
||||
@@ -82,15 +89,19 @@ ARG BASE_URL
|
||||
|
||||
# Set this to "true" to disable Nginx listening on IPv6
|
||||
ENV DISABLE_IPV6=false
|
||||
ENV PORT=8080
|
||||
|
||||
USER root
|
||||
RUN apk upgrade --no-cache
|
||||
USER nginx
|
||||
|
||||
COPY --chown=nginx:nginx --from=builder /app/dist /usr/share/nginx/html${BASE_URL%/}
|
||||
COPY --chown=nginx:nginx nginx.conf /etc/nginx/nginx.conf
|
||||
COPY --chown=nginx:nginx --from=builder /app/security-headers.conf /etc/nginx/security-headers.conf
|
||||
COPY --chown=nginx:nginx --from=builder /app/security-headers-docs.conf /etc/nginx/security-headers-docs.conf
|
||||
COPY --chown=nginx:nginx --chmod=755 nginx-ipv6.sh /docker-entrypoint.d/99-disable-ipv6.sh
|
||||
RUN mkdir -p /etc/nginx/tmp /var/cache/nginx && chown -R nginx:nginx /etc/nginx/tmp /var/cache/nginx
|
||||
|
||||
USER nginx
|
||||
COPY --chown=nginx:nginx --chmod=755 nginx-noindex.sh /docker-entrypoint.d/98-noindex.sh
|
||||
RUN mkdir -p /etc/nginx/tmp && chown -R nginx:nginx /etc/nginx/tmp
|
||||
|
||||
EXPOSE 8080
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
|
||||
+13
-3
@@ -19,6 +19,8 @@ COPY . .
|
||||
|
||||
ARG SIMPLE_MODE=false
|
||||
ENV SIMPLE_MODE=$SIMPLE_MODE
|
||||
ARG DISABLE_GITHUB_STARS=false
|
||||
ENV DISABLE_GITHUB_STARS=$DISABLE_GITHUB_STARS
|
||||
ARG COMPRESSION_MODE=all
|
||||
ENV COMPRESSION_MODE=$COMPRESSION_MODE
|
||||
|
||||
@@ -55,16 +57,20 @@ ENV VITE_BRAND_NAME=$VITE_BRAND_NAME
|
||||
ENV VITE_BRAND_LOGO=$VITE_BRAND_LOGO
|
||||
ENV VITE_FOOTER_TEXT=$VITE_FOOTER_TEXT
|
||||
|
||||
# Public-facing canonical site URL. See Dockerfile for details.
|
||||
ARG SITE_URL=https://www.bentopdf.com
|
||||
ENV SITE_URL=$SITE_URL
|
||||
|
||||
ENV NODE_OPTIONS="--max-old-space-size=3072"
|
||||
|
||||
RUN --mount=type=secret,id=VITE_CORS_PROXY_URL \
|
||||
--mount=type=secret,id=VITE_CORS_PROXY_SECRET \
|
||||
RUN --mount=type=secret,id=VITE_CORS_PROXY_URL,required=false \
|
||||
--mount=type=secret,id=VITE_CORS_PROXY_SECRET,required=false \
|
||||
VITE_CORS_PROXY_URL=$(cat /run/secrets/VITE_CORS_PROXY_URL 2>/dev/null || echo "") \
|
||||
VITE_CORS_PROXY_SECRET=$(cat /run/secrets/VITE_CORS_PROXY_SECRET 2>/dev/null || echo "") \
|
||||
npm run build:with-docs
|
||||
|
||||
# Production stage — uses standard nginx (starts as root, drops to PUID/PGID)
|
||||
FROM nginx:1.28.3-alpine-slim
|
||||
FROM nginx:alpine-slim
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/alam00000/bentopdf"
|
||||
LABEL org.opencontainers.image.url="https://github.com/alam00000/bentopdf"
|
||||
@@ -74,12 +80,16 @@ ARG BASE_URL
|
||||
ENV PUID=1000
|
||||
ENV PGID=1000
|
||||
ENV DISABLE_IPV6=false
|
||||
ENV PORT=8080
|
||||
|
||||
RUN apk upgrade --no-cache && apk add --no-cache su-exec
|
||||
|
||||
COPY --from=builder /app/dist /usr/share/nginx/html${BASE_URL%/}
|
||||
COPY nginx.conf /etc/nginx/nginx.conf
|
||||
COPY --from=builder /app/security-headers.conf /etc/nginx/security-headers.conf
|
||||
COPY --from=builder /app/security-headers-docs.conf /etc/nginx/security-headers-docs.conf
|
||||
COPY --chmod=755 entrypoint.sh /entrypoint.sh
|
||||
COPY --chmod=755 nginx-noindex.sh /usr/local/bin/bentopdf-noindex.sh
|
||||
|
||||
RUN mkdir -p /etc/nginx/tmp \
|
||||
/var/cache/nginx/client_temp \
|
||||
|
||||
@@ -6,17 +6,13 @@
|
||||
</a>
|
||||
</p>
|
||||
|
||||
**BentoPDF** is a powerful, privacy-first, client-side PDF toolkit that is self hostable and allows you to manipulate, edit, merge, and process PDF files directly in your browser. No server-side processing is required, ensuring your files remain secure and private.
|
||||
**BentoPDF** is a powerful, privacy-first, client-side PDF toolkit that is self-hostable and allows you to manipulate, edit, merge, and process PDF files directly in your browser. No server-side processing is required, ensuring your files remain secure and private.
|
||||
|
||||
[](https://github.com/alam00000/bentopdf/pkgs/container/bentopdf) [](https://ko-fi.com/alio01) 
|
||||
[](https://github.com/alam00000/bentopdf/pkgs/container/bentopdf-simple) [](https://ko-fi.com/alio01) 
|
||||
[](https://github.com/sponsors/alam00000)
|
||||
|
||||

|
||||
|
||||
### FOSS Hack 2026
|
||||
|
||||
[](https://drive.google.com/file/d/14Vf62PvHiuf1RKFKtMlAzpbf4QQPLpRF/view?usp=sharing)
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
@@ -41,9 +37,11 @@
|
||||
- [Self-Hosting Locally](#-self-hosting-locally)
|
||||
- [Docker Compose / Podman Compose](#-run-with-docker-compose--podman-compose-recommended)
|
||||
- [Podman Quadlet](#-podman-quadlet-systemd-integration)
|
||||
- [Simple Mode](#-simple-mode-for-internal-use)
|
||||
- [Self-Hosted Build (Simple Mode)](#-self-hosted-build-simple-mode)
|
||||
- [Commercial Build](#-commercial-build)
|
||||
- [Custom Branding](#-custom-branding)
|
||||
- [Disabling Specific Tools](#-disabling-specific-tools)
|
||||
- [Disabling the GitHub Star Counter](#-disabling-the-github-star-counter)
|
||||
- [WASM Configuration](#wasm-configuration)
|
||||
- [Air-Gapped / Offline Deployment](#air-gapped--offline-deployment)
|
||||
- [Security Features](#-security-features)
|
||||
@@ -115,7 +113,7 @@ BentoPDF does **not** bundle AGPL-licensed processing libraries in its source co
|
||||
|
||||
## ⭐ Stargazers over time
|
||||
|
||||
[](https://star-history.com/#alam00000/bentopdf&Date)
|
||||
[](https://github.com/alam00000/bentopdf/stargazers)
|
||||
|
||||
---
|
||||
|
||||
@@ -134,7 +132,7 @@ We're incredibly grateful to all our sponsors and supporters who help keep Bento
|
||||
## ✨ Why BentoPDF?
|
||||
|
||||
- **Privacy First**: All processing happens in your browser. Your files are never uploaded to a server, guaranteeing 100% privacy.
|
||||
- **No Limits**: Manipulate as many files as you want, as often you want. There are no restrictions or upload limits.
|
||||
- **No Limits**: Manipulate as many files as you want, as often as you want. There are no restrictions or upload limits.
|
||||
- **High Performance**: Built with modern web technologies, BentoPDF is fast and efficient, handling even large PDF files with ease.
|
||||
- **Completely Free**: BentoPDF is a free and open-source tool for everyone.
|
||||
|
||||
@@ -146,31 +144,31 @@ BentoPDF offers a comprehensive suite of tools to handle all your PDF needs.
|
||||
|
||||
### Organize & Manage PDFs
|
||||
|
||||
| Tool Name | Description |
|
||||
| :--------------------------- | :------------------------------------------------------------------------------------------------------ |
|
||||
| **Merge PDFs** | Combine multiple PDF files into one. Preserves Bookmarks. |
|
||||
| **Split PDFs** | Extract specific pages or divide a document into smaller files. |
|
||||
| **Organize Pages** | Reorder, duplicate, or delete pages with a simple drag-and-drop interface. |
|
||||
| **Extract Pages** | Save a specific range of pages as a new PDF. |
|
||||
| **Delete Pages** | Remove unwanted pages from your document. |
|
||||
| **Rotate PDF** | Rotate individual or all pages in a document. |
|
||||
| **Rotate by Custom Degrees** | Rotate pages by any custom angle. |
|
||||
| **N-Up PDF** | Combine multiple pages onto a single page. |
|
||||
| **View PDF** | A powerful, integrated PDF viewer. |
|
||||
| **Alternate & Mix Pages** | Merge pages by alternating pages from each PDF. Preserves Bookmarks. |
|
||||
| **Posterize PDF** | Split a PDF into multiple smaller pages for print. |
|
||||
| **PDF Multi Tool** | Merge, Split, Organize, Delete, Rotate, Add Blank Pages, Extract and Duplicate in an unified interface. |
|
||||
| **PDF Booklet** | Rearrange pages for double-sided booklet printing. Fold and staple to create a booklet. |
|
||||
| **Add Attachments** | Embed one or more files into your PDF. |
|
||||
| **Extract Attachments** | Extract all embedded files from PDF(s) as a ZIP. |
|
||||
| **Edit Attachments** | View or remove attachments in your PDF. |
|
||||
| **Divide Pages** | Divide pages horizontally or vertically. |
|
||||
| **Combine to Single Page** | Stitch all pages into one continuous scroll. |
|
||||
| **Add Blank Page** | Insert an empty page anywhere in your PDF. |
|
||||
| **Reverse Pages** | Flip the order of all pages in your document. |
|
||||
| **View Metadata** | Inspect the hidden properties of your PDF. |
|
||||
| **PDFs to ZIP** | Package multiple PDF files into a ZIP archive. |
|
||||
| **Compare PDFs** | Compare two PDFs side by side. |
|
||||
| Tool Name | Description |
|
||||
| :--------------------------- | :----------------------------------------------------------------------------------------------------- |
|
||||
| **Merge PDFs** | Combine multiple PDF files into one. Preserves Bookmarks. |
|
||||
| **Split PDFs** | Extract specific pages or divide a document into smaller files. |
|
||||
| **Organize Pages** | Reorder, duplicate, or delete pages with a simple drag-and-drop interface. |
|
||||
| **Extract Pages** | Save a specific range of pages as a new PDF. |
|
||||
| **Delete Pages** | Remove unwanted pages from your document. |
|
||||
| **Rotate PDF** | Rotate individual or all pages in a document. |
|
||||
| **Rotate by Custom Degrees** | Rotate pages by any custom angle. |
|
||||
| **N-Up PDF** | Combine multiple pages onto a single page. |
|
||||
| **View PDF** | A powerful, integrated PDF viewer. |
|
||||
| **Alternate & Mix Pages** | Merge pages by alternating pages from each PDF. Preserves Bookmarks. |
|
||||
| **Posterize PDF** | Split a PDF into multiple smaller pages for print. |
|
||||
| **PDF Multi Tool** | Merge, Split, Organize, Delete, Rotate, Add Blank Pages, Extract and Duplicate in a unified interface. |
|
||||
| **PDF Booklet** | Rearrange pages for double-sided booklet printing. Fold and staple to create a booklet. |
|
||||
| **Add Attachments** | Embed one or more files into your PDF. |
|
||||
| **Extract Attachments** | Extract all embedded files from PDF(s) as a ZIP. |
|
||||
| **Edit Attachments** | View or remove attachments in your PDF. |
|
||||
| **Divide Pages** | Divide pages horizontally or vertically. |
|
||||
| **Combine to Single Page** | Stitch all pages into one continuous scroll. |
|
||||
| **Add Blank Page** | Insert an empty page anywhere in your PDF. |
|
||||
| **Reverse Pages** | Flip the order of all pages in your document. |
|
||||
| **View Metadata** | Inspect the hidden properties of your PDF. |
|
||||
| **PDFs to ZIP** | Package multiple PDF files into a ZIP archive. |
|
||||
| **Compare PDFs** | Compare two PDFs side by side. |
|
||||
|
||||
### Edit & Modify PDFs
|
||||
|
||||
@@ -324,30 +322,38 @@ You can run BentoPDF locally for development or personal use.
|
||||
Run BentoPDF instantly from GitHub Container Registry (Recommended):
|
||||
|
||||
```bash
|
||||
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
|
||||
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
Open your browser at: http://localhost:3000
|
||||
|
||||
> [!TIP]
|
||||
> BentoPDF ships in two builds:
|
||||
>
|
||||
> - **Self-Hosted build** — `ghcr.io/alam00000/bentopdf-simple:latest`. Every PDF tool the public site has, **without** the BentoPDF marketing (no hero, FAQ, testimonials, footer). Use this for internal/team/organization deployments. It is **not** a feature-reduced lite version.
|
||||
> - **Commercial build** — `ghcr.io/alam00000/bentopdf:latest`. The full marketing site, used by bentopdf.com itself and by commercial license holders running public-facing deployments. Includes hero, FAQ, testimonials, and footer.
|
||||
>
|
||||
> If in doubt: pull the Self-Hosted build.
|
||||
|
||||
<details>
|
||||
<summary><b>Alternative: Using Docker Hub or Podman</b></summary>
|
||||
|
||||
**Docker Hub:**
|
||||
|
||||
```bash
|
||||
docker run -p 3000:8080 bentopdfteam/bentopdf:latest
|
||||
docker run -p 3000:8080 bentopdfteam/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
**Podman (GHCR):**
|
||||
|
||||
```bash
|
||||
podman run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
|
||||
podman run -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
**Podman (Docker Hub):**
|
||||
|
||||
```bash
|
||||
podman run -p 3000:8080 docker.io/bentopdfteam/bentopdf:latest
|
||||
podman run -p 3000:8080 docker.io/bentopdfteam/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
@@ -470,8 +476,8 @@ The default URLs are set in `.env.production`:
|
||||
|
||||
```bash
|
||||
VITE_WASM_PYMUPDF_URL=https://cdn.jsdelivr.net/npm/@bentopdf/[email protected]/
|
||||
VITE_WASM_GS_URL=https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm/assets/
|
||||
VITE_WASM_CPDF_URL=https://cdn.jsdelivr.net/npm/coherentpdf/dist/
|
||||
VITE_WASM_GS_URL=https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm@0.1.1/assets/
|
||||
VITE_WASM_CPDF_URL=https://cdn.jsdelivr.net/npm/coherentpdf@2.5.5/dist/
|
||||
VITE_TESSERACT_WORKER_URL=
|
||||
VITE_TESSERACT_CORE_URL=
|
||||
VITE_TESSERACT_LANG_URL=
|
||||
@@ -679,7 +685,7 @@ BentoPDF can also be hosted from a subdirectory (e.g., `example.com/tools/bentop
|
||||
```bash
|
||||
|
||||
# Example:
|
||||
# 1. Build the app with the specific BASE_URL. BASE_URL must have a trailing and leading slash. The BASE_URL can be any url of your choice. Here we are using /tools/bentopdf/ as an example.
|
||||
# 1. Build the app with the specific BASE_URL. BASE_URL must have a trailing and leading slash. The BASE_URL can be any URL of your choice. Here we are using /tools/bentopdf/ as an example.
|
||||
|
||||
BASE_URL=/tools/bentopdf/ npm run build
|
||||
|
||||
@@ -745,8 +751,9 @@ For a more robust setup with auto-restart capabilities:
|
||||
```yaml
|
||||
services:
|
||||
bentopdf:
|
||||
image: ghcr.io/alam00000/bentopdf:latest # Recommended
|
||||
# image: bentopdfteam/bentopdf:latest # Alternative: Docker Hub
|
||||
image: ghcr.io/alam00000/bentopdf-simple:latest # Self-Hosted build (recommended)
|
||||
# image: bentopdfteam/bentopdf-simple:latest # Self-Hosted build (Docker Hub)
|
||||
# image: ghcr.io/alam00000/bentopdf:latest # Commercial build (bentopdf.com / commercial license holders)
|
||||
container_name: bentopdf
|
||||
ports:
|
||||
- '3000:8080'
|
||||
@@ -777,7 +784,7 @@ Description=BentoPDF - Privacy-first PDF toolkit
|
||||
After=network-online.target
|
||||
|
||||
[Container]
|
||||
Image=ghcr.io/alam00000/bentopdf:latest
|
||||
Image=ghcr.io/alam00000/bentopdf-simple:latest
|
||||
ContainerName=bentopdf
|
||||
PublishPort=3000:8080
|
||||
AutoUpdate=registry
|
||||
@@ -798,18 +805,61 @@ systemctl --user enable --now bentopdf
|
||||
|
||||
For detailed Quadlet configuration, see [Self-Hosting Docker Guide](https://bentopdf.com/docs/self-hosting/docker).
|
||||
|
||||
### 🏢 Simple Mode for Internal Use
|
||||
### 🏢 Self-Hosted build (Simple Mode)
|
||||
|
||||
For organizations that want a clean, distraction-free interface focused solely on PDF tools, BentoPDF supports a **Simple Mode** that hides all branding and marketing content.
|
||||
The Self-Hosted build (the `bentopdf-simple` image, also called Simple Mode) is **functionally identical** to the Commercial build. Every PDF tool is present and behaves the same. It just hides the marketing that only makes sense on bentopdf.com itself or on a commercial public-facing deployment. **It is not a feature-reduced or "lite" version.**
|
||||
|
||||
**What Simple Mode does:**
|
||||
**What the Self-Hosted build hides** (cosmetic only, no PDF features are removed):
|
||||
|
||||
- Hides navigation, hero section, features, FAQ, testimonials, and footer
|
||||
- Shows only the essential PDF tools
|
||||
- Navigation bar, hero section, features section, FAQ, testimonials, footer
|
||||
- Updates page title to "PDF Tools"
|
||||
- Perfect for internal company tools and educational institutions
|
||||
|
||||
For more details, see [SIMPLE_MODE.md](SIMPLE_MODE.md).
|
||||
**What the Self-Hosted build keeps** (everything that actually does PDF work):
|
||||
|
||||
- All PDF tools (merge, split, edit, sign, OCR, Office conversion, every other tool)
|
||||
- Custom branding support, all build-time and runtime config
|
||||
|
||||
The Commercial build (`ghcr.io/alam00000/bentopdf:latest`) is what powers bentopdf.com itself and is used by commercial license holders running public-facing deployments. It adds the hero, FAQ, testimonials, and footer that wouldn't make sense on an internal tool.
|
||||
|
||||
If you're self-hosting BentoPDF for your team, organization, or as an internal tool, pull `ghcr.io/alam00000/bentopdf-simple:latest`. For more details, see [SIMPLE_MODE.md](SIMPLE_MODE.md).
|
||||
|
||||
### 🏬 Commercial Build
|
||||
|
||||
The Commercial build (the `bentopdf` image. Note: no `-simple` suffix) is what powers bentopdf.com itself. It includes the full marketing site (hero, features, FAQ, testimonials, footer) on top of every PDF tool. Use this build when you're running BentoPDF as a **public-facing PDF service under your own brand**. For example:
|
||||
|
||||
- You're deploying BentoPDF as a hosted SaaS for end-users (with your own domain and branding)
|
||||
- You want the landing-page experience (marketing sections + tools), not just the tool surface
|
||||
- You're a commercial license holder embedding BentoPDF into a commercial product or workflow
|
||||
|
||||
**Run it as-is** (carries BentoPDF branding by default. Useful to evaluate what the build looks like):
|
||||
|
||||
```bash
|
||||
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
|
||||
```
|
||||
|
||||
**Build with your own brand** (the typical commercial path — replace the BentoPDF logo, name, and footer):
|
||||
|
||||
```bash
|
||||
docker build \
|
||||
--build-arg VITE_BRAND_NAME="AcmePDF" \
|
||||
--build-arg VITE_BRAND_LOGO="images/acme-logo.svg" \
|
||||
--build-arg VITE_FOOTER_TEXT="© 2026 Acme Corp. All rights reserved." \
|
||||
-t acmepdf .
|
||||
|
||||
docker run -p 3000:8080 acmepdf
|
||||
```
|
||||
|
||||
Or set the same variables when building from source — see [Custom Branding](#-custom-branding) below for the full list of options.
|
||||
|
||||
**Combine with other build-time flags** (`BASE_URL`, `VITE_DEFAULT_LANGUAGE`, `DISABLE_TOOLS`, `VITE_USE_CDN`, WASM URL overrides for air-gapped use, etc.) — every option that works on the Self-Hosted build also works here.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> **Licensing**: Running the Commercial build is allowed under both license options BentoPDF ships under:
|
||||
>
|
||||
> - **AGPL-3.0** (free): allowed if your deployment publishes its full source code under AGPL — this includes any branding modifications, custom configuration, and any code you build on top of it.
|
||||
> - **Commercial license** ($79 lifetime): required for closed-source / proprietary deployments — e.g., a private SaaS where you don't open-source your branding fork or surrounding business logic.
|
||||
>
|
||||
> See the [Licensing page](https://bentopdf.com/licensing.html) for the full comparison.
|
||||
|
||||
### 🎨 Custom Branding
|
||||
|
||||
@@ -870,7 +920,7 @@ docker build --build-arg DISABLE_TOOLS="edit-pdf,sign-pdf,encrypt-pdf" -t bentop
|
||||
```bash
|
||||
docker run -d -p 3000:8080 \
|
||||
-v ./config.json:/usr/share/nginx/html/config.json:ro \
|
||||
ghcr.io/alam00000/bentopdf:latest
|
||||
ghcr.io/alam00000/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
Both methods can be combined — the lists are merged. For the full list of tool IDs, see the [self-hosting docs](https://bentopdf.com/docs/self-hosting/docker#disabling-specific-tools).
|
||||
@@ -885,12 +935,30 @@ You can also disable specific features inside the PDF Editor (e.g., redaction, f
|
||||
|
||||
For the full list of editor categories, see the [self-hosting docs](https://bentopdf.com/docs/self-hosting/docker#disabling-editor-features).
|
||||
|
||||
### 🔕 Disabling the GitHub Star Counter
|
||||
|
||||
The navbar shows a live GitHub star count, fetched from `api.github.com` on page load. The only external request that isn't serving a PDF feature. Self-hosters who want zero non-essential network calls can disable it at build time. This removes the fetch code from the bundle entirely and drops `api.github.com` from the Content-Security-Policy.
|
||||
|
||||
Simple Mode builds (`bentopdf-simple`) always skip the star counter — this flag is only needed on the Commercial build or custom full builds.
|
||||
|
||||
**Docker:**
|
||||
|
||||
```bash
|
||||
docker build --build-arg DISABLE_GITHUB_STARS=true -t bentopdf .
|
||||
```
|
||||
|
||||
**Building from source:**
|
||||
|
||||
```bash
|
||||
DISABLE_GITHUB_STARS=true npm run build
|
||||
```
|
||||
|
||||
### 🔒 Security Features
|
||||
|
||||
BentoPDF runs as a non-root user using nginx-unprivileged for enhanced security:
|
||||
|
||||
- **Non-Root Execution**: Container runs with minimal privileges using nginx-unprivileged
|
||||
- **Port 8080**: Uses high port number to avoid requiring root privileges
|
||||
- **Port 8080**: Uses high port number to avoid requiring root privileges (configurable via `PORT` env var)
|
||||
- **Security Best Practices**: Follows Principle of Least Privilege
|
||||
|
||||
#### Basic Usage
|
||||
@@ -900,6 +968,18 @@ docker build -t bentopdf .
|
||||
docker run -p 8080:8080 bentopdf
|
||||
```
|
||||
|
||||
#### Custom Port
|
||||
|
||||
By default, BentoPDF listens on port `8080` inside the container. To change this, set the `PORT` environment variable:
|
||||
|
||||
```bash
|
||||
docker run -p 3000:9090 -e PORT=9090 ghcr.io/alam00000/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
| Variable | Description | Default |
|
||||
| -------- | ------------------------------ | ------- |
|
||||
| `PORT` | Nginx listen port in container | `8080` |
|
||||
|
||||
#### Custom User ID (PUID/PGID)
|
||||
|
||||
For environments that require running as a specific non-root user (e.g., NAS devices, Kubernetes with security contexts), use the non-root Dockerfile:
|
||||
@@ -1041,19 +1121,19 @@ DOCKER_BUILDKIT=1 docker build \
|
||||
|
||||
### 📦 Version Management
|
||||
|
||||
BentoPDF supports semantic versioning with multiple container tags available:
|
||||
BentoPDF publishes two image variants. Both ship the same PDF tools. The difference is purely whether the bentopdf.com marketing is included.
|
||||
|
||||
**GitHub Container Registry (Recommended):**
|
||||
**Self-Hosted build** — recommended for internal/team/organization deployments:
|
||||
|
||||
- **Latest**: `ghcr.io/alam00000/bentopdf-simple:latest`
|
||||
- **Specific Version**: `ghcr.io/alam00000/bentopdf-simple:1.0.0`
|
||||
- **Docker Hub**: `bentopdfteam/bentopdf-simple:latest`
|
||||
|
||||
**Commercial build** — used by bentopdf.com itself and by commercial license holders running public-facing deployments:
|
||||
|
||||
- **Latest**: `ghcr.io/alam00000/bentopdf:latest`
|
||||
- **Specific Version**: `ghcr.io/alam00000/bentopdf:1.0.0`
|
||||
- **Version with Prefix**: `ghcr.io/alam00000/bentopdf:v1.0.0`
|
||||
|
||||
**Docker Hub:**
|
||||
|
||||
- **Latest**: `bentopdfteam/bentopdf:latest`
|
||||
- **Specific Version**: `bentopdfteam/bentopdf:1.0.0`
|
||||
- **Version with Prefix**: `bentopdfteam/bentopdf:v1.0.0`
|
||||
- **Docker Hub**: `bentopdfteam/bentopdf:latest`
|
||||
|
||||
#### Quick Release
|
||||
|
||||
@@ -1088,11 +1168,15 @@ For detailed release instructions, see [RELEASE.md](RELEASE.md).
|
||||
```
|
||||
|
||||
3. **Run the Development Server**:
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
The application will be available at `http://localhost:5173`.
|
||||
|
||||
> The dev server binds to `localhost` only by default. To expose it on your LAN (e.g. for mobile device testing), set `VITE_DEV_HOST=0.0.0.0 npm run dev`. The built-in CORS proxy at `/cors-proxy?url=` restricts targets to a known host allowlist; to permit additional hosts in development, set `VITE_DEV_CORS_PROXY_EXTRA_HOSTS="host1.example.com,host2.example.com"`.
|
||||
|
||||
#### Option 2: Build and Run with Docker Compose
|
||||
|
||||
1. **Clone the Repository**:
|
||||
|
||||
+38
-32
@@ -1,21 +1,25 @@
|
||||
# Simple Mode for BentoPDF
|
||||
# Simple Mode for BentoPDF (the Self-Hosted build)
|
||||
|
||||
Simple Mode is designed for internal organizational use where you want to hide all branding and marketing content, showing only the essential PDF tools for your users.
|
||||
Simple Mode is what powers the **Self-Hosted build** of BentoPDF (`bentopdf-simple`). It is **functionally identical** to the Commercial build that powers bentopdf.com — every PDF tool is present and behaves the same. It just hides the marketing chrome (hero, FAQ, testimonials, footer) that only makes sense on the public bentopdf.com site or on a commercial public-facing deployment.
|
||||
|
||||
## What Simple Mode Does
|
||||
> **Simple Mode is not a feature-reduced "lite" version.** Every PDF tool — merge, split, edit, sign, OCR, Office conversion, every other tool — works identically in both builds. The only difference is the marketing UI around the tools.
|
||||
|
||||
When enabled, Simple Mode will:
|
||||
The Commercial build (`ghcr.io/alam00000/bentopdf:latest`) is used by bentopdf.com itself and by commercial license holders running public-facing PDF deployments where the full marketing site makes sense.
|
||||
|
||||
- Hide the navigation bar
|
||||
- Hide the hero section with marketing content
|
||||
- Hide the features section
|
||||
- Hide the security/compliance section
|
||||
- Hide the FAQ section
|
||||
- Hide the testimonials section
|
||||
- Hide the support section
|
||||
- Hide the footer
|
||||
- Update the page title to "PDF Tools"
|
||||
- Make the tools section more prominent
|
||||
## What Simple Mode Hides
|
||||
|
||||
When enabled, Simple Mode hides the following bentopdf.com-specific marketing UI:
|
||||
|
||||
- Navigation bar
|
||||
- Hero section with marketing content
|
||||
- Features section
|
||||
- Security/compliance section
|
||||
- FAQ section
|
||||
- Testimonials section
|
||||
- Support section
|
||||
- Footer
|
||||
|
||||
It also updates the page title to "PDF Tools" and makes the tools section more prominent. **No PDF tools are removed or disabled.**
|
||||
|
||||
## How to Enable Simple Mode
|
||||
|
||||
@@ -136,20 +140,20 @@ npx serve dist -p 3000
|
||||
|
||||
Open `http://localhost:3000` in your browser.
|
||||
|
||||
### Method 4: Compare Both Modes
|
||||
### Method 4: Compare Both Builds Side-by-Side
|
||||
|
||||
```bash
|
||||
# Test Normal Mode (Docker)
|
||||
# Commercial build (the bentopdf.com look)
|
||||
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
|
||||
|
||||
# Test Simple Mode (Docker)
|
||||
# Self-Hosted build (Simple Mode)
|
||||
docker run -p 3001:8080 ghcr.io/alam00000/bentopdf-simple:latest
|
||||
|
||||
# Podman users: replace 'docker' with 'podman'
|
||||
```
|
||||
|
||||
- Normal Mode: `http://localhost:3000`
|
||||
- Simple Mode: `http://localhost:3001`
|
||||
- Commercial build: `http://localhost:3000`
|
||||
- Self-Hosted build: `http://localhost:3001`
|
||||
|
||||
## 🔍 What to Look For
|
||||
|
||||
@@ -165,19 +169,7 @@ When Simple Mode is working correctly, you should see:
|
||||
|
||||
## 📦 Available Container Images
|
||||
|
||||
### Normal Mode (Full Branding)
|
||||
|
||||
**GitHub Container Registry (Recommended):**
|
||||
|
||||
- `ghcr.io/alam00000/bentopdf:latest`
|
||||
- `ghcr.io/alam00000/bentopdf:v1.0.0` (versioned)
|
||||
|
||||
**Docker Hub:**
|
||||
|
||||
- `bentopdfteam/bentopdf:latest`
|
||||
- `bentopdfteam/bentopdf:v1.0.0` (versioned)
|
||||
|
||||
### Simple Mode (Clean Interface)
|
||||
### Self-Hosted build (Simple Mode) — recommended for self-hosting
|
||||
|
||||
**GitHub Container Registry (Recommended):**
|
||||
|
||||
@@ -189,6 +181,20 @@ When Simple Mode is working correctly, you should see:
|
||||
- `bentopdfteam/bentopdf-simple:latest`
|
||||
- `bentopdfteam/bentopdf-simple:v1.0.0` (versioned)
|
||||
|
||||
### Commercial build — used by bentopdf.com and commercial license holders
|
||||
|
||||
The full marketing site, including hero/FAQ/testimonials/footer. Pull this only if you specifically want the bentopdf.com look — for example, you're running a public-facing PDF deployment under a commercial license.
|
||||
|
||||
**GitHub Container Registry (Recommended):**
|
||||
|
||||
- `ghcr.io/alam00000/bentopdf:latest`
|
||||
- `ghcr.io/alam00000/bentopdf:v1.0.0` (versioned)
|
||||
|
||||
**Docker Hub:**
|
||||
|
||||
- `bentopdfteam/bentopdf:latest`
|
||||
- `bentopdfteam/bentopdf:v1.0.0` (versioned)
|
||||
|
||||
## 🚀 Production Deployment Examples
|
||||
|
||||
### Docker Compose / Podman Compose
|
||||
|
||||
+121
-64
@@ -1,64 +1,121 @@
|
||||
# Hosting BentoPDF as a static website
|
||||
|
||||
As an alternative to runnning BenotPDF locally or in a Docker container, you can very easily host it as a set of static web pages. Here are a few examples:
|
||||
|
||||
## Netlify
|
||||
|
||||
### Netlify - static deployment
|
||||
|
||||
One of simplest ways to host BentoPDF is to create a project at [Netlify](https://www.netlify.com/) and create a static deployment. You can accomplish this by first downloading the pre-built distribution file from our [GitHub releases](https://github.com/alam00000/bentopdf/releases). Each release includes a `dist-{version}.zip` file that contains all necessary files for self-hosting.
|
||||
|
||||
1. Go to [BentoPDF Releases](https://github.com/alam00000/bentopdf/releases)
|
||||
2. Download the latest `dist-{version}.zip` file
|
||||
3. Next, if you have not already done so, create a Netlify account and log in.
|
||||
4. From your Netlify projects page, add a new project and select "Deploy manually".
|
||||
5. Drag and drop to upload the Bentopdf zip file you downloaded in step 3.
|
||||
6. Your BentoPDF deployment should now be working! Optionally, you can go into Project Configuration and change the project name.
|
||||
|
||||
When a new BentoPDF release becomes available, you will need to repeat steps 1-3, then go into "Deploys" and upload the new release.
|
||||
|
||||
### Netlify - dynamic deployment
|
||||
|
||||
Alternatively, you can configure a Netlify project to automatically deploy whenever your BentoPDF is updated.
|
||||
|
||||
1. If you have not done so already, create a fork of BentoPDF into your own Github account.
|
||||
2. If you have not already done so, create a Netlify account and log in.
|
||||
3. From your Netlify projects page, add a new project and select 'Import an existing project'.
|
||||
4. Select the GitHub button, authorize Netlify, then choose where to install the integration. You can choose 'All repositories' or 'Only select repositories' and choose your BentoPDF fork.
|
||||
5. Select your repo and give it a project name. (add environment variables?) Then click the blue 'Deploy' button.
|
||||
6. The Netlify build & deploy process will kick off. Once it finishes, you can click on the provided URL `https://[projectname]/netlify.app` to view your deployment of BentoPDF.
|
||||
|
||||
Whenever the BentoPDF source code is updated, you can sync the changes into your repo. This will kick off a new build and deploy within Netlify.
|
||||
|
||||
If you want to use BentoPDF's simple mode, go into Deploy Settings, then Environment Variables, and Add a variable. Add `SIMPLE_MODE` and set it to `true`. You will need to manually kick a new build to get this to take effect.
|
||||
|
||||
## Vercel
|
||||
|
||||
Vercel provides similar services to Netlify dynamic hosting.
|
||||
|
||||
1. If you have not done so already, create a fork of BentoPDF into your own Github account.
|
||||
2. If you have not already done so, create a Vercel account and log in.
|
||||
3. From your Vercel Overview page, select 'Add new project'
|
||||
4. Under 'Import Git Repository' and then choose 'Add GitHub Account'. Follow the prompts to authorize Vercel integration. You can choose 'All repositories' or 'Only select repositories' and choose your BentoPDF fork.
|
||||
5. Select 'Import' to import the repo into Vercel.
|
||||
6. Under 'Framework Preset', select 'Vite' and save the settings.
|
||||
7. The Vercel build & deploy process will kick off. Once it finishes, you can click on the provided link to view your deployment of BentoPDF.
|
||||
|
||||
Whenever the BentoPDF source code is updated, you can sync the changes into your repo. This will kick off a new build and deploy within BentoPDF.
|
||||
|
||||
If you want to use BentoPDF's simple mode, go into Project Settings, then Environment Variables, and Create a new variable. Add `SIMPLE_MODE` and set it to `true`. You will need to redeploy to get this to take effect.
|
||||
|
||||
## GitHub Pages
|
||||
|
||||
You can also host your own instance of BentoPDF using GitHub pages. An advantage of this over the other options is you are able to do everything in GitHub without any third party service.
|
||||
|
||||
1. If you have not done so already, create a fork of BentoPDF into your own Github account.
|
||||
2. From your fork, go to `Settings->Pages`, and change the 'Source' to 'GitHub Actions'
|
||||
3. Go to `Settings->Secrets and Variables > Actions`, then select 'Variables', and add the repository variable `BASE_URL`. Set the value to `/bentopdf`. *If you've renamed the repo to something other than bentopdf, put that here*.
|
||||
4. Go to `Actions` in the top menu, and select 'I understand' to enable Actions
|
||||
5. Within Actions, on the left, select 'Deploy static content to Pages', and then on the right select 'Run workflow', and in the dropdown, 'Run Workflow'. The action will now run to build BentoPDF and deploy it to GitHub Pages.
|
||||
|
||||
When the build completes, you can find the website at `https://[your-github-username]/bentopdf`
|
||||
|
||||
|
||||
If/when you merge changes from the source BentoPDF repository, the build and deploy action will automatically be kicked off and the new version will be automatically deployed to GitHub Pages.
|
||||
# Hosting BentoPDF as a static website
|
||||
|
||||
As an alternative to running BentoPDF locally or in a Docker container, you can easily host it as a set of static web pages. Here are a few examples:
|
||||
|
||||
## Netlify
|
||||
|
||||
### Netlify - static deployment
|
||||
|
||||
One of the simplest ways to host BentoPDF is to create a project at [Netlify](https://www.netlify.com/) and create a static deployment. You can accomplish this by first downloading the pre-built distribution file from our [GitHub releases](https://github.com/alam00000/bentopdf/releases). Each release includes a `dist-{version}.zip` file that contains all necessary files for self-hosting.
|
||||
|
||||
1. Go to [BentoPDF Releases](https://github.com/alam00000/bentopdf/releases)
|
||||
2. Download the latest `dist-{version}.zip` file
|
||||
3. Next, if you have not already done so, create a Netlify account and log in.
|
||||
4. From your Netlify projects page, add a new project and select "Deploy manually".
|
||||
5. Drag and drop to upload the BentoPDF zip file you downloaded in step 2.
|
||||
6. Your BentoPDF deployment should now be working! Optionally, you can go into Project Configuration and change the project name.
|
||||
|
||||
When a new BentoPDF release becomes available, you will need to repeat steps 1-3, then go into "Deploys" and upload the new release.
|
||||
|
||||
### Netlify - dynamic deployment
|
||||
|
||||
Alternatively, you can configure a Netlify project to automatically deploy whenever your BentoPDF is updated.
|
||||
|
||||
1. If you have not done so already, create a fork of BentoPDF into your own GitHub account.
|
||||
2. If you have not already done so, create a Netlify account and log in.
|
||||
3. From your Netlify projects page, add a new project and select 'Import an existing project'.
|
||||
4. Select the GitHub button, authorize Netlify, then choose where to install the integration. You can choose 'All repositories' or 'Only select repositories' and choose your BentoPDF fork.
|
||||
5. Select your repo and give it a project name. (add environment variables?) Then click the blue 'Deploy' button.
|
||||
6. The Netlify build & deploy process will kick off. Once it finishes, you can click on the provided URL `https://[projectname]/netlify.app` to view your deployment of BentoPDF.
|
||||
|
||||
Whenever the BentoPDF source code is updated, you can sync the changes into your repo. This will kick off a new build and deploy within Netlify.
|
||||
|
||||
If you want to use BentoPDF's simple mode, go into Deploy Settings, then Environment Variables, and Add a variable. Add `SIMPLE_MODE` and set it to `true`. You will need to manually kick a new build to get this to take effect.
|
||||
|
||||
## Vercel
|
||||
|
||||
Vercel provides similar services to Netlify dynamic hosting.
|
||||
|
||||
1. If you have not done so already, create a fork of BentoPDF into your own GitHub account.
|
||||
2. If you have not already done so, create a Vercel account and log in.
|
||||
3. From your Vercel Overview page, select 'Add new project'
|
||||
4. Under 'Import Git Repository' and then choose 'Add GitHub Account'. Follow the prompts to authorize Vercel integration. You can choose 'All repositories' or 'Only select repositories' and choose your BentoPDF fork.
|
||||
5. Select 'Import' to import the repo into Vercel.
|
||||
6. Under 'Framework Preset', select 'Vite' and save the settings.
|
||||
7. The Vercel build & deploy process will kick off. Once it finishes, you can click on the provided link to view your deployment of BentoPDF.
|
||||
|
||||
Whenever the BentoPDF source code is updated, you can sync the changes into your repo. This will kick off a new build and deploy within Vercel.
|
||||
|
||||
If you want to use BentoPDF's simple mode, go into Project Settings, then Environment Variables, and Create a new variable. Add `SIMPLE_MODE` and set it to `true`. You will need to redeploy to get this to take effect.
|
||||
|
||||
## GitHub Pages
|
||||
|
||||
You can also host your own instance of BentoPDF using GitHub Pages. An advantage of this over the other options is you are able to do everything in GitHub without any third-party service.
|
||||
|
||||
1. If you have not done so already, create a fork of BentoPDF into your own GitHub account.
|
||||
2. From your fork, go to `Settings->Pages`, and change the 'Source' to 'GitHub Actions'
|
||||
3. Go to `Settings->Secrets and Variables > Actions`, then select 'Variables', and add the repository variable `BASE_URL`. Set the value to `/bentopdf`. _If you've renamed the repo to something other than bentopdf, put that here_.
|
||||
4. Go to `Actions` in the top menu, and select 'I understand' to enable Actions
|
||||
5. Within Actions, on the left, select 'Deploy static content to Pages', and then on the right select 'Run workflow', and in the dropdown, 'Run Workflow'. The action will now run to build BentoPDF and deploy it to GitHub Pages.
|
||||
|
||||
When the build completes, you can find the website at `https://[your-github-username]/bentopdf`
|
||||
|
||||
If/when you merge changes from the source BentoPDF repository, the build and deploy action will automatically be kicked off and the new version will be automatically deployed to GitHub Pages.
|
||||
|
||||
## SEO and search engine indexing
|
||||
|
||||
By default, every self-hosted BentoPDF build emits canonical URLs and an
|
||||
hreflang/`x-default` set that point back to `https://www.bentopdf.com`. This
|
||||
is intentional for two reasons:
|
||||
|
||||
1. **It consolidates SEO signals to the official site** so your instance
|
||||
doesn't compete with bentopdf.com on brand searches like "bentopdf".
|
||||
2. **It keeps your instance off public search results.** If you self-host
|
||||
on a small VPS, a home server, or anywhere with limited bandwidth, you
|
||||
probably don't want strangers from Google landing on it. With the
|
||||
default canonical pointing back to the official site, search engines
|
||||
treat your instance as a copy and won't surface it for organic traffic
|
||||
and your bandwidth is reserved for the people you actually share the URL
|
||||
with.
|
||||
|
||||
You have two clean overrides depending on what you want.
|
||||
|
||||
### Run your own SEO instance (claim canonical for yourself)
|
||||
|
||||
If you operate a public deployment and want it to be the indexed copy for
|
||||
your audience, set `SITE_URL` at build time to your origin. The build will
|
||||
emit canonicals, hreflang, and structured data pointing at your domain.
|
||||
|
||||
- Docker:
|
||||
```sh
|
||||
docker build --build-arg SITE_URL=https://pdf.example.com -t bentopdf-self .
|
||||
```
|
||||
- Netlify, Vercel, GitHub Pages, or any other static host: set `SITE_URL`
|
||||
in your project's environment variables and re-deploy. The build script
|
||||
reads it during `npm run build`.
|
||||
|
||||
### Stay invisible to search engines (no SEO competition either way)
|
||||
|
||||
Set the runtime environment variable `ROBOTS_NOINDEX=true`. The container
|
||||
injects `<meta name="robots" content="noindex, follow">` into every served
|
||||
HTML file at startup. The canonical link still points at the official site
|
||||
by default, so when crawlers do follow internal links they still see
|
||||
bentopdf.com as the authoritative source.
|
||||
|
||||
```sh
|
||||
docker run -d -p 8080:8080 -e ROBOTS_NOINDEX=true ghcr.io/alam00000/bentopdf:latest
|
||||
```
|
||||
|
||||
You can combine the two: build with your own `SITE_URL` and run with
|
||||
`ROBOTS_NOINDEX=true` for a private deployment that's neither competing
|
||||
with bentopdf.com nor advertising itself.
|
||||
|
||||
### Note on Simple Mode
|
||||
|
||||
Simple Mode (`SIMPLE_MODE=true`) controls the **UI** — it ships a stripped-down
|
||||
homepage suitable for company intranets and single-purpose deployments. It
|
||||
does **not** by itself control whether your instance is indexed by search
|
||||
engines. A public-facing simple-mode deployment is fully indexable by default,
|
||||
just like the full-mode build. If you want a simple-mode deployment hidden
|
||||
from search engines, combine `SIMPLE_MODE=true` at build time with
|
||||
`ROBOTS_NOINDEX=true` at runtime.
|
||||
|
||||
+17
-3
@@ -33,6 +33,13 @@ BentoPDF uses **i18next** for internationalization (i18n). Currently supported l
|
||||
- **Traditional Chinese (Taiwan)** (`zh-TW`)
|
||||
- **Korean** (`ko`)
|
||||
- **Russian** (`ru`)
|
||||
- **Ukrainian** (`uk`)
|
||||
- **Slovak** (`sk`)
|
||||
- **Arabic** (`ar`)
|
||||
- **Dutch** (`nl`)
|
||||
- **Danish** (`da`)
|
||||
- **Swedish** (`sv`)
|
||||
- **Japanese** (`ja`)
|
||||
|
||||
The app automatically detects the language from the URL path:
|
||||
|
||||
@@ -393,7 +400,7 @@ Some strings contain HTML or special characters:
|
||||
|
||||
```json
|
||||
{
|
||||
"faq.analytics.answer": "We care about your privacy. BentoPDF does not track personal information. We use <a href=\"https://simpleanalytics.com\" class=\"text-indigo-400 hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\">Simple Analytics</a> solely to see anonymous visit counts."
|
||||
"faq.analytics.answer": "No. BentoPDF does not track you at all. We do not use cookies, analytics, or any tracking scripts, not even on the live website at bentopdf.com. We never know who you are or what you do with the tools."
|
||||
}
|
||||
```
|
||||
|
||||
@@ -401,7 +408,7 @@ When translating, **keep the HTML tags intact**:
|
||||
|
||||
```json
|
||||
{
|
||||
"faq.analytics.answer": "Wir schätzen Ihre Privatsphäre. BentoPDF verfolgt keine persönlichen Informationen. Wir verwenden <a href=\"https://simpleanalytics.com\" class=\"text-indigo-400 hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\">Simple Analytics</a> ausschließlich, um anonyme Besucherzahlen zu sehen."
|
||||
"faq.analytics.answer": "Nein. BentoPDF verfolgt Sie in keiner Weise. Wir verwenden keine Cookies, keine Analysetools und keine Tracking-Skripte – auch nicht auf der Live-Website bentopdf.com. Wir wissen nie, wer Sie sind oder was Sie mit den Tools tun."
|
||||
}
|
||||
```
|
||||
|
||||
@@ -603,8 +610,15 @@ Current translation coverage:
|
||||
| Traditional Chinese | `zh-TW` | ✅ Complete | Community |
|
||||
| Korean | `ko` | ✅ Complete | Community |
|
||||
| Russian | `ru` | ✅ Complete | Community |
|
||||
| Ukrainian | `uk` | ✅ Complete | Community |
|
||||
| Slovak | `sk` | ✅ Complete | Community |
|
||||
| Arabic | `ar` | ✅ Complete | Community |
|
||||
| Dutch | `nl` | ✅ Complete | Community |
|
||||
| Danish | `da` | ✅ Complete | Community |
|
||||
| Swedish | `sv` | ✅ Complete | Community |
|
||||
| Japanese | `ja` | ✅ Complete | Community |
|
||||
| Your Language | `??` | 🚧 In Progress | You? |
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: January 2026
|
||||
**Last Updated**: June 2026
|
||||
|
||||
+4
-5
@@ -18,7 +18,7 @@
|
||||
<meta name="robots" content="index, follow" />
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="https://www.bentopdf.com/about.html" />
|
||||
<link rel="canonical" href="https://www.bentopdf.com/about" />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website" />
|
||||
@@ -145,7 +145,7 @@
|
||||
data-i18n="about.philosophy.description"
|
||||
>
|
||||
In an era where data is a commodity, we take a different approach.
|
||||
All processing for Bentopdf tools happens locally in your browser.
|
||||
All processing for BentoPDF tools happens locally in your browser.
|
||||
This means your files never touch our servers, we never see your
|
||||
documents, and we don't track what you do. Your documents remain
|
||||
completely and unequivocally private. It's not just a feature;
|
||||
@@ -172,7 +172,7 @@
|
||||
<section id="why-Bentopdf" class="py-16">
|
||||
<h2 class="text-3xl md:text-4xl font-bold text-center text-white mb-12">
|
||||
<span data-i18n="about.whyBentopdf.title">Why</span>
|
||||
<span class="marker-slanted">Bentopdf?</span>
|
||||
<span class="marker-slanted">BentoPDF?</span>
|
||||
</h2>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-8 max-w-5xl mx-auto">
|
||||
<div class="bg-gray-800 p-6 rounded-lg flex items-start gap-4">
|
||||
@@ -280,7 +280,7 @@
|
||||
class="text-lg text-gray-400 mb-8 max-w-2xl mx-auto"
|
||||
data-i18n="about.cta.description"
|
||||
>
|
||||
Join thousands of users who trust Bentopdf for their daily document
|
||||
Join thousands of users who trust BentoPDF for their daily document
|
||||
needs. Experience the difference that privacy and performance can
|
||||
make.
|
||||
</p>
|
||||
@@ -297,7 +297,6 @@
|
||||
{{> footer }}
|
||||
|
||||
<script type="module" src="src/js/utils/lucide-init.ts"></script>
|
||||
<script type="module" src="src/version.ts"></script>
|
||||
<script type="module" src="src/js/main.ts"></script>
|
||||
<script type="module" src="src/js/mobileMenu.ts"></script>
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+2
-2
@@ -7,10 +7,10 @@ type: application
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||
version: 1.0.2
|
||||
version: 1.0.7
|
||||
|
||||
# This is the version number of the application being deployed. This version number should be
|
||||
# incremented each time you make changes to the application. Versions are not expected to
|
||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||
# It is recommended to use it with quotes.
|
||||
appVersion: '2.2.1'
|
||||
appVersion: '2.8.8'
|
||||
|
||||
+1
-1
@@ -91,7 +91,7 @@ helm package .
|
||||
helm push bentopdf-*.tgz oci://ghcr.io/$GHCR_USERNAME/charts
|
||||
```
|
||||
|
||||
This could be automated as part of a Github workflow.
|
||||
This could be automated as part of a GitHub workflow.
|
||||
|
||||
### Deploy
|
||||
|
||||
|
||||
@@ -75,6 +75,8 @@ securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
seccompProfile:
|
||||
type: RuntimeDefault
|
||||
|
||||
resources: {}
|
||||
|
||||
|
||||
+142
-16
@@ -13,15 +13,21 @@
|
||||
*/
|
||||
|
||||
const ALLOWED_PATH_PATTERNS = [
|
||||
/\.crt$/i,
|
||||
/\.cer$/i,
|
||||
/\.pem$/i,
|
||||
/\/certs\//i,
|
||||
/\/ocsp/i,
|
||||
/\/crl/i,
|
||||
/caIssuers/i,
|
||||
/\.(crt|cer|pem|der|p7c|p7b)$/i,
|
||||
/(^|\/)certs(\/|$)/i,
|
||||
/(^|\/)ocsp(\/|$)/i,
|
||||
/(^|\/)crl(\/|$)/i,
|
||||
/(^|\/)caissuers(\/|$)/i,
|
||||
];
|
||||
|
||||
const ALLOWED_TSA_HOSTS = new Set([
|
||||
'timestamp.digicert.com',
|
||||
'timestamp.sectigo.com',
|
||||
'ts.ssl.com',
|
||||
'freetsa.org',
|
||||
'tsa.mesign.com',
|
||||
]);
|
||||
|
||||
const ALLOWED_ORIGINS = ['https://www.bentopdf.com', 'https://bentopdf.com'];
|
||||
|
||||
const SAFE_CONTENT_TYPES = [
|
||||
@@ -30,6 +36,7 @@ const SAFE_CONTENT_TYPES = [
|
||||
'application/x-pem-file',
|
||||
'application/pkcs7-mime',
|
||||
'application/octet-stream',
|
||||
'application/timestamp-reply',
|
||||
'text/plain',
|
||||
];
|
||||
|
||||
@@ -40,6 +47,8 @@ const RATE_LIMIT_WINDOW_MS = 60 * 1000;
|
||||
|
||||
const MAX_FILE_SIZE_BYTES = 10 * 1024 * 1024;
|
||||
|
||||
let warnedNoProxySecret = false;
|
||||
|
||||
async function verifySignature(message, signature, secret) {
|
||||
try {
|
||||
const encoder = new TextEncoder();
|
||||
@@ -114,6 +123,31 @@ function isPrivateOrReservedHost(hostname) {
|
||||
return false;
|
||||
}
|
||||
|
||||
async function hostnameResolvesToPrivate(hostname) {
|
||||
const clean = hostname.replace(/^\[|\]$/g, '');
|
||||
if (/^\d+\.\d+\.\d+\.\d+$/.test(clean) || clean.includes(':')) {
|
||||
return isPrivateOrReservedHost(clean);
|
||||
}
|
||||
const ips = [];
|
||||
for (const type of ['A', 'AAAA']) {
|
||||
try {
|
||||
const res = await fetch(
|
||||
`https://1.1.1.1/dns-query?name=${encodeURIComponent(clean)}&type=${type}`,
|
||||
{ headers: { accept: 'application/dns-json' } }
|
||||
);
|
||||
if (!res.ok) return true;
|
||||
const data = await res.json();
|
||||
for (const ans of data.Answer || []) {
|
||||
if (ans && ans.data) ips.push(String(ans.data).replace(/\.$/, ''));
|
||||
}
|
||||
} catch {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (ips.length === 0) return true;
|
||||
return ips.some((ip) => isPrivateOrReservedHost(ip));
|
||||
}
|
||||
|
||||
function isValidCertificateUrl(urlString) {
|
||||
try {
|
||||
const url = new URL(urlString);
|
||||
@@ -132,6 +166,17 @@ function isValidCertificateUrl(urlString) {
|
||||
}
|
||||
}
|
||||
|
||||
function isValidTsaUrl(urlString) {
|
||||
try {
|
||||
const url = new URL(urlString);
|
||||
if (!['http:', 'https:'].includes(url.protocol)) return false;
|
||||
if (isPrivateOrReservedHost(url.hostname)) return false;
|
||||
return ALLOWED_TSA_HOSTS.has(url.hostname);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function getSafeContentType(upstreamContentType) {
|
||||
if (!upstreamContentType) return 'application/octet-stream';
|
||||
const match = SAFE_CONTENT_TYPES.find((ct) =>
|
||||
@@ -143,7 +188,7 @@ function getSafeContentType(upstreamContentType) {
|
||||
function corsHeaders(origin) {
|
||||
return {
|
||||
'Access-Control-Allow-Origin': origin,
|
||||
'Access-Control-Allow-Methods': 'GET, OPTIONS',
|
||||
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
|
||||
'Access-Control-Allow-Headers': 'Content-Type',
|
||||
'Access-Control-Max-Age': '86400',
|
||||
};
|
||||
@@ -161,7 +206,7 @@ function handleOptions(request) {
|
||||
}
|
||||
|
||||
export default {
|
||||
async fetch(request, env, ctx) {
|
||||
async fetch(request, env) {
|
||||
const url = new URL(request.url);
|
||||
const origin = request.headers.get('Origin');
|
||||
|
||||
@@ -170,6 +215,10 @@ export default {
|
||||
}
|
||||
|
||||
// NOTE: If you are selfhosting this proxy, you can remove this check, or can set it to only accept requests from your own domain
|
||||
// SECURITY: The Origin allow-list and the optional PROXY_SECRET HMAC are anti-abuse controls, NOT a security boundary — the Origin
|
||||
// header is forgeable by non-browser clients and the HMAC secret ships in the public client bundle. The real SSRF defense is the
|
||||
// private/reserved-IP resolution check (hostnameResolvesToPrivate). Deployments running this off Cloudflare cannot fully close the
|
||||
// DNS-rebinding gap in code and MUST add network egress filtering (see docs/self-hosting/cors-proxy.md).
|
||||
if (!isAllowedOrigin(origin)) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
@@ -185,7 +234,7 @@ export default {
|
||||
);
|
||||
}
|
||||
|
||||
if (request.method !== 'GET') {
|
||||
if (request.method !== 'GET' && request.method !== 'POST') {
|
||||
return new Response('Method not allowed', {
|
||||
status: 405,
|
||||
headers: corsHeaders(origin),
|
||||
@@ -198,7 +247,7 @@ export default {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
error: 'Missing url parameter',
|
||||
usage: 'GET /?url=<certificate_url>',
|
||||
usage: 'GET /?url=<certificate_url> or POST /?url=<tsa_url>',
|
||||
}),
|
||||
{
|
||||
status: 400,
|
||||
@@ -210,7 +259,28 @@ export default {
|
||||
);
|
||||
}
|
||||
|
||||
if (!isValidCertificateUrl(targetUrl)) {
|
||||
const requestContentType = request.headers.get('Content-Type') || '';
|
||||
const isTsaQuery =
|
||||
request.method === 'POST' &&
|
||||
requestContentType === 'application/timestamp-query';
|
||||
|
||||
if (isTsaQuery) {
|
||||
if (!isValidTsaUrl(targetUrl)) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
error: 'Disallowed TSA host',
|
||||
message: `Only known RFC 3161 TSA hosts are accepted: ${[...ALLOWED_TSA_HOSTS].join(', ')}`,
|
||||
}),
|
||||
{
|
||||
status: 403,
|
||||
headers: {
|
||||
...corsHeaders(origin),
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
} else if (!isValidCertificateUrl(targetUrl)) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
error: 'Invalid or disallowed URL',
|
||||
@@ -252,7 +322,8 @@ export default {
|
||||
const now = Date.now();
|
||||
if (
|
||||
isNaN(requestTime) ||
|
||||
Math.abs(now - requestTime) > MAX_TIMESTAMP_AGE_MS
|
||||
requestTime > now + 60000 ||
|
||||
now - requestTime > MAX_TIMESTAMP_AGE_MS
|
||||
) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
@@ -291,6 +362,13 @@ export default {
|
||||
}
|
||||
);
|
||||
}
|
||||
} else if (!warnedNoProxySecret) {
|
||||
warnedNoProxySecret = true;
|
||||
console.warn(
|
||||
'[CORS Proxy] PROXY_SECRET is not set — request signatures are not verified, so the proxy is callable by any client that can ' +
|
||||
'send an allowed Origin header. Set PROXY_SECRET to deter casual abuse (note: it ships in the public client bundle, so it is ' +
|
||||
'not a real authentication boundary), and add network egress filtering if running off Cloudflare.'
|
||||
);
|
||||
}
|
||||
|
||||
const clientIP = request.headers.get('CF-Connecting-IP') || 'unknown';
|
||||
@@ -343,12 +421,60 @@ export default {
|
||||
);
|
||||
}
|
||||
|
||||
let targetHostname;
|
||||
try {
|
||||
const response = await fetch(targetUrl, {
|
||||
targetHostname = new URL(targetUrl).hostname;
|
||||
} catch {
|
||||
targetHostname = '';
|
||||
}
|
||||
if (!targetHostname || (await hostnameResolvesToPrivate(targetHostname))) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
error: 'Forbidden destination',
|
||||
message: 'The requested host is not permitted',
|
||||
}),
|
||||
{
|
||||
status: 403,
|
||||
headers: {
|
||||
...corsHeaders(origin),
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
const upstreamInit = {
|
||||
method: request.method,
|
||||
redirect: 'manual',
|
||||
signal: AbortSignal.timeout(10000),
|
||||
headers: {
|
||||
'User-Agent': 'BentoPDF-CertProxy/1.0',
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
if (isTsaQuery) {
|
||||
upstreamInit.headers['Content-Type'] = 'application/timestamp-query';
|
||||
upstreamInit.body = await request.arrayBuffer();
|
||||
}
|
||||
|
||||
const response = await fetch(targetUrl, upstreamInit);
|
||||
|
||||
if (response.status >= 300 && response.status < 400) {
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
error: 'Redirect blocked',
|
||||
message: 'Upstream redirects are not allowed',
|
||||
}),
|
||||
{
|
||||
status: 502,
|
||||
headers: {
|
||||
...corsHeaders(origin),
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
if (!response.ok) {
|
||||
return new Response(
|
||||
@@ -431,7 +557,7 @@ export default {
|
||||
response.headers.get('Content-Type')
|
||||
),
|
||||
'Content-Length': totalSize.toString(),
|
||||
'Cache-Control': 'public, max-age=86400',
|
||||
'Cache-Control': 'no-store',
|
||||
'X-Content-Type-Options': 'nosniff',
|
||||
},
|
||||
});
|
||||
|
||||
@@ -3,7 +3,7 @@ main = "cors-proxy-worker.js"
|
||||
compatibility_date = "2024-01-01"
|
||||
|
||||
# Deploy to Cloudflare's global network
|
||||
# If you are self hosting change the name to your worker name
|
||||
# If you are self-hosting, change the name to your worker name
|
||||
# Run: npx wrangler deploy
|
||||
|
||||
# =============================================================================
|
||||
|
||||
+1
-4
@@ -13,7 +13,7 @@
|
||||
<meta name="robots" content="index, follow" />
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="https://www.bentopdf.com/contact.html" />
|
||||
<link rel="canonical" href="https://www.bentopdf.com/contact" />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website" />
|
||||
@@ -48,8 +48,6 @@
|
||||
/>
|
||||
<meta name="twitter:site" content="@BentoPDF" />
|
||||
|
||||
<title>Contact BentoPDF - Get in Touch | Support</title>
|
||||
|
||||
<link href="/src/css/styles.css" rel="stylesheet" />
|
||||
|
||||
<!-- Web App Manifest -->
|
||||
@@ -114,7 +112,6 @@
|
||||
{{> footer }}
|
||||
|
||||
<script type="module" src="src/js/utils/lucide-init.ts"></script>
|
||||
<script type="module" src="src/version.ts"></script>
|
||||
<script type="module" src="src/js/main.ts"></script>
|
||||
<script type="module" src="src/js/mobileMenu.ts"></script>
|
||||
<!-- JSON-LD Schema -->
|
||||
|
||||
+4
-4
@@ -1,11 +1,11 @@
|
||||
services:
|
||||
bentopdf:
|
||||
# GitHub Container Registry (Recommended)
|
||||
# simple mode - ghcr.io/alam00000/bentopdf-simple:latest
|
||||
# default mode - ghcr.io/alam00000/bentopdf:latest
|
||||
# Self-Hosted build - ghcr.io/alam00000/bentopdf-simple:latest
|
||||
# Commercial build - ghcr.io/alam00000/bentopdf:latest
|
||||
# Docker Hub (Alternative)
|
||||
# simple mode - bentopdfteam/bentopdf-simple:latest
|
||||
# default mode - bentopdfteam/bentopdf:latest
|
||||
# Self-Hosted build - bentopdfteam/bentopdf-simple:latest
|
||||
# Commercial build - bentopdfteam/bentopdf:latest
|
||||
image: ghcr.io/alam00000/bentopdf-simple:latest
|
||||
container_name: bentopdf
|
||||
restart: unless-stopped
|
||||
|
||||
@@ -1,9 +1,20 @@
|
||||
import { defineConfig } from 'vitepress'
|
||||
|
||||
const SITE_URL = 'https://www.bentopdf.com'
|
||||
|
||||
export default defineConfig({
|
||||
title: "BentoPDF Docs",
|
||||
description: "Documentation for BentoPDF - The free, open-source, privacy-first PDF toolkit",
|
||||
base: '/docs/',
|
||||
cleanUrls: true,
|
||||
|
||||
transformPageData(pageData) {
|
||||
const relPath = pageData.relativePath.replace(/\.md$/, '')
|
||||
const slug = relPath === 'index' ? '' : relPath.replace(/\/index$/, '/')
|
||||
const canonicalUrl = slug ? `${SITE_URL}/docs/${slug}` : `${SITE_URL}/docs/`
|
||||
pageData.frontmatter.head ??= []
|
||||
pageData.frontmatter.head.push(['link', { rel: 'canonical', href: canonicalUrl }])
|
||||
},
|
||||
|
||||
themeConfig: {
|
||||
logo: '/images/favicon-no-bg.svg',
|
||||
@@ -121,6 +132,7 @@ export default defineConfig({
|
||||
{ text: 'OCR PDF', link: '/tools/ocr-pdf' },
|
||||
{ text: 'Merge PDF', link: '/tools/merge-pdf' },
|
||||
{ text: 'Alternate & Mix Pages', link: '/tools/alternate-merge' },
|
||||
{ text: 'Duplex Collate', link: '/tools/duplex-collate' },
|
||||
{ text: 'Organize & Duplicate', link: '/tools/organize-pdf' },
|
||||
{ text: 'Add Attachments', link: '/tools/add-attachments' },
|
||||
{ text: 'Extract Attachments', link: '/tools/extract-attachments' },
|
||||
|
||||
@@ -24,14 +24,17 @@ Visit [bentopdf.com](https://bentopdf.com) to use BentoPDF instantly—no instal
|
||||
> `http://localhost` works for local testing because browsers treat loopback as trustworthy. `http://192.168.x.x` or other LAN IPs usually do not, so Word/Excel/PowerPoint conversions will require HTTPS when accessed from other devices on your network.
|
||||
|
||||
```bash
|
||||
# Pull and run the Docker image
|
||||
docker run -d -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
|
||||
# Pull and run the Docker image (self-hosted build)
|
||||
docker run -d -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
|
||||
|
||||
# Or use Docker Compose
|
||||
curl -O https://raw.githubusercontent.com/alam00000/bentopdf/main/docker-compose.yml
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
> BentoPDF ships in two builds: the **Self-Hosted build** (`bentopdf-simple`, used above) for internal/team/organization deployments, and the **Commercial build** (`bentopdf:latest`) used by bentopdf.com itself and by commercial license holders running public-facing deployments. Both ship the same PDF tools — the Commercial build adds the bentopdf.com hero, FAQ, testimonials, and footer. If in doubt, use the Self-Hosted build.
|
||||
|
||||
Then open `http://localhost:3000` in your browser.
|
||||
|
||||
> [!NOTE]
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<svg width="166" height="166" viewBox="0 0 166 166" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(40, 0)">
|
||||
<path d="M56.7848 80.9116L0 25.6211L24.8434 1.43151C26.8037 -0.47717 29.9814 -0.47717 31.9414 1.43151L85.177 53.2662L56.7848 80.9116Z" fill="#A5B4FC"/>
|
||||
<path d="M-1.30805e-05 80.7335L21.2939 101.467L42.5878 80.7335L21.2939 60L-1.30805e-05 80.7335Z" fill="#E0E7FF"/>
|
||||
<path d="M56.7848 83L81.6279 107.19C83.5881 109.098 83.5881 112.192 81.6279 114.101L28.3925 165.936L0 138.29L56.7848 83Z" fill="#6366F1"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 550 B |
@@ -207,6 +207,32 @@ Ensure MIME type is configured:
|
||||
AddType application/wasm .wasm
|
||||
```
|
||||
|
||||
### Sign PDF or Form Filler Shows a Blank Viewer (`.mjs` MIME error)
|
||||
|
||||
If the browser console shows:
|
||||
|
||||
```
|
||||
Failed to load module script: The server responded with a non-JavaScript
|
||||
MIME type of "application/octet-stream". Strict MIME type checking is
|
||||
enforced for module scripts per HTML spec.
|
||||
```
|
||||
|
||||
…and the failing request ends in `.mjs`, your Apache config is missing the `.mjs → application/javascript` mapping. The bundled PDF viewer ships ES module files with a `.mjs` extension, and Apache's stock `mime.types` doesn't include them by default.
|
||||
|
||||
Add to your VirtualHost or `.htaccess`:
|
||||
|
||||
```apache
|
||||
AddType application/javascript .mjs
|
||||
```
|
||||
|
||||
Then reload Apache:
|
||||
|
||||
```bash
|
||||
sudo apache2ctl configtest && sudo systemctl reload apache2
|
||||
```
|
||||
|
||||
To confirm: in browser DevTools → Network tab, find the failing `.mjs` request and check the `Content-Type` response header. It should now be `application/javascript`, not `application/octet-stream`.
|
||||
|
||||
### Rewrite Not Working
|
||||
|
||||
Check that mod_rewrite is enabled:
|
||||
|
||||
@@ -39,6 +39,17 @@ aws s3 cp s3://your-bentopdf-bucket/ s3://your-bentopdf-bucket/ \
|
||||
--include "*.wasm" \
|
||||
--content-type "application/wasm" \
|
||||
--metadata-directive REPLACE
|
||||
|
||||
# Set correct MIME type for ES module files (.mjs)
|
||||
# S3 defaults .mjs to application/octet-stream, which browsers refuse to
|
||||
# execute as ES modules. The bundled PDF viewer (Sign PDF, Form Filler)
|
||||
# ships ES modules with .mjs extensions and will fail without this step.
|
||||
aws s3 cp s3://your-bentopdf-bucket/ s3://your-bentopdf-bucket/ \
|
||||
--recursive \
|
||||
--exclude "*" \
|
||||
--include "*.mjs" \
|
||||
--content-type "application/javascript" \
|
||||
--metadata-directive REPLACE
|
||||
```
|
||||
|
||||
## Step 3: Create CloudFront Distribution
|
||||
|
||||
@@ -126,6 +126,14 @@ The included Cloudflare Worker has several security measures:
|
||||
| **Rate Limiting** | 60 requests per IP per minute (requires KV) |
|
||||
| **HMAC Signatures** | Optional client-side signing (deters casual abuse) |
|
||||
|
||||
### DNS rebinding (self-hosting off Cloudflare)
|
||||
|
||||
The worker rejects any URL that resolves to a private or internal IP. It can't use a fixed allowlist of hosts, since certificate-chain URLs point to whatever CA issued the cert (FNMT, corporate CAs, and so on), so the destinations aren't known up front. That leaves a small rebinding window: someone running the DNS for their own domain could hand a public IP to the safety check and a private one to the real request a moment later.
|
||||
|
||||
On Cloudflare this isn't exploitable — Workers can't reach private IPs or the `169.254.169.254` metadata endpoint, so a rebind lands on nothing. Just don't give the worker a way in: don't attach a Tunnel, Service, or private-network binding (it only needs `RATE_LIMIT_KV`).
|
||||
|
||||
If you run this off Cloudflare (workerd, Node, and the like) inside a VPC, the runtime _can_ reach internal IPs. Put an egress firewall in front of it and block the private ranges — `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `127.0.0.0/8`, `169.254.0.0/16`, and their IPv6 equivalents. App code can't enforce that once you're off Cloudflare.
|
||||
|
||||
## Disabling the Proxy
|
||||
|
||||
If you don't want to use a CORS proxy, set the environment variable to an empty string:
|
||||
|
||||
+74
-52
@@ -19,19 +19,27 @@ The easiest way to self-host BentoPDF in a production environment.
|
||||
|
||||
## Quick Start
|
||||
|
||||
> [!TIP]
|
||||
> BentoPDF ships in two builds:
|
||||
>
|
||||
> - **Self-Hosted build** — `ghcr.io/alam00000/bentopdf-simple:latest`. Every PDF tool, **without** the marketing chrome (no hero, FAQ, testimonials, footer). Use this for internal/team/organization deployments. It is **not** a feature-reduced "lite" version.
|
||||
> - **Commercial build** — `ghcr.io/alam00000/bentopdf:latest`. The full marketing site, used by bentopdf.com itself and by commercial license holders running public-facing deployments.
|
||||
>
|
||||
> If in doubt: pull the Self-Hosted build.
|
||||
|
||||
```bash
|
||||
# Docker
|
||||
docker run -d \
|
||||
--name bentopdf \
|
||||
-p 3000:8080 \
|
||||
--restart unless-stopped \
|
||||
ghcr.io/alam00000/bentopdf:latest
|
||||
ghcr.io/alam00000/bentopdf-simple:latest
|
||||
|
||||
# Podman
|
||||
podman run -d \
|
||||
--name bentopdf \
|
||||
-p 3000:8080 \
|
||||
ghcr.io/alam00000/bentopdf:latest
|
||||
ghcr.io/alam00000/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
## Docker Compose / Podman Compose
|
||||
@@ -41,7 +49,7 @@ Create `docker-compose.yml`:
|
||||
```yaml
|
||||
services:
|
||||
bentopdf:
|
||||
image: ghcr.io/alam00000/bentopdf:latest
|
||||
image: ghcr.io/alam00000/bentopdf-simple:latest
|
||||
container_name: bentopdf
|
||||
ports:
|
||||
- '3000:8080'
|
||||
@@ -90,26 +98,39 @@ docker run -d -p 3000:8080 bentopdf:custom
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
| ------------------------------------ | ------------------------------------------- | -------------------------------------------------------------- |
|
||||
| `SIMPLE_MODE` | Build without LibreOffice tools | `false` |
|
||||
| `BASE_URL` | Deploy to subdirectory | `/` |
|
||||
| `VITE_WASM_PYMUPDF_URL` | PyMuPDF WASM module URL | `https://cdn.jsdelivr.net/npm/@bentopdf/[email protected]/` |
|
||||
| `VITE_WASM_GS_URL` | Ghostscript WASM module URL | `https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm/assets/` |
|
||||
| `VITE_WASM_CPDF_URL` | CoherentPDF WASM module URL | `https://cdn.jsdelivr.net/npm/coherentpdf/dist/` |
|
||||
| `VITE_TESSERACT_WORKER_URL` | OCR worker script URL | _(empty; use Tesseract.js default CDN)_ |
|
||||
| `VITE_TESSERACT_CORE_URL` | OCR core runtime directory | _(empty; use Tesseract.js default CDN)_ |
|
||||
| `VITE_TESSERACT_LANG_URL` | OCR traineddata directory | _(empty; use Tesseract.js default CDN)_ |
|
||||
| `VITE_TESSERACT_AVAILABLE_LANGUAGES` | Comma-separated OCR languages exposed in UI | _(empty; show full catalog)_ |
|
||||
| `VITE_OCR_FONT_BASE_URL` | OCR text-layer font directory | _(empty; use remote Noto font URLs)_ |
|
||||
| `VITE_DEFAULT_LANGUAGE` | Default UI language | `en` |
|
||||
| `VITE_BRAND_NAME` | Custom brand name | `BentoPDF` |
|
||||
| `VITE_BRAND_LOGO` | Logo path relative to `public/` | `images/favicon-no-bg.svg` |
|
||||
| `VITE_FOOTER_TEXT` | Custom footer/copyright text | `© 2026 BentoPDF. All rights reserved.` |
|
||||
| `DISABLE_TOOLS` | Comma-separated tool IDs to hide | _(empty; all tools enabled)_ |
|
||||
| Variable | Description | Default |
|
||||
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
|
||||
| `SIMPLE_MODE` | Build the Self-Hosted variant (hides bentopdf.com marketing chrome — hero, FAQ, testimonials, footer). All PDF tools remain. | `false` |
|
||||
| `BASE_URL` | Deploy to subdirectory | `/` |
|
||||
| `VITE_WASM_PYMUPDF_URL` | PyMuPDF WASM module URL | `https://cdn.jsdelivr.net/npm/@bentopdf/[email protected]/` |
|
||||
| `VITE_WASM_GS_URL` | Ghostscript WASM module URL | `https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm@0.1.1/assets/` |
|
||||
| `VITE_WASM_CPDF_URL` | CoherentPDF WASM module URL | `https://cdn.jsdelivr.net/npm/coherentpdf@2.5.5/dist/` |
|
||||
| `VITE_TESSERACT_WORKER_URL` | OCR worker script URL | _(empty; use Tesseract.js default CDN)_ |
|
||||
| `VITE_TESSERACT_CORE_URL` | OCR core runtime directory | _(empty; use Tesseract.js default CDN)_ |
|
||||
| `VITE_TESSERACT_LANG_URL` | OCR traineddata directory | _(empty; use Tesseract.js default CDN)_ |
|
||||
| `VITE_TESSERACT_AVAILABLE_LANGUAGES` | Comma-separated OCR languages exposed in UI | _(empty; show full catalog)_ |
|
||||
| `VITE_OCR_FONT_BASE_URL` | OCR text-layer font directory | _(empty; use remote Noto font URLs)_ |
|
||||
| `VITE_DEFAULT_LANGUAGE` | Default UI language | `en` |
|
||||
| `VITE_BRAND_NAME` | Custom brand name | `BentoPDF` |
|
||||
| `VITE_BRAND_LOGO` | Logo path relative to `public/` | `images/favicon-no-bg.svg` |
|
||||
| `VITE_FOOTER_TEXT` | Custom footer/copyright text | `© 2026 BentoPDF. All rights reserved.` |
|
||||
| `DISABLE_TOOLS` | Comma-separated tool IDs to hide | _(empty; all tools enabled)_ |
|
||||
| `DISABLE_GITHUB_STARS` | Skip the GitHub star-count fetch on page load and drop `api.github.com` from the CSP. Simple Mode builds always skip it. | `false` |
|
||||
|
||||
WASM module URLs are pre-configured with CDN defaults — all advanced features work out of the box. Override these for air-gapped or self-hosted deployments.
|
||||
|
||||
### Content-Security-Policy
|
||||
|
||||
The nginx image ships with an enforcing `Content-Security-Policy` header. The CSP's `script-src`, `connect-src`, and `font-src` directives are **generated at build time** from the `VITE_*` URL variables above — whatever hosts you pass via `--build-arg` are automatically added to the policy.
|
||||
|
||||
As a result:
|
||||
|
||||
- If you override `VITE_CORS_PROXY_URL` or `VITE_WASM_*_URL` at build time, the CSP permits those origins automatically — no extra config needed.
|
||||
- If you configure custom WASM URLs at _runtime_ via the in-app Advanced Settings page, those origins are **not** in the CSP and the browser will block fetches to them. Runtime configuration is intended for experimentation; for permanent custom URLs set the matching `VITE_*` build arg.
|
||||
- Air-gapped deployments that override all three `VITE_WASM_*_URL` values also get the public `cdn.jsdelivr.net` removed from CSP (each default is replaced, not appended). Similarly, setting `VITE_CORS_PROXY_URL` replaces the public `bentopdf-cors-proxy.bentopdf.workers.dev` default.
|
||||
|
||||
The CSP includes `'unsafe-eval'` in `script-src` because the LibreOffice WASM runtime (used by Word/Excel/PowerPoint conversion tools) compiles internal dispatch code via `new Function()`. Removing it would break all LibreOffice-backed tools. If you build in `SIMPLE_MODE` (without LibreOffice), you can manually edit the generated `security-headers.conf` to drop `'unsafe-eval'` for a stricter policy.
|
||||
|
||||
For OCR, leave the `VITE_TESSERACT_*` variables empty to use the default online assets, or set all three together for self-hosted/offline OCR. Partial OCR overrides are rejected because the worker, core runtime, and traineddata directory must match. For fully offline searchable PDF output, also set `VITE_OCR_FONT_BASE_URL` so the OCR text-layer fonts are loaded from your internal server instead of the public Noto font URLs.
|
||||
|
||||
`VITE_DEFAULT_LANGUAGE` sets the UI language for first-time visitors. Supported values: `en`, `ar`, `be`, `fr`, `de`, `es`, `zh`, `zh-TW`, `vi`, `tr`, `id`, `it`, `pt`, `nl`, `da`. Users can still switch languages — this only changes the default.
|
||||
@@ -187,7 +208,7 @@ Mount a `config.json` file into the served directory — no rebuild needed:
|
||||
docker run -d \
|
||||
-p 3000:8080 \
|
||||
-v ./config.json:/usr/share/nginx/html/config.json:ro \
|
||||
ghcr.io/alam00000/bentopdf:latest
|
||||
ghcr.io/alam00000/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
Or with Docker Compose:
|
||||
@@ -195,7 +216,7 @@ Or with Docker Compose:
|
||||
```yaml
|
||||
services:
|
||||
bentopdf:
|
||||
image: ghcr.io/alam00000/bentopdf:latest
|
||||
image: ghcr.io/alam00000/bentopdf-simple:latest
|
||||
ports:
|
||||
- '3000:8080'
|
||||
volumes:
|
||||
@@ -243,6 +264,16 @@ You can also disable specific features inside the PDF Editor (e.g., redaction, a
|
||||
|
||||
Categories are hierarchical — disabling a parent (e.g., `annotation`) disables all its children.
|
||||
|
||||
### Disabling the GitHub Star Counter
|
||||
|
||||
The navbar shows a live GitHub star count, fetched from `api.github.com` on page load. The only external request that isn't serving a PDF feature. Disable it at build time to remove the fetch code from the bundle and drop `api.github.com` from the Content-Security-Policy:
|
||||
|
||||
```bash
|
||||
docker build --build-arg DISABLE_GITHUB_STARS=true -t bentopdf .
|
||||
```
|
||||
|
||||
Simple Mode builds (`bentopdf-simple`) always skip the star counter — this flag is only needed on the Commercial build or custom full builds.
|
||||
|
||||
### Custom WASM URLs (Air-Gapped / Self-Hosted)
|
||||
|
||||
> [!IMPORTANT]
|
||||
@@ -307,6 +338,20 @@ Use the codes printed by `bash scripts/prepare-airgap.sh --list-ocr-languages`,
|
||||
|
||||
Set a variable to empty string to disable that module (users must configure manually via Advanced Settings).
|
||||
|
||||
## Custom Port
|
||||
|
||||
By default, BentoPDF listens on port `8080` inside the container. To change this, set the `PORT` environment variable at runtime:
|
||||
|
||||
```bash
|
||||
docker run -p 3000:9090 -e PORT=9090 ghcr.io/alam00000/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
| Variable | Description | Default |
|
||||
| -------- | ------------------------------ | ------- |
|
||||
| `PORT` | Nginx listen port in container | `8080` |
|
||||
|
||||
This works with both the standard and nonroot Dockerfiles.
|
||||
|
||||
## Custom User ID (PUID/PGID)
|
||||
|
||||
For environments that require running as a specific non-root user (NAS devices, Kubernetes with security contexts, organizational policies), BentoPDF provides a separate Dockerfile with LSIO-style PUID/PGID support.
|
||||
@@ -333,6 +378,7 @@ docker run -d \
|
||||
| -------------- | --------------------- | ------- |
|
||||
| `PUID` | User ID to run as | `1000` |
|
||||
| `PGID` | Group ID to run as | `1000` |
|
||||
| `PORT` | Nginx listen port | `8080` |
|
||||
| `DISABLE_IPV6` | Disable IPv6 listener | `false` |
|
||||
|
||||
### Docker Compose
|
||||
@@ -383,7 +429,7 @@ services:
|
||||
- ./letsencrypt:/letsencrypt
|
||||
|
||||
bentopdf:
|
||||
image: ghcr.io/alam00000/bentopdf:latest
|
||||
image: ghcr.io/alam00000/bentopdf-simple:latest
|
||||
labels:
|
||||
- 'traefik.enable=true'
|
||||
- 'traefik.http.routers.bentopdf.rule=Host(`pdf.example.com`)'
|
||||
@@ -411,7 +457,7 @@ services:
|
||||
- caddy_data:/data
|
||||
|
||||
bentopdf:
|
||||
image: ghcr.io/alam00000/bentopdf:latest
|
||||
image: ghcr.io/alam00000/bentopdf-simple:latest
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
@@ -433,7 +479,7 @@ pdf.example.com {
|
||||
```yaml
|
||||
services:
|
||||
bentopdf:
|
||||
image: ghcr.io/alam00000/bentopdf:latest
|
||||
image: ghcr.io/alam00000/bentopdf-simple:latest
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
@@ -459,7 +505,7 @@ After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Container]
|
||||
Image=ghcr.io/alam00000/bentopdf:latest
|
||||
Image=ghcr.io/alam00000/bentopdf-simple:latest
|
||||
ContainerName=bentopdf
|
||||
PublishPort=3000:8080
|
||||
AutoUpdate=registry
|
||||
@@ -494,30 +540,6 @@ journalctl --user -u bentopdf -f
|
||||
> [!TIP]
|
||||
> For system-wide deployment, use `systemctl` without `--user` flag and place the file in `/etc/containers/systemd/`.
|
||||
|
||||
### Simple Mode Quadlet
|
||||
|
||||
For Simple Mode deployment, create `bentopdf-simple.container`:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=BentoPDF Simple Mode - Clean PDF toolkit
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Container]
|
||||
Image=ghcr.io/alam00000/bentopdf-simple:latest
|
||||
ContainerName=bentopdf-simple
|
||||
PublishPort=3000:8080
|
||||
AutoUpdate=registry
|
||||
|
||||
[Service]
|
||||
Restart=always
|
||||
TimeoutStartSec=300
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
```
|
||||
|
||||
### Quadlet with Health Check
|
||||
|
||||
```ini
|
||||
@@ -527,7 +549,7 @@ After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Container]
|
||||
Image=ghcr.io/alam00000/bentopdf:latest
|
||||
Image=ghcr.io/alam00000/bentopdf-simple:latest
|
||||
ContainerName=bentopdf
|
||||
PublishPort=3000:8080
|
||||
AutoUpdate=registry
|
||||
@@ -573,7 +595,7 @@ Then reference it in your container file:
|
||||
|
||||
```ini
|
||||
[Container]
|
||||
Image=ghcr.io/alam00000/bentopdf:latest
|
||||
Image=ghcr.io/alam00000/bentopdf-simple:latest
|
||||
ContainerName=bentopdf
|
||||
PublishPort=3000:8080
|
||||
Network=bentopdf.network
|
||||
|
||||
+128
-19
@@ -6,6 +6,14 @@ BentoPDF can be self-hosted on your own infrastructure. This guide covers variou
|
||||
|
||||
The fastest way to self-host BentoPDF:
|
||||
|
||||
> [!TIP]
|
||||
> BentoPDF ships in two builds:
|
||||
>
|
||||
> - **Self-Hosted build** — `ghcr.io/alam00000/bentopdf-simple:latest`. Every PDF tool, **without** the marketing chrome (no hero, FAQ, testimonials, footer). Use this for internal/team/organization deployments. It is **not** a feature-reduced "lite" version.
|
||||
> - **Commercial build** — `ghcr.io/alam00000/bentopdf:latest`. The full marketing site, used by bentopdf.com itself and by commercial license holders running public-facing deployments.
|
||||
>
|
||||
> If in doubt: pull the Self-Hosted build.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Office file conversion requires `SharedArrayBuffer`, which means the app must be both cross-origin isolated and served from a secure context. The official image already sends the required COOP/COEP headers, but browsers still disable `SharedArrayBuffer` on plain HTTP local-network origins such as `http://192.168.x.x`.
|
||||
>
|
||||
@@ -13,10 +21,10 @@ The fastest way to self-host BentoPDF:
|
||||
|
||||
```bash
|
||||
# Docker
|
||||
docker run -d -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
|
||||
docker run -d -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
|
||||
|
||||
# Podman
|
||||
podman run -d -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
|
||||
podman run -d -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
Or with Docker Compose / Podman Compose:
|
||||
@@ -25,7 +33,7 @@ Or with Docker Compose / Podman Compose:
|
||||
# docker-compose.yml
|
||||
services:
|
||||
bentopdf:
|
||||
image: ghcr.io/alam00000/bentopdf:latest
|
||||
image: ghcr.io/alam00000/bentopdf-simple:latest
|
||||
ports:
|
||||
- '3000:8080'
|
||||
restart: unless-stopped
|
||||
@@ -45,7 +53,7 @@ Run BentoPDF as a systemd service. Create `~/.config/containers/systemd/bentopdf
|
||||
|
||||
```ini
|
||||
[Container]
|
||||
Image=ghcr.io/alam00000/bentopdf:latest
|
||||
Image=ghcr.io/alam00000/bentopdf-simple:latest
|
||||
ContainerName=bentopdf
|
||||
PublishPort=3000:8080
|
||||
AutoUpdate=registry
|
||||
@@ -78,28 +86,71 @@ npm run build
|
||||
|
||||
## Configuration Options
|
||||
|
||||
### Simple Mode
|
||||
### Self-Hosted build (Simple Mode)
|
||||
|
||||
Simple Mode is designed for internal organizational use where you want to hide all branding and marketing content, showing only the essential PDF tools.
|
||||
The Self-Hosted build (the `bentopdf-simple` image, also called Simple Mode) is **functionally identical** to the Commercial build — every PDF tool is present and behaves the same. It just hides the marketing chrome that only makes sense on bentopdf.com itself or on a commercial public-facing deployment. **It is not a feature-reduced or "lite" version.**
|
||||
|
||||
**What Simple Mode hides:**
|
||||
**What the Self-Hosted build hides** (cosmetic only — no PDF features are removed):
|
||||
|
||||
- Navigation bar
|
||||
- Hero section with marketing content
|
||||
- Features, FAQ, testimonials sections
|
||||
- Footer
|
||||
- Navigation bar, hero section, features section, FAQ, testimonials, footer
|
||||
- Updates page title to "PDF Tools"
|
||||
|
||||
```bash
|
||||
# Build with Simple Mode
|
||||
SIMPLE_MODE=true npm run build
|
||||
**What the Self-Hosted build keeps** (everything that actually does PDF work):
|
||||
|
||||
# Or use the pre-built Docker image
|
||||
docker run -p 3000:8080 bentopdfteam/bentopdf-simple:latest
|
||||
- Every PDF tool (merge, split, edit, sign, OCR, Office conversion, etc.)
|
||||
- Custom branding support, all build-time and runtime config
|
||||
|
||||
The Commercial build (`ghcr.io/alam00000/bentopdf:latest`) is what powers bentopdf.com itself and is used by commercial license holders running public-facing deployments — it adds the hero, FAQ, testimonials, and footer that wouldn't make sense on an internal tool.
|
||||
|
||||
If you're self-hosting BentoPDF for your team, organization, or as an internal tool, pull the Self-Hosted build:
|
||||
|
||||
```bash
|
||||
# Use the pre-built image (recommended)
|
||||
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
|
||||
|
||||
# Or build it yourself
|
||||
SIMPLE_MODE=true npm run build
|
||||
```
|
||||
|
||||
See [SIMPLE_MODE.md](https://github.com/alam00000/bentopdf/blob/main/SIMPLE_MODE.md) for full details.
|
||||
|
||||
### Commercial build (public-facing deployments with your own brand)
|
||||
|
||||
The Commercial build (the `bentopdf` image — no `-simple` suffix) is what powers bentopdf.com itself. It includes the full marketing site (hero, features, FAQ, testimonials, footer) on top of every PDF tool. Use this build when you want to **deploy BentoPDF as a public-facing PDF service under your own brand** — for example:
|
||||
|
||||
- You're running BentoPDF as a hosted SaaS for end-users on your own domain
|
||||
- You want the landing-page experience (marketing sections + tools), not just the bare tool surface
|
||||
- You're a commercial license holder embedding BentoPDF into a commercial product
|
||||
|
||||
**Run it as-is** (BentoPDF branding — useful to preview the build):
|
||||
|
||||
```bash
|
||||
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
|
||||
```
|
||||
|
||||
**Build with your own brand** (the typical commercial workflow):
|
||||
|
||||
```bash
|
||||
docker build \
|
||||
--build-arg VITE_BRAND_NAME="AcmePDF" \
|
||||
--build-arg VITE_BRAND_LOGO="images/acme-logo.svg" \
|
||||
--build-arg VITE_FOOTER_TEXT="© 2026 Acme Corp. All rights reserved." \
|
||||
-t acmepdf .
|
||||
|
||||
docker run -p 3000:8080 acmepdf
|
||||
```
|
||||
|
||||
Every other build-time option (`BASE_URL`, `VITE_DEFAULT_LANGUAGE`, `DISABLE_TOOLS`, WASM URL overrides, etc.) works the same way it does on the Self-Hosted build.
|
||||
|
||||
::: warning Licensing
|
||||
Running the Commercial build is allowed under either of BentoPDF's two license options:
|
||||
|
||||
- **AGPL-3.0** (free) — allowed if your deployment publishes its full source code under AGPL, including any branding modifications and surrounding business logic.
|
||||
- **Commercial license** ($79 lifetime) — required for closed-source / proprietary deployments where you don't open-source your branding fork or business code.
|
||||
|
||||
See the [Licensing page](https://bentopdf.com/licensing.html) for the full comparison. AGPL-licensed WASM modules (PyMuPDF, Ghostscript, CoherentPDF) load from a CDN at runtime, so they don't enter your image and don't change your licensing posture.
|
||||
:::
|
||||
|
||||
### Base URL
|
||||
|
||||
Deploy to a subdirectory:
|
||||
@@ -161,7 +212,7 @@ DISABLE_TOOLS="edit-pdf,sign-pdf" npm run build
|
||||
```bash
|
||||
docker run -d -p 3000:8080 \
|
||||
-v ./config.json:/usr/share/nginx/html/config.json:ro \
|
||||
ghcr.io/alam00000/bentopdf:latest
|
||||
ghcr.io/alam00000/bentopdf-simple:latest
|
||||
```
|
||||
|
||||
Both methods can be combined — the lists are merged.
|
||||
@@ -183,6 +234,64 @@ Choose your platform:
|
||||
- [Kubernetes](/self-hosting/kubernetes)
|
||||
- [CORS Proxy](/self-hosting/cors-proxy) - Required for digital signatures
|
||||
|
||||
## Common Issues
|
||||
|
||||
### Word / ODT / Excel / PowerPoint to PDF Hangs (SharedArrayBuffer Unavailable)
|
||||
|
||||
**Symptom**: LibreOffice-based document conversions (Word, ODT, Excel, PowerPoint to PDF) hang at ~55% or fail to start. The browser console may show:
|
||||
|
||||
> `ReferenceError: SharedArrayBuffer is not defined`
|
||||
|
||||
…or `window.crossOriginIsolated` reports `false`, or the WASM compilation reports `expected magic word 00 61 73 6d, found 1f 8b 08 08`.
|
||||
|
||||
**Cause**: LibreOffice WASM requires `SharedArrayBuffer`, which the browser only enables when the page is **cross-origin isolated** AND served from a **secure context**. That means two things must be true:
|
||||
|
||||
1. Every response includes both headers:
|
||||
- `Cross-Origin-Embedder-Policy: require-corp`
|
||||
- `Cross-Origin-Opener-Policy: same-origin`
|
||||
2. The page is served from `https://...` or `http://localhost`. Plain HTTP on a LAN IP (e.g. `http://192.168.x.x`) does NOT count as secure — browsers disable `SharedArrayBuffer` there.
|
||||
|
||||
The `00 61 73 6d / 1f 8b 08 08` mismatch is a separate sub-symptom: the pre-compressed `.wasm.gz` / `.data.gz` files are missing the `Content-Encoding: gzip` response header, so the browser receives raw gzip bytes instead of decompressed WASM.
|
||||
|
||||
**Fix**: see your platform-specific deployment guide for the exact configuration:
|
||||
|
||||
- [Nginx →](/self-hosting/nginx#word-odt-excel-to-pdf-not-working)
|
||||
- [Apache →](/self-hosting/apache#word-odt-excel-to-pdf-not-working)
|
||||
- [AWS S3 + CloudFront →](/self-hosting/aws#step-3b-response-headers-policy-required-for-libreoffice-wasm)
|
||||
- [Cloudflare Pages →](/self-hosting/cloudflare#configuration-file) (`_headers` file)
|
||||
- [Netlify →](/self-hosting/netlify#word-odt-excel-to-pdf-stuck-at-55) (`netlify.toml`)
|
||||
- [Vercel →](/self-hosting/vercel#word-odt-excel-to-pdf-not-working) (`vercel.json`)
|
||||
- [Hostinger →](/self-hosting/hostinger#libreoffice-tools-not-working) (`.htaccess`)
|
||||
- [Kubernetes →](/self-hosting/kubernetes#ensuring-the-sharedarraybuffer-headers-still-work-ingress-gateway)
|
||||
- **Docker**: handled automatically by the bundled nginx config — no action needed.
|
||||
|
||||
**Verify**: open DevTools Console on any BentoPDF page and run:
|
||||
|
||||
```js
|
||||
console.log(window.crossOriginIsolated); // should be true
|
||||
console.log(typeof SharedArrayBuffer); // should be "function"
|
||||
```
|
||||
|
||||
If the page is HTTPS or `http://localhost` AND both COEP/COOP headers are present on every response, both checks pass. If you're on `http://192.168.x.x` or another non-loopback HTTP origin, terminate it with HTTPS — there is no header-only fix.
|
||||
|
||||
### `.mjs` Files Served as `application/octet-stream`
|
||||
|
||||
**Symptom**: Sign PDF / Form Filler / certain other tools show a blank viewer or fail to load. The browser console reports:
|
||||
|
||||
> `Failed to load module script: The server responded with a non-JavaScript MIME type of "application/octet-stream". Strict MIME type checking is enforced for module scripts per HTML spec.`
|
||||
|
||||
**Cause**: Your web server or reverse proxy doesn't have a MIME-type mapping for `.mjs` files (the bundled PDF viewer ships ES modules with that extension). Many stock server configs default to `application/octet-stream` for unrecognized extensions, which browsers refuse to execute as ES modules.
|
||||
|
||||
**Fix**: see your platform-specific deployment guide for the exact snippet:
|
||||
|
||||
- [Nginx →](/self-hosting/nginx#sign-pdf-or-form-filler-shows-a-blank-viewer-mjs-mime-error)
|
||||
- [Apache →](/self-hosting/apache#sign-pdf-or-form-filler-shows-a-blank-viewer-mjs-mime-error)
|
||||
- [AWS S3 + CloudFront →](/self-hosting/aws#step-2-build-and-upload) (see `aws s3 cp ... --include "*.mjs"`)
|
||||
- [Kubernetes →](/self-hosting/kubernetes#mjs-mime-type-errors-sign-pdf-form-filler-iframe-blank)
|
||||
- **Docker, Vercel, Netlify, Cloudflare Pages, Hostinger**: handled automatically — no action needed.
|
||||
|
||||
**Verify**: open DevTools → Network tab, find the failing `.mjs` request, check the `Content-Type` response header. It should be `application/javascript`. If it's still `application/octet-stream`, an outer reverse proxy or CDN may be re-sniffing the type — check each layer in your serving chain.
|
||||
|
||||
## WASM Configuration (AGPL Components)
|
||||
|
||||
BentoPDF **does not bundle** AGPL-licensed processing libraries in its source code, but **pre-configures CDN URLs** so all features work out of the box — no manual setup needed.
|
||||
@@ -203,8 +312,8 @@ These are set in `.env.production` and baked into the build:
|
||||
|
||||
```bash
|
||||
VITE_WASM_PYMUPDF_URL=https://cdn.jsdelivr.net/npm/@bentopdf/[email protected]/
|
||||
VITE_WASM_GS_URL=https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm/assets/
|
||||
VITE_WASM_CPDF_URL=https://cdn.jsdelivr.net/npm/coherentpdf/dist/
|
||||
VITE_WASM_GS_URL=https://cdn.jsdelivr.net/npm/@bentopdf/gs-wasm@0.1.1/assets/
|
||||
VITE_WASM_CPDF_URL=https://cdn.jsdelivr.net/npm/coherentpdf@2.5.5/dist/
|
||||
VITE_TESSERACT_WORKER_URL=
|
||||
VITE_TESSERACT_CORE_URL=
|
||||
VITE_TESSERACT_LANG_URL=
|
||||
|
||||
@@ -130,6 +130,23 @@ ingress:
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
```
|
||||
|
||||
## `.mjs` MIME-type errors (Sign PDF / Form Filler iframe blank)
|
||||
|
||||
If the browser console shows `Failed to load module script: ... non-JavaScript MIME type "application/octet-stream"` on a `.mjs` request, an Ingress/Gateway controller in front of the BentoPDF nginx is replacing the upstream `Content-Type` header with `application/octet-stream`.
|
||||
|
||||
The BentoPDF image's nginx already serves `.mjs` as `application/javascript`. The fix is to stop the controller from stripping/replacing it. For nginx-ingress:
|
||||
|
||||
```yaml
|
||||
ingress:
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/configuration-snippet: |
|
||||
location ~* \.mjs$ {
|
||||
types {} default_type application/javascript;
|
||||
}
|
||||
```
|
||||
|
||||
Or use a `ResponseHeaderModifier` filter in Gateway API to set `Content-Type: application/javascript` for `.mjs` paths. Verify with DevTools → Network tab: the failed `.mjs` request should now show `content-type: application/javascript`.
|
||||
|
||||
### If you’re using Gateway API and want to force-add headers
|
||||
|
||||
Gateway API supports a `ResponseHeaderModifier` filter. You can attach it in `httpRoute.rules[*].filters`:
|
||||
|
||||
@@ -174,6 +174,43 @@ types {
|
||||
}
|
||||
```
|
||||
|
||||
### Sign PDF or Form Filler Shows a Blank Viewer (`.mjs` MIME error)
|
||||
|
||||
If the browser console shows:
|
||||
|
||||
```
|
||||
Failed to load module script: The server responded with a non-JavaScript
|
||||
MIME type of "application/octet-stream". Strict MIME type checking is
|
||||
enforced for module scripts per HTML spec.
|
||||
```
|
||||
|
||||
…and the failing request ends in `.mjs`, your nginx is missing the `.mjs → application/javascript` mapping. The bundled PDF viewer (used by Sign PDF, Form Filler, and a few other tools) ships ES module files with a `.mjs` extension, and nginx's stock `mime.types` doesn't include them by default.
|
||||
|
||||
Fix it by adding `mjs` to the existing `application/javascript` line in `/etc/nginx/mime.types`:
|
||||
|
||||
```nginx
|
||||
application/javascript js mjs;
|
||||
```
|
||||
|
||||
> Do NOT append a _second_ `application/javascript` line — nginx parses `mime.types` line-by-line and only one type-to-extension mapping wins, so a second line is silently ignored on some versions. Edit the existing line to add `mjs` alongside `js`.
|
||||
|
||||
Or override locally inside your server block (no global file edit):
|
||||
|
||||
```nginx
|
||||
types {
|
||||
application/javascript js mjs;
|
||||
application/wasm wasm;
|
||||
}
|
||||
```
|
||||
|
||||
Reload nginx after the change:
|
||||
|
||||
```bash
|
||||
sudo nginx -t && sudo systemctl reload nginx
|
||||
```
|
||||
|
||||
To confirm: in browser DevTools → Network tab, find the failing `.mjs` request and check the `Content-Type` response header. It should now be `application/javascript`, not `application/octet-stream`.
|
||||
|
||||
### Word/ODT/Excel to PDF Not Working
|
||||
|
||||
LibreOffice WASM requires `SharedArrayBuffer`, which needs `Cross-Origin-Embedder-Policy` and `Cross-Origin-Opener-Policy` headers. It also needs a secure context, so `http://localhost` works for local testing but `http://192.168.x.x` or other LAN IPs usually require HTTPS. Note that nginx `add_header` directives in a `location` block **override** server-level `add_header` directives — they don't merge. Every `location` block with its own `add_header` must include the COEP/COOP headers.
|
||||
|
||||
@@ -33,6 +33,13 @@ Add text or image watermarks to your PDF pages using a visual editor. You can po
|
||||
- **Opacity** -- Control image transparency.
|
||||
- **Scale** -- Resize the image watermark.
|
||||
|
||||
**Layout settings:**
|
||||
|
||||
- **Single** -- One watermark per page, positioned by dragging or with the position presets.
|
||||
- **Tiled** -- Repeats the watermark across the whole page in a diagonal grid that follows the rotation angle, so the mark covers the document from edge to edge.
|
||||
- **Horizontal gap** -- Spacing between tiles along the text direction, as a percentage of the watermark width (tiled mode only).
|
||||
- **Vertical gap** -- Spacing between tile rows, as a percentage of the watermark height (tiled mode only).
|
||||
|
||||
**General settings:**
|
||||
|
||||
- **Apply to all pages** -- When checked, the same watermark applies to every page. Uncheck to set individual watermarks per page.
|
||||
@@ -43,6 +50,7 @@ Add text or image watermarks to your PDF pages using a visual editor. You can po
|
||||
- Visual drag-and-drop positioning on a live PDF preview
|
||||
- Resizable watermark with corner handles
|
||||
- Text and image watermark modes
|
||||
- Single or full-page tiled (repeating) layout with adjustable spacing
|
||||
- Per-page or global watermark application
|
||||
- Page-by-page navigation in the preview
|
||||
- Opacity and rotation controls
|
||||
@@ -59,6 +67,7 @@ Add text or image watermarks to your PDF pages using a visual editor. You can po
|
||||
## Tips
|
||||
|
||||
- For diagonal watermarks across the page, set a rotation around 45 degrees and increase the font size.
|
||||
- Tiled mode makes a document much harder to reuse after cropping, since removing one mark still leaves dozens behind. Lower the opacity when tiling so the underlying text stays readable.
|
||||
- Image watermarks with transparent backgrounds (PNG format) blend more naturally with the document content.
|
||||
- If you need different watermark text on different pages, uncheck "Apply to all pages" and navigate page by page.
|
||||
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
title: Duplex Collate
|
||||
description: Reorder duplex scan PDFs that contain front pages and back pages in separate blocks into proper front/back page order.
|
||||
---
|
||||
|
||||
# Duplex Collate
|
||||
|
||||
Duplex Collate is designed for ADF scan workflows where one PDF contains two blocks of pages:
|
||||
|
||||
- all front sides first
|
||||
- all back sides second
|
||||
|
||||
Instead of manually splitting and reassembling, this tool interleaves the two blocks into natural reading order: front1, back1, front2, back2, and so on.
|
||||
|
||||
## How It Works
|
||||
|
||||
1. Upload a single PDF created from duplex stack scanning.
|
||||
2. Set the split point where the front block ends.
|
||||
3. Choose back block handling:
|
||||
- **Reverse back block** (common when the stack is flipped before scanning backs)
|
||||
- **Keep back block as-is**
|
||||
4. Click **Collate PDF** to download the reordered result.
|
||||
|
||||
## Options
|
||||
|
||||
- **Auto-detect split (half)**: sets the split point to `ceil(totalPages / 2)`.
|
||||
- **Odd page warning**: warns when total pages are odd (often a scan mismatch).
|
||||
- **Uneven block confirmation**: asks for confirmation when front/back block sizes differ.
|
||||
- **Grouped export**: split the collated output into separate PDFs based on original document page count and download as ZIP.
|
||||
|
||||
## Output Behavior
|
||||
|
||||
- **Default**: one output PDF (single input PDF in, single output PDF out).
|
||||
- **Grouped mode**: output is chunked by your pages-per-document value; if multiple chunks are produced, they are downloaded as one ZIP, otherwise a single PDF is downloaded.
|
||||
|
||||
If block sizes are uneven, paired pages are collated first, and remaining unpaired pages are appended at the end.
|
||||
|
||||
## Common Use Cases
|
||||
|
||||
- Restoring order after scanning a pile of double-sided forms in two passes.
|
||||
- Rebuilding front/back packets from office scanners that output all fronts then all backs.
|
||||
- Post-processing archive scans before splitting into per-document files.
|
||||
|
||||
## Tips
|
||||
|
||||
- Most duplex batches should have an even total page count.
|
||||
- If output looks inverted on backs, switch between **Reverse back block** and **Keep back block as-is**.
|
||||
- For 2-page originals (front+back), use grouped export with `2` pages per document.
|
||||
|
||||
## Related Tools
|
||||
|
||||
- [Alternate & Mix Pages](./alternate-merge)
|
||||
- [Split PDF](./split-pdf)
|
||||
- [Merge PDF](./merge-pdf)
|
||||
- [Organize & Duplicate](./organize-pdf)
|
||||
@@ -117,6 +117,7 @@ Rearrange, combine, split, and manage your PDF pages and files.
|
||||
- [**OCR PDF**](./ocr-pdf) — Make a PDF searchable and copyable.
|
||||
- [**Merge PDF**](./merge-pdf) — Combine multiple PDFs into one file.
|
||||
- [**Alternate & Mix Pages**](./alternate-merge) — Merge PDFs by alternating pages from each PDF.
|
||||
- [**Duplex Collate**](./duplex-collate) — Reorder front/back scan blocks into proper page sequence.
|
||||
- [**Organize & Duplicate**](./organize-pdf) — Duplicate, reorder, and delete pages.
|
||||
- [**Add Attachments**](./add-attachments) — Embed one or more files into your PDF.
|
||||
- [**Extract Attachments**](./extract-attachments) — Extract all embedded files from PDF(s) as a ZIP.
|
||||
|
||||
@@ -26,6 +26,31 @@ The tool extracts PKCS#7 signature objects from the PDF, decodes the ASN.1 struc
|
||||
- **Self-signed detection**: Is the certificate its own issuer?
|
||||
- **Trust chain**: When a trusted certificate is provided, does the signer's certificate chain back to it?
|
||||
|
||||
### Cryptographic Verification
|
||||
|
||||
- The tool reconstructs the bytes covered by the signature's `/ByteRange`, hashes them with the algorithm the signer declared, and compares the result against the `messageDigest` attribute inside the signature.
|
||||
- It then re-serializes the signed attributes as a DER SET and verifies the signature against the signer certificate's public key.
|
||||
- **A signature is reported as valid only when all of these pass.** If the PDF bytes were modified after signing, or the embedded signature does not match the signer's key, the status shows "Invalid — Cryptographic Verification Failed" with the specific reason.
|
||||
|
||||
#### Supported Signature Algorithms
|
||||
|
||||
| Algorithm | Verification path |
|
||||
| ----------------------- | -------------------------------------------------------------------------------------- |
|
||||
| RSA (PKCS#1 v1.5) | node-forge `publicKey.verify`, with Web Crypto fallback |
|
||||
| RSA-PSS (RSASSA-PSS) | Web Crypto `verify({name: 'RSA-PSS', saltLength})` |
|
||||
| ECDSA P-256/P-384/P-521 | Web Crypto `verify({name: 'ECDSA', hash})` after DER → IEEE P1363 signature conversion |
|
||||
|
||||
If a signature uses an algorithm outside this list (for example Ed25519, SM2, or RSA with an unusual digest OID), the card shows **"Unverified — Unsupported Signature Algorithm"** in yellow, along with the specific OID or reason. This is a deliberate three-state distinction:
|
||||
|
||||
- **Valid** — signature cryptographically verified against the signer's public key.
|
||||
- **Invalid** — verification ran and produced a negative result (bytes changed, key mismatch).
|
||||
- **Unverified** — the tool could not run verification for this algorithm. The certificate metadata is still shown, but you should treat the signature as "unknown" and verify it with Adobe Acrobat or `openssl cms -verify`.
|
||||
|
||||
### Insecure Digest Algorithms
|
||||
|
||||
- Signatures using **MD5 or SHA-1** are rejected as invalid and flagged with "Insecure Digest" status. Both algorithms have published collision attacks, so a signature over a SHA-1 or MD5 hash offers no integrity guarantee.
|
||||
- SHA-224, SHA-256, SHA-384, and SHA-512 are all accepted.
|
||||
|
||||
### Document Coverage
|
||||
|
||||
- **Full coverage**: The signature covers the entire PDF file, meaning no bytes were added or changed after signing.
|
||||
|
||||
@@ -34,9 +34,26 @@ chown -R "$PUID:$PGID" \
|
||||
/usr/share/nginx/html \
|
||||
/etc/nginx/nginx.conf
|
||||
|
||||
PORT=${PORT:-8080}
|
||||
case "$PORT" in
|
||||
''|*[!0-9]*) echo "ERROR: PORT must be a number, got '$PORT'" >&2; exit 1 ;;
|
||||
esac
|
||||
if [ "$PORT" -lt 1 ] || [ "$PORT" -gt 65535 ]; then
|
||||
echo "ERROR: PORT must be between 1 and 65535, got '$PORT'" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ "$PORT" != "8080" ]; then
|
||||
echo "Changing Nginx listen port to $PORT"
|
||||
sed -i "s/listen 8080/listen $PORT/g; s/listen \[::\]:8080/listen [::]:$PORT/g" /etc/nginx/nginx.conf
|
||||
fi
|
||||
|
||||
if [ "$DISABLE_IPV6" = "true" ]; then
|
||||
echo "Disabling Nginx IPv6 listener"
|
||||
sed -i '/^[[:space:]]*listen[[:space:]]*\[::\]:[0-9]*/s/^/#/' /etc/nginx/nginx.conf
|
||||
fi
|
||||
|
||||
if [ "${ROBOTS_NOINDEX:-false}" = "true" ] && [ -x /usr/local/bin/bentopdf-noindex.sh ]; then
|
||||
NOINDEX_HTML_ROOT=/usr/share/nginx/html /usr/local/bin/bentopdf-noindex.sh || true
|
||||
fi
|
||||
|
||||
exec su-exec "$PUID:$PGID" "$@"
|
||||
|
||||
@@ -2,6 +2,8 @@ import globals from 'globals';
|
||||
import pluginJs from '@eslint/js';
|
||||
import tseslint from 'typescript-eslint';
|
||||
import eslintConfigPrettier from 'eslint-config-prettier';
|
||||
import security from 'eslint-plugin-security';
|
||||
import noUnsanitized from 'eslint-plugin-no-unsanitized';
|
||||
|
||||
export default [
|
||||
{ files: ['**/*.{js,mjs,cjs,ts}'] },
|
||||
@@ -12,14 +14,42 @@ export default [
|
||||
'node_modules/**',
|
||||
'**/.vitepress/cache/**',
|
||||
'public/**/*.min.js',
|
||||
'vendor/**',
|
||||
'bentopdf-pymupdf-wasm/**',
|
||||
'libreoffice-wasm-package/**',
|
||||
'bentopdf-airgap-bundle/**',
|
||||
'public/pdfjs-viewer/**',
|
||||
'public/pdfjs-annotation-viewer/**',
|
||||
'public/coherentpdf.browser.min.js',
|
||||
'public/libreoffice-wasm/**',
|
||||
'public/workers/**',
|
||||
],
|
||||
},
|
||||
{ languageOptions: { globals: { ...globals.browser, ...globals.node } } },
|
||||
|
||||
pluginJs.configs.recommended,
|
||||
...tseslint.configs.recommended,
|
||||
eslintConfigPrettier,
|
||||
security.configs.recommended,
|
||||
noUnsanitized.configs.recommended,
|
||||
{
|
||||
rules: {
|
||||
'no-unsanitized/method': 'warn',
|
||||
'no-unsanitized/property': 'warn',
|
||||
'security/detect-eval-with-expression': 'error',
|
||||
'security/detect-new-buffer': 'error',
|
||||
'security/detect-unsafe-regex': 'warn',
|
||||
'security/detect-pseudoRandomBytes': 'error',
|
||||
'security/detect-bidi-characters': 'error',
|
||||
'security/detect-disable-mustache-escape': 'error',
|
||||
'security/detect-possible-timing-attacks': 'off',
|
||||
'security/detect-object-injection': 'off',
|
||||
'security/detect-non-literal-fs-filename': 'off',
|
||||
'security/detect-non-literal-regexp': 'off',
|
||||
'security/detect-non-literal-require': 'off',
|
||||
'security/detect-child-process': 'off',
|
||||
'security/detect-no-csrf-before-method-override': 'off',
|
||||
'security/detect-buffer-noassert': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'warn',
|
||||
'@typescript-eslint/no-unused-vars': [
|
||||
'warn',
|
||||
@@ -60,4 +90,14 @@ export default [
|
||||
'no-misleading-character-class': 'warn',
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['src/js/editcore/**/*.js'],
|
||||
rules: {
|
||||
'no-useless-assignment': 'off',
|
||||
'security/detect-unsafe-regex': 'off',
|
||||
'security/detect-object-injection': 'off',
|
||||
'no-unsanitized/property': 'off',
|
||||
'no-empty': 'off',
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<meta name="robots" content="index, follow" />
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="https://www.bentopdf.com/faq.html" />
|
||||
<link rel="canonical" href="https://www.bentopdf.com/faq" />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website" />
|
||||
@@ -48,7 +48,6 @@
|
||||
/>
|
||||
<meta name="twitter:site" content="@BentoPDF" />
|
||||
|
||||
<title>FAQ - Frequently Asked Questions | BentoPDF</title>
|
||||
<link href="/src/css/styles.css" rel="stylesheet" />
|
||||
|
||||
<!-- Web App Manifest -->
|
||||
@@ -227,19 +226,10 @@
|
||||
</summary>
|
||||
<div class="mt-4 text-gray-400">
|
||||
<p>
|
||||
We care about your privacy. BentoPDF does not track personal
|
||||
information. We use
|
||||
<a
|
||||
href="https://simpleanalytics.com"
|
||||
class="text-indigo-400 hover:underline"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>Simple Analytics</a
|
||||
>
|
||||
solely to see anonymous visit counts. This means we can know how
|
||||
many users visit our site, but
|
||||
<strong>we never know who you are</strong>. Simple Analytics is
|
||||
fully GDPR-compliant and respects your privacy.
|
||||
No. BentoPDF does not track you at all. We do not use cookies,
|
||||
analytics, or any tracking scripts, not even on the live website
|
||||
at bentopdf.com. We never know who you are or what you do with the
|
||||
tools.
|
||||
</p>
|
||||
</div>
|
||||
</details>
|
||||
@@ -291,7 +281,6 @@
|
||||
{{> footer }}
|
||||
|
||||
<script type="module" src="src/js/utils/lucide-init.ts"></script>
|
||||
<script type="module" src="src/version.ts"></script>
|
||||
<script type="module" src="src/js/mobileMenu.ts"></script>
|
||||
<script type="module" src="src/js/main.ts"></script>
|
||||
<script type="application/ld+json">
|
||||
@@ -344,7 +333,7 @@
|
||||
"name": "Do you track my activity on BentoPDF?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "We care about your privacy. BentoPDF does not track personal information. We use Simple Analytics solely to see anonymous visit counts. This means we can know how many users visit our site, but we never know who you are. Simple Analytics is fully GDPR-compliant and respects your privacy."
|
||||
"text": "No. BentoPDF does not track you at all. We do not use cookies, analytics, or any tracking scripts, not even on the live website at bentopdf.com. We never know who you are or what you do with the tools."
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
+14
-299
@@ -25,7 +25,7 @@
|
||||
/>
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="https://www.bentopdf.com/index.html" />
|
||||
<link rel="canonical" href="https://www.bentopdf.com/" />
|
||||
|
||||
<!-- Open Graph / Facebook / LinkedIn -->
|
||||
<meta property="og:type" content="website" />
|
||||
@@ -231,7 +231,7 @@
|
||||
<section class="py-10 hide-section">
|
||||
<div class="container mx-auto px-4">
|
||||
<p
|
||||
class="text-center text-gray-500 text-sm font-medium mb-8"
|
||||
class="text-center text-gray-400 text-sm font-medium mb-8"
|
||||
data-i18n="usedBy.title"
|
||||
>
|
||||
Used by companies and people working at
|
||||
@@ -323,7 +323,7 @@
|
||||
|
||||
<section id="features-section" class="py-20">
|
||||
<h2 class="text-3xl md:text-4xl font-bold text-center text-white mb-12">
|
||||
<span data-i18n="features.title"></span>
|
||||
<span data-i18n="features.title">Why choose</span>
|
||||
<span class="marker-slanted" data-i18n="features.bentoPdf"
|
||||
>BentoPDF?</span
|
||||
>
|
||||
@@ -588,280 +588,10 @@
|
||||
</div>
|
||||
|
||||
<!-- Shortcuts Modal -->
|
||||
<div
|
||||
id="shortcuts-modal"
|
||||
class="hidden fixed inset-0 bg-black bg-opacity-75 flex items-center justify-center z-50 p-4"
|
||||
>
|
||||
<div
|
||||
class="bg-gray-800 w-full max-w-2xl rounded-xl border border-gray-700 shadow-2xl flex flex-col max-h-[80vh]"
|
||||
>
|
||||
<div
|
||||
class="p-6 border-b border-gray-700 flex justify-between items-center"
|
||||
>
|
||||
<h3 class="text-xl font-bold text-white flex items-center gap-2">
|
||||
<i data-lucide="settings" class="w-6 h-6 text-indigo-400"></i>
|
||||
<span data-i18n="settings.title">Settings</span>
|
||||
</h3>
|
||||
<button
|
||||
id="close-shortcuts-modal"
|
||||
class="text-gray-400 hover:text-white transition-colors"
|
||||
>
|
||||
<i data-lucide="x" class="w-6 h-6"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Tabs -->
|
||||
<div class="flex border-b border-gray-700">
|
||||
<button
|
||||
id="shortcuts-tab-btn"
|
||||
class="flex-1 py-3 text-sm font-medium bg-indigo-600 text-white"
|
||||
>
|
||||
<i data-lucide="keyboard" class="inline-block w-4 h-4 mr-1"></i>
|
||||
<span data-i18n="settings.shortcuts">Shortcuts</span>
|
||||
</button>
|
||||
<button
|
||||
id="preferences-tab-btn"
|
||||
class="flex-1 py-3 text-sm font-medium text-gray-300 hover:text-white"
|
||||
>
|
||||
<i data-lucide="sliders" class="inline-block w-4 h-4 mr-1"></i>
|
||||
<span data-i18n="settings.preferences">Preferences</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Shortcuts Tab Content -->
|
||||
<div id="shortcuts-tab-content" class="p-6 overflow-y-auto flex-grow">
|
||||
<div class="flex justify-between items-center mb-6">
|
||||
<div class="relative flex-grow mr-4">
|
||||
<i
|
||||
data-lucide="search"
|
||||
class="absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-500"
|
||||
></i>
|
||||
<input
|
||||
type="text"
|
||||
id="shortcut-search"
|
||||
data-i18n-placeholder="settings.searchShortcuts"
|
||||
placeholder="Search shortcuts..."
|
||||
class="w-full bg-gray-900 border border-gray-700 text-white rounded-lg pl-10 pr-4 py-2 focus:ring-indigo-500 focus:border-indigo-500"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="mb-4 p-3 bg-indigo-900/20 border border-indigo-500/30 rounded-lg flex items-start gap-3"
|
||||
>
|
||||
<i
|
||||
data-lucide="info"
|
||||
class="w-5 h-5 text-indigo-400 flex-shrink-0 mt-0.5"
|
||||
></i>
|
||||
<p class="text-sm text-indigo-200">
|
||||
<span data-i18n="settings.shortcutsInfo"
|
||||
>Press and hold keys to set a shortcut. Changes are
|
||||
<strong>auto-saved</strong>.</span
|
||||
>
|
||||
<br /><span
|
||||
class="text-yellow-300"
|
||||
data-i18n="settings.shortcutsWarning"
|
||||
>⚠️ Avoid common browser shortcuts (Cmd/Ctrl+W, Cmd/Ctrl+T,
|
||||
Cmd/Ctrl+N etc.) as they may not work reliably.</span
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="shortcuts-list" class="space-y-2">
|
||||
<!-- Shortcuts will be populated here -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Preferences Tab Content -->
|
||||
<div
|
||||
id="preferences-tab-content"
|
||||
class="hidden p-6 overflow-y-auto flex-grow"
|
||||
>
|
||||
<h4
|
||||
class="text-lg font-semibold text-white mb-4"
|
||||
data-i18n="settings.displayPreferences"
|
||||
>
|
||||
Display Preferences
|
||||
</h4>
|
||||
|
||||
<div class="space-y-4">
|
||||
<div
|
||||
class="flex items-center justify-between p-4 bg-gray-900 rounded-lg border border-gray-700"
|
||||
>
|
||||
<div class="flex-1">
|
||||
<label
|
||||
for="full-width-toggle"
|
||||
class="text-sm font-medium text-gray-200 cursor-pointer"
|
||||
data-i18n="settings.fullWidthMode"
|
||||
>
|
||||
Full Width Mode
|
||||
</label>
|
||||
<p
|
||||
class="text-xs text-gray-400 mt-1"
|
||||
data-i18n="settings.fullWidthDescription"
|
||||
>
|
||||
Use the full screen width for all tools instead of a
|
||||
centered container
|
||||
</p>
|
||||
</div>
|
||||
<label
|
||||
class="relative inline-flex items-center cursor-pointer ml-4"
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
id="full-width-toggle"
|
||||
class="sr-only peer"
|
||||
/>
|
||||
<div
|
||||
class="w-11 h-6 bg-gray-700 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-indigo-800 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-indigo-600"
|
||||
></div>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="flex items-center justify-between p-4 bg-gray-900 rounded-lg border border-gray-700"
|
||||
>
|
||||
<div class="flex-1">
|
||||
<label
|
||||
for="compact-mode-toggle"
|
||||
class="text-sm font-medium text-gray-200 cursor-pointer"
|
||||
data-i18n="settings.compactMode"
|
||||
>
|
||||
Compact Mode
|
||||
</label>
|
||||
<p
|
||||
class="text-xs text-gray-400 mt-1"
|
||||
data-i18n="settings.compactModeDescription"
|
||||
>
|
||||
Display tools as a compact list instead of cards
|
||||
</p>
|
||||
</div>
|
||||
<label
|
||||
class="relative inline-flex items-center cursor-pointer ml-4"
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
id="compact-mode-toggle"
|
||||
class="sr-only peer"
|
||||
/>
|
||||
<div
|
||||
class="w-11 h-6 bg-gray-700 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-indigo-800 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-indigo-600"
|
||||
></div>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<!-- Advanced Settings Link -->
|
||||
<a
|
||||
href="wasm-settings.html"
|
||||
class="flex items-center justify-between p-4 bg-gray-900 rounded-lg border border-gray-700 hover:bg-gray-800 hover:border-indigo-500/50 transition-all group"
|
||||
>
|
||||
<div class="flex-1">
|
||||
<span
|
||||
class="text-sm font-medium text-gray-200 group-hover:text-white"
|
||||
>
|
||||
Advanced Settings
|
||||
</span>
|
||||
<p class="text-xs text-gray-400 mt-1">
|
||||
Configure external processing modules (PyMuPDF, Ghostscript,
|
||||
CoherentPDF)
|
||||
</p>
|
||||
</div>
|
||||
<i
|
||||
data-lucide="chevron-right"
|
||||
class="w-5 h-5 text-gray-500 group-hover:text-indigo-400 transition-colors"
|
||||
></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="p-6 border-t border-gray-700 flex justify-between items-center bg-gray-850 rounded-b-xl"
|
||||
>
|
||||
<div id="shortcuts-tab-footer" class="flex gap-3">
|
||||
<button
|
||||
id="import-shortcuts-btn"
|
||||
class="text-gray-400 hover:text-white text-sm font-medium flex items-center gap-1 transition-colors"
|
||||
>
|
||||
<i data-lucide="upload" class="w-4 h-4"></i>
|
||||
<span data-i18n="settings.import">Import</span>
|
||||
</button>
|
||||
<button
|
||||
id="export-shortcuts-btn"
|
||||
class="text-gray-400 hover:text-white text-sm font-medium flex items-center gap-1 transition-colors"
|
||||
>
|
||||
<i data-lucide="download" class="w-4 h-4"></i>
|
||||
<span data-i18n="settings.export">Export</span>
|
||||
</button>
|
||||
</div>
|
||||
<div id="preferences-tab-footer" class="hidden w-full">
|
||||
<p
|
||||
class="text-xs text-gray-400 text-center"
|
||||
data-i18n="settings.settingsAutoSaved"
|
||||
>
|
||||
Settings are automatically saved
|
||||
</p>
|
||||
</div>
|
||||
<button
|
||||
id="reset-shortcuts-btn"
|
||||
class="text-red-400 hover:text-red-300 text-sm font-medium transition-colors"
|
||||
>
|
||||
<span data-i18n="settings.resetToDefaults"
|
||||
>Reset to Defaults</span
|
||||
>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{> settings-modal }}
|
||||
|
||||
<!-- Warning Modal -->
|
||||
<div
|
||||
id="warning-modal"
|
||||
class="fixed inset-0 bg-black/70 backdrop-blur-sm z-50 hidden items-center justify-center p-4"
|
||||
>
|
||||
<div
|
||||
class="bg-gray-800 rounded-xl border border-gray-700 shadow-2xl max-w-md w-full overflow-hidden animate-scale-in"
|
||||
>
|
||||
<div class="p-6">
|
||||
<div class="flex items-start gap-4 mb-4">
|
||||
<div
|
||||
id="warning-icon"
|
||||
class="w-12 h-12 flex items-center justify-center rounded-full bg-yellow-500/10 flex-shrink-0"
|
||||
>
|
||||
<i
|
||||
data-lucide="alert-triangle"
|
||||
class="w-6 h-6 text-yellow-500"
|
||||
></i>
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<h3
|
||||
id="warning-title"
|
||||
class="text-xl font-bold text-white mb-2"
|
||||
>
|
||||
Warning
|
||||
</h3>
|
||||
<p
|
||||
id="warning-message"
|
||||
class="text-gray-300 text-sm leading-relaxed"
|
||||
></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-3 p-4 bg-gray-850 border-t border-gray-700">
|
||||
<button
|
||||
id="warning-cancel-btn"
|
||||
class="flex-1 px-4 py-2.5 bg-gray-700 hover:bg-gray-600 text-white rounded-lg font-medium transition-colors"
|
||||
>
|
||||
Cancel
|
||||
</button>
|
||||
<button
|
||||
id="warning-confirm-btn"
|
||||
class="flex-1 px-4 py-2.5 bg-yellow-600 hover:bg-yellow-700 text-white rounded-lg font-medium transition-colors"
|
||||
>
|
||||
Proceed
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{> warning-modal }}
|
||||
|
||||
<div
|
||||
id="password-modal"
|
||||
@@ -938,7 +668,9 @@
|
||||
<h2
|
||||
class="text-3xl md:text-4xl lg:text-5xl font-bold text-white leading-tight mb-6 text-balance"
|
||||
>
|
||||
<span data-i18n="compliance.title"></span>
|
||||
<span data-i18n="compliance.title"
|
||||
>Your data never leaves your device</span
|
||||
>
|
||||
<span class="inline-flex items-center gap-2">
|
||||
<i
|
||||
data-lucide="shield"
|
||||
@@ -1048,7 +780,7 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- COMPLAINCE SECTION END -->
|
||||
<!-- COMPLIANCE SECTION END -->
|
||||
|
||||
<div class="section-divider hide-section"></div>
|
||||
|
||||
@@ -1278,19 +1010,10 @@
|
||||
class="faq-answer max-h-0 overflow-hidden transition-all duration-300 ease-in-out"
|
||||
>
|
||||
<p class="p-6 pt-0 text-gray-400" data-i18n="faq.analytics.answer">
|
||||
We care about your privacy. BentoPDF does not track personal
|
||||
information. We use
|
||||
<a
|
||||
href="https://simpleanalytics.com"
|
||||
class="text-indigo-400 hover:underline"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>Simple Analytics</a
|
||||
>
|
||||
solely to see anonymous visit counts. This means we can know how
|
||||
many users visit our site, but
|
||||
<strong>we never know who you are</strong>. Simple Analytics is
|
||||
fully GDPR-compliant and respects your privacy.
|
||||
No. BentoPDF does not track you at all. We do not use cookies,
|
||||
analytics, or any tracking scripts, not even on the live website
|
||||
at bentopdf.com. We never know who you are or what you do with the
|
||||
tools.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1418,7 +1141,6 @@
|
||||
{{> footer }}
|
||||
|
||||
<script type="module" src="src/js/utils/lucide-init.ts"></script>
|
||||
<script type="module" src="src/version.ts"></script>
|
||||
<script type="module" src="src/js/main.ts"></script>
|
||||
<script type="module" src="src/js/mobileMenu.ts"></script>
|
||||
<script type="module" src="src/js/sw-register.ts"></script>
|
||||
@@ -1438,13 +1160,6 @@
|
||||
"price": "0",
|
||||
"priceCurrency": "USD"
|
||||
},
|
||||
"aggregateRating": {
|
||||
"@type": "AggregateRating",
|
||||
"ratingValue": "4.8",
|
||||
"ratingCount": "12456",
|
||||
"bestRating": "5",
|
||||
"worstRating": "1"
|
||||
},
|
||||
"featureList": [
|
||||
"Merge PDF",
|
||||
"Split PDF",
|
||||
@@ -1481,7 +1196,7 @@
|
||||
"contactPoint": {
|
||||
"@type": "ContactPoint",
|
||||
"contactType": "Customer Support",
|
||||
"url": "https://www.bentopdf.com/contact.html"
|
||||
"url": "https://www.bentopdf.com/contact"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
+61
-4
@@ -13,7 +13,7 @@
|
||||
<meta name="robots" content="index, follow" />
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="https://www.bentopdf.com/licensing.html" />
|
||||
<link rel="canonical" href="https://www.bentopdf.com/licensing" />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website" />
|
||||
@@ -48,8 +48,6 @@
|
||||
/>
|
||||
<meta name="twitter:site" content="@BentoPDF" />
|
||||
|
||||
<title>Licensing Information - Open Source PDF Tools | BentoPDF</title>
|
||||
|
||||
<link href="/src/css/styles.css" rel="stylesheet" />
|
||||
|
||||
<!-- Web App Manifest -->
|
||||
@@ -308,6 +306,25 @@
|
||||
>
|
||||
without sharing your source code, you must purchase a commercial
|
||||
license.
|
||||
<strong class="text-white"
|
||||
>The commercial license covers BentoPDF only and grants no
|
||||
rights to
|
||||
<a
|
||||
href="https://github.com/alam00000/bentopdf-kura"
|
||||
class="text-indigo-400 hover:underline"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>Kura</a
|
||||
>
|
||||
or
|
||||
<a
|
||||
href="https://github.com/alam00000/bentopdf-hyper-compress"
|
||||
class="text-indigo-400 hover:underline"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>Hyper Compress</a
|
||||
>.</strong
|
||||
>
|
||||
</p>
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-start gap-3">
|
||||
@@ -914,6 +931,47 @@
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="faq-item bg-gray-800 rounded-lg border border-gray-700">
|
||||
<button
|
||||
class="faq-question w-full flex justify-between items-center text-left p-6"
|
||||
>
|
||||
<span class="text-lg font-semibold text-white"
|
||||
>Does the commercial license cover Kura or Hyper Compress?</span
|
||||
>
|
||||
<i
|
||||
data-lucide="chevron-down"
|
||||
class="faq-icon w-6 h-6 text-gray-400 transition-transform"
|
||||
></i>
|
||||
</button>
|
||||
<div
|
||||
class="faq-answer max-h-0 overflow-hidden transition-all duration-300 ease-in-out"
|
||||
>
|
||||
<p class="p-6 pt-0 text-gray-400">
|
||||
<strong class="text-white"
|
||||
>No. The BentoPDF commercial license covers BentoPDF
|
||||
only.</strong
|
||||
>
|
||||
It grants no rights to
|
||||
<a
|
||||
href="https://github.com/alam00000/bentopdf-kura"
|
||||
class="text-indigo-400 hover:underline"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>Kura</a
|
||||
>
|
||||
or
|
||||
<a
|
||||
href="https://github.com/alam00000/bentopdf-hyper-compress"
|
||||
class="text-indigo-400 hover:underline"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>Hyper Compress</a
|
||||
>. Those are separate projects with their own licenses, and any
|
||||
commercial use of them must be licensed separately.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -1139,7 +1197,6 @@
|
||||
{{> footer }}
|
||||
|
||||
<script type="module" src="src/js/utils/lucide-init.ts"></script>
|
||||
<script type="module" src="src/version.ts"></script>
|
||||
<script type="module" src="src/js/main.ts"></script>
|
||||
<script type="module" src="src/js/mobileMenu.ts"></script>
|
||||
<!-- JSON-LD Schema -->
|
||||
|
||||
@@ -9,6 +9,19 @@ entrypoint_log() {
|
||||
fi
|
||||
}
|
||||
|
||||
PORT=${PORT:-8080}
|
||||
case "$PORT" in
|
||||
''|*[!0-9]*) echo "ERROR: PORT must be a number, got '$PORT'" >&2; exit 1 ;;
|
||||
esac
|
||||
if [ "$PORT" -lt 1 ] || [ "$PORT" -gt 65535 ]; then
|
||||
echo "ERROR: PORT must be between 1 and 65535, got '$PORT'" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ "$PORT" != "8080" ]; then
|
||||
entrypoint_log "Changing Nginx listen port to $PORT"
|
||||
sed -i "s/listen 8080/listen $PORT/g; s/listen \[::\]:8080/listen [::]:$PORT/g" /etc/nginx/nginx.conf
|
||||
fi
|
||||
|
||||
if [ "$DISABLE_IPV6" = "true" ]; then
|
||||
entrypoint_log "Disabling the Nginx IPv6 listener"
|
||||
sed -i '/^[[:space:]]*listen[[:space:]]*\[::\]:[0-9]*/s/^/#/' /etc/nginx/nginx.conf
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
entrypoint_log() {
|
||||
if [ -z "${NGINX_ENTRYPOINT_QUIET_LOGS:-}" ]; then
|
||||
echo "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "${ROBOTS_NOINDEX:-false}" != "true" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
ROOT="${NOINDEX_HTML_ROOT:-/usr/share/nginx/html}"
|
||||
MARKER='<!-- bentopdf-noindex-injected -->'
|
||||
META_TAG='<meta name="robots" content="noindex, follow">'
|
||||
|
||||
entrypoint_log "ROBOTS_NOINDEX=true: injecting noindex meta into HTML under $ROOT"
|
||||
|
||||
if [ ! -d "$ROOT" ]; then
|
||||
entrypoint_log "WARNING: $ROOT not found; skipping noindex injection"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
find "$ROOT" -type f -name '*.html' | while read -r file; do
|
||||
if grep -q "$MARKER" "$file"; then
|
||||
continue
|
||||
fi
|
||||
if grep -q '<meta name="robots" content="noindex' "$file"; then
|
||||
sed -i "1a\\
|
||||
$MARKER
|
||||
" "$file"
|
||||
continue
|
||||
fi
|
||||
sed -i "s|</head>| $META_TAG\\
|
||||
$MARKER\\
|
||||
</head>|" "$file"
|
||||
done
|
||||
|
||||
entrypoint_log "ROBOTS_NOINDEX: injected meta into HTML files"
|
||||
+64
-41
@@ -12,7 +12,7 @@ http {
|
||||
default_type application/octet-stream;
|
||||
|
||||
gzip_static on;
|
||||
|
||||
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
gzip_min_length 1024;
|
||||
@@ -27,27 +27,65 @@ http {
|
||||
index index.html;
|
||||
absolute_redirect off;
|
||||
|
||||
location ~ ^/(en|ar|be|da|de|es|fr|id|it|ko|nl|pt|ru|sv|tr|vi|zh|zh-TW)(/.*)?$ {
|
||||
try_files $uri $uri/ $uri.html /$1/index.html /index.html;
|
||||
expires 5m;
|
||||
add_header Cache-Control "public, must-revalidate";
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
include /etc/nginx/security-headers.conf;
|
||||
|
||||
|
||||
location ^~ /pdfjs-viewer/ {
|
||||
try_files $uri =404;
|
||||
expires 1y;
|
||||
}
|
||||
location ^~ /pdfjs-annotation-viewer/ {
|
||||
try_files $uri =404;
|
||||
expires 1y;
|
||||
}
|
||||
|
||||
location ~ ^/(.+?)/(en|ar|be|da|de|es|fr|id|it|ko|nl|pt|ru|sv|tr|vi|zh|zh-TW)(/.*)?$ {
|
||||
try_files $uri $uri/ $uri.html /$1/$2/index.html /$1/index.html /index.html;
|
||||
if ($request_uri ~ ^/ua(/.*)?$) {
|
||||
return 301 /uk$1;
|
||||
}
|
||||
|
||||
if ($request_uri ~ ^/tools/$) {
|
||||
return 301 /tools;
|
||||
}
|
||||
if ($request_uri ~ ^/tools/([a-z0-9][a-z0-9-]+?)(?:\.html)?(\?.*)?$) {
|
||||
return 301 /$1$2;
|
||||
}
|
||||
|
||||
if ($request_uri ~ ^/(getting-started|contributing)(\?.*)?$) {
|
||||
return 301 /docs/$1$2;
|
||||
}
|
||||
|
||||
if ($request_uri ~ ^/self-hosting(/.*)?$) {
|
||||
return 301 /docs/self-hosting$1;
|
||||
}
|
||||
|
||||
if ($request_uri ~ ^/docs/(.+?)/index\.html(\?.*)?$) {
|
||||
return 301 /docs/$1/$2;
|
||||
}
|
||||
if ($request_uri ~ ^/docs/index\.html(\?.*)?$) {
|
||||
return 301 /docs/$1;
|
||||
}
|
||||
if ($request_uri ~ ^/docs/(.+?)\.html(\?.*)?$) {
|
||||
return 301 /docs/$1$2;
|
||||
}
|
||||
|
||||
if ($request_uri ~ ^(/(?:en|ar|be|da|de|es|fr|id|it|ko|nl|pt|ru|sv|tr|vi|zh|zh-TW|uk|ja))?/index\.html(\?.*)?$) {
|
||||
return 301 $1/$2;
|
||||
}
|
||||
if ($request_uri ~ ^(/(?:en|ar|be|da|de|es|fr|id|it|ko|nl|pt|ru|sv|tr|vi|zh|zh-TW|uk|ja))?/([a-z0-9][a-z0-9-]*)\.html(\?.*)?$) {
|
||||
return 301 $1/$2$3;
|
||||
}
|
||||
|
||||
location ~ /src/pages/ {
|
||||
return 404;
|
||||
}
|
||||
|
||||
location ~ ^/(en|ar|be|da|de|es|fr|id|it|ko|nl|pt|ru|sv|tr|vi|zh|zh-TW|uk|ja)(/.*)?$ {
|
||||
try_files $uri $uri/ $uri.html =404;
|
||||
expires 5m;
|
||||
add_header Cache-Control "public, must-revalidate";
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
}
|
||||
|
||||
location ~* \.html$ {
|
||||
expires 1h;
|
||||
add_header Cache-Control "public, must-revalidate";
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
}
|
||||
|
||||
location ~* /libreoffice-wasm/soffice\.wasm\.gz$ {
|
||||
@@ -55,9 +93,8 @@ http {
|
||||
types {} default_type application/wasm;
|
||||
add_header Content-Encoding gzip;
|
||||
add_header Vary "Accept-Encoding";
|
||||
add_header Cache-Control "public, immutable";
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
include /etc/nginx/security-headers.conf;
|
||||
expires 1y;
|
||||
}
|
||||
|
||||
location ~* /libreoffice-wasm/soffice\.data\.gz$ {
|
||||
@@ -65,55 +102,41 @@ http {
|
||||
types {} default_type application/octet-stream;
|
||||
add_header Content-Encoding gzip;
|
||||
add_header Vary "Accept-Encoding";
|
||||
add_header Cache-Control "public, immutable";
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
include /etc/nginx/security-headers.conf;
|
||||
expires 1y;
|
||||
}
|
||||
|
||||
location ~* \.(wasm|wasm\.gz|data|data\.gz)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
}
|
||||
|
||||
location ~* \.(js|mjs|css|woff|woff2|ttf|eot|otf)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
}
|
||||
|
||||
location ~* \.(png|jpg|jpeg|gif|ico|svg|webp|avif|mp4|webm)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
location ~* \.json$ {
|
||||
expires 1w;
|
||||
add_header Cache-Control "public, must-revalidate";
|
||||
expires epoch;
|
||||
}
|
||||
|
||||
location ~* \.pdf$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
error_page 404 /404.html;
|
||||
|
||||
location ^~ /docs/ {
|
||||
include /etc/nginx/security-headers-docs.conf;
|
||||
try_files $uri $uri/ $uri.html /docs/index.html =404;
|
||||
expires 5m;
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ $uri.html =404;
|
||||
expires 5m;
|
||||
add_header Cache-Control "public, must-revalidate";
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
}
|
||||
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Resource-Policy "cross-origin" always;
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+1047
-1670
File diff suppressed because it is too large
Load Diff
+24
-10
@@ -1,12 +1,13 @@
|
||||
{
|
||||
"name": "bento-pdf",
|
||||
"private": true,
|
||||
"version": "2.8.1",
|
||||
"version": "2.8.8",
|
||||
"license": "AGPL-3.0-only",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "tsc && vite build && NODE_OPTIONS='--max-old-space-size=3072' node scripts/generate-i18n-pages.mjs && node scripts/generate-sitemap.mjs",
|
||||
"build": "tsc && vite build && NODE_OPTIONS='--max-old-space-size=3072' node scripts/generate-i18n-pages.mjs && node scripts/generate-sitemap.mjs && node scripts/generate-security-headers.mjs && node scripts/seo-audit.mjs",
|
||||
"seo-audit": "node scripts/seo-audit.mjs",
|
||||
"build:with-docs": "npm run build && npm run docs:build && node scripts/include-docs-in-dist.js",
|
||||
"build:gzip": "COMPRESSION_MODE=g npm run build",
|
||||
"build:brotli": "COMPRESSION_MODE=b npm run build",
|
||||
@@ -22,7 +23,6 @@
|
||||
"test:watch": "vitest watch",
|
||||
"build:docker": "vite build",
|
||||
"format": "prettier --write .",
|
||||
"update-version": "node scripts/update-version.js",
|
||||
"release": "node scripts/release.js patch",
|
||||
"release:minor": "node scripts/release.js minor",
|
||||
"release:major": "node scripts/release.js major",
|
||||
@@ -34,6 +34,11 @@
|
||||
"docs:preview": "vitepress preview docs",
|
||||
"lint": "eslint .",
|
||||
"lint:fix": "eslint . --fix",
|
||||
"lint:security": "eslint . --no-inline-config --rule 'no-unsanitized/method:error' --rule 'no-unsanitized/property:error' --rule 'security/detect-eval-with-expression:error'",
|
||||
"security:codeql": "codeql database create ./codeql-db --language=javascript-typescript --source-root=. --overwrite --threads=0 && codeql database analyze ./codeql-db --format=sarif-latest --output=codeql-results.sarif --threads=0 codeql/javascript-queries:codeql-suites/javascript-security-extended.qls",
|
||||
"security:codeql:quick": "codeql database analyze ./codeql-db --format=csv --output=codeql-results.csv --threads=0 codeql/javascript-queries:codeql-suites/javascript-security-extended.qls",
|
||||
"security:patterns": "node scripts/security-patterns-check.mjs",
|
||||
"security:audit": "npm audit --audit-level=high && npm run lint:security && npm run security:patterns",
|
||||
"prepare": "husky"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -49,6 +54,8 @@
|
||||
"@vitest/ui": "^4.0.18",
|
||||
"eslint": "^10.0.2",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-no-unsanitized": "^4.1.5",
|
||||
"eslint-plugin-security": "^4.0.0",
|
||||
"globals": "^17.4.0",
|
||||
"husky": "^9.1.7",
|
||||
"jsdom": "^28.1.0",
|
||||
@@ -56,10 +63,10 @@
|
||||
"prettier": "^3.8.1",
|
||||
"typescript": "~5.9.3",
|
||||
"typescript-eslint": "^8.56.1",
|
||||
"vite": "^7.3.1",
|
||||
"vite": "^8.0.16",
|
||||
"vite-plugin-compression": "^0.5.1",
|
||||
"vite-plugin-handlebars": "^2.0.0",
|
||||
"vite-plugin-node-polyfills": "^0.25.0",
|
||||
"vite-plugin-node-polyfills": "^0.26.0",
|
||||
"vitepress": "^1.6.4",
|
||||
"vitest": "^4.0.18",
|
||||
"vue": "^3.5.29"
|
||||
@@ -83,23 +90,26 @@
|
||||
"@types/node-forge": "^1.3.14",
|
||||
"@types/papaparse": "^5.5.2",
|
||||
"archiver": "^7.0.1",
|
||||
"bentopdf-pdfium": "file:vendor/bentopdf-pdfium/bentopdf-pdfium-8ff5002c6cd5.tgz",
|
||||
"bentopdf-viewer": "file:vendor/bentopdf-viewer/bentopdf-viewer-8ff5002c6cd5.tgz",
|
||||
"blob-stream": "^0.1.3",
|
||||
"bwip-js": "^4.8.0",
|
||||
"cropperjs": "^1.6.2",
|
||||
"diff": "^8.0.3",
|
||||
"embedpdf-snippet": "file:vendor/embedpdf/embedpdf-snippet-2.9.1.tgz",
|
||||
"dompurify": "^3.4.12",
|
||||
"fast-xml-parser": "^5.7.1",
|
||||
"heic2any": "^0.0.4",
|
||||
"highlight.js": "^11.11.1",
|
||||
"html2canvas": "^1.4.1",
|
||||
"i18next": "^25.8.13",
|
||||
"i18next-browser-languagedetector": "^8.2.1",
|
||||
"i18next-http-backend": "^3.0.2",
|
||||
"i18next-http-backend": "^3.0.6",
|
||||
"jspdf": "^4.2.1",
|
||||
"jspdf-autotable": "^5.0.2",
|
||||
"jszip": "^3.10.1",
|
||||
"lit": "^3.3.2",
|
||||
"lucide": "^0.575.0",
|
||||
"markdown-it": "^14.1.1",
|
||||
"markdown-it": "^14.2.0",
|
||||
"markdown-it-abbr": "^2.0.0",
|
||||
"markdown-it-anchor": "^9.2.0",
|
||||
"markdown-it-deflist": "^3.0.0",
|
||||
@@ -111,7 +121,7 @@
|
||||
"markdown-it-sup": "^2.0.0",
|
||||
"markdown-it-task-lists": "^2.1.1",
|
||||
"markdown-it-toc-done-right": "^4.2.0",
|
||||
"mermaid": "^11.12.3",
|
||||
"mermaid": "^11.16.1",
|
||||
"microdiff": "^1.5.0",
|
||||
"node-forge": "^1.4.0",
|
||||
"papaparse": "^5.5.3",
|
||||
@@ -146,9 +156,13 @@
|
||||
]
|
||||
},
|
||||
"overrides": {
|
||||
"uuid": "^14",
|
||||
"node-forge": "^1.4.0",
|
||||
"flatted": "^3.4.2",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1"
|
||||
"react-dom": "^18.3.1",
|
||||
"lodash-es": "^4.18.1",
|
||||
"follow-redirects": "^1.15.11",
|
||||
"esbuild": "^0.25.0"
|
||||
}
|
||||
}
|
||||
|
||||
+48
-49
@@ -18,7 +18,7 @@
|
||||
<meta name="robots" content="index, follow, max-image-preview:large" />
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="https://www.bentopdf.com/pdf-converter.html" />
|
||||
<link rel="canonical" href="https://www.bentopdf.com/pdf-converter" />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website" />
|
||||
@@ -112,247 +112,247 @@
|
||||
<div
|
||||
class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-4"
|
||||
>
|
||||
<a href="/src/pages/word-to-pdf.html" class="tool-card">
|
||||
<a href="/word-to-pdf" class="tool-card">
|
||||
<i
|
||||
class="ph ph-microsoft-word-logo text-4xl text-indigo-400 mb-2"
|
||||
></i>
|
||||
<h3 class="font-semibold text-white">Word to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">DOCX, DOC to PDF</p>
|
||||
</a>
|
||||
<a href="/src/pages/excel-to-pdf.html" class="tool-card">
|
||||
<a href="/excel-to-pdf" class="tool-card">
|
||||
<i
|
||||
class="ph ph-microsoft-excel-logo text-4xl text-indigo-400 mb-2"
|
||||
></i>
|
||||
<h3 class="font-semibold text-white">Excel to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">XLSX, XLS to PDF</p>
|
||||
</a>
|
||||
<a href="/src/pages/powerpoint-to-pdf.html" class="tool-card">
|
||||
<a href="/powerpoint-to-pdf" class="tool-card">
|
||||
<i
|
||||
class="ph ph-microsoft-powerpoint-logo text-4xl text-indigo-400 mb-2"
|
||||
></i>
|
||||
<h3 class="font-semibold text-white">PowerPoint to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">PPTX, PPT to PDF</p>
|
||||
</a>
|
||||
<a href="/src/pages/jpg-to-pdf.html" class="tool-card">
|
||||
<a href="/jpg-to-pdf" class="tool-card">
|
||||
<i class="ph ph-file-jpg text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">JPG to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Convert images</p>
|
||||
</a>
|
||||
<a href="/src/pages/png-to-pdf.html" class="tool-card">
|
||||
<a href="/png-to-pdf" class="tool-card">
|
||||
<i class="ph ph-file-png text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PNG to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Convert images</p>
|
||||
</a>
|
||||
<a href="/src/pages/image-to-pdf.html" class="tool-card">
|
||||
<a href="/image-to-pdf" class="tool-card">
|
||||
<i class="ph ph-images text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Image to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Any image to PDF</p>
|
||||
</a>
|
||||
<a href="/src/pages/webp-to-pdf.html" class="tool-card">
|
||||
<a href="/webp-to-pdf" class="tool-card">
|
||||
<i class="ph ph-image text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">WebP to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Modern format</p>
|
||||
</a>
|
||||
<a href="/src/pages/svg-to-pdf.html" class="tool-card">
|
||||
<a href="/svg-to-pdf" class="tool-card">
|
||||
<i class="ph ph-file-svg text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">SVG to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Vector to PDF</p>
|
||||
</a>
|
||||
<a href="/src/pages/heic-to-pdf.html" class="tool-card">
|
||||
<a href="/heic-to-pdf" class="tool-card">
|
||||
<i class="ph ph-device-mobile text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">HEIC to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">iPhone photos</p>
|
||||
</a>
|
||||
<a href="/src/pages/tiff-to-pdf.html" class="tool-card">
|
||||
<a href="/tiff-to-pdf" class="tool-card">
|
||||
<i class="ph ph-image text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">TIFF to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Convert TIFF</p>
|
||||
</a>
|
||||
<a href="/src/pages/bmp-to-pdf.html" class="tool-card">
|
||||
<a href="/bmp-to-pdf" class="tool-card">
|
||||
<i class="ph ph-image text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">BMP to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Convert BMP</p>
|
||||
</a>
|
||||
<a href="/src/pages/txt-to-pdf.html" class="tool-card">
|
||||
<a href="/txt-to-pdf" class="tool-card">
|
||||
<i class="ph ph-text-t text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Text to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Plain text</p>
|
||||
</a>
|
||||
<a href="/src/pages/markdown-to-pdf.html" class="tool-card">
|
||||
<a href="/markdown-to-pdf" class="tool-card">
|
||||
<i class="ph ph-markdown-logo text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Markdown to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">MD to PDF</p>
|
||||
</a>
|
||||
<a href="/src/pages/csv-to-pdf.html" class="tool-card">
|
||||
<a href="/csv-to-pdf" class="tool-card">
|
||||
<i class="ph ph-file-csv text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">CSV to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Spreadsheet</p>
|
||||
</a>
|
||||
<a href="/src/pages/json-to-pdf.html" class="tool-card">
|
||||
<a href="/json-to-pdf" class="tool-card">
|
||||
<i class="ph ph-file-code text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">JSON to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Data to PDF</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-docx.html" class="tool-card">
|
||||
<a href="/pdf-to-docx" class="tool-card">
|
||||
<i
|
||||
class="ph ph-microsoft-word-logo text-4xl text-indigo-400 mb-2"
|
||||
></i>
|
||||
<h3 class="font-semibold text-white">PDF to Word</h3>
|
||||
<p class="text-gray-400 text-sm">Editable DOCX</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-excel.html" class="tool-card">
|
||||
<a href="/pdf-to-excel" class="tool-card">
|
||||
<i
|
||||
class="ph ph-microsoft-excel-logo text-4xl text-indigo-400 mb-2"
|
||||
></i>
|
||||
<h3 class="font-semibold text-white">PDF to Excel</h3>
|
||||
<p class="text-gray-400 text-sm">Extract tables</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-jpg.html" class="tool-card">
|
||||
<a href="/pdf-to-jpg" class="tool-card">
|
||||
<i class="ph ph-file-image text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to JPG</h3>
|
||||
<p class="text-gray-400 text-sm">Convert to images</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-png.html" class="tool-card">
|
||||
<a href="/pdf-to-png" class="tool-card">
|
||||
<i class="ph ph-file-image text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to PNG</h3>
|
||||
<p class="text-gray-400 text-sm">Convert to images</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-text.html" class="tool-card">
|
||||
<a href="/pdf-to-text" class="tool-card">
|
||||
<i class="ph ph-text-aa text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to Text</h3>
|
||||
<p class="text-gray-400 text-sm">Extract text</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-markdown.html" class="tool-card">
|
||||
<a href="/pdf-to-markdown" class="tool-card">
|
||||
<i class="ph ph-markdown-logo text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to Markdown</h3>
|
||||
<p class="text-gray-400 text-sm">Extract as MD</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-csv.html" class="tool-card">
|
||||
<a href="/pdf-to-csv" class="tool-card">
|
||||
<i class="ph ph-file-csv text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to CSV</h3>
|
||||
<p class="text-gray-400 text-sm">Extract tables</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-json.html" class="tool-card">
|
||||
<a href="/pdf-to-json" class="tool-card">
|
||||
<i class="ph ph-file-code text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to JSON</h3>
|
||||
<p class="text-gray-400 text-sm">Structured data</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-svg.html" class="tool-card">
|
||||
<a href="/pdf-to-svg" class="tool-card">
|
||||
<i class="ph ph-file-code text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to SVG</h3>
|
||||
<p class="text-gray-400 text-sm">Vector output</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-webp.html" class="tool-card">
|
||||
<a href="/pdf-to-webp" class="tool-card">
|
||||
<i class="ph ph-file-image text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to WebP</h3>
|
||||
<p class="text-gray-400 text-sm">Modern format</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-tiff.html" class="tool-card">
|
||||
<a href="/pdf-to-tiff" class="tool-card">
|
||||
<i class="ph ph-file-image text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to TIFF</h3>
|
||||
<p class="text-gray-400 text-sm">Convert to TIFF</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-bmp.html" class="tool-card">
|
||||
<a href="/pdf-to-bmp" class="tool-card">
|
||||
<i class="ph ph-file-image text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to BMP</h3>
|
||||
<p class="text-gray-400 text-sm">Convert to BMP</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-greyscale.html" class="tool-card">
|
||||
<a href="/pdf-to-greyscale" class="tool-card">
|
||||
<i class="ph ph-palette text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to Greyscale</h3>
|
||||
<p class="text-gray-400 text-sm">Remove colors</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-pdfa.html" class="tool-card">
|
||||
<a href="/pdf-to-pdfa" class="tool-card">
|
||||
<i class="ph ph-archive text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to PDF/A</h3>
|
||||
<p class="text-gray-400 text-sm">Archive format</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-zip.html" class="tool-card">
|
||||
<a href="/pdf-to-zip" class="tool-card">
|
||||
<i class="ph ph-file-zip text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF to ZIP</h3>
|
||||
<p class="text-gray-400 text-sm">Package files</p>
|
||||
</a>
|
||||
<a href="/src/pages/odt-to-pdf.html" class="tool-card">
|
||||
<a href="/odt-to-pdf" class="tool-card">
|
||||
<i class="ph ph-file text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">ODT to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">OpenDocument</p>
|
||||
</a>
|
||||
<a href="/src/pages/ods-to-pdf.html" class="tool-card">
|
||||
<a href="/ods-to-pdf" class="tool-card">
|
||||
<i class="ph ph-table text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">ODS to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">OpenDocument</p>
|
||||
</a>
|
||||
<a href="/src/pages/odp-to-pdf.html" class="tool-card">
|
||||
<a href="/odp-to-pdf" class="tool-card">
|
||||
<i class="ph ph-presentation text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">ODP to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">OpenDocument</p>
|
||||
</a>
|
||||
<a href="/src/pages/odg-to-pdf.html" class="tool-card">
|
||||
<a href="/odg-to-pdf" class="tool-card">
|
||||
<i class="ph ph-image text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">ODG to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Graphics</p>
|
||||
</a>
|
||||
<a href="/src/pages/rtf-to-pdf.html" class="tool-card">
|
||||
<a href="/rtf-to-pdf" class="tool-card">
|
||||
<i class="ph ph-file-text text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">RTF to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Rich text</p>
|
||||
</a>
|
||||
<a href="/src/pages/epub-to-pdf.html" class="tool-card">
|
||||
<a href="/epub-to-pdf" class="tool-card">
|
||||
<i class="ph ph-book-open-text text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">EPUB to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">E-book format</p>
|
||||
</a>
|
||||
<a href="/src/pages/mobi-to-pdf.html" class="tool-card">
|
||||
<a href="/mobi-to-pdf" class="tool-card">
|
||||
<i class="ph ph-book-open-text text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">MOBI to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Kindle format</p>
|
||||
</a>
|
||||
<a href="/src/pages/cbz-to-pdf.html" class="tool-card">
|
||||
<a href="/cbz-to-pdf" class="tool-card">
|
||||
<i class="ph ph-book-open text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">CBZ to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Comic archive</p>
|
||||
</a>
|
||||
<a href="/src/pages/fb2-to-pdf.html" class="tool-card">
|
||||
<a href="/fb2-to-pdf" class="tool-card">
|
||||
<i class="ph ph-book-bookmark text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">FB2 to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">FictionBook</p>
|
||||
</a>
|
||||
<a href="/src/pages/psd-to-pdf.html" class="tool-card">
|
||||
<a href="/psd-to-pdf" class="tool-card">
|
||||
<i class="ph ph-image text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PSD to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Photoshop</p>
|
||||
</a>
|
||||
<a href="/src/pages/xps-to-pdf.html" class="tool-card">
|
||||
<a href="/xps-to-pdf" class="tool-card">
|
||||
<i class="ph ph-scan text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">XPS to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Microsoft XPS</p>
|
||||
</a>
|
||||
<a href="/src/pages/pages-to-pdf.html" class="tool-card">
|
||||
<a href="/pages-to-pdf" class="tool-card">
|
||||
<i class="ph ph-file-text text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Pages to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Apple Pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/pub-to-pdf.html" class="tool-card">
|
||||
<a href="/pub-to-pdf" class="tool-card">
|
||||
<i class="ph ph-book-open text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PUB to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Publisher</p>
|
||||
</a>
|
||||
<a href="/src/pages/vsd-to-pdf.html" class="tool-card">
|
||||
<a href="/vsd-to-pdf" class="tool-card">
|
||||
<i class="ph ph-git-branch text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">VSD to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Visio</p>
|
||||
</a>
|
||||
<a href="/src/pages/wpd-to-pdf.html" class="tool-card">
|
||||
<a href="/wpd-to-pdf" class="tool-card">
|
||||
<i class="ph ph-file-text text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">WPD to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">WordPerfect</p>
|
||||
</a>
|
||||
<a href="/src/pages/wps-to-pdf.html" class="tool-card">
|
||||
<a href="/wps-to-pdf" class="tool-card">
|
||||
<i class="ph ph-file-text text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">WPS to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">WPS Office</p>
|
||||
</a>
|
||||
<a href="/src/pages/xml-to-pdf.html" class="tool-card">
|
||||
<a href="/xml-to-pdf" class="tool-card">
|
||||
<i class="ph ph-file-code text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">XML to PDF</h3>
|
||||
<p class="text-gray-400 text-sm">XML data</p>
|
||||
@@ -485,7 +485,6 @@
|
||||
{{> footer }}
|
||||
|
||||
<script type="module" src="/src/js/utils/lucide-init.ts"></script>
|
||||
<script type="module" src="/src/version.ts"></script>
|
||||
<script type="module" src="/src/js/mobileMenu.ts"></script>
|
||||
<script type="module" src="/src/js/main.ts"></script>
|
||||
|
||||
|
||||
+29
-25
@@ -18,7 +18,7 @@
|
||||
<meta name="robots" content="index, follow, max-image-preview:large" />
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="https://www.bentopdf.com/pdf-editor.html" />
|
||||
<link rel="canonical" href="https://www.bentopdf.com/pdf-editor" />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website" />
|
||||
@@ -111,117 +111,122 @@
|
||||
<div
|
||||
class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-4"
|
||||
>
|
||||
<a href="/src/pages/edit-pdf.html" class="tool-card">
|
||||
<a href="/edit-pdf" class="tool-card">
|
||||
<i class="ph ph-pencil-simple text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Edit PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Comprehensive editing</p>
|
||||
</a>
|
||||
<a href="/src/pages/compress-pdf.html" class="tool-card">
|
||||
<a href="/edit-pdf-text" class="tool-card">
|
||||
<i class="ph ph-cursor-text text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Edit PDF Text</h3>
|
||||
<p class="text-gray-400 text-sm">Rewrite text in place</p>
|
||||
</a>
|
||||
<a href="/compress-pdf" class="tool-card">
|
||||
<i class="ph ph-lightning text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Compress PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Reduce file size</p>
|
||||
</a>
|
||||
<a href="/src/pages/rotate-pdf.html" class="tool-card">
|
||||
<a href="/rotate-pdf" class="tool-card">
|
||||
<i class="ph ph-arrow-clockwise text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Rotate PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Rotate pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/crop-pdf.html" class="tool-card">
|
||||
<a href="/crop-pdf" class="tool-card">
|
||||
<i class="ph ph-crop text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Crop PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Trim pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/organize-pdf.html" class="tool-card">
|
||||
<a href="/organize-pdf" class="tool-card">
|
||||
<i class="ph ph-files text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Organize PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Reorder pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/delete-pages.html" class="tool-card">
|
||||
<a href="/delete-pages" class="tool-card">
|
||||
<i class="ph ph-trash text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Delete Pages</h3>
|
||||
<p class="text-gray-400 text-sm">Remove pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/add-watermark.html" class="tool-card">
|
||||
<a href="/add-watermark" class="tool-card">
|
||||
<i class="ph ph-drop text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Add Watermark</h3>
|
||||
<p class="text-gray-400 text-sm">Protect PDFs</p>
|
||||
</a>
|
||||
<a href="/src/pages/header-footer.html" class="tool-card">
|
||||
<a href="/header-footer" class="tool-card">
|
||||
<i class="ph ph-paragraph text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Header & Footer</h3>
|
||||
<p class="text-gray-400 text-sm">Add headers/footers</p>
|
||||
</a>
|
||||
<a href="/src/pages/page-numbers.html" class="tool-card">
|
||||
<a href="/page-numbers" class="tool-card">
|
||||
<i class="ph ph-list-numbers text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Page Numbers</h3>
|
||||
<p class="text-gray-400 text-sm">Number pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/background-color.html" class="tool-card">
|
||||
<a href="/background-color" class="tool-card">
|
||||
<i class="ph ph-palette text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Background Color</h3>
|
||||
<p class="text-gray-400 text-sm">Change background</p>
|
||||
</a>
|
||||
<a href="/src/pages/text-color.html" class="tool-card">
|
||||
<a href="/text-color" class="tool-card">
|
||||
<i class="ph ph-eyedropper text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Text Color</h3>
|
||||
<p class="text-gray-400 text-sm">Change text color</p>
|
||||
</a>
|
||||
<a href="/src/pages/invert-colors.html" class="tool-card">
|
||||
<a href="/invert-colors" class="tool-card">
|
||||
<i class="ph ph-circle-half text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Invert Colors</h3>
|
||||
<p class="text-gray-400 text-sm">Dark mode</p>
|
||||
</a>
|
||||
<a href="/src/pages/add-blank-page.html" class="tool-card">
|
||||
<a href="/add-blank-page" class="tool-card">
|
||||
<i class="ph ph-file-plus text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Add Blank Page</h3>
|
||||
<p class="text-gray-400 text-sm">Insert pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/reverse-pages.html" class="tool-card">
|
||||
<a href="/reverse-pages" class="tool-card">
|
||||
<i class="ph ph-sort-descending text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Reverse Pages</h3>
|
||||
<p class="text-gray-400 text-sm">Reverse order</p>
|
||||
</a>
|
||||
<a href="/src/pages/divide-pages.html" class="tool-card">
|
||||
<a href="/divide-pages" class="tool-card">
|
||||
<i class="ph ph-columns text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Divide Pages</h3>
|
||||
<p class="text-gray-400 text-sm">Split into parts</p>
|
||||
</a>
|
||||
<a href="/src/pages/remove-annotations.html" class="tool-card">
|
||||
<a href="/remove-annotations" class="tool-card">
|
||||
<i class="ph ph-eraser text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Remove Annotations</h3>
|
||||
<p class="text-gray-400 text-sm">Clean comments</p>
|
||||
</a>
|
||||
<a href="/src/pages/remove-blank-pages.html" class="tool-card">
|
||||
<a href="/remove-blank-pages" class="tool-card">
|
||||
<i class="ph ph-file-minus text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Remove Blank Pages</h3>
|
||||
<p class="text-gray-400 text-sm">Auto-clean</p>
|
||||
</a>
|
||||
<a href="/src/pages/extract-pages.html" class="tool-card">
|
||||
<a href="/extract-pages" class="tool-card">
|
||||
<i class="ph ph-squares-four text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Extract Pages</h3>
|
||||
<p class="text-gray-400 text-sm">Pull out pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/extract-images.html" class="tool-card">
|
||||
<a href="/extract-images" class="tool-card">
|
||||
<i class="ph ph-download-simple text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Extract Images</h3>
|
||||
<p class="text-gray-400 text-sm">Get images</p>
|
||||
</a>
|
||||
<a href="/src/pages/extract-tables.html" class="tool-card">
|
||||
<a href="/extract-tables" class="tool-card">
|
||||
<i class="ph ph-table text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Extract Tables</h3>
|
||||
<p class="text-gray-400 text-sm">Export tables</p>
|
||||
</a>
|
||||
<a href="/src/pages/n-up-pdf.html" class="tool-card">
|
||||
<a href="/n-up-pdf" class="tool-card">
|
||||
<i class="ph ph-squares-four text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">N-up PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Multiple per page</p>
|
||||
</a>
|
||||
<a href="/src/pages/rotate-custom.html" class="tool-card">
|
||||
<a href="/rotate-custom" class="tool-card">
|
||||
<i class="ph ph-arrows-clockwise text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Custom Rotation</h3>
|
||||
<p class="text-gray-400 text-sm">Precise angles</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-to-greyscale.html" class="tool-card">
|
||||
<a href="/pdf-to-greyscale" class="tool-card">
|
||||
<i class="ph ph-palette text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">To Greyscale</h3>
|
||||
<p class="text-gray-400 text-sm">Remove color</p>
|
||||
@@ -354,7 +359,6 @@
|
||||
{{> footer }}
|
||||
|
||||
<script type="module" src="/src/js/utils/lucide-init.ts"></script>
|
||||
<script type="module" src="/src/version.ts"></script>
|
||||
<script type="module" src="/src/js/mobileMenu.ts"></script>
|
||||
<script type="module" src="/src/js/main.ts"></script>
|
||||
|
||||
|
||||
+19
-18
@@ -14,16 +14,13 @@
|
||||
/>
|
||||
<meta
|
||||
name="keywords"
|
||||
content="pdf merge & split, merge pdf, split pdf, organize pdf, extract pages, delete pages, divide pages, add blank page, reverse pages, alternate merge, combine pages, compare pdfs, pdf booklet"
|
||||
content="pdf merge & split, merge pdf, split pdf, organize pdf, extract pages, delete pages, divide pages, add blank page, reverse pages, alternate merge, duplex collate, combine pages, compare pdfs, pdf booklet"
|
||||
/>
|
||||
<meta name="author" content="BentoPDF" />
|
||||
<meta name="robots" content="index, follow, max-image-preview:large" />
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link
|
||||
rel="canonical"
|
||||
href="https://www.bentopdf.com/pdf-merge-split.html"
|
||||
/>
|
||||
<link rel="canonical" href="https://www.bentopdf.com/pdf-merge-split" />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website" />
|
||||
@@ -122,64 +119,69 @@
|
||||
<div
|
||||
class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-4"
|
||||
>
|
||||
<a href="/src/pages/merge-pdf.html" class="tool-card">
|
||||
<a href="/merge-pdf" class="tool-card">
|
||||
<i class="ph ph-browsers text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Merge PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Combine PDFs</p>
|
||||
</a>
|
||||
<a href="/src/pages/split-pdf.html" class="tool-card">
|
||||
<a href="/split-pdf" class="tool-card">
|
||||
<i class="ph ph-scissors text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Split PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Separate pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/organize-pdf.html" class="tool-card">
|
||||
<a href="/organize-pdf" class="tool-card">
|
||||
<i class="ph ph-files text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Organize PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Reorder pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/extract-pages.html" class="tool-card">
|
||||
<a href="/extract-pages" class="tool-card">
|
||||
<i class="ph ph-squares-four text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Extract Pages</h3>
|
||||
<p class="text-gray-400 text-sm">Pull out pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/delete-pages.html" class="tool-card">
|
||||
<a href="/delete-pages" class="tool-card">
|
||||
<i class="ph ph-trash text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Delete Pages</h3>
|
||||
<p class="text-gray-400 text-sm">Remove pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/divide-pages.html" class="tool-card">
|
||||
<a href="/divide-pages" class="tool-card">
|
||||
<i class="ph ph-columns text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Divide Pages</h3>
|
||||
<p class="text-gray-400 text-sm">Split into parts</p>
|
||||
</a>
|
||||
<a href="/src/pages/add-blank-page.html" class="tool-card">
|
||||
<a href="/add-blank-page" class="tool-card">
|
||||
<i class="ph ph-file-plus text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Add Blank Page</h3>
|
||||
<p class="text-gray-400 text-sm">Insert pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/reverse-pages.html" class="tool-card">
|
||||
<a href="/reverse-pages" class="tool-card">
|
||||
<i class="ph ph-sort-descending text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Reverse Pages</h3>
|
||||
<p class="text-gray-400 text-sm">Reverse order</p>
|
||||
</a>
|
||||
<a href="/src/pages/alternate-merge.html" class="tool-card">
|
||||
<a href="/alternate-merge" class="tool-card">
|
||||
<i class="ph ph-shuffle text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Alternate Merge</h3>
|
||||
<p class="text-gray-400 text-sm">Interleave PDFs</p>
|
||||
</a>
|
||||
<a href="/src/pages/combine-single-page.html" class="tool-card">
|
||||
<a href="/duplex-collate" class="tool-card">
|
||||
<i class="ph ph-arrows-vertical text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Duplex Collate</h3>
|
||||
<p class="text-gray-400 text-sm">Front/back sort</p>
|
||||
</a>
|
||||
<a href="/combine-single-page" class="tool-card">
|
||||
<i
|
||||
class="ph ph-arrows-out-line-vertical text-4xl text-indigo-400 mb-2"
|
||||
></i>
|
||||
<h3 class="font-semibold text-white">Combine Pages</h3>
|
||||
<p class="text-gray-400 text-sm">Join pages</p>
|
||||
</a>
|
||||
<a href="/src/pages/compare-pdfs.html" class="tool-card">
|
||||
<a href="/compare-pdfs" class="tool-card">
|
||||
<i class="ph ph-git-diff text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Compare PDFs</h3>
|
||||
<p class="text-gray-400 text-sm">Find differences</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-booklet.html" class="tool-card">
|
||||
<a href="/pdf-booklet" class="tool-card">
|
||||
<i class="ph ph-book-open text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF Booklet</h3>
|
||||
<p class="text-gray-400 text-sm">Create booklet</p>
|
||||
@@ -312,7 +314,6 @@
|
||||
{{> footer }}
|
||||
|
||||
<script type="module" src="/src/js/utils/lucide-init.ts"></script>
|
||||
<script type="module" src="/src/version.ts"></script>
|
||||
<script type="module" src="/src/js/mobileMenu.ts"></script>
|
||||
<script type="module" src="/src/js/main.ts"></script>
|
||||
|
||||
|
||||
+15
-16
@@ -18,7 +18,7 @@
|
||||
<meta name="robots" content="index, follow, max-image-preview:large" />
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="https://www.bentopdf.com/pdf-security.html" />
|
||||
<link rel="canonical" href="https://www.bentopdf.com/pdf-security" />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website" />
|
||||
@@ -111,52 +111,52 @@
|
||||
<div
|
||||
class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-4"
|
||||
>
|
||||
<a href="/src/pages/encrypt-pdf.html" class="tool-card">
|
||||
<a href="/encrypt-pdf" class="tool-card">
|
||||
<i class="ph ph-lock text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Encrypt PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Add password</p>
|
||||
</a>
|
||||
<a href="/src/pages/decrypt-pdf.html" class="tool-card">
|
||||
<a href="/decrypt-pdf" class="tool-card">
|
||||
<i class="ph ph-lock-open text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Decrypt PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Remove password</p>
|
||||
</a>
|
||||
<a href="/src/pages/sign-pdf.html" class="tool-card">
|
||||
<a href="/sign-pdf" class="tool-card">
|
||||
<i class="ph ph-pen-nib text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Sign PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Digital signature</p>
|
||||
</a>
|
||||
<a href="/src/pages/remove-restrictions.html" class="tool-card">
|
||||
<a href="/remove-restrictions" class="tool-card">
|
||||
<i class="ph ph-link-break text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Remove Restrictions</h3>
|
||||
<p class="text-gray-400 text-sm">Unlock editing</p>
|
||||
</a>
|
||||
<a href="/src/pages/change-permissions.html" class="tool-card">
|
||||
<a href="/change-permissions" class="tool-card">
|
||||
<i class="ph ph-shield-check text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Change Permissions</h3>
|
||||
<p class="text-gray-400 text-sm">Set permissions</p>
|
||||
</a>
|
||||
<a href="/src/pages/sanitize-pdf.html" class="tool-card">
|
||||
<a href="/sanitize-pdf" class="tool-card">
|
||||
<i class="ph ph-broom text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Sanitize PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Remove metadata</p>
|
||||
</a>
|
||||
<a href="/src/pages/flatten-pdf.html" class="tool-card">
|
||||
<a href="/flatten-pdf" class="tool-card">
|
||||
<i class="ph ph-stack text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Flatten PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Merge layers</p>
|
||||
</a>
|
||||
<a href="/src/pages/linearize-pdf.html" class="tool-card">
|
||||
<a href="/linearize-pdf" class="tool-card">
|
||||
<i class="ph ph-gauge text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Linearize PDF</h3>
|
||||
<p class="text-gray-400 text-sm">Optimize for web</p>
|
||||
</a>
|
||||
<a href="/src/pages/remove-metadata.html" class="tool-card">
|
||||
<a href="/remove-metadata" class="tool-card">
|
||||
<i class="ph ph-file-x text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">Remove Metadata</h3>
|
||||
<p class="text-gray-400 text-sm">Clean properties</p>
|
||||
</a>
|
||||
<a href="/src/pages/pdf-layers.html" class="tool-card">
|
||||
<a href="/pdf-layers" class="tool-card">
|
||||
<i class="ph ph-stack-simple text-4xl text-indigo-400 mb-2"></i>
|
||||
<h3 class="font-semibold text-white">PDF Layers</h3>
|
||||
<p class="text-gray-400 text-sm">Manage layers</p>
|
||||
@@ -231,11 +231,11 @@
|
||||
<summary
|
||||
class="cursor-pointer font-semibold text-white flex items-center justify-between"
|
||||
>
|
||||
Are these pdf security tools really free?
|
||||
Are these PDF security tools really free?
|
||||
<i class="ph ph-caret-down text-xl"></i>
|
||||
</summary>
|
||||
<p class="mt-3 text-gray-400">
|
||||
Yes! All BentoPDF pdf security tools are 100% free with no hidden
|
||||
Yes! All BentoPDF PDF security tools are 100% free with no hidden
|
||||
fees, no premium tiers, and no subscription required. Use
|
||||
unlimited tools, unlimited times.
|
||||
</p>
|
||||
@@ -250,8 +250,8 @@
|
||||
</summary>
|
||||
<p class="mt-3 text-gray-400">
|
||||
Absolutely! All processing happens entirely in your browser. Your
|
||||
files never leave your device, are never uploaded to servers.
|
||||
Complete privacy guaranteed.
|
||||
files never leave your device and are never uploaded to servers.
|
||||
Complete privacy is guaranteed.
|
||||
</p>
|
||||
</details>
|
||||
|
||||
@@ -289,7 +289,6 @@
|
||||
{{> footer }}
|
||||
|
||||
<script type="module" src="/src/js/utils/lucide-init.ts"></script>
|
||||
<script type="module" src="/src/version.ts"></script>
|
||||
<script type="module" src="/src/js/mobileMenu.ts"></script>
|
||||
<script type="module" src="/src/js/main.ts"></script>
|
||||
|
||||
|
||||
+11
-42
@@ -13,7 +13,7 @@
|
||||
<meta name="robots" content="index, follow" />
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="https://www.bentopdf.com/privacy.html" />
|
||||
<link rel="canonical" href="https://www.bentopdf.com/privacy" />
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website" />
|
||||
@@ -48,7 +48,6 @@
|
||||
/>
|
||||
<meta name="twitter:site" content="@BentoPDF" />
|
||||
|
||||
<title>Privacy Policy - Your Data Stays Private | BentoPDF</title>
|
||||
<link href="/src/css/styles.css" rel="stylesheet" />
|
||||
|
||||
<!-- Web App Manifest -->
|
||||
@@ -84,9 +83,7 @@
|
||||
<h1 class="text-4xl md:text-5xl font-bold text-center text-white mb-4">
|
||||
Privacy Policy
|
||||
</h1>
|
||||
<p class="text-center text-gray-500">
|
||||
Last Updated: September 14, 2025
|
||||
</p>
|
||||
<p class="text-center text-gray-500">Last Updated: August 29, 2026</p>
|
||||
|
||||
<div class="legal-content mt-12">
|
||||
<h2>1. Our Commitment to Privacy</h2>
|
||||
@@ -128,44 +125,17 @@
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>3. Information We May Collect (Non-Personal Data)</h2>
|
||||
<h2>3. No Tracking or Analytics</h2>
|
||||
<p>
|
||||
To improve our website and services, we may collect anonymous,
|
||||
non-personally identifiable information. This type of data helps us
|
||||
understand how users interact with our site, which tools are most
|
||||
popular, and how we can improve the user experience. This includes:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Usage Analytics:</strong> Anonymized data such as which
|
||||
tools are used, how often they are used, and which features are
|
||||
accessed. This is aggregated and cannot be tied back to an
|
||||
individual user or document.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Performance Data:</strong> Anonymized error reports or
|
||||
performance metrics to help us identify and fix bugs. This data
|
||||
contains no personal information or file content.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
We use privacy-respecting analytics platforms for this purpose.
|
||||
Specifically, we use
|
||||
<a
|
||||
href="https://simpleanalytics.com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="text-indigo-400 hover:underline"
|
||||
>Simple Analytics</a
|
||||
>
|
||||
to track anonymous visit counts. This means we can see how many
|
||||
users visit our site, but
|
||||
BentoPDF does not track you at all. We do not use cookies, analytics
|
||||
platforms, error-reporting services, or any tracking scripts, not
|
||||
even on the live website at bentopdf.com. We do not collect usage
|
||||
data, visit counts, performance metrics, or any other information
|
||||
about you or your session, anonymized or otherwise.
|
||||
<strong
|
||||
>we never collect personal information or identify individual
|
||||
users</strong
|
||||
>. Simple Analytics is fully GDPR-compliant and respects user
|
||||
privacy. We do not use tracking cookies for advertising or
|
||||
cross-site profiling.
|
||||
>We never know who you are, how many people use BentoPDF, or what
|
||||
you do with it.</strong
|
||||
>
|
||||
</p>
|
||||
|
||||
<h2>4. Third-Party Libraries</h2>
|
||||
@@ -215,7 +185,6 @@
|
||||
|
||||
{{> footer }}
|
||||
<script type="module" src="src/js/utils/lucide-init.ts"></script>
|
||||
<script type="module" src="src/version.ts"></script>
|
||||
<script type="module" src="src/js/mobileMenu.ts"></script>
|
||||
<script type="module" src="src/js/main.ts"></script>
|
||||
<!-- JSON-LD Schema -->
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Feature/reverse multi pdfs [`#58`](https://github.com/alam00000/bentopdf/pull/58)
|
||||
- added description to Unraid XML [`#65`](https://github.com/alam00000/bentopdf/pull/65)
|
||||
- Added hamburger Navbar [`#62`](https://github.com/alam00000/bentopdf/pull/62)
|
||||
- feat(versioning): Added version management sysytem [`#52`](https://github.com/alam00000/bentopdf/pull/52)
|
||||
- feat(versioning): Added version management system [`#52`](https://github.com/alam00000/bentopdf/pull/52)
|
||||
- Fix#20 : fixed the tesseract issue [`#60`](https://github.com/alam00000/bentopdf/pull/60)
|
||||
- feat: add search bar keyboard shortcut [`#49`](https://github.com/alam00000/bentopdf/pull/49)
|
||||
- feat(pdf-tools): add attachments feature to embed files in PDFs [`#53`](https://github.com/alam00000/bentopdf/pull/53)
|
||||
@@ -27,7 +27,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat: add support for multiple blank pages insertion [`#42`](https://github.com/alam00000/bentopdf/pull/42)
|
||||
- Multiupload handle encrypted pdf [`#43`](https://github.com/alam00000/bentopdf/pull/43)
|
||||
- feat:Setup Prettier for code formatting [`#30`](https://github.com/alam00000/bentopdf/pull/30)
|
||||
- created png as unraid does not supprot svg [`#24`](https://github.com/alam00000/bentopdf/pull/24)
|
||||
- created png as unraid does not support svg [`#24`](https://github.com/alam00000/bentopdf/pull/24)
|
||||
- adding unraid template [`#23`](https://github.com/alam00000/bentopdf/pull/23)
|
||||
- feat(pdf-tools): add alternate merge tool for mixing pdf pages [`#21`](https://github.com/alam00000/bentopdf/pull/21)
|
||||
- feat: add remove blank pages tool with sensitivity control [`#19`](https://github.com/alam00000/bentopdf/pull/19)
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "اتصل بنا",
|
||||
"licensing": "الترخيص",
|
||||
"allTools": "جميع الأدوات",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "فتح القائمة الرئيسية",
|
||||
"language": "اللغة"
|
||||
"language": "اللغة",
|
||||
"searchLanguage": "البحث عن لغة…",
|
||||
"noLanguagesFound": "لم يتم العثور على لغات"
|
||||
},
|
||||
"donation": {
|
||||
"message": "أعجبك BentoPDF؟ ساعدنا في إبقائه مجانيًا ومفتوح المصدر!",
|
||||
@@ -97,8 +100,11 @@
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "كيف يعمل",
|
||||
"step1Title": "تحميل الملف",
|
||||
"step1": "انقر أو اسحب وأفلت ملفك للبدء",
|
||||
"step2Title": "معالجة",
|
||||
"step2": "انقر زر المعالجة للبدء",
|
||||
"step3Title": "تنزيل",
|
||||
"step3": "احفظ ملفك المعالج فورًا"
|
||||
},
|
||||
"relatedTools": {
|
||||
@@ -129,6 +135,10 @@
|
||||
"resetToDefaults": "إعادة التعيين إلى الافتراضي",
|
||||
"fullWidthMode": "وضع العرض الكامل",
|
||||
"fullWidthDescription": "استخدم عرض الشاشة الكامل لجميع الأدوات بدلاً من حاوية مركزية",
|
||||
"compactMode": "الوضع المضغوط",
|
||||
"compactModeDescription": "عرض الأدوات كقائمة مضغوطة بدلاً من بطاقات",
|
||||
"advancedSettings": "الإعدادات المتقدمة",
|
||||
"advancedSettingsDescription": "تكوين وحدات المعالجة الخارجية (PyMuPDF، Ghostscript، CoherentPDF)",
|
||||
"settingsAutoSaved": "يتم حفظ الإعدادات تلقائيًا",
|
||||
"clickToSet": "انقر للتعيين",
|
||||
"pressKeys": "اضغط على المفاتيح...",
|
||||
@@ -206,7 +216,7 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "هل تستخدمون ملفات تعريف الارتباط أو التحليلات لتتبعي؟",
|
||||
"answer": "نحن نهتم بخصوصيتك. BentoPDF لا يتتبع المعلومات الشخصية. نستخدم Simple Analytics فقط لرؤية عدد الزيارات المجهولة. هذا يعني أننا نعرف عدد المستخدمين الذين يزورون موقعنا، لكننا لا نعرف أبدًا من أنت. Simple Analytics متوافق تمامًا مع GDPR ويحترم خصوصيتك."
|
||||
"answer": "لا. لا يتتبعك BentoPDF على الإطلاق. لا نستخدم ملفات تعريف الارتباط أو أدوات التحليلات أو أي نصوص تتبع، ولا حتى على الموقع المباشر bentopdf.com. لا نعرف أبدًا من أنت أو ماذا تفعل بالأدوات."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
@@ -260,11 +270,14 @@
|
||||
"add": "إضافة",
|
||||
"remove": "إزالة",
|
||||
"loading": "جارٍ التحميل...",
|
||||
"loadingPageCount": "جارٍ تحميل الصفحات...",
|
||||
"error": "خطأ",
|
||||
"success": "تم بنجاح",
|
||||
"file": "ملف",
|
||||
"files": "ملفات",
|
||||
"close": "إغلاق"
|
||||
"close": "إغلاق",
|
||||
"convert": "تحويل",
|
||||
"unknownError": "خطأ غير معروف"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -337,9 +350,12 @@
|
||||
"download": "تنزيل:",
|
||||
"downloadSelected": "تنزيل المحدد",
|
||||
"exportPdf": "تصدير PDF",
|
||||
"uploadPdfFiles": "اختر ملفات PDF",
|
||||
"dragAndDrop": "اسحب وأفلت ملفات PDF هنا، أو انقر للاختيار",
|
||||
"uploadPdfFiles": "اختر ملفات PDF أو صور",
|
||||
"dragAndDrop": "اسحب وأفلت ملفات PDF أو الصور هنا، أو انقر للاختيار",
|
||||
"selectFiles": "اختر الملفات",
|
||||
"dropToAdd": "أفلت ملفات PDF أو الصور للإضافة",
|
||||
"convertingImages": "جارٍ تحويل الصور إلى PDF...",
|
||||
"failedToConvertImages": "فشل تحويل الصور إلى PDF.",
|
||||
"renderingPages": "جارٍ عرض الصفحات...",
|
||||
"actions": {
|
||||
"duplicatePage": "تكرار هذه الصفحة",
|
||||
|
||||
+537
-25
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "تحويل من PDF",
|
||||
"organizeManage": "تنظيم وإدارة",
|
||||
"optimizeRepair": "تحسين وإصلاح",
|
||||
"securePdf": "تأمين PDF"
|
||||
"securePdf": "تأمين PDF",
|
||||
"input": "إدخال",
|
||||
"output": "إخراج"
|
||||
},
|
||||
"convertToPdf": "تحويل إلى PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "أداة PDF المتعددة",
|
||||
"subtitle": "دمج، تقسيم، تنظيم، حذف، تدوير، إضافة صفحات فارغة، استخراج وتكرار في واجهة موحدة."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "دمج PDF",
|
||||
"subtitle": "دمج عدة ملفات PDF في ملف واحد. يحافظ على الإشارات المرجعية."
|
||||
"subtitle": "دمج عدة ملفات PDF في ملف واحد. يحافظ على الإشارات المرجعية.",
|
||||
"retainPageLabels": "الاحتفاظ بتسميات الصفحات الأصلية لكل ملف",
|
||||
"retainPageLabelsHint": "غير مفعّل (افتراضي): يستخدم ملف PDF المدمج ترقيمًا طبيعيًا من 1 إلى N. مفعّل: يتم الاحتفاظ بتسميات الصفحات الأصلية لكل ملف (قد ينتج عن ذلك تسميات مكررة)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "تقسيم PDF",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "محرر PDF",
|
||||
"subtitle": "تعليق، تمييز، تنقيح، تعليقات، إضافة أشكال/صور، بحث وعرض ملفات PDF."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "تحرير نص PDF",
|
||||
"subtitle": "انقر على أي فقرة وحرّرها في مكانها مع إعادة تدفق فوري للنص والخطوط والأنماط.",
|
||||
"saved": "تم حفظ ملف PDF بنجاح! ({{size}} كيلوبايت)",
|
||||
"failedToLoad": "تعذّر تحميل محرّر نصوص PDF.",
|
||||
"howToUpload": "رفع ملف PDF",
|
||||
"howToClick": "انقر على فقرة",
|
||||
"howToRestyle": "غيّر تنسيق أي شيء",
|
||||
"relatedPdfEditor": "التعليق على ملفات PDF وتمييزها",
|
||||
"relatedSignPdf": "ارسم توقيعك أو اكتبه أو ارفعه",
|
||||
"relatedWatermark": "اطبع نصًا أو صورًا",
|
||||
"relatedStamps": "ضع أختامًا على الصفحات",
|
||||
"relatedCompress": "تقليل حجم الملف",
|
||||
"relatedOrganizeName": "تنظيم PDF",
|
||||
"relatedOrganize": "إعادة ترتيب الصفحات وإدارتها",
|
||||
"open": "فتح",
|
||||
"export": "تصدير",
|
||||
"filterAll": "الكل",
|
||||
"filterText": "نص",
|
||||
"filterImages": "صور",
|
||||
"filterShapes": "أشكال",
|
||||
"addText": "إضافة نص",
|
||||
"langAuto": "تلقائي",
|
||||
"change": "تغيير",
|
||||
"ignore": "تجاهل",
|
||||
"next": "التالي",
|
||||
"replace": "استبدال",
|
||||
"replaceAll": "استبدال الكل",
|
||||
"emptyState": "افتح ملف PDF لتحرير نصه وصوره وأشكاله.",
|
||||
"choosePdf": "اختر ملف PDF…",
|
||||
"font": "الخط",
|
||||
"systemFonts": "خطوط النظام",
|
||||
"color": "اللون",
|
||||
"alignment": "المحاذاة",
|
||||
"style": "النمط",
|
||||
"lists": "القوائم",
|
||||
"outline": "المخطط",
|
||||
"spacing": "التباعد",
|
||||
"direction": "الاتجاه",
|
||||
"dirAuto": "تلقائي",
|
||||
"pathStroke": "حد المسار",
|
||||
"tipBackToUpload": "العودة إلى الرفع",
|
||||
"tipOpenAnotherPdf": "فتح ملف PDF آخر",
|
||||
"tipExportS": "تصدير (⌘S)",
|
||||
"tipUndoZ": "تراجع (⌘Z)",
|
||||
"tipRedoZ": "إعادة (⇧⌘Z)",
|
||||
"tipFileDetails": "تفاصيل الملف",
|
||||
"tipEditExistingContent": "تحرير المحتوى الحالي",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "ما تتأثر به أداة التحرير — ضيّق النطاق في الصفحات المزدحمة",
|
||||
"tipClickThePageToAddATextBox": "انقر على الصفحة لإضافة مربع نص",
|
||||
"tipSpellCheckLanguage": "لغة التدقيق الإملائي",
|
||||
"tipFindAndReplace": "بحث واستبدال",
|
||||
"tipAddAnImage": "إضافة صورة",
|
||||
"tipCopyThisPageSTextInReadingOrder": "نسخ نص هذه الصفحة بترتيب القراءة",
|
||||
"tipCheckTheSpellingOfThisPage": "تدقيق إملاء هذه الصفحة",
|
||||
"tipShowOrHideTheFormatPanel": "إظهار لوحة التنسيق أو إخفاؤها",
|
||||
"phReplaceWith": "استبدال بـ",
|
||||
"tipAddToYourDictionary": "إضافة إلى القاموس",
|
||||
"tipClose": "إغلاق",
|
||||
"phFind": "بحث",
|
||||
"tipPreviousMatch": "التطابق السابق",
|
||||
"tipNextMatch": "التطابق التالي",
|
||||
"tipRotateLeft90": "تدوير 90° لليسار",
|
||||
"tipRotateRight90": "تدوير 90° لليمين",
|
||||
"tipFlipHorizontal": "قلب أفقي",
|
||||
"tipFlipVertical": "قلب رأسي",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "استبدال هذه الصورة مع الحفاظ على موضعها",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "نص بديل لإمكانية الوصول (ملفات PDF الموسومة)",
|
||||
"tipBringToFront": "إحضار إلى الأمام",
|
||||
"tipSendToBack": "إرسال إلى الخلف",
|
||||
"tipDuplicate": "تكرار",
|
||||
"tipDelete": "حذف",
|
||||
"tipAlignLeftEdges": "محاذاة الحواف اليسرى",
|
||||
"tipAlignHorizontalCenters": "توسيط أفقي",
|
||||
"tipAlignRightEdges": "محاذاة الحواف اليمنى",
|
||||
"tipAlignTops": "محاذاة الحواف العلوية",
|
||||
"tipAlignVerticalCenters": "توسيط رأسي",
|
||||
"tipAlignBottoms": "محاذاة الحواف السفلية",
|
||||
"tipDistributeHorizontally": "توزيع أفقي",
|
||||
"tipDistributeVertically": "توزيع رأسي",
|
||||
"tipFontSize": "حجم الخط",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "عرض الخطوط المثبتة على هذا الجهاز (Chromium)",
|
||||
"tipCustomTextColor": "لون نص مخصص",
|
||||
"tipAlignLeft": "محاذاة لليسار",
|
||||
"tipAlignCenter": "توسيط",
|
||||
"tipAlignRight": "محاذاة لليمين",
|
||||
"tipJustify": "ضبط",
|
||||
"tipBold": "عريض",
|
||||
"tipItalic": "مائل",
|
||||
"tipUnderline": "تسطير",
|
||||
"tipStrikethrough": "يتوسطه خط",
|
||||
"tipSuperscript": "حرف مرتفع",
|
||||
"tipSubscript": "حرف منخفض",
|
||||
"tipToggleBulletedItem": "تبديل عنصر نقطي",
|
||||
"tipToggleNumberedItem": "تبديل عنصر مرقّم",
|
||||
"tipNumberedListMarkerStyle": "نمط علامة القوائم المرقّمة",
|
||||
"tipDecreaseListIndentTab": "تقليل المسافة البادئة (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "زيادة المسافة البادئة (Tab)",
|
||||
"tipTextOutlineColor": "لون حد النص",
|
||||
"tipOutlineWidth0None": "عرض الحد (0 = بلا)",
|
||||
"tipFromContent": "من المحتوى",
|
||||
"tipLeftToRight": "من اليسار إلى اليمين",
|
||||
"tipRightToLeft": "من اليمين إلى اليسار",
|
||||
"tipStrokeColor": "لون الحد",
|
||||
"tipStrokeWidth": "عرض الحد",
|
||||
"tipZoomPresets": "إعدادات التكبير المسبقة",
|
||||
"tipZoomOut": "تصغير",
|
||||
"tipZoomIn": "تكبير",
|
||||
"tipFitPage": "ملاءمة الصفحة",
|
||||
"tipPreviousPage": "الصفحة السابقة",
|
||||
"tipTypeAPageNumberAndPressEnter": "اكتب رقم الصفحة ثم اضغط Enter",
|
||||
"tipNextPage": "الصفحة التالية",
|
||||
"tipDocumentProperties": "خصائص المستند",
|
||||
"tipHideBar": "إخفاء الشريط",
|
||||
"tipShowBar": "إظهار الشريط"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG إلى PDF",
|
||||
"subtitle": "إنشاء PDF من صور JPG وJPEG وJPEG2000 (JP2/JPX)."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "تكرار وتنظيم",
|
||||
"subtitle": "تكرار وإعادة ترتيب وحذف الصفحات."
|
||||
"subtitle": "تكرار وإعادة ترتيب وحذف الصفحات.",
|
||||
"saveChanges": "حفظ التغييرات"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "حذف الصفحات",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "تعديل الإشارات المرجعية",
|
||||
"subtitle": "إضافة وتعديل واستيراد وحذف واستخراج الإشارات المرجعية في PDF."
|
||||
"subtitle": "إضافة وتعديل واستيراد وحذف واستخراج الإشارات المرجعية في PDF.",
|
||||
"autoExtractExisting": "استخراج الإشارات المرجعية الموجودة تلقائيًا",
|
||||
"importSectionTitle": "أو استيراد الإشارات المرجعية",
|
||||
"csvFormat": "تنسيق CSV: العنوان,الصفحة,المستوى",
|
||||
"jsonFormat": "تنسيق JSON",
|
||||
"uploadCsvAction": "انقر لتحميل CSV",
|
||||
"uploadJsonAction": "انقر لتحميل JSON",
|
||||
"orDragHere": "أو اسحب إلى هنا"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "جدول المحتويات",
|
||||
"subtitle": "إنشاء صفحة جدول محتويات من إشارات PDF المرجعية."
|
||||
"subtitle": "إنشاء صفحة جدول محتويات من إشارات PDF المرجعية.",
|
||||
"titleLabel": "عنوان جدول المحتويات",
|
||||
"fontSize": "حجم الخط",
|
||||
"fontFamily": "عائلة الخط",
|
||||
"addBookmark": "إضافة إشارة مرجعية لصفحة جدول المحتويات",
|
||||
"generateButton": "إنشاء جدول المحتويات",
|
||||
"selectPdfFirst": "يرجى تحديد ملف PDF أولاً.",
|
||||
"statusReadingFileMainThread": "جارٍ قراءة الملف (الخيط الرئيسي)...",
|
||||
"statusGenerating": "جارٍ إنشاء جدول المحتويات...",
|
||||
"errorReadingFileWithMessage": "خطأ في قراءة الملف: {{message}}",
|
||||
"successGeneratedDownloadStarted": "تم إنشاء جدول المحتويات بنجاح! بدأ التنزيل.",
|
||||
"workerErrorWithMessage": "خطأ: {{message}}",
|
||||
"workerErrorOccurred": "حدث خطأ في Worker. تحقق من وحدة التحكم لمزيد من التفاصيل."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "أرقام الصفحات",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "إضافة أختام صور إلى PDF باستخدام شريط أدوات التعليقات.",
|
||||
"usernameLabel": "اسم مستخدم الختم",
|
||||
"usernamePlaceholder": "أدخل اسمك (للأختام)",
|
||||
"usernameHint": "سيظهر هذا الاسم على الأختام التي تنشئها."
|
||||
"usernameHint": "سيظهر هذا الاسم على الأختام التي تنشئها.",
|
||||
"saveButton": "حفظ PDF المختوم"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "إزالة التعليقات",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "ملء نماذج PDF",
|
||||
"subtitle": "ملء النماذج مباشرة في المتصفح. يدعم أيضًا نماذج XFA."
|
||||
"subtitle": "ملء النماذج مباشرة في المتصفح. يدعم أيضًا نماذج XFA.",
|
||||
"uploadHint": "حمّل ملف PDF يحتوي على حقول نموذج. املأها مباشرة في العارض أدناه، ثم انقر على الزر لحفظ النموذج المملوء وتنزيله. يدعم أيضًا نماذج XFA.",
|
||||
"xfaNoteTitle": "ملاحظة حول نماذج XFA:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) هو تنسيق قديم مدعوم فقط في بعض عارضات PDF مثل BentoPDF و Firefox. إذا فتحت ملف XFA PDF في برنامج آخر ورأيت صفحات فارغة أو لا توجد حقول نموذج، فهذا يعني أن هذا العارض لا يدعم XFA. لعرض وملء نماذج XFA بشكل صحيح، استخدم Firefox أو أداة ملء النماذج في BentoPDF."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "إنشاء نموذج PDF",
|
||||
"subtitle": "إنشاء نماذج PDF قابلة للتعبئة مع حقول نص بالسحب والإفلات."
|
||||
"subtitle": "إنشاء نماذج PDF قابلة للتعبئة مع حقول نص بالسحب والإفلات.",
|
||||
"orSeparator": "أو",
|
||||
"createBlankPdf": "إنشاء PDF فارغ"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "إزالة الصفحات الفارغة",
|
||||
@@ -255,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "نص إلى PDF",
|
||||
"subtitle": "تحويل ملف نص عادي إلى PDF."
|
||||
"subtitle": "تحويل ملف نص عادي إلى PDF.",
|
||||
"uploadFiles": "تحميل الملفات",
|
||||
"typeText": "اكتب النص",
|
||||
"acceptedFormats": "ملفات نصية (.txt)",
|
||||
"fontFamily": "عائلة الخط",
|
||||
"fontSize": "حجم الخط",
|
||||
"textColor": "لون النص",
|
||||
"pageSize": "حجم الصفحة",
|
||||
"rtlAutoDetectNote": "يتم اكتشاف لغات RTL (العربية، الأردية، الفارسية، إلخ) تلقائيًا ويتم ضبط اتجاه النص.",
|
||||
"createButton": "إنشاء PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON إلى PDF",
|
||||
"subtitle": "تحويل ملفات JSON إلى تنسيق PDF."
|
||||
"subtitle": "تحويل ملفات JSON إلى تنسيق PDF.",
|
||||
"noteLabel": "ملاحظة:",
|
||||
"noteText": "يتم دعم ملفات JSON التي أنشأتها أداة محول PDF إلى JSON فقط. لن تعمل ملفات JSON القياسية من أدوات أخرى.",
|
||||
"acceptedFormats": "ملفات JSON متعددة",
|
||||
"status": {
|
||||
"selectAtLeastOne": "يرجى تحديد ملف JSON واحد على الأقل",
|
||||
"selectedReady": "تم تحديد {{count}} ملف. جاهز للتحويل!",
|
||||
"readingFiles": "جارٍ قراءة الملفات (الخيط الرئيسي)...",
|
||||
"converting": "جارٍ تحويل ملفات JSON إلى PDF...",
|
||||
"readError": "خطأ في قراءة الملفات: {{message}}",
|
||||
"creatingZip": "جارٍ إنشاء ملف ZIP...",
|
||||
"success": "تم تحويل ملفات JSON إلى PDF بنجاح! بدأ تنزيل ZIP.",
|
||||
"zipError": "خطأ في إنشاء ZIP: {{message}}",
|
||||
"workerError": "خطأ في Worker: {{message}}",
|
||||
"getStarted": "اختر ملفات JSON للبدء"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF إلى JPG",
|
||||
"subtitle": "تحويل كل صفحة PDF إلى صورة JPG."
|
||||
"subtitle": "تحويل كل صفحة PDF إلى صورة JPG.",
|
||||
"imageQuality": "جودة الصورة",
|
||||
"imageQualityExplanation": "جودة أعلى = حجم ملف أكبر",
|
||||
"alert": {
|
||||
"invalidFile": "ملف غير صالح",
|
||||
"invalidFileExplanation": "يرجى تحميل ملف PDF.",
|
||||
"noFile": "لا يوجد ملف",
|
||||
"noFileExplanation": "يرجى تحميل ملف PDF أولاً.",
|
||||
"conversionSuccess": "تم تحويل PDF إلى JPG بنجاح!",
|
||||
"conversionError": "فشل تحويل PDF إلى JPG. قد يكون الملف تالفًا."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "جارٍ التحويل إلى JPG..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF إلى PNG",
|
||||
"subtitle": "تحويل كل صفحة PDF إلى صورة PNG."
|
||||
"subtitle": "تحويل كل صفحة PDF إلى صورة PNG.",
|
||||
"imageScale": "مقياس الصورة",
|
||||
"imageScaleExplanation": "مقياس أكبر = جودة أفضل لكن ملف أكبر",
|
||||
"alert": {
|
||||
"invalidFile": "ملف غير صالح",
|
||||
"invalidFileExplanation": "يرجى تحميل ملف PDF.",
|
||||
"noFile": "لا يوجد ملف",
|
||||
"noFileExplanation": "يرجى تحميل ملف PDF أولاً.",
|
||||
"conversionSuccess": "تم تحويل PDF إلى PNG بنجاح!",
|
||||
"conversionError": "فشل تحويل PDF إلى PNG. قد يكون الملف تالفًا."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "جارٍ التحويل إلى PNG..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF إلى WebP",
|
||||
"subtitle": "تحويل كل صفحة PDF إلى صورة WebP."
|
||||
"subtitle": "تحويل كل صفحة PDF إلى صورة WebP.",
|
||||
"imageQuality": "جودة الصورة",
|
||||
"imageQualityExplanation": "جودة أعلى = حجم ملف أكبر",
|
||||
"alert": {
|
||||
"invalidFile": "ملف غير صالح",
|
||||
"invalidFileExplanation": "يرجى تحميل ملف PDF.",
|
||||
"noFile": "لا يوجد ملف",
|
||||
"noFileExplanation": "يرجى تحميل ملف PDF أولاً.",
|
||||
"conversionSuccess": "تم تحويل PDF إلى WebP بنجاح!",
|
||||
"conversionError": "فشل تحويل PDF إلى WebP. قد يكون الملف تالفًا."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "جارٍ التحويل إلى WebP..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF إلى BMP",
|
||||
"subtitle": "تحويل كل صفحة PDF إلى صورة BMP."
|
||||
"subtitle": "تحويل كل صفحة PDF إلى صورة BMP.",
|
||||
"alert": {
|
||||
"invalidFile": "ملف غير صالح",
|
||||
"invalidFileExplanation": "يرجى تحميل ملف PDF.",
|
||||
"noFile": "لا يوجد ملف",
|
||||
"noFileExplanation": "يرجى تحميل ملف PDF أولاً.",
|
||||
"conversionSuccess": "تم تحويل PDF إلى BMP بنجاح!",
|
||||
"conversionError": "فشل تحويل PDF إلى BMP. قد يكون الملف تالفًا."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "جارٍ التحويل إلى BMP..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF إلى TIFF",
|
||||
@@ -287,7 +508,15 @@
|
||||
"colorMode": "وضع الألوان",
|
||||
"multiPage": "حفظ كملف TIFF متعدد الصفحات (ملف واحد)",
|
||||
"loadingVips": "جارٍ تحميل معالج الصور...",
|
||||
"converting": "جارٍ التحويل إلى TIFF..."
|
||||
"converting": "جارٍ التحويل إلى TIFF...",
|
||||
"alert": {
|
||||
"invalidFile": "ملف غير صالح",
|
||||
"invalidFileExplanation": "يرجى تحميل ملف PDF.",
|
||||
"noFile": "لا يوجد ملف",
|
||||
"noFileExplanation": "يرجى تحميل ملف PDF أولاً.",
|
||||
"conversionSuccess": "تم تحويل PDF إلى TIFF بنجاح!",
|
||||
"conversionError": "فشل تحويل PDF إلى TIFF. قد يكون الملف تالفًا."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF إلى CBZ",
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF إلى JSON",
|
||||
"subtitle": "تحويل ملفات PDF إلى تنسيق JSON."
|
||||
"subtitle": "تحويل ملفات PDF إلى تنسيق JSON.",
|
||||
"convertButton": "تحويل إلى JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "يرجى تحديد ملف PDF واحد على الأقل",
|
||||
"selectedReady": "تم تحديد {{count}} ملف. جاهز للتحويل!",
|
||||
"checkingEncrypted": "جارٍ فحص ملفات PDF المشفرة...",
|
||||
"readingFiles": "جارٍ قراءة الملفات (الخيط الرئيسي)...",
|
||||
"converting": "جارٍ تحويل PDF إلى JSON...",
|
||||
"readError": "خطأ في قراءة الملفات: {{message}}",
|
||||
"creatingZip": "جارٍ إنشاء ملف ZIP...",
|
||||
"success": "تم تحويل PDF إلى JSON بنجاح! بدأ تنزيل ZIP.",
|
||||
"zipError": "خطأ في إنشاء ZIP: {{message}}",
|
||||
"workerError": "خطأ في Worker: {{message}}",
|
||||
"getStarted": "اختر ملفات PDF للبدء"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "التعرف الضوئي على PDF",
|
||||
"subtitle": "اجعل PDF قابلاً للبحث والنسخ."
|
||||
"subtitle": "اجعل PDF قابلاً للبحث والنسخ.",
|
||||
"languagesInDocument": "اللغات في المستند",
|
||||
"searchLanguagesPlaceholder": "البحث عن لغات...",
|
||||
"selectedLabel": "محدد:",
|
||||
"none": "لا شيء",
|
||||
"advancedSettingsSummary": "الإعدادات المتقدمة (مستحسنة لتحسين الدقة)",
|
||||
"resolutionLabel": "الدقة",
|
||||
"resolutionStandard": "قياسية (192 DPI)",
|
||||
"resolutionHigh": "عالية (288 DPI)",
|
||||
"resolutionUltra": "فائقة (384 DPI)",
|
||||
"binarizeLabel": "تحويل الصورة إلى ثنائية (تحسين التباين للمسح النظيف)",
|
||||
"embedFullFontsLabel": "تضمين خطوط كاملة (ملف أكبر، توافق أفضل)",
|
||||
"whitelistPresetLabel": "إعداد قائمة الأحرف البيضاء",
|
||||
"whitelistNone": "لا شيء (جميع الأحرف)",
|
||||
"whitelistAlphanumeric": "حروف وأرقام + علامات ترقيم أساسية",
|
||||
"whitelistNumbersCurrency": "أرقام + رموز عملة",
|
||||
"whitelistLettersOnly": "حروف فقط (A-Z، a-z)",
|
||||
"whitelistNumbersOnly": "أرقام فقط (0-9)",
|
||||
"whitelistInvoice": "فاتورة/إيصال (أرقام، $، .، -، /)",
|
||||
"whitelistForms": "النماذج (حروف وأرقام + رموز شائعة)",
|
||||
"whitelistCustom": "مخصص...",
|
||||
"whitelistHelp": "سيتم التعرف على هذه الأحرف فقط. اتركه فارغًا لجميع الأحرف.",
|
||||
"whitelistInputLabel": "قائمة الأحرف البيضاء (اختياري)",
|
||||
"whitelistInputPlaceholder": "مثال: abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "بدء OCR",
|
||||
"progressInitializing": "جارٍ التهيئة...",
|
||||
"resultsTitle": "اكتمل OCR",
|
||||
"resultsDescription": "ملف PDF القابل للبحث جاهز. يمكنك أيضًا نسخ أو تنزيل النص المستخرج أدناه.",
|
||||
"copyToClipboard": "نسخ إلى الحافظة",
|
||||
"downloadTxt": "تنزيل كـ .txt",
|
||||
"downloadSearchablePdf": "تنزيل PDF قابل للبحث",
|
||||
"statusPrefix": "الحالة: {{status}}",
|
||||
"availabilityInvalidConfig": "لا يعرض هذا النشر أي لغات OCR صالحة. أعد بناءه باستخدام VITE_TESSERACT_AVAILABLE_LANGUAGES المضبوط على رموز Tesseract صالحة.",
|
||||
"availabilityBundles": "يتضمن هذا النشر OCR للغات: {{languages}}.",
|
||||
"noLanguagesAvailable": "لا توجد لغات OCR متوفرة في هذا النشر.",
|
||||
"noLanguagesTitle": "لم يتم تحديد لغات",
|
||||
"noLanguagesMessage": "يرجى تحديد لغة واحدة على الأقل لـ OCR.",
|
||||
"noFileTitle": "لا يوجد ملف",
|
||||
"noFileMessage": "يرجى تحميل ملف PDF أولاً.",
|
||||
"languageUnavailableTitle": "لغة OCR غير متوفرة",
|
||||
"ocrErrorTitle": "خطأ OCR",
|
||||
"ocrErrorMessage": "حدث خطأ أثناء عملية OCR. ربما فشل تحميل العامل. يرجى المحاولة مرة أخرى.",
|
||||
"howItWorksTitle": "كيف يعمل:",
|
||||
"extractTextLabel": "استخراج النص:",
|
||||
"extractTextDescription": "يستخدم Tesseract OCR للتعرف على النص من الصور الممسوحة ضوئيًا أو ملفات PDF.",
|
||||
"searchableOutputLabel": "إخراج قابل للبحث:",
|
||||
"searchableOutputDescription": "ينشئ ملف PDF جديدًا بطبقة نص غير مرئية، مما يجعل المستند قابلاً للبحث بالكامل مع الحفاظ على المظهر الأصلي.",
|
||||
"characterFilteringLabel": "تصفية الأحرف:",
|
||||
"characterFilteringDescription": "استخدم القوائم البيضاء لتصفية الأحرف غير المرغوب فيها وتحسين الدقة لأنواع المستندات المحددة (الفواتير، النماذج، إلخ).",
|
||||
"multiLanguageSupportLabel": "دعم متعدد اللغات:",
|
||||
"multiLanguageSupportDescription": "حدد لغات متعددة للمستندات التي تحتوي على محتوى بلغات مختلطة."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "تبديل ومزج الصفحات",
|
||||
"subtitle": "دمج ملفات PDF بتبديل الصفحات من كل ملف. يحافظ على الإشارات المرجعية."
|
||||
"subtitle": "دمج ملفات PDF بتبديل الصفحات من كل ملف. يحافظ على الإشارات المرجعية.",
|
||||
"retainPageLabels": "الاحتفاظ بتسميات الصفحات الأصلية لكل ملف",
|
||||
"retainPageLabelsHint": "غير مفعّل (افتراضي): يستخدم ملف PDF المدمج ترقيمًا طبيعيًا من 1 إلى N. مفعّل: يتم الاحتفاظ بتسميات الصفحات الأصلية لكل ملف (قد ينتج عن ذلك تسميات مكررة)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "ترتيب المسح على الوجهين",
|
||||
"subtitle": "أعد ترتيب ملف PDF ممسوح في كتلتين (كل الوجوه الأمامية أولًا، ثم كل الوجوه الخلفية) إلى ترتيب أمامي/خلفي صحيح.",
|
||||
"totalPagesLabel": "إجمالي الصفحات:",
|
||||
"splitAfterPageLabel": "التقسيم بعد الصفحة",
|
||||
"splitAfterPagePlaceholder": "مثال: 50",
|
||||
"backBlockOrderLabel": "ترتيب كتلة الوجه الخلفي",
|
||||
"backBlockReverseOption": "عكس كتلة الوجه الخلفي (شائع عند قلب الرزمة)",
|
||||
"backBlockKeepOption": "إبقاء كتلة الوجه الخلفي كما هي",
|
||||
"autoSplitButton": "اكتشاف نقطة التقسيم تلقائيًا (المنتصف)",
|
||||
"exportGroupedLabel": "تصدير ملفات مجمّعة حسب طول المستند الأصلي",
|
||||
"pagesPerDocumentLabel": "عدد الصفحات لكل مستند أصلي",
|
||||
"groupedHelp": "عند التفعيل، يكون الناتج ملف ZIP يحتوي على ملف PDF لكل مستند مجمّع.",
|
||||
"collateButton": "ترتيب ملف PDF",
|
||||
"invalidFileTitle": "ملف غير صالح",
|
||||
"invalidFileMessage": "يرجى اختيار ملف PDF.",
|
||||
"loadingPdf": "جارٍ تحميل ملف PDF...",
|
||||
"loadErrorMessage": "تعذّر تحميل ملف PDF.",
|
||||
"fileMeta": "{{size}} - {{count}} صفحة",
|
||||
"oddPageWarning": "عدد الصفحات فردي ({{count}}). يجب أن يكون عدد صفحات المسح على الوجهين زوجيًا؛ قد تكون هناك صفحة ناقصة أو زائدة.",
|
||||
"previewSummary": "كتلة الوجه الأمامي: {{frontCount}} صفحة، كتلة الوجه الخلفي: {{backCount}} صفحة. الناتج: {{outputCount}} صفحة بترتيب أمامي/خلفي.",
|
||||
"previewMismatchWarning": "طول كتلتي الوجه الأمامي والخلفي مختلف ({{frontCount}} أمامية مقابل {{backCount}} خلفية). ستُضاف الصفحات الزائدة ({{extraCount}}) من الكتلة الأطول في النهاية دون مقابل.",
|
||||
"missingFileTitle": "ملف مفقود",
|
||||
"missingFileMessage": "يرجى رفع ملف PDF يحتوي على صفحتين على الأقل قبل المعالجة.",
|
||||
"invalidSplitTitle": "نقطة تقسيم غير صالحة",
|
||||
"invalidSplitMessage": "يجب أن تكون نقطة التقسيم بين الصفحة 1 والصفحة {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "كتل غير متساوية",
|
||||
"unevenConfirmMessage": "تحتوي كتلة الوجه الأمامي على {{frontCount}} صفحة وكتلة الوجه الخلفي على {{backCount}} صفحة.\nيعني ذلك عادةً أن صفحة مُسحت مرتين أو أنها مفقودة.\n\nستُضاف الصفحات غير المقترنة ({{extraCount}}) في النهاية.\n\nهل تريد المتابعة على أي حال؟",
|
||||
"invalidGroupTitle": "حجم مجموعة غير صالح",
|
||||
"invalidGroupMessage": "يرجى إدخال عدد صفحات صالح لكل مستند أصلي.",
|
||||
"collatingLoader": "جارٍ ترتيب المسح على الوجهين...",
|
||||
"successMessage": "تم إنشاء ملف PDF المرتَّب بنجاح.",
|
||||
"successGroupedMessage": "اكتمل الترتيب. تم إنشاء {{fileCount}} ملف مجمّع.",
|
||||
"processErrorMessage": "تعذّر ترتيب ملف PDF.",
|
||||
"howItWorksStep1Title": "ارفع الملف الممسوح",
|
||||
"howItWorksStep1": "أفلت ملف PDF واحدًا يحتوي على جميع الوجوه الأمامية يليها جميع الوجوه الخلفية.",
|
||||
"howItWorksStep2Title": "حدّد نقطة التقسيم",
|
||||
"howItWorksStep2": "حدّد أين تنتهي كتلة الوجوه الأمامية، ثم اختر ما إذا كانت كتلة الوجوه الخلفية بحاجة إلى عكس.",
|
||||
"howItWorksStep3Title": "رتّب ونزّل",
|
||||
"howItWorksStep3": "احصل على ملف PDF واحد بترتيب متعاقب، أو ملف ZIP يحتوي على ملف منفصل لكل مستند أصلي.",
|
||||
"faqOddPagesQuestion": "ماذا لو كان عدد صفحات الملف الممسوح فرديًا؟",
|
||||
"faqOddPagesAnswer": "يجب أن يكون عدد صفحات المسح على الوجهين زوجيًا. إذا لم يكن كذلك، فغالبًا مُسحت صفحة مرتين أو فُقدت صفحة. تنبّهك الأداة قبل المعالجة، وتُضاف الصفحات غير المقترنة في النهاية حتى لا يضيع أي شيء.",
|
||||
"faqBackOrderQuestion": "لماذا قد أُبقي كتلة الوجوه الخلفية كما هي؟",
|
||||
"faqBackOrderAnswer": "يعتمد ذلك على طريقة إدخال الرزمة في التمريرة الثانية. قلب الرزمة بالكامل ينتج وجوهًا خلفية بترتيب معكوس، وهو الإعداد الافتراضي. أما إذا أعادها الماسح الضوئي بالترتيب نفسه للوجوه الأمامية، فاختر إبقاء الكتلة كما هي."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "إضافة مرفقات",
|
||||
@@ -660,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF إلى نص",
|
||||
"subtitle": "استخراج النص من ملفات PDF وحفظه كنص عادي (.txt). يدعم عدة ملفات.",
|
||||
"note": "تعمل هذه الأداة فقط مع ملفات PDF المنشأة رقميًا. للمستندات الممسوحة ضوئيًا أو ملفات PDF المبنية على الصور، استخدم أداة التعرف الضوئي.",
|
||||
"convertButton": "استخراج النص"
|
||||
"noteLabel": "ملاحظة:",
|
||||
"noteText": "تعمل هذه الأداة فقط مع ملفات PDF التي تم إنشاؤها رقميًا. للمستندات الممسوحة ضوئيًا أو ملفات PDF القائمة على الصور، استخدم أداة OCR PDF بدلاً من ذلك.",
|
||||
"convertButton": "استخراج النص",
|
||||
"note": "تعمل هذه الأداة فقط مع ملفات PDF المنشأة رقميًا. للمستندات الممسوحة ضوئيًا أو ملفات PDF المبنية على الصور، استخدم أداة التعرف الضوئي."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "توقيع رقمي لـ PDF",
|
||||
"pageTitle": "توقيع رقمي لـ PDF - إضافة توقيع تشفيري | BentoPDF",
|
||||
"subtitle": "إضافة توقيع رقمي تشفيري إلى PDF باستخدام شهادات X.509. يدعم تنسيقات PKCS#12 (.pfx، .p12) وPEM. مفتاحك الخاص لا يغادر متصفحك أبدًا.",
|
||||
"certificateSection": "الشهادة",
|
||||
"uploadCert": "رفع شهادة (.pfx، .p12)",
|
||||
"uploadCert": "رفع شهادة (.pfx, .p12, .pem)",
|
||||
"certPassword": "كلمة مرور الشهادة",
|
||||
"privateKeyPassword": "كلمة مرور المفتاح الخاص",
|
||||
"certPasswordPlaceholder": "أدخل كلمة مرور الشهادة",
|
||||
"certInfo": "معلومات الشهادة",
|
||||
"certSubject": "الموضوع",
|
||||
@@ -682,8 +1025,71 @@
|
||||
"locationPlaceholder": "مثلاً، نيويورك، الولايات المتحدة",
|
||||
"contactInfo": "معلومات الاتصال",
|
||||
"contactPlaceholder": "مثلاً، [email protected]",
|
||||
"visibleSignature": "توقيع مرئي",
|
||||
"visibleSignatureDescription": "عند التمكين، يظهر مربع توقيع مرئي على PDF. يمكنك تحميل صورة/شعار أو إضافة نص. إذا لم يتم توفير أي منهما، فسيتم عرض اسم الموقّع من الشهادة تلقائيًا.",
|
||||
"signatureImage": "صورة/شعار التوقيع (اختياري)",
|
||||
"uploadSignatureImage": "تحميل صورة (PNG، JPG، WebP)",
|
||||
"signaturePreviewAlt": "معاينة التوقيع",
|
||||
"remove": "إزالة",
|
||||
"page": "صفحة",
|
||||
"firstPage": "الصفحة الأولى",
|
||||
"lastPage": "الصفحة الأخيرة",
|
||||
"allPages": "جميع الصفحات",
|
||||
"customPage": "صفحة مخصصة #",
|
||||
"pageNumber": "صفحة #",
|
||||
"xPosition": "موضع X (يسار)",
|
||||
"yPosition": "موضع Y (أعلى)",
|
||||
"width": "العرض",
|
||||
"height": "الارتفاع",
|
||||
"addTextOverlay": "إضافة تراكب نص",
|
||||
"text": "نص",
|
||||
"textPlaceholder": "مثال: موقّع رقميًا من قبل أحمد محمد",
|
||||
"textColor": "لون النص",
|
||||
"fontSize": "حجم الخط",
|
||||
"invalidImageTitle": "صورة غير صالحة",
|
||||
"invalidImageMessage": "يرجى تحديد صورة PNG أو JPG أو WebP.",
|
||||
"invalidFileTitle": "ملف غير صالح",
|
||||
"invalidFileMessage": "يرجى تحديد ملف PDF.",
|
||||
"invalidCertificateTitle": "شهادة غير صالحة",
|
||||
"invalidCertificateMessage": "يرجى تحديد ملف شهادة .pfx أو .p12 أو .pem.",
|
||||
"certificateLoaded": "تم تحميل الشهادة",
|
||||
"certificateUnlocked": "تم إلغاء قفل الشهادة",
|
||||
"failedParsePem": "فشل في تحليل ملف PEM",
|
||||
"enterPasswordToUnlock": "أدخل كلمة المرور لإلغاء القفل",
|
||||
"invalidPasswordOrCertificate": "كلمة مرور أو شهادة غير صالحة",
|
||||
"incorrectPassword": "كلمة مرور غير صحيحة",
|
||||
"failedParseCertificate": "فشل في تحليل الشهادة",
|
||||
"missingDataTitle": "بيانات مفقودة",
|
||||
"missingDataMessage": "يرجى تحميل كل من PDF وشهادة صالحة.",
|
||||
"applyingSignature": "جارٍ تطبيق التوقيع الرقمي...",
|
||||
"signingFailedTitle": "فشل التوقيع",
|
||||
"chainFetchFailed": "فشل في جلب سلسلة الشهادات. قد يكون ذلك بسبب مشكلات في الشبكة أو عدم توفر وكيل الشهادات. يرجى التحقق من اتصالك بالإنترنت والمحاولة مرة أخرى. إذا استمرت المشكلة، فاتصل بالدعم.",
|
||||
"failedToSignPdf": "فشل في توقيع PDF: {{message}}",
|
||||
"defaultSignatureText": "موقّع رقميًا من قبل {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} صفحات",
|
||||
"howToStep1Title": "تحميل PDF",
|
||||
"howToStep1Text": "حدد مستند PDF الذي تريد توقيعه",
|
||||
"howToStep2Title": "تحميل الشهادة",
|
||||
"howToStep2Text": "قدّم ملف الشهادة .pfx أو .p12 وكلمة المرور",
|
||||
"howToStep3Title": "توقيع وتنزيل",
|
||||
"howToStep3Text": "طبّق التوقيع الرقمي ونزّل ملف PDF الموقع",
|
||||
"relatedEncryptDesc": "حماية PDF بكلمة مرور",
|
||||
"relatedDecryptDesc": "إزالة كلمة مرور PDF",
|
||||
"relatedFlattenDesc": "جعل التعليقات التوضيحية دائمة",
|
||||
"relatedSanitizeDesc": "إزالة البيانات المخفية",
|
||||
"relatedPermissionsDesc": "تعيين أذونات PDF",
|
||||
"faqWhatIsQuestion": "ما هو التوقيع الرقمي؟",
|
||||
"faqWhatIsAnswer": "التوقيع الرقمي هو آلية تشفير تتحقق من صحة وسلامة المستند. على عكس التوقيع المرسوم، يستخدم تشفير المفتاح العام (شهادات X.509) لإثبات هوية الموقّع.",
|
||||
"faqFormatsQuestion": "ما تنسيقات الشهادات المدعومة؟",
|
||||
"faqFormatsAnswer": "ندعم شهادات بتنسيق PKCS#12 (.pfx، .p12) التي تحتوي على كل من شهادتك والمفتاح الخاص في ملف مشفر واحد. عادة ما تصدر هذه الشهادات من قبل سلطات الشهادات.",
|
||||
"faqPrivateKeyQuestion": "هل مفتاحي الخاص آمن؟",
|
||||
"faqPrivateKeyAnswer": "نعم! تتم جميع المعالجة بالكامل في متصفحك. شهادتك ومفتاحك الخاص وملفات PDF لا تغادر جهازك أبدًا ولا تُرفع إلى أي خادم.",
|
||||
"faqValidReadersQuestion": "هل سيكون التوقيع صالحًا في قارئات PDF؟",
|
||||
"faqValidReadersAnswer": "نعم، تُنشئ الأداة توقيعات قياسية PKCS#7 منفصلة معترف بها في جميع قارئات PDF الرئيسية. للتحقق الكامل، استخدم شهادة من سلطة شهادات موثوقة.",
|
||||
"applySignature": "تطبيق التوقيع الرقمي",
|
||||
"successMessage": "تم توقيع PDF بنجاح! يمكن التحقق من التوقيع في أي قارئ PDF."
|
||||
"successMessage": "تم توقيع PDF بنجاح! يمكن التحقق من التوقيع في أي قارئ PDF.",
|
||||
"internetRequiredTitle": "يلزم الاتصال بالإنترنت",
|
||||
"internetRequiredDescription": "قد يحتاج التوقيع إلى جلب معلومات سلسلة الشهادات من خادم مُصدر شهادتك للتحقق من صحة التوقيع."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "التحقق من توقيع PDF",
|
||||
@@ -697,7 +1103,7 @@
|
||||
"tsaSectionTitle": "خادم الختم الزمني (TSA)",
|
||||
"selectTsa": "اختر خادم TSA",
|
||||
"applyTimestamp": "تطبيق الختم الزمني",
|
||||
"successMessage": "تم ختم PDF بالوقت بنجاح! يمكن التحقق من الختم في Adobe Acrobat وقارئات PDF الأخرى."
|
||||
"successMessage": "تم ختم PDF بالوقت بنجاح! يمكن التحقق من الختم في أي قارئ PDF."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "بريد إلكتروني إلى PDF",
|
||||
@@ -772,7 +1178,113 @@
|
||||
"templateLoaded": "تم تحميل القالب \"{{name}}\".",
|
||||
"failedLoadTemplate": "فشل تحميل القالب.",
|
||||
"noSettings": "لا توجد إعدادات قابلة للتخصيص لهذه العقدة.",
|
||||
"advancedSettings": "إعدادات متقدمة"
|
||||
"advancedSettings": "إعدادات متقدمة",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "إدخال PDF",
|
||||
"description": "تحميل ملف PDF أو أكثر"
|
||||
},
|
||||
"download": {
|
||||
"name": "تنزيل",
|
||||
"description": "تنزيل تلقائيًا كملف PDF أو ZIP"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "لا توجد ملفات PDF متصلة بعقدة {{node}}",
|
||||
"noPdfInputs": "لا توجد ملفات PDF في الإدخال",
|
||||
"expectedPdfInput": "كان من المتوقع إدخال PDF",
|
||||
"failedToRenderPage": "فشل عرض الصفحة {{page}}",
|
||||
"failedToGetCanvasContext": "فشل الحصول على سياق اللوحة للصفحة {{page}}",
|
||||
"failedToRenderPageToImage": "فشل عرض الصفحة {{page}} كصورة",
|
||||
"noPagesProcessed": "لم تتم معالجة أي صفحة",
|
||||
"cpdfNotConfigured": "لم يتم تكوين CoherentPDF. يرجى تكوينه في الإعدادات المتقدمة.",
|
||||
"workerError": "خطأ في العامل: {{message}}",
|
||||
"alternateMergeWorkerError": "خطأ في عامل الدمج المتناوب: {{message}}",
|
||||
"noPdfFilesUploaded": "لم يتم تحميل ملفات PDF في عقدة إدخال PDF",
|
||||
"failedToLoadFile": "فشل تحميل \"{{file}}\" — قد يكون الملف تالفًا",
|
||||
"noImagesUploaded": "لم يتم تحميل صور في عقدة إدخال الصور",
|
||||
"noWordDocsUploaded": "لم يتم تحميل مستندات في عقدة إدخال Word",
|
||||
"noExcelUploaded": "لم يتم تحميل جداول بيانات في عقدة إدخال Excel",
|
||||
"noPowerPointUploaded": "لم يتم تحميل عروض تقديمية في عقدة إدخال PowerPoint",
|
||||
"noCbzUploaded": "لم يتم تحميل أرشيفات قصص مصورة في عقدة إدخال CBZ",
|
||||
"noEmailUploaded": "لم يتم تحميل ملفات بريد إلكتروني في عقدة إدخال البريد الإلكتروني",
|
||||
"noEpubUploaded": "لم يتم تحميل ملفات EPUB في عقدة إدخال EPUB",
|
||||
"noFb2Uploaded": "لم يتم تحميل ملفات FB2 في عقدة إدخال FB2",
|
||||
"noJsonUploaded": "لم يتم تحميل ملفات JSON في عقدة إدخال JSON",
|
||||
"noMarkdownUploaded": "لم يتم تحميل ملفات Markdown في عقدة إدخال Markdown",
|
||||
"noMobiUploaded": "لم يتم تحميل ملفات MOBI في عقدة إدخال MOBI",
|
||||
"noOdgUploaded": "لم يتم تحميل ملفات ODG في عقدة إدخال ODG",
|
||||
"noPagesUploaded": "لم يتم تحميل ملفات Pages في عقدة إدخال Pages",
|
||||
"noPubUploaded": "لم يتم تحميل ملفات PUB في عقدة إدخال PUB",
|
||||
"noSvgUploaded": "لم يتم تحميل ملفات SVG في عقدة إدخال SVG",
|
||||
"noTextUploaded": "لم يتم تحميل ملفات نصية في عقدة إدخال النص",
|
||||
"noVsdUploaded": "لم يتم تحميل ملفات Visio في عقدة إدخال VSD",
|
||||
"noWpdUploaded": "لم يتم تحميل ملفات WPD في عقدة إدخال WPD",
|
||||
"noWpsUploaded": "لم يتم تحميل ملفات WPS في عقدة إدخال WPS",
|
||||
"noXmlUploaded": "لم يتم تحميل ملفات XML في عقدة إدخال XML",
|
||||
"noXpsUploaded": "لم يتم تحميل ملفات XPS في عقدة إدخال XPS",
|
||||
"alternateMergeNeedsTwo": "الدمج المتناوب يحتاج إلى ربط ملفي PDF على الأقل بإدخاله",
|
||||
"cropMarginsExceed": "هوامش الاقتصاص تتجاوز أبعاد الصفحة. قلل من القيم.",
|
||||
"digitalSignNoCertificate": "لم يتم تحميل أي شهادة في عقدة التوقيع الرقمي",
|
||||
"encryptUserPasswordRequired": "كلمة مرور المستخدم مطلوبة للتشفير",
|
||||
"extractImagesNoneFound": "لم يتم العثور على صور في ملفات PDF المتصلة",
|
||||
"invertColorsFailedReadImage": "فشل قراءة بيانات الصورة",
|
||||
"overlayRequiresPdf": "تتطلب عقدة التراكب إدخال PDF تراكبي.",
|
||||
"pdfToCsvNoTables": "لم يتم العثور على جداول في PDF",
|
||||
"pdfToXlsxNoTables": "لم يتم العثور على جداول في {{file}}",
|
||||
"posterizeFailedTileCanvas": "فشل الحصول على سياق لوحة المربعات",
|
||||
"redactNoText": "الإخفاء: لم يتم تحديد نص للإخفاء",
|
||||
"removeBlankPagesAllBlank": "جميع الصفحات فارغة",
|
||||
"svgFailedToConvert": "فشل تحويل SVG",
|
||||
"svgFailedToLoad": "فشل تحميل SVG",
|
||||
"timestampFailed": "فشل ختم الوقت باستخدام TSA {{tsa}}: {{message}}",
|
||||
"noOutputNodes": "لم يتم العثور على عقد إخراج. أضف عقدة تنزيل لإكمال سير عملك.",
|
||||
"circularDependency": "تم اكتشاف تبعية دائرية في سير العمل. يرجى إزالة أي حلقات بين العقد.",
|
||||
"encryptOrdering": "عقدة التشفير تتغذى في \"{{target}}\"، والذي قد يفشل على البيانات المشفرة. انقل التشفير إلى ما قبل عقدة الإخراج مباشرةً.",
|
||||
"invalidWorkflowFile": "ملف سير عمل غير صالح: مصفوفة العقد أو الاتصالات مفقودة.",
|
||||
"storageQuotaExceeded": "فشل حفظ سير العمل: تم تجاوز حصة التخزين. حاول حذف القوالب القديمة.",
|
||||
"failedToImport": "فشل استيراد سير العمل: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "إعدادات الميزات المتقدمة",
|
||||
"description": "قم بتكوين وحدات المعالجة الخارجية لتمكين ميزات PDF المتقدمة. هذه الوحدات اختيارية ومرخصة بشكل منفصل.",
|
||||
"status": {
|
||||
"testing": "جارٍ الاختبار...",
|
||||
"customOverride": "تجاوز مخصص",
|
||||
"preConfigured": "مهيأ مسبقًا",
|
||||
"notConfigured": "غير مهيأ"
|
||||
},
|
||||
"preconfiguredTitle": "مهيأ مسبقًا وجاهز للاستخدام.",
|
||||
"preconfiguredDescription": "يتم تحميل وحدات المعالجة المتقدمة تلقائيًا من CDN. يمكنك تجاوز عناوين URL أدناه إذا كنت بحاجة إلى استخدام مصدر مخصص (على سبيل المثال، لعمليات النشر المعزولة عن الإنترنت أو المستضافة ذاتيًا).",
|
||||
"usingDefault": "استخدام الافتراضي: {{url}}",
|
||||
"pymupdfSubtitle": "محرك معالجة المستندات",
|
||||
"pymupdfFeatures": "يفعّل: PDF إلى نص، Markdown، SVG، DOCX، Excel • استخراج الصور/الجداول • تحويل التنسيق",
|
||||
"testButton": "اختبار",
|
||||
"recommendedLabel": "موصى به:",
|
||||
"copyTitle": "نسخ إلى الحافظة",
|
||||
"ghostscriptSubtitle": "محرك تحويل PDF/A",
|
||||
"ghostscriptFeatures": "يفعّل: تحويل PDF/A-1b، PDF/A-2b، PDF/A-3b • الخط إلى مخطط",
|
||||
"cpdfSubtitle": "محرك الإشارات المرجعية والبيانات الوصفية",
|
||||
"cpdfFeatures": "يفعّل: التقسيم حسب الإشارات المرجعية • تحرير الإشارات المرجعية • بيانات تعريف PDF",
|
||||
"saveConfiguration": "حفظ التكوين",
|
||||
"savingConfiguration": "جارٍ حفظ التكوين...",
|
||||
"savedTitle": "تم الحفظ",
|
||||
"savedMessage": "تم حفظ التكوين بنجاح!",
|
||||
"errorTitle": "خطأ",
|
||||
"failedSave": "فشل حفظ التكوين: {{message}}",
|
||||
"emptyUrlTitle": "عنوان URL فارغ",
|
||||
"emptyUrlMessage": "يرجى إدخال عنوان URL للاختبار.",
|
||||
"testSuccessTitle": "نجاح",
|
||||
"connectionSuccess": "نجح الاتصال بـ {{package}}!",
|
||||
"connectionFailedTitle": "فشل الاتصال",
|
||||
"connectionFailedMessage": "تعذر الاتصال بعنوان URL.",
|
||||
"resetDefaults": "إعادة التعيين إلى الافتراضي",
|
||||
"resetTitle": "إعادة تعيين",
|
||||
"resetWithDefaults": "تم مسح التجاوزات المخصصة. الإعدادات الافتراضية المهيأة مسبقًا نشطة.",
|
||||
"resetNoDefaults": "تم مسح جميع التكوينات والوحدات المخزنة مؤقتًا.",
|
||||
"licenseTitle": "إشعار الترخيص:",
|
||||
"licenseDescription": "الوحدات الخارجية (PyMuPDF، Ghostscript، CoherentPDF) مرخصة بموجب AGPL-3.0 أو تراخيص copyleft مماثلة. بتكوين واستخدام هذه الوحدات، فإنك توافق على شروط الترخيص الخاصة بكل منها. BentoPDF متوافق مع أي تنفيذ Ghostscript WASM وPyMuPDF WASM يتبع الواجهة المتوقعة."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "تراكب PDF",
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "Кантакты",
|
||||
"licensing": "Ліцэнзія",
|
||||
"allTools": "Усе інструменты",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Адкрыць галоўнае меню",
|
||||
"language": "Мова"
|
||||
"language": "Мова",
|
||||
"searchLanguage": "Пошук мовы…",
|
||||
"noLanguagesFound": "Мовы не знойдзены"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Падабаецца BentoPDF? Падтрымайце, каб ён заставаўся бясплатным і з адкрытым зыходным кодам!",
|
||||
@@ -95,6 +98,18 @@
|
||||
"webpImages": "Відарысы WebP"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Як гэта працуе",
|
||||
"step1Title": "Загрузіць файл",
|
||||
"step1": "Націсніце або перацягніце файл, каб пачаць",
|
||||
"step2Title": "Апрацоўка",
|
||||
"step2": "Націсніце кнопку апрацоўкі",
|
||||
"step3Title": "Спампаваць",
|
||||
"step3": "Імгненна захавайце апрацаваны файл"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Звязаныя інструменты PDF"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Апрацоўка..."
|
||||
},
|
||||
@@ -120,6 +135,10 @@
|
||||
"resetToDefaults": "Скінуць да прадвызначаных",
|
||||
"fullWidthMode": "На ўсю шырыню",
|
||||
"fullWidthDescription": "Выкарыстоўваць усю шырыню экрана для ўсіх інструментаў замест цэнтраванага кантэйнера",
|
||||
"compactMode": "Кампактны рэжым",
|
||||
"compactModeDescription": "Адлюстроўваць інструменты ў выглядзе кампактнага спіса замест картак",
|
||||
"advancedSettings": "Пашыраныя налады",
|
||||
"advancedSettingsDescription": "Канфігурацыя знешніх модуляў апрацоўкі (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Налады захоўваюцца аўтаматычна",
|
||||
"clickToSet": "Задаць",
|
||||
"pressKeys": "Націсніце...",
|
||||
@@ -166,6 +185,7 @@
|
||||
"faq": {
|
||||
"title": "Частыя",
|
||||
"questions": "пытанні",
|
||||
"sectionTitle": "Частыя пытанні",
|
||||
"isFree": {
|
||||
"question": "BentoPDF сапраўды бясплатны?",
|
||||
"answer": "Так, абсалютна. Усе інструменты BentoPDF на 100% бясплатныя для выкарыстання, без лімітаў файлаў, без рэгістрацыі і без вадзяных знакаў. Мы верым, што кожны мае права доступу да простых і магутных інструментаў PDF без платных бар'ераў."
|
||||
@@ -196,9 +216,8 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Вы выкарыстоўваеце cookies або аналітыку, каб сачыць за мной?",
|
||||
"answer": "Мы дбаем пра вашу прыватнасць. BentoPDF не адсочвае персанальную інфармацыю. Мы выкарыстоўваем Simple Analytics, толькі каб бачыць ананімную статыстыку наведванняў. Гэта значыць, мы ведаем, колькі карыстальнікаў наведвае наш сайт, але ніколі не ведаем, хто вы. Simple Analytics цалкам адпавядае GDPR і шануе вашу прыватнасць."
|
||||
},
|
||||
"sectionTitle": "Частыя пытанні"
|
||||
"answer": "Не. BentoPDF вас ніяк не адсочвае. Мы не выкарыстоўваем файлы cookie, аналітыку ці скрыпты адсочвання — нават на працоўным сайце bentopdf.com. Мы ніколі не ведаем, хто вы і што вы робіце з інструментамі."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Што кажуць",
|
||||
@@ -251,11 +270,14 @@
|
||||
"add": "Дадаць",
|
||||
"remove": "Выдаліць",
|
||||
"loading": "Загрузка...",
|
||||
"loadingPageCount": "Загрузка старонак...",
|
||||
"error": "Памылка",
|
||||
"success": "Поспех",
|
||||
"file": "Файл",
|
||||
"files": "Файлы",
|
||||
"close": "Зачыніць"
|
||||
"close": "Закрыць",
|
||||
"convert": "Канвертаваць",
|
||||
"unknownError": "Невядомая памылка"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -328,9 +350,12 @@
|
||||
"download": "Спампаваць:",
|
||||
"downloadSelected": "Спампаваць выбранае",
|
||||
"exportPdf": "Экспартаваць PDF",
|
||||
"uploadPdfFiles": "Выбраць PDF файлы",
|
||||
"dragAndDrop": "Перацягніце PDF файлы сюды або націсніце, каб выбраць",
|
||||
"uploadPdfFiles": "Выбраць PDF або выявы",
|
||||
"dragAndDrop": "Перацягніце PDF або выявы сюды або націсніце, каб выбраць",
|
||||
"selectFiles": "Выбраць файлы",
|
||||
"dropToAdd": "Адпусціце PDF або выявы для дабаўлення",
|
||||
"convertingImages": "Канвертацыя выяў у PDF...",
|
||||
"failedToConvertImages": "Не ўдалося канвертаваць выявы ў PDF.",
|
||||
"renderingPages": "Апрацоўка старонак...",
|
||||
"actions": {
|
||||
"duplicatePage": "Дубляваць гэту старонку",
|
||||
@@ -349,15 +374,6 @@
|
||||
"error": "Памылка",
|
||||
"failedToLoad": "Не ўдалося загрузіць"
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Як гэта працуе",
|
||||
"step1": "Націсніце або перацягніце файл, каб пачаць",
|
||||
"step2": "Націсніце кнопку апрацоўкі",
|
||||
"step3": "Праз імгненне захавайце апрацаваны файл"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Звязаныя інструменты PDF"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "Інструменты PDF",
|
||||
"subtitle": "Выберыце інструмент, каб пачаць"
|
||||
|
||||
+592
-80
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Канвертацыя з PDF",
|
||||
"organizeManage": "Арганізацыя і кіраванне",
|
||||
"optimizeRepair": "Аптымізацыя і аднаўленне",
|
||||
"securePdf": "Бяспека PDF"
|
||||
"securePdf": "Бяспека PDF",
|
||||
"input": "Увод",
|
||||
"output": "Вывад"
|
||||
},
|
||||
"convertToPdf": "Канвертаваць у PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "Мультыінструмент PDF",
|
||||
"subtitle": "Аб'яднаць, Падзяліць, Арганізаваць, Выдаліць, Павярнуць, Дадаць пустыя старонкі, Выняць і Дубляваць у адзіным інтэрфейсе."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Аб'яднаць PDF",
|
||||
"subtitle": "Аб'яднаць некалькі PDF у адзін файл. Закладкі захоўваюцца."
|
||||
"subtitle": "Аб'яднаць некалькі PDF у адзін файл. Закладкі захоўваюцца.",
|
||||
"retainPageLabels": "Захоўваць арыгінальныя пазнакі старонак з кожнага файла",
|
||||
"retainPageLabelsHint": "Выключана (па змаўчанні): аб’яднаны PDF выкарыстоўвае натуральную нумарацыю 1–N. Уключана: арыгінальныя пазнакі старонак кожнага файла захоўваюцца (могуць узнікнуць паўторы)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Падзяліць PDF",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "Рэдактар PDF",
|
||||
"subtitle": "Анатаваць, вылучыць, зацямніць, дадаць фігуры/відарысы, каментарыі, пошук і прагляд PDF."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "Рэдагаваць тэкст PDF",
|
||||
"subtitle": "Націсніце на любы абзац і рэдагуйце яго на месцы з імгненнай перакампаноўкай тэксту, шрыфтамі і стылямі.",
|
||||
"saved": "PDF паспяхова захаваны! ({{size}} КБ)",
|
||||
"failedToLoad": "Не ўдалося загрузіць рэдактар тэксту PDF.",
|
||||
"howToUpload": "Загрузіць PDF",
|
||||
"howToClick": "Націсніце на абзац",
|
||||
"howToRestyle": "Змяніце стыль",
|
||||
"relatedPdfEditor": "Каментуйце і разметьце PDF",
|
||||
"relatedSignPdf": "Намалюйце, увядзіце або загрузіце подпіс",
|
||||
"relatedWatermark": "Нанясіце тэкст або выявы",
|
||||
"relatedStamps": "Размяшчайце штампы на старонках",
|
||||
"relatedCompress": "Паменшыце памер файла",
|
||||
"relatedOrganizeName": "Упарадкаваць PDF",
|
||||
"relatedOrganize": "Мяняйце парадак і кіруйце старонкамі",
|
||||
"open": "Адкрыць",
|
||||
"export": "Экспарт",
|
||||
"filterAll": "Усе",
|
||||
"filterText": "Тэкст",
|
||||
"filterImages": "Выявы",
|
||||
"filterShapes": "Фігуры",
|
||||
"addText": "Дадаць тэкст",
|
||||
"langAuto": "Аўта",
|
||||
"change": "Змяніць",
|
||||
"ignore": "Прапусціць",
|
||||
"next": "Далей",
|
||||
"replace": "Замяніць",
|
||||
"replaceAll": "Замяніць усё",
|
||||
"emptyState": "Адкрыйце PDF, каб рэдагаваць тэкст, выявы і фігуры.",
|
||||
"choosePdf": "Выберыце PDF…",
|
||||
"font": "Шрыфт",
|
||||
"systemFonts": "Сістэмныя шрыфты",
|
||||
"color": "Колер",
|
||||
"alignment": "Выраўноўванне",
|
||||
"style": "Стыль",
|
||||
"lists": "Спісы",
|
||||
"outline": "Абвядзенне",
|
||||
"spacing": "Інтэрвал",
|
||||
"direction": "Напрамак",
|
||||
"dirAuto": "Аўта",
|
||||
"pathStroke": "Абвядзенне контуру",
|
||||
"tipBackToUpload": "Назад да загрузкі",
|
||||
"tipOpenAnotherPdf": "Адкрыць іншы PDF",
|
||||
"tipExportS": "Экспарт (⌘S)",
|
||||
"tipUndoZ": "Адмяніць (⌘Z)",
|
||||
"tipRedoZ": "Паўтарыць (⇧⌘Z)",
|
||||
"tipFileDetails": "Звесткі пра файл",
|
||||
"tipEditExistingContent": "Рэдагаваць наяўнае змесціва",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "На што дзейнічае інструмент рэдагавання — звузьце вобласць на насычаных старонках",
|
||||
"tipClickThePageToAddATextBox": "Націсніце на старонку, каб дадаць тэкставае поле",
|
||||
"tipSpellCheckLanguage": "Мова праверкі правапісу",
|
||||
"tipFindAndReplace": "Знайсці і замяніць",
|
||||
"tipAddAnImage": "Дадаць выяву",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Скапіяваць тэкст старонкі ў парадку чытання",
|
||||
"tipCheckTheSpellingOfThisPage": "Праверыць правапіс на гэтай старонцы",
|
||||
"tipShowOrHideTheFormatPanel": "Паказаць або схаваць панэль фарматавання",
|
||||
"phReplaceWith": "Замяніць на",
|
||||
"tipAddToYourDictionary": "Дадаць у слоўнік",
|
||||
"tipClose": "Закрыць",
|
||||
"phFind": "Знайсці",
|
||||
"tipPreviousMatch": "Папярэдні супадзенне",
|
||||
"tipNextMatch": "Наступнае супадзенне",
|
||||
"tipRotateLeft90": "Павярнуць на 90° улева",
|
||||
"tipRotateRight90": "Павярнуць на 90° управа",
|
||||
"tipFlipHorizontal": "Адлюстраваць гарызантальна",
|
||||
"tipFlipVertical": "Адлюстраваць вертыкальна",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Замяніць выяву, захаваўшы размяшчэнне",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Альтэрнатыўны тэкст для даступнасці (тэгаваныя PDF)",
|
||||
"tipBringToFront": "На пярэдні план",
|
||||
"tipSendToBack": "На задні план",
|
||||
"tipDuplicate": "Дубляваць",
|
||||
"tipDelete": "Выдаліць",
|
||||
"tipAlignLeftEdges": "Выраўнаваць па левых краях",
|
||||
"tipAlignHorizontalCenters": "Цэнтраваць гарызантальна",
|
||||
"tipAlignRightEdges": "Выраўнаваць па правых краях",
|
||||
"tipAlignTops": "Выраўнаваць па верхніх краях",
|
||||
"tipAlignVerticalCenters": "Цэнтраваць вертыкальна",
|
||||
"tipAlignBottoms": "Выраўнаваць па ніжніх краях",
|
||||
"tipDistributeHorizontally": "Размеркаваць гарызантальна",
|
||||
"tipDistributeVertically": "Размеркаваць вертыкальна",
|
||||
"tipFontSize": "Памер шрыфта",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Паказаць шрыфты, усталяваныя на гэтай прыладзе (Chromium)",
|
||||
"tipCustomTextColor": "Уласны колер тэксту",
|
||||
"tipAlignLeft": "Па левым краі",
|
||||
"tipAlignCenter": "Па цэнтры",
|
||||
"tipAlignRight": "Па правым краі",
|
||||
"tipJustify": "Па шырыні",
|
||||
"tipBold": "Тлусты",
|
||||
"tipItalic": "Курсіў",
|
||||
"tipUnderline": "Падкрэслены",
|
||||
"tipStrikethrough": "Закрэслены",
|
||||
"tipSuperscript": "Верхні індэкс",
|
||||
"tipSubscript": "Ніжні індэкс",
|
||||
"tipToggleBulletedItem": "Маркіраваны пункт",
|
||||
"tipToggleNumberedItem": "Нумараваны пункт",
|
||||
"tipNumberedListMarkerStyle": "Стыль маркера нумараваных спісаў",
|
||||
"tipDecreaseListIndentTab": "Паменшыць водступ (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Павялічыць водступ (Tab)",
|
||||
"tipTextOutlineColor": "Колер контуру тэксту",
|
||||
"tipOutlineWidth0None": "Таўшчыня контуру (0 = няма)",
|
||||
"tipFromContent": "Са змесціва",
|
||||
"tipLeftToRight": "Злева направа",
|
||||
"tipRightToLeft": "Справа налева",
|
||||
"tipStrokeColor": "Колер абвядзення",
|
||||
"tipStrokeWidth": "Таўшчыня абвядзення",
|
||||
"tipZoomPresets": "Прадусталёўкі маштабу",
|
||||
"tipZoomOut": "Паменшыць",
|
||||
"tipZoomIn": "Павялічыць",
|
||||
"tipFitPage": "Па памеры старонкі",
|
||||
"tipPreviousPage": "Папярэдняя старонка",
|
||||
"tipTypeAPageNumberAndPressEnter": "Увядзіце нумар старонкі і націсніце Enter",
|
||||
"tipNextPage": "Наступная старонка",
|
||||
"tipDocumentProperties": "Уласцівасці дакумента",
|
||||
"tipHideBar": "Схаваць панэль",
|
||||
"tipShowBar": "Паказаць панэль"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG у PDF",
|
||||
"subtitle": "Стварыць PDF з відарысаў JPG, JPEG і JPEG2000 (JP2/JPX)."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Дубляваць і арганізаваць",
|
||||
"subtitle": "Дубляваць, змяніць парадак і выдаліць старонкі."
|
||||
"subtitle": "Дубляваць, змяніць парадак і выдаліць старонкі.",
|
||||
"saveChanges": "Захаваць змены"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Выдаліць старонкі",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Рэдагаваць закладкі",
|
||||
"subtitle": "Дадаць, рэдагаваць, імпартаваць, выдаліць і выняць закладкі PDF."
|
||||
"subtitle": "Дадаць, рэдагаваць, імпартаваць, выдаліць і выняць закладкі PDF.",
|
||||
"autoExtractExisting": "Аўтаматычна выманне існуючых закладак",
|
||||
"importSectionTitle": "Або імпартаваць закладкі",
|
||||
"csvFormat": "Фармат CSV: загаловак,старонка,узровень",
|
||||
"jsonFormat": "Фармат JSON",
|
||||
"uploadCsvAction": "Націсніце, каб загрузіць CSV",
|
||||
"uploadJsonAction": "Націсніце, каб загрузіць JSON",
|
||||
"orDragHere": "або перацягніце сюды"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Змест",
|
||||
"subtitle": "Стварыць з закладак PDF старонку зместу."
|
||||
"subtitle": "Стварыць з закладак PDF старонку зместу.",
|
||||
"titleLabel": "Загаловак зместу",
|
||||
"fontSize": "Памер шрыфта",
|
||||
"fontFamily": "Сямейства шрыфтоў",
|
||||
"addBookmark": "Додати закладку для сторінки змісту",
|
||||
"generateButton": "Стварыць змест",
|
||||
"selectPdfFirst": "Спачатку выберыце PDF-файл.",
|
||||
"statusReadingFileMainThread": "Читання файлу (головний потік)...",
|
||||
"statusGenerating": "Стварэнне зместу...",
|
||||
"errorReadingFileWithMessage": "Помилка читання файлу: {{message}}",
|
||||
"successGeneratedDownloadStarted": "Змест паспяхова створаны! Спампоўванне распачалося.",
|
||||
"workerErrorWithMessage": "Помилка: {{message}}",
|
||||
"workerErrorOccurred": "Адбылася памылка працаўніка. Падрабязнасці ў кансолі."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Нумары старонак",
|
||||
@@ -88,19 +229,19 @@
|
||||
},
|
||||
"addPageLabels": {
|
||||
"name": "Дадаць пазнакі старонак",
|
||||
"subtitle": "Ужывайце пазнакі старонак PDF з рымскімі лічбамі, прэфіксамі і карыстальніцкім пачаткам.",
|
||||
"uploadHint": "PDF-файл",
|
||||
"subtitle": "Прымяніць пазнакі старонак PDF з рымскімі лічбамі, прэфіксамі і карыстальніцкімі пачатковымі значэннямі.",
|
||||
"uploadHint": "Файл PDF",
|
||||
"howLabelsWorkTitle": "Як працуюць пазнакі",
|
||||
"howLabelsWorkStep1": "Пакіньце дыяпазон старонак пустым, каб пазначыць усе старонкі.",
|
||||
"howLabelsWorkStep2": "Выкарыстоўвайце стылі, напрыклад рымскія лічбы для ўступных старонак і дзесятковую нумарацыю для асноўнай часткі.",
|
||||
"howLabelsWorkStep3": "Выкарыстоўвайце прэфікс са значэннем пачатку 0, каб стварыць пазнакі накшталт A-0, A-1, A-2.",
|
||||
"howLabelsWorkStep2": "Выкарыстоўвайце стылі кшталту рымскіх лічбаў для ўступных старонак і дзесятковую нумарацыю для асноўнай часткі.",
|
||||
"howLabelsWorkStep3": "Выкарыстоўвайце прэфікс з пачатковым значэннем 0, каб стварыць пазнакі накшталт A-0, A-1, A-2.",
|
||||
"howLabelsWorkStep4": "Уключыце працяг нумарацыі, калі адно правіла выкарыстоўвае разарваны дыяпазон, напрыклад 1-9,30-40 або няцотныя старонкі.",
|
||||
"labelRulesTitle": "Правілы пазнак",
|
||||
"addRule": "Дадаць правіла",
|
||||
"removeExistingLabels": "Выдаліць існуючыя пазнакі старонак перад ужываннем гэтых правіл",
|
||||
"cpdfNote": "Гэты інструмент выкарыстоўвае CoherentPDF у вашым браўзеры. Калі CoherentPDF не настроены, вам будзе прапанавана наладзіць яго ў наладах WASM.",
|
||||
"removeExistingLabels": "Выдаліць існуючыя пазнакі старонак перад прымяненнем гэтых правіл",
|
||||
"cpdfNote": "Гэты інструмент выкарыстоўвае CoherentPDF у вашым браўзеры. Калі CoherentPDF не наладжаны, вам будзе прапанавана наладзіць яго ў наладах WASM.",
|
||||
"processButton": "Дадаць пазнакі старонак",
|
||||
"howItWorksUploadTitle": "Загрузіць файл",
|
||||
"howItWorksUploadTitle": "Запампаваць файл",
|
||||
"howItWorksUploadDescription": "Выберыце PDF, які хочаце перапазначыць.",
|
||||
"howItWorksDefineTitle": "Вызначыць правілы",
|
||||
"howItWorksDefineDescription": "Наладзьце адно або некалькі правіл пазнак старонак з дыяпазонамі, стылямі, прэфіксамі і пачатковымі значэннямі.",
|
||||
@@ -108,30 +249,30 @@
|
||||
"howItWorksDownloadDescription": "Захавайце абноўлены PDF з новымі пазнакамі старонак.",
|
||||
"relatedToolsTitle": "Звязаныя інструменты PDF",
|
||||
"faqWhatIsQuestion": "Што такое пазнака старонкі?",
|
||||
"faqWhatIsAnswer": "Пазнака старонкі - гэта нумарацыя, якую чытачы PDF паказваюць у мініяцюрах, навігацыі па старонках і дыялогах друку. Яна не друкуе новы тэкст на самой старонцы.",
|
||||
"faqWhatIsAnswer": "Пазнака старонкі - гэта нумарацыя, якую чытальнікі PDF паказваюць у мініяцюрах, навігацыі па старонках і дыялогах друку. Яна не друкуе новы тэкст на самой старонцы.",
|
||||
"faqMixQuestion": "Ці можна спалучаць рымскія і звычайныя лічбы?",
|
||||
"faqMixAnswer": "Так. Дадайце некалькі правіл, напрыклад 1-4 з LowercaseRoman і 5-20 з DecimalArabic.",
|
||||
"faqPrivacyQuestion": "Ці застаюцца мае файлы прыватнымі?",
|
||||
"faqPrivacyAnswer": "Так. Апрацоўка адбываецца ў вашым браўзеры з дапамогай CoherentPDF WASM. Ваш PDF не пакідае прыладу.",
|
||||
"invalidFileTitle": "Няправільны файл",
|
||||
"invalidFileMessage": "Калі ласка, загрузіце сапраўдны PDF-файл.",
|
||||
"faqPrivacyAnswer": "Так. Апрацоўка адбываецца ў вашым браўзеры з дапамогай CoherentPDF WASM. PDF не пакідае прыладу.",
|
||||
"invalidFileTitle": "Памылковы файл",
|
||||
"invalidFileMessage": "Запампуйце карэктны PDF-файл.",
|
||||
"loadingPdf": "Загрузка PDF...",
|
||||
"protectedPdfTitle": "Абаронены PDF",
|
||||
"protectedPdfMessage": "Гэты PDF абаронены паролем. Спачатку выкарыстайце інструмент расшыфроўкі або змены дазволаў.",
|
||||
"loadErrorMessage": "Не ўдалося загрузіць PDF. Файл можа быць няправільным, пашкоджаным або абароненым паролем.",
|
||||
"fileMeta": "{{size}} • {{count}} старонак",
|
||||
"ruleTitle": "Правіла пазнакі {{number}}",
|
||||
"protectedPdfMessage": "Гэты PDF абаронены паролем. Спачатку скарыстайце інструмент расшыфроўкі або змены дазволаў.",
|
||||
"loadErrorMessage": "Не ўдалося загрузіць PDF. Файл можа быць памылковым, пашкоджаным або абароненым паролем.",
|
||||
"fileMeta": "{{size}} • {{count}} стар.",
|
||||
"ruleTitle": "Правіла пазнак {{number}}",
|
||||
"pageRangeLabel": "Дыяпазон старонак",
|
||||
"pageRangePlaceholder": "Усе старонкі, або напр. 1-4, 7, няцотныя",
|
||||
"labelStyleLabel": "Стыль пазнакі",
|
||||
"labelPrefixLabel": "Прэфікс пазнакі",
|
||||
"labelStyleLabel": "Стыль пазнак",
|
||||
"labelPrefixLabel": "Прэфікс пазнак",
|
||||
"labelPrefixPlaceholder": "Неабавязковы прэфікс, напр. A-",
|
||||
"startValueLabel": "Пачатковае значэнне",
|
||||
"continueNumbering": "Працягваць нумарацыю праз разарваныя дыяпазоны",
|
||||
"examplesNote": "Прыклады: 1-4 для рымскай нумарацыі ўступных старонак, 15-20 з прэфіксам A- і пачаткам 0, або няцотныя старонкі з уключаным працягам.",
|
||||
"uploadFirstMessage": "Спачатку загрузіце PDF-файл.",
|
||||
"applyingLabels": "Ужыванне пазнак старонак...",
|
||||
"invalidRangeMessage": "Правіла {{number}} мае няправільны дыяпазон старонак: {{range}}",
|
||||
"uploadFirstMessage": "Спачатку запампуйце файл PDF.",
|
||||
"applyingLabels": "Прымяненне пазнак старонак...",
|
||||
"invalidRangeMessage": "Правіла {{number}} мае памылковы дыяпазон старонак: {{range}}",
|
||||
"allPages": "усе старонкі",
|
||||
"emptyOutputMessage": "CoherentPDF стварыў пусты файл.",
|
||||
"successMessage": "Пазнакі старонак паспяхова дададзены!",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Дадаць у PDF штампы-відарысы праз панэль анатацый.",
|
||||
"usernameLabel": "Імя для штампа",
|
||||
"usernamePlaceholder": "Увядзіце сваё імя (для штампаў)",
|
||||
"usernameHint": "Гэта імя з'явіцца на створаных вамі штампах."
|
||||
"usernameHint": "Гэта імя з'явіцца на створаных вамі штампах.",
|
||||
"saveButton": "Захаваць PDF з пячаткай"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Выдаліць анатацыі",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Запоўніць форму PDF",
|
||||
"subtitle": "Запоўніць форму непасрэдна ў браўзеры. Таксама падтрымліваюцца формы XFA."
|
||||
"subtitle": "Запоўніць форму непасрэдна ў браўзеры. Таксама падтрымліваюцца формы XFA.",
|
||||
"uploadHint": "Завантажте PDF з полями форми. Заповніть їх безпосередньо у переглядачі нижче, потім натисніть кнопку, щоб зберегти та завантажити заповнену форму. Також підтримуються форми XFA.",
|
||||
"xfaNoteTitle": "Заўвага па формах XFA:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) — застарілий формат, який підтримується лише певними PDF-переглядачами, такими як BentoPDF та Firefox. Якщо ви відкриваєте XFA PDF в іншому ПЗ і бачите порожні сторінки або відсутність полів форми, це означає, що цей переглядач не підтримує XFA. Щоб правильно переглядати та заповнювати форми XFA, використовуйте Firefox або заповнювач форм BentoPDF."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Стварыць форму PDF",
|
||||
"subtitle": "Стварыць запаўняльныя формы PDF з тэкставымі палямі, якія можна перацягваць."
|
||||
"subtitle": "Стварыць запаўняльныя формы PDF з тэкставымі палямі, якія можна перацягваць.",
|
||||
"orSeparator": "АБО",
|
||||
"createBlankPdf": "Стварыць пусты PDF"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Выдаліць пустыя старонкі",
|
||||
@@ -255,45 +402,127 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Тэкст у PDF",
|
||||
"subtitle": "Канвертаваць звычайны тэкставы файл у PDF."
|
||||
"subtitle": "Канвертаваць звычайны тэкставы файл у PDF.",
|
||||
"uploadFiles": "Загрузіць файлы",
|
||||
"typeText": "Увесці тэкст",
|
||||
"acceptedFormats": "Текстові файли (.txt)",
|
||||
"fontFamily": "Сямейства шрыфтоў",
|
||||
"fontSize": "Памер шрыфта",
|
||||
"textColor": "Колер тэксту",
|
||||
"pageSize": "Памер старонкі",
|
||||
"rtlAutoDetectNote": "Мови RTL (арабська, урду, перська тощо) автоматично визначаються, і напрямок тексту регулюється.",
|
||||
"createButton": "Стварыць PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON у PDF",
|
||||
"subtitle": "Канвертаваць файлы JSON у фармат PDF."
|
||||
"subtitle": "Канвертаваць файлы JSON у фармат PDF.",
|
||||
"noteLabel": "Примітка:",
|
||||
"noteText": "Підтримуються лише JSON-файли, створені інструментом PDF→JSON. Стандартні JSON-файли від інших інструментів не працюють.",
|
||||
"acceptedFormats": "Кілька JSON-файлів",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Виберіть принаймні 1 JSON-файл",
|
||||
"selectedReady": "Вибрано {{count}} файл(ів). Готово до конвертації!",
|
||||
"readingFiles": "Читання файлів (головний потік)...",
|
||||
"converting": "Конвертація JSON-файлів у PDF...",
|
||||
"readError": "Помилка читання файлів: {{message}}",
|
||||
"creatingZip": "Створення ZIP-файлу...",
|
||||
"success": "JSON-файли успішно конвертовано в PDF! Завантаження ZIP розпочато.",
|
||||
"zipError": "Помилка створення ZIP: {{message}}",
|
||||
"workerError": "Помилка Worker: {{message}}",
|
||||
"getStarted": "Виберіть JSON-файли, щоб почати"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF у JPG",
|
||||
"subtitle": "Канвертаваць кожную старонку PDF у відарыс JPG."
|
||||
"subtitle": "Канвертаваць кожную старонку PDF у відарыс JPG.",
|
||||
"imageQuality": "Якасць відарыса",
|
||||
"imageQualityExplanation": "Вышэйшая якасць = большы памер файла",
|
||||
"alert": {
|
||||
"invalidFile": "Памылковы файл",
|
||||
"invalidFileExplanation": "Запампуйце файл PDF.",
|
||||
"noFile": "Няма файла",
|
||||
"noFileExplanation": "Спачатку запампуйце файл PDF.",
|
||||
"conversionSuccess": "PDF паспяхова канвертаваны ў JPGs!",
|
||||
"conversionError": "Не ўдалося канвертаваць PDF у JPG. Файл можа быць пашкоджаны."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Канвертацыя ў JPG..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF у PNG",
|
||||
"subtitle": "Канвертаваць кожную старонку PDF у відарыс PNG."
|
||||
"subtitle": "Канвертаваць кожную старонку PDF у відарыс PNG.",
|
||||
"imageScale": "Маштаб відарыса",
|
||||
"imageScaleExplanation": "Большы маштаб = лепшая якасць, але большы памер файла",
|
||||
"alert": {
|
||||
"invalidFile": "Памылковы файл",
|
||||
"invalidFileExplanation": "Запампуйце файл PDF.",
|
||||
"noFile": "Няма файла",
|
||||
"noFileExplanation": "Спачатку запампуйце файл PDF.",
|
||||
"conversionSuccess": "PDF паспяхова канвертаваны ў PNGs!",
|
||||
"conversionError": "Не ўдалося канвертаваць PDF у PNG. Файл можа быць пашкоджаны."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Канвертацыя ў PNG..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF у WebP",
|
||||
"subtitle": "Канвертаваць кожную старонку PDF у відарыс WebP."
|
||||
"subtitle": "Канвертаваць кожную старонку PDF у відарыс WebP.",
|
||||
"imageQuality": "Якасць відарыса",
|
||||
"imageQualityExplanation": "Вышэйшая якасць = большы памер файла",
|
||||
"alert": {
|
||||
"invalidFile": "Памылковы файл",
|
||||
"invalidFileExplanation": "Запампуйце файл PDF.",
|
||||
"noFile": "Няма файла",
|
||||
"noFileExplanation": "Спачатку запампуйце файл PDF.",
|
||||
"conversionSuccess": "PDF паспяхова канвертаваны ў WebPs!",
|
||||
"conversionError": "Не ўдалося канвертаваць PDF у WebP. Файл можа быць пашкоджаны."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Канвертацыя ў WebP..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF у BMP",
|
||||
"subtitle": "Канвертаваць кожную старонку PDF у відарыс BMP."
|
||||
"subtitle": "Канвертаваць кожную старонку PDF у відарыс BMP.",
|
||||
"alert": {
|
||||
"invalidFile": "Памылковы файл",
|
||||
"invalidFileExplanation": "Запампуйце файл PDF.",
|
||||
"noFile": "Няма файла",
|
||||
"noFileExplanation": "Спачатку запампуйце файл PDF.",
|
||||
"conversionSuccess": "PDF паспяхова канвертаваны ў BMPs!",
|
||||
"conversionError": "Не ўдалося канвертаваць PDF у BMP. Файл можа быць пашкоджаны."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Канвертацыя ў BMP..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF у TIFF",
|
||||
"subtitle": "Канвертаваць кожную старонку PDF у відарыс TIFF.",
|
||||
"dpi": "DPI (Разрашэнне)",
|
||||
"dpi": "DPI (Раздзяляльнасць)",
|
||||
"dpiExplanation": "Вышэйшы DPI = лепшая якасць для друку, большы памер файла",
|
||||
"compression": "Сціск",
|
||||
"compression": "Сцісканне",
|
||||
"compressionExplanation": "LZW і Deflate — без страт. CCITT Group 4 лепш за ўсё падыходзіць для чорна-белых сканаваных дакументаў.",
|
||||
"colorMode": "Каляровы рэжым",
|
||||
"multiPage": "Захаваць як шматстаронкавы TIFF (адзін файл)",
|
||||
"loadingVips": "Загрузка апрацоўшчыка відарысаў...",
|
||||
"converting": "Канвертаванне ў TIFF..."
|
||||
"converting": "Канвертацыя ў TIFF...",
|
||||
"alert": {
|
||||
"invalidFile": "Памылковы файл",
|
||||
"invalidFileExplanation": "Запампуйце файл PDF.",
|
||||
"noFile": "Няма файла",
|
||||
"noFileExplanation": "Спачатку запампуйце файл PDF.",
|
||||
"conversionSuccess": "PDF паспяхова канвертаваны ў TIFFs!",
|
||||
"conversionError": "Не ўдалося канвертаваць PDF у TIFF. Файл можа быць пашкоджаны."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF у CBZ",
|
||||
"subtitle": "Канвертаваць PDF у файл CBZ (архіў коміксаў) для чытачоў коміксаў.",
|
||||
"imageFormat": "Фармат выявы",
|
||||
"quality": "Якасць выявы",
|
||||
"subtitle": "Канвертаваць PDF у файл CBZ (архіў коміксаў) для чытальнікаў коміксаў.",
|
||||
"imageFormat": "Фармат відарыса",
|
||||
"quality": "Якасць відарыса",
|
||||
"qualityExplanation": "Вышэйшая якасць = большы памер файла",
|
||||
"scale": "Маштаб",
|
||||
"scaleExplanation": "Вышэйшы маштаб = лепшая якасць для экранаў высокай раздзяляльнасці",
|
||||
@@ -309,12 +538,12 @@
|
||||
"tagsLabel": "Тэгі / Жанр",
|
||||
"yearLabel": "Год выдання",
|
||||
"ratingLabel": "Рэйтынг (0-5)",
|
||||
"converting": "Канвертаванне ў CBZ...",
|
||||
"converting": "Канвертацыя ў CBZ...",
|
||||
"alert": {
|
||||
"invalidFile": "Няправільны файл",
|
||||
"invalidFileExplanation": "Калі ласка, загрузіце файл PDF.",
|
||||
"invalidFile": "Памылковы файл",
|
||||
"invalidFileExplanation": "Запампуйце файл PDF.",
|
||||
"noFile": "Няма файла",
|
||||
"noFileExplanation": "Калі ласка, спачатку загрузіце файл PDF.",
|
||||
"noFileExplanation": "Спачатку запампуйце файл PDF.",
|
||||
"conversionSuccess": "PDF паспяхова канвертаваны ў CBZ!",
|
||||
"conversionError": "Не ўдалося канвертаваць PDF у CBZ. Файл можа быць пашкоджаны."
|
||||
}
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF у JSON",
|
||||
"subtitle": "Канвертаваць файлы PDF у фармат JSON."
|
||||
"subtitle": "Канвертаваць файлы PDF у фармат JSON.",
|
||||
"convertButton": "Конвертувати у JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Виберіть принаймні 1 PDF-файл",
|
||||
"selectedReady": "Вибрано {{count}} файл(ів). Готово до конвертації!",
|
||||
"checkingEncrypted": "Перевірка зашифрованих PDF...",
|
||||
"readingFiles": "Читання файлів (головний потік)...",
|
||||
"converting": "Конвертація PDF у JSON...",
|
||||
"readError": "Помилка читання файлів: {{message}}",
|
||||
"creatingZip": "Створення ZIP-файлу...",
|
||||
"success": "PDF успішно конвертовано у JSON! Завантаження ZIP розпочато.",
|
||||
"zipError": "Помилка створення ZIP: {{message}}",
|
||||
"workerError": "Помилка Worker: {{message}}",
|
||||
"getStarted": "Виберіть PDF-файли, щоб почати"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Дадаць у PDF магчымасці пошуку і капіравання."
|
||||
"subtitle": "Дадаць у PDF магчымасці пошуку і капіравання.",
|
||||
"languagesInDocument": "Мовы ў дакуменце",
|
||||
"searchLanguagesPlaceholder": "Пошук моў...",
|
||||
"selectedLabel": "Выбрана:",
|
||||
"none": "Няма",
|
||||
"advancedSettingsSummary": "Додаткові налаштування (рекомендовано для покращення точності)",
|
||||
"resolutionLabel": "Раздзяляльная здольнасць",
|
||||
"resolutionStandard": "Стандартная (192 DPI)",
|
||||
"resolutionHigh": "Высокая (288 DPI)",
|
||||
"resolutionUltra": "Ультра (384 DPI)",
|
||||
"binarizeLabel": "Бінаризувати зображення (покращити контраст для чистих сканів)",
|
||||
"embedFullFontsLabel": "Вбудувати повні шрифти (більший файл, краща сумісність)",
|
||||
"whitelistPresetLabel": "Передустановка білого списку символів",
|
||||
"whitelistNone": "Немає (усі символи)",
|
||||
"whitelistAlphanumeric": "Літери та цифри + базова пунктуація",
|
||||
"whitelistNumbersCurrency": "Числа + Символи валют",
|
||||
"whitelistLettersOnly": "Лише літери (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Лише числа (0-9)",
|
||||
"whitelistInvoice": "Рахунок/Чек (числа, $, ., -, /)",
|
||||
"whitelistForms": "Форми (літери та цифри + загальні символи)",
|
||||
"whitelistCustom": "Користувацький...",
|
||||
"whitelistHelp": "Будуть розпізнані лише ці символи. Залиште порожнім для всіх символів.",
|
||||
"whitelistInputLabel": "Білий список символів (необов'язково)",
|
||||
"whitelistInputPlaceholder": "напр., abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "Запусціць OCR",
|
||||
"progressInitializing": "Ініцыялізацыя...",
|
||||
"resultsTitle": "OCR завершаны",
|
||||
"resultsDescription": "Ваш PDF з пошуком готовий. Ви також можете скопіювати або завантажити витягнутий текст нижче.",
|
||||
"copyToClipboard": "Капіяваць у буфер абмену",
|
||||
"downloadTxt": "Спампаваць як .txt",
|
||||
"downloadSearchablePdf": "Спампаваць пошукавы PDF",
|
||||
"statusPrefix": "Статус: {{status}}",
|
||||
"availabilityInvalidConfig": "Цей реліз не надає дійсних мов OCR. Перебудуйте його з VITE_TESSERACT_AVAILABLE_LANGUAGES, встановленим на дійсні коди Tesseract.",
|
||||
"availabilityBundles": "Цей реліз містить OCR для: {{languages}}.",
|
||||
"noLanguagesAvailable": "У гэтым выпуску няма даступных моў OCR.",
|
||||
"noLanguagesTitle": "Мовы не выбраны",
|
||||
"noLanguagesMessage": "Выберыце прынамсі адну мову для OCR.",
|
||||
"noFileTitle": "Няма файла",
|
||||
"noFileMessage": "Спачатку загрузіце PDF-файл.",
|
||||
"languageUnavailableTitle": "Мова OCR недаступная",
|
||||
"ocrErrorTitle": "Памылка OCR",
|
||||
"ocrErrorMessage": "Падчас працэсу OCR адбылася памылка. Магчыма, працаўнік не загрузіўся. Паспрабуйце яшчэ раз.",
|
||||
"howItWorksTitle": "Як гэта працуе:",
|
||||
"extractTextLabel": "Витягти текст:",
|
||||
"extractTextDescription": "Використовує Tesseract OCR для розпізнавання тексту на сканованих зображеннях або PDF.",
|
||||
"searchableOutputLabel": "Вивід з можливістю пошуку:",
|
||||
"searchableOutputDescription": "Створює новий PDF з невидимим текстовим шаром, роблячи ваш документ повністю придатним для пошуку, зберігаючи оригінальний вигляд.",
|
||||
"characterFilteringLabel": "Фільтрація символів:",
|
||||
"characterFilteringDescription": "Використовуйте білі списки для фільтрації небажаних символів і покращення точності для конкретних типів документів (рахунки, форми тощо).",
|
||||
"multiLanguageSupportLabel": "Багатомовна підтримка:",
|
||||
"multiLanguageSupportDescription": "Виберіть кілька мов для документів зі змішаним мовним вмістом."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Чаргаваць і змяшаць старонкі",
|
||||
"subtitle": "Аб'яднаць PDF, чаргуючы старонкі з асобных PDF. Закладкі захоўваюцца."
|
||||
"subtitle": "Аб'яднаць PDF, чаргуючы старонкі з асобных PDF. Закладкі захоўваюцца.",
|
||||
"retainPageLabels": "Захоўваць арыгінальныя пазнакі старонак з кожнага файла",
|
||||
"retainPageLabelsHint": "Выключана (па змаўчанні): аб’яднаны PDF выкарыстоўвае натуральную нумарацыю 1–N. Уключана: арыгінальныя пазнакі старонак кожнага файла захоўваюцца (могуць узнікнуць паўторы)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Сартаванне двухбаковага сканавання",
|
||||
"subtitle": "Упарадкоўвае PDF, адсканаваны двума блокамі (спачатку ўсе пярэднія бакі, потым усе адваротныя), у правільны парадак пярэдні/адваротны.",
|
||||
"totalPagesLabel": "Усяго старонак:",
|
||||
"splitAfterPageLabel": "Падзяліць пасля старонкі",
|
||||
"splitAfterPagePlaceholder": "напр. 50",
|
||||
"backBlockOrderLabel": "Парадак блока адваротных бакоў",
|
||||
"backBlockReverseOption": "Перавярнуць блок адваротных бакоў (звычайна пры перавернутым стосе)",
|
||||
"backBlockKeepOption": "Пакінуць блок адваротных бакоў без змен",
|
||||
"autoSplitButton": "Вызначыць падзел аўтаматычна (палова)",
|
||||
"exportGroupedLabel": "Экспартаваць файлы групамі паводле даўжыні зыходнага дакумента",
|
||||
"pagesPerDocumentLabel": "Старонак у зыходным дакуменце",
|
||||
"groupedHelp": "Калі ўключана, вынікам будзе ZIP-архіў з асобным PDF для кожнага згрупаванага дакумента.",
|
||||
"collateButton": "Сабраць PDF",
|
||||
"invalidFileTitle": "Няправільны файл",
|
||||
"invalidFileMessage": "Выберыце файл PDF.",
|
||||
"loadingPdf": "Загрузка PDF...",
|
||||
"loadErrorMessage": "Не ўдалося загрузіць файл PDF.",
|
||||
"fileMeta": "{{size}} - {{count}} стар.",
|
||||
"oddPageWarning": "Няцотная колькасць старонак ({{count}}). Двухбаковае сканаванне павінна мець цотную колькасць старонак; магчыма, старонкі не хапае або ёсць лішняя.",
|
||||
"previewSummary": "Блок пярэдніх бакоў: {{frontCount}} стар., блок адваротных: {{backCount}} стар. Вынік: {{outputCount}} стар. у парадку пярэдні/адваротны.",
|
||||
"previewMismatchWarning": "Даўжыня блокаў пярэдніх і адваротных бакоў адрозніваецца ({{frontCount}} пярэдніх супраць {{backCount}} адваротных). Лішнія старонкі ({{extraCount}}) з даўжэйшага блока будуць дададзены без пары ў канец.",
|
||||
"missingFileTitle": "Файл не выбраны",
|
||||
"missingFileMessage": "Перад апрацоўкай загрузіце PDF прынамсі з 2 старонкамі.",
|
||||
"invalidSplitTitle": "Няправільны пункт падзелу",
|
||||
"invalidSplitMessage": "Пункт падзелу павінен быць паміж старонкай 1 і старонкай {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "Няроўныя блокі",
|
||||
"unevenConfirmMessage": "У блоку пярэдніх бакоў {{frontCount}} стар., у блоку адваротных — {{backCount}} стар.\nЗвычайна гэта азначае, што старонка адсканавана двойчы або яе не хапае.\n\nСтаронкі без пары ({{extraCount}}) будуць дададзены ў канец.\n\nУсё роўна працягнуць?",
|
||||
"invalidGroupTitle": "Няправільны памер групы",
|
||||
"invalidGroupMessage": "Увядзіце правільную колькасць старонак у зыходным дакуменце.",
|
||||
"collatingLoader": "Збор двухбаковага сканавання...",
|
||||
"successMessage": "Сабраны PDF паспяхова створаны.",
|
||||
"successGroupedMessage": "Збор завершаны. Створана файлаў: {{fileCount}}.",
|
||||
"processErrorMessage": "Не ўдалося сабраць PDF.",
|
||||
"howItWorksStep1Title": "Загрузіце скан",
|
||||
"howItWorksStep1": "Перацягніце адзін PDF, у якім спачатку ідуць усе пярэднія бакі, а потым усе адваротныя.",
|
||||
"howItWorksStep2Title": "Задайце пункт падзелу",
|
||||
"howItWorksStep2": "Пазначце, дзе заканчваецца блок пярэдніх бакоў, і выберыце, ці трэба перавярнуць блок адваротных.",
|
||||
"howItWorksStep3Title": "Сабярыце і спампуйце",
|
||||
"howItWorksStep3": "Вы атрымаеце адзін PDF з чаргаваннем старонак або ZIP-архіў з асобным файлам для кожнага зыходнага дакумента.",
|
||||
"faqOddPagesQuestion": "Што рабіць, калі ў скане няцотная колькасць старонак?",
|
||||
"faqOddPagesAnswer": "Двухбаковае сканаванне павінна мець цотную колькасць старонак. Калі гэта не так, старонка, хутчэй за ўсё, адсканавана двойчы або прапушчана. Інструмент папярэдзіць вас перад апрацоўкай, а старонкі без пары будуць дададзены ў канец, каб нічога не згубілася.",
|
||||
"faqBackOrderQuestion": "Навошта пакідаць блок адваротных бакоў без змен?",
|
||||
"faqBackOrderAnswer": "Гэта залежыць ад таго, як стос падавалі на другім праходзе. Калі перавярнуць увесь стос, адваротныя бакі ідуць у адваротным парадку — гэта варыянт па змаўчанні. Калі сканер выдаў іх у тым самым парадку, што і пярэднія бакі, выберыце пакінуць блок без змен."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Дадаць далучэнні",
|
||||
@@ -400,35 +740,35 @@
|
||||
"syncScroll": "Сінхранізаваць пракрутку",
|
||||
"export": "Экспарт",
|
||||
"exportAsPdf": "Экспартаваць як PDF",
|
||||
"splitView": "Падзелены выгляд",
|
||||
"splitView": "Падзелены экран",
|
||||
"alternating": "Чаргаванне",
|
||||
"leftDocument": "Левы дакумент",
|
||||
"rightDocument": "Правы дакумент",
|
||||
"original": "Арыгінал",
|
||||
"modified": "Зменены",
|
||||
"searchChanges": "Шукаць змены...",
|
||||
"searchChanges": "Пошук змен...",
|
||||
"deleted": "Выдалена",
|
||||
"added": "Дададзена",
|
||||
"prevPage": "Папярэдняя старонка",
|
||||
"nextPage": "Наступная старонка",
|
||||
"prevChange": "Папярэдняя змена",
|
||||
"nextChange": "Наступная змена",
|
||||
"uploadTwoPdfs": "Загрузіце два PDF, каб убачыць адрозненні.",
|
||||
"uploadTwoPdfs": "Запампуйце два PDF, каб убачыць адрозненні.",
|
||||
"noDifferences": "На гэтай старонцы адрозненняў не выяўлена.",
|
||||
"noMatchingChanges": "Няма змен, што адпавядаюць бягучаму фільтру.",
|
||||
"pageNotExist": "Старонка {{page}} не існуе ў гэтым PDF.",
|
||||
"noPairedPage": "Для гэтага боку няма спаранай старонкі.",
|
||||
"noPairedPage": "Для гэтага боку няма парнай старонкі.",
|
||||
"buildingModel": "Стварэнне мадэлі супастаўлення старонак...",
|
||||
"indexingPdf": "Індэксацыя PDF {{num}}, старонка {{page}} з {{total}}...",
|
||||
"indexingPdf": "Індэксаванне PDF {{num}}, старонка {{page}} з {{total}}...",
|
||||
"loadingComparison": "Загрузка параўнання {{current}} з {{total}}...",
|
||||
"runningOcr": "Запуск OCR на старонцы {{page}}...",
|
||||
"preparingExport": "Падрыхтоўка экспарту PDF...",
|
||||
"renderingPage": "Адмалёўка старонкі {{current}} з {{total}}...",
|
||||
"renderingPage": "Апрацоўка старонкі {{current}} з {{total}}...",
|
||||
"exportError": "Памылка экспарту",
|
||||
"exportFailed": "Не ўдалося экспартаваць PDF параўнання.",
|
||||
"loadingFile": "Загрузка {{name}}...",
|
||||
"invalidFile": "Няправільны файл",
|
||||
"invalidFileMsg": "Калі ласка, абярыце сапраўдны PDF-файл.",
|
||||
"invalidFile": "Памылковы файл",
|
||||
"invalidFileMsg": "Выберыце карэктны файл PDF.",
|
||||
"loadError": "Не ўдалося загрузіць PDF. Магчыма, ён пашкоджаны або абаронены паролем."
|
||||
},
|
||||
"posterizePdf": {
|
||||
@@ -660,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF у тэкст",
|
||||
"subtitle": "Выняць тэкст з файлаў PDF і захаваць як тэкставы файл (.txt). Падтрымлівае некалькі файлаў.",
|
||||
"note": "Гэты інструмент працуе ТОЛЬКІ з PDF, створанымі лічбавым спосабам. Для сканіраваных дакументаў або PDF на аснове відарысаў выкарыстоўвайце інструмент OCR PDF.",
|
||||
"convertButton": "Выняць тэкст"
|
||||
"noteLabel": "Заўвага:",
|
||||
"noteText": "Цей інструмент працює ТІЛЬКИ з PDF, створеними цифровим способом. Для сканованих документів або PDF на основі зображень використовуйте натомість наш інструмент OCR PDF.",
|
||||
"convertButton": "Выняць тэкст",
|
||||
"note": "Гэты інструмент працуе ТОЛЬКІ з PDF, створанымі лічбавым спосабам. Для сканіраваных дакументаў або PDF на аснове відарысаў выкарыстоўвайце інструмент OCR PDF."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Лічбавы подпіс PDF",
|
||||
"pageTitle": "Лічбавы подпіс PDF - Дадаць крыптаграфічны подпіс | BentoPDF",
|
||||
"subtitle": "Дадаць крыптаграфічны лічбавы подпіс да PDF з выкарыстаннем сертыфікатаў X.509. Падтрымлівае фарматы PKCS#12 (.pfx, .p12) і PEM. Ваш прыватны ключ ніколі не пакідае ваш браўзер.",
|
||||
"certificateSection": "Сертыфікат",
|
||||
"uploadCert": "Запампаваць сертыфікат (.pfx, .p12)",
|
||||
"uploadCert": "Запампаваць сертыфікат (.pfx, .p12, .pem)",
|
||||
"certPassword": "Пароль сертыфіката",
|
||||
"privateKeyPassword": "Пароль приватного ключа",
|
||||
"certPasswordPlaceholder": "Увядзіце пароль сертыфіката",
|
||||
"certInfo": "Інфармацыя пра сертыфікат",
|
||||
"certSubject": "Суб'ект",
|
||||
@@ -682,8 +1025,71 @@
|
||||
"locationPlaceholder": "напрыклад, Мінск, Беларусь",
|
||||
"contactInfo": "Кантактная інфармацыя",
|
||||
"contactPlaceholder": "напрыклад, [email protected]",
|
||||
"visibleSignature": "Видимий підпис",
|
||||
"visibleSignatureDescription": "Якщо увімкнено, у PDF з'являється видиме поле підпису. Можна завантажити зображення/логотип або додати текст. Якщо не вказано жодного, ім'я підписанта автоматично відображається з сертифіката.",
|
||||
"signatureImage": "Зображення/логотип підпису (необов'язково)",
|
||||
"uploadSignatureImage": "Завантажити зображення (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Попередній перегляд підпису",
|
||||
"remove": "Видалити",
|
||||
"page": "Сторінка",
|
||||
"firstPage": "Перша сторінка",
|
||||
"lastPage": "Остання сторінка",
|
||||
"allPages": "Усі сторінки",
|
||||
"customPage": "Користувацька сторінка #",
|
||||
"pageNumber": "Сторінка #",
|
||||
"xPosition": "Позиція X (зліва)",
|
||||
"yPosition": "Позиція Y (зверху)",
|
||||
"width": "Ширина",
|
||||
"height": "Висота",
|
||||
"addTextOverlay": "Додати текстове накладання",
|
||||
"text": "Текст",
|
||||
"textPlaceholder": "напр., Підписано в цифровій формі Іваном Петренком",
|
||||
"textColor": "Колір тексту",
|
||||
"fontSize": "Розмір шрифту",
|
||||
"invalidImageTitle": "Недійсне зображення",
|
||||
"invalidImageMessage": "Виберіть зображення PNG, JPG або WebP.",
|
||||
"invalidFileTitle": "Недійсний файл",
|
||||
"invalidFileMessage": "Виберіть PDF-файл.",
|
||||
"invalidCertificateTitle": "Недійсний сертифікат",
|
||||
"invalidCertificateMessage": "Виберіть файл сертифіката .pfx, .p12 або .pem.",
|
||||
"certificateLoaded": "Сертифікат завантажено",
|
||||
"certificateUnlocked": "Сертифікат розблоковано",
|
||||
"failedParsePem": "Не вдалося проаналізувати файл PEM",
|
||||
"enterPasswordToUnlock": "Введіть пароль для розблокування",
|
||||
"invalidPasswordOrCertificate": "Невірний пароль або сертифікат",
|
||||
"incorrectPassword": "Невірний пароль",
|
||||
"failedParseCertificate": "Не вдалося проаналізувати сертифікат",
|
||||
"missingDataTitle": "Відсутні дані",
|
||||
"missingDataMessage": "Завантажте і PDF, і дійсний сертифікат.",
|
||||
"applyingSignature": "Застосування цифрового підпису...",
|
||||
"signingFailedTitle": "Помилка підписання",
|
||||
"chainFetchFailed": "Не вдалося отримати ланцюг сертифікатів. Можливо, проблема з мережею або проксі сертифікатів недоступний. Перевірте підключення до Інтернету та повторіть спробу. Якщо проблема не зникає, зверніться до підтримки.",
|
||||
"failedToSignPdf": "Не вдалося підписати PDF: {{message}}",
|
||||
"defaultSignatureText": "Підписано в цифровій формі {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} стор.",
|
||||
"howToStep1Title": "Завантажити PDF",
|
||||
"howToStep1Text": "Виберіть PDF-документ, який хочете підписати",
|
||||
"howToStep2Title": "Завантажити сертифікат",
|
||||
"howToStep2Text": "Надайте файл сертифіката .pfx або .p12 і пароль",
|
||||
"howToStep3Title": "Підписати та завантажити",
|
||||
"howToStep3Text": "Застосуйте цифровий підпис і завантажте підписаний PDF",
|
||||
"relatedEncryptDesc": "Захистити PDF паролем",
|
||||
"relatedDecryptDesc": "Видалити пароль PDF",
|
||||
"relatedFlattenDesc": "Зробити анотації постійними",
|
||||
"relatedSanitizeDesc": "Видалити приховані дані",
|
||||
"relatedPermissionsDesc": "Встановити дозволи PDF",
|
||||
"faqWhatIsQuestion": "Що таке цифровий підпис?",
|
||||
"faqWhatIsAnswer": "Цифровий підпис — це криптографічний механізм, який перевіряє автентичність і цілісність документа. На відміну від намальованого підпису, він використовує криптографію відкритого ключа (сертифікати X.509) для підтвердження особи підписанта.",
|
||||
"faqFormatsQuestion": "Які формати сертифікатів підтримуються?",
|
||||
"faqFormatsAnswer": "Ми підтримуємо сертифікати у форматі PKCS#12 (.pfx, .p12), які містять і ваш сертифікат, і приватний ключ в одному зашифрованому файлі. Зазвичай вони видаються центрами сертифікації.",
|
||||
"faqPrivateKeyQuestion": "Чи безпечний мій приватний ключ?",
|
||||
"faqPrivateKeyAnswer": "Так! Уся обробка відбувається повністю у вашому браузері. Ваш сертифікат, приватний ключ і файли PDF ніколи не залишають ваш пристрій і не завантажуються на жоден сервер.",
|
||||
"faqValidReadersQuestion": "Чи буде підпис дійсним у переглядачах PDF?",
|
||||
"faqValidReadersAnswer": "Так, інструмент створює стандартні відокремлені підписи PKCS#7, які розпізнаються всіма основними програмами для перегляду PDF. Для повної перевірки використовуйте сертифікат від довіреного центру сертифікації.",
|
||||
"applySignature": "Ужыць лічбавы подпіс",
|
||||
"successMessage": "PDF паспяхова падпісаны! Подпіс можна праверыць у любым PDF-чытальніку."
|
||||
"successMessage": "PDF паспяхова падпісаны! Подпіс можна праверыць у любым PDF-чытальніку.",
|
||||
"internetRequiredTitle": "Потрібне інтернет-з'єднання",
|
||||
"internetRequiredDescription": "Для перевірки підпису може знадобитися отримати інформацію про ланцюг сертифікатів із сервера видавця сертифіката."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Праверыць подпіс PDF",
|
||||
@@ -691,13 +1097,13 @@
|
||||
"subtitle": "Праверыць лічбавыя подпісы ў PDF. Праверыць сапраўднасць сертыфіката, паглядзець дэталі падпісанта і пацвердзіць надзейнасць дакумента. Уся апрацоўка адбываецца ў вашым браўзеры."
|
||||
},
|
||||
"timestampPdf": {
|
||||
"name": "Пазначыць PDF часам",
|
||||
"pageTitle": "Часовая пазнака PDF бясплатна - RFC 3161 | BentoPDF",
|
||||
"subtitle": "Дадайце часовую пазнаку RFC 3161 да PDF праз давераны сервер TSA. Даказвае, што ваш дакумент існаваў у пэўны момант часу. Сертыфікат не патрабуецца.",
|
||||
"tsaSectionTitle": "Сервер часовых пазнак (TSA)",
|
||||
"selectTsa": "Абраць сервер TSA",
|
||||
"applyTimestamp": "Прымяніць часовую пазнаку",
|
||||
"successMessage": "PDF паспяхова пазначаны часам! Пазнаку можна праверыць у Adobe Acrobat і іншых PDF-праглядчыках."
|
||||
"name": "Дадаць у PDF пазнаку часу",
|
||||
"pageTitle": "Дадаць пазнаку часу бясплатна - RFC 3161 | BentoPDF",
|
||||
"subtitle": "Дадаць пазнаку часу RFC 3161 у PDF праз давераны сервер TSA. Даказвае, што ваш дакумент існаваў у пэўны момант часу. Сертыфікат не патрабуецца.",
|
||||
"tsaSectionTitle": "Сервер пазнак часу (TSA)",
|
||||
"selectTsa": "Выбраць сервер TSA",
|
||||
"applyTimestamp": "Прымяніць пазнаку часу",
|
||||
"successMessage": "PDF паспяхова атрымаў пазнаку часу! Пазнаку можна праверыць у любым PDF-чытальніку."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email у PDF",
|
||||
@@ -772,32 +1178,138 @@
|
||||
"templateLoaded": "Шаблон \"{{name}}\" загружаны.",
|
||||
"failedLoadTemplate": "Не ўдалося загрузіць шаблон.",
|
||||
"noSettings": "Няма налад для гэтага вузла.",
|
||||
"advancedSettings": "Пашыраныя налады"
|
||||
"advancedSettings": "Пашыраныя налады",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "Увод PDF",
|
||||
"description": "Загрузіце адзін ці некалькі файлаў PDF"
|
||||
},
|
||||
"download": {
|
||||
"name": "Спампаваць",
|
||||
"description": "Аўтаматычна спампаваць як PDF або ZIP"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "Няма PDF, падключаных да вузла {{node}}",
|
||||
"noPdfInputs": "Няма PDF на ўваходзе",
|
||||
"expectedPdfInput": "Чакаўся ўвод PDF",
|
||||
"failedToRenderPage": "Не атрымалася адлюстраваць старонку {{page}}",
|
||||
"failedToGetCanvasContext": "Не атрымалася атрымаць кантэкст палатна для старонкі {{page}}",
|
||||
"failedToRenderPageToImage": "Не атрымалася адлюстраваць старонку {{page}} як выяву",
|
||||
"noPagesProcessed": "Ніводнай старонкі не апрацавана",
|
||||
"cpdfNotConfigured": "CoherentPDF не настроены. Настройце яго ў пашыраных параметрах.",
|
||||
"workerError": "Памылка воркера: {{message}}",
|
||||
"alternateMergeWorkerError": "Памылка воркера паслядоўнага зліцця: {{message}}",
|
||||
"noPdfFilesUploaded": "У вузел PDF Input не загружаны PDF-файлы",
|
||||
"failedToLoadFile": "Не атрымалася загрузіць \"{{file}}\" — файл можа быць пашкоджаны",
|
||||
"noImagesUploaded": "У вузел Image Input не загружаны выявы",
|
||||
"noWordDocsUploaded": "У вузел Word Input не загружаны дакументы",
|
||||
"noExcelUploaded": "У вузел Excel Input не загружаны табліцы",
|
||||
"noPowerPointUploaded": "У вузел PowerPoint Input не загружаны прэзентацыі",
|
||||
"noCbzUploaded": "У вузел CBZ Input не загружаны архівы коміксаў",
|
||||
"noEmailUploaded": "У вузел Email Input не загружаны файлы пошты",
|
||||
"noEpubUploaded": "У вузел EPUB Input не загружаны файлы EPUB",
|
||||
"noFb2Uploaded": "У вузел FB2 Input не загружаны файлы FB2",
|
||||
"noJsonUploaded": "У вузел JSON Input не загружаны файлы JSON",
|
||||
"noMarkdownUploaded": "У вузел Markdown Input не загружаны файлы Markdown",
|
||||
"noMobiUploaded": "У вузел MOBI Input не загружаны файлы MOBI",
|
||||
"noOdgUploaded": "У вузел ODG Input не загружаны файлы ODG",
|
||||
"noPagesUploaded": "У вузел Pages Input не загружаны файлы Pages",
|
||||
"noPubUploaded": "У вузел PUB Input не загружаны файлы PUB",
|
||||
"noSvgUploaded": "У вузел SVG Input не загружаны файлы SVG",
|
||||
"noTextUploaded": "У вузел Text Input не загружаны тэкставыя файлы",
|
||||
"noVsdUploaded": "У вузел VSD Input не загружаны файлы Visio",
|
||||
"noWpdUploaded": "У вузел WPD Input не загружаны файлы WPD",
|
||||
"noWpsUploaded": "У вузел WPS Input не загружаны файлы WPS",
|
||||
"noXmlUploaded": "У вузел XML Input не загружаны файлы XML",
|
||||
"noXpsUploaded": "У вузел XPS Input не загружаны файлы XPS",
|
||||
"alternateMergeNeedsTwo": "Паслядоўнаму зліццю патрэбна як мінімум два PDF, падключаныя да ўваходу",
|
||||
"cropMarginsExceed": "Палі абрэзкі перавышаюць памеры старонкі. Паменшыце значэнні.",
|
||||
"digitalSignNoCertificate": "У вузле лічбавага подпісу не загружаны сертыфікат",
|
||||
"encryptUserPasswordRequired": "Для шыфравання патрэбны карыстальніцкі пароль",
|
||||
"extractImagesNoneFound": "У падключаных PDF не знойдзена выяў",
|
||||
"invertColorsFailedReadImage": "Не атрымалася прачытаць даныя выявы",
|
||||
"overlayRequiresPdf": "Вузел накладання патрабуе ўвод PDF для накладання.",
|
||||
"pdfToCsvNoTables": "У PDF не знойдзена табліц",
|
||||
"pdfToXlsxNoTables": "У {{file}} не знойдзена табліц",
|
||||
"posterizeFailedTileCanvas": "Не атрымалася атрымаць кантэкст палатна пліткі",
|
||||
"redactNoText": "Рэдагаванне: не вызначаны тэкст для рэдагавання",
|
||||
"removeBlankPagesAllBlank": "Усе старонкі пустыя",
|
||||
"svgFailedToConvert": "Не атрымалася канвертаваць SVG",
|
||||
"svgFailedToLoad": "Не атрымалася загрузіць SVG",
|
||||
"timestampFailed": "Не атрымалася паставіць метку часу праз TSA {{tsa}}: {{message}}",
|
||||
"noOutputNodes": "Не знойдзена вузлоў вываду. Дадайце вузел Download, каб завяршыць ваш працоўны працэс.",
|
||||
"circularDependency": "У працоўным працэсе выяўлена кругавая залежнасць. Выдаліце ўсе цыклы паміж вузламі.",
|
||||
"encryptOrdering": "Вузел шыфравання падае даныя ў \"{{target}}\", што можа збой на зашыфраваных даных. Перамясціце шыфраванне непасрэдна перад вузлом вываду.",
|
||||
"invalidWorkflowFile": "Несапраўдны файл працоўнага працэсу: адсутнічае масіў вузлоў або злучэнняў.",
|
||||
"storageQuotaExceeded": "Не атрымалася захаваць працоўны працэс: перавышана квота сховішча. Паспрабуйце выдаліць старыя шаблоны.",
|
||||
"failedToImport": "Не атрымалася імпартаваць працоўны працэс: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Налады пашыраных функцый",
|
||||
"description": "Налаштуйте зовнішні модулі обробки для увімкнення розширених функцій PDF. Ці модулі необов'язкові і ліцензуються окремо.",
|
||||
"status": {
|
||||
"testing": "Перевірка...",
|
||||
"customOverride": "Користувацьке перевизначення",
|
||||
"preConfigured": "Попередньо налаштовано",
|
||||
"notConfigured": "Не налаштовано"
|
||||
},
|
||||
"preconfiguredTitle": "Попередньо налаштовано і готово до використання.",
|
||||
"preconfiguredDescription": "Розширені модулі обробки автоматично завантажуються з CDN. Ви можете перевизначити URL нижче, якщо потрібно використовувати власне джерело (наприклад, для air-gapped або самостійно розміщених розгортань).",
|
||||
"usingDefault": "Використовується за замовчуванням: {{url}}",
|
||||
"pymupdfSubtitle": "Рушій обробки документів",
|
||||
"pymupdfFeatures": "Вмикає: PDF у текст, Markdown, SVG, DOCX, Excel • Витягти зображення/таблиці • Конвертацію формату",
|
||||
"testButton": "Праверыць",
|
||||
"recommendedLabel": "Рекомендовано:",
|
||||
"copyTitle": "Копіювати в буфер обміну",
|
||||
"ghostscriptSubtitle": "Рушій конвертації PDF/A",
|
||||
"ghostscriptFeatures": "Вмикає: Конвертацію PDF/A-1b, PDF/A-2b, PDF/A-3b • Шрифт у контур",
|
||||
"cpdfSubtitle": "Рушій закладок і метаданих",
|
||||
"cpdfFeatures": "Вмикає: Розділити за закладками • Редагувати закладки • Метадані PDF",
|
||||
"saveConfiguration": "Захаваць канфігурацыю",
|
||||
"savingConfiguration": "Збереження конфігурації...",
|
||||
"savedTitle": "Захавана",
|
||||
"savedMessage": "Канфігурацыя паспяхова захавана!",
|
||||
"errorTitle": "Памылка",
|
||||
"failedSave": "Не вдалося зберегти конфігурацію: {{message}}",
|
||||
"emptyUrlTitle": "Порожній URL",
|
||||
"emptyUrlMessage": "Введіть URL для перевірки.",
|
||||
"testSuccessTitle": "Успіх",
|
||||
"connectionSuccess": "Підключення до {{package}} успішне!",
|
||||
"connectionFailedTitle": "Збій підключення",
|
||||
"connectionFailedMessage": "Не вдалося підключитися до URL.",
|
||||
"resetDefaults": "Скінуць да стандартных",
|
||||
"resetTitle": "Скід",
|
||||
"resetWithDefaults": "Користувацькі перевизначення очищено. Активні попередньо налаштовані значення за замовчуванням.",
|
||||
"resetNoDefaults": "Усі конфігурації та кешовані модулі очищено.",
|
||||
"licenseTitle": "Повідомлення про ліцензію:",
|
||||
"licenseDescription": "Зовнішні модулі (PyMuPDF, Ghostscript, CoherentPDF) ліцензовані під AGPL-3.0 або подібними copyleft-ліцензіями. Налаштовуючи та використовуючи ці модулі, ви погоджуєтеся з їхніми відповідними умовами ліцензії. BentoPDF сумісний з будь-якою реалізацією Ghostscript WASM і PyMuPDF WASM, що дотримується очікуваного інтерфейсу."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "Накладванне PDF",
|
||||
"subtitle": "Накладваць або падкладваць старонкі аднаго PDF на іншы.",
|
||||
"name": "Накладанне PDF",
|
||||
"subtitle": "Накласці або падкласці старонкі аднаго PDF на іншы.",
|
||||
"basePdfLabel": "Базавы PDF",
|
||||
"uploadBasePdf": "Загрузіць базавы PDF",
|
||||
"uploadBasePdf": "Запампаваць базавы PDF",
|
||||
"overlayPdfLabel": "PDF для накладання / падкладання",
|
||||
"uploadOverlayPdf": "Загрузіць PDF для накладання/падкладання",
|
||||
"uploadOverlayPdf": "Запампаваць PDF для накладання/падкладання",
|
||||
"modeLabel": "Рэжым",
|
||||
"overlayOption": "Накладанне (зверху старонак)",
|
||||
"underlayOption": "Падкладанне (за старонкамі)",
|
||||
"pageRangeLabel": "Прымяніць да старонак (неабавязкова)",
|
||||
"pageRangeHint": "Выкарыстоўвайце \"z\" для апошняй старонкі. Пакіньце пустым для прымянення да ўсіх старонак.",
|
||||
"repeatLabel": "Паўтараць старонкі накладання/падкладання, калі базавы даўжэй",
|
||||
"pageRangeHint": "Выкарыстоўвайце \"z\" для апошняй старонкі. Пакіньце пустым, каб прымяніць да ўсіх старонак.",
|
||||
"repeatLabel": "Паўтараць накладанне/падкладанне, калі базавы PDF даўжэйшы",
|
||||
"processButton": "Прымяніць накладанне / падкладанне",
|
||||
"howItWorksUploadTitle": "Загрузіце два PDF",
|
||||
"howItWorksUploadDescription": "Загрузіце базавы PDF і PDF, які хочаце накласці або падкласці.",
|
||||
"howItWorksModeTitle": "Абярыце рэжым",
|
||||
"howItWorksModeDescription": "Абярыце накладанне (зверху) або падкладанне (ззаду). Можна ўсталяваць дыяпазон старонак і паўтор.",
|
||||
"howItWorksDownloadTitle": "Спампаваць",
|
||||
"howItWorksUploadTitle": "Запампуйце два PDF",
|
||||
"howItWorksUploadDescription": "Запампуйце базавы PDF і PDF, які хочаце накласці або падкласці.",
|
||||
"howItWorksModeTitle": "Выберыце рэжым",
|
||||
"howItWorksModeDescription": "Выберыце накладанне (зверху) або падкладанне (ззаду). Можна задаць дыяпазон старонак і паўтор.",
|
||||
"howItWorksDownloadTitle": "Спампуйце",
|
||||
"howItWorksDownloadDescription": "Спампуйце PDF з прымененым накладаннем або падкладаннем.",
|
||||
"faqDifferenceQuestion": "У чым розніца паміж накладаннем і падкладаннем?",
|
||||
"faqDifferenceAnswer": "Накладанне размяшчае старонкі зверху базавага PDF (як вадзяны знак). Падкладанне размяшчае старонкі за базавым PDF (як фірмовы бланк або фон).",
|
||||
"faqSinglePageQuestion": "Ці магу я выкарыстоўваць аднастаронкавы PDF як накладанне для ўсіх старонак?",
|
||||
"faqSinglePageAnswer": "Так! Уключыце опцыю \"Паўтор\" і старонкі накладання будуць паўтарацца на ўсіх старонках базавага файла. Аднастаронкавы вадзяны знак будзе прымяняцца да кожнай старонкі.",
|
||||
"faqSinglePageAnswer": "Так! Уключыце опцыю \"Паўтараць\" і старонкі накладання будуць паўтарацца на ўсіх старонках базавага файла. Аднастаронкавы вадзяны знак будзе прымяняцца да кожнай старонкі.",
|
||||
"faqPrivacyQuestion": "Ці з'яўляюцца мае файлы прыватнымі і бяспечнымі?",
|
||||
"faqPrivacyAnswer": "Безумоўна! Уся апрацоўка адбываецца ў вашым браўзеры. Вашы файлы ніколі не пакідаюць вашу прыладу, забяспечваючы поўную прыватнасць."
|
||||
}
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "Kontakt",
|
||||
"licensing": "licensing",
|
||||
"allTools": "Alle værktøjer",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Åbn hovedmenu",
|
||||
"language": "Sprog"
|
||||
"language": "Sprog",
|
||||
"searchLanguage": "Søg sprog…",
|
||||
"noLanguagesFound": "Ingen sprog fundet"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Elsker du BentoPDF? Hjælp os med at holde det gratis og open source!",
|
||||
@@ -97,8 +100,11 @@
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Sådan fungerer det",
|
||||
"step1Title": "Upload fil",
|
||||
"step1": "Klik eller træk og slip din fil for at starte",
|
||||
"step2Title": "Behandl",
|
||||
"step2": "Klik på behandl-knappen for at starte",
|
||||
"step3Title": "Download",
|
||||
"step3": "Gem din behandlede fil med det samme"
|
||||
},
|
||||
"relatedTools": {
|
||||
@@ -129,6 +135,10 @@
|
||||
"resetToDefaults": "Nulstil til standard",
|
||||
"fullWidthMode": "Fuld bredde-tilstand",
|
||||
"fullWidthDescription": "Brug hele skærmbredden til alle værktøjer i stedet for en centreret container",
|
||||
"compactMode": "Kompakt tilstand",
|
||||
"compactModeDescription": "Vis værktøjer som kompakt liste i stedet for kort",
|
||||
"advancedSettings": "Avancerede indstillinger",
|
||||
"advancedSettingsDescription": "Konfigurer eksterne behandlingsmoduler (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Indstillinger gemmes automatisk",
|
||||
"clickToSet": "Klik for at vælge",
|
||||
"pressKeys": "Tryk på taster...",
|
||||
@@ -206,7 +216,7 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Bruger I cookies eller analyseværktøjer?",
|
||||
"answer": "Vi bruger kun Simple Analytics til anonyme besøgsdata. Ingen personlige oplysninger indsamles."
|
||||
"answer": "Nej. BentoPDF sporer dig slet ikke. Vi bruger hverken cookies, analyseværktøjer eller sporingsscripts – heller ikke på den live hjemmeside bentopdf.com. Vi ved aldrig, hvem du er, eller hvad du bruger værktøjerne til."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
@@ -260,11 +270,14 @@
|
||||
"add": "Tilføj",
|
||||
"remove": "Fjern",
|
||||
"loading": "Indlæser...",
|
||||
"loadingPageCount": "Indlæser sider...",
|
||||
"error": "Fejl",
|
||||
"success": "Succes",
|
||||
"file": "Fil",
|
||||
"files": "Filer",
|
||||
"close": "Luk"
|
||||
"close": "Luk",
|
||||
"convert": "Konvertér",
|
||||
"unknownError": "Ukendt fejl"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -337,9 +350,12 @@
|
||||
"download": "Download:",
|
||||
"downloadSelected": "Download valgte",
|
||||
"exportPdf": "Eksportér PDF",
|
||||
"uploadPdfFiles": "Vælg PDF-filer",
|
||||
"dragAndDrop": "Træk og slip PDF-filer her, eller klik for at vælge",
|
||||
"uploadPdfFiles": "Vælg PDF- eller billedfiler",
|
||||
"dragAndDrop": "Træk og slip PDF- eller billedfiler her, eller klik for at vælge",
|
||||
"selectFiles": "Vælg filer",
|
||||
"dropToAdd": "Slip PDF- eller billedfiler for at tilføje",
|
||||
"convertingImages": "Konverterer billeder til PDF...",
|
||||
"failedToConvertImages": "Kunne ikke konvertere billeder til PDF.",
|
||||
"renderingPages": "Renderer sider...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplikér denne side",
|
||||
|
||||
+537
-25
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Konverter fra PDF",
|
||||
"organizeManage": "Organisér og administrér",
|
||||
"optimizeRepair": "Optimer og reparér",
|
||||
"securePdf": "Sikre PDF"
|
||||
"securePdf": "Sikre PDF",
|
||||
"input": "Input",
|
||||
"output": "Output"
|
||||
},
|
||||
"convertToPdf": "Konvertér til PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF Multi-værktøj",
|
||||
"subtitle": "Flet, opdel, organisér, slet, roter, tilføj tomme sider, udtræk og duplikér i én samlet grænseflade."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Flet PDF",
|
||||
"subtitle": "Kombinér flere PDF’er til én fil. Bevarer bogmærker."
|
||||
"subtitle": "Kombinér flere PDF’er til én fil. Bevarer bogmærker.",
|
||||
"retainPageLabels": "Behold de oprindelige sideetiketter fra hver fil",
|
||||
"retainPageLabelsHint": "Fra (standard): den sammenflettede PDF bruger naturlig sidenummerering 1–N. Til: hver fils oprindelige sideetiketter bevares (kan give dublerede etiketter)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Opdel PDF",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "PDF-editor",
|
||||
"subtitle": "Annotér, fremhæv, redigér, kommentér, tilføj former/billeder, søg og vis PDF’er."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "Redigér PDF-tekst",
|
||||
"subtitle": "Klik på et hvilket som helst afsnit, og redigér det direkte med live-ombrydning, skrifttyper og formatering.",
|
||||
"saved": "PDF blev gemt! ({{size}} KB)",
|
||||
"failedToLoad": "PDF-teksteditoren kunne ikke indlæses.",
|
||||
"howToUpload": "Upload PDF",
|
||||
"howToClick": "Klik på et afsnit",
|
||||
"howToRestyle": "Giv alt ny stil",
|
||||
"relatedPdfEditor": "Kommentér og markér PDF-filer",
|
||||
"relatedSignPdf": "Tegn, skriv eller upload en underskrift",
|
||||
"relatedWatermark": "Stempl tekst eller billeder",
|
||||
"relatedStamps": "Placer stempler på sider",
|
||||
"relatedCompress": "Reducer filstørrelsen",
|
||||
"relatedOrganizeName": "Organiser PDF",
|
||||
"relatedOrganize": "Omarranger og administrer sider",
|
||||
"open": "Åbn",
|
||||
"export": "Eksportér",
|
||||
"filterAll": "Alle",
|
||||
"filterText": "Tekst",
|
||||
"filterImages": "Billeder",
|
||||
"filterShapes": "Former",
|
||||
"addText": "Tilføj tekst",
|
||||
"langAuto": "Automatisk",
|
||||
"change": "Skift",
|
||||
"ignore": "Ignorér",
|
||||
"next": "Næste",
|
||||
"replace": "Erstat",
|
||||
"replaceAll": "Erstat alle",
|
||||
"emptyState": "Åbn en PDF for at redigere dens tekst, billeder og former.",
|
||||
"choosePdf": "Vælg en PDF…",
|
||||
"font": "Skrifttype",
|
||||
"systemFonts": "Systemskrifttyper",
|
||||
"color": "Farve",
|
||||
"alignment": "Justering",
|
||||
"style": "Stil",
|
||||
"lists": "Lister",
|
||||
"outline": "Kontur",
|
||||
"spacing": "Afstand",
|
||||
"direction": "Retning",
|
||||
"dirAuto": "Automatisk",
|
||||
"pathStroke": "Stikontur",
|
||||
"tipBackToUpload": "Tilbage til upload",
|
||||
"tipOpenAnotherPdf": "Åbn en anden PDF",
|
||||
"tipExportS": "Eksportér (⌘S)",
|
||||
"tipUndoZ": "Fortryd (⌘Z)",
|
||||
"tipRedoZ": "Gentag (⇧⌘Z)",
|
||||
"tipFileDetails": "Filoplysninger",
|
||||
"tipEditExistingContent": "Rediger eksisterende indhold",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "Hvad Rediger-værktøjet berører — begræns omfanget på travle sider",
|
||||
"tipClickThePageToAddATextBox": "Klik på siden for at tilføje et tekstfelt",
|
||||
"tipSpellCheckLanguage": "Sprog for stavekontrol",
|
||||
"tipFindAndReplace": "Søg og erstat",
|
||||
"tipAddAnImage": "Tilføj et billede",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Kopiér sidens tekst i læserækkefølge",
|
||||
"tipCheckTheSpellingOfThisPage": "Kontrollér stavningen på denne side",
|
||||
"tipShowOrHideTheFormatPanel": "Vis eller skjul formatpanelet",
|
||||
"phReplaceWith": "Erstat med",
|
||||
"tipAddToYourDictionary": "Føj til ordbogen",
|
||||
"tipClose": "Luk",
|
||||
"phFind": "Søg",
|
||||
"tipPreviousMatch": "Forrige match",
|
||||
"tipNextMatch": "Næste match",
|
||||
"tipRotateLeft90": "Rotér 90° mod venstre",
|
||||
"tipRotateRight90": "Rotér 90° mod højre",
|
||||
"tipFlipHorizontal": "Vend vandret",
|
||||
"tipFlipVertical": "Vend lodret",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Erstat dette billede, og behold placeringen",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Alternativ tekst til tilgængelighed (taggede PDF-filer)",
|
||||
"tipBringToFront": "Placer forrest",
|
||||
"tipSendToBack": "Placer bagerst",
|
||||
"tipDuplicate": "Dublér",
|
||||
"tipDelete": "Slet",
|
||||
"tipAlignLeftEdges": "Justér venstre kanter",
|
||||
"tipAlignHorizontalCenters": "Centrér vandret",
|
||||
"tipAlignRightEdges": "Justér højre kanter",
|
||||
"tipAlignTops": "Justér øverste kanter",
|
||||
"tipAlignVerticalCenters": "Centrér lodret",
|
||||
"tipAlignBottoms": "Justér nederste kanter",
|
||||
"tipDistributeHorizontally": "Fordel vandret",
|
||||
"tipDistributeVertically": "Fordel lodret",
|
||||
"tipFontSize": "Skriftstørrelse",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Vis skrifttyper installeret på denne enhed (Chromium)",
|
||||
"tipCustomTextColor": "Tilpasset tekstfarve",
|
||||
"tipAlignLeft": "Justér til venstre",
|
||||
"tipAlignCenter": "Centrér",
|
||||
"tipAlignRight": "Justér til højre",
|
||||
"tipJustify": "Lige margener",
|
||||
"tipBold": "Fed",
|
||||
"tipItalic": "Kursiv",
|
||||
"tipUnderline": "Understreget",
|
||||
"tipStrikethrough": "Gennemstreget",
|
||||
"tipSuperscript": "Hævet skrift",
|
||||
"tipSubscript": "Sænket skrift",
|
||||
"tipToggleBulletedItem": "Slå punktopstilling til/fra",
|
||||
"tipToggleNumberedItem": "Slå nummereret punkt til/fra",
|
||||
"tipNumberedListMarkerStyle": "Markeringstype for nummererede lister",
|
||||
"tipDecreaseListIndentTab": "Formindsk indrykning (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Forøg indrykning (Tab)",
|
||||
"tipTextOutlineColor": "Farve på tekstkontur",
|
||||
"tipOutlineWidth0None": "Konturbredde (0 = ingen)",
|
||||
"tipFromContent": "Fra indhold",
|
||||
"tipLeftToRight": "Venstre mod højre",
|
||||
"tipRightToLeft": "Højre mod venstre",
|
||||
"tipStrokeColor": "Stregfarve",
|
||||
"tipStrokeWidth": "Stregbredde",
|
||||
"tipZoomPresets": "Zoomforudindstillinger",
|
||||
"tipZoomOut": "Zoom ud",
|
||||
"tipZoomIn": "Zoom ind",
|
||||
"tipFitPage": "Tilpas side",
|
||||
"tipPreviousPage": "Forrige side",
|
||||
"tipTypeAPageNumberAndPressEnter": "Skriv et sidetal, og tryk på Enter",
|
||||
"tipNextPage": "Næste side",
|
||||
"tipDocumentProperties": "Dokumentegenskaber",
|
||||
"tipHideBar": "Skjul bjælke",
|
||||
"tipShowBar": "Vis bjælke"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG til PDF",
|
||||
"subtitle": "Opret en PDF fra JPG, JPEG og JPEG2000 (JP2/JPX) billeder."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplikér og organisér",
|
||||
"subtitle": "Duplikér, omorganisér og slet sider."
|
||||
"subtitle": "Duplikér, omorganisér og slet sider.",
|
||||
"saveChanges": "Gem ændringer"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Slet sider",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Redigér bogmærker",
|
||||
"subtitle": "Tilføj, redigér, importér, slet og udtræk PDF-bogmærker."
|
||||
"subtitle": "Tilføj, redigér, importér, slet og udtræk PDF-bogmærker.",
|
||||
"autoExtractExisting": "Auto-udtræk eksisterende bogmærker",
|
||||
"importSectionTitle": "Eller importér bogmærker",
|
||||
"csvFormat": "CSV-format: titel,side,niveau",
|
||||
"jsonFormat": "JSON-format",
|
||||
"uploadCsvAction": "Klik for at uploade CSV",
|
||||
"uploadJsonAction": "Klik for at uploade JSON",
|
||||
"orDragHere": "eller træk hertil"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Indholdsfortegnelse",
|
||||
"subtitle": "Generér en indholdsfortegnelse ud fra PDF-bogmærker."
|
||||
"subtitle": "Generér en indholdsfortegnelse ud fra PDF-bogmærker.",
|
||||
"titleLabel": "Indholdsfortegnelses-titel",
|
||||
"fontSize": "Skriftstørrelse",
|
||||
"fontFamily": "Skriftfamilie",
|
||||
"addBookmark": "Tilføj bogmærke for indholdsfortegnelses-side",
|
||||
"generateButton": "Generér indholdsfortegnelse",
|
||||
"selectPdfFirst": "Vælg venligst en PDF-fil først.",
|
||||
"statusReadingFileMainThread": "Læser fil (Hovedtråd)...",
|
||||
"statusGenerating": "Genererer indholdsfortegnelse...",
|
||||
"errorReadingFileWithMessage": "Fejl ved læsning af fil: {{message}}",
|
||||
"successGeneratedDownloadStarted": "Indholdsfortegnelse genereret! Download startet.",
|
||||
"workerErrorWithMessage": "Fejl: {{message}}",
|
||||
"workerErrorOccurred": "Worker-fejl opstod. Tjek konsollen for detaljer."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Sidetal",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Tilføj billedstempler til din PDF via annoteringsværktøjet.",
|
||||
"usernameLabel": "Stempelbrugernavn",
|
||||
"usernamePlaceholder": "Indtast dit navn (til stempler)",
|
||||
"usernameHint": "Dette navn vises på de stempler du opretter."
|
||||
"usernameHint": "Dette navn vises på de stempler du opretter.",
|
||||
"saveButton": "Gem stemplet PDF"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Fjern annotationer",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF-formularudfylder",
|
||||
"subtitle": "Udfyld formularer direkte i browseren. Understøtter også XFA-formularer."
|
||||
"subtitle": "Udfyld formularer direkte i browseren. Understøtter også XFA-formularer.",
|
||||
"uploadHint": "Upload en PDF med formularfelter. Udfyld dem direkte i fremviseren nedenfor, og klik derefter på knappen for at gemme og downloade den udfyldte formular. Understøtter også XFA-formularer.",
|
||||
"xfaNoteTitle": "Bemærkning om XFA-formularer:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) er et ældre format, der kun understøttes af visse PDF-fremvisere som BentoPDF og Firefox. Hvis du åbner en XFA-PDF i anden software og ser tomme sider eller ingen formularfelter, betyder det, at fremviseren ikke understøtter XFA. Brug Firefox eller BentoPDFs Form Filler for korrekt visning og udfyldning af XFA-formularer."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Opret PDF-formular",
|
||||
"subtitle": "Lav udfyldelige PDF-formularer med træk-og-slip tekstfelter."
|
||||
"subtitle": "Lav udfyldelige PDF-formularer med træk-og-slip tekstfelter.",
|
||||
"orSeparator": "ELLER",
|
||||
"createBlankPdf": "Opret tom PDF"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Fjern tomme sider",
|
||||
@@ -255,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Tekst til PDF",
|
||||
"subtitle": "Konverter en almindelig tekstfil til PDF."
|
||||
"subtitle": "Konverter en almindelig tekstfil til PDF.",
|
||||
"uploadFiles": "Upload filer",
|
||||
"typeText": "Skriv tekst",
|
||||
"acceptedFormats": "Tekstfiler (.txt)",
|
||||
"fontFamily": "Skriftfamilie",
|
||||
"fontSize": "Skriftstørrelse",
|
||||
"textColor": "Tekstfarve",
|
||||
"pageSize": "Sidestørrelse",
|
||||
"rtlAutoDetectNote": "RTL-sprog (arabisk, urdu, persisk osv.) registreres automatisk, og tekstretningen justeres.",
|
||||
"createButton": "Opret PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON til PDF",
|
||||
"subtitle": "Konverter JSON-filer til PDF."
|
||||
"subtitle": "Konverter JSON-filer til PDF.",
|
||||
"noteLabel": "Bemærk:",
|
||||
"noteText": "Kun JSON-filer oprettet af PDF-til-JSON-konverteringsværktøjet understøttes. Standard JSON-filer fra andre værktøjer vil ikke fungere.",
|
||||
"acceptedFormats": "Flere JSON-filer",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Vælg venligst mindst 1 JSON-fil",
|
||||
"selectedReady": "{{count}} fil(er) valgt. Klar til konvertering!",
|
||||
"readingFiles": "Læser filer (Hovedtråd)...",
|
||||
"converting": "Konverterer JSON-filer til PDF...",
|
||||
"readError": "Fejl ved læsning af filer: {{message}}",
|
||||
"creatingZip": "Opretter ZIP-fil...",
|
||||
"success": "JSON-filer konverteret til PDF! ZIP-download startet.",
|
||||
"zipError": "Fejl ved oprettelse af ZIP: {{message}}",
|
||||
"workerError": "Worker-fejl: {{message}}",
|
||||
"getStarted": "Vælg JSON-filer for at komme i gang"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF til JPG",
|
||||
"subtitle": "Konverter hver PDF-side til en JPG-billedfil."
|
||||
"subtitle": "Konverter hver PDF-side til en JPG-billedfil.",
|
||||
"imageQuality": "Billedkvalitet",
|
||||
"imageQualityExplanation": "Højere kvalitet = større filstørrelse",
|
||||
"alert": {
|
||||
"invalidFile": "Ugyldig fil",
|
||||
"invalidFileExplanation": "Upload venligst en PDF-fil.",
|
||||
"noFile": "Ingen fil",
|
||||
"noFileExplanation": "Upload venligst en PDF-fil først.",
|
||||
"conversionSuccess": "PDF konverteret til JPG!",
|
||||
"conversionError": "Kunne ikke konvertere PDF til JPG. Filen kan være beskadiget."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Konverterer til JPG..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF til PNG",
|
||||
"subtitle": "Konverter hver PDF-side til en PNG-billedfil."
|
||||
"subtitle": "Konverter hver PDF-side til en PNG-billedfil.",
|
||||
"imageScale": "Billedskala",
|
||||
"imageScaleExplanation": "Højere skala = bedre kvalitet men større fil",
|
||||
"alert": {
|
||||
"invalidFile": "Ugyldig fil",
|
||||
"invalidFileExplanation": "Upload venligst en PDF-fil.",
|
||||
"noFile": "Ingen fil",
|
||||
"noFileExplanation": "Upload venligst en PDF-fil først.",
|
||||
"conversionSuccess": "PDF konverteret til PNG!",
|
||||
"conversionError": "Kunne ikke konvertere PDF til PNG. Filen kan være beskadiget."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Konverterer til PNG..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF til WebP",
|
||||
"subtitle": "Konverter hver PDF-side til en WebP-billedfil."
|
||||
"subtitle": "Konverter hver PDF-side til en WebP-billedfil.",
|
||||
"imageQuality": "Billedkvalitet",
|
||||
"imageQualityExplanation": "Højere kvalitet = større filstørrelse",
|
||||
"alert": {
|
||||
"invalidFile": "Ugyldig fil",
|
||||
"invalidFileExplanation": "Upload venligst en PDF-fil.",
|
||||
"noFile": "Ingen fil",
|
||||
"noFileExplanation": "Upload venligst en PDF-fil først.",
|
||||
"conversionSuccess": "PDF konverteret til WebP!",
|
||||
"conversionError": "Kunne ikke konvertere PDF til WebP. Filen kan være beskadiget."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Konverterer til WebP..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF til BMP",
|
||||
"subtitle": "Konverter hver PDF-side til en BMP-billedfil."
|
||||
"subtitle": "Konverter hver PDF-side til en BMP-billedfil.",
|
||||
"alert": {
|
||||
"invalidFile": "Ugyldig fil",
|
||||
"invalidFileExplanation": "Upload venligst en PDF-fil.",
|
||||
"noFile": "Ingen fil",
|
||||
"noFileExplanation": "Upload venligst en PDF-fil først.",
|
||||
"conversionSuccess": "PDF konverteret til BMP!",
|
||||
"conversionError": "Kunne ikke konvertere PDF til BMP. Filen kan være beskadiget."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Konverterer til BMP..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF til TIFF",
|
||||
@@ -287,7 +508,15 @@
|
||||
"colorMode": "Farvetilstand",
|
||||
"multiPage": "Gem som flersidet TIFF (én fil)",
|
||||
"loadingVips": "Indlæser billedprocessor...",
|
||||
"converting": "Konverterer til TIFF..."
|
||||
"converting": "Konverterer til TIFF...",
|
||||
"alert": {
|
||||
"invalidFile": "Ugyldig fil",
|
||||
"invalidFileExplanation": "Upload venligst en PDF-fil.",
|
||||
"noFile": "Ingen fil",
|
||||
"noFileExplanation": "Upload venligst en PDF-fil først.",
|
||||
"conversionSuccess": "PDF konverteret til TIFF!",
|
||||
"conversionError": "Kunne ikke konvertere PDF til TIFF. Filen kan være beskadiget."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF til CBZ",
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF til JSON",
|
||||
"subtitle": "Konverter PDF-filer til JSON-format."
|
||||
"subtitle": "Konverter PDF-filer til JSON-format.",
|
||||
"convertButton": "Konvertér til JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Vælg venligst mindst 1 PDF-fil",
|
||||
"selectedReady": "{{count}} fil(er) valgt. Klar til konvertering!",
|
||||
"checkingEncrypted": "Tjekker for krypterede PDF'er...",
|
||||
"readingFiles": "Læser filer (Hovedtråd)...",
|
||||
"converting": "Konverterer PDF'er til JSON...",
|
||||
"readError": "Fejl ved læsning af filer: {{message}}",
|
||||
"creatingZip": "Opretter ZIP-fil...",
|
||||
"success": "PDF'er konverteret til JSON! ZIP-download startet.",
|
||||
"zipError": "Fejl ved oprettelse af ZIP: {{message}}",
|
||||
"workerError": "Worker-fejl: {{message}}",
|
||||
"getStarted": "Vælg PDF-filer for at komme i gang"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Gør PDF’en søgbar og kopierbar."
|
||||
"subtitle": "Gør PDF’en søgbar og kopierbar.",
|
||||
"languagesInDocument": "Sprog i dokumentet",
|
||||
"searchLanguagesPlaceholder": "Søg sprog...",
|
||||
"selectedLabel": "Valgt:",
|
||||
"none": "Ingen",
|
||||
"advancedSettingsSummary": "Avancerede indstillinger (anbefales for at forbedre nøjagtigheden)",
|
||||
"resolutionLabel": "Opløsning",
|
||||
"resolutionStandard": "Standard (192 DPI)",
|
||||
"resolutionHigh": "Høj (288 DPI)",
|
||||
"resolutionUltra": "Ultra (384 DPI)",
|
||||
"binarizeLabel": "Binariser billede (forbedrer kontrast for rene scanninger)",
|
||||
"embedFullFontsLabel": "Indlejr fulde skrifttyper (større fil, bedre kompatibilitet)",
|
||||
"whitelistPresetLabel": "Tegn-whitelist forudindstilling",
|
||||
"whitelistNone": "Ingen (alle tegn)",
|
||||
"whitelistAlphanumeric": "Alfanumerisk + Grundlæggende tegnsætning",
|
||||
"whitelistNumbersCurrency": "Tal + Valutasymboler",
|
||||
"whitelistLettersOnly": "Kun bogstaver (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Kun tal (0-9)",
|
||||
"whitelistInvoice": "Faktura/kvittering (tal, $, ., -, /)",
|
||||
"whitelistForms": "Formularer (alfanumerisk + almindelige symboler)",
|
||||
"whitelistCustom": "Brugerdefineret...",
|
||||
"whitelistHelp": "Kun disse tegn vil blive genkendt. Lad være tomt for alle tegn.",
|
||||
"whitelistInputLabel": "Tegn-whitelist (valgfrit)",
|
||||
"whitelistInputPlaceholder": "f.eks. abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "Start OCR",
|
||||
"progressInitializing": "Initialiserer...",
|
||||
"resultsTitle": "OCR fuldført",
|
||||
"resultsDescription": "Din søgbare PDF er klar. Du kan også kopiere eller downloade den udtrukne tekst nedenfor.",
|
||||
"copyToClipboard": "Kopiér til udklipsholder",
|
||||
"downloadTxt": "Download som .txt",
|
||||
"downloadSearchablePdf": "Download søgbar PDF",
|
||||
"statusPrefix": "Status: {{status}}",
|
||||
"availabilityInvalidConfig": "Denne deployment udstiller ingen gyldige OCR-sprog. Genopbyg den med VITE_TESSERACT_AVAILABLE_LANGUAGES sat til gyldige Tesseract-koder.",
|
||||
"availabilityBundles": "Denne deployment indeholder OCR for: {{languages}}.",
|
||||
"noLanguagesAvailable": "Ingen OCR-sprog er tilgængelige i denne deployment.",
|
||||
"noLanguagesTitle": "Ingen sprog valgt",
|
||||
"noLanguagesMessage": "Vælg venligst mindst ét sprog til OCR.",
|
||||
"noFileTitle": "Ingen fil",
|
||||
"noFileMessage": "Upload først en PDF-fil.",
|
||||
"languageUnavailableTitle": "OCR-sprog ikke tilgængeligt",
|
||||
"ocrErrorTitle": "OCR-fejl",
|
||||
"ocrErrorMessage": "Der opstod en fejl under OCR-processen. Workeren kan have undladt at indlæse. Prøv igen.",
|
||||
"howItWorksTitle": "Sådan fungerer det:",
|
||||
"extractTextLabel": "Udtræk tekst:",
|
||||
"extractTextDescription": "Bruger Tesseract OCR til at genkende tekst fra scannede billeder eller PDF'er.",
|
||||
"searchableOutputLabel": "Søgbart output:",
|
||||
"searchableOutputDescription": "Opretter en ny PDF med et usynligt tekstlag, så dit dokument bliver fuldt søgbart, mens det oprindelige udseende bevares.",
|
||||
"characterFilteringLabel": "Tegnfiltrering:",
|
||||
"characterFilteringDescription": "Brug whitelister til at filtrere uønskede tegn fra og forbedre nøjagtigheden for specifikke dokumenttyper (fakturaer, formularer osv.).",
|
||||
"multiLanguageSupportLabel": "Flersproget support:",
|
||||
"multiLanguageSupportDescription": "Vælg flere sprog for dokumenter med blandet sprogindhold."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Alternér og miks sider",
|
||||
"subtitle": "Flet PDF’er ved at skifte mellem sider fra hver fil. Bevarer bogmærker."
|
||||
"subtitle": "Flet PDF’er ved at skifte mellem sider fra hver fil. Bevarer bogmærker.",
|
||||
"retainPageLabels": "Behold de oprindelige sideetiketter fra hver fil",
|
||||
"retainPageLabelsHint": "Fra (standard): den sammenflettede PDF bruger naturlig sidenummerering 1–N. Til: hver fils oprindelige sideetiketter bevares (kan give dublerede etiketter)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Sortér dupleks-scanning",
|
||||
"subtitle": "Omarrangér en PDF, der er scannet i to blokke (først alle forsider, derefter alle bagsider), til den rigtige for-/bagsiderækkefølge.",
|
||||
"totalPagesLabel": "Sider i alt:",
|
||||
"splitAfterPageLabel": "Opdel efter side",
|
||||
"splitAfterPagePlaceholder": "f.eks. 50",
|
||||
"backBlockOrderLabel": "Rækkefølge for bagsideblok",
|
||||
"backBlockReverseOption": "Vend bagsideblokken om (almindeligt ved vendt stak)",
|
||||
"backBlockKeepOption": "Behold bagsideblokken, som den er",
|
||||
"autoSplitButton": "Find opdeling automatisk (halvdelen)",
|
||||
"exportGroupedLabel": "Eksportér grupperede filer efter det oprindelige dokuments længde",
|
||||
"pagesPerDocumentLabel": "Sider pr. oprindeligt dokument",
|
||||
"groupedHelp": "Når det er slået til, er resultatet en ZIP-fil med én PDF pr. grupperet dokument.",
|
||||
"collateButton": "Sortér PDF",
|
||||
"invalidFileTitle": "Ugyldig fil",
|
||||
"invalidFileMessage": "Vælg en PDF-fil.",
|
||||
"loadingPdf": "Indlæser PDF...",
|
||||
"loadErrorMessage": "PDF-filen kunne ikke indlæses.",
|
||||
"fileMeta": "{{size}} - {{count}} sider",
|
||||
"oddPageWarning": "Ulige sidetal ({{count}}). En dupleks-scanning bør have et lige antal sider; der mangler måske en side, eller der er en for meget.",
|
||||
"previewSummary": "Forsideblok: {{frontCount}} side(r), bagsideblok: {{backCount}} side(r). Resultat: {{outputCount}} side(r) i for-/bagsiderækkefølge.",
|
||||
"previewMismatchWarning": "For- og bagsideblokkene har forskellig længde ({{frontCount}} forsider mod {{backCount}} bagsider). De {{extraCount}} overskydende side(r) i den længste blok tilføjes uden makker til sidst.",
|
||||
"missingFileTitle": "Manglende fil",
|
||||
"missingFileMessage": "Upload en PDF med mindst 2 sider, før du behandler den.",
|
||||
"invalidSplitTitle": "Ugyldigt opdelingspunkt",
|
||||
"invalidSplitMessage": "Opdelingspunktet skal ligge mellem side 1 og side {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "Ulige blokke",
|
||||
"unevenConfirmMessage": "Forsideblokken har {{frontCount}} side(r), og bagsideblokken har {{backCount}} side(r).\nDet betyder som regel, at en side er scannet to gange eller mangler.\n\nDe {{extraCount}} side(r) uden makker tilføjes til sidst.\n\nVil du fortsætte alligevel?",
|
||||
"invalidGroupTitle": "Ugyldig gruppestørrelse",
|
||||
"invalidGroupMessage": "Angiv et gyldigt antal sider pr. oprindeligt dokument.",
|
||||
"collatingLoader": "Sorterer dupleks-scanning...",
|
||||
"successMessage": "Den sorterede PDF blev oprettet.",
|
||||
"successGroupedMessage": "Sortering fuldført. Der blev oprettet {{fileCount}} grupperede filer.",
|
||||
"processErrorMessage": "PDF'en kunne ikke sorteres.",
|
||||
"howItWorksStep1Title": "Upload scanningen",
|
||||
"howItWorksStep1": "Slip den ene PDF, der indeholder alle forsider efterfulgt af alle bagsider.",
|
||||
"howItWorksStep2Title": "Angiv opdelingspunktet",
|
||||
"howItWorksStep2": "Markér, hvor forsideblokken slutter, og vælg, om bagsideblokken skal vendes om.",
|
||||
"howItWorksStep3Title": "Sortér og download",
|
||||
"howItWorksStep3": "Du får én PDF med sammenflettede sider eller en ZIP-fil med en separat fil pr. oprindeligt dokument.",
|
||||
"faqOddPagesQuestion": "Hvad hvis min scanning har et ulige antal sider?",
|
||||
"faqOddPagesAnswer": "En dupleks-scanning bør have et lige antal sider. Hvis den ikke har det, er en side sandsynligvis scannet to gange eller sprunget over. Værktøjet advarer dig før behandlingen, og sider uden makker tilføjes til sidst, så intet går tabt.",
|
||||
"faqBackOrderQuestion": "Hvorfor skulle jeg beholde bagsideblokken, som den er?",
|
||||
"faqBackOrderAnswer": "Det afhænger af, hvordan stakken blev lagt i ved anden kørsel. Hvis hele stakken vendes, kommer bagsiderne i omvendt rækkefølge, hvilket er standardindstillingen. Hvis din scanner leverede dem i samme rækkefølge som forsiderne, så vælg at beholde blokken, som den er."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Tilføj vedhæftninger",
|
||||
@@ -660,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF til tekst",
|
||||
"subtitle": "Udtræk tekst fra PDF og gem som almindelig tekst (.txt). Understøtter flere filer.",
|
||||
"note": "Dette værktøj virker KUN med digitalt oprettede PDF’er. Brug OCR PDF til scannede dokumenter.",
|
||||
"convertButton": "Udtræk tekst"
|
||||
"noteLabel": "Bemærk:",
|
||||
"noteText": "Dette værktøj fungerer KUN med digitalt oprettede PDF'er. Brug i stedet vores OCR PDF-værktøj til scannede dokumenter eller billedbaserede PDF'er.",
|
||||
"convertButton": "Udtræk tekst",
|
||||
"note": "Dette værktøj virker KUN med digitalt oprettede PDF’er. Brug OCR PDF til scannede dokumenter."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Digital signatur PDF",
|
||||
"pageTitle": "Digital signatur PDF - Tilføj kryptografisk signatur | BentoPDF",
|
||||
"subtitle": "Tilføj en digital signatur til din PDF med X.509-certifikater. Understøtter PKCS#12 (.pfx, .p12) og PEM. Din private nøgle forlader aldrig browseren.",
|
||||
"certificateSection": "Certifikat",
|
||||
"uploadCert": "Upload certifikat (.pfx, .p12)",
|
||||
"uploadCert": "Upload certifikat (.pfx, .p12, .pem)",
|
||||
"certPassword": "Certifikatkodeord",
|
||||
"privateKeyPassword": "Adgangskode til privat nøgle",
|
||||
"certPasswordPlaceholder": "Indtast kodeord til certifikat",
|
||||
"certInfo": "Certifikatinformation",
|
||||
"certSubject": "Emne",
|
||||
@@ -682,8 +1025,71 @@
|
||||
"locationPlaceholder": "Fx: København, Danmark",
|
||||
"contactInfo": "Kontaktinfo",
|
||||
"contactPlaceholder": "Fx: [email protected]",
|
||||
"visibleSignature": "Synlig signatur",
|
||||
"visibleSignatureDescription": "Når aktiveret, vises et synligt signaturfelt på PDF'en. Du kan uploade et billede/logo eller tilføje tekst. Hvis ingen af delene angives, vises underskriverens navn fra certifikatet automatisk.",
|
||||
"signatureImage": "Signatur billede/logo (valgfrit)",
|
||||
"uploadSignatureImage": "Upload billede (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Signatur forhåndsvisning",
|
||||
"remove": "Fjern",
|
||||
"page": "Side",
|
||||
"firstPage": "Første side",
|
||||
"lastPage": "Sidste side",
|
||||
"allPages": "Alle sider",
|
||||
"customPage": "Brugerdefineret side #",
|
||||
"pageNumber": "Side #",
|
||||
"xPosition": "X-position (venstre)",
|
||||
"yPosition": "Y-position (top)",
|
||||
"width": "Bredde",
|
||||
"height": "Højde",
|
||||
"addTextOverlay": "Tilføj tekstoverlejring",
|
||||
"text": "Tekst",
|
||||
"textPlaceholder": "f.eks. Digitalt signeret af John Doe",
|
||||
"textColor": "Tekstfarve",
|
||||
"fontSize": "Skriftstørrelse",
|
||||
"invalidImageTitle": "Ugyldigt billede",
|
||||
"invalidImageMessage": "Vælg venligst et PNG-, JPG- eller WebP-billede.",
|
||||
"invalidFileTitle": "Ugyldig fil",
|
||||
"invalidFileMessage": "Vælg venligst en PDF-fil.",
|
||||
"invalidCertificateTitle": "Ugyldigt certifikat",
|
||||
"invalidCertificateMessage": "Vælg venligst en .pfx-, .p12- eller .pem-certifikatfil.",
|
||||
"certificateLoaded": "Certifikat indlæst",
|
||||
"certificateUnlocked": "Certifikat låst op",
|
||||
"failedParsePem": "Kunne ikke parse PEM-fil",
|
||||
"enterPasswordToUnlock": "Indtast adgangskode for at låse op",
|
||||
"invalidPasswordOrCertificate": "Ugyldig adgangskode eller certifikat",
|
||||
"incorrectPassword": "Forkert adgangskode",
|
||||
"failedParseCertificate": "Kunne ikke parse certifikat",
|
||||
"missingDataTitle": "Manglende data",
|
||||
"missingDataMessage": "Upload både en PDF og et gyldigt certifikat.",
|
||||
"applyingSignature": "Anvender digital signatur...",
|
||||
"signingFailedTitle": "Signering mislykkedes",
|
||||
"chainFetchFailed": "Kunne ikke hente certifikatkæden. Dette kan skyldes netværksproblemer eller at certifikatproxyen er utilgængelig. Tjek din internetforbindelse og prøv igen. Hvis problemet fortsætter, kontakt support.",
|
||||
"failedToSignPdf": "Kunne ikke signere PDF: {{message}}",
|
||||
"defaultSignatureText": "Digitalt signeret af {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} sider",
|
||||
"howToStep1Title": "Upload PDF",
|
||||
"howToStep1Text": "Vælg det PDF-dokument, du vil signere",
|
||||
"howToStep2Title": "Upload certifikat",
|
||||
"howToStep2Text": "Angiv din .pfx- eller .p12-certifikatfil og adgangskode",
|
||||
"howToStep3Title": "Signér og download",
|
||||
"howToStep3Text": "Anvend den digitale signatur og download din signerede PDF",
|
||||
"relatedEncryptDesc": "Beskyt din PDF med adgangskode",
|
||||
"relatedDecryptDesc": "Fjern PDF-adgangskode",
|
||||
"relatedFlattenDesc": "Gør anmærkninger permanente",
|
||||
"relatedSanitizeDesc": "Fjern skjulte data",
|
||||
"relatedPermissionsDesc": "Indstil PDF-tilladelser",
|
||||
"faqWhatIsQuestion": "Hvad er en digital signatur?",
|
||||
"faqWhatIsAnswer": "En digital signatur er en kryptografisk mekanisme, der verificerer ægtheden og integriteten af et dokument. I modsætning til en tegnet signatur bruger den offentlig-nøgle-kryptografi (X.509-certifikater) til at bevise underskriverens identitet.",
|
||||
"faqFormatsQuestion": "Hvilke certifikatformater understøttes?",
|
||||
"faqFormatsAnswer": "Vi understøtter PKCS#12-format certifikater (.pfx, .p12), som indeholder både dit certifikat og din private nøgle i en enkelt krypteret fil. Disse udstedes typisk af certifikatudstedere.",
|
||||
"faqPrivateKeyQuestion": "Er min private nøgle sikker?",
|
||||
"faqPrivateKeyAnswer": "Ja! Al behandling sker udelukkende i din browser. Dit certifikat, private nøgle og PDF-filer forlader aldrig din enhed eller uploades til nogen server.",
|
||||
"faqValidReadersQuestion": "Vil signaturen være gyldig i PDF-læsere?",
|
||||
"faqValidReadersAnswer": "Ja, værktøjet opretter standard PKCS#7 detached signaturer, der genkendes af alle større PDF-læsere. Brug et certifikat fra en betroet certifikatudsteder for fuld validering.",
|
||||
"applySignature": "Anvend digital signatur",
|
||||
"successMessage": "PDF signeret! Signaturen kan verificeres i enhver PDF-læser."
|
||||
"successMessage": "PDF signeret! Signaturen kan verificeres i enhver PDF-læser.",
|
||||
"internetRequiredTitle": "Internetforbindelse påkrævet",
|
||||
"internetRequiredDescription": "Signering kan kræve at hente certifikatkædeoplysninger fra din certifikatudsteders server for at validere signaturen."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validér PDF-signatur",
|
||||
@@ -697,7 +1103,7 @@
|
||||
"tsaSectionTitle": "Tidsstempelserver (TSA)",
|
||||
"selectTsa": "Vælg en TSA-server",
|
||||
"applyTimestamp": "Anvend tidsstempel",
|
||||
"successMessage": "PDF tidsstemplet med succes! Tidsstemplet kan verificeres i Adobe Acrobat og andre PDF-læsere."
|
||||
"successMessage": "PDF tidsstemplet med succes! Tidsstemplet kan verificeres i enhver PDF-læser."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email til PDF",
|
||||
@@ -772,7 +1178,113 @@
|
||||
"templateLoaded": "Skabelon \"{{name}}\" indlæst.",
|
||||
"failedLoadTemplate": "Kunne ikke indlæse skabelon.",
|
||||
"noSettings": "Ingen konfigurerbare indstillinger for denne node.",
|
||||
"advancedSettings": "Avancerede indstillinger"
|
||||
"advancedSettings": "Avancerede indstillinger",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "PDF-input",
|
||||
"description": "Upload en eller flere PDF-filer"
|
||||
},
|
||||
"download": {
|
||||
"name": "Download",
|
||||
"description": "Download automatisk som PDF eller ZIP"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "Ingen PDFer forbundet til {{node}}-noden",
|
||||
"noPdfInputs": "Ingen PDFer i input",
|
||||
"expectedPdfInput": "Forventede PDF-input",
|
||||
"failedToRenderPage": "Kunne ikke rendere side {{page}}",
|
||||
"failedToGetCanvasContext": "Kunne ikke hente canvas-kontekst for side {{page}}",
|
||||
"failedToRenderPageToImage": "Kunne ikke rendere side {{page}} til billede",
|
||||
"noPagesProcessed": "Ingen sider blev behandlet",
|
||||
"cpdfNotConfigured": "CoherentPDF er ikke konfigureret. Konfigurer det under Avancerede indstillinger.",
|
||||
"workerError": "Worker-fejl: {{message}}",
|
||||
"alternateMergeWorkerError": "Fejl i alternerende sammenflettnings-worker: {{message}}",
|
||||
"noPdfFilesUploaded": "Ingen PDF-filer uploadet i PDF Input-noden",
|
||||
"failedToLoadFile": "Kunne ikke indlæse \"{{file}}\" — filen kan være beskadiget",
|
||||
"noImagesUploaded": "Ingen billeder uploadet i Image Input-noden",
|
||||
"noWordDocsUploaded": "Ingen dokumenter uploadet i Word Input-noden",
|
||||
"noExcelUploaded": "Ingen regneark uploadet i Excel Input-noden",
|
||||
"noPowerPointUploaded": "Ingen præsentationer uploadet i PowerPoint Input-noden",
|
||||
"noCbzUploaded": "Ingen tegneseriearkiver uploadet i CBZ Input-noden",
|
||||
"noEmailUploaded": "Ingen e-mail-filer uploadet i Email Input-noden",
|
||||
"noEpubUploaded": "Ingen EPUB-filer uploadet i EPUB Input-noden",
|
||||
"noFb2Uploaded": "Ingen FB2-filer uploadet i FB2 Input-noden",
|
||||
"noJsonUploaded": "Ingen JSON-filer uploadet i JSON Input-noden",
|
||||
"noMarkdownUploaded": "Ingen Markdown-filer uploadet i Markdown Input-noden",
|
||||
"noMobiUploaded": "Ingen MOBI-filer uploadet i MOBI Input-noden",
|
||||
"noOdgUploaded": "Ingen ODG-filer uploadet i ODG Input-noden",
|
||||
"noPagesUploaded": "Ingen Pages-filer uploadet i Pages Input-noden",
|
||||
"noPubUploaded": "Ingen PUB-filer uploadet i PUB Input-noden",
|
||||
"noSvgUploaded": "Ingen SVG-filer uploadet i SVG Input-noden",
|
||||
"noTextUploaded": "Ingen tekstfiler uploadet i Text Input-noden",
|
||||
"noVsdUploaded": "Ingen Visio-filer uploadet i VSD Input-noden",
|
||||
"noWpdUploaded": "Ingen WPD-filer uploadet i WPD Input-noden",
|
||||
"noWpsUploaded": "Ingen WPS-filer uploadet i WPS Input-noden",
|
||||
"noXmlUploaded": "Ingen XML-filer uploadet i XML Input-noden",
|
||||
"noXpsUploaded": "Ingen XPS-filer uploadet i XPS Input-noden",
|
||||
"alternateMergeNeedsTwo": "Alternerende sammenflettning kræver mindst to PDFer forbundet til input",
|
||||
"cropMarginsExceed": "Beskæringsmargener overstiger sidens dimensioner. Reducer værdierne.",
|
||||
"digitalSignNoCertificate": "Intet certifikat indlæst i Digital signatur-noden",
|
||||
"encryptUserPasswordRequired": "Brugeradgangskode er påkrævet for kryptering",
|
||||
"extractImagesNoneFound": "Ingen billeder fundet i de tilsluttede PDFer",
|
||||
"invertColorsFailedReadImage": "Kunne ikke læse billeddata",
|
||||
"overlayRequiresPdf": "Overlay-noden kræver et overlay-PDF-input.",
|
||||
"pdfToCsvNoTables": "Ingen tabeller fundet i PDFen",
|
||||
"pdfToXlsxNoTables": "Ingen tabeller fundet i {{file}}",
|
||||
"posterizeFailedTileCanvas": "Kunne ikke hente flise-canvas-konteksten",
|
||||
"redactNoText": "Censurering: Ingen tekst angivet til censurering",
|
||||
"removeBlankPagesAllBlank": "Alle sider er blanke",
|
||||
"svgFailedToConvert": "Kunne ikke konvertere SVG",
|
||||
"svgFailedToLoad": "Kunne ikke indlæse SVG",
|
||||
"timestampFailed": "Tidsstempel via TSA {{tsa}} mislykkedes: {{message}}",
|
||||
"noOutputNodes": "Ingen output-noder fundet. Tilføj en Download-node for at fuldføre dit workflow.",
|
||||
"circularDependency": "Cirkulær afhængighed registreret i workflowet. Fjern eventuelle løkker mellem noder.",
|
||||
"encryptOrdering": "Krypter-noden fører til \"{{target}}\", som kan fejle på krypterede data. Flyt Krypter til lige før output-noden.",
|
||||
"invalidWorkflowFile": "Ugyldig workflow-fil: manglende noder- eller forbindelses-array.",
|
||||
"storageQuotaExceeded": "Kunne ikke gemme workflow: lagerkvote overskredet. Prøv at slette gamle skabeloner.",
|
||||
"failedToImport": "Kunne ikke importere workflow: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Avancerede funktionsindstillinger",
|
||||
"description": "Konfigurer eksterne behandlingsmoduler for at aktivere avancerede PDF-funktioner. Disse moduler er valgfrie og licenseret separat.",
|
||||
"status": {
|
||||
"testing": "Tester...",
|
||||
"customOverride": "Brugerdefineret tilsidesættelse",
|
||||
"preConfigured": "Forudkonfigureret",
|
||||
"notConfigured": "Ikke konfigureret"
|
||||
},
|
||||
"preconfiguredTitle": "Forudkonfigureret og klar til brug.",
|
||||
"preconfiguredDescription": "Avancerede behandlingsmoduler indlæses automatisk fra CDN. Du kan tilsidesætte URL'erne nedenfor, hvis du har brug for at bruge en brugerdefineret kilde (f.eks. til air-gapped eller selv-hostede deployments).",
|
||||
"usingDefault": "Bruger standard: {{url}}",
|
||||
"pymupdfSubtitle": "Dokumentbehandlingsmotor",
|
||||
"pymupdfFeatures": "Aktiverer: PDF til tekst, Markdown, SVG, DOCX, Excel • Udtræk billeder/tabeller • Formatkonvertering",
|
||||
"testButton": "Test",
|
||||
"recommendedLabel": "Anbefalet:",
|
||||
"copyTitle": "Kopiér til udklipsholder",
|
||||
"ghostscriptSubtitle": "PDF/A-konverteringsmotor",
|
||||
"ghostscriptFeatures": "Aktiverer: PDF/A-1b, PDF/A-2b, PDF/A-3b konvertering • Skrifttype til kontur",
|
||||
"cpdfSubtitle": "Bogmærke- og metadatamotor",
|
||||
"cpdfFeatures": "Aktiverer: Opdel efter bogmærker • Rediger bogmærker • PDF-metadata",
|
||||
"saveConfiguration": "Gem konfiguration",
|
||||
"savingConfiguration": "Gemmer konfiguration...",
|
||||
"savedTitle": "Gemt",
|
||||
"savedMessage": "Konfiguration gemt!",
|
||||
"errorTitle": "Fejl",
|
||||
"failedSave": "Kunne ikke gemme konfiguration: {{message}}",
|
||||
"emptyUrlTitle": "Tom URL",
|
||||
"emptyUrlMessage": "Indtast venligst en URL at teste.",
|
||||
"testSuccessTitle": "Succes",
|
||||
"connectionSuccess": "Forbindelse til {{package}} lykkedes!",
|
||||
"connectionFailedTitle": "Forbindelse mislykkedes",
|
||||
"connectionFailedMessage": "Kunne ikke forbinde til URL.",
|
||||
"resetDefaults": "Nulstil til standard",
|
||||
"resetTitle": "Nulstil",
|
||||
"resetWithDefaults": "Brugerdefinerede tilsidesættelser ryddet. Forudkonfigurerede standarder er aktive.",
|
||||
"resetNoDefaults": "Alle konfigurationer og cachede moduler er blevet ryddet.",
|
||||
"licenseTitle": "Licensbemærkning:",
|
||||
"licenseDescription": "De eksterne moduler (PyMuPDF, Ghostscript, CoherentPDF) er licenseret under AGPL-3.0 eller lignende copyleft-licenser. Ved at konfigurere og bruge disse moduler accepterer du deres respektive licensvilkår. BentoPDF er kompatibel med enhver Ghostscript WASM- og PyMuPDF WASM-implementering, der følger den forventede grænseflade."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "PDF-overlejring",
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "Kontakt",
|
||||
"licensing": "Lizenzierung",
|
||||
"allTools": "Alle Werkzeuge",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Hauptmenü öffnen",
|
||||
"language": "Sprache"
|
||||
"language": "Sprache",
|
||||
"searchLanguage": "Sprache suchen…",
|
||||
"noLanguagesFound": "Keine Sprachen gefunden"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Liebst du BentoPDF? Hilf uns, es kostenlos und Open Source zu halten!",
|
||||
@@ -95,6 +98,18 @@
|
||||
"webpImages": "WebP-Bilder"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "So funktioniert's",
|
||||
"step1Title": "Datei hochladen",
|
||||
"step1": "Klicken oder Datei hierher ziehen",
|
||||
"step2Title": "Verarbeiten",
|
||||
"step2": "Klicken Sie auf die Verarbeitungsschaltfläche",
|
||||
"step3Title": "Herunterladen",
|
||||
"step3": "Speichern Sie Ihre verarbeitete Datei sofort"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Verwandte PDF-Tools"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Verarbeite..."
|
||||
},
|
||||
@@ -120,6 +135,10 @@
|
||||
"resetToDefaults": "Auf Standard zurücksetzen",
|
||||
"fullWidthMode": "Volle Breite",
|
||||
"fullWidthDescription": "Verwende die volle Bildschirmbreite für alle Werkzeuge anstelle eines zentrierten Containers",
|
||||
"compactMode": "Kompaktmodus",
|
||||
"compactModeDescription": "Werkzeuge als kompakte Liste statt als Karten anzeigen",
|
||||
"advancedSettings": "Erweiterte Einstellungen",
|
||||
"advancedSettingsDescription": "Externe Verarbeitungsmodule konfigurieren (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Einstellungen werden automatisch gespeichert",
|
||||
"clickToSet": "Klicke zum Festlegen",
|
||||
"pressKeys": "Tasten drücken...",
|
||||
@@ -166,6 +185,7 @@
|
||||
"faq": {
|
||||
"title": "Häufig gestellte",
|
||||
"questions": "Fragen",
|
||||
"sectionTitle": "Häufig gestellte Fragen",
|
||||
"isFree": {
|
||||
"question": "Ist BentoPDF wirklich kostenlos?",
|
||||
"answer": "Ja, absolut. Alle Werkzeuge auf BentoPDF sind zu 100% kostenlos nutzbar, ohne Dateilimits, ohne Anmeldung und ohne Wasserzeichen. Wir glauben, dass jeder Zugang zu einfachen, leistungsstarken PDF-Werkzeugen verdient, ohne Bezahlschranke."
|
||||
@@ -196,7 +216,7 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Verwendet ihr Cookies oder Analysen, um mich zu verfolgen?",
|
||||
"answer": "Uns liegt deine Privatsphäre am Herzen. BentoPDF verfolgt keine persönlichen Informationen. Wir verwenden Simple Analytics ausschließlich, um anonyme Besucherzahlen zu sehen. Das bedeutet, wir können wissen, wie viele Benutzer unsere Seite besuchen, aber wir wissen nie, wer sie sind. Simple Analytics ist vollständig DSGVO-konform und respektiert deine Privatsphäre."
|
||||
"answer": "Nein. BentoPDF verfolgt Sie in keiner Weise. Wir verwenden keine Cookies, keine Analysetools und keine Tracking-Skripte – auch nicht auf der Live-Website bentopdf.com. Wir wissen nie, wer Sie sind oder was Sie mit den Tools tun."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
@@ -256,7 +276,8 @@
|
||||
"file": "Datei",
|
||||
"files": "Dateien",
|
||||
"close": "Schließen",
|
||||
"convert": "Konvertieren"
|
||||
"convert": "Konvertieren",
|
||||
"unknownError": "Unbekannter Fehler"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -329,9 +350,12 @@
|
||||
"download": "Download:",
|
||||
"downloadSelected": "Auswahl herunterladen",
|
||||
"exportPdf": "PDF exportieren",
|
||||
"uploadPdfFiles": "PDF-Dateien auswählen",
|
||||
"dragAndDrop": "PDF-Dateien hierhin ziehen oder klicken zum Auswählen",
|
||||
"uploadPdfFiles": "PDF- oder Bilddateien auswählen",
|
||||
"dragAndDrop": "PDF- oder Bilddateien hierhin ziehen oder klicken zum Auswählen",
|
||||
"selectFiles": "Dateien auswählen",
|
||||
"dropToAdd": "PDF- oder Bilddateien zum Hinzufügen ablegen",
|
||||
"convertingImages": "Bilder werden in PDF konvertiert...",
|
||||
"failedToConvertImages": "Bilder konnten nicht in PDF konvertiert werden.",
|
||||
"renderingPages": "Seiten werden gerendert...",
|
||||
"actions": {
|
||||
"duplicatePage": "Diese Seite duplizieren",
|
||||
@@ -350,15 +374,6 @@
|
||||
"error": "Fehler",
|
||||
"failedToLoad": "Laden fehlgeschlagen"
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "So funktioniert's",
|
||||
"step1": "Klicken oder Datei hierher ziehen",
|
||||
"step2": "Klicken Sie auf die Verarbeitungsschaltfläche",
|
||||
"step3": "Speichern Sie Ihre verarbeitete Datei sofort"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Verwandte PDF-Tools"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "PDF-Werkzeuge",
|
||||
"subtitle": "Wählen Sie ein Werkzeug aus, um zu beginnen"
|
||||
|
||||
+481
-20
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Aus PDF konvertieren",
|
||||
"organizeManage": "Organisieren & Verwalten",
|
||||
"optimizeRepair": "Optimieren & Reparieren",
|
||||
"securePdf": "PDF sichern"
|
||||
"securePdf": "PDF sichern",
|
||||
"input": "Eingabe",
|
||||
"output": "Ausgabe"
|
||||
},
|
||||
"convertToPdf": "In PDF konvertieren",
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF Multi-Werkzeug",
|
||||
"subtitle": "Zusammenführen, Teilen, Organisieren, Löschen, Drehen, Leere Seiten hinzufügen, Extrahieren und Duplizieren in einer einheitlichen Oberfläche."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "PDF zusammenführen",
|
||||
"subtitle": "Mehrere PDFs zu einer Datei kombinieren. Lesezeichen werden beibehalten."
|
||||
"subtitle": "Mehrere PDFs zu einer Datei kombinieren. Lesezeichen werden beibehalten.",
|
||||
"retainPageLabels": "Originale Seitenbeschriftungen jeder Datei beibehalten",
|
||||
"retainPageLabelsHint": "Aus (Standard): Das zusammengeführte PDF verwendet die natürliche Seitennummerierung 1–N. An: Die ursprünglichen Seitenbeschriftungen jeder Datei bleiben erhalten (kann zu doppelten Beschriftungen führen)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "PDF teilen",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "PDF-Editor",
|
||||
"subtitle": "Annotieren, hervorheben, schwärzen, kommentieren, Formen/Bilder hinzufügen, suchen und PDFs anzeigen."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "PDF-Text bearbeiten",
|
||||
"subtitle": "Auf einen beliebigen Absatz klicken und ihn direkt bearbeiten – mit Live-Umbruch, Schriftarten und Formatierung.",
|
||||
"saved": "PDF erfolgreich gespeichert! ({{size}} KB)",
|
||||
"failedToLoad": "Der PDF-Texteditor konnte nicht geladen werden.",
|
||||
"howToUpload": "PDF hochladen",
|
||||
"howToClick": "Absatz anklicken",
|
||||
"howToRestyle": "Alles umgestalten",
|
||||
"relatedPdfEditor": "PDFs kommentieren und markieren",
|
||||
"relatedSignPdf": "Unterschrift zeichnen, tippen oder hochladen",
|
||||
"relatedWatermark": "Text oder Bilder aufbringen",
|
||||
"relatedStamps": "Stempel auf Seiten platzieren",
|
||||
"relatedCompress": "Dateigröße verringern",
|
||||
"relatedOrganizeName": "PDF organisieren",
|
||||
"relatedOrganize": "Seiten neu anordnen und verwalten",
|
||||
"open": "Öffnen",
|
||||
"export": "Exportieren",
|
||||
"filterAll": "Alle",
|
||||
"filterText": "Text",
|
||||
"filterImages": "Bilder",
|
||||
"filterShapes": "Formen",
|
||||
"addText": "Text hinzufügen",
|
||||
"langAuto": "Automatisch",
|
||||
"change": "Ändern",
|
||||
"ignore": "Ignorieren",
|
||||
"next": "Weiter",
|
||||
"replace": "Ersetzen",
|
||||
"replaceAll": "Alle ersetzen",
|
||||
"emptyState": "Öffnen Sie eine PDF, um Text, Bilder und Formen zu bearbeiten.",
|
||||
"choosePdf": "PDF auswählen …",
|
||||
"font": "Schriftart",
|
||||
"systemFonts": "Systemschriften",
|
||||
"color": "Farbe",
|
||||
"alignment": "Ausrichtung",
|
||||
"style": "Stil",
|
||||
"lists": "Listen",
|
||||
"outline": "Kontur",
|
||||
"spacing": "Abstand",
|
||||
"direction": "Richtung",
|
||||
"dirAuto": "Automatisch",
|
||||
"pathStroke": "Pfadkontur",
|
||||
"tipBackToUpload": "Zurück zum Upload",
|
||||
"tipOpenAnotherPdf": "Weitere PDF öffnen",
|
||||
"tipExportS": "Exportieren (⌘S)",
|
||||
"tipUndoZ": "Rückgängig (⌘Z)",
|
||||
"tipRedoZ": "Wiederherstellen (⇧⌘Z)",
|
||||
"tipFileDetails": "Dateidetails",
|
||||
"tipEditExistingContent": "Vorhandene Inhalte bearbeiten",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "Was das Bearbeiten-Werkzeug erfasst – Umfang auf vollen Seiten eingrenzen",
|
||||
"tipClickThePageToAddATextBox": "Klicken Sie auf die Seite, um ein Textfeld hinzuzufügen",
|
||||
"tipSpellCheckLanguage": "Sprache der Rechtschreibprüfung",
|
||||
"tipFindAndReplace": "Suchen & ersetzen",
|
||||
"tipAddAnImage": "Bild hinzufügen",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Text dieser Seite in Lesereihenfolge kopieren",
|
||||
"tipCheckTheSpellingOfThisPage": "Rechtschreibung dieser Seite prüfen",
|
||||
"tipShowOrHideTheFormatPanel": "Formatbereich ein- oder ausblenden",
|
||||
"phReplaceWith": "Ersetzen durch",
|
||||
"tipAddToYourDictionary": "Zum Wörterbuch hinzufügen",
|
||||
"tipClose": "Schließen",
|
||||
"phFind": "Suchen",
|
||||
"tipPreviousMatch": "Vorheriger Treffer",
|
||||
"tipNextMatch": "Nächster Treffer",
|
||||
"tipRotateLeft90": "90° nach links drehen",
|
||||
"tipRotateRight90": "90° nach rechts drehen",
|
||||
"tipFlipHorizontal": "Horizontal spiegeln",
|
||||
"tipFlipVertical": "Vertikal spiegeln",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Dieses Bild ersetzen, Position beibehalten",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Alternativtext für Barrierefreiheit (getaggte PDFs)",
|
||||
"tipBringToFront": "In den Vordergrund",
|
||||
"tipSendToBack": "In den Hintergrund",
|
||||
"tipDuplicate": "Duplizieren",
|
||||
"tipDelete": "Löschen",
|
||||
"tipAlignLeftEdges": "Linke Kanten ausrichten",
|
||||
"tipAlignHorizontalCenters": "Horizontal zentrieren",
|
||||
"tipAlignRightEdges": "Rechte Kanten ausrichten",
|
||||
"tipAlignTops": "Oberkanten ausrichten",
|
||||
"tipAlignVerticalCenters": "Vertikal zentrieren",
|
||||
"tipAlignBottoms": "Unterkanten ausrichten",
|
||||
"tipDistributeHorizontally": "Horizontal verteilen",
|
||||
"tipDistributeVertically": "Vertikal verteilen",
|
||||
"tipFontSize": "Schriftgröße",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Auf diesem Gerät installierte Schriften auflisten (Chromium)",
|
||||
"tipCustomTextColor": "Benutzerdefinierte Textfarbe",
|
||||
"tipAlignLeft": "Linksbündig",
|
||||
"tipAlignCenter": "Zentriert",
|
||||
"tipAlignRight": "Rechtsbündig",
|
||||
"tipJustify": "Blocksatz",
|
||||
"tipBold": "Fett",
|
||||
"tipItalic": "Kursiv",
|
||||
"tipUnderline": "Unterstrichen",
|
||||
"tipStrikethrough": "Durchgestrichen",
|
||||
"tipSuperscript": "Hochgestellt",
|
||||
"tipSubscript": "Tiefgestellt",
|
||||
"tipToggleBulletedItem": "Aufzählungspunkt umschalten",
|
||||
"tipToggleNumberedItem": "Nummerierten Punkt umschalten",
|
||||
"tipNumberedListMarkerStyle": "Markierungsstil für nummerierte Listen",
|
||||
"tipDecreaseListIndentTab": "Listeneinzug verringern (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Listeneinzug vergrößern (Tab)",
|
||||
"tipTextOutlineColor": "Textkonturfarbe",
|
||||
"tipOutlineWidth0None": "Konturbreite (0 = keine)",
|
||||
"tipFromContent": "Aus Inhalt",
|
||||
"tipLeftToRight": "Von links nach rechts",
|
||||
"tipRightToLeft": "Von rechts nach links",
|
||||
"tipStrokeColor": "Linienfarbe",
|
||||
"tipStrokeWidth": "Linienbreite",
|
||||
"tipZoomPresets": "Zoom-Voreinstellungen",
|
||||
"tipZoomOut": "Verkleinern",
|
||||
"tipZoomIn": "Vergrößern",
|
||||
"tipFitPage": "Seite einpassen",
|
||||
"tipPreviousPage": "Vorherige Seite",
|
||||
"tipTypeAPageNumberAndPressEnter": "Seitenzahl eingeben und Enter drücken",
|
||||
"tipNextPage": "Nächste Seite",
|
||||
"tipDocumentProperties": "Dokumenteigenschaften",
|
||||
"tipHideBar": "Leiste ausblenden",
|
||||
"tipShowBar": "Leiste einblenden"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG zu PDF",
|
||||
"subtitle": "Eine PDF aus JPG, JPEG und JPEG2000 (JP2/JPX) Bildern erstellen."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplizieren & Organisieren",
|
||||
"subtitle": "Seiten duplizieren, neu anordnen und löschen."
|
||||
"subtitle": "Seiten duplizieren, neu anordnen und löschen.",
|
||||
"saveChanges": "Änderungen speichern"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Seiten löschen",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Lesezeichen bearbeiten",
|
||||
"subtitle": "PDF-Lesezeichen hinzufügen, bearbeiten, importieren, löschen und extrahieren."
|
||||
"subtitle": "PDF-Lesezeichen hinzufügen, bearbeiten, importieren, löschen und extrahieren.",
|
||||
"autoExtractExisting": "Vorhandene Lesezeichen automatisch extrahieren",
|
||||
"importSectionTitle": "Oder Lesezeichen importieren",
|
||||
"csvFormat": "CSV-Format: Titel,Seite,Ebene",
|
||||
"jsonFormat": "JSON-Format",
|
||||
"uploadCsvAction": "Klicken, um CSV hochzuladen",
|
||||
"uploadJsonAction": "Klicken, um JSON hochzuladen",
|
||||
"orDragHere": "oder hierher ziehen"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Inhaltsverzeichnis",
|
||||
"subtitle": "Ein Inhaltsverzeichnis aus PDF-Lesezeichen generieren."
|
||||
"subtitle": "Ein Inhaltsverzeichnis aus PDF-Lesezeichen generieren.",
|
||||
"titleLabel": "Inhaltsverzeichnis-Titel",
|
||||
"fontSize": "Schriftgröße",
|
||||
"fontFamily": "Schriftfamilie",
|
||||
"addBookmark": "Lesezeichen für Inhaltsverzeichnis-Seite hinzufügen",
|
||||
"generateButton": "Inhaltsverzeichnis generieren",
|
||||
"selectPdfFirst": "Bitte wählen Sie zuerst eine PDF-Datei aus.",
|
||||
"statusReadingFileMainThread": "Datei wird gelesen (Haupt-Thread)...",
|
||||
"statusGenerating": "Inhaltsverzeichnis wird generiert...",
|
||||
"errorReadingFileWithMessage": "Fehler beim Lesen der Datei: {{message}}",
|
||||
"successGeneratedDownloadStarted": "Inhaltsverzeichnis erfolgreich generiert! Download gestartet.",
|
||||
"workerErrorWithMessage": "Fehler: {{message}}",
|
||||
"workerErrorOccurred": "Worker-Fehler aufgetreten. Details in der Konsole."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Seitenzahlen",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Bildstempel zu Ihrer PDF über die Annotations-Symbolleiste hinzufügen.",
|
||||
"usernameLabel": "Stempel-Benutzername",
|
||||
"usernamePlaceholder": "Geben Sie Ihren Namen ein (für Stempel)",
|
||||
"usernameHint": "Dieser Name erscheint auf von Ihnen erstellten Stempeln."
|
||||
"usernameHint": "Dieser Name erscheint auf von Ihnen erstellten Stempeln.",
|
||||
"saveButton": "Gestempelte PDF speichern"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Annotationen entfernen",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF-Formular ausfüllen",
|
||||
"subtitle": "Formulare direkt im Browser ausfüllen. Unterstützt auch XFA-Formulare."
|
||||
"subtitle": "Formulare direkt im Browser ausfüllen. Unterstützt auch XFA-Formulare.",
|
||||
"uploadHint": "Laden Sie eine PDF mit Formularfeldern hoch. Füllen Sie sie direkt im untenstehenden Viewer aus und klicken Sie dann auf die Schaltfläche, um das ausgefüllte Formular zu speichern und herunterzuladen. Unterstützt auch XFA-Formulare.",
|
||||
"xfaNoteTitle": "Hinweis zu XFA-Formularen:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) ist ein älteres Format, das nur von bestimmten PDF-Viewern wie BentoPDF und Firefox unterstützt wird. Wenn Sie eine XFA-PDF in anderer Software öffnen und leere Seiten oder keine Formularfelder sehen, bedeutet das, dass dieser Viewer XFA nicht unterstützt. Um XFA-Formulare korrekt anzuzeigen und auszufüllen, verwenden Sie Firefox oder den Formular-Ausfüller von BentoPDF."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "PDF-Formular erstellen",
|
||||
"subtitle": "Ausfüllbare PDF-Formulare mit Drag-and-Drop-Textfeldern erstellen."
|
||||
"subtitle": "Ausfüllbare PDF-Formulare mit Drag-and-Drop-Textfeldern erstellen.",
|
||||
"orSeparator": "ODER",
|
||||
"createBlankPdf": "Leere PDF erstellen"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Leere Seiten entfernen",
|
||||
@@ -255,11 +402,35 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Text zu PDF",
|
||||
"subtitle": "Eine Textdatei in eine PDF konvertieren."
|
||||
"subtitle": "Eine Textdatei in eine PDF konvertieren.",
|
||||
"uploadFiles": "Dateien hochladen",
|
||||
"typeText": "Text eingeben",
|
||||
"acceptedFormats": "Textdateien (.txt)",
|
||||
"fontFamily": "Schriftfamilie",
|
||||
"fontSize": "Schriftgröße",
|
||||
"textColor": "Textfarbe",
|
||||
"pageSize": "Seitengröße",
|
||||
"rtlAutoDetectNote": "RTL-Sprachen (Arabisch, Urdu, Persisch usw.) werden automatisch erkannt und die Textrichtung wird entsprechend angepasst.",
|
||||
"createButton": "PDF erstellen"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON zu PDF",
|
||||
"subtitle": "JSON-Dateien in PDF-Format konvertieren."
|
||||
"subtitle": "JSON-Dateien in PDF-Format konvertieren.",
|
||||
"noteLabel": "Hinweis:",
|
||||
"noteText": "Es werden nur JSON-Dateien unterstützt, die mit dem PDF-zu-JSON-Konverter erstellt wurden. Normale JSON-Dateien aus anderen Tools funktionieren nicht.",
|
||||
"acceptedFormats": "Mehrere JSON-Dateien",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Bitte wählen Sie mindestens 1 JSON-Datei aus",
|
||||
"selectedReady": "{{count}} Datei(en) ausgewählt. Bereit zur Konvertierung!",
|
||||
"readingFiles": "Dateien werden gelesen (Haupt-Thread)...",
|
||||
"converting": "JSON-Dateien werden in PDFs konvertiert...",
|
||||
"readError": "Fehler beim Lesen der Dateien: {{message}}",
|
||||
"creatingZip": "ZIP-Datei wird erstellt...",
|
||||
"success": "JSON-Dateien erfolgreich in PDF konvertiert! ZIP-Download wurde gestartet.",
|
||||
"zipError": "Fehler beim Erstellen der ZIP-Datei: {{message}}",
|
||||
"workerError": "Worker-Fehler: {{message}}",
|
||||
"getStarted": "Wählen Sie JSON-Dateien aus, um zu starten"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF zu JPG",
|
||||
@@ -337,7 +508,15 @@
|
||||
"colorMode": "Farbmodus",
|
||||
"multiPage": "Als mehrseitiges TIFF speichern (einzelne Datei)",
|
||||
"loadingVips": "Bildprozessor wird geladen...",
|
||||
"converting": "Wird in TIFF konvertiert..."
|
||||
"converting": "Wird in TIFF konvertiert...",
|
||||
"alert": {
|
||||
"invalidFile": "Ungültige Datei",
|
||||
"invalidFileExplanation": "Bitte laden Sie eine PDF-Datei hoch.",
|
||||
"noFile": "Keine Datei",
|
||||
"noFileExplanation": "Bitte laden Sie zuerst eine PDF-Datei hoch.",
|
||||
"conversionSuccess": "PDF erfolgreich in TIFF konvertiert!",
|
||||
"conversionError": "PDF konnte nicht in TIFF konvertiert werden. Die Datei könnte beschädigt sein."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF zu CBZ",
|
||||
@@ -375,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF zu JSON",
|
||||
"subtitle": "PDF-Dateien in JSON-Format konvertieren."
|
||||
"subtitle": "PDF-Dateien in JSON-Format konvertieren.",
|
||||
"convertButton": "In JSON konvertieren",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Bitte wählen Sie mindestens 1 PDF-Datei aus",
|
||||
"selectedReady": "{{count}} Datei(en) ausgewählt. Bereit zur Konvertierung!",
|
||||
"checkingEncrypted": "Es wird auf verschlüsselte PDFs geprüft...",
|
||||
"readingFiles": "Dateien werden gelesen (Haupt-Thread)...",
|
||||
"converting": "PDFs werden in JSON konvertiert...",
|
||||
"readError": "Fehler beim Lesen der Dateien: {{message}}",
|
||||
"creatingZip": "ZIP-Datei wird erstellt...",
|
||||
"success": "PDFs erfolgreich in JSON konvertiert! ZIP-Download wurde gestartet.",
|
||||
"zipError": "Fehler beim Erstellen der ZIP-Datei: {{message}}",
|
||||
"workerError": "Worker-Fehler: {{message}}",
|
||||
"getStarted": "Wählen Sie PDF-Dateien aus, um zu starten"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Eine PDF durchsuchbar und kopierbar machen."
|
||||
"subtitle": "Eine PDF durchsuchbar und kopierbar machen.",
|
||||
"languagesInDocument": "Sprachen im Dokument",
|
||||
"searchLanguagesPlaceholder": "Nach Sprachen suchen...",
|
||||
"selectedLabel": "Ausgewählt:",
|
||||
"none": "Keine",
|
||||
"advancedSettingsSummary": "Erweiterte Einstellungen (empfohlen zur Verbesserung der Genauigkeit)",
|
||||
"resolutionLabel": "Auflösung",
|
||||
"resolutionStandard": "Standard (192 DPI)",
|
||||
"resolutionHigh": "Hoch (288 DPI)",
|
||||
"resolutionUltra": "Ultra (384 DPI)",
|
||||
"binarizeLabel": "In Schwarz-Weiß umwandeln (Kontrast für saubere Scans verbessern)",
|
||||
"embedFullFontsLabel": "Vollständige Schriftarten einbetten (größere Datei, bessere Kompatibilität)",
|
||||
"whitelistPresetLabel": "Zeichen-Whitelist-Voreinstellung",
|
||||
"whitelistNone": "Keine (alle Zeichen)",
|
||||
"whitelistAlphanumeric": "Alphanumerisch + grundlegende Satzzeichen",
|
||||
"whitelistNumbersCurrency": "Zahlen + Währungssymbole",
|
||||
"whitelistLettersOnly": "Nur Buchstaben (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Nur Zahlen (0-9)",
|
||||
"whitelistInvoice": "Rechnung/Beleg (Zahlen, $, ., -, /)",
|
||||
"whitelistForms": "Formulare (alphanumerisch + gängige Symbole)",
|
||||
"whitelistCustom": "Benutzerdefiniert...",
|
||||
"whitelistHelp": "Nur diese Zeichen werden erkannt. Für alle Zeichen leer lassen.",
|
||||
"whitelistInputLabel": "Zeichen-Whitelist (optional)",
|
||||
"whitelistInputPlaceholder": "z. B. abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "OCR starten",
|
||||
"progressInitializing": "Wird initialisiert...",
|
||||
"resultsTitle": "OCR abgeschlossen",
|
||||
"resultsDescription": "Ihre durchsuchbare PDF ist bereit. Sie können den extrahierten Text unten auch kopieren oder herunterladen.",
|
||||
"copyToClipboard": "In Zwischenablage kopieren",
|
||||
"downloadTxt": "Als .txt herunterladen",
|
||||
"downloadSearchablePdf": "Durchsuchbare PDF herunterladen",
|
||||
"statusPrefix": "Status: {{status}}",
|
||||
"availabilityInvalidConfig": "Diese Bereitstellung stellt keine gültigen OCR-Sprachen bereit. Erstellen Sie sie mit VITE_TESSERACT_AVAILABLE_LANGUAGES neu und setzen Sie gültige Tesseract-Codes.",
|
||||
"availabilityBundles": "Diese Bereitstellung enthält OCR für: {{languages}}.",
|
||||
"noLanguagesAvailable": "In dieser Bereitstellung sind keine OCR-Sprachen verfügbar.",
|
||||
"noLanguagesTitle": "Keine Sprachen ausgewählt",
|
||||
"noLanguagesMessage": "Bitte wählen Sie mindestens eine Sprache für OCR aus.",
|
||||
"noFileTitle": "Keine Datei",
|
||||
"noFileMessage": "Bitte laden Sie zuerst eine PDF-Datei hoch.",
|
||||
"languageUnavailableTitle": "OCR-Sprache nicht verfügbar",
|
||||
"ocrErrorTitle": "OCR-Fehler",
|
||||
"ocrErrorMessage": "Während des OCR-Prozesses ist ein Fehler aufgetreten. Der Worker konnte möglicherweise nicht geladen werden. Bitte versuchen Sie es erneut.",
|
||||
"howItWorksTitle": "So funktioniert es:",
|
||||
"extractTextLabel": "Text extrahieren:",
|
||||
"extractTextDescription": "Verwendet Tesseract OCR, um Text aus gescannten Bildern oder PDFs zu erkennen.",
|
||||
"searchableOutputLabel": "Durchsuchbare Ausgabe:",
|
||||
"searchableOutputDescription": "Erstellt eine neue PDF mit einer unsichtbaren Textebene, sodass Ihr Dokument vollständig durchsuchbar wird, während das ursprüngliche Erscheinungsbild erhalten bleibt.",
|
||||
"characterFilteringLabel": "Zeichenfilterung:",
|
||||
"characterFilteringDescription": "Verwenden Sie Whitelists, um unerwünschte Zeichen herauszufiltern und die Genauigkeit für bestimmte Dokumenttypen zu verbessern (Rechnungen, Formulare usw.).",
|
||||
"multiLanguageSupportLabel": "Mehrsprachige Unterstützung:",
|
||||
"multiLanguageSupportDescription": "Wählen Sie mehrere Sprachen für Dokumente mit gemischten Sprachinhalten aus."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Seiten abwechselnd mischen",
|
||||
"subtitle": "PDFs durch abwechselnde Seiten aus jedem PDF zusammenführen. Lesezeichen werden beibehalten."
|
||||
"subtitle": "PDFs durch abwechselnde Seiten aus jedem PDF zusammenführen. Lesezeichen werden beibehalten.",
|
||||
"retainPageLabels": "Originale Seitenbeschriftungen jeder Datei beibehalten",
|
||||
"retainPageLabelsHint": "Aus (Standard): Das zusammengeführte PDF verwendet die natürliche Seitennummerierung 1–N. An: Die ursprünglichen Seitenbeschriftungen jeder Datei bleiben erhalten (kann zu doppelten Beschriftungen führen)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Seitenfolge für Duplex-Scans neu anordnen",
|
||||
"subtitle": "Ein PDF, das in zwei Blöcken gescannt wurde (erst alle Vorderseiten, dann alle Rückseiten), in die richtige Vorder-/Rückseiten-Reihenfolge bringen.",
|
||||
"totalPagesLabel": "Seiten gesamt:",
|
||||
"splitAfterPageLabel": "Teilen nach Seite",
|
||||
"splitAfterPagePlaceholder": "z. B. 50",
|
||||
"backBlockOrderLabel": "Reihenfolge des Rückseiten-Blocks",
|
||||
"backBlockReverseOption": "Rückseiten-Block umkehren (üblich bei umgedrehtem Stapel)",
|
||||
"backBlockKeepOption": "Rückseiten-Block unverändert lassen",
|
||||
"autoSplitButton": "Teilung automatisch erkennen (Hälfte)",
|
||||
"exportGroupedLabel": "Gruppierte Dateien nach ursprünglicher Dokumentlänge exportieren",
|
||||
"pagesPerDocumentLabel": "Seiten pro Originaldokument",
|
||||
"groupedHelp": "Wenn aktiviert, ist die Ausgabe eine ZIP-Datei mit einer PDF-Datei pro gruppiertem Dokument.",
|
||||
"collateButton": "PDF zusammenführen",
|
||||
"invalidFileTitle": "Ungültige Datei",
|
||||
"invalidFileMessage": "Bitte wählen Sie eine PDF-Datei aus.",
|
||||
"loadingPdf": "PDF wird geladen...",
|
||||
"loadErrorMessage": "PDF-Datei konnte nicht geladen werden.",
|
||||
"fileMeta": "{{size}} - {{count}} Seiten",
|
||||
"oddPageWarning": "Ungerade Seitenzahl ({{count}}). Ein Duplex-Scan sollte eine gerade Seitenzahl haben; möglicherweise fehlt eine Seite oder es ist eine zu viel.",
|
||||
"previewSummary": "Vorderseiten-Block: {{frontCount}} Seite(n), Rückseiten-Block: {{backCount}} Seite(n). Ausgabe: {{outputCount}} Seite(n) in Vorder-/Rückseiten-Reihenfolge.",
|
||||
"previewMismatchWarning": "Die Blocklängen von Vorder- und Rückseiten unterscheiden sich ({{frontCount}} Vorderseiten gegenüber {{backCount}} Rückseiten). Die {{extraCount}} überzähligen Seite(n) der längeren Seite werden ohne Gegenstück am Ende angehängt.",
|
||||
"missingFileTitle": "Fehlende Datei",
|
||||
"missingFileMessage": "Bitte laden Sie vor der Verarbeitung ein PDF mit mindestens 2 Seiten hoch.",
|
||||
"invalidSplitTitle": "Ungültiger Teilungspunkt",
|
||||
"invalidSplitMessage": "Der Teilungspunkt muss zwischen Seite 1 und Seite {{maxSplit}} liegen.",
|
||||
"unevenConfirmTitle": "Ungleiche Blöcke",
|
||||
"unevenConfirmMessage": "Der Vorderseiten-Block hat {{frontCount}} Seite(n) und der Rückseiten-Block {{backCount}} Seite(n).\nMeist bedeutet das, dass eine Seite doppelt gescannt wurde oder fehlt.\n\nDie {{extraCount}} Seite(n) ohne Gegenstück werden am Ende angehängt.\n\nTrotzdem fortfahren?",
|
||||
"invalidGroupTitle": "Ungültige Gruppengröße",
|
||||
"invalidGroupMessage": "Bitte geben Sie eine gültige Seitenzahl pro Originaldokument ein.",
|
||||
"collatingLoader": "Duplex-Scan wird zusammengeführt...",
|
||||
"successMessage": "Zusammengeführtes PDF wurde erfolgreich erstellt.",
|
||||
"successGroupedMessage": "Zusammenführung abgeschlossen. {{fileCount}} gruppierte Datei(en) erstellt.",
|
||||
"processErrorMessage": "PDF konnte nicht zusammengeführt werden.",
|
||||
"howItWorksStep1Title": "Scan hochladen",
|
||||
"howItWorksStep1": "Laden Sie das einzelne PDF hoch, das erst alle Vorderseiten und danach alle Rückseiten enthält.",
|
||||
"howItWorksStep2Title": "Teilungspunkt festlegen",
|
||||
"howItWorksStep2": "Geben Sie an, wo der Vorderseiten-Block endet, und wählen Sie, ob der Rückseiten-Block umgekehrt werden muss.",
|
||||
"howItWorksStep3Title": "Zusammenführen und herunterladen",
|
||||
"howItWorksStep3": "Sie erhalten ein ineinander sortiertes PDF oder eine ZIP-Datei mit einer eigenen Datei pro Originaldokument.",
|
||||
"faqOddPagesQuestion": "Was ist, wenn mein Scan eine ungerade Seitenzahl hat?",
|
||||
"faqOddPagesAnswer": "Ein Duplex-Scan sollte eine gerade Seitenzahl haben. Ist das nicht der Fall, wurde vermutlich eine Seite doppelt gescannt oder übersprungen. Das Werkzeug warnt Sie vor der Verarbeitung, und Seiten ohne Gegenstück werden am Ende angehängt, damit nichts verloren geht.",
|
||||
"faqBackOrderQuestion": "Warum sollte ich den Rückseiten-Block unverändert lassen?",
|
||||
"faqBackOrderAnswer": "Das hängt davon ab, wie der Stapel für den zweiten Durchgang eingelegt wurde. Wird der gesamte Stapel umgedreht, liegen die Rückseiten in umgekehrter Reihenfolge vor – das ist die Standardeinstellung. Hat Ihr Scanner sie in derselben Reihenfolge wie die Vorderseiten ausgegeben, lassen Sie den Block unverändert."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Anhänge hinzufügen",
|
||||
@@ -710,7 +1000,8 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF zu Text",
|
||||
"subtitle": "Text aus PDF-Dateien extrahieren und als Textdatei (.txt) speichern. Unterstützt mehrere Dateien.",
|
||||
"note": "Dieses Tool funktioniert NUR mit digital erstellten PDFs. Für gescannte Dokumente oder bildbasierte PDFs verwenden Sie stattdessen unser OCR PDF-Tool.",
|
||||
"noteLabel": "Hinweis:",
|
||||
"noteText": "Dieses Tool funktioniert NUR mit digital erstellten PDFs. Für gescannte Dokumente oder bildbasierte PDFs verwenden Sie stattdessen unser OCR PDF-Tool.",
|
||||
"convertButton": "Text extrahieren"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
@@ -718,8 +1009,9 @@
|
||||
"pageTitle": "Digitale PDF-Signatur - Kryptografische Signatur hinzufügen | BentoPDF",
|
||||
"subtitle": "Fügen Sie eine kryptografische digitale Signatur mit X.509-Zertifikaten zu Ihrer PDF hinzu. Unterstützt PKCS#12 (.pfx, .p12) und PEM-Formate. Ihr privater Schlüssel verlässt niemals Ihren Browser.",
|
||||
"certificateSection": "Zertifikat",
|
||||
"uploadCert": "Zertifikat hochladen (.pfx, .p12)",
|
||||
"uploadCert": "Zertifikat hochladen (.pfx, .p12, .pem)",
|
||||
"certPassword": "Zertifikat-Passwort",
|
||||
"privateKeyPassword": "Passwort für privaten Schlüssel",
|
||||
"certPasswordPlaceholder": "Zertifikat-Passwort eingeben",
|
||||
"certInfo": "Zertifikat-Informationen",
|
||||
"certSubject": "Betreff",
|
||||
@@ -732,8 +1024,71 @@
|
||||
"locationPlaceholder": "z.B. Berlin, Deutschland",
|
||||
"contactInfo": "Kontaktdaten",
|
||||
"contactPlaceholder": "z.B. [email protected]",
|
||||
"visibleSignature": "Sichtbare Signatur",
|
||||
"visibleSignatureDescription": "Wenn aktiviert, erscheint ein sichtbares Signaturfeld in der PDF. Sie können ein Bild/Logo hochladen oder Text hinzufügen. Falls keines von beidem angegeben ist, wird automatisch der Name des Unterzeichners aus dem Zertifikat angezeigt.",
|
||||
"signatureImage": "Signaturbild/Logo (optional)",
|
||||
"uploadSignatureImage": "Bild hochladen (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Signaturvorschau",
|
||||
"remove": "Entfernen",
|
||||
"page": "Seite",
|
||||
"firstPage": "Erste Seite",
|
||||
"lastPage": "Letzte Seite",
|
||||
"allPages": "Alle Seiten",
|
||||
"customPage": "Benutzerdefinierte Seite #",
|
||||
"pageNumber": "Seite #",
|
||||
"xPosition": "X-Position (links)",
|
||||
"yPosition": "Y-Position (oben)",
|
||||
"width": "Breite",
|
||||
"height": "Höhe",
|
||||
"addTextOverlay": "Textüberlagerung hinzufügen",
|
||||
"text": "Text",
|
||||
"textPlaceholder": "z.B. Digital signiert von Max Mustermann",
|
||||
"textColor": "Textfarbe",
|
||||
"fontSize": "Schriftgröße",
|
||||
"invalidImageTitle": "Ungültiges Bild",
|
||||
"invalidImageMessage": "Bitte wählen Sie ein PNG-, JPG- oder WebP-Bild.",
|
||||
"invalidFileTitle": "Ungültige Datei",
|
||||
"invalidFileMessage": "Bitte wählen Sie eine PDF-Datei aus.",
|
||||
"invalidCertificateTitle": "Ungültiges Zertifikat",
|
||||
"invalidCertificateMessage": "Bitte wählen Sie eine Zertifikatsdatei im Format .pfx, .p12 oder .pem aus.",
|
||||
"certificateLoaded": "Zertifikat geladen",
|
||||
"certificateUnlocked": "Zertifikat entsperrt",
|
||||
"failedParsePem": "PEM-Datei konnte nicht geparst werden",
|
||||
"enterPasswordToUnlock": "Passwort zum Entsperren eingeben",
|
||||
"invalidPasswordOrCertificate": "Ungültiges Passwort oder Zertifikat",
|
||||
"incorrectPassword": "Falsches Passwort",
|
||||
"failedParseCertificate": "Zertifikat konnte nicht geparst werden",
|
||||
"missingDataTitle": "Fehlende Daten",
|
||||
"missingDataMessage": "Bitte laden Sie sowohl eine PDF als auch ein gültiges Zertifikat hoch.",
|
||||
"applyingSignature": "Digitale Signatur wird angewendet...",
|
||||
"signingFailedTitle": "Signieren fehlgeschlagen",
|
||||
"chainFetchFailed": "Die Zertifikatskette konnte nicht abgerufen werden. Dies kann an Netzwerkproblemen oder einem nicht verfügbaren Zertifikats-Proxy liegen. Bitte prüfen Sie Ihre Internetverbindung und versuchen Sie es erneut. Wenn das Problem weiterhin besteht, kontaktieren Sie den Support.",
|
||||
"failedToSignPdf": "PDF konnte nicht signiert werden: {{message}}",
|
||||
"defaultSignatureText": "Digital signiert von {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} Seiten",
|
||||
"howToStep1Title": "PDF hochladen",
|
||||
"howToStep1Text": "Wählen Sie das PDF-Dokument aus, das Sie signieren möchten",
|
||||
"howToStep2Title": "Zertifikat hochladen",
|
||||
"howToStep2Text": "Stellen Sie Ihre .pfx- oder .p12-Zertifikatsdatei und das Passwort bereit",
|
||||
"howToStep3Title": "Signieren & herunterladen",
|
||||
"howToStep3Text": "Wenden Sie die digitale Signatur an und laden Sie Ihr signiertes PDF herunter",
|
||||
"relatedEncryptDesc": "PDF mit Passwort schützen",
|
||||
"relatedDecryptDesc": "PDF-Passwort entfernen",
|
||||
"relatedFlattenDesc": "Anmerkungen dauerhaft machen",
|
||||
"relatedSanitizeDesc": "Versteckte Daten entfernen",
|
||||
"relatedPermissionsDesc": "PDF-Berechtigungen festlegen",
|
||||
"faqWhatIsQuestion": "Was ist eine digitale Signatur?",
|
||||
"faqWhatIsAnswer": "Eine digitale Signatur ist ein kryptografischer Mechanismus, der die Authentizität und Integrität eines Dokuments verifiziert. Anders als eine gezeichnete Signatur verwendet sie Public-Key-Kryptografie (X.509-Zertifikate), um die Identität des Unterzeichners nachzuweisen.",
|
||||
"faqFormatsQuestion": "Welche Zertifikatsformate werden unterstützt?",
|
||||
"faqFormatsAnswer": "Wir unterstützen Zertifikate im PKCS#12-Format (.pfx, .p12), die sowohl Ihr Zertifikat als auch den privaten Schlüssel in einer einzigen verschlüsselten Datei enthalten. Diese werden häufig von Zertifizierungsstellen ausgegeben.",
|
||||
"faqPrivateKeyQuestion": "Ist mein privater Schlüssel sicher?",
|
||||
"faqPrivateKeyAnswer": "Ja! Die gesamte Verarbeitung erfolgt vollständig in Ihrem Browser. Ihr Zertifikat, privater Schlüssel und Ihre PDF-Dateien verlassen Ihr Gerät niemals und werden auf keinen Server hochgeladen.",
|
||||
"faqValidReadersQuestion": "Ist die Signatur in PDF-Readern gültig?",
|
||||
"faqValidReadersAnswer": "Ja, das Tool erstellt standardmäßige PKCS#7-Detached-Signaturen, die von allen großen PDF-Viewern erkannt werden. Für eine vollständige Validierung verwenden Sie ein Zertifikat einer vertrauenswürdigen Zertifizierungsstelle.",
|
||||
"applySignature": "Digitale Signatur anwenden",
|
||||
"successMessage": "PDF erfolgreich signiert! Die Signatur kann in jedem PDF-Reader überprüft werden."
|
||||
"successMessage": "PDF erfolgreich signiert! Die Signatur kann in jedem PDF-Reader überprüft werden.",
|
||||
"internetRequiredTitle": "Internetverbindung erforderlich",
|
||||
"internetRequiredDescription": "Beim Signieren müssen möglicherweise Informationen zur Zertifikatskette vom Server Ihres Zertifikatsausstellers abgerufen werden, um die Signatur zu validieren."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "PDF-Signatur überprüfen",
|
||||
@@ -747,7 +1102,7 @@
|
||||
"tsaSectionTitle": "Zeitstempelserver (TSA)",
|
||||
"selectTsa": "TSA-Server auswählen",
|
||||
"applyTimestamp": "Zeitstempel anwenden",
|
||||
"successMessage": "PDF erfolgreich mit Zeitstempel versehen! Der Zeitstempel kann in Adobe Acrobat und anderen PDF-Readern überprüft werden."
|
||||
"successMessage": "PDF erfolgreich mit Zeitstempel versehen! Der Zeitstempel kann in jedem PDF-Reader überprüft werden."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "E-Mail zu PDF",
|
||||
@@ -822,7 +1177,113 @@
|
||||
"templateLoaded": "Vorlage \"{{name}}\" geladen.",
|
||||
"failedLoadTemplate": "Vorlage konnte nicht geladen werden.",
|
||||
"noSettings": "Keine konfigurierbaren Einstellungen für diesen Node.",
|
||||
"advancedSettings": "Erweiterte Einstellungen"
|
||||
"advancedSettings": "Erweiterte Einstellungen",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "PDF-Eingabe",
|
||||
"description": "Eine oder mehrere PDF-Dateien hochladen"
|
||||
},
|
||||
"download": {
|
||||
"name": "Download",
|
||||
"description": "Automatisch als PDF oder ZIP herunterladen"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "Keine PDFs mit dem {{node}}-Knoten verbunden",
|
||||
"noPdfInputs": "Keine PDFs in der Eingabe",
|
||||
"expectedPdfInput": "PDF-Eingabe erwartet",
|
||||
"failedToRenderPage": "Seite {{page}} konnte nicht gerendert werden",
|
||||
"failedToGetCanvasContext": "Canvas-Kontext für Seite {{page}} konnte nicht abgerufen werden",
|
||||
"failedToRenderPageToImage": "Seite {{page}} konnte nicht in ein Bild gerendert werden",
|
||||
"noPagesProcessed": "Keine Seiten verarbeitet",
|
||||
"cpdfNotConfigured": "CoherentPDF ist nicht konfiguriert. Bitte konfigurieren Sie es in den erweiterten Einstellungen.",
|
||||
"workerError": "Worker-Fehler: {{message}}",
|
||||
"alternateMergeWorkerError": "Fehler im alternierenden Zusammenführungs-Worker: {{message}}",
|
||||
"noPdfFilesUploaded": "Keine PDF-Dateien im PDF-Eingabeknoten hochgeladen",
|
||||
"failedToLoadFile": "\"{{file}}\" konnte nicht geladen werden — Datei möglicherweise beschädigt",
|
||||
"noImagesUploaded": "Keine Bilder im Bild-Eingabeknoten hochgeladen",
|
||||
"noWordDocsUploaded": "Keine Dokumente im Word-Eingabeknoten hochgeladen",
|
||||
"noExcelUploaded": "Keine Tabellen im Excel-Eingabeknoten hochgeladen",
|
||||
"noPowerPointUploaded": "Keine Präsentationen im PowerPoint-Eingabeknoten hochgeladen",
|
||||
"noCbzUploaded": "Keine Comic-Archive im CBZ-Eingabeknoten hochgeladen",
|
||||
"noEmailUploaded": "Keine E-Mail-Dateien im E-Mail-Eingabeknoten hochgeladen",
|
||||
"noEpubUploaded": "Keine EPUB-Dateien im EPUB-Eingabeknoten hochgeladen",
|
||||
"noFb2Uploaded": "Keine FB2-Dateien im FB2-Eingabeknoten hochgeladen",
|
||||
"noJsonUploaded": "Keine JSON-Dateien im JSON-Eingabeknoten hochgeladen",
|
||||
"noMarkdownUploaded": "Keine Markdown-Dateien im Markdown-Eingabeknoten hochgeladen",
|
||||
"noMobiUploaded": "Keine MOBI-Dateien im MOBI-Eingabeknoten hochgeladen",
|
||||
"noOdgUploaded": "Keine ODG-Dateien im ODG-Eingabeknoten hochgeladen",
|
||||
"noPagesUploaded": "Keine Pages-Dateien im Pages-Eingabeknoten hochgeladen",
|
||||
"noPubUploaded": "Keine PUB-Dateien im PUB-Eingabeknoten hochgeladen",
|
||||
"noSvgUploaded": "Keine SVG-Dateien im SVG-Eingabeknoten hochgeladen",
|
||||
"noTextUploaded": "Keine Textdateien im Text-Eingabeknoten hochgeladen",
|
||||
"noVsdUploaded": "Keine Visio-Dateien im VSD-Eingabeknoten hochgeladen",
|
||||
"noWpdUploaded": "Keine WPD-Dateien im WPD-Eingabeknoten hochgeladen",
|
||||
"noWpsUploaded": "Keine WPS-Dateien im WPS-Eingabeknoten hochgeladen",
|
||||
"noXmlUploaded": "Keine XML-Dateien im XML-Eingabeknoten hochgeladen",
|
||||
"noXpsUploaded": "Keine XPS-Dateien im XPS-Eingabeknoten hochgeladen",
|
||||
"alternateMergeNeedsTwo": "Alternierendes Zusammenführen benötigt mindestens zwei verbundene PDFs am Eingang",
|
||||
"cropMarginsExceed": "Beschnittränder überschreiten die Seitenabmessungen. Bitte Werte reduzieren.",
|
||||
"digitalSignNoCertificate": "Kein Zertifikat im Digital-Sign-Knoten geladen",
|
||||
"encryptUserPasswordRequired": "Benutzerkennwort ist für die Verschlüsselung erforderlich",
|
||||
"extractImagesNoneFound": "Keine Bilder in den verbundenen PDFs gefunden",
|
||||
"invertColorsFailedReadImage": "Bilddaten konnten nicht gelesen werden",
|
||||
"overlayRequiresPdf": "Der Overlay-Knoten benötigt eine Overlay-PDF-Eingabe.",
|
||||
"pdfToCsvNoTables": "Keine Tabellen im PDF gefunden",
|
||||
"pdfToXlsxNoTables": "Keine Tabellen in {{file}} gefunden",
|
||||
"posterizeFailedTileCanvas": "Kachel-Canvas-Kontext konnte nicht abgerufen werden",
|
||||
"redactNoText": "Schwärzen: Kein Text zum Schwärzen angegeben",
|
||||
"removeBlankPagesAllBlank": "Alle Seiten sind leer",
|
||||
"svgFailedToConvert": "SVG konnte nicht konvertiert werden",
|
||||
"svgFailedToLoad": "SVG konnte nicht geladen werden",
|
||||
"timestampFailed": "Zeitstempel über TSA {{tsa}} fehlgeschlagen: {{message}}",
|
||||
"noOutputNodes": "Keine Ausgabeknoten gefunden. Fügen Sie einen Download-Knoten hinzu, um Ihren Workflow abzuschließen.",
|
||||
"circularDependency": "Zirkuläre Abhängigkeit im Workflow erkannt. Bitte entfernen Sie alle Schleifen zwischen Knoten.",
|
||||
"encryptOrdering": "Der Verschlüsselungsknoten leitet in \"{{target}}\" ein, das mit verschlüsselten Daten fehlschlagen kann. Verschieben Sie die Verschlüsselung kurz vor den Ausgabeknoten.",
|
||||
"invalidWorkflowFile": "Ungültige Workflow-Datei: Knoten- oder Verbindungs-Array fehlt.",
|
||||
"storageQuotaExceeded": "Workflow konnte nicht gespeichert werden: Speicherkontingent überschritten. Versuchen Sie, alte Vorlagen zu löschen.",
|
||||
"failedToImport": "Workflow konnte nicht importiert werden: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Erweiterte Feature-Einstellungen",
|
||||
"description": "Konfigurieren Sie externe Verarbeitungsmodule, um erweiterte PDF-Funktionen zu aktivieren. Diese Module sind optional und separat lizenziert.",
|
||||
"status": {
|
||||
"testing": "Wird getestet...",
|
||||
"customOverride": "Benutzerdefinierte Überschreibung",
|
||||
"preConfigured": "Vorkonfiguriert",
|
||||
"notConfigured": "Nicht konfiguriert"
|
||||
},
|
||||
"preconfiguredTitle": "Vorkonfiguriert und einsatzbereit.",
|
||||
"preconfiguredDescription": "Erweiterte Verarbeitungsmodule werden automatisch über ein CDN geladen. Sie können die untenstehenden URLs überschreiben, wenn Sie eine benutzerdefinierte Quelle verwenden möchten (z. B. für Air-Gap- oder Self-Hosting-Bereitstellungen).",
|
||||
"usingDefault": "Standard wird verwendet: {{url}}",
|
||||
"pymupdfSubtitle": "Dokumentenverarbeitungs-Engine",
|
||||
"pymupdfFeatures": "Aktiviert: PDF zu Text, Markdown, SVG, DOCX, Excel • Bilder/Tabellen extrahieren • Formatkonvertierung",
|
||||
"testButton": "Testen",
|
||||
"recommendedLabel": "Empfohlen:",
|
||||
"copyTitle": "In Zwischenablage kopieren",
|
||||
"ghostscriptSubtitle": "PDF/A-Konvertierungs-Engine",
|
||||
"ghostscriptFeatures": "Aktiviert: PDF/A-1b-, PDF/A-2b-, PDF/A-3b-Konvertierung • Schriftarten in Pfade umwandeln",
|
||||
"cpdfSubtitle": "Lesezeichen- & Metadaten-Engine",
|
||||
"cpdfFeatures": "Aktiviert: Nach Lesezeichen aufteilen • Lesezeichen bearbeiten • PDF-Metadaten",
|
||||
"saveConfiguration": "Konfiguration speichern",
|
||||
"savingConfiguration": "Konfiguration wird gespeichert...",
|
||||
"savedTitle": "Gespeichert",
|
||||
"savedMessage": "Konfiguration erfolgreich gespeichert!",
|
||||
"errorTitle": "Fehler",
|
||||
"failedSave": "Konfiguration konnte nicht gespeichert werden: {{message}}",
|
||||
"emptyUrlTitle": "Leere URL",
|
||||
"emptyUrlMessage": "Bitte geben Sie eine URL zum Testen ein.",
|
||||
"testSuccessTitle": "Erfolg",
|
||||
"connectionSuccess": "Verbindung zu {{package}} erfolgreich!",
|
||||
"connectionFailedTitle": "Verbindung fehlgeschlagen",
|
||||
"connectionFailedMessage": "Verbindung zur URL konnte nicht hergestellt werden.",
|
||||
"resetDefaults": "Auf Standard zurücksetzen",
|
||||
"resetTitle": "Zurückgesetzt",
|
||||
"resetWithDefaults": "Benutzerdefinierte Überschreibungen wurden entfernt. Vorkonfigurierte Standardwerte sind aktiv.",
|
||||
"resetNoDefaults": "Alle Konfigurationen und zwischengespeicherten Module wurden gelöscht.",
|
||||
"licenseTitle": "Lizenzhinweis:",
|
||||
"licenseDescription": "Die externen Module (PyMuPDF, Ghostscript, CoherentPDF) sind unter AGPL-3.0 oder ähnlichen Copyleft-Lizenzen lizenziert. Durch das Konfigurieren und Verwenden dieser Module stimmen Sie den jeweiligen Lizenzbedingungen zu. BentoPDF ist mit jeder Ghostscript-WASM- und PyMuPDF-WASM-Implementierung kompatibel, die der erwarteten Schnittstelle folgt."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "PDF-Überlagerung",
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "Contact",
|
||||
"licensing": "Licensing",
|
||||
"allTools": "All Tools",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Open main menu",
|
||||
"language": "Language"
|
||||
"language": "Language",
|
||||
"searchLanguage": "Search language…",
|
||||
"noLanguagesFound": "No languages found"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Love BentoPDF? Help us keep it free and open source!",
|
||||
@@ -97,8 +100,11 @@
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "How It Works",
|
||||
"step1Title": "Upload File",
|
||||
"step1": "Click or drag and drop your file to begin",
|
||||
"step2Title": "Process",
|
||||
"step2": "Click the process button to start",
|
||||
"step3Title": "Download",
|
||||
"step3": "Save your processed file instantly"
|
||||
},
|
||||
"relatedTools": {
|
||||
@@ -129,6 +135,10 @@
|
||||
"resetToDefaults": "Reset to Defaults",
|
||||
"fullWidthMode": "Full Width Mode",
|
||||
"fullWidthDescription": "Use the full screen width for all tools instead of a centered container",
|
||||
"compactMode": "Compact Mode",
|
||||
"compactModeDescription": "Display tools as a compact list instead of cards",
|
||||
"advancedSettings": "Advanced Settings",
|
||||
"advancedSettingsDescription": "Configure external processing modules (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Settings are automatically saved",
|
||||
"clickToSet": "Click to set",
|
||||
"pressKeys": "Press keys...",
|
||||
@@ -206,7 +216,7 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Do you use cookies or analytics to track me?",
|
||||
"answer": "We care about your privacy. BentoPDF does not track personal information. We use Simple Analytics solely to see anonymous visit counts. This means we can know how many users visit our site, but we never know who you are. Simple Analytics is fully GDPR-compliant and respects your privacy."
|
||||
"answer": "No. BentoPDF does not track you at all. We do not use cookies, analytics, or any tracking scripts, not even on the live website at bentopdf.com. We never know who you are or what you do with the tools."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
@@ -266,7 +276,8 @@
|
||||
"file": "File",
|
||||
"files": "Files",
|
||||
"close": "Close",
|
||||
"convert": "Convert"
|
||||
"convert": "Convert",
|
||||
"unknownError": "Unknown error"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -339,9 +350,12 @@
|
||||
"download": "Download:",
|
||||
"downloadSelected": "Download Selected",
|
||||
"exportPdf": "Export PDF",
|
||||
"uploadPdfFiles": "Select PDF Files",
|
||||
"dragAndDrop": "Drag and drop PDF files here, or click to select",
|
||||
"uploadPdfFiles": "Select PDF or image files",
|
||||
"dragAndDrop": "Drag and drop PDF or image files here, or click to select",
|
||||
"selectFiles": "Select Files",
|
||||
"dropToAdd": "Drop PDF or image files to add",
|
||||
"convertingImages": "Converting images to PDF...",
|
||||
"failedToConvertImages": "Failed to convert images to PDF.",
|
||||
"renderingPages": "Rendering pages...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplicate this page",
|
||||
|
||||
+476
-21
@@ -6,15 +6,21 @@
|
||||
"convertFromPdf": "Convert from PDF",
|
||||
"organizeManage": "Organize & Manage",
|
||||
"optimizeRepair": "Optimize & Repair",
|
||||
"securePdf": "Secure PDF"
|
||||
"securePdf": "Secure PDF",
|
||||
"input": "Input",
|
||||
"output": "Output"
|
||||
},
|
||||
"convertToPdf": "Convert to PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF Multi Tool",
|
||||
"subtitle": "Merge, Split, Organize, Delete, Rotate, Add Blank Pages, Extract and Duplicate in an unified interface."
|
||||
"subtitle": "Merge, Split, Organize, Delete, Rotate, Add Blank Pages, Extract and Duplicate in a unified interface."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Merge PDF",
|
||||
"subtitle": "Combine multiple PDFs into one file. Preserves Bookmarks."
|
||||
"subtitle": "Combine multiple PDFs into one file. Preserves Bookmarks.",
|
||||
"retainPageLabels": "Keep original page labels from each file",
|
||||
"retainPageLabelsHint": "Off (default): the merged PDF uses natural page numbering 1–N. On: each file's original page labels are preserved (may produce duplicate labels).",
|
||||
"removeDuplicateFonts": "Remove duplicate fonts"
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Split PDF",
|
||||
@@ -50,6 +56,122 @@
|
||||
"name": "PDF Editor",
|
||||
"subtitle": "Annotate, highlight, redact, comment, add shapes/images, search, and view PDFs."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "Edit PDF Text",
|
||||
"subtitle": "Click any paragraph and edit it in place with live reflow, fonts, and styling.",
|
||||
"saved": "PDF saved successfully! ({{size}} KB)",
|
||||
"failedToLoad": "Failed to load the PDF Text Editor.",
|
||||
"howToUpload": "Upload PDF",
|
||||
"howToClick": "Click a Paragraph",
|
||||
"howToRestyle": "Restyle Anything",
|
||||
"relatedPdfEditor": "Annotate and mark up PDFs",
|
||||
"relatedSignPdf": "Draw, type or upload a signature",
|
||||
"relatedWatermark": "Stamp text or images",
|
||||
"relatedStamps": "Place stamps on pages",
|
||||
"relatedCompress": "Shrink the file size",
|
||||
"relatedOrganizeName": "Organize PDF",
|
||||
"relatedOrganize": "Reorder and manage pages",
|
||||
"open": "Open",
|
||||
"export": "Export",
|
||||
"filterAll": "All",
|
||||
"filterText": "Text",
|
||||
"filterImages": "Images",
|
||||
"filterShapes": "Shapes",
|
||||
"addText": "Add Text",
|
||||
"langAuto": "Auto",
|
||||
"change": "Change",
|
||||
"ignore": "Ignore",
|
||||
"next": "Next",
|
||||
"replace": "Replace",
|
||||
"replaceAll": "Replace All",
|
||||
"emptyState": "Open a PDF to edit its text, images and shapes.",
|
||||
"choosePdf": "Choose a PDF…",
|
||||
"font": "Font",
|
||||
"systemFonts": "System fonts",
|
||||
"color": "Color",
|
||||
"alignment": "Alignment",
|
||||
"style": "Style",
|
||||
"lists": "Lists",
|
||||
"outline": "Outline",
|
||||
"spacing": "Spacing",
|
||||
"direction": "Direction",
|
||||
"dirAuto": "Auto",
|
||||
"pathStroke": "Path stroke",
|
||||
"tipBackToUpload": "Back to upload",
|
||||
"tipOpenAnotherPdf": "Open another PDF",
|
||||
"tipExportS": "Export (⌘S)",
|
||||
"tipUndoZ": "Undo (⌘Z)",
|
||||
"tipRedoZ": "Redo (⇧⌘Z)",
|
||||
"tipFileDetails": "File details",
|
||||
"tipEditExistingContent": "Edit existing content",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "What the Edit tool touches — narrow the scope on busy pages",
|
||||
"tipClickThePageToAddATextBox": "Click the page to add a text box",
|
||||
"tipSpellCheckLanguage": "Spell-check language",
|
||||
"tipFindAndReplace": "Find & replace",
|
||||
"tipAddAnImage": "Add an image",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Copy this page's text in reading order",
|
||||
"tipCheckTheSpellingOfThisPage": "Check the spelling of this page",
|
||||
"tipShowOrHideTheFormatPanel": "Show or hide the format panel",
|
||||
"phReplaceWith": "Replace with",
|
||||
"tipAddToYourDictionary": "Add to your dictionary",
|
||||
"tipClose": "Close",
|
||||
"phFind": "Find",
|
||||
"tipPreviousMatch": "Previous match",
|
||||
"tipNextMatch": "Next match",
|
||||
"tipRotateLeft90": "Rotate left 90°",
|
||||
"tipRotateRight90": "Rotate right 90°",
|
||||
"tipFlipHorizontal": "Flip horizontal",
|
||||
"tipFlipVertical": "Flip vertical",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Replace this image, keeping its placement",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Alternate text for accessibility (tagged PDFs)",
|
||||
"tipBringToFront": "Bring to front",
|
||||
"tipSendToBack": "Send to back",
|
||||
"tipDuplicate": "Duplicate",
|
||||
"tipDelete": "Delete",
|
||||
"tipAlignLeftEdges": "Align left edges",
|
||||
"tipAlignHorizontalCenters": "Align horizontal centers",
|
||||
"tipAlignRightEdges": "Align right edges",
|
||||
"tipAlignTops": "Align tops",
|
||||
"tipAlignVerticalCenters": "Align vertical centers",
|
||||
"tipAlignBottoms": "Align bottoms",
|
||||
"tipDistributeHorizontally": "Distribute horizontally",
|
||||
"tipDistributeVertically": "Distribute vertically",
|
||||
"tipFontSize": "Font size",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "List fonts installed on this device (Chromium)",
|
||||
"tipCustomTextColor": "Custom text color",
|
||||
"tipAlignLeft": "Align left",
|
||||
"tipAlignCenter": "Align center",
|
||||
"tipAlignRight": "Align right",
|
||||
"tipJustify": "Justify",
|
||||
"tipBold": "Bold",
|
||||
"tipItalic": "Italic",
|
||||
"tipUnderline": "Underline",
|
||||
"tipStrikethrough": "Strikethrough",
|
||||
"tipSuperscript": "Superscript",
|
||||
"tipSubscript": "Subscript",
|
||||
"tipToggleBulletedItem": "Toggle bulleted item",
|
||||
"tipToggleNumberedItem": "Toggle numbered item",
|
||||
"tipNumberedListMarkerStyle": "Numbered-list marker style",
|
||||
"tipDecreaseListIndentTab": "Decrease list indent (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Increase list indent (Tab)",
|
||||
"tipTextOutlineColor": "Text outline color",
|
||||
"tipOutlineWidth0None": "Outline width (0 = none)",
|
||||
"tipFromContent": "From content",
|
||||
"tipLeftToRight": "Left to right",
|
||||
"tipRightToLeft": "Right to left",
|
||||
"tipStrokeColor": "Stroke color",
|
||||
"tipStrokeWidth": "Stroke width",
|
||||
"tipZoomPresets": "Zoom presets",
|
||||
"tipZoomOut": "Zoom out",
|
||||
"tipZoomIn": "Zoom in",
|
||||
"tipFitPage": "Fit page",
|
||||
"tipPreviousPage": "Previous page",
|
||||
"tipTypeAPageNumberAndPressEnter": "Type a page number and press Enter",
|
||||
"tipNextPage": "Next page",
|
||||
"tipDocumentProperties": "Document properties",
|
||||
"tipHideBar": "Hide bar",
|
||||
"tipShowBar": "Show bar"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG to PDF",
|
||||
"subtitle": "Create a PDF from JPG, JPEG, and JPEG2000 (JP2/JPX) images."
|
||||
@@ -68,7 +190,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplicate & Organize",
|
||||
"subtitle": "Duplicate, reorder, and delete pages."
|
||||
"subtitle": "Duplicate, reorder, and delete pages.",
|
||||
"saveChanges": "Save Changes"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Delete Pages",
|
||||
@@ -76,11 +199,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Edit Bookmarks",
|
||||
"subtitle": "Add, edit, import, delete and extract PDF bookmarks."
|
||||
"subtitle": "Add, edit, import, delete and extract PDF bookmarks.",
|
||||
"autoExtractExisting": "Auto-extract existing bookmarks",
|
||||
"importSectionTitle": "Or Import Bookmarks",
|
||||
"csvFormat": "CSV format: title,page,level",
|
||||
"jsonFormat": "JSON format",
|
||||
"uploadCsvAction": "Click to upload CSV",
|
||||
"uploadJsonAction": "Click to upload JSON",
|
||||
"orDragHere": "or drag here"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Table of Contents",
|
||||
"subtitle": "Generate a table of contents page from PDF bookmarks."
|
||||
"subtitle": "Generate a table of contents page from PDF bookmarks.",
|
||||
"titleLabel": "TOC Title",
|
||||
"fontSize": "Font Size",
|
||||
"fontFamily": "Font Family",
|
||||
"addBookmark": "Add bookmark for TOC page",
|
||||
"generateButton": "Generate Table of Contents",
|
||||
"selectPdfFirst": "Please select a PDF file first.",
|
||||
"statusReadingFileMainThread": "Reading file (Main Thread)...",
|
||||
"statusGenerating": "Generating table of contents...",
|
||||
"errorReadingFileWithMessage": "Error reading file: {{message}}",
|
||||
"successGeneratedDownloadStarted": "Table of contents generated successfully! Download started.",
|
||||
"workerErrorWithMessage": "Error: {{message}}",
|
||||
"workerErrorOccurred": "Worker error occurred. Check console for details."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Page Numbers",
|
||||
@@ -206,7 +348,8 @@
|
||||
"subtitle": "Add image stamps to your PDF using the annotation toolbar.",
|
||||
"usernameLabel": "Stamp Username",
|
||||
"usernamePlaceholder": "Enter your name (for stamps)",
|
||||
"usernameHint": "This name will appear on stamps you create."
|
||||
"usernameHint": "This name will appear on stamps you create.",
|
||||
"saveButton": "Save Stamped PDF"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Remove Annotations",
|
||||
@@ -214,11 +357,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF Form Filler",
|
||||
"subtitle": "Fill in forms directly in the browser. Also supports XFA forms."
|
||||
"subtitle": "Fill in forms directly in the browser. Also supports XFA forms.",
|
||||
"uploadHint": "Upload a PDF with form fields. Fill them directly in the viewer below, then click the button to save and download the filled form. Also supports XFA forms.",
|
||||
"xfaNoteTitle": "Note on XFA Forms:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) is a legacy format that's only supported by certain PDF viewers like BentoPDF and Firefox. If you open an XFA PDF in other software and see blank pages or no form fields, it means that viewer doesn't support XFA. To view and fill XFA forms properly, use Firefox or BentoPDF's Form Filler."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Create PDF Form",
|
||||
"subtitle": "Create fillable PDF forms with drag-and-drop text fields."
|
||||
"subtitle": "Create fillable PDF forms with drag-and-drop text fields.",
|
||||
"orSeparator": "OR",
|
||||
"createBlankPdf": "Create Blank PDF"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Remove Blank Pages",
|
||||
@@ -255,11 +403,35 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Text to PDF",
|
||||
"subtitle": "Convert a plain text file into a PDF."
|
||||
"subtitle": "Convert a plain text file into a PDF.",
|
||||
"uploadFiles": "Upload Files",
|
||||
"typeText": "Type Text",
|
||||
"acceptedFormats": "Text files (.txt)",
|
||||
"fontFamily": "Font Family",
|
||||
"fontSize": "Font Size",
|
||||
"textColor": "Text Color",
|
||||
"pageSize": "Page Size",
|
||||
"rtlAutoDetectNote": "RTL languages (Arabic, Urdu, Persian, etc.) are automatically detected and text direction is adjusted.",
|
||||
"createButton": "Create PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON to PDF",
|
||||
"subtitle": "Convert JSON files to PDF format."
|
||||
"subtitle": "Convert JSON files to PDF format.",
|
||||
"noteLabel": "Note:",
|
||||
"noteText": "Only JSON files created by the PDF-to-JSON converter tool are supported. Standard JSON files from other tools will not work.",
|
||||
"acceptedFormats": "Multiple JSON files",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Please select at least 1 JSON file",
|
||||
"selectedReady": "{{count}} file(s) selected. Ready to convert!",
|
||||
"readingFiles": "Reading files (Main Thread)...",
|
||||
"converting": "Converting JSON files to PDFs...",
|
||||
"readError": "Error reading files: {{message}}",
|
||||
"creatingZip": "Creating ZIP file...",
|
||||
"success": "JSON files converted to PDF successfully! ZIP download started.",
|
||||
"zipError": "Error creating ZIP: {{message}}",
|
||||
"workerError": "Worker Error: {{message}}",
|
||||
"getStarted": "Select JSON files to get started"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF to JPG",
|
||||
@@ -344,7 +516,8 @@
|
||||
"noFile": "No File",
|
||||
"noFileExplanation": "Please upload a PDF file first.",
|
||||
"conversionSuccess": "PDF converted to TIFFs successfully!",
|
||||
"conversionError": "Failed to convert PDF to TIFF. The file might be corrupted."
|
||||
"conversionError": "Failed to convert PDF to TIFF. The file might be corrupted.",
|
||||
"conversionOutOfMemory": "The browser ran out of memory while converting. Try a lower DPI, or uncheck the multi-page TIFF option to convert pages one at a time."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
@@ -383,15 +556,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF to JSON",
|
||||
"subtitle": "Convert PDF files to JSON format."
|
||||
"subtitle": "Convert PDF files to JSON format.",
|
||||
"convertButton": "Convert to JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Please select at least 1 PDF file",
|
||||
"selectedReady": "{{count}} file(s) selected. Ready to convert!",
|
||||
"checkingEncrypted": "Checking for encrypted PDFs...",
|
||||
"readingFiles": "Reading files (Main Thread)...",
|
||||
"converting": "Converting PDFs to JSON...",
|
||||
"readError": "Error reading files: {{message}}",
|
||||
"creatingZip": "Creating ZIP file...",
|
||||
"success": "PDFs converted to JSON successfully! ZIP download started.",
|
||||
"zipError": "Error creating ZIP: {{message}}",
|
||||
"workerError": "Worker Error: {{message}}",
|
||||
"getStarted": "Select PDF files to get started"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Make a PDF searchable and copyable."
|
||||
"subtitle": "Make a PDF searchable and copyable.",
|
||||
"languagesInDocument": "Languages in Document",
|
||||
"searchLanguagesPlaceholder": "Search for languages...",
|
||||
"selectedLabel": "Selected:",
|
||||
"none": "None",
|
||||
"advancedSettingsSummary": "Advanced Settings (Recommended to improve accuracy)",
|
||||
"resolutionLabel": "Resolution",
|
||||
"resolutionStandard": "Standard (192 DPI)",
|
||||
"resolutionHigh": "High (288 DPI)",
|
||||
"resolutionUltra": "Ultra (384 DPI)",
|
||||
"binarizeLabel": "Binarize Image (Enhance Contrast for Clean Scans)",
|
||||
"embedFullFontsLabel": "Embed Full Fonts (Larger file, better compatibility)",
|
||||
"whitelistPresetLabel": "Character Whitelist Preset",
|
||||
"whitelistNone": "None (All characters)",
|
||||
"whitelistAlphanumeric": "Alphanumeric + Basic Punctuation",
|
||||
"whitelistNumbersCurrency": "Numbers + Currency Symbols",
|
||||
"whitelistLettersOnly": "Letters Only (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Numbers Only (0-9)",
|
||||
"whitelistInvoice": "Invoice/Receipt (Numbers, $, ., -, /)",
|
||||
"whitelistForms": "Forms (Alphanumeric + Common Symbols)",
|
||||
"whitelistCustom": "Custom...",
|
||||
"whitelistHelp": "Only these characters will be recognized. Leave empty for all characters.",
|
||||
"whitelistInputLabel": "Character Whitelist (Optional)",
|
||||
"whitelistInputPlaceholder": "e.g., abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "Start OCR",
|
||||
"progressInitializing": "Initializing...",
|
||||
"resultsTitle": "OCR Complete",
|
||||
"resultsDescription": "Your searchable PDF is ready. You can also copy or download the extracted text below.",
|
||||
"copyToClipboard": "Copy to Clipboard",
|
||||
"downloadTxt": "Download as .txt",
|
||||
"downloadSearchablePdf": "Download Searchable PDF",
|
||||
"statusPrefix": "Status: {{status}}",
|
||||
"availabilityInvalidConfig": "This deployment does not expose any valid OCR languages. Rebuild it with VITE_TESSERACT_AVAILABLE_LANGUAGES set to valid Tesseract codes.",
|
||||
"availabilityBundles": "This deployment bundles OCR for: {{languages}}.",
|
||||
"noLanguagesAvailable": "No OCR languages are available in this deployment.",
|
||||
"noLanguagesTitle": "No Languages Selected",
|
||||
"noLanguagesMessage": "Please select at least one language for OCR.",
|
||||
"noFileTitle": "No File",
|
||||
"noFileMessage": "Please upload a PDF file first.",
|
||||
"languageUnavailableTitle": "OCR Language Not Available",
|
||||
"ocrErrorTitle": "OCR Error",
|
||||
"ocrErrorMessage": "An error occurred during the OCR process. The worker may have failed to load. Please try again.",
|
||||
"howItWorksTitle": "How it works:",
|
||||
"extractTextLabel": "Extract Text:",
|
||||
"extractTextDescription": "Uses Tesseract OCR to recognize text from scanned images or PDFs.",
|
||||
"searchableOutputLabel": "Searchable Output:",
|
||||
"searchableOutputDescription": "Creates a new PDF with an invisible text layer, making your document fully searchable while preserving the original appearance.",
|
||||
"characterFilteringLabel": "Character Filtering:",
|
||||
"characterFilteringDescription": "Use whitelists to filter out unwanted characters and improve accuracy for specific document types (invoices, forms, etc.).",
|
||||
"multiLanguageSupportLabel": "Multi-language Support:",
|
||||
"multiLanguageSupportDescription": "Select multiple languages for documents containing mixed language content."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Alternate & Mix Pages",
|
||||
"subtitle": "Merge PDFs by alternating pages from each PDF. Preserves Bookmarks."
|
||||
"subtitle": "Merge PDFs by alternating pages from each PDF. Preserves Bookmarks.",
|
||||
"retainPageLabels": "Keep original page labels from each file",
|
||||
"retainPageLabelsHint": "Off (default): the merged PDF uses natural page numbering 1–N. On: each file's original page labels are preserved (may produce duplicate labels)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Duplex Collate",
|
||||
"subtitle": "Reorder a PDF scanned as two blocks (all fronts, then all backs) into proper front/back order.",
|
||||
"totalPagesLabel": "Total pages:",
|
||||
"splitAfterPageLabel": "Split after page",
|
||||
"splitAfterPagePlaceholder": "e.g. 50",
|
||||
"backBlockOrderLabel": "Back block order",
|
||||
"backBlockReverseOption": "Reverse back block (common for flipped stacks)",
|
||||
"backBlockKeepOption": "Keep back block as-is",
|
||||
"autoSplitButton": "Auto-detect split (half)",
|
||||
"exportGroupedLabel": "Export grouped files by original document length",
|
||||
"pagesPerDocumentLabel": "Pages per original document",
|
||||
"groupedHelp": "If enabled, output is a ZIP containing one PDF per grouped document.",
|
||||
"collateButton": "Collate PDF",
|
||||
"invalidFileTitle": "Invalid File",
|
||||
"invalidFileMessage": "Please select a PDF file.",
|
||||
"loadingPdf": "Loading PDF...",
|
||||
"loadErrorMessage": "Failed to load PDF file.",
|
||||
"fileMeta": "{{size}} - {{count}} pages",
|
||||
"oddPageWarning": "Odd page count ({{count}}). A duplex scan should have an even number of pages; you may have a missing or extra page.",
|
||||
"previewSummary": "Front block: {{frontCount}} page(s), back block: {{backCount}} page(s). Output: {{outputCount}} page(s), in front/back sequence.",
|
||||
"previewMismatchWarning": "Front and back block lengths differ ({{frontCount}} front vs {{backCount}} back). The {{extraCount}} extra page(s) on the longer side will be appended unpaired at the end.",
|
||||
"missingFileTitle": "Missing File",
|
||||
"missingFileMessage": "Please upload a PDF with at least 2 pages before processing.",
|
||||
"invalidSplitTitle": "Invalid Split Point",
|
||||
"invalidSplitMessage": "Split point must be between page 1 and page {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "Uneven Blocks",
|
||||
"unevenConfirmMessage": "The front block has {{frontCount}} page(s) and the back block has {{backCount}} page(s).\nThis usually means a page was scanned twice or is missing.\n\nThe {{extraCount}} unpaired page(s) will be appended at the end.\n\nContinue anyway?",
|
||||
"invalidGroupTitle": "Invalid Group Size",
|
||||
"invalidGroupMessage": "Please enter a valid number of pages per original document.",
|
||||
"collatingLoader": "Collating duplex scan...",
|
||||
"successMessage": "Collated PDF generated successfully.",
|
||||
"successGroupedMessage": "Collation complete. Generated {{fileCount}} grouped file(s).",
|
||||
"processErrorMessage": "Failed to collate PDF.",
|
||||
"howItWorksStep1Title": "Upload the scan",
|
||||
"howItWorksStep1": "Drop in the single PDF that holds all the front sides followed by all the back sides.",
|
||||
"howItWorksStep2Title": "Set the split point",
|
||||
"howItWorksStep2": "Mark where the front block ends, then choose whether the back block needs reversing.",
|
||||
"howItWorksStep3Title": "Collate and download",
|
||||
"howItWorksStep3": "Get one interleaved PDF, or a ZIP with a separate file per original document.",
|
||||
"faqOddPagesQuestion": "What if my scan has an odd number of pages?",
|
||||
"faqOddPagesAnswer": "A duplex scan should have an even page count. If it does not, a page was probably scanned twice or missed. The tool warns you before processing, and any unpaired pages are appended at the end so nothing is lost.",
|
||||
"faqBackOrderQuestion": "Why would I keep the back block as-is?",
|
||||
"faqBackOrderAnswer": "It depends on how the stack was fed for the second pass. Flipping the whole stack over produces back sides in reverse order, which is the default. If your scanner returned them in the same order as the fronts, choose to keep the block as-is."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Add Attachments",
|
||||
@@ -718,7 +1002,8 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF to Text",
|
||||
"subtitle": "Extract text from PDF files and save as plain text (.txt). Supports multiple files.",
|
||||
"note": "This tool works ONLY with digitally created PDFs. For scanned documents or image-based PDFs, use our OCR PDF tool instead.",
|
||||
"noteLabel": "Note:",
|
||||
"noteText": "This tool works ONLY with digitally created PDFs. For scanned documents or image-based PDFs, use our OCR PDF tool instead.",
|
||||
"convertButton": "Extract Text"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
@@ -726,8 +1011,9 @@
|
||||
"pageTitle": "Digital Signature PDF - Add Cryptographic Signature | BentoPDF",
|
||||
"subtitle": "Add a cryptographic digital signature to your PDF using X.509 certificates. Supports PKCS#12 (.pfx, .p12) and PEM formats. Your private key never leaves your browser.",
|
||||
"certificateSection": "Certificate",
|
||||
"uploadCert": "Upload certificate (.pfx, .p12)",
|
||||
"uploadCert": "Upload certificate (.pfx, .p12, .pem)",
|
||||
"certPassword": "Certificate Password",
|
||||
"privateKeyPassword": "Private Key Password",
|
||||
"certPasswordPlaceholder": "Enter certificate password",
|
||||
"certInfo": "Certificate Information",
|
||||
"certSubject": "Subject",
|
||||
@@ -740,8 +1026,71 @@
|
||||
"locationPlaceholder": "e.g., New York, USA",
|
||||
"contactInfo": "Contact Info",
|
||||
"contactPlaceholder": "e.g., [email protected]",
|
||||
"visibleSignature": "Visible Signature",
|
||||
"visibleSignatureDescription": "When enabled, a visible signature box appears on the PDF. You can upload an image/logo or add text. If neither is provided, the signer's name from the certificate will be shown automatically.",
|
||||
"signatureImage": "Signature Image/Logo (Optional)",
|
||||
"uploadSignatureImage": "Upload image (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Signature preview",
|
||||
"remove": "Remove",
|
||||
"page": "Page",
|
||||
"firstPage": "First page",
|
||||
"lastPage": "Last page",
|
||||
"allPages": "All pages",
|
||||
"customPage": "Custom page #",
|
||||
"pageNumber": "Page #",
|
||||
"xPosition": "X Position (left)",
|
||||
"yPosition": "Y Position (top)",
|
||||
"width": "Width",
|
||||
"height": "Height",
|
||||
"addTextOverlay": "Add text overlay",
|
||||
"text": "Text",
|
||||
"textPlaceholder": "e.g., Digitally signed by John Doe",
|
||||
"textColor": "Text Color",
|
||||
"fontSize": "Font Size",
|
||||
"invalidImageTitle": "Invalid Image",
|
||||
"invalidImageMessage": "Please select a PNG, JPG, or WebP image.",
|
||||
"invalidFileTitle": "Invalid File",
|
||||
"invalidFileMessage": "Please select a PDF file.",
|
||||
"invalidCertificateTitle": "Invalid Certificate",
|
||||
"invalidCertificateMessage": "Please select a .pfx, .p12, or .pem certificate file.",
|
||||
"certificateLoaded": "Certificate loaded",
|
||||
"certificateUnlocked": "Certificate unlocked",
|
||||
"failedParsePem": "Failed to parse PEM file",
|
||||
"enterPasswordToUnlock": "Enter password to unlock",
|
||||
"invalidPasswordOrCertificate": "Invalid password or certificate",
|
||||
"incorrectPassword": "Incorrect password",
|
||||
"failedParseCertificate": "Failed to parse certificate",
|
||||
"missingDataTitle": "Missing Data",
|
||||
"missingDataMessage": "Please upload both a PDF and a valid certificate.",
|
||||
"applyingSignature": "Applying digital signature...",
|
||||
"signingFailedTitle": "Signing Failed",
|
||||
"chainFetchFailed": "Failed to fetch certificate chain. This may be due to network issues or the certificate proxy being unavailable. Please check your internet connection and try again. If the issue persists, contact support.",
|
||||
"failedToSignPdf": "Failed to sign PDF: {{message}}",
|
||||
"defaultSignatureText": "Digitally signed by {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} pages",
|
||||
"howToStep1Title": "Upload PDF",
|
||||
"howToStep1Text": "Select the PDF document you want to sign",
|
||||
"howToStep2Title": "Upload Certificate",
|
||||
"howToStep2Text": "Provide your .pfx or .p12 certificate file and password",
|
||||
"howToStep3Title": "Sign & Download",
|
||||
"howToStep3Text": "Apply the digital signature and download your signed PDF",
|
||||
"relatedEncryptDesc": "Password protect your PDF",
|
||||
"relatedDecryptDesc": "Remove PDF password",
|
||||
"relatedFlattenDesc": "Make annotations permanent",
|
||||
"relatedSanitizeDesc": "Remove hidden data",
|
||||
"relatedPermissionsDesc": "Set PDF permissions",
|
||||
"faqWhatIsQuestion": "What is a digital signature?",
|
||||
"faqWhatIsAnswer": "A digital signature is a cryptographic mechanism that verifies the authenticity and integrity of a document. Unlike a drawn signature, it uses public key cryptography (X.509 certificates) to prove the signer's identity.",
|
||||
"faqFormatsQuestion": "What certificate formats are supported?",
|
||||
"faqFormatsAnswer": "We support PKCS#12 format certificates (.pfx, .p12) which contain both your certificate and private key in a single encrypted file. These are commonly issued by certificate authorities.",
|
||||
"faqPrivateKeyQuestion": "Is my private key safe?",
|
||||
"faqPrivateKeyAnswer": "Yes! All processing happens entirely in your browser. Your certificate, private key, and PDF files never leave your device or get uploaded to any server.",
|
||||
"faqValidReadersQuestion": "Will the signature be valid in PDF readers?",
|
||||
"faqValidReadersAnswer": "Yes, the tool creates standard PKCS#7 detached signatures that are recognized by all major PDF viewers. For full validation, use a certificate from a trusted Certificate Authority.",
|
||||
"applySignature": "Apply Digital Signature",
|
||||
"successMessage": "PDF signed successfully! The signature can be verified in any PDF reader."
|
||||
"successMessage": "PDF signed successfully! The signature can be verified in any PDF reader.",
|
||||
"internetRequiredTitle": "Internet connection required",
|
||||
"internetRequiredDescription": "Signing may need to fetch certificate chain information from your certificate issuer's server to validate the signature."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validate PDF Signature",
|
||||
@@ -755,7 +1104,7 @@
|
||||
"tsaSectionTitle": "Timestamp Server (TSA)",
|
||||
"selectTsa": "Select a TSA server",
|
||||
"applyTimestamp": "Apply Timestamp",
|
||||
"successMessage": "PDF timestamped successfully! The timestamp can be verified in Adobe Acrobat and other PDF readers."
|
||||
"successMessage": "PDF timestamped successfully! The timestamp can be verified in any PDF reader."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email to PDF",
|
||||
@@ -830,7 +1179,113 @@
|
||||
"templateLoaded": "Template \"{{name}}\" loaded.",
|
||||
"failedLoadTemplate": "Failed to load template.",
|
||||
"noSettings": "No configurable settings for this node.",
|
||||
"advancedSettings": "Advanced Settings"
|
||||
"advancedSettings": "Advanced Settings",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "PDF Input",
|
||||
"description": "Upload one or more PDF files"
|
||||
},
|
||||
"download": {
|
||||
"name": "Download",
|
||||
"description": "Download as PDF or ZIP automatically"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "No PDFs connected to {{node}} node",
|
||||
"noPdfInputs": "No PDFs in input",
|
||||
"expectedPdfInput": "Expected PDF input",
|
||||
"failedToRenderPage": "Failed to render page {{page}}",
|
||||
"failedToGetCanvasContext": "Failed to get canvas context for page {{page}}",
|
||||
"failedToRenderPageToImage": "Failed to render page {{page}} to image",
|
||||
"noPagesProcessed": "No pages were processed",
|
||||
"cpdfNotConfigured": "CoherentPDF is not configured. Please configure it in Advanced Settings.",
|
||||
"workerError": "Worker error: {{message}}",
|
||||
"alternateMergeWorkerError": "Alternate merge worker error: {{message}}",
|
||||
"noPdfFilesUploaded": "No PDF files uploaded in PDF Input node",
|
||||
"failedToLoadFile": "Failed to load \"{{file}}\" - file may be corrupted",
|
||||
"noImagesUploaded": "No images uploaded in Image Input node",
|
||||
"noWordDocsUploaded": "No documents uploaded in Word Input node",
|
||||
"noExcelUploaded": "No spreadsheets uploaded in Excel Input node",
|
||||
"noPowerPointUploaded": "No presentations uploaded in PowerPoint Input node",
|
||||
"noCbzUploaded": "No comic archives uploaded in CBZ Input node",
|
||||
"noEmailUploaded": "No email files uploaded in Email Input node",
|
||||
"noEpubUploaded": "No EPUB files uploaded in EPUB Input node",
|
||||
"noFb2Uploaded": "No FB2 files uploaded in FB2 Input node",
|
||||
"noJsonUploaded": "No JSON files uploaded in JSON Input node",
|
||||
"noMarkdownUploaded": "No Markdown files uploaded in Markdown Input node",
|
||||
"noMobiUploaded": "No MOBI files uploaded in MOBI Input node",
|
||||
"noOdgUploaded": "No ODG files uploaded in ODG Input node",
|
||||
"noPagesUploaded": "No Pages files uploaded in Pages Input node",
|
||||
"noPubUploaded": "No PUB files uploaded in PUB Input node",
|
||||
"noSvgUploaded": "No SVG files uploaded in SVG Input node",
|
||||
"noTextUploaded": "No text files uploaded in Text Input node",
|
||||
"noVsdUploaded": "No Visio files uploaded in VSD Input node",
|
||||
"noWpdUploaded": "No WPD files uploaded in WPD Input node",
|
||||
"noWpsUploaded": "No WPS files uploaded in WPS Input node",
|
||||
"noXmlUploaded": "No XML files uploaded in XML Input node",
|
||||
"noXpsUploaded": "No XPS files uploaded in XPS Input node",
|
||||
"alternateMergeNeedsTwo": "Alternate Merge needs at least two PDFs connected to its input",
|
||||
"cropMarginsExceed": "Crop margins exceed page dimensions. Reduce crop values.",
|
||||
"digitalSignNoCertificate": "No certificate loaded in Digital Sign node",
|
||||
"encryptUserPasswordRequired": "User password is required for encryption",
|
||||
"extractImagesNoneFound": "No images found in any of the connected PDFs",
|
||||
"invertColorsFailedReadImage": "Failed to read image data",
|
||||
"overlayRequiresPdf": "Overlay node requires an overlay PDF input.",
|
||||
"pdfToCsvNoTables": "No tables found in PDF",
|
||||
"pdfToXlsxNoTables": "No tables found in {{file}}",
|
||||
"posterizeFailedTileCanvas": "Failed to get tile canvas context",
|
||||
"redactNoText": "Redact: No text specified to redact",
|
||||
"removeBlankPagesAllBlank": "All pages are blank",
|
||||
"svgFailedToConvert": "Failed to convert SVG",
|
||||
"svgFailedToLoad": "Failed to load SVG",
|
||||
"timestampFailed": "Failed to timestamp using TSA {{tsa}}: {{message}}",
|
||||
"noOutputNodes": "No output nodes found. Add a Download node to complete your workflow.",
|
||||
"circularDependency": "Circular dependency detected in workflow. Please remove any loops between nodes.",
|
||||
"encryptOrdering": "The Encrypt node feeds into \"{{target}}\", which may fail on encrypted data. Move Encrypt to just before the output node.",
|
||||
"invalidWorkflowFile": "Invalid workflow file: missing nodes or connections array.",
|
||||
"storageQuotaExceeded": "Failed to save workflow: storage quota exceeded. Try deleting old templates.",
|
||||
"failedToImport": "Failed to import workflow: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Advanced Features Settings",
|
||||
"description": "Configure external processing modules to enable advanced PDF features. These modules are optional and licensed separately.",
|
||||
"status": {
|
||||
"testing": "Testing...",
|
||||
"customOverride": "Custom Override",
|
||||
"preConfigured": "Pre-configured",
|
||||
"notConfigured": "Not Configured"
|
||||
},
|
||||
"preconfiguredTitle": "Pre-configured and ready to use.",
|
||||
"preconfiguredDescription": "Advanced processing modules are loaded automatically from CDN. You can override the URLs below if you need to use a custom source (e.g., for air-gapped or self-hosted deployments).",
|
||||
"usingDefault": "Using default: {{url}}",
|
||||
"pymupdfSubtitle": "Document Processing Engine",
|
||||
"pymupdfFeatures": "Enables: PDF to Text, Markdown, SVG, DOCX, Excel • Extract Images/Tables • Format Conversion",
|
||||
"testButton": "Test",
|
||||
"recommendedLabel": "Recommended:",
|
||||
"copyTitle": "Copy to clipboard",
|
||||
"ghostscriptSubtitle": "PDF/A Conversion Engine",
|
||||
"ghostscriptFeatures": "Enables: PDF/A-1b, PDF/A-2b, PDF/A-3b Conversion • Font to Outline",
|
||||
"cpdfSubtitle": "Bookmarks & Metadata Engine",
|
||||
"cpdfFeatures": "Enables: Split by Bookmarks • Edit Bookmarks • PDF Metadata",
|
||||
"saveConfiguration": "Save Configuration",
|
||||
"savingConfiguration": "Saving configuration...",
|
||||
"savedTitle": "Saved",
|
||||
"savedMessage": "Configuration saved successfully!",
|
||||
"errorTitle": "Error",
|
||||
"failedSave": "Failed to save configuration: {{message}}",
|
||||
"emptyUrlTitle": "Empty URL",
|
||||
"emptyUrlMessage": "Please enter a URL to test.",
|
||||
"testSuccessTitle": "Success",
|
||||
"connectionSuccess": "Connection to {{package}} successful!",
|
||||
"connectionFailedTitle": "Connection Failed",
|
||||
"connectionFailedMessage": "Could not connect to the URL.",
|
||||
"resetDefaults": "Reset to Defaults",
|
||||
"resetTitle": "Reset",
|
||||
"resetWithDefaults": "Custom overrides cleared. Pre-configured defaults are active.",
|
||||
"resetNoDefaults": "All configurations and cached modules have been cleared.",
|
||||
"licenseTitle": "License Notice:",
|
||||
"licenseDescription": "The external modules (PyMuPDF, Ghostscript, CoherentPDF) are licensed under AGPL-3.0 or similar copyleft licenses. By configuring and using these modules, you agree to their respective license terms. BentoPDF is compatible with any Ghostscript WASM and PyMuPDF WASM implementation that follows the expected interface."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "PDF Overlay",
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "Contacto",
|
||||
"licensing": "Licencias",
|
||||
"allTools": "Todas las Herramientas",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Abrir menú principal",
|
||||
"language": "Idioma"
|
||||
"language": "Idioma",
|
||||
"searchLanguage": "Buscar idioma…",
|
||||
"noLanguagesFound": "No se encontraron idiomas"
|
||||
},
|
||||
"donation": {
|
||||
"message": "¿Te encanta BentoPDF? ¡Ayúdanos a mantenerlo gratis y de código abierto!",
|
||||
@@ -95,6 +98,18 @@
|
||||
"webpImages": "Imágenes WebP"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Cómo funciona",
|
||||
"step1Title": "Subir archivo",
|
||||
"step1": "Haz clic o arrastra tu archivo aquí",
|
||||
"step2Title": "Procesar",
|
||||
"step2": "Haz clic en el botón de procesar",
|
||||
"step3Title": "Descargar",
|
||||
"step3": "Guarda tu archivo procesado al instante"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Herramientas PDF relacionadas"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Procesando..."
|
||||
},
|
||||
@@ -120,6 +135,10 @@
|
||||
"resetToDefaults": "Restaurar Valores Predeterminados",
|
||||
"fullWidthMode": "Modo de Ancho Completo",
|
||||
"fullWidthDescription": "Usa el ancho completo de la pantalla para todas las herramientas en lugar de un contenedor centrado",
|
||||
"compactMode": "Modo compacto",
|
||||
"compactModeDescription": "Mostrar herramientas como lista compacta en lugar de tarjetas",
|
||||
"advancedSettings": "Configuración avanzada",
|
||||
"advancedSettingsDescription": "Configurar módulos de procesamiento externos (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "La configuración se guarda automáticamente",
|
||||
"clickToSet": "Haz clic para establecer",
|
||||
"pressKeys": "Presiona teclas...",
|
||||
@@ -166,6 +185,7 @@
|
||||
"faq": {
|
||||
"title": "Preguntas",
|
||||
"questions": "Frecuentes",
|
||||
"sectionTitle": "Preguntas frecuentes",
|
||||
"isFree": {
|
||||
"question": "¿BentoPDF es realmente gratis?",
|
||||
"answer": "Sí, absolutamente. Todas las herramientas en BentoPDF son 100% gratuitas, sin límites de archivos, sin registro y sin marcas de agua. Creemos que todos merecen acceso a herramientas PDF simples y potentes sin un muro de pago."
|
||||
@@ -196,9 +216,8 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "¿Usan cookies o análisis para rastrearme?",
|
||||
"answer": "Nos preocupamos por tu privacidad. BentoPDF no rastrea información personal. Usamos Simple Analytics únicamente para ver recuentos de visitas anónimas. Esto significa que podemos saber cuántos usuarios visitan nuestro sitio, pero nunca sabemos quién eres. Simple Analytics cumple completamente con GDPR y respeta tu privacidad."
|
||||
},
|
||||
"sectionTitle": "Preguntas frecuentes"
|
||||
"answer": "No. BentoPDF no te rastrea en absoluto. No usamos cookies, analíticas ni scripts de seguimiento, ni siquiera en el sitio web en vivo bentopdf.com. Nunca sabemos quién eres ni qué haces con las herramientas."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Lo que Nuestros",
|
||||
@@ -251,11 +270,14 @@
|
||||
"add": "Agregar",
|
||||
"remove": "Remover",
|
||||
"loading": "Cargando...",
|
||||
"loadingPageCount": "Cargando páginas...",
|
||||
"error": "Error",
|
||||
"success": "Éxito",
|
||||
"file": "Archivo",
|
||||
"files": "Archivos",
|
||||
"close": "Cerrar"
|
||||
"close": "Cerrar",
|
||||
"convert": "Convertir",
|
||||
"unknownError": "Error desconocido"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -328,9 +350,12 @@
|
||||
"download": "Descargar:",
|
||||
"downloadSelected": "Descargar Seleccionados",
|
||||
"exportPdf": "Exportar PDF",
|
||||
"uploadPdfFiles": "Seleccionar Archivos PDF",
|
||||
"dragAndDrop": "Arrastra y suelta archivos PDF aquí, o haz clic para seleccionar",
|
||||
"uploadPdfFiles": "Seleccionar archivos PDF o imágenes",
|
||||
"dragAndDrop": "Arrastra y suelta archivos PDF o imágenes aquí, o haz clic para seleccionar",
|
||||
"selectFiles": "Seleccionar Archivos",
|
||||
"dropToAdd": "Suelta archivos PDF o imágenes para añadir",
|
||||
"convertingImages": "Convirtiendo imágenes a PDF...",
|
||||
"failedToConvertImages": "No se pudieron convertir las imágenes a PDF.",
|
||||
"renderingPages": "Renderizando páginas...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplicar esta página",
|
||||
@@ -349,15 +374,6 @@
|
||||
"error": "Error",
|
||||
"failedToLoad": "Error al cargar"
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Cómo funciona",
|
||||
"step1": "Haz clic o arrastra tu archivo aquí",
|
||||
"step2": "Haz clic en el botón de procesar",
|
||||
"step3": "Guarda tu archivo procesado al instante"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Herramientas PDF relacionadas"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "Herramientas PDF",
|
||||
"subtitle": "Selecciona una herramienta para comenzar"
|
||||
|
||||
+537
-25
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Convertir desde PDF",
|
||||
"organizeManage": "Organizar y Gestionar",
|
||||
"optimizeRepair": "Optimizar y Reparar",
|
||||
"securePdf": "Asegurar PDF"
|
||||
"securePdf": "Asegurar PDF",
|
||||
"input": "Entrada",
|
||||
"output": "Salida"
|
||||
},
|
||||
"convertToPdf": "Convertir a PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "Multiherramienta PDF",
|
||||
"subtitle": "Fusionar, Dividir, Organizar, Eliminar, Rotar, Agregar Páginas en Blanco, Extraer y Duplicar en una interfaz unificada."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Fusionar PDF",
|
||||
"subtitle": "Combina múltiples PDFs en un solo archivo. Preserva Marcadores."
|
||||
"subtitle": "Combina múltiples PDFs en un solo archivo. Preserva Marcadores.",
|
||||
"retainPageLabels": "Conservar las etiquetas de página originales de cada archivo",
|
||||
"retainPageLabelsHint": "Desactivado (predeterminado): el PDF combinado usa numeración natural 1–N. Activado: se conservan las etiquetas de página originales de cada archivo (puede producir etiquetas duplicadas)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Dividir PDF",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "Editor PDF",
|
||||
"subtitle": "Anotar, resaltar, redactar, comentar, agregar formas/imágenes, buscar y ver PDFs."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "Editar texto PDF",
|
||||
"subtitle": "Haz clic en cualquier párrafo y edítalo directamente con reajuste de texto en vivo, fuentes y estilos.",
|
||||
"saved": "¡PDF guardado correctamente! ({{size}} KB)",
|
||||
"failedToLoad": "No se pudo cargar el editor de texto PDF.",
|
||||
"howToUpload": "Subir PDF",
|
||||
"howToClick": "Haz clic en un párrafo",
|
||||
"howToRestyle": "Cambia el estilo de todo",
|
||||
"relatedPdfEditor": "Anota y resalta PDF",
|
||||
"relatedSignPdf": "Dibuja, escribe o sube una firma",
|
||||
"relatedWatermark": "Estampa texto o imágenes",
|
||||
"relatedStamps": "Coloca sellos en las páginas",
|
||||
"relatedCompress": "Reduce el tamaño del archivo",
|
||||
"relatedOrganizeName": "Organizar PDF",
|
||||
"relatedOrganize": "Reordena y gestiona páginas",
|
||||
"open": "Abrir",
|
||||
"export": "Exportar",
|
||||
"filterAll": "Todo",
|
||||
"filterText": "Texto",
|
||||
"filterImages": "Imágenes",
|
||||
"filterShapes": "Formas",
|
||||
"addText": "Añadir texto",
|
||||
"langAuto": "Automático",
|
||||
"change": "Cambiar",
|
||||
"ignore": "Ignorar",
|
||||
"next": "Siguiente",
|
||||
"replace": "Reemplazar",
|
||||
"replaceAll": "Reemplazar todo",
|
||||
"emptyState": "Abre un PDF para editar su texto, imágenes y formas.",
|
||||
"choosePdf": "Elegir un PDF…",
|
||||
"font": "Fuente",
|
||||
"systemFonts": "Fuentes del sistema",
|
||||
"color": "Color",
|
||||
"alignment": "Alineación",
|
||||
"style": "Estilo",
|
||||
"lists": "Listas",
|
||||
"outline": "Contorno",
|
||||
"spacing": "Espaciado",
|
||||
"direction": "Dirección",
|
||||
"dirAuto": "Automático",
|
||||
"pathStroke": "Contorno del trazado",
|
||||
"tipBackToUpload": "Volver a la subida",
|
||||
"tipOpenAnotherPdf": "Abrir otro PDF",
|
||||
"tipExportS": "Exportar (⌘S)",
|
||||
"tipUndoZ": "Deshacer (⌘Z)",
|
||||
"tipRedoZ": "Rehacer (⇧⌘Z)",
|
||||
"tipFileDetails": "Detalles del archivo",
|
||||
"tipEditExistingContent": "Editar contenido existente",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "Qué modifica la herramienta Editar: limita el alcance en páginas con mucho contenido",
|
||||
"tipClickThePageToAddATextBox": "Haz clic en la página para añadir un cuadro de texto",
|
||||
"tipSpellCheckLanguage": "Idioma del corrector ortográfico",
|
||||
"tipFindAndReplace": "Buscar y reemplazar",
|
||||
"tipAddAnImage": "Añadir una imagen",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Copiar el texto de esta página en orden de lectura",
|
||||
"tipCheckTheSpellingOfThisPage": "Revisar la ortografía de esta página",
|
||||
"tipShowOrHideTheFormatPanel": "Mostrar u ocultar el panel de formato",
|
||||
"phReplaceWith": "Reemplazar con",
|
||||
"tipAddToYourDictionary": "Añadir al diccionario",
|
||||
"tipClose": "Cerrar",
|
||||
"phFind": "Buscar",
|
||||
"tipPreviousMatch": "Coincidencia anterior",
|
||||
"tipNextMatch": "Coincidencia siguiente",
|
||||
"tipRotateLeft90": "Girar 90° a la izquierda",
|
||||
"tipRotateRight90": "Girar 90° a la derecha",
|
||||
"tipFlipHorizontal": "Voltear horizontalmente",
|
||||
"tipFlipVertical": "Voltear verticalmente",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Reemplazar esta imagen conservando su posición",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Texto alternativo para accesibilidad (PDF etiquetados)",
|
||||
"tipBringToFront": "Traer al frente",
|
||||
"tipSendToBack": "Enviar al fondo",
|
||||
"tipDuplicate": "Duplicar",
|
||||
"tipDelete": "Eliminar",
|
||||
"tipAlignLeftEdges": "Alinear bordes izquierdos",
|
||||
"tipAlignHorizontalCenters": "Centrar horizontalmente",
|
||||
"tipAlignRightEdges": "Alinear bordes derechos",
|
||||
"tipAlignTops": "Alinear bordes superiores",
|
||||
"tipAlignVerticalCenters": "Centrar verticalmente",
|
||||
"tipAlignBottoms": "Alinear bordes inferiores",
|
||||
"tipDistributeHorizontally": "Distribuir horizontalmente",
|
||||
"tipDistributeVertically": "Distribuir verticalmente",
|
||||
"tipFontSize": "Tamaño de fuente",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Listar las fuentes instaladas en este dispositivo (Chromium)",
|
||||
"tipCustomTextColor": "Color de texto personalizado",
|
||||
"tipAlignLeft": "Alinear a la izquierda",
|
||||
"tipAlignCenter": "Centrar",
|
||||
"tipAlignRight": "Alinear a la derecha",
|
||||
"tipJustify": "Justificar",
|
||||
"tipBold": "Negrita",
|
||||
"tipItalic": "Cursiva",
|
||||
"tipUnderline": "Subrayado",
|
||||
"tipStrikethrough": "Tachado",
|
||||
"tipSuperscript": "Superíndice",
|
||||
"tipSubscript": "Subíndice",
|
||||
"tipToggleBulletedItem": "Alternar viñeta",
|
||||
"tipToggleNumberedItem": "Alternar elemento numerado",
|
||||
"tipNumberedListMarkerStyle": "Estilo de marcador de listas numeradas",
|
||||
"tipDecreaseListIndentTab": "Reducir sangría (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Aumentar sangría (Tab)",
|
||||
"tipTextOutlineColor": "Color del contorno del texto",
|
||||
"tipOutlineWidth0None": "Grosor del contorno (0 = ninguno)",
|
||||
"tipFromContent": "Del contenido",
|
||||
"tipLeftToRight": "De izquierda a derecha",
|
||||
"tipRightToLeft": "De derecha a izquierda",
|
||||
"tipStrokeColor": "Color del trazo",
|
||||
"tipStrokeWidth": "Grosor del trazo",
|
||||
"tipZoomPresets": "Ajustes de zoom",
|
||||
"tipZoomOut": "Alejar",
|
||||
"tipZoomIn": "Acercar",
|
||||
"tipFitPage": "Ajustar página",
|
||||
"tipPreviousPage": "Página anterior",
|
||||
"tipTypeAPageNumberAndPressEnter": "Escribe un número de página y pulsa Intro",
|
||||
"tipNextPage": "Página siguiente",
|
||||
"tipDocumentProperties": "Propiedades del documento",
|
||||
"tipHideBar": "Ocultar barra",
|
||||
"tipShowBar": "Mostrar barra"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG a PDF",
|
||||
"subtitle": "Crea un PDF desde imágenes JPG, JPEG y JPEG2000 (JP2/JPX)."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplicar y Organizar",
|
||||
"subtitle": "Duplica, reordena y elimina páginas."
|
||||
"subtitle": "Duplica, reordena y elimina páginas.",
|
||||
"saveChanges": "Guardar cambios"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Eliminar Páginas",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Editar Marcadores",
|
||||
"subtitle": "Agrega, edita, importa, elimina y extrae marcadores PDF."
|
||||
"subtitle": "Agrega, edita, importa, elimina y extrae marcadores PDF.",
|
||||
"autoExtractExisting": "Extraer automáticamente marcadores existentes",
|
||||
"importSectionTitle": "O importar marcadores",
|
||||
"csvFormat": "Formato CSV: título,página,nivel",
|
||||
"jsonFormat": "Formato JSON",
|
||||
"uploadCsvAction": "Haz clic para subir CSV",
|
||||
"uploadJsonAction": "Haz clic para subir JSON",
|
||||
"orDragHere": "o arrastra aquí"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Tabla de Contenidos",
|
||||
"subtitle": "Genera una página de tabla de contenidos desde los marcadores PDF."
|
||||
"subtitle": "Genera una página de tabla de contenidos desde los marcadores PDF.",
|
||||
"titleLabel": "Título de TDC",
|
||||
"fontSize": "Tamaño de fuente",
|
||||
"fontFamily": "Familia tipográfica",
|
||||
"addBookmark": "Añadir marcador para la página de TDC",
|
||||
"generateButton": "Generar tabla de contenidos",
|
||||
"selectPdfFirst": "Por favor selecciona primero un archivo PDF.",
|
||||
"statusReadingFileMainThread": "Leyendo archivo (Hilo principal)...",
|
||||
"statusGenerating": "Generando tabla de contenidos...",
|
||||
"errorReadingFileWithMessage": "Error al leer archivo: {{message}}",
|
||||
"successGeneratedDownloadStarted": "¡Tabla de contenidos generada con éxito! Descarga iniciada.",
|
||||
"workerErrorWithMessage": "Error: {{message}}",
|
||||
"workerErrorOccurred": "Ocurrió un error en el worker. Consulta la consola para más detalles."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Números de Página",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Agrega sellos de imagen a tu PDF usando la barra de herramientas de anotación.",
|
||||
"usernameLabel": "Nombre de Usuario del Sello",
|
||||
"usernamePlaceholder": "Ingresa tu nombre (para sellos)",
|
||||
"usernameHint": "Este nombre aparecerá en los sellos que crees."
|
||||
"usernameHint": "Este nombre aparecerá en los sellos que crees.",
|
||||
"saveButton": "Guardar PDF sellado"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Eliminar Anotaciones",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Rellenar Formularios PDF",
|
||||
"subtitle": "Rellena formularios directamente en el navegador. También soporta formularios XFA."
|
||||
"subtitle": "Rellena formularios directamente en el navegador. También soporta formularios XFA.",
|
||||
"uploadHint": "Sube un PDF con campos de formulario. Rellénalos directamente en el visor de abajo, luego haz clic en el botón para guardar y descargar el formulario completado. También admite formularios XFA.",
|
||||
"xfaNoteTitle": "Nota sobre formularios XFA:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) es un formato heredado solo compatible con ciertos visores de PDF como BentoPDF y Firefox. Si abres un PDF XFA en otro software y ves páginas en blanco o ningún campo de formulario, significa que ese visor no admite XFA. Para ver y rellenar correctamente formularios XFA, usa Firefox o el llenador de formularios de BentoPDF."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Crear Formulario PDF",
|
||||
"subtitle": "Crea formularios PDF rellenables con campos de texto arrastrables."
|
||||
"subtitle": "Crea formularios PDF rellenables con campos de texto arrastrables.",
|
||||
"orSeparator": "O",
|
||||
"createBlankPdf": "Crear PDF en blanco"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Eliminar Páginas en Blanco",
|
||||
@@ -255,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Texto a PDF",
|
||||
"subtitle": "Convierte un archivo de texto plano en un PDF."
|
||||
"subtitle": "Convierte un archivo de texto plano en un PDF.",
|
||||
"uploadFiles": "Subir archivos",
|
||||
"typeText": "Escribir texto",
|
||||
"acceptedFormats": "Archivos de texto (.txt)",
|
||||
"fontFamily": "Familia tipográfica",
|
||||
"fontSize": "Tamaño de fuente",
|
||||
"textColor": "Color del texto",
|
||||
"pageSize": "Tamaño de página",
|
||||
"rtlAutoDetectNote": "Los idiomas RTL (árabe, urdu, persa, etc.) se detectan automáticamente y la dirección del texto se ajusta.",
|
||||
"createButton": "Crear PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON a PDF",
|
||||
"subtitle": "Convierte archivos JSON a formato PDF."
|
||||
"subtitle": "Convierte archivos JSON a formato PDF.",
|
||||
"noteLabel": "Nota:",
|
||||
"noteText": "Solo se admiten archivos JSON creados por la herramienta PDF a JSON. Los archivos JSON estándar de otras herramientas no funcionarán.",
|
||||
"acceptedFormats": "Múltiples archivos JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Por favor selecciona al menos 1 archivo JSON",
|
||||
"selectedReady": "{{count}} archivo(s) seleccionado(s). ¡Listo para convertir!",
|
||||
"readingFiles": "Leyendo archivos (Hilo principal)...",
|
||||
"converting": "Convirtiendo archivos JSON a PDF...",
|
||||
"readError": "Error al leer archivos: {{message}}",
|
||||
"creatingZip": "Creando archivo ZIP...",
|
||||
"success": "¡Archivos JSON convertidos a PDF correctamente! Descarga ZIP iniciada.",
|
||||
"zipError": "Error al crear ZIP: {{message}}",
|
||||
"workerError": "Error de Worker: {{message}}",
|
||||
"getStarted": "Selecciona archivos JSON para comenzar"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF a JPG",
|
||||
"subtitle": "Convierte cada página PDF en una imagen JPG."
|
||||
"subtitle": "Convierte cada página PDF en una imagen JPG.",
|
||||
"imageQuality": "Calidad de imagen",
|
||||
"imageQualityExplanation": "Mayor calidad = mayor tamaño de archivo",
|
||||
"alert": {
|
||||
"invalidFile": "Archivo no válido",
|
||||
"invalidFileExplanation": "Por favor sube un archivo PDF.",
|
||||
"noFile": "Sin archivo",
|
||||
"noFileExplanation": "Por favor sube primero un archivo PDF.",
|
||||
"conversionSuccess": "¡PDF convertido a JPG correctamente!",
|
||||
"conversionError": "Error al convertir PDF a JPG. El archivo podría estar dañado."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Convirtiendo a JPG..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF a PNG",
|
||||
"subtitle": "Convierte cada página PDF en una imagen PNG."
|
||||
"subtitle": "Convierte cada página PDF en una imagen PNG.",
|
||||
"imageScale": "Escala de imagen",
|
||||
"imageScaleExplanation": "Mayor escala = mejor calidad pero archivo más grande",
|
||||
"alert": {
|
||||
"invalidFile": "Archivo no válido",
|
||||
"invalidFileExplanation": "Por favor sube un archivo PDF.",
|
||||
"noFile": "Sin archivo",
|
||||
"noFileExplanation": "Por favor sube primero un archivo PDF.",
|
||||
"conversionSuccess": "¡PDF convertido a PNG correctamente!",
|
||||
"conversionError": "Error al convertir PDF a PNG. El archivo podría estar dañado."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Convirtiendo a PNG..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF a WebP",
|
||||
"subtitle": "Convierte cada página PDF en una imagen WebP."
|
||||
"subtitle": "Convierte cada página PDF en una imagen WebP.",
|
||||
"imageQuality": "Calidad de imagen",
|
||||
"imageQualityExplanation": "Mayor calidad = mayor tamaño de archivo",
|
||||
"alert": {
|
||||
"invalidFile": "Archivo no válido",
|
||||
"invalidFileExplanation": "Por favor sube un archivo PDF.",
|
||||
"noFile": "Sin archivo",
|
||||
"noFileExplanation": "Por favor sube primero un archivo PDF.",
|
||||
"conversionSuccess": "¡PDF convertido a WebP correctamente!",
|
||||
"conversionError": "Error al convertir PDF a WebP. El archivo podría estar dañado."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Convirtiendo a WebP..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF a BMP",
|
||||
"subtitle": "Convierte cada página PDF en una imagen BMP."
|
||||
"subtitle": "Convierte cada página PDF en una imagen BMP.",
|
||||
"alert": {
|
||||
"invalidFile": "Archivo no válido",
|
||||
"invalidFileExplanation": "Por favor sube un archivo PDF.",
|
||||
"noFile": "Sin archivo",
|
||||
"noFileExplanation": "Por favor sube primero un archivo PDF.",
|
||||
"conversionSuccess": "¡PDF convertido a BMP correctamente!",
|
||||
"conversionError": "Error al convertir PDF a BMP. El archivo podría estar dañado."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Convirtiendo a BMP..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF a TIFF",
|
||||
@@ -287,7 +508,15 @@
|
||||
"colorMode": "Modo de color",
|
||||
"multiPage": "Guardar como TIFF multipágina (archivo único)",
|
||||
"loadingVips": "Cargando procesador de imágenes...",
|
||||
"converting": "Convirtiendo a TIFF..."
|
||||
"converting": "Convirtiendo a TIFF...",
|
||||
"alert": {
|
||||
"invalidFile": "Archivo no válido",
|
||||
"invalidFileExplanation": "Por favor sube un archivo PDF.",
|
||||
"noFile": "Sin archivo",
|
||||
"noFileExplanation": "Por favor sube primero un archivo PDF.",
|
||||
"conversionSuccess": "¡PDF convertido a TIFF correctamente!",
|
||||
"conversionError": "Error al convertir PDF a TIFF. El archivo podría estar dañado."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF a CBZ",
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF a JSON",
|
||||
"subtitle": "Convierte archivos PDF a formato JSON."
|
||||
"subtitle": "Convierte archivos PDF a formato JSON.",
|
||||
"convertButton": "Convertir a JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Por favor selecciona al menos 1 archivo PDF",
|
||||
"selectedReady": "{{count}} archivo(s) seleccionado(s). ¡Listo para convertir!",
|
||||
"checkingEncrypted": "Comprobando PDF cifrados...",
|
||||
"readingFiles": "Leyendo archivos (Hilo principal)...",
|
||||
"converting": "Convirtiendo PDF a JSON...",
|
||||
"readError": "Error al leer archivos: {{message}}",
|
||||
"creatingZip": "Creando archivo ZIP...",
|
||||
"success": "¡PDF convertidos a JSON correctamente! Descarga ZIP iniciada.",
|
||||
"zipError": "Error al crear ZIP: {{message}}",
|
||||
"workerError": "Error de Worker: {{message}}",
|
||||
"getStarted": "Selecciona archivos PDF para comenzar"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Hace que un PDF sea buscable y copiable."
|
||||
"subtitle": "Hace que un PDF sea buscable y copiable.",
|
||||
"languagesInDocument": "Idiomas en el documento",
|
||||
"searchLanguagesPlaceholder": "Buscar idiomas...",
|
||||
"selectedLabel": "Seleccionado:",
|
||||
"none": "Ninguno",
|
||||
"advancedSettingsSummary": "Configuración avanzada (recomendada para mejorar la precisión)",
|
||||
"resolutionLabel": "Resolución",
|
||||
"resolutionStandard": "Estándar (192 DPI)",
|
||||
"resolutionHigh": "Alta (288 DPI)",
|
||||
"resolutionUltra": "Ultra (384 DPI)",
|
||||
"binarizeLabel": "Binarizar imagen (mejorar contraste para escaneos limpios)",
|
||||
"embedFullFontsLabel": "Incrustar fuentes completas (archivo más grande, mejor compatibilidad)",
|
||||
"whitelistPresetLabel": "Preajuste de lista blanca de caracteres",
|
||||
"whitelistNone": "Ninguno (todos los caracteres)",
|
||||
"whitelistAlphanumeric": "Alfanumérico + Puntuación básica",
|
||||
"whitelistNumbersCurrency": "Números + Símbolos de moneda",
|
||||
"whitelistLettersOnly": "Solo letras (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Solo números (0-9)",
|
||||
"whitelistInvoice": "Factura/Recibo (números, $, ., -, /)",
|
||||
"whitelistForms": "Formularios (alfanumérico + símbolos comunes)",
|
||||
"whitelistCustom": "Personalizado...",
|
||||
"whitelistHelp": "Solo se reconocerán estos caracteres. Deja vacío para todos los caracteres.",
|
||||
"whitelistInputLabel": "Lista blanca de caracteres (opcional)",
|
||||
"whitelistInputPlaceholder": "p. ej., abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "Iniciar OCR",
|
||||
"progressInitializing": "Inicializando...",
|
||||
"resultsTitle": "OCR completo",
|
||||
"resultsDescription": "Tu PDF buscable está listo. También puedes copiar o descargar el texto extraído a continuación.",
|
||||
"copyToClipboard": "Copiar al portapapeles",
|
||||
"downloadTxt": "Descargar como .txt",
|
||||
"downloadSearchablePdf": "Descargar PDF buscable",
|
||||
"statusPrefix": "Estado: {{status}}",
|
||||
"availabilityInvalidConfig": "Esta implementación no expone idiomas OCR válidos. Reconstrúyela con VITE_TESSERACT_AVAILABLE_LANGUAGES configurado con códigos Tesseract válidos.",
|
||||
"availabilityBundles": "Esta implementación incluye OCR para: {{languages}}.",
|
||||
"noLanguagesAvailable": "No hay idiomas OCR disponibles en esta implementación.",
|
||||
"noLanguagesTitle": "Ningún idioma seleccionado",
|
||||
"noLanguagesMessage": "Por favor selecciona al menos un idioma para OCR.",
|
||||
"noFileTitle": "Sin archivo",
|
||||
"noFileMessage": "Por favor sube primero un archivo PDF.",
|
||||
"languageUnavailableTitle": "Idioma OCR no disponible",
|
||||
"ocrErrorTitle": "Error de OCR",
|
||||
"ocrErrorMessage": "Ocurrió un error durante el proceso OCR. Es posible que el worker no se haya cargado. Inténtalo de nuevo.",
|
||||
"howItWorksTitle": "Cómo funciona:",
|
||||
"extractTextLabel": "Extraer texto:",
|
||||
"extractTextDescription": "Usa Tesseract OCR para reconocer texto en imágenes escaneadas o PDF.",
|
||||
"searchableOutputLabel": "Salida buscable:",
|
||||
"searchableOutputDescription": "Crea un nuevo PDF con una capa de texto invisible, haciendo tu documento totalmente buscable y conservando la apariencia original.",
|
||||
"characterFilteringLabel": "Filtrado de caracteres:",
|
||||
"characterFilteringDescription": "Usa listas blancas para filtrar caracteres no deseados y mejorar la precisión para tipos específicos de documentos (facturas, formularios, etc.).",
|
||||
"multiLanguageSupportLabel": "Soporte multilingüe:",
|
||||
"multiLanguageSupportDescription": "Selecciona varios idiomas para documentos que contengan contenido en idiomas mixtos."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Alternar y Mezclar Páginas",
|
||||
"subtitle": "Fusiona PDFs alternando páginas de cada PDF. Preserva Marcadores."
|
||||
"subtitle": "Fusiona PDFs alternando páginas de cada PDF. Preserva Marcadores.",
|
||||
"retainPageLabels": "Conservar las etiquetas de página originales de cada archivo",
|
||||
"retainPageLabelsHint": "Desactivado (predeterminado): el PDF combinado usa numeración natural 1–N. Activado: se conservan las etiquetas de página originales de cada archivo (puede producir etiquetas duplicadas)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Intercalar escaneo a doble cara",
|
||||
"subtitle": "Reordena un PDF escaneado en dos bloques (primero todos los anversos, luego todos los reversos) en el orden anverso/reverso correcto.",
|
||||
"totalPagesLabel": "Páginas totales:",
|
||||
"splitAfterPageLabel": "Dividir después de la página",
|
||||
"splitAfterPagePlaceholder": "p. ej. 50",
|
||||
"backBlockOrderLabel": "Orden del bloque de reversos",
|
||||
"backBlockReverseOption": "Invertir el bloque de reversos (habitual si se giró la pila)",
|
||||
"backBlockKeepOption": "Mantener el bloque de reversos tal cual",
|
||||
"autoSplitButton": "Detectar división automáticamente (mitad)",
|
||||
"exportGroupedLabel": "Exportar archivos agrupados según la longitud del documento original",
|
||||
"pagesPerDocumentLabel": "Páginas por documento original",
|
||||
"groupedHelp": "Si se activa, el resultado es un ZIP con un PDF por cada documento agrupado.",
|
||||
"collateButton": "Intercalar PDF",
|
||||
"invalidFileTitle": "Archivo no válido",
|
||||
"invalidFileMessage": "Selecciona un archivo PDF.",
|
||||
"loadingPdf": "Cargando PDF...",
|
||||
"loadErrorMessage": "No se pudo cargar el archivo PDF.",
|
||||
"fileMeta": "{{size}} - {{count}} páginas",
|
||||
"oddPageWarning": "Número de páginas impar ({{count}}). Un escaneo a doble cara debería tener un número par de páginas; puede que falte una página o sobre una.",
|
||||
"previewSummary": "Bloque de anversos: {{frontCount}} página(s), bloque de reversos: {{backCount}} página(s). Resultado: {{outputCount}} página(s), en secuencia anverso/reverso.",
|
||||
"previewMismatchWarning": "Los bloques de anversos y reversos tienen longitudes distintas ({{frontCount}} anversos frente a {{backCount}} reversos). Las {{extraCount}} página(s) sobrantes del bloque más largo se añadirán sin pareja al final.",
|
||||
"missingFileTitle": "Falta el archivo",
|
||||
"missingFileMessage": "Sube un PDF con al menos 2 páginas antes de procesarlo.",
|
||||
"invalidSplitTitle": "Punto de división no válido",
|
||||
"invalidSplitMessage": "El punto de división debe estar entre la página 1 y la página {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "Bloques desiguales",
|
||||
"unevenConfirmMessage": "El bloque de anversos tiene {{frontCount}} página(s) y el de reversos {{backCount}} página(s).\nNormalmente esto significa que una página se escaneó dos veces o que falta alguna.\n\nLas {{extraCount}} página(s) sin pareja se añadirán al final.\n\n¿Continuar de todos modos?",
|
||||
"invalidGroupTitle": "Tamaño de grupo no válido",
|
||||
"invalidGroupMessage": "Introduce un número válido de páginas por documento original.",
|
||||
"collatingLoader": "Intercalando el escaneo a doble cara...",
|
||||
"successMessage": "PDF intercalado generado correctamente.",
|
||||
"successGroupedMessage": "Intercalado completado. Se han generado {{fileCount}} archivo(s) agrupado(s).",
|
||||
"processErrorMessage": "No se pudo intercalar el PDF.",
|
||||
"howItWorksStep1Title": "Sube el escaneo",
|
||||
"howItWorksStep1": "Suelta el PDF único que contiene todos los anversos seguidos de todos los reversos.",
|
||||
"howItWorksStep2Title": "Define el punto de división",
|
||||
"howItWorksStep2": "Indica dónde termina el bloque de anversos y elige si el bloque de reversos debe invertirse.",
|
||||
"howItWorksStep3Title": "Intercala y descarga",
|
||||
"howItWorksStep3": "Obtén un PDF intercalado o un ZIP con un archivo independiente por cada documento original.",
|
||||
"faqOddPagesQuestion": "¿Y si mi escaneo tiene un número impar de páginas?",
|
||||
"faqOddPagesAnswer": "Un escaneo a doble cara debería tener un número par de páginas. Si no es así, probablemente se escaneó una página dos veces o se omitió alguna. La herramienta te avisa antes de procesar y las páginas sin pareja se añaden al final para que no se pierda nada.",
|
||||
"faqBackOrderQuestion": "¿Por qué querría mantener el bloque de reversos tal cual?",
|
||||
"faqBackOrderAnswer": "Depende de cómo se colocó la pila en la segunda pasada. Girar la pila entera produce reversos en orden inverso, que es la opción predeterminada. Si tu escáner los devolvió en el mismo orden que los anversos, elige mantener el bloque tal cual."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Agregar Adjuntos",
|
||||
@@ -660,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF a Texto",
|
||||
"subtitle": "Extrae texto de archivos PDF y guarda como texto plano (.txt). Soporta múltiples archivos.",
|
||||
"note": "Esta herramienta funciona SOLO con PDFs creados digitalmente. Para documentos escaneados o PDFs basados en imágenes, usa nuestra herramienta OCR PDF en su lugar.",
|
||||
"convertButton": "Extraer Texto"
|
||||
"noteLabel": "Nota:",
|
||||
"noteText": "Esta herramienta funciona SOLO con PDF creados digitalmente. Para documentos escaneados o PDF basados en imágenes, usa nuestra herramienta OCR PDF.",
|
||||
"convertButton": "Extraer Texto",
|
||||
"note": "Esta herramienta funciona SOLO con PDFs creados digitalmente. Para documentos escaneados o PDFs basados en imágenes, usa nuestra herramienta OCR PDF en su lugar."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Firma Digital PDF",
|
||||
"pageTitle": "Firma Digital PDF - Agregar Firma Criptográfica | BentoPDF",
|
||||
"subtitle": "Agrega una firma digital criptográfica a tu PDF usando certificados X.509. Soporta formatos PKCS#12 (.pfx, .p12) y PEM. Tu clave privada nunca sale de tu navegador.",
|
||||
"certificateSection": "Certificado",
|
||||
"uploadCert": "Cargar certificado (.pfx, .p12)",
|
||||
"uploadCert": "Cargar certificado (.pfx, .p12, .pem)",
|
||||
"certPassword": "Contraseña del Certificado",
|
||||
"privateKeyPassword": "Contraseña de clave privada",
|
||||
"certPasswordPlaceholder": "Ingresa la contraseña del certificado",
|
||||
"certInfo": "Información del Certificado",
|
||||
"certSubject": "Sujeto",
|
||||
@@ -682,8 +1025,71 @@
|
||||
"locationPlaceholder": "ej., Madrid, España",
|
||||
"contactInfo": "Información de Contacto",
|
||||
"contactPlaceholder": "ej., [email protected]",
|
||||
"visibleSignature": "Firma visible",
|
||||
"visibleSignatureDescription": "Cuando está habilitado, aparece un cuadro de firma visible en el PDF. Puedes subir una imagen/logo o añadir texto. Si no se proporciona ninguno, se mostrará automáticamente el nombre del firmante del certificado.",
|
||||
"signatureImage": "Imagen/Logo de firma (opcional)",
|
||||
"uploadSignatureImage": "Subir imagen (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Vista previa de firma",
|
||||
"remove": "Eliminar",
|
||||
"page": "Página",
|
||||
"firstPage": "Primera página",
|
||||
"lastPage": "Última página",
|
||||
"allPages": "Todas las páginas",
|
||||
"customPage": "Página personalizada #",
|
||||
"pageNumber": "Página #",
|
||||
"xPosition": "Posición X (izquierda)",
|
||||
"yPosition": "Posición Y (superior)",
|
||||
"width": "Ancho",
|
||||
"height": "Altura",
|
||||
"addTextOverlay": "Añadir superposición de texto",
|
||||
"text": "Texto",
|
||||
"textPlaceholder": "p. ej., Firmado digitalmente por Juan Pérez",
|
||||
"textColor": "Color del texto",
|
||||
"fontSize": "Tamaño de fuente",
|
||||
"invalidImageTitle": "Imagen no válida",
|
||||
"invalidImageMessage": "Por favor selecciona una imagen PNG, JPG o WebP.",
|
||||
"invalidFileTitle": "Archivo no válido",
|
||||
"invalidFileMessage": "Por favor selecciona un archivo PDF.",
|
||||
"invalidCertificateTitle": "Certificado no válido",
|
||||
"invalidCertificateMessage": "Por favor selecciona un archivo de certificado .pfx, .p12 o .pem.",
|
||||
"certificateLoaded": "Certificado cargado",
|
||||
"certificateUnlocked": "Certificado desbloqueado",
|
||||
"failedParsePem": "No se pudo analizar el archivo PEM",
|
||||
"enterPasswordToUnlock": "Introduce la contraseña para desbloquear",
|
||||
"invalidPasswordOrCertificate": "Contraseña o certificado no válidos",
|
||||
"incorrectPassword": "Contraseña incorrecta",
|
||||
"failedParseCertificate": "No se pudo analizar el certificado",
|
||||
"missingDataTitle": "Datos faltantes",
|
||||
"missingDataMessage": "Por favor sube un PDF y un certificado válido.",
|
||||
"applyingSignature": "Aplicando firma digital...",
|
||||
"signingFailedTitle": "Error al firmar",
|
||||
"chainFetchFailed": "No se pudo obtener la cadena de certificados. Esto puede deberse a problemas de red o a que el proxy de certificados no está disponible. Comprueba tu conexión a Internet e inténtalo de nuevo. Si el problema persiste, contacta con soporte.",
|
||||
"failedToSignPdf": "No se pudo firmar el PDF: {{message}}",
|
||||
"defaultSignatureText": "Firmado digitalmente por {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} páginas",
|
||||
"howToStep1Title": "Subir PDF",
|
||||
"howToStep1Text": "Selecciona el documento PDF que quieres firmar",
|
||||
"howToStep2Title": "Subir certificado",
|
||||
"howToStep2Text": "Proporciona tu archivo de certificado .pfx o .p12 y la contraseña",
|
||||
"howToStep3Title": "Firmar y descargar",
|
||||
"howToStep3Text": "Aplica la firma digital y descarga tu PDF firmado",
|
||||
"relatedEncryptDesc": "Proteger tu PDF con contraseña",
|
||||
"relatedDecryptDesc": "Eliminar contraseña del PDF",
|
||||
"relatedFlattenDesc": "Hacer las anotaciones permanentes",
|
||||
"relatedSanitizeDesc": "Eliminar datos ocultos",
|
||||
"relatedPermissionsDesc": "Establecer permisos del PDF",
|
||||
"faqWhatIsQuestion": "¿Qué es una firma digital?",
|
||||
"faqWhatIsAnswer": "Una firma digital es un mecanismo criptográfico que verifica la autenticidad e integridad de un documento. A diferencia de una firma dibujada, utiliza criptografía de clave pública (certificados X.509) para demostrar la identidad del firmante.",
|
||||
"faqFormatsQuestion": "¿Qué formatos de certificado se admiten?",
|
||||
"faqFormatsAnswer": "Soportamos certificados en formato PKCS#12 (.pfx, .p12), que contienen tanto el certificado como la clave privada en un único archivo cifrado. Estos suelen ser emitidos por autoridades de certificación.",
|
||||
"faqPrivateKeyQuestion": "¿Mi clave privada está segura?",
|
||||
"faqPrivateKeyAnswer": "¡Sí! Todo el procesamiento ocurre completamente en tu navegador. Tu certificado, clave privada y archivos PDF nunca salen de tu dispositivo ni se suben a ningún servidor.",
|
||||
"faqValidReadersQuestion": "¿La firma será válida en los lectores de PDF?",
|
||||
"faqValidReadersAnswer": "Sí, la herramienta crea firmas separadas PKCS#7 estándar reconocidas por todos los principales lectores de PDF. Para una validación completa, usa un certificado de una autoridad de certificación de confianza.",
|
||||
"applySignature": "Aplicar Firma Digital",
|
||||
"successMessage": "¡PDF firmado exitosamente! La firma se puede verificar en cualquier lector de PDF."
|
||||
"successMessage": "¡PDF firmado exitosamente! La firma se puede verificar en cualquier lector de PDF.",
|
||||
"internetRequiredTitle": "Se requiere conexión a Internet",
|
||||
"internetRequiredDescription": "La firma puede necesitar obtener información de la cadena de certificados del servidor de tu emisor para validar la firma."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validar Firma PDF",
|
||||
@@ -697,7 +1103,7 @@
|
||||
"tsaSectionTitle": "Servidor de marca de tiempo (TSA)",
|
||||
"selectTsa": "Seleccionar un servidor TSA",
|
||||
"applyTimestamp": "Aplicar marca de tiempo",
|
||||
"successMessage": "¡PDF sellado con marca de tiempo! La marca puede verificarse en Adobe Acrobat y otros lectores PDF."
|
||||
"successMessage": "¡PDF sellado con marca de tiempo correctamente! La marca puede verificarse en cualquier lector de PDF."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email a PDF",
|
||||
@@ -772,7 +1178,113 @@
|
||||
"templateLoaded": "Plantilla \"{{name}}\" cargada.",
|
||||
"failedLoadTemplate": "Error al cargar la plantilla.",
|
||||
"noSettings": "No hay opciones configurables para este nodo.",
|
||||
"advancedSettings": "Configuración avanzada"
|
||||
"advancedSettings": "Configuración avanzada",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "Entrada PDF",
|
||||
"description": "Sube uno o más archivos PDF"
|
||||
},
|
||||
"download": {
|
||||
"name": "Descargar",
|
||||
"description": "Descargar como PDF o ZIP automáticamente"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "No hay PDFs conectados al nodo {{node}}",
|
||||
"noPdfInputs": "No hay PDFs en la entrada",
|
||||
"expectedPdfInput": "Se esperaba una entrada PDF",
|
||||
"failedToRenderPage": "Error al renderizar la página {{page}}",
|
||||
"failedToGetCanvasContext": "No se pudo obtener el contexto del canvas para la página {{page}}",
|
||||
"failedToRenderPageToImage": "No se pudo renderizar la página {{page}} como imagen",
|
||||
"noPagesProcessed": "No se procesó ninguna página",
|
||||
"cpdfNotConfigured": "CoherentPDF no está configurado. Configúralo en Ajustes avanzados.",
|
||||
"workerError": "Error en el worker: {{message}}",
|
||||
"alternateMergeWorkerError": "Error en el worker de fusión alternada: {{message}}",
|
||||
"noPdfFilesUploaded": "No se subieron archivos PDF en el nodo de entrada PDF",
|
||||
"failedToLoadFile": "No se pudo cargar \"{{file}}\": el archivo puede estar dañado",
|
||||
"noImagesUploaded": "No se subieron imágenes en el nodo de entrada de imágenes",
|
||||
"noWordDocsUploaded": "No se subieron documentos en el nodo de entrada Word",
|
||||
"noExcelUploaded": "No se subieron hojas de cálculo en el nodo de entrada Excel",
|
||||
"noPowerPointUploaded": "No se subieron presentaciones en el nodo de entrada PowerPoint",
|
||||
"noCbzUploaded": "No se subieron archivos de cómic en el nodo de entrada CBZ",
|
||||
"noEmailUploaded": "No se subieron archivos de correo en el nodo de entrada Email",
|
||||
"noEpubUploaded": "No se subieron archivos EPUB en el nodo de entrada EPUB",
|
||||
"noFb2Uploaded": "No se subieron archivos FB2 en el nodo de entrada FB2",
|
||||
"noJsonUploaded": "No se subieron archivos JSON en el nodo de entrada JSON",
|
||||
"noMarkdownUploaded": "No se subieron archivos Markdown en el nodo de entrada Markdown",
|
||||
"noMobiUploaded": "No se subieron archivos MOBI en el nodo de entrada MOBI",
|
||||
"noOdgUploaded": "No se subieron archivos ODG en el nodo de entrada ODG",
|
||||
"noPagesUploaded": "No se subieron archivos Pages en el nodo de entrada Pages",
|
||||
"noPubUploaded": "No se subieron archivos PUB en el nodo de entrada PUB",
|
||||
"noSvgUploaded": "No se subieron archivos SVG en el nodo de entrada SVG",
|
||||
"noTextUploaded": "No se subieron archivos de texto en el nodo de entrada de texto",
|
||||
"noVsdUploaded": "No se subieron archivos Visio en el nodo de entrada VSD",
|
||||
"noWpdUploaded": "No se subieron archivos WPD en el nodo de entrada WPD",
|
||||
"noWpsUploaded": "No se subieron archivos WPS en el nodo de entrada WPS",
|
||||
"noXmlUploaded": "No se subieron archivos XML en el nodo de entrada XML",
|
||||
"noXpsUploaded": "No se subieron archivos XPS en el nodo de entrada XPS",
|
||||
"alternateMergeNeedsTwo": "Alternar y mezclar necesita al menos dos PDFs conectados a su entrada",
|
||||
"cropMarginsExceed": "Los márgenes de recorte exceden las dimensiones de la página. Reduce los valores.",
|
||||
"digitalSignNoCertificate": "No se cargó ningún certificado en el nodo de firma digital",
|
||||
"encryptUserPasswordRequired": "Se requiere contraseña de usuario para el cifrado",
|
||||
"extractImagesNoneFound": "No se encontraron imágenes en los PDFs conectados",
|
||||
"invertColorsFailedReadImage": "Error al leer los datos de la imagen",
|
||||
"overlayRequiresPdf": "El nodo de superposición requiere una entrada PDF de superposición.",
|
||||
"pdfToCsvNoTables": "No se encontraron tablas en el PDF",
|
||||
"pdfToXlsxNoTables": "No se encontraron tablas en {{file}}",
|
||||
"posterizeFailedTileCanvas": "No se pudo obtener el contexto del canvas del mosaico",
|
||||
"redactNoText": "Censura: no se especificó texto para censurar",
|
||||
"removeBlankPagesAllBlank": "Todas las páginas están en blanco",
|
||||
"svgFailedToConvert": "Error al convertir SVG",
|
||||
"svgFailedToLoad": "Error al cargar SVG",
|
||||
"timestampFailed": "Error al sellar el tiempo usando TSA {{tsa}}: {{message}}",
|
||||
"noOutputNodes": "No se encontraron nodos de salida. Añade un nodo de descarga para completar tu workflow.",
|
||||
"circularDependency": "Dependencia circular detectada en el workflow. Elimina cualquier bucle entre nodos.",
|
||||
"encryptOrdering": "El nodo de cifrado se conecta a \"{{target}}\", que puede fallar con datos cifrados. Mueve el cifrado justo antes del nodo de salida.",
|
||||
"invalidWorkflowFile": "Archivo de workflow inválido: faltan los arrays de nodos o conexiones.",
|
||||
"storageQuotaExceeded": "Error al guardar el workflow: cuota de almacenamiento excedida. Intenta eliminar plantillas antiguas.",
|
||||
"failedToImport": "Error al importar el workflow: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Configuración de funciones avanzadas",
|
||||
"description": "Configura módulos de procesamiento externos para habilitar funciones avanzadas de PDF. Estos módulos son opcionales y tienen licencia separada.",
|
||||
"status": {
|
||||
"testing": "Probando...",
|
||||
"customOverride": "Anulación personalizada",
|
||||
"preConfigured": "Preconfigurado",
|
||||
"notConfigured": "No configurado"
|
||||
},
|
||||
"preconfiguredTitle": "Preconfigurado y listo para usar.",
|
||||
"preconfiguredDescription": "Los módulos avanzados de procesamiento se cargan automáticamente desde CDN. Puedes anular las URL siguientes si necesitas usar una fuente personalizada (p. ej., para implementaciones air-gapped o autoalojadas).",
|
||||
"usingDefault": "Usando predeterminado: {{url}}",
|
||||
"pymupdfSubtitle": "Motor de procesamiento de documentos",
|
||||
"pymupdfFeatures": "Habilita: PDF a Texto, Markdown, SVG, DOCX, Excel • Extraer Imágenes/Tablas • Conversión de formato",
|
||||
"testButton": "Probar",
|
||||
"recommendedLabel": "Recomendado:",
|
||||
"copyTitle": "Copiar al portapapeles",
|
||||
"ghostscriptSubtitle": "Motor de conversión PDF/A",
|
||||
"ghostscriptFeatures": "Habilita: Conversión PDF/A-1b, PDF/A-2b, PDF/A-3b • Fuente a contorno",
|
||||
"cpdfSubtitle": "Motor de marcadores y metadatos",
|
||||
"cpdfFeatures": "Habilita: Dividir por marcadores • Editar marcadores • Metadatos PDF",
|
||||
"saveConfiguration": "Guardar configuración",
|
||||
"savingConfiguration": "Guardando configuración...",
|
||||
"savedTitle": "Guardado",
|
||||
"savedMessage": "¡Configuración guardada con éxito!",
|
||||
"errorTitle": "Error",
|
||||
"failedSave": "No se pudo guardar la configuración: {{message}}",
|
||||
"emptyUrlTitle": "URL vacía",
|
||||
"emptyUrlMessage": "Por favor introduce una URL para probar.",
|
||||
"testSuccessTitle": "Éxito",
|
||||
"connectionSuccess": "¡Conexión a {{package}} exitosa!",
|
||||
"connectionFailedTitle": "Conexión fallida",
|
||||
"connectionFailedMessage": "No se pudo conectar a la URL.",
|
||||
"resetDefaults": "Restablecer valores predeterminados",
|
||||
"resetTitle": "Restablecer",
|
||||
"resetWithDefaults": "Anulaciones personalizadas borradas. Los valores preconfigurados están activos.",
|
||||
"resetNoDefaults": "Se han borrado todas las configuraciones y módulos en caché.",
|
||||
"licenseTitle": "Aviso de licencia:",
|
||||
"licenseDescription": "Los módulos externos (PyMuPDF, Ghostscript, CoherentPDF) están licenciados bajo AGPL-3.0 o licencias copyleft similares. Al configurar y usar estos módulos, aceptas sus respectivos términos de licencia. BentoPDF es compatible con cualquier implementación WASM de Ghostscript y PyMuPDF que siga la interfaz esperada."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "Superposición de PDF",
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "Contact",
|
||||
"licensing": "Licence",
|
||||
"allTools": "Tous les outils",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Ouvrir le menu principal",
|
||||
"language": "Langue"
|
||||
"language": "Langue",
|
||||
"searchLanguage": "Rechercher une langue…",
|
||||
"noLanguagesFound": "Aucune langue trouvée"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Vous aimez BentoPDF ? Aidez-nous à le garder open source !",
|
||||
@@ -95,6 +98,18 @@
|
||||
"webpImages": "Images WebP"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Comment ça marche",
|
||||
"step1Title": "Téléverser le fichier",
|
||||
"step1": "Cliquez ou glissez votre fichier ici",
|
||||
"step2Title": "Traiter",
|
||||
"step2": "Cliquez sur le bouton de traitement",
|
||||
"step3Title": "Télécharger",
|
||||
"step3": "Enregistrez votre fichier traité instantanément"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Outils PDF associés"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Traitement en cours..."
|
||||
},
|
||||
@@ -120,6 +135,10 @@
|
||||
"resetToDefaults": "Rétablir les paramètres par défaut",
|
||||
"fullWidthMode": "Mode pleine largeur",
|
||||
"fullWidthDescription": "Utiliser toute la largeur de l’écran au lieu d’un affichage centré",
|
||||
"compactMode": "Mode compact",
|
||||
"compactModeDescription": "Afficher les outils sous forme de liste compacte au lieu de cartes",
|
||||
"advancedSettings": "Paramètres avancés",
|
||||
"advancedSettingsDescription": "Configurer les modules de traitement externes (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Les paramètres sont enregistrés automatiquement",
|
||||
"clickToSet": "Cliquez pour définir",
|
||||
"pressKeys": "Appuyez sur les touches...",
|
||||
@@ -166,6 +185,7 @@
|
||||
"faq": {
|
||||
"title": "Questions",
|
||||
"questions": "fréquentes",
|
||||
"sectionTitle": "Questions fréquemment posées",
|
||||
"isFree": {
|
||||
"question": "BentoPDF est-il vraiment gratuit ?",
|
||||
"answer": "Oui, totalement. Tous les outils BentoPDF sont 100 % gratuits, sans limite de fichiers, sans inscription et sans filigrane. Nous pensons que chacun doit avoir accès à des outils PDF simples et puissants, sans barrière payante."
|
||||
@@ -197,8 +217,7 @@
|
||||
"analytics": {
|
||||
"question": "Utilisez-vous des cookies ou des outils de suivi ?",
|
||||
"answer": "Nous respectons votre vie privée. BentoPDF utilise uniquement des statistiques anonymes pour connaître le nombre de visites, sans jamais identifier les utilisateurs."
|
||||
},
|
||||
"sectionTitle": "Questions fréquemment posées"
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Ce que disent",
|
||||
@@ -251,11 +270,14 @@
|
||||
"add": "Ajouter",
|
||||
"remove": "Retirer",
|
||||
"loading": "Chargement...",
|
||||
"loadingPageCount": "Chargement des pages…",
|
||||
"error": "Erreur",
|
||||
"success": "Succès",
|
||||
"file": "Fichier",
|
||||
"files": "Fichiers",
|
||||
"close": "Fermer"
|
||||
"close": "Fermer",
|
||||
"convert": "Convertir",
|
||||
"unknownError": "Erreur inconnue"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -328,9 +350,12 @@
|
||||
"download": "Téléchargement :",
|
||||
"downloadSelected": "Télécharger la sélection",
|
||||
"exportPdf": "Exporter en PDF",
|
||||
"uploadPdfFiles": "Sélectionner des fichiers PDF",
|
||||
"dragAndDrop": "Glissez-déposez vos fichiers PDF ici ou cliquez pour sélectionner",
|
||||
"uploadPdfFiles": "Sélectionner des fichiers PDF ou des images",
|
||||
"dragAndDrop": "Glissez-déposez vos fichiers PDF ou images ici, ou cliquez pour sélectionner",
|
||||
"selectFiles": "Sélectionner des fichiers",
|
||||
"dropToAdd": "Déposez des fichiers PDF ou images à ajouter",
|
||||
"convertingImages": "Conversion des images en PDF...",
|
||||
"failedToConvertImages": "Échec de la conversion des images en PDF.",
|
||||
"renderingPages": "Rendu des pages...",
|
||||
"actions": {
|
||||
"duplicatePage": "Dupliquer cette page",
|
||||
@@ -349,15 +374,6 @@
|
||||
"error": "Erreur",
|
||||
"failedToLoad": "Échec du chargement"
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Comment ça marche",
|
||||
"step1": "Cliquez ou glissez votre fichier ici",
|
||||
"step2": "Cliquez sur le bouton de traitement",
|
||||
"step3": "Enregistrez votre fichier traité instantanément"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Outils PDF associés"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "Outils PDF",
|
||||
"subtitle": "Sélectionnez un outil pour commencer"
|
||||
|
||||
+537
-25
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Convertir depuis le PDF",
|
||||
"organizeManage": "Organiser et gérer",
|
||||
"optimizeRepair": "Optimiser et réparer",
|
||||
"securePdf": "Sécuriser les PDF"
|
||||
"securePdf": "Sécuriser les PDF",
|
||||
"input": "Entrée",
|
||||
"output": "Sortie"
|
||||
},
|
||||
"convertToPdf": "Convertir en PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "Outil PDF tout-en-un",
|
||||
"subtitle": "Fusionner, scinder, organiser, supprimer, faire pivoter, ajouter des pages vierges, extraire et dupliquer dans une interface unifiée."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Fusionner des PDF",
|
||||
"subtitle": "Assembler plusieurs PDF en un seul fichier, tout en conservant les signets."
|
||||
"subtitle": "Assembler plusieurs PDF en un seul fichier, tout en conservant les signets.",
|
||||
"retainPageLabels": "Conserver les étiquettes de page d'origine de chaque fichier",
|
||||
"retainPageLabelsHint": "Désactivé (par défaut) : le PDF fusionné utilise une numérotation naturelle 1–N. Activé : les étiquettes de page d'origine de chaque fichier sont conservées (peut produire des étiquettes en double)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Scinder un PDF",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "Éditeur PDF",
|
||||
"subtitle": "Annoter, surligner, masquer, commenter, ajouter des formes ou images, rechercher et afficher des PDF."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "Modifier le texte d'un PDF",
|
||||
"subtitle": "Cliquer sur un paragraphe et le modifier directement, avec remise en page instantanée, polices et styles.",
|
||||
"saved": "PDF enregistré avec succès ! ({{size}} Ko)",
|
||||
"failedToLoad": "Impossible de charger l'éditeur de texte PDF.",
|
||||
"howToUpload": "Importer un PDF",
|
||||
"howToClick": "Cliquer sur un paragraphe",
|
||||
"howToRestyle": "Tout restyler",
|
||||
"relatedPdfEditor": "Annoter et surligner des PDF",
|
||||
"relatedSignPdf": "Dessiner, saisir ou importer une signature",
|
||||
"relatedWatermark": "Apposer du texte ou des images",
|
||||
"relatedStamps": "Placer des tampons sur les pages",
|
||||
"relatedCompress": "Réduire la taille du fichier",
|
||||
"relatedOrganizeName": "Organiser le PDF",
|
||||
"relatedOrganize": "Réorganiser et gérer les pages",
|
||||
"open": "Ouvrir",
|
||||
"export": "Exporter",
|
||||
"filterAll": "Tout",
|
||||
"filterText": "Texte",
|
||||
"filterImages": "Images",
|
||||
"filterShapes": "Formes",
|
||||
"addText": "Ajouter du texte",
|
||||
"langAuto": "Auto",
|
||||
"change": "Modifier",
|
||||
"ignore": "Ignorer",
|
||||
"next": "Suivant",
|
||||
"replace": "Remplacer",
|
||||
"replaceAll": "Tout remplacer",
|
||||
"emptyState": "Ouvrez un PDF pour en modifier le texte, les images et les formes.",
|
||||
"choosePdf": "Choisir un PDF…",
|
||||
"font": "Police",
|
||||
"systemFonts": "Polices système",
|
||||
"color": "Couleur",
|
||||
"alignment": "Alignement",
|
||||
"style": "Style",
|
||||
"lists": "Listes",
|
||||
"outline": "Contour",
|
||||
"spacing": "Espacement",
|
||||
"direction": "Direction",
|
||||
"dirAuto": "Auto",
|
||||
"pathStroke": "Contour du tracé",
|
||||
"tipBackToUpload": "Retour à l'import",
|
||||
"tipOpenAnotherPdf": "Ouvrir un autre PDF",
|
||||
"tipExportS": "Exporter (⌘S)",
|
||||
"tipUndoZ": "Annuler (⌘Z)",
|
||||
"tipRedoZ": "Rétablir (⇧⌘Z)",
|
||||
"tipFileDetails": "Détails du fichier",
|
||||
"tipEditExistingContent": "Modifier le contenu existant",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "Ce que l'outil Modifier affecte — restreindre la portée sur les pages chargées",
|
||||
"tipClickThePageToAddATextBox": "Cliquez sur la page pour ajouter une zone de texte",
|
||||
"tipSpellCheckLanguage": "Langue du correcteur orthographique",
|
||||
"tipFindAndReplace": "Rechercher et remplacer",
|
||||
"tipAddAnImage": "Ajouter une image",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Copier le texte de cette page dans l'ordre de lecture",
|
||||
"tipCheckTheSpellingOfThisPage": "Vérifier l'orthographe de cette page",
|
||||
"tipShowOrHideTheFormatPanel": "Afficher ou masquer le panneau de mise en forme",
|
||||
"phReplaceWith": "Remplacer par",
|
||||
"tipAddToYourDictionary": "Ajouter au dictionnaire",
|
||||
"tipClose": "Fermer",
|
||||
"phFind": "Rechercher",
|
||||
"tipPreviousMatch": "Occurrence précédente",
|
||||
"tipNextMatch": "Occurrence suivante",
|
||||
"tipRotateLeft90": "Rotation 90° à gauche",
|
||||
"tipRotateRight90": "Rotation 90° à droite",
|
||||
"tipFlipHorizontal": "Miroir horizontal",
|
||||
"tipFlipVertical": "Miroir vertical",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Remplacer cette image en conservant sa position",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Texte alternatif pour l'accessibilité (PDF balisés)",
|
||||
"tipBringToFront": "Mettre au premier plan",
|
||||
"tipSendToBack": "Mettre à l'arrière-plan",
|
||||
"tipDuplicate": "Dupliquer",
|
||||
"tipDelete": "Supprimer",
|
||||
"tipAlignLeftEdges": "Aligner les bords gauches",
|
||||
"tipAlignHorizontalCenters": "Centrer horizontalement",
|
||||
"tipAlignRightEdges": "Aligner les bords droits",
|
||||
"tipAlignTops": "Aligner les bords supérieurs",
|
||||
"tipAlignVerticalCenters": "Centrer verticalement",
|
||||
"tipAlignBottoms": "Aligner les bords inférieurs",
|
||||
"tipDistributeHorizontally": "Répartir horizontalement",
|
||||
"tipDistributeVertically": "Répartir verticalement",
|
||||
"tipFontSize": "Taille de police",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Lister les polices installées sur cet appareil (Chromium)",
|
||||
"tipCustomTextColor": "Couleur de texte personnalisée",
|
||||
"tipAlignLeft": "Aligner à gauche",
|
||||
"tipAlignCenter": "Centrer",
|
||||
"tipAlignRight": "Aligner à droite",
|
||||
"tipJustify": "Justifier",
|
||||
"tipBold": "Gras",
|
||||
"tipItalic": "Italique",
|
||||
"tipUnderline": "Souligné",
|
||||
"tipStrikethrough": "Barré",
|
||||
"tipSuperscript": "Exposant",
|
||||
"tipSubscript": "Indice",
|
||||
"tipToggleBulletedItem": "Activer la puce",
|
||||
"tipToggleNumberedItem": "Activer la numérotation",
|
||||
"tipNumberedListMarkerStyle": "Style de puce des listes numérotées",
|
||||
"tipDecreaseListIndentTab": "Diminuer le retrait (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Augmenter le retrait (Tab)",
|
||||
"tipTextOutlineColor": "Couleur du contour du texte",
|
||||
"tipOutlineWidth0None": "Épaisseur du contour (0 = aucune)",
|
||||
"tipFromContent": "À partir du contenu",
|
||||
"tipLeftToRight": "De gauche à droite",
|
||||
"tipRightToLeft": "De droite à gauche",
|
||||
"tipStrokeColor": "Couleur du trait",
|
||||
"tipStrokeWidth": "Épaisseur du trait",
|
||||
"tipZoomPresets": "Préréglages de zoom",
|
||||
"tipZoomOut": "Zoom arrière",
|
||||
"tipZoomIn": "Zoom avant",
|
||||
"tipFitPage": "Ajuster à la page",
|
||||
"tipPreviousPage": "Page précédente",
|
||||
"tipTypeAPageNumberAndPressEnter": "Saisissez un numéro de page et appuyez sur Entrée",
|
||||
"tipNextPage": "Page suivante",
|
||||
"tipDocumentProperties": "Propriétés du document",
|
||||
"tipHideBar": "Masquer la barre",
|
||||
"tipShowBar": "Afficher la barre"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG vers PDF",
|
||||
"subtitle": "Créer un PDF à partir d’une ou plusieurs images JPG."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Dupliquer et organiser",
|
||||
"subtitle": "Dupliquer, réorganiser et supprimer des pages."
|
||||
"subtitle": "Dupliquer, réorganiser et supprimer des pages.",
|
||||
"saveChanges": "Enregistrer les modifications"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Supprimer des pages",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Modifier les signets",
|
||||
"subtitle": "Ajouter, modifier, importer, supprimer et extraire des signets PDF."
|
||||
"subtitle": "Ajouter, modifier, importer, supprimer et extraire des signets PDF.",
|
||||
"autoExtractExisting": "Extraire automatiquement les signets existants",
|
||||
"importSectionTitle": "Ou importer des signets",
|
||||
"csvFormat": "Format CSV : titre,page,niveau",
|
||||
"jsonFormat": "Format JSON",
|
||||
"uploadCsvAction": "Cliquez pour téléverser CSV",
|
||||
"uploadJsonAction": "Cliquez pour téléverser JSON",
|
||||
"orDragHere": "ou glissez ici"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Table des matières",
|
||||
"subtitle": "Générer une table des matières à partir des signets du PDF."
|
||||
"subtitle": "Générer une table des matières à partir des signets du PDF.",
|
||||
"titleLabel": "Titre TDM",
|
||||
"fontSize": "Taille de police",
|
||||
"fontFamily": "Famille de polices",
|
||||
"addBookmark": "Ajouter un signet pour la page de TDM",
|
||||
"generateButton": "Générer la table des matières",
|
||||
"selectPdfFirst": "Veuillez d'abord sélectionner un fichier PDF.",
|
||||
"statusReadingFileMainThread": "Lecture du fichier (Thread principal)…",
|
||||
"statusGenerating": "Génération de la table des matières…",
|
||||
"errorReadingFileWithMessage": "Erreur de lecture du fichier : {{message}}",
|
||||
"successGeneratedDownloadStarted": "Table des matières générée avec succès ! Téléchargement démarré.",
|
||||
"workerErrorWithMessage": "Erreur : {{message}}",
|
||||
"workerErrorOccurred": "Une erreur de worker s'est produite. Vérifiez la console pour les détails."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Numéros de page",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Ajouter des tampons image via la barre d’annotations.",
|
||||
"usernameLabel": "Nom du tampon",
|
||||
"usernamePlaceholder": "Entrez votre nom (pour les tampons)",
|
||||
"usernameHint": "Ce nom apparaîtra sur les tampons que vous créez."
|
||||
"usernameHint": "Ce nom apparaîtra sur les tampons que vous créez.",
|
||||
"saveButton": "Enregistrer le PDF tamponné"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Supprimer les annotations",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Remplir un formulaire PDF",
|
||||
"subtitle": "Remplir des formulaires directement dans le navigateur, y compris les formulaires XFA."
|
||||
"subtitle": "Remplir des formulaires directement dans le navigateur, y compris les formulaires XFA.",
|
||||
"uploadHint": "Téléversez un PDF avec des champs de formulaire. Remplissez-les directement dans la visionneuse ci-dessous, puis cliquez sur le bouton pour enregistrer et télécharger le formulaire rempli. Prend également en charge les formulaires XFA.",
|
||||
"xfaNoteTitle": "Remarque sur les formulaires XFA :",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) est un format hérité uniquement pris en charge par certaines visionneuses PDF telles que BentoPDF et Firefox. Si vous ouvrez un PDF XFA dans un autre logiciel et voyez des pages blanches ou aucun champ de formulaire, cela signifie que la visionneuse ne prend pas en charge XFA. Pour afficher et remplir correctement les formulaires XFA, utilisez Firefox ou le remplisseur de formulaires de BentoPDF."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Créer un formulaire PDF",
|
||||
"subtitle": "Créer des formulaires PDF interactifs avec des champs glisser-déposer."
|
||||
"subtitle": "Créer des formulaires PDF interactifs avec des champs glisser-déposer.",
|
||||
"orSeparator": "OU",
|
||||
"createBlankPdf": "Créer un PDF vierge"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Supprimer les pages blanches",
|
||||
@@ -255,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Texte vers PDF",
|
||||
"subtitle": "Convertir un fichier texte en PDF."
|
||||
"subtitle": "Convertir un fichier texte en PDF.",
|
||||
"uploadFiles": "Téléverser des fichiers",
|
||||
"typeText": "Saisir le texte",
|
||||
"acceptedFormats": "Fichiers texte (.txt)",
|
||||
"fontFamily": "Famille de polices",
|
||||
"fontSize": "Taille de police",
|
||||
"textColor": "Couleur du texte",
|
||||
"pageSize": "Taille de page",
|
||||
"rtlAutoDetectNote": "Les langues RTL (arabe, ourdou, persan, etc.) sont détectées automatiquement et la direction du texte est ajustée.",
|
||||
"createButton": "Créer le PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON vers PDF",
|
||||
"subtitle": "Convertir des fichiers JSON en PDF."
|
||||
"subtitle": "Convertir des fichiers JSON en PDF.",
|
||||
"noteLabel": "Note :",
|
||||
"noteText": "Seuls les fichiers JSON créés par l'outil PDF vers JSON sont pris en charge. Les fichiers JSON standard provenant d'autres outils ne fonctionneront pas.",
|
||||
"acceptedFormats": "Plusieurs fichiers JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Veuillez sélectionner au moins 1 fichier JSON",
|
||||
"selectedReady": "{{count}} fichier(s) sélectionné(s). Prêt à convertir !",
|
||||
"readingFiles": "Lecture des fichiers (Thread principal)…",
|
||||
"converting": "Conversion des fichiers JSON en PDF…",
|
||||
"readError": "Erreur de lecture des fichiers : {{message}}",
|
||||
"creatingZip": "Création du fichier ZIP…",
|
||||
"success": "Fichiers JSON convertis en PDF avec succès ! Téléchargement ZIP démarré.",
|
||||
"zipError": "Erreur lors de la création du ZIP : {{message}}",
|
||||
"workerError": "Erreur de Worker : {{message}}",
|
||||
"getStarted": "Sélectionnez des fichiers JSON pour commencer"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF vers JPG",
|
||||
"subtitle": "Convertir chaque page du PDF en image JPG."
|
||||
"subtitle": "Convertir chaque page du PDF en image JPG.",
|
||||
"imageQuality": "Qualité d'image",
|
||||
"imageQualityExplanation": "Qualité supérieure = taille de fichier plus grande",
|
||||
"alert": {
|
||||
"invalidFile": "Fichier invalide",
|
||||
"invalidFileExplanation": "Veuillez téléverser un fichier PDF.",
|
||||
"noFile": "Aucun fichier",
|
||||
"noFileExplanation": "Veuillez d'abord téléverser un fichier PDF.",
|
||||
"conversionSuccess": "PDF converti en JPG avec succès !",
|
||||
"conversionError": "Échec de la conversion du PDF en JPG. Le fichier est peut-être corrompu."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Conversion en JPG…"
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF vers PNG",
|
||||
"subtitle": "Convertir chaque page du PDF en image PNG."
|
||||
"subtitle": "Convertir chaque page du PDF en image PNG.",
|
||||
"imageScale": "Échelle d'image",
|
||||
"imageScaleExplanation": "Échelle plus élevée = meilleure qualité mais fichier plus grand",
|
||||
"alert": {
|
||||
"invalidFile": "Fichier invalide",
|
||||
"invalidFileExplanation": "Veuillez téléverser un fichier PDF.",
|
||||
"noFile": "Aucun fichier",
|
||||
"noFileExplanation": "Veuillez d'abord téléverser un fichier PDF.",
|
||||
"conversionSuccess": "PDF converti en PNG avec succès !",
|
||||
"conversionError": "Échec de la conversion du PDF en PNG. Le fichier est peut-être corrompu."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Conversion en PNG…"
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF vers WebP",
|
||||
"subtitle": "Convertir chaque page du PDF en image WebP."
|
||||
"subtitle": "Convertir chaque page du PDF en image WebP.",
|
||||
"imageQuality": "Qualité d'image",
|
||||
"imageQualityExplanation": "Qualité supérieure = taille de fichier plus grande",
|
||||
"alert": {
|
||||
"invalidFile": "Fichier invalide",
|
||||
"invalidFileExplanation": "Veuillez téléverser un fichier PDF.",
|
||||
"noFile": "Aucun fichier",
|
||||
"noFileExplanation": "Veuillez d'abord téléverser un fichier PDF.",
|
||||
"conversionSuccess": "PDF converti en WebP avec succès !",
|
||||
"conversionError": "Échec de la conversion du PDF en WebP. Le fichier est peut-être corrompu."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Conversion en WebP…"
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF vers BMP",
|
||||
"subtitle": "Convertir chaque page du PDF en image BMP."
|
||||
"subtitle": "Convertir chaque page du PDF en image BMP.",
|
||||
"alert": {
|
||||
"invalidFile": "Fichier invalide",
|
||||
"invalidFileExplanation": "Veuillez téléverser un fichier PDF.",
|
||||
"noFile": "Aucun fichier",
|
||||
"noFileExplanation": "Veuillez d'abord téléverser un fichier PDF.",
|
||||
"conversionSuccess": "PDF converti en BMP avec succès !",
|
||||
"conversionError": "Échec de la conversion du PDF en BMP. Le fichier est peut-être corrompu."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Conversion en BMP…"
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF vers TIFF",
|
||||
@@ -287,7 +508,15 @@
|
||||
"colorMode": "Mode couleur",
|
||||
"multiPage": "Enregistrer en TIFF multipage (fichier unique)",
|
||||
"loadingVips": "Chargement du processeur d'images...",
|
||||
"converting": "Conversion en TIFF..."
|
||||
"converting": "Conversion en TIFF...",
|
||||
"alert": {
|
||||
"invalidFile": "Fichier invalide",
|
||||
"invalidFileExplanation": "Veuillez téléverser un fichier PDF.",
|
||||
"noFile": "Aucun fichier",
|
||||
"noFileExplanation": "Veuillez d'abord téléverser un fichier PDF.",
|
||||
"conversionSuccess": "PDF converti en TIFF avec succès !",
|
||||
"conversionError": "Échec de la conversion du PDF en TIFF. Le fichier est peut-être corrompu."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF en CBZ",
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF vers JSON",
|
||||
"subtitle": "Convertir des fichiers PDF en JSON."
|
||||
"subtitle": "Convertir des fichiers PDF en JSON.",
|
||||
"convertButton": "Convertir en JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Veuillez sélectionner au moins 1 fichier PDF",
|
||||
"selectedReady": "{{count}} fichier(s) sélectionné(s). Prêt à convertir !",
|
||||
"checkingEncrypted": "Vérification des PDF chiffrés…",
|
||||
"readingFiles": "Lecture des fichiers (Thread principal)…",
|
||||
"converting": "Conversion des PDF en JSON…",
|
||||
"readError": "Erreur de lecture des fichiers : {{message}}",
|
||||
"creatingZip": "Création du fichier ZIP…",
|
||||
"success": "PDF convertis en JSON avec succès ! Téléchargement ZIP démarré.",
|
||||
"zipError": "Erreur lors de la création du ZIP : {{message}}",
|
||||
"workerError": "Erreur de Worker : {{message}}",
|
||||
"getStarted": "Sélectionnez des fichiers PDF pour commencer"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Rendre un PDF consultable et copiable."
|
||||
"subtitle": "Rendre un PDF consultable et copiable.",
|
||||
"languagesInDocument": "Langues dans le document",
|
||||
"searchLanguagesPlaceholder": "Rechercher des langues…",
|
||||
"selectedLabel": "Sélectionné :",
|
||||
"none": "Aucune",
|
||||
"advancedSettingsSummary": "Paramètres avancés (recommandés pour améliorer la précision)",
|
||||
"resolutionLabel": "Résolution",
|
||||
"resolutionStandard": "Standard (192 DPI)",
|
||||
"resolutionHigh": "Élevée (288 DPI)",
|
||||
"resolutionUltra": "Ultra (384 DPI)",
|
||||
"binarizeLabel": "Binariser l'image (améliorer le contraste pour des scans propres)",
|
||||
"embedFullFontsLabel": "Intégrer les polices complètes (fichier plus volumineux, meilleure compatibilité)",
|
||||
"whitelistPresetLabel": "Préréglage de liste blanche de caractères",
|
||||
"whitelistNone": "Aucune (tous les caractères)",
|
||||
"whitelistAlphanumeric": "Alphanumérique + Ponctuation de base",
|
||||
"whitelistNumbersCurrency": "Chiffres + Symboles monétaires",
|
||||
"whitelistLettersOnly": "Lettres uniquement (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Chiffres uniquement (0-9)",
|
||||
"whitelistInvoice": "Facture/Reçu (chiffres, $, ., -, /)",
|
||||
"whitelistForms": "Formulaires (alphanumérique + symboles courants)",
|
||||
"whitelistCustom": "Personnalisé…",
|
||||
"whitelistHelp": "Seuls ces caractères seront reconnus. Laissez vide pour tous les caractères.",
|
||||
"whitelistInputLabel": "Liste blanche de caractères (facultative)",
|
||||
"whitelistInputPlaceholder": "p. ex. abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "Démarrer l'OCR",
|
||||
"progressInitializing": "Initialisation…",
|
||||
"resultsTitle": "OCR terminé",
|
||||
"resultsDescription": "Votre PDF interrogeable est prêt. Vous pouvez aussi copier ou télécharger le texte extrait ci-dessous.",
|
||||
"copyToClipboard": "Copier dans le presse-papiers",
|
||||
"downloadTxt": "Télécharger en .txt",
|
||||
"downloadSearchablePdf": "Télécharger le PDF interrogeable",
|
||||
"statusPrefix": "État : {{status}}",
|
||||
"availabilityInvalidConfig": "Ce déploiement n'expose aucune langue OCR valide. Reconstruisez-le avec VITE_TESSERACT_AVAILABLE_LANGUAGES défini sur des codes Tesseract valides.",
|
||||
"availabilityBundles": "Ce déploiement inclut l'OCR pour : {{languages}}.",
|
||||
"noLanguagesAvailable": "Aucune langue OCR n'est disponible dans ce déploiement.",
|
||||
"noLanguagesTitle": "Aucune langue sélectionnée",
|
||||
"noLanguagesMessage": "Veuillez sélectionner au moins une langue pour l'OCR.",
|
||||
"noFileTitle": "Aucun fichier",
|
||||
"noFileMessage": "Veuillez d'abord téléverser un fichier PDF.",
|
||||
"languageUnavailableTitle": "Langue OCR non disponible",
|
||||
"ocrErrorTitle": "Erreur OCR",
|
||||
"ocrErrorMessage": "Une erreur s'est produite pendant le processus OCR. Le worker a peut-être échoué à charger. Veuillez réessayer.",
|
||||
"howItWorksTitle": "Comment ça marche :",
|
||||
"extractTextLabel": "Extraire le texte :",
|
||||
"extractTextDescription": "Utilise Tesseract OCR pour reconnaître le texte des images numérisées ou des PDF.",
|
||||
"searchableOutputLabel": "Sortie interrogeable :",
|
||||
"searchableOutputDescription": "Crée un nouveau PDF avec une couche de texte invisible, rendant votre document entièrement consultable tout en préservant son apparence d'origine.",
|
||||
"characterFilteringLabel": "Filtrage des caractères :",
|
||||
"characterFilteringDescription": "Utilisez les listes blanches pour filtrer les caractères indésirables et améliorer la précision pour des types de documents spécifiques (factures, formulaires, etc.).",
|
||||
"multiLanguageSupportLabel": "Prise en charge multilingue :",
|
||||
"multiLanguageSupportDescription": "Sélectionnez plusieurs langues pour les documents contenant un contenu multilingue."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Alterner et mélanger les pages",
|
||||
"subtitle": "Fusionner des PDF en alternant les pages de chaque fichier, tout en conservant les signets."
|
||||
"subtitle": "Fusionner des PDF en alternant les pages de chaque fichier, tout en conservant les signets.",
|
||||
"retainPageLabels": "Conserver les étiquettes de page d'origine de chaque fichier",
|
||||
"retainPageLabelsHint": "Désactivé (par défaut) : le PDF fusionné utilise une numérotation naturelle 1–N. Activé : les étiquettes de page d'origine de chaque fichier sont conservées (peut produire des étiquettes en double)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Assembler un scan recto/verso",
|
||||
"subtitle": "Réorganiser un PDF numérisé en deux blocs (tous les rectos, puis tous les versos) dans le bon ordre recto/verso.",
|
||||
"totalPagesLabel": "Pages au total :",
|
||||
"splitAfterPageLabel": "Séparer après la page",
|
||||
"splitAfterPagePlaceholder": "ex. 50",
|
||||
"backBlockOrderLabel": "Ordre du bloc verso",
|
||||
"backBlockReverseOption": "Inverser le bloc verso (courant si la pile a été retournée)",
|
||||
"backBlockKeepOption": "Conserver le bloc verso tel quel",
|
||||
"autoSplitButton": "Détecter la séparation (moitié)",
|
||||
"exportGroupedLabel": "Exporter des fichiers groupés selon la longueur du document d'origine",
|
||||
"pagesPerDocumentLabel": "Pages par document d'origine",
|
||||
"groupedHelp": "Si cette option est activée, la sortie est une archive ZIP contenant un PDF par document groupé.",
|
||||
"collateButton": "Assembler le PDF",
|
||||
"invalidFileTitle": "Fichier invalide",
|
||||
"invalidFileMessage": "Veuillez sélectionner un fichier PDF.",
|
||||
"loadingPdf": "Chargement du PDF...",
|
||||
"loadErrorMessage": "Échec du chargement du fichier PDF.",
|
||||
"fileMeta": "{{size}} - {{count}} pages",
|
||||
"oddPageWarning": "Nombre de pages impair ({{count}}). Un scan recto/verso doit comporter un nombre pair de pages ; il manque peut-être une page ou il y en a une en trop.",
|
||||
"previewSummary": "Bloc recto : {{frontCount}} page(s), bloc verso : {{backCount}} page(s). Sortie : {{outputCount}} page(s), en séquence recto/verso.",
|
||||
"previewMismatchWarning": "Les blocs recto et verso n'ont pas la même longueur ({{frontCount}} rectos contre {{backCount}} versos). Les {{extraCount}} page(s) en trop du bloc le plus long seront ajoutées sans paire à la fin.",
|
||||
"missingFileTitle": "Fichier manquant",
|
||||
"missingFileMessage": "Veuillez importer un PDF d'au moins 2 pages avant de lancer le traitement.",
|
||||
"invalidSplitTitle": "Point de séparation invalide",
|
||||
"invalidSplitMessage": "Le point de séparation doit être compris entre la page 1 et la page {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "Blocs inégaux",
|
||||
"unevenConfirmMessage": "Le bloc recto contient {{frontCount}} page(s) et le bloc verso {{backCount}} page(s).\nCela signifie généralement qu'une page a été numérisée deux fois ou qu'il en manque une.\n\nLes {{extraCount}} page(s) sans paire seront ajoutées à la fin.\n\nContinuer quand même ?",
|
||||
"invalidGroupTitle": "Taille de groupe invalide",
|
||||
"invalidGroupMessage": "Veuillez saisir un nombre de pages valide par document d'origine.",
|
||||
"collatingLoader": "Assemblage du scan recto/verso...",
|
||||
"successMessage": "PDF assemblé généré avec succès.",
|
||||
"successGroupedMessage": "Assemblage terminé. {{fileCount}} fichier(s) groupé(s) généré(s).",
|
||||
"processErrorMessage": "Échec de l'assemblage du PDF.",
|
||||
"howItWorksStep1Title": "Importer le scan",
|
||||
"howItWorksStep1": "Déposez le PDF unique qui contient tous les rectos, suivis de tous les versos.",
|
||||
"howItWorksStep2Title": "Définir le point de séparation",
|
||||
"howItWorksStep2": "Indiquez où se termine le bloc recto, puis choisissez si le bloc verso doit être inversé.",
|
||||
"howItWorksStep3Title": "Assembler et télécharger",
|
||||
"howItWorksStep3": "Obtenez un PDF intercalé, ou une archive ZIP avec un fichier distinct par document d'origine.",
|
||||
"faqOddPagesQuestion": "Que faire si mon scan a un nombre de pages impair ?",
|
||||
"faqOddPagesAnswer": "Un scan recto/verso doit avoir un nombre pair de pages. Si ce n'est pas le cas, une page a probablement été numérisée deux fois ou oubliée. L'outil vous avertit avant le traitement, et les pages sans paire sont ajoutées à la fin afin que rien ne soit perdu.",
|
||||
"faqBackOrderQuestion": "Pourquoi conserverais-je le bloc verso tel quel ?",
|
||||
"faqBackOrderAnswer": "Cela dépend de la façon dont la pile a été insérée pour le second passage. Retourner la pile entière produit des versos en ordre inverse, ce qui correspond au réglage par défaut. Si votre scanner les a restitués dans le même ordre que les rectos, choisissez de conserver le bloc tel quel."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Ajouter des pièces jointes",
|
||||
@@ -660,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF vers texte",
|
||||
"subtitle": "Extraire le texte des fichiers PDF et l’enregistrer en texte brut (.txt). Prend en charge plusieurs fichiers.",
|
||||
"note": "Cet outil fonctionne UNIQUEMENT avec des PDF créés numériquement. Pour les documents scannés ou les PDF basés sur des images, utilisez plutôt notre outil OCR PDF.",
|
||||
"convertButton": "Extraire le texte"
|
||||
"noteLabel": "Note :",
|
||||
"noteText": "Cet outil ne fonctionne QUE avec des PDF créés numériquement. Pour les documents numérisés ou les PDF basés sur des images, utilisez plutôt notre outil OCR PDF.",
|
||||
"convertButton": "Extraire le texte",
|
||||
"note": "Cet outil fonctionne UNIQUEMENT avec des PDF créés numériquement. Pour les documents scannés ou les PDF basés sur des images, utilisez plutôt notre outil OCR PDF."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Signature numérique PDF",
|
||||
"pageTitle": "Signature numérique PDF - Ajouter une signature cryptographique | BentoPDF",
|
||||
"subtitle": "Ajouter une signature numérique cryptographique à votre PDF à l’aide de certificats X.509. Prend en charge les formats PKCS#12 (.pfx, .p12) et PEM. Votre clé privée ne quitte jamais votre navigateur.",
|
||||
"certificateSection": "Certificat",
|
||||
"uploadCert": "Téléverser un certificat (.pfx, .p12)",
|
||||
"uploadCert": "Téléverser un certificat (.pfx, .p12, .pem)",
|
||||
"certPassword": "Mot de passe du certificat",
|
||||
"privateKeyPassword": "Mot de passe de clé privée",
|
||||
"certPasswordPlaceholder": "Saisissez le mot de passe du certificat",
|
||||
"certInfo": "Informations du certificat",
|
||||
"certSubject": "Sujet",
|
||||
@@ -682,8 +1025,71 @@
|
||||
"locationPlaceholder": "ex. : Paris, France",
|
||||
"contactInfo": "Coordonnées",
|
||||
"contactPlaceholder": "ex. : [email protected]",
|
||||
"visibleSignature": "Signature visible",
|
||||
"visibleSignatureDescription": "Lorsqu'elle est activée, une zone de signature visible apparaît sur le PDF. Vous pouvez téléverser une image/logo ou ajouter du texte. Si rien n'est fourni, le nom du signataire issu du certificat sera affiché automatiquement.",
|
||||
"signatureImage": "Image/Logo de signature (facultatif)",
|
||||
"uploadSignatureImage": "Téléverser une image (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Aperçu de la signature",
|
||||
"remove": "Supprimer",
|
||||
"page": "Page",
|
||||
"firstPage": "Première page",
|
||||
"lastPage": "Dernière page",
|
||||
"allPages": "Toutes les pages",
|
||||
"customPage": "Page personnalisée #",
|
||||
"pageNumber": "Page #",
|
||||
"xPosition": "Position X (gauche)",
|
||||
"yPosition": "Position Y (haut)",
|
||||
"width": "Largeur",
|
||||
"height": "Hauteur",
|
||||
"addTextOverlay": "Ajouter une superposition de texte",
|
||||
"text": "Texte",
|
||||
"textPlaceholder": "p. ex. Signé numériquement par Jean Dupont",
|
||||
"textColor": "Couleur du texte",
|
||||
"fontSize": "Taille de police",
|
||||
"invalidImageTitle": "Image invalide",
|
||||
"invalidImageMessage": "Veuillez sélectionner une image PNG, JPG ou WebP.",
|
||||
"invalidFileTitle": "Fichier invalide",
|
||||
"invalidFileMessage": "Veuillez sélectionner un fichier PDF.",
|
||||
"invalidCertificateTitle": "Certificat invalide",
|
||||
"invalidCertificateMessage": "Veuillez sélectionner un fichier de certificat .pfx, .p12 ou .pem.",
|
||||
"certificateLoaded": "Certificat chargé",
|
||||
"certificateUnlocked": "Certificat déverrouillé",
|
||||
"failedParsePem": "Échec de l'analyse du fichier PEM",
|
||||
"enterPasswordToUnlock": "Entrez le mot de passe pour déverrouiller",
|
||||
"invalidPasswordOrCertificate": "Mot de passe ou certificat invalide",
|
||||
"incorrectPassword": "Mot de passe incorrect",
|
||||
"failedParseCertificate": "Échec de l'analyse du certificat",
|
||||
"missingDataTitle": "Données manquantes",
|
||||
"missingDataMessage": "Veuillez téléverser à la fois un PDF et un certificat valide.",
|
||||
"applyingSignature": "Application de la signature numérique…",
|
||||
"signingFailedTitle": "Échec de la signature",
|
||||
"chainFetchFailed": "Échec de la récupération de la chaîne de certificats. Cela peut être dû à des problèmes de réseau ou à l'indisponibilité du proxy de certificats. Veuillez vérifier votre connexion Internet et réessayer. Si le problème persiste, contactez le support.",
|
||||
"failedToSignPdf": "Échec de la signature du PDF : {{message}}",
|
||||
"defaultSignatureText": "Signé numériquement par {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} pages",
|
||||
"howToStep1Title": "Téléverser le PDF",
|
||||
"howToStep1Text": "Sélectionnez le document PDF que vous souhaitez signer",
|
||||
"howToStep2Title": "Téléverser le certificat",
|
||||
"howToStep2Text": "Fournissez votre fichier de certificat .pfx ou .p12 et le mot de passe",
|
||||
"howToStep3Title": "Signer et télécharger",
|
||||
"howToStep3Text": "Appliquez la signature numérique et téléchargez votre PDF signé",
|
||||
"relatedEncryptDesc": "Protéger votre PDF par mot de passe",
|
||||
"relatedDecryptDesc": "Supprimer le mot de passe du PDF",
|
||||
"relatedFlattenDesc": "Rendre les annotations permanentes",
|
||||
"relatedSanitizeDesc": "Supprimer les données cachées",
|
||||
"relatedPermissionsDesc": "Définir les autorisations PDF",
|
||||
"faqWhatIsQuestion": "Qu'est-ce qu'une signature numérique ?",
|
||||
"faqWhatIsAnswer": "Une signature numérique est un mécanisme cryptographique qui vérifie l'authenticité et l'intégrité d'un document. Contrairement à une signature dessinée, elle utilise la cryptographie à clé publique (certificats X.509) pour prouver l'identité du signataire.",
|
||||
"faqFormatsQuestion": "Quels formats de certificat sont pris en charge ?",
|
||||
"faqFormatsAnswer": "Nous prenons en charge les certificats au format PKCS#12 (.pfx, .p12) qui contiennent à la fois votre certificat et votre clé privée dans un seul fichier chiffré. Ils sont généralement émis par des autorités de certification.",
|
||||
"faqPrivateKeyQuestion": "Ma clé privée est-elle en sécurité ?",
|
||||
"faqPrivateKeyAnswer": "Oui ! Tout le traitement se fait entièrement dans votre navigateur. Votre certificat, clé privée et fichiers PDF ne quittent jamais votre appareil et ne sont téléchargés sur aucun serveur.",
|
||||
"faqValidReadersQuestion": "La signature sera-t-elle valide dans les lecteurs PDF ?",
|
||||
"faqValidReadersAnswer": "Oui, l'outil crée des signatures détachées PKCS#7 standard reconnues par tous les principaux lecteurs PDF. Pour une validation complète, utilisez un certificat d'une autorité de certification de confiance.",
|
||||
"applySignature": "Appliquer la signature numérique",
|
||||
"successMessage": "PDF signé avec succès ! La signature peut être vérifiée dans n’importe quel lecteur PDF."
|
||||
"successMessage": "PDF signé avec succès ! La signature peut être vérifiée dans n’importe quel lecteur PDF.",
|
||||
"internetRequiredTitle": "Connexion Internet requise",
|
||||
"internetRequiredDescription": "La signature peut nécessiter de récupérer les informations de la chaîne de certificats depuis le serveur de votre émetteur pour valider la signature."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Valider la signature PDF",
|
||||
@@ -697,7 +1103,7 @@
|
||||
"tsaSectionTitle": "Serveur d'horodatage (TSA)",
|
||||
"selectTsa": "Sélectionner un serveur TSA",
|
||||
"applyTimestamp": "Appliquer l'horodatage",
|
||||
"successMessage": "PDF horodaté avec succès ! L'horodatage peut être vérifié dans Adobe Acrobat et d'autres lecteurs PDF."
|
||||
"successMessage": "PDF horodaté avec succès ! L'horodatage peut être vérifié dans n'importe quel lecteur PDF."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email vers PDF",
|
||||
@@ -772,7 +1178,113 @@
|
||||
"templateLoaded": "Modèle \"{{name}}\" chargé.",
|
||||
"failedLoadTemplate": "Échec du chargement du modèle.",
|
||||
"noSettings": "Aucun paramètre configurable pour ce nœud.",
|
||||
"advancedSettings": "Paramètres avancés"
|
||||
"advancedSettings": "Paramètres avancés",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "Entrée PDF",
|
||||
"description": "Téléverser un ou plusieurs fichiers PDF"
|
||||
},
|
||||
"download": {
|
||||
"name": "Télécharger",
|
||||
"description": "Télécharger automatiquement en PDF ou ZIP"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "Aucun PDF connecté au nœud {{node}}",
|
||||
"noPdfInputs": "Aucun PDF en entrée",
|
||||
"expectedPdfInput": "Entrée PDF attendue",
|
||||
"failedToRenderPage": "Échec du rendu de la page {{page}}",
|
||||
"failedToGetCanvasContext": "Impossible d’obtenir le contexte du canvas pour la page {{page}}",
|
||||
"failedToRenderPageToImage": "Échec du rendu de la page {{page}} en image",
|
||||
"noPagesProcessed": "Aucune page traitée",
|
||||
"cpdfNotConfigured": "CoherentPDF n’est pas configuré. Veuillez le configurer dans les paramètres avancés.",
|
||||
"workerError": "Erreur du worker : {{message}}",
|
||||
"alternateMergeWorkerError": "Erreur du worker de fusion alternée : {{message}}",
|
||||
"noPdfFilesUploaded": "Aucun fichier PDF téléversé dans le nœud d’entrée PDF",
|
||||
"failedToLoadFile": "Impossible de charger « {{file}} » — le fichier est peut-être corrompu",
|
||||
"noImagesUploaded": "Aucune image téléversée dans le nœud d’entrée Image",
|
||||
"noWordDocsUploaded": "Aucun document téléversé dans le nœud d’entrée Word",
|
||||
"noExcelUploaded": "Aucun tableur téléversé dans le nœud d’entrée Excel",
|
||||
"noPowerPointUploaded": "Aucune présentation téléversée dans le nœud d’entrée PowerPoint",
|
||||
"noCbzUploaded": "Aucune archive de bande dessinée téléversée dans le nœud d’entrée CBZ",
|
||||
"noEmailUploaded": "Aucun e-mail téléversé dans le nœud d’entrée e-mail",
|
||||
"noEpubUploaded": "Aucun fichier EPUB téléversé dans le nœud d’entrée EPUB",
|
||||
"noFb2Uploaded": "Aucun fichier FB2 téléversé dans le nœud d’entrée FB2",
|
||||
"noJsonUploaded": "Aucun fichier JSON téléversé dans le nœud d’entrée JSON",
|
||||
"noMarkdownUploaded": "Aucun fichier Markdown téléversé dans le nœud d’entrée Markdown",
|
||||
"noMobiUploaded": "Aucun fichier MOBI téléversé dans le nœud d’entrée MOBI",
|
||||
"noOdgUploaded": "Aucun fichier ODG téléversé dans le nœud d’entrée ODG",
|
||||
"noPagesUploaded": "Aucun fichier Pages téléversé dans le nœud d’entrée Pages",
|
||||
"noPubUploaded": "Aucun fichier PUB téléversé dans le nœud d’entrée PUB",
|
||||
"noSvgUploaded": "Aucun fichier SVG téléversé dans le nœud d’entrée SVG",
|
||||
"noTextUploaded": "Aucun fichier texte téléversé dans le nœud d’entrée texte",
|
||||
"noVsdUploaded": "Aucun fichier Visio téléversé dans le nœud d’entrée VSD",
|
||||
"noWpdUploaded": "Aucun fichier WPD téléversé dans le nœud d’entrée WPD",
|
||||
"noWpsUploaded": "Aucun fichier WPS téléversé dans le nœud d’entrée WPS",
|
||||
"noXmlUploaded": "Aucun fichier XML téléversé dans le nœud d’entrée XML",
|
||||
"noXpsUploaded": "Aucun fichier XPS téléversé dans le nœud d’entrée XPS",
|
||||
"alternateMergeNeedsTwo": "La fusion alternée nécessite au moins deux PDF connectés à son entrée",
|
||||
"cropMarginsExceed": "Les marges de recadrage dépassent les dimensions de la page. Réduisez les valeurs.",
|
||||
"digitalSignNoCertificate": "Aucun certificat chargé dans le nœud Signature numérique",
|
||||
"encryptUserPasswordRequired": "Un mot de passe utilisateur est requis pour le chiffrement",
|
||||
"extractImagesNoneFound": "Aucune image trouvée dans les PDF connectés",
|
||||
"invertColorsFailedReadImage": "Impossible de lire les données de l’image",
|
||||
"overlayRequiresPdf": "Le nœud Superposition nécessite une entrée PDF de superposition.",
|
||||
"pdfToCsvNoTables": "Aucun tableau trouvé dans le PDF",
|
||||
"pdfToXlsxNoTables": "Aucun tableau trouvé dans {{file}}",
|
||||
"posterizeFailedTileCanvas": "Impossible d’obtenir le contexte du canvas de la tuile",
|
||||
"redactNoText": "Caviardage : aucun texte spécifié à caviarder",
|
||||
"removeBlankPagesAllBlank": "Toutes les pages sont vides",
|
||||
"svgFailedToConvert": "Échec de la conversion SVG",
|
||||
"svgFailedToLoad": "Échec du chargement SVG",
|
||||
"timestampFailed": "Échec de l’horodatage via le TSA {{tsa}} : {{message}}",
|
||||
"noOutputNodes": "Aucun nœud de sortie trouvé. Ajoutez un nœud Téléchargement pour terminer votre workflow.",
|
||||
"circularDependency": "Dépendance circulaire détectée dans le workflow. Veuillez supprimer toute boucle entre les nœuds.",
|
||||
"encryptOrdering": "Le nœud Chiffrer alimente \"{{target}}\", qui peut échouer sur des données chiffrées. Placez Chiffrer juste avant le nœud de sortie.",
|
||||
"invalidWorkflowFile": "Fichier de workflow invalide : tableau de nœuds ou de connexions manquant.",
|
||||
"storageQuotaExceeded": "Échec de la sauvegarde du workflow : quota de stockage dépassé. Essayez de supprimer d’anciens modèles.",
|
||||
"failedToImport": "Échec de l’importation du workflow : {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Paramètres des fonctionnalités avancées",
|
||||
"description": "Configurez les modules de traitement externes pour activer les fonctionnalités PDF avancées. Ces modules sont facultatifs et sous licence séparée.",
|
||||
"status": {
|
||||
"testing": "Test…",
|
||||
"customOverride": "Substitution personnalisée",
|
||||
"preConfigured": "Préconfiguré",
|
||||
"notConfigured": "Non configuré"
|
||||
},
|
||||
"preconfiguredTitle": "Préconfiguré et prêt à l'emploi.",
|
||||
"preconfiguredDescription": "Les modules avancés de traitement sont chargés automatiquement depuis le CDN. Vous pouvez remplacer les URL ci-dessous si vous devez utiliser une source personnalisée (p. ex. pour des déploiements air-gapped ou auto-hébergés).",
|
||||
"usingDefault": "Utilisation par défaut : {{url}}",
|
||||
"pymupdfSubtitle": "Moteur de traitement de documents",
|
||||
"pymupdfFeatures": "Active : PDF vers Texte, Markdown, SVG, DOCX, Excel • Extraire Images/Tables • Conversion de format",
|
||||
"testButton": "Tester",
|
||||
"recommendedLabel": "Recommandé :",
|
||||
"copyTitle": "Copier dans le presse-papiers",
|
||||
"ghostscriptSubtitle": "Moteur de conversion PDF/A",
|
||||
"ghostscriptFeatures": "Active : Conversion PDF/A-1b, PDF/A-2b, PDF/A-3b • Police vers contour",
|
||||
"cpdfSubtitle": "Moteur de signets et métadonnées",
|
||||
"cpdfFeatures": "Active : Diviser par signets • Modifier les signets • Métadonnées PDF",
|
||||
"saveConfiguration": "Enregistrer la configuration",
|
||||
"savingConfiguration": "Enregistrement de la configuration…",
|
||||
"savedTitle": "Enregistré",
|
||||
"savedMessage": "Configuration enregistrée avec succès !",
|
||||
"errorTitle": "Erreur",
|
||||
"failedSave": "Échec de l'enregistrement de la configuration : {{message}}",
|
||||
"emptyUrlTitle": "URL vide",
|
||||
"emptyUrlMessage": "Veuillez entrer une URL à tester.",
|
||||
"testSuccessTitle": "Succès",
|
||||
"connectionSuccess": "Connexion à {{package}} réussie !",
|
||||
"connectionFailedTitle": "Échec de la connexion",
|
||||
"connectionFailedMessage": "Impossible de se connecter à l'URL.",
|
||||
"resetDefaults": "Restaurer les valeurs par défaut",
|
||||
"resetTitle": "Réinitialiser",
|
||||
"resetWithDefaults": "Substitutions personnalisées effacées. Les valeurs par défaut préconfigurées sont actives.",
|
||||
"resetNoDefaults": "Toutes les configurations et modules en cache ont été effacés.",
|
||||
"licenseTitle": "Avis de licence :",
|
||||
"licenseDescription": "Les modules externes (PyMuPDF, Ghostscript, CoherentPDF) sont sous licence AGPL-3.0 ou licences copyleft similaires. En configurant et en utilisant ces modules, vous acceptez leurs conditions de licence respectives. BentoPDF est compatible avec toute implémentation Ghostscript WASM et PyMuPDF WASM qui respecte l'interface attendue."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "Superposition PDF",
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "Kontak",
|
||||
"licensing": "Lisensi",
|
||||
"allTools": "Semua Alat",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Buka menu utama",
|
||||
"language": "Bahasa"
|
||||
"language": "Bahasa",
|
||||
"searchLanguage": "Cari bahasa…",
|
||||
"noLanguagesFound": "Bahasa tidak ditemukan"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Suka BentoPDF? Bantu kami menjaganya tetap gratis dan sumber terbuka!",
|
||||
@@ -95,6 +98,18 @@
|
||||
"webpImages": "Gambar WebP"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Cara Kerja",
|
||||
"step1Title": "Unggah File",
|
||||
"step1": "Klik atau seret file Anda ke sini",
|
||||
"step2Title": "Proses",
|
||||
"step2": "Klik tombol proses untuk memulai",
|
||||
"step3Title": "Unduh",
|
||||
"step3": "Simpan file yang diproses secara instan"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Alat PDF Terkait"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Memproses..."
|
||||
},
|
||||
@@ -120,6 +135,10 @@
|
||||
"resetToDefaults": "Atur Ulang ke Default",
|
||||
"fullWidthMode": "Mode Lebar Penuh",
|
||||
"fullWidthDescription": "Gunakan lebar layar penuh untuk semua alat, bukan wadah yang dipusatkan",
|
||||
"compactMode": "Mode Ringkas",
|
||||
"compactModeDescription": "Tampilkan alat sebagai daftar ringkas, bukan kartu",
|
||||
"advancedSettings": "Pengaturan Lanjutan",
|
||||
"advancedSettingsDescription": "Konfigurasi modul pemrosesan eksternal (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Pengaturan disimpan secara otomatis",
|
||||
"clickToSet": "Klik untuk mengatur",
|
||||
"pressKeys": "Tekan tombol...",
|
||||
@@ -166,6 +185,7 @@
|
||||
"faq": {
|
||||
"title": "Pertanyaan yang Sering Diajukan",
|
||||
"questions": "Pertanyaan",
|
||||
"sectionTitle": "Pertanyaan yang Sering Diajukan",
|
||||
"isFree": {
|
||||
"question": "Apakah BentoPDF benar-benar gratis?",
|
||||
"answer": "Ya, tentu saja. Semua alat di BentoPDF 100% gratis digunakan, tanpa batas file, tanpa pendaftaran, dan tanpa watermark. Kami percaya semua orang berhak mendapatkan akses ke alat PDF sederhana dan kuat tanpa paywall."
|
||||
@@ -196,9 +216,8 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Apakah Anda menggunakan cookie atau analitik untuk melacak saya?",
|
||||
"answer": "Kami peduli dengan privasi Anda. BentoPDF tidak melacak informasi pribadi. Kami menggunakan Simple Analytics hanya untuk melihat jumlah kunjungan anonim. Ini berarti kami dapat mengetahui berapa banyak pengguna yang mengunjungi situs kami, tetapi kami tidak pernah tahu siapa Anda. Simple Analytics sepenuhnya patuh GDPR dan menghormati privasi Anda."
|
||||
},
|
||||
"sectionTitle": "Pertanyaan yang Sering Diajukan"
|
||||
"answer": "Tidak. BentoPDF sama sekali tidak melacak Anda. Kami tidak menggunakan cookie, analitik, atau skrip pelacakan apa pun, bahkan di situs web langsung bentopdf.com. Kami tidak pernah tahu siapa Anda atau apa yang Anda lakukan dengan alat-alat ini."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Apa Kata",
|
||||
@@ -251,11 +270,14 @@
|
||||
"add": "Tambah",
|
||||
"remove": "Hapus",
|
||||
"loading": "Memuat...",
|
||||
"loadingPageCount": "Memuat halaman...",
|
||||
"error": "Kesalahan",
|
||||
"success": "Berhasil",
|
||||
"file": "File",
|
||||
"files": "File",
|
||||
"close": "Tutup"
|
||||
"close": "Tutup",
|
||||
"convert": "Konversi",
|
||||
"unknownError": "Kesalahan tidak diketahui"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -328,9 +350,12 @@
|
||||
"download": "Unduh:",
|
||||
"downloadSelected": "Unduh yang Dipilih",
|
||||
"exportPdf": "Ekspor PDF",
|
||||
"uploadPdfFiles": "Pilih File PDF",
|
||||
"dragAndDrop": "Seret dan jatuhkan file PDF di sini, atau klik untuk memilih",
|
||||
"uploadPdfFiles": "Pilih File PDF atau Gambar",
|
||||
"dragAndDrop": "Seret dan jatuhkan file PDF atau gambar di sini, atau klik untuk memilih",
|
||||
"selectFiles": "Pilih File",
|
||||
"dropToAdd": "Jatuhkan file PDF atau gambar untuk menambahkan",
|
||||
"convertingImages": "Mengonversi gambar ke PDF...",
|
||||
"failedToConvertImages": "Gagal mengonversi gambar ke PDF.",
|
||||
"renderingPages": "Merender halaman...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplikat halaman ini",
|
||||
@@ -349,15 +374,6 @@
|
||||
"error": "Kesalahan",
|
||||
"failedToLoad": "Gagal memuat"
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Cara Kerja",
|
||||
"step1": "Klik atau seret file Anda ke sini",
|
||||
"step2": "Klik tombol proses untuk memulai",
|
||||
"step3": "Simpan file yang diproses secara instan"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Alat PDF Terkait"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "Alat PDF",
|
||||
"subtitle": "Pilih alat untuk memulai"
|
||||
|
||||
+537
-25
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Konversi dari PDF",
|
||||
"organizeManage": "Atur & Kelola",
|
||||
"optimizeRepair": "Optimalkan & Perbaiki",
|
||||
"securePdf": "Amankan PDF"
|
||||
"securePdf": "Amankan PDF",
|
||||
"input": "Masukan",
|
||||
"output": "Keluaran"
|
||||
},
|
||||
"convertToPdf": "Konversi ke PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "Alat Multi PDF",
|
||||
"subtitle": "Gabung, Pisah, Atur, Hapus, Putar, Tambah Halaman Kosong, Ekstrak dan Duplikat dalam antarmuka terpadu."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Gabung PDF",
|
||||
"subtitle": "Gabungkan beberapa PDF menjadi satu file. Mempertahankan Bookmark."
|
||||
"subtitle": "Gabungkan beberapa PDF menjadi satu file. Mempertahankan Bookmark.",
|
||||
"retainPageLabels": "Pertahankan label halaman asli dari setiap file",
|
||||
"retainPageLabelsHint": "Mati (default): PDF yang digabungkan menggunakan penomoran halaman alami 1–N. Aktif: label halaman asli setiap file dipertahankan (dapat menghasilkan label ganda)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Pisah PDF",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "Editor PDF",
|
||||
"subtitle": "Anotasi, sorot, redaksi, komentar, tambah bentuk/gambar, cari, dan lihat PDF."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "Edit Teks PDF",
|
||||
"subtitle": "Klik paragraf mana pun dan edit langsung di tempat dengan penyusunan ulang teks secara langsung, font, dan gaya.",
|
||||
"saved": "PDF berhasil disimpan! ({{size}} KB)",
|
||||
"failedToLoad": "Gagal memuat Editor Teks PDF.",
|
||||
"howToUpload": "Unggah PDF",
|
||||
"howToClick": "Klik sebuah paragraf",
|
||||
"howToRestyle": "Ubah gaya apa pun",
|
||||
"relatedPdfEditor": "Beri anotasi dan tandai PDF",
|
||||
"relatedSignPdf": "Gambar, ketik, atau unggah tanda tangan",
|
||||
"relatedWatermark": "Bubuhkan teks atau gambar",
|
||||
"relatedStamps": "Tempatkan stempel di halaman",
|
||||
"relatedCompress": "Perkecil ukuran file",
|
||||
"relatedOrganizeName": "Atur PDF",
|
||||
"relatedOrganize": "Susun ulang dan kelola halaman",
|
||||
"open": "Buka",
|
||||
"export": "Ekspor",
|
||||
"filterAll": "Semua",
|
||||
"filterText": "Teks",
|
||||
"filterImages": "Gambar",
|
||||
"filterShapes": "Bentuk",
|
||||
"addText": "Tambah teks",
|
||||
"langAuto": "Otomatis",
|
||||
"change": "Ubah",
|
||||
"ignore": "Abaikan",
|
||||
"next": "Berikutnya",
|
||||
"replace": "Ganti",
|
||||
"replaceAll": "Ganti semua",
|
||||
"emptyState": "Buka PDF untuk mengedit teks, gambar, dan bentuknya.",
|
||||
"choosePdf": "Pilih PDF…",
|
||||
"font": "Font",
|
||||
"systemFonts": "Font sistem",
|
||||
"color": "Warna",
|
||||
"alignment": "Perataan",
|
||||
"style": "Gaya",
|
||||
"lists": "Daftar",
|
||||
"outline": "Garis luar",
|
||||
"spacing": "Jarak",
|
||||
"direction": "Arah",
|
||||
"dirAuto": "Otomatis",
|
||||
"pathStroke": "Goresan jalur",
|
||||
"tipBackToUpload": "Kembali ke unggahan",
|
||||
"tipOpenAnotherPdf": "Buka PDF lain",
|
||||
"tipExportS": "Ekspor (⌘S)",
|
||||
"tipUndoZ": "Urungkan (⌘Z)",
|
||||
"tipRedoZ": "Ulangi (⇧⌘Z)",
|
||||
"tipFileDetails": "Detail file",
|
||||
"tipEditExistingContent": "Edit konten yang ada",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "Yang dipengaruhi alat Edit — persempit cakupan pada halaman yang padat",
|
||||
"tipClickThePageToAddATextBox": "Klik halaman untuk menambahkan kotak teks",
|
||||
"tipSpellCheckLanguage": "Bahasa pemeriksa ejaan",
|
||||
"tipFindAndReplace": "Cari dan ganti",
|
||||
"tipAddAnImage": "Tambahkan gambar",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Salin teks halaman ini sesuai urutan baca",
|
||||
"tipCheckTheSpellingOfThisPage": "Periksa ejaan halaman ini",
|
||||
"tipShowOrHideTheFormatPanel": "Tampilkan atau sembunyikan panel format",
|
||||
"phReplaceWith": "Ganti dengan",
|
||||
"tipAddToYourDictionary": "Tambahkan ke kamus",
|
||||
"tipClose": "Tutup",
|
||||
"phFind": "Cari",
|
||||
"tipPreviousMatch": "Kecocokan sebelumnya",
|
||||
"tipNextMatch": "Kecocokan berikutnya",
|
||||
"tipRotateLeft90": "Putar 90° ke kiri",
|
||||
"tipRotateRight90": "Putar 90° ke kanan",
|
||||
"tipFlipHorizontal": "Balik horizontal",
|
||||
"tipFlipVertical": "Balik vertikal",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Ganti gambar ini dengan mempertahankan posisinya",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Teks alternatif untuk aksesibilitas (PDF bertag)",
|
||||
"tipBringToFront": "Bawa ke depan",
|
||||
"tipSendToBack": "Kirim ke belakang",
|
||||
"tipDuplicate": "Duplikat",
|
||||
"tipDelete": "Hapus",
|
||||
"tipAlignLeftEdges": "Ratakan tepi kiri",
|
||||
"tipAlignHorizontalCenters": "Pusatkan horizontal",
|
||||
"tipAlignRightEdges": "Ratakan tepi kanan",
|
||||
"tipAlignTops": "Ratakan tepi atas",
|
||||
"tipAlignVerticalCenters": "Pusatkan vertikal",
|
||||
"tipAlignBottoms": "Ratakan tepi bawah",
|
||||
"tipDistributeHorizontally": "Distribusikan horizontal",
|
||||
"tipDistributeVertically": "Distribusikan vertikal",
|
||||
"tipFontSize": "Ukuran font",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Daftar font yang terpasang di perangkat ini (Chromium)",
|
||||
"tipCustomTextColor": "Warna teks khusus",
|
||||
"tipAlignLeft": "Rata kiri",
|
||||
"tipAlignCenter": "Rata tengah",
|
||||
"tipAlignRight": "Rata kanan",
|
||||
"tipJustify": "Rata kanan-kiri",
|
||||
"tipBold": "Tebal",
|
||||
"tipItalic": "Miring",
|
||||
"tipUnderline": "Garis bawah",
|
||||
"tipStrikethrough": "Coret",
|
||||
"tipSuperscript": "Superskrip",
|
||||
"tipSubscript": "Subskrip",
|
||||
"tipToggleBulletedItem": "Alihkan butir",
|
||||
"tipToggleNumberedItem": "Alihkan item bernomor",
|
||||
"tipNumberedListMarkerStyle": "Gaya penanda daftar bernomor",
|
||||
"tipDecreaseListIndentTab": "Kurangi indentasi (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Tambah indentasi (Tab)",
|
||||
"tipTextOutlineColor": "Warna garis luar teks",
|
||||
"tipOutlineWidth0None": "Lebar garis luar (0 = tidak ada)",
|
||||
"tipFromContent": "Dari konten",
|
||||
"tipLeftToRight": "Kiri ke kanan",
|
||||
"tipRightToLeft": "Kanan ke kiri",
|
||||
"tipStrokeColor": "Warna goresan",
|
||||
"tipStrokeWidth": "Lebar goresan",
|
||||
"tipZoomPresets": "Prasetel zoom",
|
||||
"tipZoomOut": "Perkecil",
|
||||
"tipZoomIn": "Perbesar",
|
||||
"tipFitPage": "Paskan halaman",
|
||||
"tipPreviousPage": "Halaman sebelumnya",
|
||||
"tipTypeAPageNumberAndPressEnter": "Ketik nomor halaman lalu tekan Enter",
|
||||
"tipNextPage": "Halaman berikutnya",
|
||||
"tipDocumentProperties": "Properti dokumen",
|
||||
"tipHideBar": "Sembunyikan bilah",
|
||||
"tipShowBar": "Tampilkan bilah"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG ke PDF",
|
||||
"subtitle": "Buat PDF dari gambar JPG, JPEG, dan JPEG2000 (JP2/JPX)."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplikat & Atur",
|
||||
"subtitle": "Duplikat, susun ulang, dan hapus halaman."
|
||||
"subtitle": "Duplikat, susun ulang, dan hapus halaman.",
|
||||
"saveChanges": "Simpan Perubahan"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Hapus Halaman",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Edit Bookmark",
|
||||
"subtitle": "Tambah, edit, impor, hapus dan ekstrak bookmark PDF."
|
||||
"subtitle": "Tambah, edit, impor, hapus dan ekstrak bookmark PDF.",
|
||||
"autoExtractExisting": "Ekstrak otomatis bookmark yang ada",
|
||||
"importSectionTitle": "Atau Impor Bookmark",
|
||||
"csvFormat": "Format CSV: judul,halaman,level",
|
||||
"jsonFormat": "Format JSON",
|
||||
"uploadCsvAction": "Klik untuk unggah CSV",
|
||||
"uploadJsonAction": "Klik untuk unggah JSON",
|
||||
"orDragHere": "atau seret ke sini"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Daftar Isi",
|
||||
"subtitle": "Hasilkan halaman daftar isi dari bookmark PDF."
|
||||
"subtitle": "Hasilkan halaman daftar isi dari bookmark PDF.",
|
||||
"titleLabel": "Judul Daftar Isi",
|
||||
"fontSize": "Ukuran Font",
|
||||
"fontFamily": "Keluarga Font",
|
||||
"addBookmark": "Tambah bookmark untuk halaman daftar isi",
|
||||
"generateButton": "Buat Daftar Isi",
|
||||
"selectPdfFirst": "Silakan pilih file PDF terlebih dahulu.",
|
||||
"statusReadingFileMainThread": "Membaca file (Thread Utama)...",
|
||||
"statusGenerating": "Membuat daftar isi...",
|
||||
"errorReadingFileWithMessage": "Kesalahan membaca file: {{message}}",
|
||||
"successGeneratedDownloadStarted": "Daftar isi berhasil dibuat! Unduhan dimulai.",
|
||||
"workerErrorWithMessage": "Kesalahan: {{message}}",
|
||||
"workerErrorOccurred": "Kesalahan worker terjadi. Periksa konsol untuk detail."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Nomor Halaman",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Tambah stempel gambar ke PDF Anda menggunakan toolbar anotasi.",
|
||||
"usernameLabel": "Nama Pengguna Stempel",
|
||||
"usernamePlaceholder": "Masukkan nama Anda (untuk stempel)",
|
||||
"usernameHint": "Nama ini akan muncul pada stempel yang Anda buat."
|
||||
"usernameHint": "Nama ini akan muncul pada stempel yang Anda buat.",
|
||||
"saveButton": "Simpan PDF yang Distempel"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Hapus Anotasi",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Pengisi Formulir PDF",
|
||||
"subtitle": "Isi formulir langsung di browser. Juga mendukung formulir XFA."
|
||||
"subtitle": "Isi formulir langsung di browser. Juga mendukung formulir XFA.",
|
||||
"uploadHint": "Unggah PDF dengan bidang formulir. Isi langsung di penampil di bawah, lalu klik tombol untuk menyimpan dan mengunduh formulir yang telah diisi. Juga mendukung formulir XFA.",
|
||||
"xfaNoteTitle": "Catatan tentang Formulir XFA:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) adalah format lama yang hanya didukung oleh penampil PDF tertentu seperti BentoPDF dan Firefox. Jika Anda membuka PDF XFA di perangkat lunak lain dan melihat halaman kosong atau tidak ada bidang formulir, itu berarti penampil tersebut tidak mendukung XFA. Untuk melihat dan mengisi formulir XFA dengan benar, gunakan Firefox atau Form Filler BentoPDF."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Buat Formulir PDF",
|
||||
"subtitle": "Buat formulir PDF yang dapat diisi dengan bidang teks drag-and-drop."
|
||||
"subtitle": "Buat formulir PDF yang dapat diisi dengan bidang teks drag-and-drop.",
|
||||
"orSeparator": "ATAU",
|
||||
"createBlankPdf": "Buat PDF Kosong"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Hapus Halaman Kosong",
|
||||
@@ -255,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Teks ke PDF",
|
||||
"subtitle": "Konversi file teks biasa menjadi PDF."
|
||||
"subtitle": "Konversi file teks biasa menjadi PDF.",
|
||||
"uploadFiles": "Unggah File",
|
||||
"typeText": "Ketik Teks",
|
||||
"acceptedFormats": "File teks (.txt)",
|
||||
"fontFamily": "Keluarga Font",
|
||||
"fontSize": "Ukuran Font",
|
||||
"textColor": "Warna Teks",
|
||||
"pageSize": "Ukuran Halaman",
|
||||
"rtlAutoDetectNote": "Bahasa RTL (Arab, Urdu, Persia, dll.) terdeteksi secara otomatis dan arah teks disesuaikan.",
|
||||
"createButton": "Buat PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON ke PDF",
|
||||
"subtitle": "Konversi file JSON ke format PDF."
|
||||
"subtitle": "Konversi file JSON ke format PDF.",
|
||||
"noteLabel": "Catatan:",
|
||||
"noteText": "Hanya file JSON yang dibuat oleh alat konverter PDF-ke-JSON yang didukung. File JSON standar dari alat lain tidak akan berfungsi.",
|
||||
"acceptedFormats": "Beberapa file JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Silakan pilih minimal 1 file JSON",
|
||||
"selectedReady": "{{count}} file dipilih. Siap dikonversi!",
|
||||
"readingFiles": "Membaca file (Thread Utama)...",
|
||||
"converting": "Mengonversi file JSON ke PDF...",
|
||||
"readError": "Kesalahan membaca file: {{message}}",
|
||||
"creatingZip": "Membuat file ZIP...",
|
||||
"success": "File JSON berhasil dikonversi ke PDF! Unduhan ZIP dimulai.",
|
||||
"zipError": "Kesalahan membuat ZIP: {{message}}",
|
||||
"workerError": "Kesalahan Worker: {{message}}",
|
||||
"getStarted": "Pilih file JSON untuk memulai"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF ke JPG",
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar JPG."
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar JPG.",
|
||||
"imageQuality": "Kualitas Gambar",
|
||||
"imageQualityExplanation": "Kualitas lebih tinggi = ukuran file lebih besar",
|
||||
"alert": {
|
||||
"invalidFile": "File Tidak Valid",
|
||||
"invalidFileExplanation": "Silakan unggah file PDF.",
|
||||
"noFile": "Tidak Ada File",
|
||||
"noFileExplanation": "Silakan unggah file PDF terlebih dahulu.",
|
||||
"conversionSuccess": "PDF berhasil dikonversi ke JPG!",
|
||||
"conversionError": "Gagal mengonversi PDF ke JPG. File mungkin rusak."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Mengonversi ke JPG..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF ke PNG",
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar PNG."
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar PNG.",
|
||||
"imageScale": "Skala Gambar",
|
||||
"imageScaleExplanation": "Skala lebih besar = kualitas lebih baik tapi file lebih besar",
|
||||
"alert": {
|
||||
"invalidFile": "File Tidak Valid",
|
||||
"invalidFileExplanation": "Silakan unggah file PDF.",
|
||||
"noFile": "Tidak Ada File",
|
||||
"noFileExplanation": "Silakan unggah file PDF terlebih dahulu.",
|
||||
"conversionSuccess": "PDF berhasil dikonversi ke PNG!",
|
||||
"conversionError": "Gagal mengonversi PDF ke PNG. File mungkin rusak."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Mengonversi ke PNG..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF ke WebP",
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar WebP."
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar WebP.",
|
||||
"imageQuality": "Kualitas Gambar",
|
||||
"imageQualityExplanation": "Kualitas lebih tinggi = ukuran file lebih besar",
|
||||
"alert": {
|
||||
"invalidFile": "File Tidak Valid",
|
||||
"invalidFileExplanation": "Silakan unggah file PDF.",
|
||||
"noFile": "Tidak Ada File",
|
||||
"noFileExplanation": "Silakan unggah file PDF terlebih dahulu.",
|
||||
"conversionSuccess": "PDF berhasil dikonversi ke WebP!",
|
||||
"conversionError": "Gagal mengonversi PDF ke WebP. File mungkin rusak."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Mengonversi ke WebP..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF ke BMP",
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar BMP."
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar BMP.",
|
||||
"alert": {
|
||||
"invalidFile": "File Tidak Valid",
|
||||
"invalidFileExplanation": "Silakan unggah file PDF.",
|
||||
"noFile": "Tidak Ada File",
|
||||
"noFileExplanation": "Silakan unggah file PDF terlebih dahulu.",
|
||||
"conversionSuccess": "PDF berhasil dikonversi ke BMP!",
|
||||
"conversionError": "Gagal mengonversi PDF ke BMP. File mungkin rusak."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Mengonversi ke BMP..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF ke TIFF",
|
||||
@@ -287,7 +508,15 @@
|
||||
"colorMode": "Mode Warna",
|
||||
"multiPage": "Simpan sebagai TIFF multi-halaman (satu file)",
|
||||
"loadingVips": "Memuat prosesor gambar...",
|
||||
"converting": "Mengonversi ke TIFF..."
|
||||
"converting": "Mengonversi ke TIFF...",
|
||||
"alert": {
|
||||
"invalidFile": "File Tidak Valid",
|
||||
"invalidFileExplanation": "Silakan unggah file PDF.",
|
||||
"noFile": "Tidak Ada File",
|
||||
"noFileExplanation": "Silakan unggah file PDF terlebih dahulu.",
|
||||
"conversionSuccess": "PDF berhasil dikonversi ke TIFF!",
|
||||
"conversionError": "Gagal mengonversi PDF ke TIFF. File mungkin rusak."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF ke CBZ",
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF ke JSON",
|
||||
"subtitle": "Konversi file PDF ke format JSON."
|
||||
"subtitle": "Konversi file PDF ke format JSON.",
|
||||
"convertButton": "Konversi ke JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Silakan pilih minimal 1 file PDF",
|
||||
"selectedReady": "{{count}} file dipilih. Siap dikonversi!",
|
||||
"checkingEncrypted": "Memeriksa PDF terenkripsi...",
|
||||
"readingFiles": "Membaca file (Thread Utama)...",
|
||||
"converting": "Mengonversi PDF ke JSON...",
|
||||
"readError": "Kesalahan membaca file: {{message}}",
|
||||
"creatingZip": "Membuat file ZIP...",
|
||||
"success": "PDF berhasil dikonversi ke JSON! Unduhan ZIP dimulai.",
|
||||
"zipError": "Kesalahan membuat ZIP: {{message}}",
|
||||
"workerError": "Kesalahan Worker: {{message}}",
|
||||
"getStarted": "Pilih file PDF untuk memulai"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Buat PDF dapat dicari dan disalin."
|
||||
"subtitle": "Buat PDF dapat dicari dan disalin.",
|
||||
"languagesInDocument": "Bahasa dalam Dokumen",
|
||||
"searchLanguagesPlaceholder": "Cari bahasa...",
|
||||
"selectedLabel": "Dipilih:",
|
||||
"none": "Tidak ada",
|
||||
"advancedSettingsSummary": "Pengaturan Lanjutan (Direkomendasikan untuk meningkatkan akurasi)",
|
||||
"resolutionLabel": "Resolusi",
|
||||
"resolutionStandard": "Standar (192 DPI)",
|
||||
"resolutionHigh": "Tinggi (288 DPI)",
|
||||
"resolutionUltra": "Ultra (384 DPI)",
|
||||
"binarizeLabel": "Binerkan Gambar (Tingkatkan Kontras untuk Pindaian Bersih)",
|
||||
"embedFullFontsLabel": "Sematkan Font Penuh (File lebih besar, kompatibilitas lebih baik)",
|
||||
"whitelistPresetLabel": "Preset Whitelist Karakter",
|
||||
"whitelistNone": "Tidak ada (Semua karakter)",
|
||||
"whitelistAlphanumeric": "Alfanumerik + Tanda Baca Dasar",
|
||||
"whitelistNumbersCurrency": "Angka + Simbol Mata Uang",
|
||||
"whitelistLettersOnly": "Hanya Huruf (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Hanya Angka (0-9)",
|
||||
"whitelistInvoice": "Faktur/Tanda Terima (angka, $, ., -, /)",
|
||||
"whitelistForms": "Formulir (alfanumerik + simbol umum)",
|
||||
"whitelistCustom": "Kustom...",
|
||||
"whitelistHelp": "Hanya karakter ini yang akan dikenali. Kosongkan untuk semua karakter.",
|
||||
"whitelistInputLabel": "Whitelist Karakter (Opsional)",
|
||||
"whitelistInputPlaceholder": "mis., abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "Mulai OCR",
|
||||
"progressInitializing": "Menginisialisasi...",
|
||||
"resultsTitle": "OCR Selesai",
|
||||
"resultsDescription": "PDF yang bisa dicari sudah siap. Anda juga dapat menyalin atau mengunduh teks yang diekstrak di bawah.",
|
||||
"copyToClipboard": "Salin ke Clipboard",
|
||||
"downloadTxt": "Unduh sebagai .txt",
|
||||
"downloadSearchablePdf": "Unduh PDF Bisa Dicari",
|
||||
"statusPrefix": "Status: {{status}}",
|
||||
"availabilityInvalidConfig": "Penyebaran ini tidak mengekspos bahasa OCR yang valid. Bangun ulang dengan VITE_TESSERACT_AVAILABLE_LANGUAGES yang disetel ke kode Tesseract yang valid.",
|
||||
"availabilityBundles": "Penyebaran ini menyertakan OCR untuk: {{languages}}.",
|
||||
"noLanguagesAvailable": "Tidak ada bahasa OCR yang tersedia di penyebaran ini.",
|
||||
"noLanguagesTitle": "Tidak Ada Bahasa Dipilih",
|
||||
"noLanguagesMessage": "Silakan pilih minimal satu bahasa untuk OCR.",
|
||||
"noFileTitle": "Tidak Ada File",
|
||||
"noFileMessage": "Silakan unggah file PDF terlebih dahulu.",
|
||||
"languageUnavailableTitle": "Bahasa OCR Tidak Tersedia",
|
||||
"ocrErrorTitle": "Kesalahan OCR",
|
||||
"ocrErrorMessage": "Kesalahan terjadi selama proses OCR. Worker mungkin gagal dimuat. Silakan coba lagi.",
|
||||
"howItWorksTitle": "Cara kerjanya:",
|
||||
"extractTextLabel": "Ekstrak Teks:",
|
||||
"extractTextDescription": "Menggunakan Tesseract OCR untuk mengenali teks dari gambar atau PDF yang dipindai.",
|
||||
"searchableOutputLabel": "Output Bisa Dicari:",
|
||||
"searchableOutputDescription": "Membuat PDF baru dengan lapisan teks tak terlihat, membuat dokumen Anda sepenuhnya bisa dicari sambil mempertahankan tampilan asli.",
|
||||
"characterFilteringLabel": "Penyaringan Karakter:",
|
||||
"characterFilteringDescription": "Gunakan whitelist untuk memfilter karakter yang tidak diinginkan dan meningkatkan akurasi untuk jenis dokumen tertentu (faktur, formulir, dll.).",
|
||||
"multiLanguageSupportLabel": "Dukungan Multi-bahasa:",
|
||||
"multiLanguageSupportDescription": "Pilih beberapa bahasa untuk dokumen yang berisi konten bahasa campuran."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Alternatif & Campur Halaman",
|
||||
"subtitle": "Gabung PDF dengan menggantikan halaman dari setiap PDF. Mempertahankan Bookmark."
|
||||
"subtitle": "Gabung PDF dengan menggantikan halaman dari setiap PDF. Mempertahankan Bookmark.",
|
||||
"retainPageLabels": "Pertahankan label halaman asli dari setiap file",
|
||||
"retainPageLabelsHint": "Mati (default): PDF yang digabungkan menggunakan penomoran halaman alami 1–N. Aktif: label halaman asli setiap file dipertahankan (dapat menghasilkan label ganda)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Susun Ulang Pindaian Dupleks",
|
||||
"subtitle": "Susun ulang PDF yang dipindai dalam dua blok (semua halaman depan, lalu semua halaman belakang) menjadi urutan depan/belakang yang benar.",
|
||||
"totalPagesLabel": "Total halaman:",
|
||||
"splitAfterPageLabel": "Pisahkan setelah halaman",
|
||||
"splitAfterPagePlaceholder": "mis. 50",
|
||||
"backBlockOrderLabel": "Urutan blok halaman belakang",
|
||||
"backBlockReverseOption": "Balik blok halaman belakang (umum jika tumpukan dibalik)",
|
||||
"backBlockKeepOption": "Biarkan blok halaman belakang apa adanya",
|
||||
"autoSplitButton": "Deteksi pemisahan otomatis (setengah)",
|
||||
"exportGroupedLabel": "Ekspor file yang dikelompokkan sesuai panjang dokumen asli",
|
||||
"pagesPerDocumentLabel": "Halaman per dokumen asli",
|
||||
"groupedHelp": "Jika diaktifkan, hasilnya berupa ZIP berisi satu PDF untuk setiap dokumen yang dikelompokkan.",
|
||||
"collateButton": "Susun PDF",
|
||||
"invalidFileTitle": "File Tidak Valid",
|
||||
"invalidFileMessage": "Silakan pilih file PDF.",
|
||||
"loadingPdf": "Memuat PDF...",
|
||||
"loadErrorMessage": "Gagal memuat file PDF.",
|
||||
"fileMeta": "{{size}} - {{count}} halaman",
|
||||
"oddPageWarning": "Jumlah halaman ganjil ({{count}}). Pindaian dupleks seharusnya berjumlah genap; mungkin ada halaman yang hilang atau berlebih.",
|
||||
"previewSummary": "Blok depan: {{frontCount}} halaman, blok belakang: {{backCount}} halaman. Hasil: {{outputCount}} halaman, dalam urutan depan/belakang.",
|
||||
"previewMismatchWarning": "Panjang blok depan dan belakang berbeda ({{frontCount}} depan vs {{backCount}} belakang). {{extraCount}} halaman berlebih pada sisi yang lebih panjang akan ditambahkan tanpa pasangan di akhir.",
|
||||
"missingFileTitle": "File Tidak Ada",
|
||||
"missingFileMessage": "Unggah PDF dengan minimal 2 halaman sebelum diproses.",
|
||||
"invalidSplitTitle": "Titik Pemisah Tidak Valid",
|
||||
"invalidSplitMessage": "Titik pemisah harus antara halaman 1 dan halaman {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "Blok Tidak Seimbang",
|
||||
"unevenConfirmMessage": "Blok depan memiliki {{frontCount}} halaman dan blok belakang {{backCount}} halaman.\nBiasanya ini berarti ada halaman yang terpindai dua kali atau hilang.\n\n{{extraCount}} halaman tanpa pasangan akan ditambahkan di akhir.\n\nTetap lanjutkan?",
|
||||
"invalidGroupTitle": "Ukuran Grup Tidak Valid",
|
||||
"invalidGroupMessage": "Masukkan jumlah halaman per dokumen asli yang valid.",
|
||||
"collatingLoader": "Menyusun pindaian dupleks...",
|
||||
"successMessage": "PDF tersusun berhasil dibuat.",
|
||||
"successGroupedMessage": "Penyusunan selesai. {{fileCount}} file kelompok dibuat.",
|
||||
"processErrorMessage": "Gagal menyusun PDF.",
|
||||
"howItWorksStep1Title": "Unggah hasil pindai",
|
||||
"howItWorksStep1": "Letakkan satu PDF yang berisi semua halaman depan diikuti semua halaman belakang.",
|
||||
"howItWorksStep2Title": "Tentukan titik pemisah",
|
||||
"howItWorksStep2": "Tandai di mana blok depan berakhir, lalu pilih apakah blok belakang perlu dibalik.",
|
||||
"howItWorksStep3Title": "Susun dan unduh",
|
||||
"howItWorksStep3": "Dapatkan satu PDF dengan halaman berselang-seling, atau ZIP berisi file terpisah untuk setiap dokumen asli.",
|
||||
"faqOddPagesQuestion": "Bagaimana jika jumlah halaman hasil pindai saya ganjil?",
|
||||
"faqOddPagesAnswer": "Pindaian dupleks seharusnya berjumlah halaman genap. Jika tidak, kemungkinan ada halaman yang terpindai dua kali atau terlewat. Alat ini memperingatkan Anda sebelum memproses, dan halaman tanpa pasangan ditambahkan di akhir sehingga tidak ada yang hilang.",
|
||||
"faqBackOrderQuestion": "Mengapa saya perlu membiarkan blok belakang apa adanya?",
|
||||
"faqBackOrderAnswer": "Itu tergantung cara tumpukan dimasukkan pada pemindaian kedua. Membalik seluruh tumpukan menghasilkan halaman belakang dalam urutan terbalik, dan itulah pengaturan bawaannya. Jika pemindai Anda mengembalikannya dalam urutan yang sama dengan halaman depan, pilih untuk membiarkan blok apa adanya."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Tambah Lampiran",
|
||||
@@ -660,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF ke Teks",
|
||||
"subtitle": "Ekstrak teks dari file PDF dan simpan sebagai teks biasa (.txt). Mendukung beberapa file.",
|
||||
"note": "Alat ini bekerja HANYA dengan PDF yang dibuat secara digital. Untuk dokumen terpindai atau PDF berbasis gambar, gunakan alat OCR PDF kami sebagai gantinya.",
|
||||
"convertButton": "Ekstrak Teks"
|
||||
"noteLabel": "Catatan:",
|
||||
"noteText": "Alat ini HANYA bekerja dengan PDF yang dibuat secara digital. Untuk dokumen pindai atau PDF berbasis gambar, gunakan alat OCR PDF kami sebagai gantinya.",
|
||||
"convertButton": "Ekstrak Teks",
|
||||
"note": "Alat ini bekerja HANYA dengan PDF yang dibuat secara digital. Untuk dokumen terpindai atau PDF berbasis gambar, gunakan alat OCR PDF kami sebagai gantinya."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Tanda Tangan Digital PDF",
|
||||
"pageTitle": "Tanda Tangan Digital PDF - Tambah Tanda Tangan Kriptografi | BentoPDF",
|
||||
"subtitle": "Tambah tanda tangan digital kriptografi ke PDF Anda menggunakan sertifikat X.509. Mendukung format PKCS#12 (.pfx, .p12) dan PEM. Kunci pribadi Anda tidak pernah meninggalkan browser Anda.",
|
||||
"certificateSection": "Sertifikat",
|
||||
"uploadCert": "Unggah sertifikat (.pfx, .p12)",
|
||||
"uploadCert": "Unggah sertifikat (.pfx, .p12, .pem)",
|
||||
"certPassword": "Kata Sandi Sertifikat",
|
||||
"privateKeyPassword": "Kata Sandi Kunci Pribadi",
|
||||
"certPasswordPlaceholder": "Masukkan kata sandi sertifikat",
|
||||
"certInfo": "Informasi Sertifikat",
|
||||
"certSubject": "Subjek",
|
||||
@@ -682,8 +1025,71 @@
|
||||
"locationPlaceholder": "misalnya, Jakarta, Indonesia",
|
||||
"contactInfo": "Info Kontak",
|
||||
"contactPlaceholder": "misalnya, [email protected]",
|
||||
"visibleSignature": "Tanda Tangan Terlihat",
|
||||
"visibleSignatureDescription": "Saat diaktifkan, kotak tanda tangan terlihat muncul di PDF. Anda dapat mengunggah gambar/logo atau menambahkan teks. Jika tidak ada yang diberikan, nama penanda tangan dari sertifikat akan ditampilkan secara otomatis.",
|
||||
"signatureImage": "Gambar/Logo Tanda Tangan (Opsional)",
|
||||
"uploadSignatureImage": "Unggah gambar (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Pratinjau tanda tangan",
|
||||
"remove": "Hapus",
|
||||
"page": "Halaman",
|
||||
"firstPage": "Halaman pertama",
|
||||
"lastPage": "Halaman terakhir",
|
||||
"allPages": "Semua halaman",
|
||||
"customPage": "Halaman kustom #",
|
||||
"pageNumber": "Halaman #",
|
||||
"xPosition": "Posisi X (kiri)",
|
||||
"yPosition": "Posisi Y (atas)",
|
||||
"width": "Lebar",
|
||||
"height": "Tinggi",
|
||||
"addTextOverlay": "Tambah hamparan teks",
|
||||
"text": "Teks",
|
||||
"textPlaceholder": "Mis., Ditandatangani secara digital oleh Budi",
|
||||
"textColor": "Warna Teks",
|
||||
"fontSize": "Ukuran Font",
|
||||
"invalidImageTitle": "Gambar Tidak Valid",
|
||||
"invalidImageMessage": "Silakan pilih gambar PNG, JPG, atau WebP.",
|
||||
"invalidFileTitle": "File Tidak Valid",
|
||||
"invalidFileMessage": "Silakan pilih file PDF.",
|
||||
"invalidCertificateTitle": "Sertifikat Tidak Valid",
|
||||
"invalidCertificateMessage": "Silakan pilih file sertifikat .pfx, .p12, atau .pem.",
|
||||
"certificateLoaded": "Sertifikat dimuat",
|
||||
"certificateUnlocked": "Sertifikat tidak terkunci",
|
||||
"failedParsePem": "Gagal mengurai file PEM",
|
||||
"enterPasswordToUnlock": "Masukkan kata sandi untuk membuka kunci",
|
||||
"invalidPasswordOrCertificate": "Kata sandi atau sertifikat tidak valid",
|
||||
"incorrectPassword": "Kata sandi salah",
|
||||
"failedParseCertificate": "Gagal mengurai sertifikat",
|
||||
"missingDataTitle": "Data Hilang",
|
||||
"missingDataMessage": "Silakan unggah PDF dan sertifikat yang valid.",
|
||||
"applyingSignature": "Menerapkan tanda tangan digital...",
|
||||
"signingFailedTitle": "Penandatanganan Gagal",
|
||||
"chainFetchFailed": "Gagal mengambil rantai sertifikat. Mungkin karena masalah jaringan atau proxy sertifikat tidak tersedia. Periksa koneksi internet Anda dan coba lagi. Jika masalah berlanjut, hubungi dukungan.",
|
||||
"failedToSignPdf": "Gagal menandatangani PDF: {{message}}",
|
||||
"defaultSignatureText": "Ditandatangani secara digital oleh {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} halaman",
|
||||
"howToStep1Title": "Unggah PDF",
|
||||
"howToStep1Text": "Pilih dokumen PDF yang ingin Anda tandatangani",
|
||||
"howToStep2Title": "Unggah Sertifikat",
|
||||
"howToStep2Text": "Berikan file sertifikat .pfx atau .p12 dan kata sandi",
|
||||
"howToStep3Title": "Tandatangani & Unduh",
|
||||
"howToStep3Text": "Terapkan tanda tangan digital dan unduh PDF Anda yang ditandatangani",
|
||||
"relatedEncryptDesc": "Lindungi PDF dengan kata sandi",
|
||||
"relatedDecryptDesc": "Hapus kata sandi PDF",
|
||||
"relatedFlattenDesc": "Buat anotasi permanen",
|
||||
"relatedSanitizeDesc": "Hapus data tersembunyi",
|
||||
"relatedPermissionsDesc": "Tetapkan izin PDF",
|
||||
"faqWhatIsQuestion": "Apa itu tanda tangan digital?",
|
||||
"faqWhatIsAnswer": "Tanda tangan digital adalah mekanisme kriptografis yang memverifikasi keaslian dan integritas dokumen. Tidak seperti tanda tangan yang digambar, ia menggunakan kriptografi kunci publik (sertifikat X.509) untuk membuktikan identitas penanda tangan.",
|
||||
"faqFormatsQuestion": "Format sertifikat apa yang didukung?",
|
||||
"faqFormatsAnswer": "Kami mendukung sertifikat format PKCS#12 (.pfx, .p12) yang berisi sertifikat dan kunci pribadi Anda dalam satu file terenkripsi. Biasanya diterbitkan oleh otoritas sertifikasi.",
|
||||
"faqPrivateKeyQuestion": "Apakah kunci pribadi saya aman?",
|
||||
"faqPrivateKeyAnswer": "Ya! Semua pemrosesan terjadi sepenuhnya di browser Anda. Sertifikat, kunci pribadi, dan file PDF Anda tidak pernah meninggalkan perangkat atau diunggah ke server mana pun.",
|
||||
"faqValidReadersQuestion": "Apakah tanda tangan akan valid di pembaca PDF?",
|
||||
"faqValidReadersAnswer": "Ya, alat ini membuat tanda tangan terpisah PKCS#7 standar yang dikenali oleh semua pembaca PDF utama. Untuk validasi penuh, gunakan sertifikat dari Otoritas Sertifikasi yang terpercaya.",
|
||||
"applySignature": "Terapkan Tanda Tangan Digital",
|
||||
"successMessage": "PDF berhasil ditandatangani! Tanda tangan dapat diverifikasi di pembaca PDF apa pun."
|
||||
"successMessage": "PDF berhasil ditandatangani! Tanda tangan dapat diverifikasi di pembaca PDF apa pun.",
|
||||
"internetRequiredTitle": "Koneksi internet diperlukan",
|
||||
"internetRequiredDescription": "Penandatanganan mungkin perlu mengambil informasi rantai sertifikat dari server penerbit sertifikat untuk memvalidasi tanda tangan."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validasi Tanda Tangan PDF",
|
||||
@@ -697,7 +1103,7 @@
|
||||
"tsaSectionTitle": "Server Stempel Waktu (TSA)",
|
||||
"selectTsa": "Pilih server TSA",
|
||||
"applyTimestamp": "Terapkan Stempel Waktu",
|
||||
"successMessage": "PDF berhasil diberi stempel waktu! Stempel waktu dapat diverifikasi di Adobe Acrobat dan pembaca PDF lainnya."
|
||||
"successMessage": "PDF berhasil diberi stempel waktu! Stempel waktu dapat diverifikasi di pembaca PDF apa pun."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email ke PDF",
|
||||
@@ -772,7 +1178,113 @@
|
||||
"templateLoaded": "Template \"{{name}}\" dimuat.",
|
||||
"failedLoadTemplate": "Gagal memuat template.",
|
||||
"noSettings": "Tidak ada pengaturan yang dapat dikonfigurasi untuk node ini.",
|
||||
"advancedSettings": "Pengaturan Lanjutan"
|
||||
"advancedSettings": "Pengaturan Lanjutan",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "Input PDF",
|
||||
"description": "Unggah satu atau beberapa berkas PDF"
|
||||
},
|
||||
"download": {
|
||||
"name": "Unduh",
|
||||
"description": "Unduh sebagai PDF atau ZIP secara otomatis"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "Tidak ada PDF yang terhubung ke node {{node}}",
|
||||
"noPdfInputs": "Tidak ada PDF di input",
|
||||
"expectedPdfInput": "Diharapkan input PDF",
|
||||
"failedToRenderPage": "Gagal merender halaman {{page}}",
|
||||
"failedToGetCanvasContext": "Gagal mendapatkan konteks canvas untuk halaman {{page}}",
|
||||
"failedToRenderPageToImage": "Gagal merender halaman {{page}} menjadi gambar",
|
||||
"noPagesProcessed": "Tidak ada halaman yang diproses",
|
||||
"cpdfNotConfigured": "CoherentPDF belum dikonfigurasi. Konfigurasi di Pengaturan Lanjutan.",
|
||||
"workerError": "Kesalahan worker: {{message}}",
|
||||
"alternateMergeWorkerError": "Kesalahan worker penggabungan bergantian: {{message}}",
|
||||
"noPdfFilesUploaded": "Tidak ada berkas PDF yang diunggah di node PDF Input",
|
||||
"failedToLoadFile": "Gagal memuat \"{{file}}\" — berkas mungkin rusak",
|
||||
"noImagesUploaded": "Tidak ada gambar yang diunggah di node Image Input",
|
||||
"noWordDocsUploaded": "Tidak ada dokumen yang diunggah di node Word Input",
|
||||
"noExcelUploaded": "Tidak ada lembar kerja yang diunggah di node Excel Input",
|
||||
"noPowerPointUploaded": "Tidak ada presentasi yang diunggah di node PowerPoint Input",
|
||||
"noCbzUploaded": "Tidak ada arsip komik yang diunggah di node CBZ Input",
|
||||
"noEmailUploaded": "Tidak ada berkas email yang diunggah di node Email Input",
|
||||
"noEpubUploaded": "Tidak ada berkas EPUB yang diunggah di node EPUB Input",
|
||||
"noFb2Uploaded": "Tidak ada berkas FB2 yang diunggah di node FB2 Input",
|
||||
"noJsonUploaded": "Tidak ada berkas JSON yang diunggah di node JSON Input",
|
||||
"noMarkdownUploaded": "Tidak ada berkas Markdown yang diunggah di node Markdown Input",
|
||||
"noMobiUploaded": "Tidak ada berkas MOBI yang diunggah di node MOBI Input",
|
||||
"noOdgUploaded": "Tidak ada berkas ODG yang diunggah di node ODG Input",
|
||||
"noPagesUploaded": "Tidak ada berkas Pages yang diunggah di node Pages Input",
|
||||
"noPubUploaded": "Tidak ada berkas PUB yang diunggah di node PUB Input",
|
||||
"noSvgUploaded": "Tidak ada berkas SVG yang diunggah di node SVG Input",
|
||||
"noTextUploaded": "Tidak ada berkas teks yang diunggah di node Text Input",
|
||||
"noVsdUploaded": "Tidak ada berkas Visio yang diunggah di node VSD Input",
|
||||
"noWpdUploaded": "Tidak ada berkas WPD yang diunggah di node WPD Input",
|
||||
"noWpsUploaded": "Tidak ada berkas WPS yang diunggah di node WPS Input",
|
||||
"noXmlUploaded": "Tidak ada berkas XML yang diunggah di node XML Input",
|
||||
"noXpsUploaded": "Tidak ada berkas XPS yang diunggah di node XPS Input",
|
||||
"alternateMergeNeedsTwo": "Penggabungan Bergantian membutuhkan setidaknya dua PDF terhubung ke inputnya",
|
||||
"cropMarginsExceed": "Margin pemangkasan melebihi dimensi halaman. Kurangi nilainya.",
|
||||
"digitalSignNoCertificate": "Tidak ada sertifikat yang dimuat di node Tanda Tangan Digital",
|
||||
"encryptUserPasswordRequired": "Kata sandi pengguna diperlukan untuk enkripsi",
|
||||
"extractImagesNoneFound": "Tidak ada gambar ditemukan di PDF yang terhubung",
|
||||
"invertColorsFailedReadImage": "Gagal membaca data gambar",
|
||||
"overlayRequiresPdf": "Node overlay membutuhkan input PDF overlay.",
|
||||
"pdfToCsvNoTables": "Tidak ada tabel ditemukan di PDF",
|
||||
"pdfToXlsxNoTables": "Tidak ada tabel ditemukan di {{file}}",
|
||||
"posterizeFailedTileCanvas": "Gagal mendapatkan konteks canvas ubin",
|
||||
"redactNoText": "Penyensoran: tidak ada teks yang ditentukan untuk disensor",
|
||||
"removeBlankPagesAllBlank": "Semua halaman kosong",
|
||||
"svgFailedToConvert": "Gagal mengonversi SVG",
|
||||
"svgFailedToLoad": "Gagal memuat SVG",
|
||||
"timestampFailed": "Gagal memberi cap waktu menggunakan TSA {{tsa}}: {{message}}",
|
||||
"noOutputNodes": "Tidak ada node output ditemukan. Tambahkan node Download untuk menyelesaikan alur kerja Anda.",
|
||||
"circularDependency": "Dependensi sirkular terdeteksi di alur kerja. Hapus loop di antara node.",
|
||||
"encryptOrdering": "Node Enkripsi mengalir ke \"{{target}}\" yang mungkin gagal pada data terenkripsi. Pindahkan Enkripsi tepat sebelum node output.",
|
||||
"invalidWorkflowFile": "Berkas alur kerja tidak valid: array node atau koneksi hilang.",
|
||||
"storageQuotaExceeded": "Gagal menyimpan alur kerja: kuota penyimpanan terlampaui. Coba hapus template lama.",
|
||||
"failedToImport": "Gagal mengimpor alur kerja: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Pengaturan Fitur Lanjutan",
|
||||
"description": "Konfigurasi modul pemrosesan eksternal untuk mengaktifkan fitur PDF lanjutan. Modul-modul ini opsional dan dilisensikan secara terpisah.",
|
||||
"status": {
|
||||
"testing": "Menguji...",
|
||||
"customOverride": "Penimpaan Kustom",
|
||||
"preConfigured": "Sudah Dikonfigurasi",
|
||||
"notConfigured": "Belum Dikonfigurasi"
|
||||
},
|
||||
"preconfiguredTitle": "Sudah dikonfigurasi dan siap digunakan.",
|
||||
"preconfiguredDescription": "Modul pemrosesan lanjutan dimuat secara otomatis dari CDN. Anda dapat menimpa URL di bawah ini jika perlu menggunakan sumber kustom (mis., untuk penyebaran air-gapped atau self-hosted).",
|
||||
"usingDefault": "Menggunakan default: {{url}}",
|
||||
"pymupdfSubtitle": "Mesin Pemrosesan Dokumen",
|
||||
"pymupdfFeatures": "Mengaktifkan: PDF ke Teks, Markdown, SVG, DOCX, Excel • Ekstrak Gambar/Tabel • Konversi Format",
|
||||
"testButton": "Uji",
|
||||
"recommendedLabel": "Direkomendasikan:",
|
||||
"copyTitle": "Salin ke clipboard",
|
||||
"ghostscriptSubtitle": "Mesin Konversi PDF/A",
|
||||
"ghostscriptFeatures": "Mengaktifkan: Konversi PDF/A-1b, PDF/A-2b, PDF/A-3b • Font ke Outline",
|
||||
"cpdfSubtitle": "Mesin Bookmark & Metadata",
|
||||
"cpdfFeatures": "Mengaktifkan: Pisah berdasarkan Bookmark • Edit Bookmark • Metadata PDF",
|
||||
"saveConfiguration": "Simpan Konfigurasi",
|
||||
"savingConfiguration": "Menyimpan konfigurasi...",
|
||||
"savedTitle": "Disimpan",
|
||||
"savedMessage": "Konfigurasi berhasil disimpan!",
|
||||
"errorTitle": "Kesalahan",
|
||||
"failedSave": "Gagal menyimpan konfigurasi: {{message}}",
|
||||
"emptyUrlTitle": "URL Kosong",
|
||||
"emptyUrlMessage": "Silakan masukkan URL untuk diuji.",
|
||||
"testSuccessTitle": "Berhasil",
|
||||
"connectionSuccess": "Koneksi ke {{package}} berhasil!",
|
||||
"connectionFailedTitle": "Koneksi Gagal",
|
||||
"connectionFailedMessage": "Tidak dapat terhubung ke URL.",
|
||||
"resetDefaults": "Setel Ulang ke Default",
|
||||
"resetTitle": "Setel Ulang",
|
||||
"resetWithDefaults": "Penimpaan kustom dihapus. Default yang dikonfigurasi sebelumnya aktif.",
|
||||
"resetNoDefaults": "Semua konfigurasi dan modul yang di-cache telah dihapus.",
|
||||
"licenseTitle": "Pemberitahuan Lisensi:",
|
||||
"licenseDescription": "Modul eksternal (PyMuPDF, Ghostscript, CoherentPDF) dilisensikan di bawah AGPL-3.0 atau lisensi copyleft serupa. Dengan mengonfigurasi dan menggunakan modul-modul ini, Anda menyetujui ketentuan lisensi masing-masing. BentoPDF kompatibel dengan implementasi Ghostscript WASM dan PyMuPDF WASM apa pun yang mengikuti antarmuka yang diharapkan."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "Overlay PDF",
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "Contatti",
|
||||
"licensing": "Licenze",
|
||||
"allTools": "Tutti gli strumenti",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Apri il menu principale",
|
||||
"language": "Lingua"
|
||||
"language": "Lingua",
|
||||
"searchLanguage": "Cerca lingua…",
|
||||
"noLanguagesFound": "Nessuna lingua trovata"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Ti piace BentoPDF? Aiutaci a mantenerlo gratuito e open source!",
|
||||
@@ -95,6 +98,18 @@
|
||||
"webpImages": "Immagini WebP"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Come funziona",
|
||||
"step1Title": "Carica file",
|
||||
"step1": "Clicca o trascina il tuo file qui",
|
||||
"step2Title": "Elabora",
|
||||
"step2": "Clicca il pulsante di elaborazione",
|
||||
"step3Title": "Scarica",
|
||||
"step3": "Salva il tuo file elaborato istantaneamente"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Strumenti PDF correlati"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Elaborazione..."
|
||||
},
|
||||
@@ -120,6 +135,10 @@
|
||||
"resetToDefaults": "Reimposta ai valori predefiniti",
|
||||
"fullWidthMode": "Modalità a tutta larghezza",
|
||||
"fullWidthDescription": "Usa l'intera larghezza dello schermo per tutti gli strumenti invece di un contenitore centrato",
|
||||
"compactMode": "Modalità compatta",
|
||||
"compactModeDescription": "Mostra gli strumenti come elenco compatto invece di schede",
|
||||
"advancedSettings": "Impostazioni avanzate",
|
||||
"advancedSettingsDescription": "Configura moduli di elaborazione esterni (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Le impostazioni vengono salvate automaticamente",
|
||||
"clickToSet": "Clicca per impostare",
|
||||
"pressKeys": "Premi i tasti...",
|
||||
@@ -166,6 +185,7 @@
|
||||
"faq": {
|
||||
"title": "Domande",
|
||||
"questions": "Frequenti",
|
||||
"sectionTitle": "Domande frequenti",
|
||||
"isFree": {
|
||||
"question": "BentoPDF è davvero gratuito?",
|
||||
"answer": "Sì, assolutamente. Tutti gli strumenti su BentoPDF sono gratuiti al 100%, senza limiti di file, senza registrazioni e senza filigrane. Crediamo che tutti debbano poter accedere a strumenti PDF semplici e potenti senza barriere a pagamento."
|
||||
@@ -196,9 +216,8 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Usate cookie o analytics per tracciarmi?",
|
||||
"answer": "Ci teniamo alla tua privacy. BentoPDF non traccia informazioni personali. Usiamo Simple Analytics solo per visualizzare conteggi di visite anonime. Questo significa che possiamo sapere quante persone visitano il sito, ma non chi sei. Simple Analytics è pienamente conforme al GDPR e rispetta la tua privacy."
|
||||
},
|
||||
"sectionTitle": "Domande frequenti"
|
||||
"answer": "No. BentoPDF non ti traccia in alcun modo. Non usiamo cookie, strumenti di analisi né script di tracciamento, nemmeno sul sito web live bentopdf.com. Non sappiamo mai chi sei né cosa fai con gli strumenti."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Cosa",
|
||||
@@ -251,11 +270,14 @@
|
||||
"add": "Aggiungi",
|
||||
"remove": "Rimuovi",
|
||||
"loading": "Caricamento...",
|
||||
"loadingPageCount": "Caricamento pagine...",
|
||||
"error": "Errore",
|
||||
"success": "Successo",
|
||||
"file": "File",
|
||||
"files": "File",
|
||||
"close": "Chiudi"
|
||||
"close": "Chiudi",
|
||||
"convert": "Converti",
|
||||
"unknownError": "Errore sconosciuto"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -328,9 +350,12 @@
|
||||
"download": "Scarica:",
|
||||
"downloadSelected": "Scarica selezionati",
|
||||
"exportPdf": "Esporta PDF",
|
||||
"uploadPdfFiles": "Seleziona file PDF",
|
||||
"dragAndDrop": "Trascina e rilascia i file PDF qui, oppure clicca per selezionare",
|
||||
"uploadPdfFiles": "Seleziona file PDF o immagini",
|
||||
"dragAndDrop": "Trascina e rilascia file PDF o immagini qui, oppure clicca per selezionare",
|
||||
"selectFiles": "Seleziona file",
|
||||
"dropToAdd": "Rilascia file PDF o immagini per aggiungere",
|
||||
"convertingImages": "Conversione delle immagini in PDF...",
|
||||
"failedToConvertImages": "Impossibile convertire le immagini in PDF.",
|
||||
"renderingPages": "Generazione anteprime pagine...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplica questa pagina",
|
||||
@@ -349,15 +374,6 @@
|
||||
"error": "Errore",
|
||||
"failedToLoad": "Caricamento fallito"
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Come funziona",
|
||||
"step1": "Clicca o trascina il tuo file qui",
|
||||
"step2": "Clicca il pulsante di elaborazione",
|
||||
"step3": "Salva il tuo file elaborato istantaneamente"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Strumenti PDF correlati"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "Strumenti PDF",
|
||||
"subtitle": "Seleziona uno strumento per iniziare"
|
||||
|
||||
+537
-25
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Converti da PDF",
|
||||
"organizeManage": "Organizza e Gestisci",
|
||||
"optimizeRepair": "Ottimizza e Ripara",
|
||||
"securePdf": "Proteggi PDF"
|
||||
"securePdf": "Proteggi PDF",
|
||||
"input": "Input",
|
||||
"output": "Output"
|
||||
},
|
||||
"convertToPdf": "Converti in PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "Strumento PDF multifunzione",
|
||||
"subtitle": "Unisci, dividi, organizza, elimina, ruota, aggiungi pagine vuote, estrai e duplica in un'interfaccia unificata."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Unisci PDF",
|
||||
"subtitle": "Unisci più PDF in un unico file. Conserva i segnalibri."
|
||||
"subtitle": "Unisci più PDF in un unico file. Conserva i segnalibri.",
|
||||
"retainPageLabels": "Mantieni le etichette di pagina originali di ogni file",
|
||||
"retainPageLabelsHint": "Disattivato (predefinito): il PDF unito usa la numerazione naturale 1–N. Attivato: le etichette di pagina originali di ogni file vengono mantenute (può produrre etichette duplicate)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Dividi PDF",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "Editor PDF",
|
||||
"subtitle": "Annota, evidenzia, redigi, commenta, aggiungi forme/immagini, cerca e visualizza PDF."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "Modifica testo PDF",
|
||||
"subtitle": "Clicca su un paragrafo qualsiasi e modificalo direttamente con ricomposizione del testo in tempo reale, caratteri e stili.",
|
||||
"saved": "PDF salvato correttamente! ({{size}} KB)",
|
||||
"failedToLoad": "Impossibile caricare l'editor di testo PDF.",
|
||||
"howToUpload": "Carica PDF",
|
||||
"howToClick": "Fai clic su un paragrafo",
|
||||
"howToRestyle": "Ridefinisci lo stile",
|
||||
"relatedPdfEditor": "Annota ed evidenzia i PDF",
|
||||
"relatedSignPdf": "Disegna, digita o carica una firma",
|
||||
"relatedWatermark": "Applica testo o immagini",
|
||||
"relatedStamps": "Posiziona timbri sulle pagine",
|
||||
"relatedCompress": "Riduci le dimensioni del file",
|
||||
"relatedOrganizeName": "Organizza PDF",
|
||||
"relatedOrganize": "Riordina e gestisci le pagine",
|
||||
"open": "Apri",
|
||||
"export": "Esporta",
|
||||
"filterAll": "Tutto",
|
||||
"filterText": "Testo",
|
||||
"filterImages": "Immagini",
|
||||
"filterShapes": "Forme",
|
||||
"addText": "Aggiungi testo",
|
||||
"langAuto": "Automatico",
|
||||
"change": "Modifica",
|
||||
"ignore": "Ignora",
|
||||
"next": "Avanti",
|
||||
"replace": "Sostituisci",
|
||||
"replaceAll": "Sostituisci tutto",
|
||||
"emptyState": "Apri un PDF per modificarne testo, immagini e forme.",
|
||||
"choosePdf": "Scegli un PDF…",
|
||||
"font": "Carattere",
|
||||
"systemFonts": "Caratteri di sistema",
|
||||
"color": "Colore",
|
||||
"alignment": "Allineamento",
|
||||
"style": "Stile",
|
||||
"lists": "Elenchi",
|
||||
"outline": "Contorno",
|
||||
"spacing": "Spaziatura",
|
||||
"direction": "Direzione",
|
||||
"dirAuto": "Automatico",
|
||||
"pathStroke": "Contorno del tracciato",
|
||||
"tipBackToUpload": "Torna al caricamento",
|
||||
"tipOpenAnotherPdf": "Apri un altro PDF",
|
||||
"tipExportS": "Esporta (⌘S)",
|
||||
"tipUndoZ": "Annulla (⌘Z)",
|
||||
"tipRedoZ": "Ripristina (⇧⌘Z)",
|
||||
"tipFileDetails": "Dettagli file",
|
||||
"tipEditExistingContent": "Modifica contenuti esistenti",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "Cosa modifica lo strumento Modifica: restringi l'ambito nelle pagine affollate",
|
||||
"tipClickThePageToAddATextBox": "Fai clic sulla pagina per aggiungere una casella di testo",
|
||||
"tipSpellCheckLanguage": "Lingua del correttore ortografico",
|
||||
"tipFindAndReplace": "Trova e sostituisci",
|
||||
"tipAddAnImage": "Aggiungi un'immagine",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Copia il testo di questa pagina nell'ordine di lettura",
|
||||
"tipCheckTheSpellingOfThisPage": "Controlla l'ortografia di questa pagina",
|
||||
"tipShowOrHideTheFormatPanel": "Mostra o nascondi il pannello formato",
|
||||
"phReplaceWith": "Sostituisci con",
|
||||
"tipAddToYourDictionary": "Aggiungi al dizionario",
|
||||
"tipClose": "Chiudi",
|
||||
"phFind": "Trova",
|
||||
"tipPreviousMatch": "Corrispondenza precedente",
|
||||
"tipNextMatch": "Corrispondenza successiva",
|
||||
"tipRotateLeft90": "Ruota di 90° a sinistra",
|
||||
"tipRotateRight90": "Ruota di 90° a destra",
|
||||
"tipFlipHorizontal": "Capovolgi orizzontalmente",
|
||||
"tipFlipVertical": "Capovolgi verticalmente",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Sostituisci questa immagine mantenendone la posizione",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Testo alternativo per l'accessibilità (PDF taggati)",
|
||||
"tipBringToFront": "Porta in primo piano",
|
||||
"tipSendToBack": "Porta in secondo piano",
|
||||
"tipDuplicate": "Duplica",
|
||||
"tipDelete": "Elimina",
|
||||
"tipAlignLeftEdges": "Allinea i bordi sinistri",
|
||||
"tipAlignHorizontalCenters": "Centra orizzontalmente",
|
||||
"tipAlignRightEdges": "Allinea i bordi destri",
|
||||
"tipAlignTops": "Allinea i bordi superiori",
|
||||
"tipAlignVerticalCenters": "Centra verticalmente",
|
||||
"tipAlignBottoms": "Allinea i bordi inferiori",
|
||||
"tipDistributeHorizontally": "Distribuisci orizzontalmente",
|
||||
"tipDistributeVertically": "Distribuisci verticalmente",
|
||||
"tipFontSize": "Dimensione carattere",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Elenca i caratteri installati su questo dispositivo (Chromium)",
|
||||
"tipCustomTextColor": "Colore testo personalizzato",
|
||||
"tipAlignLeft": "Allinea a sinistra",
|
||||
"tipAlignCenter": "Centra",
|
||||
"tipAlignRight": "Allinea a destra",
|
||||
"tipJustify": "Giustifica",
|
||||
"tipBold": "Grassetto",
|
||||
"tipItalic": "Corsivo",
|
||||
"tipUnderline": "Sottolineato",
|
||||
"tipStrikethrough": "Barrato",
|
||||
"tipSuperscript": "Apice",
|
||||
"tipSubscript": "Pedice",
|
||||
"tipToggleBulletedItem": "Attiva/disattiva punto elenco",
|
||||
"tipToggleNumberedItem": "Attiva/disattiva elemento numerato",
|
||||
"tipNumberedListMarkerStyle": "Stile marcatore elenchi numerati",
|
||||
"tipDecreaseListIndentTab": "Riduci rientro (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Aumenta rientro (Tab)",
|
||||
"tipTextOutlineColor": "Colore contorno testo",
|
||||
"tipOutlineWidth0None": "Spessore contorno (0 = nessuno)",
|
||||
"tipFromContent": "Dal contenuto",
|
||||
"tipLeftToRight": "Da sinistra a destra",
|
||||
"tipRightToLeft": "Da destra a sinistra",
|
||||
"tipStrokeColor": "Colore traccia",
|
||||
"tipStrokeWidth": "Spessore traccia",
|
||||
"tipZoomPresets": "Preimpostazioni zoom",
|
||||
"tipZoomOut": "Riduci zoom",
|
||||
"tipZoomIn": "Aumenta zoom",
|
||||
"tipFitPage": "Adatta pagina",
|
||||
"tipPreviousPage": "Pagina precedente",
|
||||
"tipTypeAPageNumberAndPressEnter": "Digita un numero di pagina e premi Invio",
|
||||
"tipNextPage": "Pagina successiva",
|
||||
"tipDocumentProperties": "Proprietà del documento",
|
||||
"tipHideBar": "Nascondi barra",
|
||||
"tipShowBar": "Mostra barra"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG in PDF",
|
||||
"subtitle": "Crea un PDF da immagini JPG, JPEG e JPEG2000 (JP2/JPX)."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplica e Organizza",
|
||||
"subtitle": "Duplica, riordina ed elimina pagine."
|
||||
"subtitle": "Duplica, riordina ed elimina pagine.",
|
||||
"saveChanges": "Salva modifiche"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Elimina Pagine",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Modifica Segnalibri",
|
||||
"subtitle": "Aggiungi, modifica, importa, elimina ed estrai segnalibri PDF."
|
||||
"subtitle": "Aggiungi, modifica, importa, elimina ed estrai segnalibri PDF.",
|
||||
"autoExtractExisting": "Estrai automaticamente segnalibri esistenti",
|
||||
"importSectionTitle": "Oppure importa segnalibri",
|
||||
"csvFormat": "Formato CSV: titolo,pagina,livello",
|
||||
"jsonFormat": "Formato JSON",
|
||||
"uploadCsvAction": "Clicca per caricare CSV",
|
||||
"uploadJsonAction": "Clicca per caricare JSON",
|
||||
"orDragHere": "o trascina qui"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Indice",
|
||||
"subtitle": "Genera una pagina di indice dai segnalibri del PDF."
|
||||
"subtitle": "Genera una pagina di indice dai segnalibri del PDF.",
|
||||
"titleLabel": "Titolo TDC",
|
||||
"fontSize": "Dimensione carattere",
|
||||
"fontFamily": "Famiglia di caratteri",
|
||||
"addBookmark": "Aggiungi segnalibro per la pagina TDC",
|
||||
"generateButton": "Genera indice",
|
||||
"selectPdfFirst": "Seleziona prima un file PDF.",
|
||||
"statusReadingFileMainThread": "Lettura del file (Thread principale)...",
|
||||
"statusGenerating": "Generazione dell'indice...",
|
||||
"errorReadingFileWithMessage": "Errore di lettura del file: {{message}}",
|
||||
"successGeneratedDownloadStarted": "Indice generato con successo! Download avviato.",
|
||||
"workerErrorWithMessage": "Errore: {{message}}",
|
||||
"workerErrorOccurred": "Si è verificato un errore worker. Controlla la console per i dettagli."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Numeri di Pagina",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Aggiungi timbri immagine al tuo PDF usando la barra degli strumenti di annotazione.",
|
||||
"usernameLabel": "Nome sul timbro",
|
||||
"usernamePlaceholder": "Inserisci il tuo nome (per i timbri)",
|
||||
"usernameHint": "Questo nome apparirà sui timbri che crei."
|
||||
"usernameHint": "Questo nome apparirà sui timbri che crei.",
|
||||
"saveButton": "Salva PDF timbrato"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Rimuovi Annotazioni",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Compilatore Moduli PDF",
|
||||
"subtitle": "Compila i moduli direttamente nel browser. Supporta anche i moduli XFA."
|
||||
"subtitle": "Compila i moduli direttamente nel browser. Supporta anche i moduli XFA.",
|
||||
"uploadHint": "Carica un PDF con campi modulo. Compilali direttamente nel visualizzatore qui sotto, quindi clicca sul pulsante per salvare e scaricare il modulo compilato. Supporta anche moduli XFA.",
|
||||
"xfaNoteTitle": "Nota sui moduli XFA:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) è un formato legacy supportato solo da alcuni visualizzatori PDF come BentoPDF e Firefox. Se apri un PDF XFA in altri software e vedi pagine vuote o nessun campo modulo, significa che quel visualizzatore non supporta XFA. Per visualizzare e compilare correttamente i moduli XFA, usa Firefox o il Form Filler di BentoPDF."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Crea Modulo PDF",
|
||||
"subtitle": "Crea moduli PDF compilabili con campi di testo drag-and-drop."
|
||||
"subtitle": "Crea moduli PDF compilabili con campi di testo drag-and-drop.",
|
||||
"orSeparator": "O",
|
||||
"createBlankPdf": "Crea PDF vuoto"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Rimuovi Pagine Vuote",
|
||||
@@ -255,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Testo in PDF",
|
||||
"subtitle": "Converti un file di testo semplice in un PDF."
|
||||
"subtitle": "Converti un file di testo semplice in un PDF.",
|
||||
"uploadFiles": "Carica file",
|
||||
"typeText": "Scrivi testo",
|
||||
"acceptedFormats": "File di testo (.txt)",
|
||||
"fontFamily": "Famiglia di caratteri",
|
||||
"fontSize": "Dimensione carattere",
|
||||
"textColor": "Colore del testo",
|
||||
"pageSize": "Dimensione pagina",
|
||||
"rtlAutoDetectNote": "Le lingue RTL (arabo, urdu, persiano, ecc.) vengono rilevate automaticamente e la direzione del testo viene regolata di conseguenza.",
|
||||
"createButton": "Crea PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON in PDF",
|
||||
"subtitle": "Converti file JSON in formato PDF."
|
||||
"subtitle": "Converti file JSON in formato PDF.",
|
||||
"noteLabel": "Nota:",
|
||||
"noteText": "Sono supportati solo i file JSON creati dallo strumento PDF a JSON. I file JSON standard provenienti da altri strumenti non funzioneranno.",
|
||||
"acceptedFormats": "Più file JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Seleziona almeno 1 file JSON",
|
||||
"selectedReady": "{{count}} file selezionato/i. Pronto per la conversione!",
|
||||
"readingFiles": "Lettura dei file (Thread principale)...",
|
||||
"converting": "Conversione dei file JSON in PDF...",
|
||||
"readError": "Errore di lettura dei file: {{message}}",
|
||||
"creatingZip": "Creazione del file ZIP...",
|
||||
"success": "File JSON convertiti in PDF con successo! Download ZIP avviato.",
|
||||
"zipError": "Errore nella creazione dello ZIP: {{message}}",
|
||||
"workerError": "Errore Worker: {{message}}",
|
||||
"getStarted": "Seleziona file JSON per iniziare"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF in JPG",
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine JPG."
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine JPG.",
|
||||
"imageQuality": "Qualità immagine",
|
||||
"imageQualityExplanation": "Qualità maggiore = file di dimensioni maggiori",
|
||||
"alert": {
|
||||
"invalidFile": "File non valido",
|
||||
"invalidFileExplanation": "Carica un file PDF.",
|
||||
"noFile": "Nessun file",
|
||||
"noFileExplanation": "Carica prima un file PDF.",
|
||||
"conversionSuccess": "PDF convertito in JPG con successo!",
|
||||
"conversionError": "Impossibile convertire il PDF in JPG. Il file potrebbe essere danneggiato."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Conversione in JPG..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF in PNG",
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine PNG."
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine PNG.",
|
||||
"imageScale": "Scala immagine",
|
||||
"imageScaleExplanation": "Scala maggiore = qualità migliore ma file più grande",
|
||||
"alert": {
|
||||
"invalidFile": "File non valido",
|
||||
"invalidFileExplanation": "Carica un file PDF.",
|
||||
"noFile": "Nessun file",
|
||||
"noFileExplanation": "Carica prima un file PDF.",
|
||||
"conversionSuccess": "PDF convertito in PNG con successo!",
|
||||
"conversionError": "Impossibile convertire il PDF in PNG. Il file potrebbe essere danneggiato."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Conversione in PNG..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF in WebP",
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine WebP."
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine WebP.",
|
||||
"imageQuality": "Qualità immagine",
|
||||
"imageQualityExplanation": "Qualità maggiore = file di dimensioni maggiori",
|
||||
"alert": {
|
||||
"invalidFile": "File non valido",
|
||||
"invalidFileExplanation": "Carica un file PDF.",
|
||||
"noFile": "Nessun file",
|
||||
"noFileExplanation": "Carica prima un file PDF.",
|
||||
"conversionSuccess": "PDF convertito in WebP con successo!",
|
||||
"conversionError": "Impossibile convertire il PDF in WebP. Il file potrebbe essere danneggiato."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Conversione in WebP..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF in BMP",
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine BMP."
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine BMP.",
|
||||
"alert": {
|
||||
"invalidFile": "File non valido",
|
||||
"invalidFileExplanation": "Carica un file PDF.",
|
||||
"noFile": "Nessun file",
|
||||
"noFileExplanation": "Carica prima un file PDF.",
|
||||
"conversionSuccess": "PDF convertito in BMP con successo!",
|
||||
"conversionError": "Impossibile convertire il PDF in BMP. Il file potrebbe essere danneggiato."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Conversione in BMP..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF in TIFF",
|
||||
@@ -287,7 +508,15 @@
|
||||
"colorMode": "Modalità colore",
|
||||
"multiPage": "Salva come TIFF multipagina (file singolo)",
|
||||
"loadingVips": "Caricamento processore immagini...",
|
||||
"converting": "Conversione in TIFF..."
|
||||
"converting": "Conversione in TIFF...",
|
||||
"alert": {
|
||||
"invalidFile": "File non valido",
|
||||
"invalidFileExplanation": "Carica un file PDF.",
|
||||
"noFile": "Nessun file",
|
||||
"noFileExplanation": "Carica prima un file PDF.",
|
||||
"conversionSuccess": "PDF convertito in TIFF con successo!",
|
||||
"conversionError": "Impossibile convertire il PDF in TIFF. Il file potrebbe essere danneggiato."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF in CBZ",
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF in JSON",
|
||||
"subtitle": "Converti file PDF in formato JSON."
|
||||
"subtitle": "Converti file PDF in formato JSON.",
|
||||
"convertButton": "Converti in JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Seleziona almeno 1 file PDF",
|
||||
"selectedReady": "{{count}} file selezionato/i. Pronto per la conversione!",
|
||||
"checkingEncrypted": "Verifica dei PDF cifrati...",
|
||||
"readingFiles": "Lettura dei file (Thread principale)...",
|
||||
"converting": "Conversione dei PDF in JSON...",
|
||||
"readError": "Errore di lettura dei file: {{message}}",
|
||||
"creatingZip": "Creazione del file ZIP...",
|
||||
"success": "PDF convertiti in JSON con successo! Download ZIP avviato.",
|
||||
"zipError": "Errore nella creazione dello ZIP: {{message}}",
|
||||
"workerError": "Errore Worker: {{message}}",
|
||||
"getStarted": "Seleziona file PDF per iniziare"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Rendi un PDF ricercabile e copiabile."
|
||||
"subtitle": "Rendi un PDF ricercabile e copiabile.",
|
||||
"languagesInDocument": "Lingue nel documento",
|
||||
"searchLanguagesPlaceholder": "Cerca lingue...",
|
||||
"selectedLabel": "Selezionato:",
|
||||
"none": "Nessuna",
|
||||
"advancedSettingsSummary": "Impostazioni avanzate (consigliate per migliorare la precisione)",
|
||||
"resolutionLabel": "Risoluzione",
|
||||
"resolutionStandard": "Standard (192 DPI)",
|
||||
"resolutionHigh": "Alta (288 DPI)",
|
||||
"resolutionUltra": "Ultra (384 DPI)",
|
||||
"binarizeLabel": "Binarizza immagine (migliora il contrasto per scansioni pulite)",
|
||||
"embedFullFontsLabel": "Incorpora font completi (file più grande, migliore compatibilità)",
|
||||
"whitelistPresetLabel": "Preset whitelist caratteri",
|
||||
"whitelistNone": "Nessuna (tutti i caratteri)",
|
||||
"whitelistAlphanumeric": "Alfanumerico + Punteggiatura di base",
|
||||
"whitelistNumbersCurrency": "Numeri + Simboli di valuta",
|
||||
"whitelistLettersOnly": "Solo lettere (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Solo numeri (0-9)",
|
||||
"whitelistInvoice": "Fattura/Ricevuta (numeri, $, ., -, /)",
|
||||
"whitelistForms": "Moduli (alfanumerico + simboli comuni)",
|
||||
"whitelistCustom": "Personalizzato...",
|
||||
"whitelistHelp": "Verranno riconosciuti solo questi caratteri. Lascia vuoto per tutti i caratteri.",
|
||||
"whitelistInputLabel": "Whitelist di caratteri (facoltativa)",
|
||||
"whitelistInputPlaceholder": "es. abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "Avvia OCR",
|
||||
"progressInitializing": "Inizializzazione...",
|
||||
"resultsTitle": "OCR completato",
|
||||
"resultsDescription": "Il tuo PDF ricercabile è pronto. Puoi anche copiare o scaricare il testo estratto qui sotto.",
|
||||
"copyToClipboard": "Copia negli appunti",
|
||||
"downloadTxt": "Scarica come .txt",
|
||||
"downloadSearchablePdf": "Scarica PDF ricercabile",
|
||||
"statusPrefix": "Stato: {{status}}",
|
||||
"availabilityInvalidConfig": "Questa distribuzione non espone lingue OCR valide. Ricostruiscila con VITE_TESSERACT_AVAILABLE_LANGUAGES impostato su codici Tesseract validi.",
|
||||
"availabilityBundles": "Questa distribuzione include OCR per: {{languages}}.",
|
||||
"noLanguagesAvailable": "Nessuna lingua OCR disponibile in questa distribuzione.",
|
||||
"noLanguagesTitle": "Nessuna lingua selezionata",
|
||||
"noLanguagesMessage": "Seleziona almeno una lingua per OCR.",
|
||||
"noFileTitle": "Nessun file",
|
||||
"noFileMessage": "Carica prima un file PDF.",
|
||||
"languageUnavailableTitle": "Lingua OCR non disponibile",
|
||||
"ocrErrorTitle": "Errore OCR",
|
||||
"ocrErrorMessage": "Si è verificato un errore durante il processo OCR. Il worker potrebbe non essersi caricato. Riprova.",
|
||||
"howItWorksTitle": "Come funziona:",
|
||||
"extractTextLabel": "Estrai testo:",
|
||||
"extractTextDescription": "Usa Tesseract OCR per riconoscere il testo da immagini scansionate o PDF.",
|
||||
"searchableOutputLabel": "Output ricercabile:",
|
||||
"searchableOutputDescription": "Crea un nuovo PDF con un livello di testo invisibile, rendendo il documento completamente ricercabile preservando l'aspetto originale.",
|
||||
"characterFilteringLabel": "Filtraggio caratteri:",
|
||||
"characterFilteringDescription": "Usa le whitelist per filtrare i caratteri indesiderati e migliorare la precisione per tipi specifici di documenti (fatture, moduli, ecc.).",
|
||||
"multiLanguageSupportLabel": "Supporto multilingua:",
|
||||
"multiLanguageSupportDescription": "Seleziona più lingue per documenti contenenti contenuto in lingue miste."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Alterna e Riordina Pagine",
|
||||
"subtitle": "Unisci i PDF alternando le pagine di ogni file. Conserva i segnalibri."
|
||||
"subtitle": "Unisci i PDF alternando le pagine di ogni file. Conserva i segnalibri.",
|
||||
"retainPageLabels": "Mantieni le etichette di pagina originali di ogni file",
|
||||
"retainPageLabelsHint": "Disattivato (predefinito): il PDF unito usa la numerazione naturale 1–N. Attivato: le etichette di pagina originali di ogni file vengono mantenute (può produrre etichette duplicate)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Fascicola scansione fronte/retro",
|
||||
"subtitle": "Riordina un PDF scansionato in due blocchi (prima tutti i fronti, poi tutti i retri) nel corretto ordine fronte/retro.",
|
||||
"totalPagesLabel": "Pagine totali:",
|
||||
"splitAfterPageLabel": "Dividi dopo la pagina",
|
||||
"splitAfterPagePlaceholder": "es. 50",
|
||||
"backBlockOrderLabel": "Ordine del blocco dei retri",
|
||||
"backBlockReverseOption": "Inverti il blocco dei retri (comune se la pila è stata girata)",
|
||||
"backBlockKeepOption": "Mantieni il blocco dei retri così com'è",
|
||||
"autoSplitButton": "Rileva divisione automaticamente (metà)",
|
||||
"exportGroupedLabel": "Esporta file raggruppati in base alla lunghezza del documento originale",
|
||||
"pagesPerDocumentLabel": "Pagine per documento originale",
|
||||
"groupedHelp": "Se attivo, il risultato è un file ZIP contenente un PDF per ogni documento raggruppato.",
|
||||
"collateButton": "Fascicola PDF",
|
||||
"invalidFileTitle": "File non valido",
|
||||
"invalidFileMessage": "Seleziona un file PDF.",
|
||||
"loadingPdf": "Caricamento del PDF...",
|
||||
"loadErrorMessage": "Impossibile caricare il file PDF.",
|
||||
"fileMeta": "{{size}} - {{count}} pagine",
|
||||
"oddPageWarning": "Numero di pagine dispari ({{count}}). Una scansione fronte/retro dovrebbe avere un numero pari di pagine: potrebbe mancarne una o essercene una in più.",
|
||||
"previewSummary": "Blocco fronti: {{frontCount}} pagina/e, blocco retri: {{backCount}} pagina/e. Risultato: {{outputCount}} pagina/e, in sequenza fronte/retro.",
|
||||
"previewMismatchWarning": "I blocchi fronte e retro hanno lunghezze diverse ({{frontCount}} fronti contro {{backCount}} retri). Le {{extraCount}} pagina/e in eccesso del blocco più lungo verranno aggiunte spaiate alla fine.",
|
||||
"missingFileTitle": "File mancante",
|
||||
"missingFileMessage": "Carica un PDF di almeno 2 pagine prima di procedere.",
|
||||
"invalidSplitTitle": "Punto di divisione non valido",
|
||||
"invalidSplitMessage": "Il punto di divisione deve essere compreso tra la pagina 1 e la pagina {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "Blocchi disuguali",
|
||||
"unevenConfirmMessage": "Il blocco dei fronti ha {{frontCount}} pagina/e e quello dei retri {{backCount}} pagina/e.\nDi solito significa che una pagina è stata scansionata due volte o che ne manca una.\n\nLe {{extraCount}} pagina/e spaiate verranno aggiunte alla fine.\n\nContinuare comunque?",
|
||||
"invalidGroupTitle": "Dimensione del gruppo non valida",
|
||||
"invalidGroupMessage": "Inserisci un numero valido di pagine per documento originale.",
|
||||
"collatingLoader": "Fascicolazione della scansione fronte/retro...",
|
||||
"successMessage": "PDF fascicolato generato correttamente.",
|
||||
"successGroupedMessage": "Fascicolazione completata. Generati {{fileCount}} file raggruppati.",
|
||||
"processErrorMessage": "Impossibile fascicolare il PDF.",
|
||||
"howItWorksStep1Title": "Carica la scansione",
|
||||
"howItWorksStep1": "Trascina il PDF unico che contiene prima tutti i fronti e poi tutti i retri.",
|
||||
"howItWorksStep2Title": "Imposta il punto di divisione",
|
||||
"howItWorksStep2": "Indica dove finisce il blocco dei fronti, poi scegli se il blocco dei retri deve essere invertito.",
|
||||
"howItWorksStep3Title": "Fascicola e scarica",
|
||||
"howItWorksStep3": "Ottieni un PDF con le pagine alternate, oppure un file ZIP con un file separato per ogni documento originale.",
|
||||
"faqOddPagesQuestion": "E se la mia scansione ha un numero dispari di pagine?",
|
||||
"faqOddPagesAnswer": "Una scansione fronte/retro dovrebbe avere un numero pari di pagine. In caso contrario, probabilmente una pagina è stata scansionata due volte o saltata. Lo strumento ti avvisa prima di procedere e le pagine spaiate vengono aggiunte alla fine, così non si perde nulla.",
|
||||
"faqBackOrderQuestion": "Perché dovrei mantenere il blocco dei retri così com'è?",
|
||||
"faqBackOrderAnswer": "Dipende da come è stata inserita la pila nel secondo passaggio. Girando l'intera pila i retri risultano in ordine inverso, che è l'impostazione predefinita. Se il tuo scanner li ha restituiti nello stesso ordine dei fronti, scegli di mantenere il blocco così com'è."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Aggiungi Allegati",
|
||||
@@ -660,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF in Testo",
|
||||
"subtitle": "Estrai il testo dai file PDF e salvalo come testo semplice (.txt). Supporta più file.",
|
||||
"note": "Questo strumento funziona SOLO con PDF creati digitalmente. Per documenti scansionati o basati su immagini, usa invece il nostro strumento OCR PDF.",
|
||||
"convertButton": "Estrai testo"
|
||||
"noteLabel": "Nota:",
|
||||
"noteText": "Questo strumento funziona SOLO con PDF creati digitalmente. Per documenti scansionati o PDF basati su immagini, usa invece il nostro strumento OCR PDF.",
|
||||
"convertButton": "Estrai testo",
|
||||
"note": "Questo strumento funziona SOLO con PDF creati digitalmente. Per documenti scansionati o basati su immagini, usa invece il nostro strumento OCR PDF."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Firma digitale PDF",
|
||||
"pageTitle": "Firma digitale PDF - Aggiungi firma crittografica | BentoPDF",
|
||||
"subtitle": "Aggiungi una firma digitale crittografica al tuo PDF usando certificati X.509. Supporta i formati PKCS#12 (.pfx, .p12) e PEM. La tua chiave privata non lascia mai il browser.",
|
||||
"certificateSection": "Certificato",
|
||||
"uploadCert": "Carica certificato (.pfx, .p12)",
|
||||
"uploadCert": "Carica certificato (.pfx, .p12, .pem)",
|
||||
"certPassword": "Password del certificato",
|
||||
"privateKeyPassword": "Password della chiave privata",
|
||||
"certPasswordPlaceholder": "Inserisci la password del certificato",
|
||||
"certInfo": "Informazioni sul certificato",
|
||||
"certSubject": "Soggetto",
|
||||
@@ -682,8 +1025,71 @@
|
||||
"locationPlaceholder": "es. Roma, Italia",
|
||||
"contactInfo": "Contatto",
|
||||
"contactPlaceholder": "es. [email protected]",
|
||||
"visibleSignature": "Firma visibile",
|
||||
"visibleSignatureDescription": "Quando abilitata, sul PDF appare un riquadro firma visibile. Puoi caricare un'immagine/logo o aggiungere testo. Se non viene fornito nessuno dei due, verrà mostrato automaticamente il nome del firmatario dal certificato.",
|
||||
"signatureImage": "Immagine/Logo firma (facoltativo)",
|
||||
"uploadSignatureImage": "Carica immagine (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Anteprima firma",
|
||||
"remove": "Rimuovi",
|
||||
"page": "Pagina",
|
||||
"firstPage": "Prima pagina",
|
||||
"lastPage": "Ultima pagina",
|
||||
"allPages": "Tutte le pagine",
|
||||
"customPage": "Pagina personalizzata #",
|
||||
"pageNumber": "Pagina #",
|
||||
"xPosition": "Posizione X (sinistra)",
|
||||
"yPosition": "Posizione Y (alto)",
|
||||
"width": "Larghezza",
|
||||
"height": "Altezza",
|
||||
"addTextOverlay": "Aggiungi sovrapposizione di testo",
|
||||
"text": "Testo",
|
||||
"textPlaceholder": "es. Firmato digitalmente da Mario Rossi",
|
||||
"textColor": "Colore del testo",
|
||||
"fontSize": "Dimensione carattere",
|
||||
"invalidImageTitle": "Immagine non valida",
|
||||
"invalidImageMessage": "Seleziona un'immagine PNG, JPG o WebP.",
|
||||
"invalidFileTitle": "File non valido",
|
||||
"invalidFileMessage": "Seleziona un file PDF.",
|
||||
"invalidCertificateTitle": "Certificato non valido",
|
||||
"invalidCertificateMessage": "Seleziona un file di certificato .pfx, .p12 o .pem.",
|
||||
"certificateLoaded": "Certificato caricato",
|
||||
"certificateUnlocked": "Certificato sbloccato",
|
||||
"failedParsePem": "Impossibile analizzare il file PEM",
|
||||
"enterPasswordToUnlock": "Inserisci la password per sbloccare",
|
||||
"invalidPasswordOrCertificate": "Password o certificato non validi",
|
||||
"incorrectPassword": "Password errata",
|
||||
"failedParseCertificate": "Impossibile analizzare il certificato",
|
||||
"missingDataTitle": "Dati mancanti",
|
||||
"missingDataMessage": "Carica sia un PDF che un certificato valido.",
|
||||
"applyingSignature": "Applicazione della firma digitale...",
|
||||
"signingFailedTitle": "Firma fallita",
|
||||
"chainFetchFailed": "Impossibile recuperare la catena di certificati. Potrebbe essere dovuto a problemi di rete o all'indisponibilità del proxy del certificato. Verifica la connessione Internet e riprova. Se il problema persiste, contatta il supporto.",
|
||||
"failedToSignPdf": "Impossibile firmare il PDF: {{message}}",
|
||||
"defaultSignatureText": "Firmato digitalmente da {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} pagine",
|
||||
"howToStep1Title": "Carica PDF",
|
||||
"howToStep1Text": "Seleziona il documento PDF che vuoi firmare",
|
||||
"howToStep2Title": "Carica certificato",
|
||||
"howToStep2Text": "Fornisci il file di certificato .pfx o .p12 e la password",
|
||||
"howToStep3Title": "Firma e scarica",
|
||||
"howToStep3Text": "Applica la firma digitale e scarica il tuo PDF firmato",
|
||||
"relatedEncryptDesc": "Proteggi il tuo PDF con password",
|
||||
"relatedDecryptDesc": "Rimuovi password dal PDF",
|
||||
"relatedFlattenDesc": "Rendi le annotazioni permanenti",
|
||||
"relatedSanitizeDesc": "Rimuovi dati nascosti",
|
||||
"relatedPermissionsDesc": "Imposta autorizzazioni PDF",
|
||||
"faqWhatIsQuestion": "Cos'è una firma digitale?",
|
||||
"faqWhatIsAnswer": "Una firma digitale è un meccanismo crittografico che verifica l'autenticità e l'integrità di un documento. A differenza di una firma disegnata, utilizza la crittografia a chiave pubblica (certificati X.509) per dimostrare l'identità del firmatario.",
|
||||
"faqFormatsQuestion": "Quali formati di certificato sono supportati?",
|
||||
"faqFormatsAnswer": "Supportiamo certificati in formato PKCS#12 (.pfx, .p12) che contengono sia il certificato che la chiave privata in un singolo file cifrato. Sono comunemente emessi da autorità di certificazione.",
|
||||
"faqPrivateKeyQuestion": "La mia chiave privata è al sicuro?",
|
||||
"faqPrivateKeyAnswer": "Sì! Tutta l'elaborazione avviene interamente nel tuo browser. Il tuo certificato, la chiave privata e i file PDF non lasciano mai il tuo dispositivo né vengono caricati su alcun server.",
|
||||
"faqValidReadersQuestion": "La firma sarà valida nei lettori PDF?",
|
||||
"faqValidReadersAnswer": "Sì, lo strumento crea firme separate PKCS#7 standard riconosciute da tutti i principali lettori PDF. Per una validazione completa, usa un certificato di un'autorità di certificazione affidabile.",
|
||||
"applySignature": "Applica firma digitale",
|
||||
"successMessage": "PDF firmato con successo! La firma può essere verificata in qualsiasi lettore PDF."
|
||||
"successMessage": "PDF firmato con successo! La firma può essere verificata in qualsiasi lettore PDF.",
|
||||
"internetRequiredTitle": "Connessione Internet richiesta",
|
||||
"internetRequiredDescription": "La firma potrebbe richiedere il recupero delle informazioni della catena di certificati dal server dell'emittente per validare la firma."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Verifica firma PDF",
|
||||
@@ -697,7 +1103,7 @@
|
||||
"tsaSectionTitle": "Server marca temporale (TSA)",
|
||||
"selectTsa": "Seleziona un server TSA",
|
||||
"applyTimestamp": "Applica marca temporale",
|
||||
"successMessage": "PDF marcato temporalmente con successo! La marca può essere verificata in Adobe Acrobat e altri lettori PDF."
|
||||
"successMessage": "PDF marcato temporalmente con successo! La marca temporale può essere verificata in qualsiasi lettore PDF."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email in PDF",
|
||||
@@ -772,7 +1178,113 @@
|
||||
"templateLoaded": "Modello \"{{name}}\" caricato.",
|
||||
"failedLoadTemplate": "Impossibile caricare il modello.",
|
||||
"noSettings": "Nessuna impostazione configurabile per questo nodo.",
|
||||
"advancedSettings": "Impostazioni avanzate"
|
||||
"advancedSettings": "Impostazioni avanzate",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "Input PDF",
|
||||
"description": "Carica uno o più file PDF"
|
||||
},
|
||||
"download": {
|
||||
"name": "Scarica",
|
||||
"description": "Scarica come PDF o ZIP automaticamente"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "Nessun PDF collegato al nodo {{node}}",
|
||||
"noPdfInputs": "Nessun PDF in input",
|
||||
"expectedPdfInput": "Atteso input PDF",
|
||||
"failedToRenderPage": "Impossibile renderizzare la pagina {{page}}",
|
||||
"failedToGetCanvasContext": "Impossibile ottenere il contesto del canvas per la pagina {{page}}",
|
||||
"failedToRenderPageToImage": "Impossibile renderizzare la pagina {{page}} come immagine",
|
||||
"noPagesProcessed": "Nessuna pagina elaborata",
|
||||
"cpdfNotConfigured": "CoherentPDF non è configurato. Configuralo nelle Impostazioni avanzate.",
|
||||
"workerError": "Errore del worker: {{message}}",
|
||||
"alternateMergeWorkerError": "Errore del worker di unione alternata: {{message}}",
|
||||
"noPdfFilesUploaded": "Nessun file PDF caricato nel nodo di input PDF",
|
||||
"failedToLoadFile": "Impossibile caricare \"{{file}}\" — il file potrebbe essere danneggiato",
|
||||
"noImagesUploaded": "Nessuna immagine caricata nel nodo di input Immagine",
|
||||
"noWordDocsUploaded": "Nessun documento caricato nel nodo di input Word",
|
||||
"noExcelUploaded": "Nessun foglio di calcolo caricato nel nodo di input Excel",
|
||||
"noPowerPointUploaded": "Nessuna presentazione caricata nel nodo di input PowerPoint",
|
||||
"noCbzUploaded": "Nessun archivio fumetto caricato nel nodo di input CBZ",
|
||||
"noEmailUploaded": "Nessun file email caricato nel nodo di input Email",
|
||||
"noEpubUploaded": "Nessun file EPUB caricato nel nodo di input EPUB",
|
||||
"noFb2Uploaded": "Nessun file FB2 caricato nel nodo di input FB2",
|
||||
"noJsonUploaded": "Nessun file JSON caricato nel nodo di input JSON",
|
||||
"noMarkdownUploaded": "Nessun file Markdown caricato nel nodo di input Markdown",
|
||||
"noMobiUploaded": "Nessun file MOBI caricato nel nodo di input MOBI",
|
||||
"noOdgUploaded": "Nessun file ODG caricato nel nodo di input ODG",
|
||||
"noPagesUploaded": "Nessun file Pages caricato nel nodo di input Pages",
|
||||
"noPubUploaded": "Nessun file PUB caricato nel nodo di input PUB",
|
||||
"noSvgUploaded": "Nessun file SVG caricato nel nodo di input SVG",
|
||||
"noTextUploaded": "Nessun file di testo caricato nel nodo di input testo",
|
||||
"noVsdUploaded": "Nessun file Visio caricato nel nodo di input VSD",
|
||||
"noWpdUploaded": "Nessun file WPD caricato nel nodo di input WPD",
|
||||
"noWpsUploaded": "Nessun file WPS caricato nel nodo di input WPS",
|
||||
"noXmlUploaded": "Nessun file XML caricato nel nodo di input XML",
|
||||
"noXpsUploaded": "Nessun file XPS caricato nel nodo di input XPS",
|
||||
"alternateMergeNeedsTwo": "Unione alternata richiede almeno due PDF collegati al suo input",
|
||||
"cropMarginsExceed": "I margini di ritaglio superano le dimensioni della pagina. Ridurre i valori.",
|
||||
"digitalSignNoCertificate": "Nessun certificato caricato nel nodo Firma digitale",
|
||||
"encryptUserPasswordRequired": "Password utente richiesta per la crittografia",
|
||||
"extractImagesNoneFound": "Nessuna immagine trovata nei PDF collegati",
|
||||
"invertColorsFailedReadImage": "Impossibile leggere i dati dell’immagine",
|
||||
"overlayRequiresPdf": "Il nodo Sovrapposizione richiede un input PDF di sovrapposizione.",
|
||||
"pdfToCsvNoTables": "Nessuna tabella trovata nel PDF",
|
||||
"pdfToXlsxNoTables": "Nessuna tabella trovata in {{file}}",
|
||||
"posterizeFailedTileCanvas": "Impossibile ottenere il contesto del canvas del riquadro",
|
||||
"redactNoText": "Oscuramento: nessun testo specificato da oscurare",
|
||||
"removeBlankPagesAllBlank": "Tutte le pagine sono vuote",
|
||||
"svgFailedToConvert": "Impossibile convertire SVG",
|
||||
"svgFailedToLoad": "Impossibile caricare SVG",
|
||||
"timestampFailed": "Errore nel marcare temporalmente con TSA {{tsa}}: {{message}}",
|
||||
"noOutputNodes": "Nessun nodo di output trovato. Aggiungi un nodo Download per completare il tuo workflow.",
|
||||
"circularDependency": "Dipendenza circolare rilevata nel workflow. Rimuovi eventuali loop tra i nodi.",
|
||||
"encryptOrdering": "Il nodo Cripta alimenta \"{{target}}\", che potrebbe fallire su dati crittografati. Sposta Cripta subito prima del nodo di output.",
|
||||
"invalidWorkflowFile": "File di workflow non valido: array di nodi o connessioni mancante.",
|
||||
"storageQuotaExceeded": "Errore nel salvataggio del workflow: quota di archiviazione superata. Prova a eliminare i template vecchi.",
|
||||
"failedToImport": "Errore nell’importazione del workflow: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Impostazioni funzionalità avanzate",
|
||||
"description": "Configura moduli di elaborazione esterni per abilitare funzionalità PDF avanzate. Questi moduli sono opzionali e con licenza separata.",
|
||||
"status": {
|
||||
"testing": "Test in corso...",
|
||||
"customOverride": "Sovrascrittura personalizzata",
|
||||
"preConfigured": "Preconfigurato",
|
||||
"notConfigured": "Non configurato"
|
||||
},
|
||||
"preconfiguredTitle": "Preconfigurato e pronto all'uso.",
|
||||
"preconfiguredDescription": "I moduli avanzati di elaborazione vengono caricati automaticamente da CDN. Puoi sovrascrivere gli URL qui sotto se devi usare una fonte personalizzata (es. per distribuzioni air-gapped o auto-ospitate).",
|
||||
"usingDefault": "Usando predefinito: {{url}}",
|
||||
"pymupdfSubtitle": "Motore di elaborazione documenti",
|
||||
"pymupdfFeatures": "Abilita: PDF a Testo, Markdown, SVG, DOCX, Excel • Estrai immagini/tabelle • Conversione formato",
|
||||
"testButton": "Testa",
|
||||
"recommendedLabel": "Consigliato:",
|
||||
"copyTitle": "Copia negli appunti",
|
||||
"ghostscriptSubtitle": "Motore di conversione PDF/A",
|
||||
"ghostscriptFeatures": "Abilita: Conversione PDF/A-1b, PDF/A-2b, PDF/A-3b • Carattere a contorno",
|
||||
"cpdfSubtitle": "Motore segnalibri e metadati",
|
||||
"cpdfFeatures": "Abilita: Dividi per segnalibri • Modifica segnalibri • Metadati PDF",
|
||||
"saveConfiguration": "Salva configurazione",
|
||||
"savingConfiguration": "Salvataggio della configurazione...",
|
||||
"savedTitle": "Salvato",
|
||||
"savedMessage": "Configurazione salvata con successo!",
|
||||
"errorTitle": "Errore",
|
||||
"failedSave": "Impossibile salvare la configurazione: {{message}}",
|
||||
"emptyUrlTitle": "URL vuoto",
|
||||
"emptyUrlMessage": "Inserisci un URL da testare.",
|
||||
"testSuccessTitle": "Successo",
|
||||
"connectionSuccess": "Connessione a {{package}} riuscita!",
|
||||
"connectionFailedTitle": "Connessione fallita",
|
||||
"connectionFailedMessage": "Impossibile connettersi all'URL.",
|
||||
"resetDefaults": "Ripristina predefiniti",
|
||||
"resetTitle": "Ripristina",
|
||||
"resetWithDefaults": "Sovrascritture personalizzate cancellate. I valori preconfigurati sono attivi.",
|
||||
"resetNoDefaults": "Tutte le configurazioni e i moduli in cache sono stati cancellati.",
|
||||
"licenseTitle": "Avviso di licenza:",
|
||||
"licenseDescription": "I moduli esterni (PyMuPDF, Ghostscript, CoherentPDF) sono concessi in licenza con AGPL-3.0 o licenze copyleft simili. Configurando e utilizzando questi moduli, accetti i rispettivi termini di licenza. BentoPDF è compatibile con qualsiasi implementazione WASM Ghostscript e PyMuPDF che segua l'interfaccia prevista."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "Sovrapposizione PDF",
|
||||
|
||||
@@ -0,0 +1,387 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "ホーム",
|
||||
"about": "BentoPDFについて",
|
||||
"contact": "コンタクト",
|
||||
"licensing": "ライセンス",
|
||||
"allTools": "すべてのツール",
|
||||
"docs": "ドキュメント",
|
||||
"openMainMenu": "メインメニューを開く",
|
||||
"language": "言語",
|
||||
"searchLanguage": "言語を検索…",
|
||||
"noLanguagesFound": "言語が見つかりません"
|
||||
},
|
||||
"donation": {
|
||||
"message": "BentoPDFは好きですか?無料かつオープンソースを維持するためにご協力ください!",
|
||||
"button": "寄付する"
|
||||
},
|
||||
"hero": {
|
||||
"title": "プライバシーのために作られた",
|
||||
"pdfToolkit": "PDFツールキット",
|
||||
"builtForPrivacy": " ",
|
||||
"noSignups": "登録不要",
|
||||
"unlimitedUse": "無制限の利用",
|
||||
"worksOffline": "オフラインでも動作",
|
||||
"startUsing": "今すぐ使い始めよう"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "これらの企業や従業員に利用されています"
|
||||
},
|
||||
"features": {
|
||||
"title": "選ぶ理由",
|
||||
"bentoPdf": "BentoPDFとは?",
|
||||
"noSignup": {
|
||||
"title": "登録不要",
|
||||
"description": "アカウントやメールは不要ですぐに始められます。"
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "アップロード不要",
|
||||
"description": "100%クライアント側で行われるためファイルがデバイスの外に流出することはありません。"
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "永久に無料",
|
||||
"description": "すべてのツールに試用版、ペイウォールはありません。"
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "制限なし",
|
||||
"description": "隠れた制限はなく、必要なだけ使用できます。"
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "バッチ処理",
|
||||
"description": "無制限なくPDFを一度に処理します。"
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "超高速処理",
|
||||
"description": "待つことも遅れたりすることもなくPDFを瞬時に処理します。"
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "始めましょう",
|
||||
"toolsLabel": "ツール",
|
||||
"subtitle": "ツールをクリックしてファイルアップローダーを開きます",
|
||||
"searchPlaceholder": "ツールを検索します(例: 「分割」、「整理」など)",
|
||||
"backToTools": "ツールに戻る",
|
||||
"firstLoadNotice": "変換エンジンをダウンロードするため最初の読み込みには少し時間がかかります。その後、すべての読み込みは瞬時に行われます。"
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "クリックしてファイルを選択します",
|
||||
"orDragAndDrop": "またはドラッグ&ドロップ",
|
||||
"pdfOrImages": "PDFまたは画像",
|
||||
"filesNeverLeave": "ファイルがデバイスの外に出ることはありません。",
|
||||
"addMore": "さらにファイルを追加する",
|
||||
"clearAll": "すべてクリア",
|
||||
"clearFiles": "ファイルをクリア",
|
||||
"hints": {
|
||||
"singlePdf": "単一のPDFファイル",
|
||||
"pdfFile": "PDFファイル",
|
||||
"multiplePdfs2": "複数のPDFファイル(2つ以上)",
|
||||
"bmpImages": "BMP画像",
|
||||
"oneOrMorePdfs": "1つ以上のPDFファイル",
|
||||
"pdfDocuments": "PDFドキュメント",
|
||||
"oneOrMoreCsv": "1つ以上のCSVファイル",
|
||||
"multiplePdfsSupported": "複数のPDFファイルをサポート",
|
||||
"singleOrMultiplePdfs": "単一または複数のPDFファイルをサポート",
|
||||
"singlePdfFile": "単一のPDFファイル",
|
||||
"pdfWithForms": "フォームフィールドを含むPDFファイル",
|
||||
"heicImages": "HEIC/HEIF画像",
|
||||
"jpgImages": "JPG、JPEG、JP2、JPX画像",
|
||||
"pdfsOrImages": "PDFまたは画像",
|
||||
"oneOrMoreOdt": "1つ以上のODTファイル",
|
||||
"singlePdfOnly": "単一のPDFファイルのみ",
|
||||
"pdfFiles": "PDFファイル",
|
||||
"multiplePdfs": "複数のPDFファイル",
|
||||
"pngImages": "PNG画像",
|
||||
"pdfFilesOneOrMore": "PDFファイル(1つ以上)",
|
||||
"oneOrMoreRtf": "1つ以上のRTFファイル",
|
||||
"svgGraphics": "SVGグラフィック",
|
||||
"tiffImages": "TIFF画像",
|
||||
"webpImages": "WebP 画像"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "仕組み",
|
||||
"step1Title": "ファイルをアップロード",
|
||||
"step1": "ファイルをクリックまたはドラッグ&ドロップして始めます",
|
||||
"step2Title": "処理",
|
||||
"step2": "プロセスボタンをクリックしてスタートします",
|
||||
"step3Title": "ダウンロード",
|
||||
"step3": "処理したファイルをすぐに保存します"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "関連するPDFツール"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "処理中..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "注意",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "ドキュメントのプレビュー",
|
||||
"downloadAsPdf": "PDFとしてダウンロード",
|
||||
"close": "閉じる"
|
||||
},
|
||||
"settings": {
|
||||
"title": "設定",
|
||||
"shortcuts": "ショートカット",
|
||||
"preferences": "環境設定",
|
||||
"displayPreferences": "表示設定",
|
||||
"searchShortcuts": "ショートカットを検索...",
|
||||
"shortcutsInfo": "キーを押したままにしてショートカットを設定します。変更は自動保存されます。",
|
||||
"shortcutsWarning": "⚠️ 一般的なブラウザショートカット(Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N など)は正常に動作しない可能性があるので避けてください。",
|
||||
"import": "インポート",
|
||||
"export": "エクスポート",
|
||||
"resetToDefaults": "初期値にリセット",
|
||||
"fullWidthMode": "全幅モード",
|
||||
"fullWidthDescription": "すべてのツールでコンテナを中央に配置するのではなく、全画面幅を使用します。",
|
||||
"compactMode": "コンパクトモード",
|
||||
"compactModeDescription": "ツールをカード形式ではなくコンパクトなリストで表示",
|
||||
"advancedSettings": "詳細設定",
|
||||
"advancedSettingsDescription": "外部処理モジュール (PyMuPDF、Ghostscript、CoherentPDF) を設定",
|
||||
"settingsAutoSaved": "設定は自動的に保存されます",
|
||||
"clickToSet": "クリックして設定します",
|
||||
"pressKeys": "キーを押してください...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "ショートカットはすでに使用されています",
|
||||
"assignedTo": "はすでに以下に割り当てられています:",
|
||||
"chooseDifferent": "別のショートカットを選択してください。",
|
||||
"reserved": "予約済みショートカットの警告",
|
||||
"commonlyUsed": "一般的に次の目的で使用されます。",
|
||||
"unreliable": "このショートカットは正常に動作しない場合やブラウザ/システムの動作と競合する可能性があります。",
|
||||
"useAnyway": "どうしても使いたいですか?",
|
||||
"resetTitle": "ショートカットをリセットする",
|
||||
"resetMessage": "すべてのショートカットを初期値にリセットしてもよろしいですか?<br><br>この操作は元に戻すことができません。",
|
||||
"importSuccessTitle": "インポート成功",
|
||||
"importSuccessMessage": "ショートカットが正常にインポートされました。",
|
||||
"importFailTitle": "インポートに失敗しました",
|
||||
"importFailMessage": "ショートカットのインポートに失敗しました。無効なファイル形式です。"
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "警告",
|
||||
"cancel": "キャンセル",
|
||||
"proceed": "進む"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "データがデバイスから離れることはありません",
|
||||
"weKeep": "私たちは世界的な基準に従って",
|
||||
"yourInfoSafe": "あなたの情報の安全",
|
||||
"byFollowingStandards": "を保護しています。",
|
||||
"processingLocal": "すべての処理はデバイス上でローカルに行われます。",
|
||||
"gdpr": {
|
||||
"title": "GDPR準拠",
|
||||
"description": "欧州連合内の個人データとプライバシーを保護します。"
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "CCPA準拠",
|
||||
"description": "カリフォルニア州の住民に、個人情報の収集、使用、共有方法についての権利を与えます。"
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "HIPAA準拠",
|
||||
"description": "米国の医療システムで機密の医療情報を扱うための保護措置を設定します。"
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "よくある",
|
||||
"questions": "質問",
|
||||
"sectionTitle": "よくある質問",
|
||||
"isFree": {
|
||||
"question": "BentoPDFは本当に無料ですか?",
|
||||
"answer": "はい、絶対に。BentoPDFのすべてのツールは完全に無料で使用でき、ファイル制限、サインアップ、ウォーターマークはありません。私たちは誰もがペイウォールなしでシンプルで強力なPDFツールにアクセスする権利があると信じています。"
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "私のファイルは安全ですか?どこで処理されますか?",
|
||||
"answer": "ファイルはコンピュータから外部に流出することがないため可能な限り安全に保たれます。すべての処理はWebブラウザ(クライアント側)で直接行われます。ファイルをサーバーにアップロードすることはありません。そのため完全なプライバシーとドキュメントの管理が維持されます。"
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Mac、Windows、モバイルで動作しますか?",
|
||||
"answer": "はい!BentoPDFは完全にブラウザ内で実行されるため、Windows, macOS, Linux, iOS,やAndroidなど、最新のWebブラウザを備えたあらゆるOSで動作します。"
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "BentoPDFはGDPRに準拠していますか?",
|
||||
"answer": "はい。BentoPDFはGDPRに完全に準拠しています。すべてのファイル処理はブラウザ内でローカルに行われ、私たちがファイルを収集したりサーバーに送信したりすることはないため、私たちはお客様のデータにアクセスすることはできません。これによりドキュメントを常に管理できるようになります。"
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "私のファイルを保存または追跡しますか?",
|
||||
"answer": "いいえ。私たちはあなたのファイルを保存、追跡、または記録することはありません。BentoPDFで行うことはすべてブラウザのメモリ内で行われ、ページを閉じると消えます。アップロード、履歴ログ、サーバーの関与はありません。"
|
||||
},
|
||||
"different": {
|
||||
"question": "BentoPDFは他のPDFツールと何が違うのですか?",
|
||||
"answer": "ほとんどのPDFツールは処理のためにファイルをサーバーにアップロードします。BentoPDFではそんなことはありません。私たちは安全な最新のWebテクノロジーを使用してブラウザでファイルを直接処理します。これはより高速なパフォーマンス、より強力なプライバシー、そして完全な安心感を意味します。"
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "ブラウザベースの処理はどのようにして安全を確保しますか?",
|
||||
"answer": "BentoPDFは完全にブラウザ内で実行されるため、ファイルがデバイスの外に流出することはありません。これによりサーバーのハッキング、データ侵害、不正アクセスのリスクが排除されます。ファイルは常にあなたのものになります。"
|
||||
},
|
||||
"analytics": {
|
||||
"question": "私を追跡するためにCookieまたは分析を使用しますか?",
|
||||
"answer": "いいえ。BentoPDF はあなたを一切追跡しません。Cookie、アナリティクス、トラッキングスクリプトは使用しておらず、公開サイト bentopdf.com でも同様です。あなたが誰で、ツールで何をしているかを私たちが知ることはありません。"
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": " ",
|
||||
"users": "利用者",
|
||||
"say": "の声"
|
||||
},
|
||||
"support": {
|
||||
"title": "私の作品が好きですか?",
|
||||
"description": "BentoPDFは情熱を注いだプロジェクトで、無料、プライベート、そして強力なPDFツールキットをすべての人に提供するために構築されました。役立つと思われる場合は、その開発をサポートすることを検討してください。どのコーヒーも役に立ちます!",
|
||||
"buyMeCoffee": "コーヒーを買ってください"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF。無断転載を禁じます。",
|
||||
"version": "バージョン",
|
||||
"company": "会社",
|
||||
"aboutUs": "当社について",
|
||||
"faqLink": "よくある質問",
|
||||
"contactUs": "お問い合わせ",
|
||||
"legal": "法的情報",
|
||||
"termsAndConditions": "利用規約",
|
||||
"privacyPolicy": "プライバシーポリシー",
|
||||
"followUs": "フォローする"
|
||||
},
|
||||
"merge": {
|
||||
"title": "PDFの結合",
|
||||
"description": "ファイル全体を結合するか、特定のページを選択して新しいドキュメントに結合します。",
|
||||
"fileMode": "ファイルモード",
|
||||
"pageMode": "ページモード",
|
||||
"howItWorks": "仕組み:",
|
||||
"fileModeInstructions": [
|
||||
"ファイルの順序を変更するには、アイコンをクリックしてドラッグします。",
|
||||
"各ファイルの「ページ」ボックスで範囲(「1-3,5」など)を指定して、それらのページのみを結合できます。",
|
||||
"そのファイルのすべてのページを含めるには「ページ」ボックスを空白のままにします。"
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"アップロードしたPDFのすべてのページが以下に表示されます。",
|
||||
"個々のページのサムネイルをドラッグ&ドロップするだけで、新しいファイルに希望どおりの順序を作成できます。"
|
||||
],
|
||||
"mergePdfs": "PDFを結合する"
|
||||
},
|
||||
"common": {
|
||||
"page": "ページ",
|
||||
"pages": "ページ",
|
||||
"of": "の",
|
||||
"download": "ダウンロード",
|
||||
"cancel": "キャンセル",
|
||||
"save": "保存",
|
||||
"delete": "消去",
|
||||
"edit": "編集",
|
||||
"add": "追加",
|
||||
"remove": "取り除く",
|
||||
"loading": "読み込み中...",
|
||||
"loadingPageCount": "ページを読み込んでいます...",
|
||||
"error": "エラー",
|
||||
"success": "成功",
|
||||
"file": "ファイル",
|
||||
"files": "ファイル",
|
||||
"close": "閉じる",
|
||||
"convert": "変換",
|
||||
"unknownError": "不明なエラー"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "私たちはPDFツールは次のようにあるべきだと考えています。",
|
||||
"subtitle": "高速、プライベート、そして無料。",
|
||||
"noCompromises": "妥協はありません。"
|
||||
},
|
||||
"mission": {
|
||||
"title": "私たちの使命",
|
||||
"description": "あなたのプライバシーを尊重し、決して支払いを要求しない、最も包括的なPDFツールボックスを提供すること。私たちは必須のドキュメントツールは誰でも、どこでも、障壁なくアクセスできるべきだと考えています。"
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "私たちの基本理念",
|
||||
"title": "プライバシー第一。常に。",
|
||||
"description": "データが商品である時代において私たちは異なるアプローチを採用しています。BentoPDFツールのすべての処理はブラウザ内でローカルに行われます。これはあなたのファイルが私たちのサーバーにアクセスすることはなく、あなたの文書を見ることも、あなたの行動を追跡することもありません。あなたの文書は完全かつ明確に非公開のままです。それは単なる機能ではありません。それは私たちの基盤です。"
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "なぜ",
|
||||
"speed": {
|
||||
"title": "スピードを追求した設計",
|
||||
"description": "サーバーへのアップロードやダウンロードを待つ必要はありません。WebAssemblyなどの最新のWebテクノロジーを使用してブラウザでファイルを直接処理することで、すべてのツールで比類のない速度を実現します。"
|
||||
},
|
||||
"free": {
|
||||
"title": "完全に無料",
|
||||
"description": "トライアル、サブスクリプション、隠れた料金はなく、人質に取られる「プレミアム」機能もありません。私たちは、強力なPDFツールは利益センターではなく公共事業であるべきだと考えています。"
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "アカウントは必要ありません",
|
||||
"description": "どのツールでもすぐに使い始めてください。メールアドレス、パスワード、その他の個人情報は必要ありません。ワークフローはスムーズかつ匿名である必要があります。"
|
||||
},
|
||||
"openSource": {
|
||||
"title": "オープンソースの精神",
|
||||
"description": "透明性を念頭に置いて構築されています。私たちはPDF-libやPDF.jsなどの素晴らしいオープンソースライブラリを活用し、強力なツールを誰もが利用できるようにするためのコミュニティ主導の取り組みを信じています。"
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "始める準備はできましたか?",
|
||||
"description": "毎日のドキュメントのニーズにBentoPDFを信頼している何千人ものユーザーに加わりましょう。プライバシーとパフォーマンスがもたらす違いを体験してください。",
|
||||
"button": "すべてのツールを探索する"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "お問い合わせ",
|
||||
"subtitle": "ぜひご意見をお待ちしております。ご質問、フィードバック、機能リクエストなどがありましたらお気軽にお問い合わせください。",
|
||||
"email": "次のアドレスにメールで直接ご連絡ください。"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "ライセンス",
|
||||
"subtitle": "ニーズに合ったライセンスを選択してください。"
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "PDFをアップロード",
|
||||
"upload": "アップロード",
|
||||
"addBlankPage": "空白ページを追加",
|
||||
"edit": "編集:",
|
||||
"undo": "元に戻す",
|
||||
"redo": "やり直し",
|
||||
"reset": "リセット",
|
||||
"selection": "選択:",
|
||||
"selectAll": "すべて選択",
|
||||
"deselectAll": "すべての選択を解除",
|
||||
"rotate": "回転:",
|
||||
"rotateLeft": "左",
|
||||
"rotateRight": "右",
|
||||
"transform": "操作:",
|
||||
"duplicate": "複製",
|
||||
"split": "分割",
|
||||
"clear": "クリア:",
|
||||
"delete": "消去",
|
||||
"download": "ダウンロード:",
|
||||
"downloadSelected": "選択したものをダウンロード",
|
||||
"exportPdf": "PDFをエクスポート",
|
||||
"uploadPdfFiles": "PDFまたは画像ファイルを選択",
|
||||
"dragAndDrop": "ここにPDFまたは画像ファイルをドラッグ&ドロップするかクリックして選択します",
|
||||
"selectFiles": "ファイルの選択",
|
||||
"dropToAdd": "PDFまたは画像ファイルをドロップして追加",
|
||||
"convertingImages": "画像をPDFに変換中...",
|
||||
"failedToConvertImages": "画像をPDFに変換できませんでした。",
|
||||
"renderingPages": "ページをレンダリング中...",
|
||||
"actions": {
|
||||
"duplicatePage": "このページを複製",
|
||||
"deletePage": "このページを削除",
|
||||
"insertPdf": "このページの後にPDFを挿入",
|
||||
"toggleSplit": "このページの後の分割を切り替え"
|
||||
},
|
||||
"pleaseWait": "お待ちください",
|
||||
"pagesRendering": "ページはまだレンダリング中です。お待ちください...",
|
||||
"noPagesSelected": "ページが選択されていません",
|
||||
"selectOnePage": "ダウンロードするページを1つ以上選択してください。",
|
||||
"noPages": "ページがありません",
|
||||
"noPagesToExport": "エクスポートするページがありません。",
|
||||
"renderingTitle": "ページのプレビューをレンダリングする",
|
||||
"errorRendering": "ページのサムネイルのレンダリングに失敗しました",
|
||||
"error": "エラー",
|
||||
"failedToLoad": "ロードに失敗しました"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "PDFツール",
|
||||
"subtitle": "開始するにはツールを選択してください"
|
||||
},
|
||||
"disabledTool": {
|
||||
"title": "ツールが使用できません",
|
||||
"heading": "このツールは無効になっています",
|
||||
"message": "このツールは、ご使用の環境では使用できません。詳細については、管理者にお問い合わせください。",
|
||||
"backHome": "ホームに戻る"
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,8 +5,11 @@
|
||||
"contact": "문의",
|
||||
"licensing": "라이선스",
|
||||
"allTools": "모든 도구",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "메인 메뉴 열기",
|
||||
"language": "언어"
|
||||
"language": "언어",
|
||||
"searchLanguage": "언어 검색…",
|
||||
"noLanguagesFound": "언어를 찾을 수 없습니다"
|
||||
},
|
||||
"donation": {
|
||||
"message": "BentoPDF가 마음에 드셨나요? 무료 오픈소스로 유지될 수 있도록 도와주세요!",
|
||||
@@ -97,8 +100,11 @@
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "이용 방법",
|
||||
"step1Title": "파일 업로드",
|
||||
"step1": "파일을 클릭하거나 끌어다 놓아 시작하세요",
|
||||
"step2Title": "처리",
|
||||
"step2": "처리 버튼을 눌러 변환을 시작하세요",
|
||||
"step3Title": "다운로드",
|
||||
"step3": "완성된 파일을 바로 저장하세요"
|
||||
},
|
||||
"relatedTools": {
|
||||
@@ -129,6 +135,10 @@
|
||||
"resetToDefaults": "기본값으로 초기화",
|
||||
"fullWidthMode": "전체 너비 모드",
|
||||
"fullWidthDescription": "가운데 정렬 대신 화면 전체 너비를 사용합니다",
|
||||
"compactMode": "간결 모드",
|
||||
"compactModeDescription": "도구를 카드가 아닌 간결한 목록으로 표시",
|
||||
"advancedSettings": "고급 설정",
|
||||
"advancedSettingsDescription": "외부 처리 모듈 구성 (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "설정은 자동으로 저장됩니다",
|
||||
"clickToSet": "클릭하여 설정",
|
||||
"pressKeys": "키를 누르세요...",
|
||||
@@ -206,7 +216,7 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "쿠키나 분석 도구로 사용자를 추적하나요?",
|
||||
"answer": "여러분의 프라이버시를 소중히 여깁니다. BentoPDF는 개인정보를 추적하지 않으며, 익명 방문 수 확인만을 위해 Simple Analytics를 사용합니다. 방문자 수는 알 수 있지만 누가 방문했는지는 절대 알 수 없습니다. Simple Analytics는 GDPR을 완전히 준수합니다."
|
||||
"answer": "아니요. BentoPDF는 사용자를 전혀 추적하지 않습니다. 쿠키, 분석 도구, 추적 스크립트를 사용하지 않으며, 실제 웹사이트 bentopdf.com에서도 마찬가지입니다. 저희는 사용자가 누구인지, 도구로 무엇을 하는지 결코 알 수 없습니다."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
@@ -260,11 +270,14 @@
|
||||
"add": "추가",
|
||||
"remove": "제거",
|
||||
"loading": "불러오는 중...",
|
||||
"loadingPageCount": "페이지 로드 중...",
|
||||
"error": "오류",
|
||||
"success": "완료",
|
||||
"file": "파일",
|
||||
"files": "파일",
|
||||
"close": "닫기"
|
||||
"close": "닫기",
|
||||
"convert": "변환",
|
||||
"unknownError": "알 수 없는 오류"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -337,9 +350,12 @@
|
||||
"download": "다운로드:",
|
||||
"downloadSelected": "선택 항목 다운로드",
|
||||
"exportPdf": "PDF 내보내기",
|
||||
"uploadPdfFiles": "PDF 파일 선택",
|
||||
"dragAndDrop": "PDF 파일을 여기에 끌어다 놓거나 클릭하여 선택하세요",
|
||||
"uploadPdfFiles": "PDF 또는 이미지 파일 선택",
|
||||
"dragAndDrop": "PDF 또는 이미지 파일을 여기에 끌어다 놓거나 클릭하여 선택하세요",
|
||||
"selectFiles": "파일 선택",
|
||||
"dropToAdd": "PDF 또는 이미지 파일을 놓아 추가",
|
||||
"convertingImages": "이미지를 PDF로 변환 중...",
|
||||
"failedToConvertImages": "이미지를 PDF로 변환하지 못했습니다.",
|
||||
"renderingPages": "페이지 렌더링 중...",
|
||||
"actions": {
|
||||
"duplicatePage": "이 페이지 복제",
|
||||
|
||||
+545
-24
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "PDF에서 변환",
|
||||
"organizeManage": "정리 및 관리",
|
||||
"optimizeRepair": "최적화 및 복구",
|
||||
"securePdf": "PDF 보안"
|
||||
"securePdf": "PDF 보안",
|
||||
"input": "입력",
|
||||
"output": "출력"
|
||||
},
|
||||
"convertToPdf": "PDF로 변환",
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF 멀티 도구",
|
||||
"subtitle": "병합, 분할, 정리, 삭제, 회전, 빈 페이지 추가, 추출, 복제를 하나의 화면에서."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "PDF 병합",
|
||||
"subtitle": "여러 PDF를 하나로 합칩니다. 북마크도 유지됩니다."
|
||||
"subtitle": "여러 PDF를 하나로 합칩니다. 북마크도 유지됩니다.",
|
||||
"retainPageLabels": "각 파일의 원래 페이지 레이블 유지",
|
||||
"retainPageLabelsHint": "꺼짐(기본): 병합된 PDF는 1–N의 자연스러운 페이지 번호를 사용합니다. 켜짐: 각 파일의 원래 페이지 레이블이 유지됩니다(중복 레이블이 발생할 수 있음)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "PDF 분할",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "PDF 편집기",
|
||||
"subtitle": "주석, 하이라이트, 마스킹, 댓글, 도형/이미지 추가, 검색 및 보기."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "PDF 텍스트 편집",
|
||||
"subtitle": "아무 단락이나 클릭해 실시간 리플로우, 글꼴, 스타일과 함께 바로 편집하세요.",
|
||||
"saved": "PDF를 저장했습니다! ({{size}} KB)",
|
||||
"failedToLoad": "PDF 텍스트 편집기를 불러오지 못했습니다.",
|
||||
"howToUpload": "PDF 업로드",
|
||||
"howToClick": "문단 클릭",
|
||||
"howToRestyle": "무엇이든 스타일 변경",
|
||||
"relatedPdfEditor": "PDF에 주석 달고 표시하기",
|
||||
"relatedSignPdf": "서명 그리기, 입력 또는 업로드",
|
||||
"relatedWatermark": "텍스트나 이미지 찍기",
|
||||
"relatedStamps": "페이지에 스탬프 배치",
|
||||
"relatedCompress": "파일 크기 줄이기",
|
||||
"relatedOrganizeName": "PDF 정리",
|
||||
"relatedOrganize": "페이지 순서 변경 및 관리",
|
||||
"open": "열기",
|
||||
"export": "내보내기",
|
||||
"filterAll": "전체",
|
||||
"filterText": "텍스트",
|
||||
"filterImages": "이미지",
|
||||
"filterShapes": "도형",
|
||||
"addText": "텍스트 추가",
|
||||
"langAuto": "자동",
|
||||
"change": "변경",
|
||||
"ignore": "무시",
|
||||
"next": "다음",
|
||||
"replace": "바꾸기",
|
||||
"replaceAll": "모두 바꾸기",
|
||||
"emptyState": "PDF를 열어 텍스트, 이미지, 도형을 편집하세요.",
|
||||
"choosePdf": "PDF 선택…",
|
||||
"font": "글꼴",
|
||||
"systemFonts": "시스템 글꼴",
|
||||
"color": "색상",
|
||||
"alignment": "정렬",
|
||||
"style": "스타일",
|
||||
"lists": "목록",
|
||||
"outline": "윤곽선",
|
||||
"spacing": "간격",
|
||||
"direction": "방향",
|
||||
"dirAuto": "자동",
|
||||
"pathStroke": "패스 선",
|
||||
"tipBackToUpload": "업로드로 돌아가기",
|
||||
"tipOpenAnotherPdf": "다른 PDF 열기",
|
||||
"tipExportS": "내보내기 (⌘S)",
|
||||
"tipUndoZ": "실행 취소 (⌘Z)",
|
||||
"tipRedoZ": "다시 실행 (⇧⌘Z)",
|
||||
"tipFileDetails": "파일 정보",
|
||||
"tipEditExistingContent": "기존 콘텐츠 편집",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "편집 도구가 적용되는 대상 — 복잡한 페이지에서는 범위를 좁히세요",
|
||||
"tipClickThePageToAddATextBox": "페이지를 클릭해 텍스트 상자를 추가하세요",
|
||||
"tipSpellCheckLanguage": "맞춤법 검사 언어",
|
||||
"tipFindAndReplace": "찾기 및 바꾸기",
|
||||
"tipAddAnImage": "이미지 추가",
|
||||
"tipCopyThisPageSTextInReadingOrder": "이 페이지의 텍스트를 읽기 순서대로 복사",
|
||||
"tipCheckTheSpellingOfThisPage": "이 페이지의 맞춤법 검사",
|
||||
"tipShowOrHideTheFormatPanel": "서식 패널 표시/숨기기",
|
||||
"phReplaceWith": "바꿀 내용",
|
||||
"tipAddToYourDictionary": "사전에 추가",
|
||||
"tipClose": "닫기",
|
||||
"phFind": "찾기",
|
||||
"tipPreviousMatch": "이전 일치 항목",
|
||||
"tipNextMatch": "다음 일치 항목",
|
||||
"tipRotateLeft90": "왼쪽으로 90° 회전",
|
||||
"tipRotateRight90": "오른쪽으로 90° 회전",
|
||||
"tipFlipHorizontal": "좌우 반전",
|
||||
"tipFlipVertical": "상하 반전",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "위치를 유지한 채 이 이미지 바꾸기",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "접근성을 위한 대체 텍스트(태그된 PDF)",
|
||||
"tipBringToFront": "맨 앞으로 가져오기",
|
||||
"tipSendToBack": "맨 뒤로 보내기",
|
||||
"tipDuplicate": "복제",
|
||||
"tipDelete": "삭제",
|
||||
"tipAlignLeftEdges": "왼쪽 가장자리 정렬",
|
||||
"tipAlignHorizontalCenters": "가로 가운데 정렬",
|
||||
"tipAlignRightEdges": "오른쪽 가장자리 정렬",
|
||||
"tipAlignTops": "위쪽 가장자리 정렬",
|
||||
"tipAlignVerticalCenters": "세로 가운데 정렬",
|
||||
"tipAlignBottoms": "아래쪽 가장자리 정렬",
|
||||
"tipDistributeHorizontally": "가로로 균등 배분",
|
||||
"tipDistributeVertically": "세로로 균등 배분",
|
||||
"tipFontSize": "글꼴 크기",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "이 기기에 설치된 글꼴 목록 보기(Chromium)",
|
||||
"tipCustomTextColor": "사용자 지정 텍스트 색",
|
||||
"tipAlignLeft": "왼쪽 정렬",
|
||||
"tipAlignCenter": "가운데 정렬",
|
||||
"tipAlignRight": "오른쪽 정렬",
|
||||
"tipJustify": "양쪽 정렬",
|
||||
"tipBold": "굵게",
|
||||
"tipItalic": "기울임꼴",
|
||||
"tipUnderline": "밑줄",
|
||||
"tipStrikethrough": "취소선",
|
||||
"tipSuperscript": "위 첨자",
|
||||
"tipSubscript": "아래 첨자",
|
||||
"tipToggleBulletedItem": "글머리 기호 켜기/끄기",
|
||||
"tipToggleNumberedItem": "번호 매기기 켜기/끄기",
|
||||
"tipNumberedListMarkerStyle": "번호 매기기 기호 스타일",
|
||||
"tipDecreaseListIndentTab": "들여쓰기 줄이기 (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "들여쓰기 늘리기 (Tab)",
|
||||
"tipTextOutlineColor": "텍스트 윤곽선 색",
|
||||
"tipOutlineWidth0None": "윤곽선 두께(0 = 없음)",
|
||||
"tipFromContent": "콘텐츠에서",
|
||||
"tipLeftToRight": "왼쪽에서 오른쪽",
|
||||
"tipRightToLeft": "오른쪽에서 왼쪽",
|
||||
"tipStrokeColor": "선 색",
|
||||
"tipStrokeWidth": "선 두께",
|
||||
"tipZoomPresets": "확대/축소 사전 설정",
|
||||
"tipZoomOut": "축소",
|
||||
"tipZoomIn": "확대",
|
||||
"tipFitPage": "페이지 맞춤",
|
||||
"tipPreviousPage": "이전 페이지",
|
||||
"tipTypeAPageNumberAndPressEnter": "페이지 번호를 입력하고 Enter를 누르세요",
|
||||
"tipNextPage": "다음 페이지",
|
||||
"tipDocumentProperties": "문서 속성",
|
||||
"tipHideBar": "막대 숨기기",
|
||||
"tipShowBar": "막대 표시"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG를 PDF로",
|
||||
"subtitle": "JPG, JPEG, JPEG2000(JP2/JPX) 이미지로 PDF를 만듭니다."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "복제 및 정리",
|
||||
"subtitle": "페이지를 복제하고, 순서를 바꾸고, 삭제합니다."
|
||||
"subtitle": "페이지를 복제하고, 순서를 바꾸고, 삭제합니다.",
|
||||
"saveChanges": "변경 사항 저장"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "페이지 삭제",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "북마크 편집",
|
||||
"subtitle": "PDF 북마크를 추가, 편집, 가져오기, 삭제, 추출합니다."
|
||||
"subtitle": "PDF 북마크를 추가, 편집, 가져오기, 삭제, 추출합니다.",
|
||||
"autoExtractExisting": "기존 책갈피 자동 추출",
|
||||
"importSectionTitle": "또는 책갈피 가져오기",
|
||||
"csvFormat": "CSV 형식: 제목,페이지,수준",
|
||||
"jsonFormat": "JSON 형식",
|
||||
"uploadCsvAction": "클릭하여 CSV 업로드",
|
||||
"uploadJsonAction": "클릭하여 JSON 업로드",
|
||||
"orDragHere": "또는 여기로 드래그"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "목차 생성",
|
||||
"subtitle": "PDF 북마크를 기반으로 목차 페이지를 만듭니다."
|
||||
"subtitle": "PDF 북마크를 기반으로 목차 페이지를 만듭니다.",
|
||||
"titleLabel": "목차 제목",
|
||||
"fontSize": "글자 크기",
|
||||
"fontFamily": "글꼴 패밀리",
|
||||
"addBookmark": "목차 페이지에 책갈피 추가",
|
||||
"generateButton": "목차 생성",
|
||||
"selectPdfFirst": "먼저 PDF 파일을 선택하세요.",
|
||||
"statusReadingFileMainThread": "파일 읽는 중 (메인 스레드)...",
|
||||
"statusGenerating": "목차 생성 중...",
|
||||
"errorReadingFileWithMessage": "파일 읽기 오류: {{message}}",
|
||||
"successGeneratedDownloadStarted": "목차가 성공적으로 생성되었습니다! 다운로드가 시작되었습니다.",
|
||||
"workerErrorWithMessage": "오류: {{message}}",
|
||||
"workerErrorOccurred": "Worker 오류가 발생했습니다. 자세한 내용은 콘솔을 확인하세요."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "페이지 번호",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "주석 도구 모음을 사용하여 PDF에 이미지 도장을 추가합니다.",
|
||||
"usernameLabel": "도장 사용자 이름",
|
||||
"usernamePlaceholder": "이름을 입력하세요 (도장용)",
|
||||
"usernameHint": "이 이름이 도장에 표시됩니다."
|
||||
"usernameHint": "이 이름이 도장에 표시됩니다.",
|
||||
"saveButton": "스탬프 PDF 저장"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "주석 제거",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF 양식 작성",
|
||||
"subtitle": "브라우저에서 직접 양식을 작성합니다. XFA 양식도 지원됩니다."
|
||||
"subtitle": "브라우저에서 직접 양식을 작성합니다. XFA 양식도 지원됩니다.",
|
||||
"uploadHint": "양식 필드가 있는 PDF를 업로드하세요. 아래 뷰어에서 직접 작성한 후 버튼을 클릭하여 작성된 양식을 저장하고 다운로드하세요. XFA 양식도 지원합니다.",
|
||||
"xfaNoteTitle": "XFA 양식 참고:",
|
||||
"xfaNoteDescription": "XFA(XML Forms Architecture)는 BentoPDF 및 Firefox와 같은 특정 PDF 뷰어에서만 지원되는 레거시 형식입니다. 다른 소프트웨어에서 XFA PDF를 열어 빈 페이지 또는 양식 필드가 보이지 않으면, 해당 뷰어가 XFA를 지원하지 않는다는 의미입니다. XFA 양식을 올바르게 보고 작성하려면 Firefox 또는 BentoPDF의 양식 작성기를 사용하세요."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "PDF 양식 만들기",
|
||||
"subtitle": "드래그 앤 드롭으로 작성 가능한 PDF 양식을 만듭니다."
|
||||
"subtitle": "드래그 앤 드롭으로 작성 가능한 PDF 양식을 만듭니다.",
|
||||
"orSeparator": "또는",
|
||||
"createBlankPdf": "빈 PDF 만들기"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "빈 페이지 제거",
|
||||
@@ -255,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "텍스트를 PDF로",
|
||||
"subtitle": "일반 텍스트 파일을 PDF로 변환합니다."
|
||||
"subtitle": "일반 텍스트 파일을 PDF로 변환합니다.",
|
||||
"uploadFiles": "파일 업로드",
|
||||
"typeText": "텍스트 입력",
|
||||
"acceptedFormats": "텍스트 파일 (.txt)",
|
||||
"fontFamily": "글꼴 패밀리",
|
||||
"fontSize": "글자 크기",
|
||||
"textColor": "텍스트 색상",
|
||||
"pageSize": "페이지 크기",
|
||||
"rtlAutoDetectNote": "RTL 언어(아랍어, 우르두어, 페르시아어 등)는 자동으로 감지되며 텍스트 방향이 조정됩니다.",
|
||||
"createButton": "PDF 생성"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON을 PDF로",
|
||||
"subtitle": "JSON 파일을 PDF 형식으로 변환합니다."
|
||||
"subtitle": "JSON 파일을 PDF 형식으로 변환합니다.",
|
||||
"noteLabel": "참고:",
|
||||
"noteText": "PDF→JSON 변환 도구로 만든 JSON 파일만 지원됩니다. 다른 도구의 표준 JSON 파일은 작동하지 않습니다.",
|
||||
"acceptedFormats": "여러 JSON 파일",
|
||||
"status": {
|
||||
"selectAtLeastOne": "JSON 파일을 1개 이상 선택하세요",
|
||||
"selectedReady": "{{count}}개 파일 선택됨. 변환 준비 완료!",
|
||||
"readingFiles": "파일 읽는 중 (메인 스레드)...",
|
||||
"converting": "JSON 파일을 PDF로 변환 중...",
|
||||
"readError": "파일 읽기 오류: {{message}}",
|
||||
"creatingZip": "ZIP 파일 생성 중...",
|
||||
"success": "JSON 파일이 PDF로 변환되었습니다! ZIP 다운로드가 시작되었습니다.",
|
||||
"zipError": "ZIP 생성 오류: {{message}}",
|
||||
"workerError": "Worker 오류: {{message}}",
|
||||
"getStarted": "시작할 JSON 파일 선택"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF를 JPG로",
|
||||
"subtitle": "PDF의 각 페이지를 JPG 이미지로 변환합니다."
|
||||
"subtitle": "PDF의 각 페이지를 JPG 이미지로 변환합니다.",
|
||||
"imageQuality": "이미지 품질",
|
||||
"imageQualityExplanation": "품질이 높을수록 파일 크기가 커집니다",
|
||||
"alert": {
|
||||
"invalidFile": "잘못된 파일",
|
||||
"invalidFileExplanation": "PDF 파일을 업로드하세요.",
|
||||
"noFile": "파일 없음",
|
||||
"noFileExplanation": "먼저 PDF 파일을 업로드하세요.",
|
||||
"conversionSuccess": "PDF가 JPG로 변환되었습니다!",
|
||||
"conversionError": "PDF를 JPG로 변환하지 못했습니다. 파일이 손상되었을 수 있습니다."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "JPG로 변환 중..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF를 PNG로",
|
||||
"subtitle": "PDF의 각 페이지를 PNG 이미지로 변환합니다."
|
||||
"subtitle": "PDF의 각 페이지를 PNG 이미지로 변환합니다.",
|
||||
"imageScale": "이미지 배율",
|
||||
"imageScaleExplanation": "배율이 높을수록 품질이 좋지만 파일이 커집니다",
|
||||
"alert": {
|
||||
"invalidFile": "잘못된 파일",
|
||||
"invalidFileExplanation": "PDF 파일을 업로드하세요.",
|
||||
"noFile": "파일 없음",
|
||||
"noFileExplanation": "먼저 PDF 파일을 업로드하세요.",
|
||||
"conversionSuccess": "PDF가 PNG로 변환되었습니다!",
|
||||
"conversionError": "PDF를 PNG로 변환하지 못했습니다. 파일이 손상되었을 수 있습니다."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "PNG로 변환 중..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF를 WebP로",
|
||||
"subtitle": "PDF의 각 페이지를 WebP 이미지로 변환합니다."
|
||||
"subtitle": "PDF의 각 페이지를 WebP 이미지로 변환합니다.",
|
||||
"imageQuality": "이미지 품질",
|
||||
"imageQualityExplanation": "품질이 높을수록 파일 크기가 커집니다",
|
||||
"alert": {
|
||||
"invalidFile": "잘못된 파일",
|
||||
"invalidFileExplanation": "PDF 파일을 업로드하세요.",
|
||||
"noFile": "파일 없음",
|
||||
"noFileExplanation": "먼저 PDF 파일을 업로드하세요.",
|
||||
"conversionSuccess": "PDF가 WebP로 변환되었습니다!",
|
||||
"conversionError": "PDF를 WebP로 변환하지 못했습니다. 파일이 손상되었을 수 있습니다."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "WebP로 변환 중..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF를 BMP로",
|
||||
"subtitle": "PDF의 각 페이지를 BMP 이미지로 변환합니다."
|
||||
"subtitle": "PDF의 각 페이지를 BMP 이미지로 변환합니다.",
|
||||
"alert": {
|
||||
"invalidFile": "잘못된 파일",
|
||||
"invalidFileExplanation": "PDF 파일을 업로드하세요.",
|
||||
"noFile": "파일 없음",
|
||||
"noFileExplanation": "먼저 PDF 파일을 업로드하세요.",
|
||||
"conversionSuccess": "PDF가 BMP로 변환되었습니다!",
|
||||
"conversionError": "PDF를 BMP로 변환하지 못했습니다. 파일이 손상되었을 수 있습니다."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "BMP로 변환 중..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF를 TIFF로",
|
||||
@@ -287,7 +508,15 @@
|
||||
"colorMode": "색상 모드",
|
||||
"multiPage": "다중 페이지 TIFF로 저장 (단일 파일)",
|
||||
"loadingVips": "이미지 프로세서 로드 중...",
|
||||
"converting": "TIFF로 변환 중..."
|
||||
"converting": "TIFF로 변환 중...",
|
||||
"alert": {
|
||||
"invalidFile": "잘못된 파일",
|
||||
"invalidFileExplanation": "PDF 파일을 업로드하세요.",
|
||||
"noFile": "파일 없음",
|
||||
"noFileExplanation": "먼저 PDF 파일을 업로드하세요.",
|
||||
"conversionSuccess": "PDF가 TIFF로 변환되었습니다!",
|
||||
"conversionError": "PDF를 TIFF로 변환하지 못했습니다. 파일이 손상되었을 수 있습니다."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF를 CBZ로",
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF를 JSON으로",
|
||||
"subtitle": "PDF 파일을 JSON 형식으로 변환합니다."
|
||||
"subtitle": "PDF 파일을 JSON 형식으로 변환합니다.",
|
||||
"convertButton": "JSON으로 변환",
|
||||
"status": {
|
||||
"selectAtLeastOne": "PDF 파일을 1개 이상 선택하세요",
|
||||
"selectedReady": "{{count}}개 파일 선택됨. 변환 준비 완료!",
|
||||
"checkingEncrypted": "암호화된 PDF 확인 중...",
|
||||
"readingFiles": "파일 읽는 중 (메인 스레드)...",
|
||||
"converting": "PDF를 JSON으로 변환 중...",
|
||||
"readError": "파일 읽기 오류: {{message}}",
|
||||
"creatingZip": "ZIP 파일 생성 중...",
|
||||
"success": "PDF가 JSON으로 변환되었습니다! ZIP 다운로드가 시작되었습니다.",
|
||||
"zipError": "ZIP 생성 오류: {{message}}",
|
||||
"workerError": "Worker 오류: {{message}}",
|
||||
"getStarted": "시작할 PDF 파일 선택"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "PDF의 텍스트를 검색하고 복사할 수 있게 만듭니다."
|
||||
"subtitle": "PDF의 텍스트를 검색하고 복사할 수 있게 만듭니다.",
|
||||
"languagesInDocument": "문서 내 언어",
|
||||
"searchLanguagesPlaceholder": "언어 검색...",
|
||||
"selectedLabel": "선택됨:",
|
||||
"none": "없음",
|
||||
"advancedSettingsSummary": "고급 설정 (정확도 향상을 위해 권장)",
|
||||
"resolutionLabel": "해상도",
|
||||
"resolutionStandard": "표준 (192 DPI)",
|
||||
"resolutionHigh": "높음 (288 DPI)",
|
||||
"resolutionUltra": "울트라 (384 DPI)",
|
||||
"binarizeLabel": "이미지 이진화 (깨끗한 스캔을 위한 대비 향상)",
|
||||
"embedFullFontsLabel": "전체 글꼴 포함 (파일 크기 증가, 호환성 향상)",
|
||||
"whitelistPresetLabel": "문자 화이트리스트 사전 설정",
|
||||
"whitelistNone": "없음 (모든 문자)",
|
||||
"whitelistAlphanumeric": "영숫자 + 기본 구두점",
|
||||
"whitelistNumbersCurrency": "숫자 + 통화 기호",
|
||||
"whitelistLettersOnly": "문자만 (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "숫자만 (0-9)",
|
||||
"whitelistInvoice": "인보이스/영수증 (숫자, $, ., -, /)",
|
||||
"whitelistForms": "양식 (영숫자 + 일반 기호)",
|
||||
"whitelistCustom": "사용자 지정...",
|
||||
"whitelistHelp": "이 문자만 인식됩니다. 모든 문자에는 비워 두세요.",
|
||||
"whitelistInputLabel": "문자 화이트리스트 (선택)",
|
||||
"whitelistInputPlaceholder": "예: abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "OCR 시작",
|
||||
"progressInitializing": "초기화 중...",
|
||||
"resultsTitle": "OCR 완료",
|
||||
"resultsDescription": "검색 가능한 PDF가 준비되었습니다. 추출된 텍스트를 아래에서 복사하거나 다운로드할 수도 있습니다.",
|
||||
"copyToClipboard": "클립보드에 복사",
|
||||
"downloadTxt": ".txt로 다운로드",
|
||||
"downloadSearchablePdf": "검색 가능 PDF 다운로드",
|
||||
"statusPrefix": "상태: {{status}}",
|
||||
"availabilityInvalidConfig": "이 배포에는 유효한 OCR 언어가 노출되어 있지 않습니다. VITE_TESSERACT_AVAILABLE_LANGUAGES를 유효한 Tesseract 코드로 설정하여 다시 빌드하세요.",
|
||||
"availabilityBundles": "이 배포에는 다음 OCR 언어가 포함되어 있습니다: {{languages}}.",
|
||||
"noLanguagesAvailable": "이 배포에 사용 가능한 OCR 언어가 없습니다.",
|
||||
"noLanguagesTitle": "언어가 선택되지 않음",
|
||||
"noLanguagesMessage": "OCR을 위해 적어도 하나의 언어를 선택하세요.",
|
||||
"noFileTitle": "파일 없음",
|
||||
"noFileMessage": "먼저 PDF 파일을 업로드하세요.",
|
||||
"languageUnavailableTitle": "OCR 언어 사용 불가",
|
||||
"ocrErrorTitle": "OCR 오류",
|
||||
"ocrErrorMessage": "OCR 처리 중 오류가 발생했습니다. Worker 로딩에 실패했을 수 있습니다. 다시 시도하세요.",
|
||||
"howItWorksTitle": "작동 방식:",
|
||||
"extractTextLabel": "텍스트 추출:",
|
||||
"extractTextDescription": "Tesseract OCR을 사용하여 스캔된 이미지나 PDF에서 텍스트를 인식합니다.",
|
||||
"searchableOutputLabel": "검색 가능한 출력:",
|
||||
"searchableOutputDescription": "보이지 않는 텍스트 레이어가 있는 새 PDF를 만들어 원본 모양을 유지하면서 문서를 완전히 검색 가능하게 합니다.",
|
||||
"characterFilteringLabel": "문자 필터링:",
|
||||
"characterFilteringDescription": "화이트리스트를 사용하여 원치 않는 문자를 필터링하고 특정 문서 유형(인보이스, 양식 등)의 정확도를 향상시킵니다.",
|
||||
"multiLanguageSupportLabel": "다국어 지원:",
|
||||
"multiLanguageSupportDescription": "혼합된 언어 콘텐츠가 포함된 문서를 위해 여러 언어를 선택하세요."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "페이지 교차 병합",
|
||||
"subtitle": "각 PDF의 페이지를 번갈아 가며 병합합니다. 북마크도 유지됩니다."
|
||||
"subtitle": "각 PDF의 페이지를 번갈아 가며 병합합니다. 북마크도 유지됩니다.",
|
||||
"retainPageLabels": "각 파일의 원래 페이지 레이블 유지",
|
||||
"retainPageLabelsHint": "꺼짐(기본): 병합된 PDF는 1–N의 자연스러운 페이지 번호를 사용합니다. 켜짐: 각 파일의 원래 페이지 레이블이 유지됩니다(중복 레이블이 발생할 수 있음)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "양면 스캔 정렬",
|
||||
"subtitle": "두 묶음(앞면 전체, 그다음 뒷면 전체)으로 스캔한 PDF를 올바른 앞/뒤 순서로 재정렬합니다.",
|
||||
"totalPagesLabel": "전체 페이지:",
|
||||
"splitAfterPageLabel": "분할 기준 페이지",
|
||||
"splitAfterPagePlaceholder": "예: 50",
|
||||
"backBlockOrderLabel": "뒷면 묶음 순서",
|
||||
"backBlockReverseOption": "뒷면 묶음 뒤집기 (용지를 뒤집어 스캔한 경우 일반적)",
|
||||
"backBlockKeepOption": "뒷면 묶음 그대로 두기",
|
||||
"autoSplitButton": "분할 지점 자동 감지 (절반)",
|
||||
"exportGroupedLabel": "원본 문서 길이에 따라 파일을 나누어 내보내기",
|
||||
"pagesPerDocumentLabel": "원본 문서당 페이지 수",
|
||||
"groupedHelp": "사용하면 나뉜 문서마다 PDF 하나씩 담긴 ZIP 파일로 저장됩니다.",
|
||||
"collateButton": "PDF 정렬",
|
||||
"invalidFileTitle": "잘못된 파일",
|
||||
"invalidFileMessage": "PDF 파일을 선택하세요.",
|
||||
"loadingPdf": "PDF 불러오는 중...",
|
||||
"loadErrorMessage": "PDF 파일을 불러오지 못했습니다.",
|
||||
"fileMeta": "{{size}} - {{count}}페이지",
|
||||
"oddPageWarning": "페이지 수가 홀수입니다({{count}}페이지). 양면 스캔은 페이지 수가 짝수여야 합니다. 페이지가 누락되었거나 중복되었을 수 있습니다.",
|
||||
"previewSummary": "앞면 묶음: {{frontCount}}페이지, 뒷면 묶음: {{backCount}}페이지. 결과: 앞/뒤 순서로 {{outputCount}}페이지.",
|
||||
"previewMismatchWarning": "앞면과 뒷면 묶음의 길이가 다릅니다(앞면 {{frontCount}}페이지, 뒷면 {{backCount}}페이지). 더 긴 쪽의 남은 {{extraCount}}페이지는 짝 없이 맨 뒤에 추가됩니다.",
|
||||
"missingFileTitle": "파일 없음",
|
||||
"missingFileMessage": "처리하기 전에 2페이지 이상인 PDF를 업로드하세요.",
|
||||
"invalidSplitTitle": "잘못된 분할 지점",
|
||||
"invalidSplitMessage": "분할 지점은 1페이지에서 {{maxSplit}}페이지 사이여야 합니다.",
|
||||
"unevenConfirmTitle": "묶음 길이 불일치",
|
||||
"unevenConfirmMessage": "앞면 묶음은 {{frontCount}}페이지, 뒷면 묶음은 {{backCount}}페이지입니다.\n보통 페이지가 두 번 스캔되었거나 누락되었다는 뜻입니다.\n\n짝이 없는 {{extraCount}}페이지는 맨 뒤에 추가됩니다.\n\n계속하시겠습니까?",
|
||||
"invalidGroupTitle": "잘못된 그룹 크기",
|
||||
"invalidGroupMessage": "원본 문서당 페이지 수를 올바르게 입력하세요.",
|
||||
"collatingLoader": "양면 스캔 정렬 중...",
|
||||
"successMessage": "정렬된 PDF를 만들었습니다.",
|
||||
"successGroupedMessage": "정렬이 완료되었습니다. {{fileCount}}개 파일을 만들었습니다.",
|
||||
"processErrorMessage": "PDF를 정렬하지 못했습니다.",
|
||||
"howItWorksStep1Title": "스캔 업로드",
|
||||
"howItWorksStep1": "앞면 전체 다음에 뒷면 전체가 들어 있는 PDF 한 개를 놓으세요.",
|
||||
"howItWorksStep2Title": "분할 지점 설정",
|
||||
"howItWorksStep2": "앞면 묶음이 끝나는 위치를 지정한 뒤, 뒷면 묶음을 뒤집어야 하는지 선택하세요.",
|
||||
"howItWorksStep3Title": "정렬 후 다운로드",
|
||||
"howItWorksStep3": "페이지가 번갈아 배치된 PDF 하나를 받거나, 원본 문서마다 파일이 나뉜 ZIP을 받으세요.",
|
||||
"faqOddPagesQuestion": "스캔한 페이지 수가 홀수이면 어떻게 되나요?",
|
||||
"faqOddPagesAnswer": "양면 스캔은 페이지 수가 짝수여야 합니다. 그렇지 않다면 한 페이지가 두 번 스캔되었거나 빠졌을 가능성이 큽니다. 처리 전에 경고가 표시되며, 짝이 없는 페이지는 맨 뒤에 추가되므로 사라지는 내용은 없습니다.",
|
||||
"faqBackOrderQuestion": "뒷면 묶음을 그대로 두는 경우는 언제인가요?",
|
||||
"faqBackOrderAnswer": "두 번째 스캔에서 용지를 어떻게 넣었는지에 따라 다릅니다. 전체 묶음을 뒤집으면 뒷면이 역순이 되며, 이것이 기본 설정입니다. 스캐너가 앞면과 같은 순서로 출력했다면 묶음을 그대로 두도록 선택하세요."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "첨부파일 추가",
|
||||
@@ -660,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF를 텍스트로",
|
||||
"subtitle": "PDF에서 텍스트를 추출하여 텍스트 파일(.txt)로 저장합니다. 여러 파일 지원.",
|
||||
"note": "이 도구는 디지털로 생성된 PDF에서만 작동합니다. 스캔 문서나 이미지 기반 PDF는 OCR PDF 도구를 사용해 주세요.",
|
||||
"convertButton": "텍스트 추출"
|
||||
"noteLabel": "참고:",
|
||||
"noteText": "이 도구는 디지털로 만든 PDF에서만 작동합니다. 스캔된 문서나 이미지 기반 PDF의 경우 OCR PDF 도구를 사용하세요.",
|
||||
"convertButton": "텍스트 추출",
|
||||
"note": "이 도구는 디지털로 생성된 PDF에서만 작동합니다. 스캔 문서나 이미지 기반 PDF는 OCR PDF 도구를 사용해 주세요."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "PDF 디지털 서명",
|
||||
"pageTitle": "PDF 디지털 서명 - 암호화 서명 추가 | BentoPDF",
|
||||
"subtitle": "X.509 인증서를 사용하여 PDF에 암호화 디지털 서명을 추가합니다. PKCS#12(.pfx, .p12) 및 PEM 형식을 지원합니다. 개인키는 브라우저 밖으로 나가지 않습니다.",
|
||||
"certificateSection": "인증서",
|
||||
"uploadCert": "인증서 업로드 (.pfx, .p12)",
|
||||
"uploadCert": "인증서 업로드 (.pfx, .p12, .pem)",
|
||||
"certPassword": "인증서 비밀번호",
|
||||
"privateKeyPassword": "개인 키 비밀번호",
|
||||
"certPasswordPlaceholder": "인증서 비밀번호 입력",
|
||||
"certInfo": "인증서 정보",
|
||||
"certSubject": "소유자",
|
||||
@@ -682,14 +1025,86 @@
|
||||
"locationPlaceholder": "예: 서울, 대한민국",
|
||||
"contactInfo": "연락처",
|
||||
"contactPlaceholder": "예: [email protected]",
|
||||
"visibleSignature": "표시되는 서명",
|
||||
"visibleSignatureDescription": "활성화하면 PDF에 표시되는 서명 상자가 나타납니다. 이미지/로고를 업로드하거나 텍스트를 추가할 수 있습니다. 둘 다 제공되지 않으면 인증서의 서명자 이름이 자동으로 표시됩니다.",
|
||||
"signatureImage": "서명 이미지/로고 (선택)",
|
||||
"uploadSignatureImage": "이미지 업로드 (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "서명 미리보기",
|
||||
"remove": "제거",
|
||||
"page": "페이지",
|
||||
"firstPage": "첫 페이지",
|
||||
"lastPage": "마지막 페이지",
|
||||
"allPages": "모든 페이지",
|
||||
"customPage": "사용자 지정 페이지 #",
|
||||
"pageNumber": "페이지 #",
|
||||
"xPosition": "X 위치 (왼쪽)",
|
||||
"yPosition": "Y 위치 (위)",
|
||||
"width": "너비",
|
||||
"height": "높이",
|
||||
"addTextOverlay": "텍스트 오버레이 추가",
|
||||
"text": "텍스트",
|
||||
"textPlaceholder": "예: John Doe가 디지털 서명함",
|
||||
"textColor": "텍스트 색상",
|
||||
"fontSize": "글자 크기",
|
||||
"invalidImageTitle": "잘못된 이미지",
|
||||
"invalidImageMessage": "PNG, JPG 또는 WebP 이미지를 선택하세요.",
|
||||
"invalidFileTitle": "잘못된 파일",
|
||||
"invalidFileMessage": "PDF 파일을 선택하세요.",
|
||||
"invalidCertificateTitle": "잘못된 인증서",
|
||||
"invalidCertificateMessage": ".pfx, .p12 또는 .pem 인증서 파일을 선택하세요.",
|
||||
"certificateLoaded": "인증서 로드됨",
|
||||
"certificateUnlocked": "인증서 잠금 해제됨",
|
||||
"failedParsePem": "PEM 파일을 파싱할 수 없습니다",
|
||||
"enterPasswordToUnlock": "잠금 해제할 비밀번호 입력",
|
||||
"invalidPasswordOrCertificate": "잘못된 비밀번호 또는 인증서",
|
||||
"incorrectPassword": "잘못된 비밀번호",
|
||||
"failedParseCertificate": "인증서를 파싱할 수 없습니다",
|
||||
"missingDataTitle": "데이터 누락",
|
||||
"missingDataMessage": "PDF와 유효한 인증서를 모두 업로드하세요.",
|
||||
"applyingSignature": "디지털 서명 적용 중...",
|
||||
"signingFailedTitle": "서명 실패",
|
||||
"chainFetchFailed": "인증서 체인을 가져올 수 없습니다. 네트워크 문제 또는 인증서 프록시를 사용할 수 없는 경우일 수 있습니다. 인터넷 연결을 확인하고 다시 시도하세요. 문제가 계속되면 지원팀에 문의하세요.",
|
||||
"failedToSignPdf": "PDF 서명 실패: {{message}}",
|
||||
"defaultSignatureText": "{{signer}}이(가) 디지털 서명함\n{{date}}",
|
||||
"pageCount": "{{count}} 페이지",
|
||||
"howToStep1Title": "PDF 업로드",
|
||||
"howToStep1Text": "서명할 PDF 문서 선택",
|
||||
"howToStep2Title": "인증서 업로드",
|
||||
"howToStep2Text": ".pfx 또는 .p12 인증서 파일과 비밀번호 제공",
|
||||
"howToStep3Title": "서명 및 다운로드",
|
||||
"howToStep3Text": "디지털 서명을 적용하고 서명된 PDF 다운로드",
|
||||
"relatedEncryptDesc": "PDF를 비밀번호로 보호",
|
||||
"relatedDecryptDesc": "PDF 비밀번호 제거",
|
||||
"relatedFlattenDesc": "주석을 영구화",
|
||||
"relatedSanitizeDesc": "숨겨진 데이터 제거",
|
||||
"relatedPermissionsDesc": "PDF 권한 설정",
|
||||
"faqWhatIsQuestion": "디지털 서명이란?",
|
||||
"faqWhatIsAnswer": "디지털 서명은 문서의 진위와 무결성을 확인하는 암호화 메커니즘입니다. 그려진 서명과 달리 공개 키 암호화(X.509 인증서)를 사용하여 서명자의 신원을 증명합니다.",
|
||||
"faqFormatsQuestion": "지원되는 인증서 형식은 무엇인가요?",
|
||||
"faqFormatsAnswer": "PKCS#12 형식 인증서(.pfx, .p12)를 지원합니다. 이 형식은 인증서와 개인 키를 단일 암호화된 파일에 포함하며, 보통 인증 기관에서 발급됩니다.",
|
||||
"faqPrivateKeyQuestion": "내 개인 키는 안전한가요?",
|
||||
"faqPrivateKeyAnswer": "예! 모든 처리는 브라우저에서 완전히 이루어집니다. 인증서, 개인 키, PDF 파일은 장치를 떠나거나 서버에 업로드되지 않습니다.",
|
||||
"faqValidReadersQuestion": "PDF 리더에서 서명이 유효합니까?",
|
||||
"faqValidReadersAnswer": "예, 이 도구는 모든 주요 PDF 뷰어에서 인식되는 표준 PKCS#7 분리 서명을 만듭니다. 완전한 검증을 위해서는 신뢰할 수 있는 인증 기관의 인증서를 사용하세요.",
|
||||
"applySignature": "디지털 서명 적용",
|
||||
"successMessage": "PDF 서명이 완료되었습니다! 모든 PDF 뷰어에서 서명을 확인할 수 있습니다."
|
||||
"successMessage": "PDF 서명이 완료되었습니다! 모든 PDF 뷰어에서 서명을 확인할 수 있습니다.",
|
||||
"internetRequiredTitle": "인터넷 연결 필요",
|
||||
"internetRequiredDescription": "서명을 검증하기 위해 인증서 발급자 서버에서 인증서 체인 정보를 가져와야 할 수 있습니다."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "PDF 서명 검증",
|
||||
"pageTitle": "PDF 서명 검증 - 디지털 서명 확인 | BentoPDF",
|
||||
"subtitle": "PDF의 디지털 서명을 검증합니다. 인증서 유효성 확인, 서명자 정보 조회, 문서 무결성 확인이 가능합니다. 모든 처리는 브라우저에서 이루어집니다."
|
||||
},
|
||||
"timestampPdf": {
|
||||
"name": "PDF 타임스탬프",
|
||||
"pageTitle": "PDF 타임스탬프 무료 온라인 - RFC 3161 문서 타임스탬프 | BentoPDF",
|
||||
"subtitle": "신뢰할 수 있는 타임스탬프 기관(TSA) 서버를 사용하여 PDF에 RFC 3161 문서 타임스탬프를 추가합니다. 문서가 특정 시점에 존재했음을 증명합니다. 인증서가 필요하지 않습니다.",
|
||||
"tsaSectionTitle": "타임스탬프 서버 (TSA)",
|
||||
"selectTsa": "TSA 서버 선택",
|
||||
"applyTimestamp": "타임스탬프 적용",
|
||||
"successMessage": "PDF 타임스탬프가 성공적으로 추가되었습니다! 타임스탬프는 모든 PDF 뷰어에서 확인할 수 있습니다."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "이메일을 PDF로",
|
||||
"subtitle": "이메일 파일(EML, MSG)을 PDF로 변환합니다. Outlook 내보내기 및 표준 이메일 형식을 지원합니다.",
|
||||
@@ -763,7 +1178,113 @@
|
||||
"templateLoaded": "템플릿 \"{{name}}\"을(를) 불러왔습니다.",
|
||||
"failedLoadTemplate": "템플릿을 불러오지 못했습니다.",
|
||||
"noSettings": "이 노드에는 설정할 항목이 없습니다.",
|
||||
"advancedSettings": "고급 설정"
|
||||
"advancedSettings": "고급 설정",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "PDF 입력",
|
||||
"description": "하나 이상의 PDF 파일 업로드"
|
||||
},
|
||||
"download": {
|
||||
"name": "다운로드",
|
||||
"description": "PDF 또는 ZIP으로 자동 다운로드"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "{{node}} 노드에 PDF가 연결되지 않았습니다",
|
||||
"noPdfInputs": "입력에 PDF가 없습니다",
|
||||
"expectedPdfInput": "PDF 입력이 필요합니다",
|
||||
"failedToRenderPage": "페이지 {{page}} 렌더링 실패",
|
||||
"failedToGetCanvasContext": "페이지 {{page}}의 캔버스 컨텍스트를 가져올 수 없습니다",
|
||||
"failedToRenderPageToImage": "페이지 {{page}}를 이미지로 렌더링할 수 없습니다",
|
||||
"noPagesProcessed": "처리된 페이지가 없습니다",
|
||||
"cpdfNotConfigured": "CoherentPDF가 구성되지 않았습니다. 고급 설정에서 구성하세요.",
|
||||
"workerError": "워커 오류: {{message}}",
|
||||
"alternateMergeWorkerError": "교차 병합 워커 오류: {{message}}",
|
||||
"noPdfFilesUploaded": "PDF 입력 노드에 PDF 파일이 업로드되지 않았습니다",
|
||||
"failedToLoadFile": "\"{{file}}\"을(를) 로드할 수 없습니다 - 파일이 손상되었을 수 있습니다",
|
||||
"noImagesUploaded": "이미지 입력 노드에 이미지가 업로드되지 않았습니다",
|
||||
"noWordDocsUploaded": "Word 입력 노드에 문서가 업로드되지 않았습니다",
|
||||
"noExcelUploaded": "Excel 입력 노드에 스프레드시트가 업로드되지 않았습니다",
|
||||
"noPowerPointUploaded": "PowerPoint 입력 노드에 프레젠테이션이 업로드되지 않았습니다",
|
||||
"noCbzUploaded": "CBZ 입력 노드에 만화 아카이브가 업로드되지 않았습니다",
|
||||
"noEmailUploaded": "이메일 입력 노드에 이메일 파일이 업로드되지 않았습니다",
|
||||
"noEpubUploaded": "EPUB 입력 노드에 EPUB 파일이 업로드되지 않았습니다",
|
||||
"noFb2Uploaded": "FB2 입력 노드에 FB2 파일이 업로드되지 않았습니다",
|
||||
"noJsonUploaded": "JSON 입력 노드에 JSON 파일이 업로드되지 않았습니다",
|
||||
"noMarkdownUploaded": "Markdown 입력 노드에 Markdown 파일이 업로드되지 않았습니다",
|
||||
"noMobiUploaded": "MOBI 입력 노드에 MOBI 파일이 업로드되지 않았습니다",
|
||||
"noOdgUploaded": "ODG 입력 노드에 ODG 파일이 업로드되지 않았습니다",
|
||||
"noPagesUploaded": "Pages 입력 노드에 Pages 파일이 업로드되지 않았습니다",
|
||||
"noPubUploaded": "PUB 입력 노드에 PUB 파일이 업로드되지 않았습니다",
|
||||
"noSvgUploaded": "SVG 입력 노드에 SVG 파일이 업로드되지 않았습니다",
|
||||
"noTextUploaded": "텍스트 입력 노드에 텍스트 파일이 업로드되지 않았습니다",
|
||||
"noVsdUploaded": "VSD 입력 노드에 Visio 파일이 업로드되지 않았습니다",
|
||||
"noWpdUploaded": "WPD 입력 노드에 WPD 파일이 업로드되지 않았습니다",
|
||||
"noWpsUploaded": "WPS 입력 노드에 WPS 파일이 업로드되지 않았습니다",
|
||||
"noXmlUploaded": "XML 입력 노드에 XML 파일이 업로드되지 않았습니다",
|
||||
"noXpsUploaded": "XPS 입력 노드에 XPS 파일이 업로드되지 않았습니다",
|
||||
"alternateMergeNeedsTwo": "교차 병합은 입력에 최소 두 개의 PDF가 연결되어야 합니다",
|
||||
"cropMarginsExceed": "자르기 여백이 페이지 크기를 초과합니다. 값을 줄이세요.",
|
||||
"digitalSignNoCertificate": "디지털 서명 노드에 인증서가 로드되지 않았습니다",
|
||||
"encryptUserPasswordRequired": "암호화에는 사용자 비밀번호가 필요합니다",
|
||||
"extractImagesNoneFound": "연결된 PDF에서 이미지를 찾을 수 없습니다",
|
||||
"invertColorsFailedReadImage": "이미지 데이터를 읽을 수 없습니다",
|
||||
"overlayRequiresPdf": "오버레이 노드에는 오버레이 PDF 입력이 필요합니다.",
|
||||
"pdfToCsvNoTables": "PDF에서 표를 찾을 수 없습니다",
|
||||
"pdfToXlsxNoTables": "{{file}}에서 표를 찾을 수 없습니다",
|
||||
"posterizeFailedTileCanvas": "타일 캔버스 컨텍스트를 가져올 수 없습니다",
|
||||
"redactNoText": "검열: 검열할 텍스트가 지정되지 않았습니다",
|
||||
"removeBlankPagesAllBlank": "모든 페이지가 비어 있습니다",
|
||||
"svgFailedToConvert": "SVG 변환 실패",
|
||||
"svgFailedToLoad": "SVG 로드 실패",
|
||||
"timestampFailed": "TSA {{tsa}}로 타임스탬프 실패: {{message}}",
|
||||
"noOutputNodes": "출력 노드를 찾을 수 없습니다. 워크플로를 완료하려면 다운로드 노드를 추가하세요.",
|
||||
"circularDependency": "워크플로에서 순환 종속성이 감지되었습니다. 노드 간의 루프를 제거하세요.",
|
||||
"encryptOrdering": "암호화 노드가 \"{{target}}\"에 연결되어 있어 암호화된 데이터에서 실패할 수 있습니다. 암호화를 출력 노드 바로 앞으로 이동하세요.",
|
||||
"invalidWorkflowFile": "잘못된 워크플로 파일: 노드 또는 연결 배열이 누락되었습니다.",
|
||||
"storageQuotaExceeded": "워크플로 저장 실패: 저장소 할당량을 초과했습니다. 오래된 템플릿을 삭제해 보세요.",
|
||||
"failedToImport": "워크플로 가져오기 실패: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "고급 기능 설정",
|
||||
"description": "고급 PDF 기능을 활성화하기 위해 외부 처리 모듈을 구성합니다. 이러한 모듈은 선택 사항이며 별도로 라이선스가 부여됩니다.",
|
||||
"status": {
|
||||
"testing": "테스트 중...",
|
||||
"customOverride": "사용자 지정 재정의",
|
||||
"preConfigured": "사전 구성됨",
|
||||
"notConfigured": "구성되지 않음"
|
||||
},
|
||||
"preconfiguredTitle": "사전 구성되어 사용 준비 완료.",
|
||||
"preconfiguredDescription": "고급 처리 모듈은 CDN에서 자동으로 로드됩니다. 사용자 지정 소스를 사용해야 하는 경우(예: 에어갭 또는 셀프 호스팅 배포) 아래의 URL을 재정의할 수 있습니다.",
|
||||
"usingDefault": "기본값 사용 중: {{url}}",
|
||||
"pymupdfSubtitle": "문서 처리 엔진",
|
||||
"pymupdfFeatures": "활성화: PDF→텍스트, Markdown, SVG, DOCX, Excel • 이미지/표 추출 • 형식 변환",
|
||||
"testButton": "테스트",
|
||||
"recommendedLabel": "권장:",
|
||||
"copyTitle": "클립보드에 복사",
|
||||
"ghostscriptSubtitle": "PDF/A 변환 엔진",
|
||||
"ghostscriptFeatures": "활성화: PDF/A-1b, PDF/A-2b, PDF/A-3b 변환 • 글꼴을 윤곽선으로",
|
||||
"cpdfSubtitle": "책갈피 및 메타데이터 엔진",
|
||||
"cpdfFeatures": "활성화: 책갈피로 분할 • 책갈피 편집 • PDF 메타데이터",
|
||||
"saveConfiguration": "구성 저장",
|
||||
"savingConfiguration": "구성 저장 중...",
|
||||
"savedTitle": "저장됨",
|
||||
"savedMessage": "구성이 성공적으로 저장되었습니다!",
|
||||
"errorTitle": "오류",
|
||||
"failedSave": "구성 저장 실패: {{message}}",
|
||||
"emptyUrlTitle": "빈 URL",
|
||||
"emptyUrlMessage": "테스트할 URL을 입력하세요.",
|
||||
"testSuccessTitle": "성공",
|
||||
"connectionSuccess": "{{package}}에 연결 성공!",
|
||||
"connectionFailedTitle": "연결 실패",
|
||||
"connectionFailedMessage": "URL에 연결할 수 없습니다.",
|
||||
"resetDefaults": "기본값으로 재설정",
|
||||
"resetTitle": "재설정",
|
||||
"resetWithDefaults": "사용자 지정 재정의가 지워졌습니다. 사전 구성된 기본값이 활성화되었습니다.",
|
||||
"resetNoDefaults": "모든 구성 및 캐시된 모듈이 지워졌습니다.",
|
||||
"licenseTitle": "라이선스 공지:",
|
||||
"licenseDescription": "외부 모듈(PyMuPDF, Ghostscript, CoherentPDF)은 AGPL-3.0 또는 유사한 카피레프트 라이선스에 따라 라이선스가 부여됩니다. 이러한 모듈을 구성하고 사용함으로써 해당 라이선스 조건에 동의하게 됩니다. BentoPDF는 예상되는 인터페이스를 따르는 모든 Ghostscript WASM 및 PyMuPDF WASM 구현과 호환됩니다."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "PDF 오버레이",
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "Contact",
|
||||
"licensing": "Licentie",
|
||||
"allTools": "Alle Tools",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Hoofdmenu openen",
|
||||
"language": "Taal"
|
||||
"language": "Taal",
|
||||
"searchLanguage": "Taal zoeken…",
|
||||
"noLanguagesFound": "Geen talen gevonden"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Vind je BentoPDF geweldig? Help ons het gratis en open source te houden!",
|
||||
@@ -33,7 +36,7 @@
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "Geen uploads",
|
||||
"description": "100% client-side, je bestanden blijven op jouw apparaat."
|
||||
"description": "100% client-side, jouw bestanden blijven op jouw apparaat."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Voor altijd gratis",
|
||||
@@ -56,15 +59,15 @@
|
||||
"title": "Aan de slag met",
|
||||
"toolsLabel": "Tools",
|
||||
"subtitle": "Klik een tool om de bestandslader te openen",
|
||||
"searchPlaceholder": "Zoek een tool (bijv. 'splitsen', 'organiseren', ...)",
|
||||
"searchPlaceholder": "Zoek een tool (bijv. 'splitsen', 'organiseren',…)",
|
||||
"backToTools": "Terug naar Tools",
|
||||
"firstLoadNotice": "De eerste keer duurt het even om onze machinerie te laden. Daarna gaat laadt alles direct."
|
||||
"firstLoadNotice": "De eerste keer duurt het even om onze machinerie te laden. Daarna laadt alles direct."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Klik om een bestand te selecteren",
|
||||
"orDragAndDrop": "of sleep er een hierheen",
|
||||
"pdfOrImages": "PDF's of afbeeldingen",
|
||||
"filesNeverLeave": "Je bestanden blijven op jouw apparaat.",
|
||||
"filesNeverLeave": "Jouw bestanden blijven op jouw apparaat.",
|
||||
"addMore": "Meer bestanden toevoegen",
|
||||
"clearAll": "Alles wissen",
|
||||
"clearFiles": "Bestanden wissen",
|
||||
@@ -83,7 +86,7 @@
|
||||
"heicImages": "HEIC/HEIF-afbeeldingen",
|
||||
"jpgImages": "JPG, JPEG, JP2, JPX afbeeldingen",
|
||||
"pdfsOrImages": "PDF's of afbeeldingen",
|
||||
"oneOrMoreOdt": "Eén of meer ODT-bestanden",
|
||||
"oneOrMoreOdt": "Een of meer ODT-bestanden",
|
||||
"singlePdfOnly": "Alleen een enkel PDF-bestand",
|
||||
"pdfFiles": "PDF-bestanden",
|
||||
"multiplePdfs": "Meerdere PDF-bestanden",
|
||||
@@ -97,15 +100,18 @@
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Hoe het werkt",
|
||||
"step1": "Klik of sleep uw bestand hierheen",
|
||||
"step1Title": "Bestand uploaden",
|
||||
"step1": "Klik of sleep je bestand hierheen",
|
||||
"step2Title": "Verwerken",
|
||||
"step2": "Klik op de verwerkingsknop",
|
||||
"step3": "Sla uw verwerkte bestand direct op"
|
||||
"step3Title": "Downloaden",
|
||||
"step3": "Sla je verwerkte bestand direct op"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Gerelateerde PDF-tools"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Verwerken..."
|
||||
"processing": "Verwerken…"
|
||||
},
|
||||
"alert": {
|
||||
"title": "Let op",
|
||||
@@ -121,17 +127,21 @@
|
||||
"shortcuts": "Sneltoetsen",
|
||||
"preferences": "Voorkeuren",
|
||||
"displayPreferences": "Voorkeuren weergeven",
|
||||
"searchShortcuts": "Sneltoetsen zoeken...",
|
||||
"searchShortcuts": "Sneltoetsen zoeken…",
|
||||
"shortcutsInfo": "Houd toetsen ingedrukt om deze in te stellen als sneltoets. Aanpassingen worden automatisch opgeslagen.",
|
||||
"shortcutsWarning": "⚠️ Vermijd algemene sneltoetsen voor browsers (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N etc.) aangezien deze niet betrouwbaar kunnen functioneren.",
|
||||
"shortcutsWarning": "⚠️ Voorkom algemene sneltoetsen voor browsers (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N etc.) aangezien deze niet betrouwbaar kunnen functioneren.",
|
||||
"import": "Importeren",
|
||||
"export": "Exporteren",
|
||||
"resetToDefaults": "Terugzetten naar standaard",
|
||||
"fullWidthMode": "Volledige breedte",
|
||||
"fullWidthDescription": "Gebruik de volledige breedte van het scherm in plaats van een gecentreerde kolom",
|
||||
"compactMode": "Compacte modus",
|
||||
"compactModeDescription": "Toon hulpprogramma's als compacte lijst in plaats van kaarten",
|
||||
"advancedSettings": "Geavanceerde instellingen",
|
||||
"advancedSettingsDescription": "Externe verwerkingsmodules configureren (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Instellingen worden automatisch opgeslagen",
|
||||
"clickToSet": "Klik om in te stellen",
|
||||
"pressKeys": "Druk toetsen...",
|
||||
"pressKeys": "Druk toetsen…",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Sneltoets al in gebruik",
|
||||
"assignedTo": "is al toegewezen aan:",
|
||||
@@ -142,7 +152,7 @@
|
||||
"useAnyway": "Wil je het toch gebruiken?",
|
||||
"resetTitle": "Sneltoetsen terugzetten",
|
||||
"resetMessage": "Weet je zeker dat je alle sneltoetsen wilt terugzetten naar standaard?<br><br>Deze actie kan niet ongedaan worden gemaakt.",
|
||||
"importSuccessTitle": "Importeren voltooid",
|
||||
"importSuccessTitle": "Importeren is voltooid",
|
||||
"importSuccessMessage": "Sneltoetsen zijn met succes geïmporteerd!",
|
||||
"importFailTitle": "Importeren is mislukt",
|
||||
"importFailMessage": "Het importeren van sneltoetsen is mislukt. Ongeldig bestandsformaat."
|
||||
@@ -206,7 +216,7 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Gebruikt BentoPDF cookies of analytics om mij te volgen?",
|
||||
"answer": "We geven om je privacy. BentoPDF houdt geen persoonlijke gegevens bij. We gebruiken Simple Analytics alleen om anonieme bezoekersaantallen te zien. Dit betekent dat we kunnen weten hoeveel mensen onze site bezoeken, maar we weten nooit wie jij bent. Simple Analytics is volledig AVG-conform en respecteert je privacy."
|
||||
"answer": "Nee. BentoPDF volgt je helemaal niet. We gebruiken geen cookies, analytics of trackingscripts – ook niet op de live website bentopdf.com. We weten nooit wie je bent of wat je met de tools doet."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
@@ -259,14 +269,15 @@
|
||||
"edit": "Bewerken",
|
||||
"add": "Toevoegen",
|
||||
"remove": "Verwijderen",
|
||||
"loading": "Laden...",
|
||||
"loadingPageCount": "Pagina's laden...",
|
||||
"loading": "Laden…",
|
||||
"loadingPageCount": "Pagina's laden…",
|
||||
"error": "Fout",
|
||||
"success": "Succes",
|
||||
"file": "Bestand",
|
||||
"files": "Bestanden",
|
||||
"close": "Sluiten",
|
||||
"convert": "Converteren"
|
||||
"convert": "Converteren",
|
||||
"unknownError": "Onbekende fout"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -339,10 +350,13 @@
|
||||
"download": "Laden:",
|
||||
"downloadSelected": "Selectie laden",
|
||||
"exportPdf": "PDF exporteren",
|
||||
"uploadPdfFiles": "PDF-bestanden selecteren",
|
||||
"dragAndDrop": "Klik om een bestand te selecteren, of sleep er een hierheen",
|
||||
"uploadPdfFiles": "PDF- of afbeeldingsbestanden selecteren",
|
||||
"dragAndDrop": "Klik om een bestand te selecteren, of sleep een PDF of afbeelding hierheen",
|
||||
"selectFiles": "Bestanden selecteren",
|
||||
"renderingPages": "Pagina's vewerken...",
|
||||
"dropToAdd": "Sleep PDF- of afbeeldingsbestanden om toe te voegen",
|
||||
"convertingImages": "Afbeeldingen omzetten naar PDF...",
|
||||
"failedToConvertImages": "Afbeeldingen omzetten naar PDF mislukt.",
|
||||
"renderingPages": "Pagina's verwerken…",
|
||||
"actions": {
|
||||
"duplicatePage": "Deze pagina dupliceren",
|
||||
"deletePage": "Deze pagina verwijderen",
|
||||
@@ -350,7 +364,7 @@
|
||||
"toggleSplit": "Splitsing maken na deze pagina"
|
||||
},
|
||||
"pleaseWait": "Even geduld",
|
||||
"pagesRendering": "Pagina's worden nog verwerkt. Even geduld...",
|
||||
"pagesRendering": "Pagina's worden nog verwerkt. Even geduld…",
|
||||
"noPagesSelected": "Geen pagina's geselecteerd",
|
||||
"selectOnePage": "Kies tenminste een pagina om te laden.",
|
||||
"noPages": "Geen pagina's",
|
||||
@@ -365,9 +379,9 @@
|
||||
"subtitle": "Selecteer een tool om te beginnen"
|
||||
},
|
||||
"disabledTool": {
|
||||
"title": "Tool Niet Beschikbaar",
|
||||
"title": "Tool niet beschikbaar",
|
||||
"heading": "Deze tool is uitgeschakeld",
|
||||
"message": "Deze tool is niet beschikbaar in uw implementatie. Neem contact op met uw beheerder voor meer informatie.",
|
||||
"backHome": "Terug naar Home"
|
||||
"message": "Deze tool is niet beschikbaar in deze implementatie. Neem contact op met de beheerder voor meer informatie.",
|
||||
"backHome": "Terug naar Thuis"
|
||||
}
|
||||
}
|
||||
|
||||
+498
-44
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Converteren van PDF",
|
||||
"organizeManage": "Organiseren & Beheren",
|
||||
"optimizeRepair": "Optimaliseren & Repareren",
|
||||
"securePdf": "PDF beveiligen"
|
||||
"securePdf": "PDF beveiligen",
|
||||
"input": "Invoer",
|
||||
"output": "Uitvoer"
|
||||
},
|
||||
"convertToPdf": "Naar PDF converteren",
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF Multi-tool",
|
||||
"subtitle": "Samenvoegen, Splitsen, Organiseren, Verwijderen, Roteren, Blanco pagina's toevoegen, Extraheren and Dupliceren in één enkele werkomgeving."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "PDF Samenvoegen",
|
||||
"subtitle": "Meerdere PDF's combineren tot één bestand. Bladwijzers behouden."
|
||||
"subtitle": "Meerdere PDF's combineren tot één bestand. Bladwijzers behouden.",
|
||||
"retainPageLabels": "Originele pagina-labels van elk bestand behouden",
|
||||
"retainPageLabelsHint": "Uit (standaard): de samengevoegde PDF gebruikt natuurlijke paginanummering 1–N. Aan: de originele pagina-labels van elk bestand blijven behouden (kan dubbele labels opleveren)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "PDF Splitsen",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "PDF Bewerken",
|
||||
"subtitle": "PDF's annoteren, markeren, redigeren, commentaar toevoegen, vormen/afbeelding toevoegen, doorzoeken and weergeven."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "PDF-tekst Bewerken",
|
||||
"subtitle": "Klik op een alinea en bewerk deze direct, met live tekstomloop, lettertypen en opmaak.",
|
||||
"saved": "PDF is opgeslagen! ({{size}} KB)",
|
||||
"failedToLoad": "Kan de PDF-teksteditor niet laden.",
|
||||
"howToUpload": "PDF uploaden",
|
||||
"howToClick": "Klik op een alinea",
|
||||
"howToRestyle": "Alles opnieuw vormgeven",
|
||||
"relatedPdfEditor": "PDF's annoteren en markeren",
|
||||
"relatedSignPdf": "Handtekening tekenen, typen of uploaden",
|
||||
"relatedWatermark": "Tekst of afbeeldingen stempelen",
|
||||
"relatedStamps": "Stempels op pagina's plaatsen",
|
||||
"relatedCompress": "Bestandsgrootte verkleinen",
|
||||
"relatedOrganizeName": "PDF ordenen",
|
||||
"relatedOrganize": "Pagina's herschikken en beheren",
|
||||
"open": "Openen",
|
||||
"export": "Exporteren",
|
||||
"filterAll": "Alles",
|
||||
"filterText": "Tekst",
|
||||
"filterImages": "Afbeeldingen",
|
||||
"filterShapes": "Vormen",
|
||||
"addText": "Tekst toevoegen",
|
||||
"langAuto": "Automatisch",
|
||||
"change": "Wijzigen",
|
||||
"ignore": "Negeren",
|
||||
"next": "Volgende",
|
||||
"replace": "Vervangen",
|
||||
"replaceAll": "Alles vervangen",
|
||||
"emptyState": "Open een PDF om de tekst, afbeeldingen en vormen te bewerken.",
|
||||
"choosePdf": "Kies een PDF…",
|
||||
"font": "Lettertype",
|
||||
"systemFonts": "Systeemlettertypen",
|
||||
"color": "Kleur",
|
||||
"alignment": "Uitlijning",
|
||||
"style": "Stijl",
|
||||
"lists": "Lijsten",
|
||||
"outline": "Omtrek",
|
||||
"spacing": "Afstand",
|
||||
"direction": "Richting",
|
||||
"dirAuto": "Automatisch",
|
||||
"pathStroke": "Padomtrek",
|
||||
"tipBackToUpload": "Terug naar uploaden",
|
||||
"tipOpenAnotherPdf": "Nog een PDF openen",
|
||||
"tipExportS": "Exporteren (⌘S)",
|
||||
"tipUndoZ": "Ongedaan maken (⌘Z)",
|
||||
"tipRedoZ": "Opnieuw (⇧⌘Z)",
|
||||
"tipFileDetails": "Bestandsgegevens",
|
||||
"tipEditExistingContent": "Bestaande inhoud bewerken",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "Wat het hulpmiddel Bewerken raakt — beperk het bereik op drukke pagina's",
|
||||
"tipClickThePageToAddATextBox": "Klik op de pagina om een tekstvak toe te voegen",
|
||||
"tipSpellCheckLanguage": "Taal van de spellingcontrole",
|
||||
"tipFindAndReplace": "Zoeken en vervangen",
|
||||
"tipAddAnImage": "Een afbeelding toevoegen",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Tekst van deze pagina in leesvolgorde kopiëren",
|
||||
"tipCheckTheSpellingOfThisPage": "Spelling van deze pagina controleren",
|
||||
"tipShowOrHideTheFormatPanel": "Opmaakpaneel tonen of verbergen",
|
||||
"phReplaceWith": "Vervangen door",
|
||||
"tipAddToYourDictionary": "Aan woordenboek toevoegen",
|
||||
"tipClose": "Sluiten",
|
||||
"phFind": "Zoeken",
|
||||
"tipPreviousMatch": "Vorige overeenkomst",
|
||||
"tipNextMatch": "Volgende overeenkomst",
|
||||
"tipRotateLeft90": "90° naar links draaien",
|
||||
"tipRotateRight90": "90° naar rechts draaien",
|
||||
"tipFlipHorizontal": "Horizontaal spiegelen",
|
||||
"tipFlipVertical": "Verticaal spiegelen",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Deze afbeelding vervangen met behoud van plaatsing",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Alternatieve tekst voor toegankelijkheid (getagde PDF's)",
|
||||
"tipBringToFront": "Naar voorgrond",
|
||||
"tipSendToBack": "Naar achtergrond",
|
||||
"tipDuplicate": "Dupliceren",
|
||||
"tipDelete": "Verwijderen",
|
||||
"tipAlignLeftEdges": "Linkerranden uitlijnen",
|
||||
"tipAlignHorizontalCenters": "Horizontaal centreren",
|
||||
"tipAlignRightEdges": "Rechterranden uitlijnen",
|
||||
"tipAlignTops": "Bovenranden uitlijnen",
|
||||
"tipAlignVerticalCenters": "Verticaal centreren",
|
||||
"tipAlignBottoms": "Onderranden uitlijnen",
|
||||
"tipDistributeHorizontally": "Horizontaal verdelen",
|
||||
"tipDistributeVertically": "Verticaal verdelen",
|
||||
"tipFontSize": "Tekengrootte",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Lettertypen op dit apparaat weergeven (Chromium)",
|
||||
"tipCustomTextColor": "Aangepaste tekstkleur",
|
||||
"tipAlignLeft": "Links uitlijnen",
|
||||
"tipAlignCenter": "Centreren",
|
||||
"tipAlignRight": "Rechts uitlijnen",
|
||||
"tipJustify": "Uitvullen",
|
||||
"tipBold": "Vet",
|
||||
"tipItalic": "Cursief",
|
||||
"tipUnderline": "Onderstrepen",
|
||||
"tipStrikethrough": "Doorhalen",
|
||||
"tipSuperscript": "Superscript",
|
||||
"tipSubscript": "Subscript",
|
||||
"tipToggleBulletedItem": "Opsommingsteken in-/uitschakelen",
|
||||
"tipToggleNumberedItem": "Genummerd item in-/uitschakelen",
|
||||
"tipNumberedListMarkerStyle": "Markeringsstijl voor genummerde lijsten",
|
||||
"tipDecreaseListIndentTab": "Inspringing verkleinen (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Inspringing vergroten (Tab)",
|
||||
"tipTextOutlineColor": "Kleur tekstomtrek",
|
||||
"tipOutlineWidth0None": "Omtrekbreedte (0 = geen)",
|
||||
"tipFromContent": "Uit inhoud",
|
||||
"tipLeftToRight": "Van links naar rechts",
|
||||
"tipRightToLeft": "Van rechts naar links",
|
||||
"tipStrokeColor": "Lijnkleur",
|
||||
"tipStrokeWidth": "Lijndikte",
|
||||
"tipZoomPresets": "Zoomvoorinstellingen",
|
||||
"tipZoomOut": "Uitzoomen",
|
||||
"tipZoomIn": "Inzoomen",
|
||||
"tipFitPage": "Pagina passend maken",
|
||||
"tipPreviousPage": "Vorige pagina",
|
||||
"tipTypeAPageNumberAndPressEnter": "Typ een paginanummer en druk op Enter",
|
||||
"tipNextPage": "Volgende pagina",
|
||||
"tipDocumentProperties": "Documenteigenschappen",
|
||||
"tipHideBar": "Balk verbergen",
|
||||
"tipShowBar": "Balk tonen"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG naar PDF",
|
||||
"subtitle": "Een of meer JPG-afbeeldingen opslaan als PDF."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Dupliceren & Organiseren",
|
||||
"subtitle": "Pagina's dupliceren, ordenen en verwijderen."
|
||||
"subtitle": "Pagina's dupliceren, ordenen en verwijderen.",
|
||||
"saveChanges": "Wijzigingen opslaan"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Pagina's Verwijderen",
|
||||
@@ -76,18 +198,37 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Bladwijzers Bewerken",
|
||||
"subtitle": "PDF-bladwijzers toevoegen, bewerken, importeren, verwijderen and extraheren."
|
||||
"subtitle": "PDF-bladwijzers toevoegen, bewerken, importeren, verwijderen and extraheren.",
|
||||
"autoExtractExisting": "Bestaande bladwijzers automatisch extraheren",
|
||||
"importSectionTitle": "Of bladwijzers importeren",
|
||||
"csvFormat": "CSV-formaat: titel,pagina,niveau",
|
||||
"jsonFormat": "JSON-formaat",
|
||||
"uploadCsvAction": "Klik om CSV te uploaden",
|
||||
"uploadJsonAction": "Klik om JSON te uploaden",
|
||||
"orDragHere": "of sleep hierheen"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Inhoudsopgave",
|
||||
"subtitle": "Een inhoudsopgave genereren van PDF-bladwijzers."
|
||||
"subtitle": "Een inhoudsopgave genereren van PDF-bladwijzers.",
|
||||
"titleLabel": "Titel inhoudsopgave",
|
||||
"fontSize": "Lettergrootte",
|
||||
"fontFamily": "Lettertype",
|
||||
"addBookmark": "Bladwijzer toevoegen voor inhoudsopgave-pagina",
|
||||
"generateButton": "Inhoudsopgave genereren",
|
||||
"selectPdfFirst": "Selecteer eerst een PDF-bestand.",
|
||||
"statusReadingFileMainThread": "Bestand lezen (Hoofdthread)...",
|
||||
"statusGenerating": "Inhoudsopgave genereren...",
|
||||
"errorReadingFileWithMessage": "Fout bij lezen bestand: {{message}}",
|
||||
"successGeneratedDownloadStarted": "Inhoudsopgave met succes gegenereerd! Download gestart.",
|
||||
"workerErrorWithMessage": "Fout: {{message}}",
|
||||
"workerErrorOccurred": "Er is een worker-fout opgetreden. Controleer de console voor details."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Paginanummers",
|
||||
"subtitle": "Paginanummers aan een document toevoegen."
|
||||
},
|
||||
"addPageLabels": {
|
||||
"name": "Paginelabels toevoegen",
|
||||
"name": "Paginalabels toevoegen",
|
||||
"subtitle": "Pas PDF-paginalabels toe met Romeinse cijfers, voorvoegsels en aangepaste startwaarden.",
|
||||
"uploadHint": "PDF-bestand",
|
||||
"howLabelsWorkTitle": "Hoe labels werken",
|
||||
@@ -99,7 +240,7 @@
|
||||
"addRule": "Regel toevoegen",
|
||||
"removeExistingLabels": "Bestaande paginalabels verwijderen voordat deze regels worden toegepast",
|
||||
"cpdfNote": "Deze tool gebruikt CoherentPDF in je browser. Als CoherentPDF niet is geconfigureerd, word je gevraagd dit in te stellen in de WASM-instellingen.",
|
||||
"processButton": "Paginelabels toevoegen",
|
||||
"processButton": "Paginalabels toevoegen",
|
||||
"howItWorksUploadTitle": "Bestand uploaden",
|
||||
"howItWorksUploadDescription": "Kies de PDF die je opnieuw wilt labelen.",
|
||||
"howItWorksDefineTitle": "Regels definiëren",
|
||||
@@ -112,7 +253,7 @@
|
||||
"faqMixQuestion": "Kan ik Romeinse cijfers en gewone nummers combineren?",
|
||||
"faqMixAnswer": "Ja. Voeg meerdere regels toe, zoals 1-4 met LowercaseRoman en 5-20 met DecimalArabic.",
|
||||
"faqPrivacyQuestion": "Blijven mijn bestanden privé?",
|
||||
"faqPrivacyAnswer": "Ja. De verwerking gebeurt in je browser met CoherentPDF WASM. Je PDF verlaat je apparaat niet.",
|
||||
"faqPrivacyAnswer": "Ja. De verwerking gebeurt in je browser met CoherentPDF WASM. Je PDF blijft op jouw apparaat.",
|
||||
"invalidFileTitle": "Ongeldig bestand",
|
||||
"invalidFileMessage": "Upload een geldig PDF-bestand.",
|
||||
"loadingPdf": "PDF laden...",
|
||||
@@ -130,11 +271,11 @@
|
||||
"continueNumbering": "Nummering voortzetten over onderbroken bereiken",
|
||||
"examplesNote": "Voorbeelden: 1-4 voor voorwerk met Romeinse cijfers, 15-20 met voorvoegsel A- en startwaarde 0, of oneven pagina's met voortgang ingeschakeld.",
|
||||
"uploadFirstMessage": "Upload eerst een PDF-bestand.",
|
||||
"applyingLabels": "Paginelabels toepassen...",
|
||||
"applyingLabels": "Paginalabels toepassen...",
|
||||
"invalidRangeMessage": "Regel {{number}} heeft een ongeldig paginabereik: {{range}}",
|
||||
"allPages": "alle pagina's",
|
||||
"emptyOutputMessage": "CoherentPDF heeft een leeg bestand geproduceerd.",
|
||||
"successMessage": "Paginelabels zijn succesvol toegevoegd!",
|
||||
"successMessage": "Paginalabels zijn met succes toegevoegd!",
|
||||
"processErrorMessage": "Kon de paginalabels niet toevoegen.",
|
||||
"styleOptions": {
|
||||
"DecimalArabic": "Decimale cijfers",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Afbeeldingsstempels toevoegen aan een PDF met de werkbalk Annotatie.",
|
||||
"usernameLabel": "Gebruikersnaam stempelen",
|
||||
"usernamePlaceholder": "Voer je naam in (voor stempels)",
|
||||
"usernameHint": "Deze naam verschijnt op stempels die je aanmaakt."
|
||||
"usernameHint": "Deze naam verschijnt op stempels die je aanmaakt.",
|
||||
"saveButton": "Gestempelde PDF opslaan"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Annotaties Verwijderen",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF-formulier Invullen",
|
||||
"subtitle": "Formulieren invullen vanuit de browser, incl. ondersteuning voor XFA-formulieren."
|
||||
"subtitle": "Formulieren invullen vanuit de browser, incl. ondersteuning voor XFA-formulieren.",
|
||||
"uploadHint": "Upload een PDF met formuliervelden. Vul ze direct in in de viewer hieronder en klik op de knop om het ingevulde formulier op te slaan en te downloaden. Ondersteunt ook XFA-formulieren.",
|
||||
"xfaNoteTitle": "Opmerking over XFA-formulieren:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) is een verouderd formaat dat alleen door bepaalde PDF-viewers zoals BentoPDF en Firefox wordt ondersteund. Als je een XFA-PDF in andere software opent en lege pagina's of geen formuliervelden ziet, betekent dat dat die viewer XFA niet ondersteunt. Om XFA-formulieren correct te bekijken en in te vullen, gebruik je Firefox of de Form Filler van BentoPDF."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "PDF-formulier Aanmaken",
|
||||
"subtitle": "Invulbare PDF-formulieren aanmaken met drag-and-drop tekstvelden."
|
||||
"subtitle": "Invulbare PDF-formulieren aanmaken met drag-and-drop tekstvelden.",
|
||||
"orSeparator": "OF",
|
||||
"createBlankPdf": "Lege PDF maken"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Blanco pagina's Verwijderen",
|
||||
@@ -255,11 +402,35 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Tekst naar PDF",
|
||||
"subtitle": "Converteer een bestand met platte tekst naar een PDF."
|
||||
"subtitle": "Converteer een bestand met platte tekst naar een PDF.",
|
||||
"uploadFiles": "Bestanden uploaden",
|
||||
"typeText": "Tekst typen",
|
||||
"acceptedFormats": "Tekstbestanden (.txt)",
|
||||
"fontFamily": "Lettertype",
|
||||
"fontSize": "Lettergrootte",
|
||||
"textColor": "Tekstkleur",
|
||||
"pageSize": "Paginagrootte",
|
||||
"rtlAutoDetectNote": "RTL-talen (Arabisch, Urdu, Perzisch, enz.) worden automatisch gedetecteerd en de tekstrichting wordt aangepast.",
|
||||
"createButton": "PDF maken"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON naar PDF",
|
||||
"subtitle": "Converteer JSON-bestanden naar PDF-formaat."
|
||||
"subtitle": "Converteer JSON-bestanden naar PDF-formaat.",
|
||||
"noteLabel": "Opmerking:",
|
||||
"noteText": "Alleen JSON-bestanden gemaakt door de PDF-naar-JSON-tool worden ondersteund. Standaard JSON-bestanden van andere tools werken niet.",
|
||||
"acceptedFormats": "Meerdere JSON-bestanden",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Selecteer ten minste 1 JSON-bestand",
|
||||
"selectedReady": "{{count}} bestand(en) geselecteerd. Klaar om te converteren!",
|
||||
"readingFiles": "Bestanden lezen (Hoofdthread)...",
|
||||
"converting": "JSON-bestanden naar PDF converteren...",
|
||||
"readError": "Fout bij lezen bestanden: {{message}}",
|
||||
"creatingZip": "ZIP-bestand maken...",
|
||||
"success": "JSON-bestanden met succes naar PDF geconverteerd! ZIP-download gestart.",
|
||||
"zipError": "Fout bij maken ZIP: {{message}}",
|
||||
"workerError": "Worker-fout: {{message}}",
|
||||
"getStarted": "Selecteer JSON-bestanden om te beginnen"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF naar JPG",
|
||||
@@ -373,7 +544,7 @@
|
||||
"invalidFileExplanation": "Upload een PDF-bestand.",
|
||||
"noFile": "Geen bestand",
|
||||
"noFileExplanation": "Upload eerst een PDF-bestand.",
|
||||
"conversionSuccess": "PDF succesvol geconverteerd naar CBZ!",
|
||||
"conversionSuccess": "PDF met succes geconverteerd naar CBZ!",
|
||||
"conversionError": "Kan PDF niet converteren naar CBZ. Het bestand is mogelijk beschadigd."
|
||||
}
|
||||
},
|
||||
@@ -383,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF naar JSON",
|
||||
"subtitle": "Converteer PDF-bestanden naar JSON-formaat."
|
||||
"subtitle": "Converteer PDF-bestanden naar JSON-formaat.",
|
||||
"convertButton": "Naar JSON converteren",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Selecteer ten minste 1 PDF-bestand",
|
||||
"selectedReady": "{{count}} bestand(en) geselecteerd. Klaar om te converteren!",
|
||||
"checkingEncrypted": "Versleutelde PDF's controleren...",
|
||||
"readingFiles": "Bestanden lezen (Hoofdthread)...",
|
||||
"converting": "PDF's naar JSON converteren...",
|
||||
"readError": "Fout bij lezen bestanden: {{message}}",
|
||||
"creatingZip": "ZIP-bestand maken...",
|
||||
"success": "PDF's met succes naar JSON geconverteerd! ZIP-download gestart.",
|
||||
"zipError": "Fout bij maken ZIP: {{message}}",
|
||||
"workerError": "Worker-fout: {{message}}",
|
||||
"getStarted": "Selecteer PDF-bestanden om te beginnen"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Maak een PDF doorzoekbaar en kopieerbaar."
|
||||
"subtitle": "Maak een PDF doorzoekbaar en kopieerbaar.",
|
||||
"languagesInDocument": "Talen in document",
|
||||
"searchLanguagesPlaceholder": "Talen zoeken...",
|
||||
"selectedLabel": "Geselecteerd:",
|
||||
"none": "Geen",
|
||||
"advancedSettingsSummary": "Geavanceerde instellingen (aanbevolen om nauwkeurigheid te verbeteren)",
|
||||
"resolutionLabel": "Resolutie",
|
||||
"resolutionStandard": "Standaard (192 DPI)",
|
||||
"resolutionHigh": "Hoog (288 DPI)",
|
||||
"resolutionUltra": "Ultra (384 DPI)",
|
||||
"binarizeLabel": "Afbeelding binariseren (contrast verbeteren voor schone scans)",
|
||||
"embedFullFontsLabel": "Volledige lettertypen insluiten (groter bestand, betere compatibiliteit)",
|
||||
"whitelistPresetLabel": "Tekens whitelist preset",
|
||||
"whitelistNone": "Geen (alle tekens)",
|
||||
"whitelistAlphanumeric": "Alfanumeriek + Basisinterpunctie",
|
||||
"whitelistNumbersCurrency": "Cijfers + Valutasymbolen",
|
||||
"whitelistLettersOnly": "Alleen letters (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Alleen cijfers (0-9)",
|
||||
"whitelistInvoice": "Factuur/Bon (cijfers, $, ., -, /)",
|
||||
"whitelistForms": "Formulieren (alfanumeriek + algemene symbolen)",
|
||||
"whitelistCustom": "Aangepast...",
|
||||
"whitelistHelp": "Alleen deze tekens worden herkend. Laat leeg voor alle tekens.",
|
||||
"whitelistInputLabel": "Tekens whitelist (optioneel)",
|
||||
"whitelistInputPlaceholder": "bijv. abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "OCR starten",
|
||||
"progressInitializing": "Initialiseren...",
|
||||
"resultsTitle": "OCR voltooid",
|
||||
"resultsDescription": "Je doorzoekbare PDF is klaar. Je kunt de geëxtraheerde tekst hieronder ook kopiëren of downloaden.",
|
||||
"copyToClipboard": "Naar klembord kopiëren",
|
||||
"downloadTxt": "Downloaden als .txt",
|
||||
"downloadSearchablePdf": "Doorzoekbare PDF downloaden",
|
||||
"statusPrefix": "Status: {{status}}",
|
||||
"availabilityInvalidConfig": "Deze deployment biedt geen geldige OCR-talen. Bouw opnieuw met VITE_TESSERACT_AVAILABLE_LANGUAGES ingesteld op geldige Tesseract-codes.",
|
||||
"availabilityBundles": "Deze deployment bevat OCR voor: {{languages}}.",
|
||||
"noLanguagesAvailable": "Geen OCR-talen beschikbaar in deze deployment.",
|
||||
"noLanguagesTitle": "Geen talen geselecteerd",
|
||||
"noLanguagesMessage": "Selecteer ten minste één taal voor OCR.",
|
||||
"noFileTitle": "Geen bestand",
|
||||
"noFileMessage": "Upload eerst een PDF-bestand.",
|
||||
"languageUnavailableTitle": "OCR-taal niet beschikbaar",
|
||||
"ocrErrorTitle": "OCR-fout",
|
||||
"ocrErrorMessage": "Er is een fout opgetreden tijdens het OCR-proces. De worker kan mogelijk niet zijn geladen. Probeer het opnieuw.",
|
||||
"howItWorksTitle": "Hoe het werkt:",
|
||||
"extractTextLabel": "Tekst extraheren:",
|
||||
"extractTextDescription": "Gebruikt Tesseract OCR om tekst te herkennen uit gescande afbeeldingen of PDF's.",
|
||||
"searchableOutputLabel": "Doorzoekbare uitvoer:",
|
||||
"searchableOutputDescription": "Maakt een nieuwe PDF met een onzichtbare tekstlaag, waardoor je document volledig doorzoekbaar wordt met behoud van het oorspronkelijke uiterlijk.",
|
||||
"characterFilteringLabel": "Tekens filteren:",
|
||||
"characterFilteringDescription": "Gebruik whitelists om ongewenste tekens uit te filteren en de nauwkeurigheid te verbeteren voor specifieke documenttypes (facturen, formulieren, enz.).",
|
||||
"multiLanguageSupportLabel": "Meertalige ondersteuning:",
|
||||
"multiLanguageSupportDescription": "Selecteer meerdere talen voor documenten met inhoud in gemengde talen."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Pagina's Afwisselen & Mixen",
|
||||
"subtitle": "PDF's samenvoegen met afwisselende pagina's vanuit elke PDF. Bladwijzers behouden."
|
||||
"subtitle": "PDF's samenvoegen met afwisselende pagina's vanuit elke PDF. Bladwijzers behouden.",
|
||||
"retainPageLabels": "Originele pagina-labels van elk bestand behouden",
|
||||
"retainPageLabelsHint": "Uit (standaard): de samengevoegde PDF gebruikt natuurlijke paginanummering 1–N. Aan: de originele pagina-labels van elk bestand blijven behouden (kan dubbele labels opleveren)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Dubbelzijdige scan sorteren",
|
||||
"subtitle": "Een PDF die in twee blokken is gescand (eerst alle voorkanten, dan alle achterkanten) in de juiste voor-/achterkantvolgorde zetten.",
|
||||
"totalPagesLabel": "Totaal aantal pagina's:",
|
||||
"splitAfterPageLabel": "Splitsen na pagina",
|
||||
"splitAfterPagePlaceholder": "bijv. 50",
|
||||
"backBlockOrderLabel": "Volgorde van achterkantblok",
|
||||
"backBlockReverseOption": "Achterkantblok omkeren (gebruikelijk bij een omgedraaide stapel)",
|
||||
"backBlockKeepOption": "Achterkantblok ongewijzigd laten",
|
||||
"autoSplitButton": "Splitsing automatisch bepalen (helft)",
|
||||
"exportGroupedLabel": "Gegroepeerde bestanden exporteren op lengte van het originele document",
|
||||
"pagesPerDocumentLabel": "Pagina's per origineel document",
|
||||
"groupedHelp": "Indien ingeschakeld is de uitvoer een ZIP-bestand met één PDF per gegroepeerd document.",
|
||||
"collateButton": "PDF sorteren",
|
||||
"invalidFileTitle": "Ongeldig bestand",
|
||||
"invalidFileMessage": "Selecteer een PDF-bestand.",
|
||||
"loadingPdf": "PDF laden...",
|
||||
"loadErrorMessage": "Kan het PDF-bestand niet laden.",
|
||||
"fileMeta": "{{size}} - {{count}} pagina's",
|
||||
"oddPageWarning": "Oneven aantal pagina's ({{count}}). Een dubbelzijdige scan hoort een even aantal pagina's te hebben; mogelijk ontbreekt er een pagina of is er een te veel.",
|
||||
"previewSummary": "Voorkantblok: {{frontCount}} pagina's, achterkantblok: {{backCount}} pagina's. Uitvoer: {{outputCount}} pagina's, in voor-/achterkantvolgorde.",
|
||||
"previewMismatchWarning": "De blokken met voor- en achterkanten verschillen in lengte ({{frontCount}} voorkanten tegenover {{backCount}} achterkanten). De {{extraCount}} extra pagina's van het langste blok worden zonder tegenhanger achteraan toegevoegd.",
|
||||
"missingFileTitle": "Bestand ontbreekt",
|
||||
"missingFileMessage": "Upload een PDF met minstens 2 pagina's voordat je verwerkt.",
|
||||
"invalidSplitTitle": "Ongeldig splitspunt",
|
||||
"invalidSplitMessage": "Het splitspunt moet tussen pagina 1 en pagina {{maxSplit}} liggen.",
|
||||
"unevenConfirmTitle": "Ongelijke blokken",
|
||||
"unevenConfirmMessage": "Het voorkantblok heeft {{frontCount}} pagina's en het achterkantblok {{backCount}} pagina's.\nMeestal betekent dit dat een pagina dubbel is gescand of ontbreekt.\n\nDe {{extraCount}} pagina's zonder tegenhanger worden achteraan toegevoegd.\n\nToch doorgaan?",
|
||||
"invalidGroupTitle": "Ongeldige groepsgrootte",
|
||||
"invalidGroupMessage": "Voer een geldig aantal pagina's per origineel document in.",
|
||||
"collatingLoader": "Dubbelzijdige scan sorteren...",
|
||||
"successMessage": "Gesorteerde PDF is aangemaakt.",
|
||||
"successGroupedMessage": "Sorteren voltooid. {{fileCount}} gegroepeerde bestanden aangemaakt.",
|
||||
"processErrorMessage": "Kan de PDF niet sorteren.",
|
||||
"howItWorksStep1Title": "Upload de scan",
|
||||
"howItWorksStep1": "Sleep de ene PDF met eerst alle voorkanten en daarna alle achterkanten naar binnen.",
|
||||
"howItWorksStep2Title": "Stel het splitspunt in",
|
||||
"howItWorksStep2": "Geef aan waar het voorkantblok eindigt en kies of het achterkantblok omgekeerd moet worden.",
|
||||
"howItWorksStep3Title": "Sorteer en download",
|
||||
"howItWorksStep3": "Je krijgt één PDF met afwisselende pagina's, of een ZIP met een apart bestand per origineel document.",
|
||||
"faqOddPagesQuestion": "Wat als mijn scan een oneven aantal pagina's heeft?",
|
||||
"faqOddPagesAnswer": "Een dubbelzijdige scan hoort een even aantal pagina's te hebben. Is dat niet zo, dan is er waarschijnlijk een pagina dubbel gescand of overgeslagen. De tool waarschuwt je voor het verwerken, en pagina's zonder tegenhanger worden achteraan toegevoegd zodat er niets verloren gaat.",
|
||||
"faqBackOrderQuestion": "Waarom zou ik het achterkantblok ongewijzigd laten?",
|
||||
"faqBackOrderAnswer": "Dat hangt af van hoe de stapel bij de tweede ronde is ingevoerd. De hele stapel omdraaien levert achterkanten in omgekeerde volgorde op; dat is de standaardinstelling. Gaf je scanner ze in dezelfde volgorde als de voorkanten terug, kies dan om het blok ongewijzigd te laten."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Bijlagen Toevoegen",
|
||||
@@ -718,44 +1000,110 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF naar Text",
|
||||
"subtitle": "Tekst uit een PDF-bestanden halen en opslaan als gewone tekst (.txt). Ondersteunt meerdere bestanden.",
|
||||
"note": "Dit hulpmiddel werkt ALLEEN met digitaal gemaakte PDF's. Gebruik voor gescande documenten of op afbeeldingen gebaseerde PDF's in plaats hiervan de OCR PDF-tool.",
|
||||
"convertButton": "Tekst extraheren"
|
||||
"noteLabel": "Opmerking:",
|
||||
"noteText": "Deze tool werkt ALLEEN met digitaal aangemaakte PDF's. Voor gescande documenten of PDF's op basis van afbeeldingen gebruik je in plaats daarvan onze OCR PDF-tool.",
|
||||
"convertButton": "Tekst extraheren",
|
||||
"note": "Dit hulpmiddel werkt ALLEEN met digitaal gemaakte PDF's. Gebruik voor gescande documenten of op afbeeldingen gebaseerde PDF's in plaats hiervan de OCR PDF-tool."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Digitale handtekening PDF",
|
||||
"pageTitle": "Digitale handtekening PDF - Cryptografische handtekening toevoegen | BentoPDF",
|
||||
"subtitle": "Een cryptografische digitale handtekening toevoegen aan een PDF met behulp van X.509-certificaten. Ondersteunt PKCS#12 (.pfx, .p12) en PEM-formaten. Jouw privésleutel verlaat jouw browser nooit.",
|
||||
"name": "Digitale handtekening",
|
||||
"pageTitle": "Digitale handtekening - Cryptografische handtekening toevoegen | BentoPDF",
|
||||
"subtitle": "Een cryptografische digitale handtekening toevoegen aan een PDF met behulp van X.509-certificaten. Ondersteunt PKCS#12 (.pfx, .p12) en PEM-formaten. Jouw privésleutel blijft op jouw browser.",
|
||||
"certificateSection": "Certificaat",
|
||||
"uploadCert": "Certificaat laden (.pfx, .p12)",
|
||||
"uploadCert": "Certificaat laden (.pfx, .p12, .pem)",
|
||||
"certPassword": "Certificaatwachtwoord",
|
||||
"privateKeyPassword": "Wachtwoord van private sleutel",
|
||||
"certPasswordPlaceholder": "Voer het wachtwoord van het certificaat in",
|
||||
"certInfo": "Certificaatinformatie",
|
||||
"certSubject": "Onderwerp",
|
||||
"certIssuer": "Uitgever",
|
||||
"certValidity": "Geldigheid",
|
||||
"signatureDetails": "Signature Details (Optioneel)",
|
||||
"signatureDetails": "Details (Optioneel)",
|
||||
"reason": "Reden",
|
||||
"reasonPlaceholder": "bijv., Ik keur dit document goed",
|
||||
"location": "Plaats",
|
||||
"locationPlaceholder": "bijv., New York, USA",
|
||||
"contactInfo": "Contactinformatie",
|
||||
"contactPlaceholder": "bijv., [email protected]",
|
||||
"visibleSignature": "Zichtbare handtekening",
|
||||
"visibleSignatureDescription": "Wanneer ingeschakeld, verschijnt een zichtbaar handtekeningvak op de PDF. Je kunt een afbeelding/logo uploaden of tekst toevoegen. Als geen van beide wordt opgegeven, wordt automatisch de naam van de ondertekenaar uit het certificaat getoond.",
|
||||
"signatureImage": "Handtekening afbeelding/logo (optioneel)",
|
||||
"uploadSignatureImage": "Afbeelding uploaden (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Voorbeeld van handtekening",
|
||||
"remove": "Verwijderen",
|
||||
"page": "Pagina",
|
||||
"firstPage": "Eerste pagina",
|
||||
"lastPage": "Laatste pagina",
|
||||
"allPages": "Alle pagina's",
|
||||
"customPage": "Aangepaste pagina #",
|
||||
"pageNumber": "Pagina #",
|
||||
"xPosition": "X-positie (links)",
|
||||
"yPosition": "Y-positie (boven)",
|
||||
"width": "Breedte",
|
||||
"height": "Hoogte",
|
||||
"addTextOverlay": "Tekstoverlay toevoegen",
|
||||
"text": "Tekst",
|
||||
"textPlaceholder": "bijv. Digitaal ondertekend door Jan Jansen",
|
||||
"textColor": "Tekstkleur",
|
||||
"fontSize": "Lettergrootte",
|
||||
"invalidImageTitle": "Ongeldige afbeelding",
|
||||
"invalidImageMessage": "Selecteer een PNG-, JPG- of WebP-afbeelding.",
|
||||
"invalidFileTitle": "Ongeldig bestand",
|
||||
"invalidFileMessage": "Selecteer een PDF-bestand.",
|
||||
"invalidCertificateTitle": "Ongeldig certificaat",
|
||||
"invalidCertificateMessage": "Selecteer een .pfx-, .p12- of .pem-certificaatbestand.",
|
||||
"certificateLoaded": "Certificaat geladen",
|
||||
"certificateUnlocked": "Certificaat ontgrendeld",
|
||||
"failedParsePem": "Kon PEM-bestand niet parseren",
|
||||
"enterPasswordToUnlock": "Voer wachtwoord in om te ontgrendelen",
|
||||
"invalidPasswordOrCertificate": "Ongeldig wachtwoord of certificaat",
|
||||
"incorrectPassword": "Onjuist wachtwoord",
|
||||
"failedParseCertificate": "Kon certificaat niet parseren",
|
||||
"missingDataTitle": "Ontbrekende gegevens",
|
||||
"missingDataMessage": "Upload zowel een PDF als een geldig certificaat.",
|
||||
"applyingSignature": "Digitale handtekening toepassen...",
|
||||
"signingFailedTitle": "Ondertekenen mislukt",
|
||||
"chainFetchFailed": "Kon certificaatketen niet ophalen. Dit kan komen door netwerkproblemen of doordat de certificaatproxy niet beschikbaar is. Controleer je internetverbinding en probeer opnieuw. Als het probleem aanhoudt, neem contact op met support.",
|
||||
"failedToSignPdf": "Kon PDF niet ondertekenen: {{message}}",
|
||||
"defaultSignatureText": "Digitaal ondertekend door {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} pagina's",
|
||||
"howToStep1Title": "PDF uploaden",
|
||||
"howToStep1Text": "Selecteer het PDF-document dat je wilt ondertekenen",
|
||||
"howToStep2Title": "Certificaat uploaden",
|
||||
"howToStep2Text": "Geef je .pfx- of .p12-certificaatbestand en wachtwoord op",
|
||||
"howToStep3Title": "Ondertekenen en downloaden",
|
||||
"howToStep3Text": "Pas de digitale handtekening toe en download je ondertekende PDF",
|
||||
"relatedEncryptDesc": "Beveilig je PDF met een wachtwoord",
|
||||
"relatedDecryptDesc": "PDF-wachtwoord verwijderen",
|
||||
"relatedFlattenDesc": "Annotaties permanent maken",
|
||||
"relatedSanitizeDesc": "Verborgen gegevens verwijderen",
|
||||
"relatedPermissionsDesc": "PDF-machtigingen instellen",
|
||||
"faqWhatIsQuestion": "Wat is een digitale handtekening?",
|
||||
"faqWhatIsAnswer": "Een digitale handtekening is een cryptografisch mechanisme dat de authenticiteit en integriteit van een document verifieert. In tegenstelling tot een getekende handtekening gebruikt het public-key-cryptografie (X.509-certificaten) om de identiteit van de ondertekenaar te bewijzen.",
|
||||
"faqFormatsQuestion": "Welke certificaatformaten worden ondersteund?",
|
||||
"faqFormatsAnswer": "We ondersteunen PKCS#12-formaat certificaten (.pfx, .p12) die zowel je certificaat als private sleutel in één versleuteld bestand bevatten. Deze worden meestal uitgegeven door certificaatautoriteiten.",
|
||||
"faqPrivateKeyQuestion": "Is mijn private sleutel veilig?",
|
||||
"faqPrivateKeyAnswer": "Ja! Alle verwerking gebeurt volledig in je browser. Je certificaat, private sleutel en PDF-bestanden verlaten nooit je apparaat en worden niet naar een server geüpload.",
|
||||
"faqValidReadersQuestion": "Is de handtekening geldig in PDF-lezers?",
|
||||
"faqValidReadersAnswer": "Ja, de tool maakt standaard PKCS#7 detached signatures die door alle grote PDF-lezers worden herkend. Voor volledige validatie gebruik je een certificaat van een vertrouwde certificaatautoriteit.",
|
||||
"applySignature": "Digitale handtekening toepassen",
|
||||
"successMessage": "PDF is ondertekend! De handtekening kan in elke PDF-lezer worden geverifieerd."
|
||||
"successMessage": "PDF is ondertekend! De handtekening kan in elke PDF-lezer worden geverifieerd.",
|
||||
"internetRequiredTitle": "Internetverbinding vereist",
|
||||
"internetRequiredDescription": "Bij het ondertekenen kan certificaatkeeninformatie van de server van je certificaatuitgever worden opgehaald om de handtekening te valideren."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "PDF-handtekening valideren",
|
||||
"name": "PDF-handtekening Valideren",
|
||||
"pageTitle": "PDF-handtekening valideren - Digitale handtekeningen verifiëren | BentoPDF",
|
||||
"subtitle": "Digitale handtekeningen in een PDF-bestanden verifiëren. Controleer de geldigheid van het certificaat, bekijk de gegevens van de ondertekenaar en bevestig de integriteit van het document. Alle verwerking gebeurt binnen jouw browser."
|
||||
},
|
||||
"timestampPdf": {
|
||||
"name": "PDF tijdstempelen",
|
||||
"name": "PDF Tijdstempelen",
|
||||
"pageTitle": "PDF tijdstempel gratis online - RFC 3161 documenttijdstempel | BentoPDF",
|
||||
"subtitle": "Voeg een RFC 3161 tijdstempel toe aan je PDF via een vertrouwde TSA-server. Bewijst dat je document op een specifiek moment bestond. Geen certificaat vereist.",
|
||||
"subtitle": "Voeg een RFC 3161 tijdstempel toe aan je PDF via een vertrouwde TSA-server. Dit bewijst dat jouw document op een specifiek moment bestond. Geen certificaat vereist.",
|
||||
"tsaSectionTitle": "Tijdstempelserver (TSA)",
|
||||
"selectTsa": "Selecteer een TSA-server",
|
||||
"applyTimestamp": "Tijdstempel toepassen",
|
||||
"successMessage": "PDF succesvol voorzien van tijdstempel! Het tijdstempel kan worden geverifieerd in Adobe Acrobat en andere PDF-lezers."
|
||||
"successMessage": "PDF met succes voorzien van tijdstempel! Het tijdstempel kan in elke PDF-lezer worden geverifieerd."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "E-mail naar PDF",
|
||||
@@ -830,33 +1178,139 @@
|
||||
"templateLoaded": "Sjabloon \"{{name}}\" geladen.",
|
||||
"failedLoadTemplate": "Sjabloon laden mislukt.",
|
||||
"noSettings": "Geen configureerbare instellingen voor deze node.",
|
||||
"advancedSettings": "Geavanceerde instellingen"
|
||||
"advancedSettings": "Geavanceerde instellingen",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "PDF-invoer",
|
||||
"description": "Een of meer PDF-bestanden uploaden"
|
||||
},
|
||||
"download": {
|
||||
"name": "Downloaden",
|
||||
"description": "Automatisch downloaden als PDF of ZIP"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "Geen PDFs verbonden met {{node}}-knooppunt",
|
||||
"noPdfInputs": "Geen PDFs in invoer",
|
||||
"expectedPdfInput": "PDF-invoer verwacht",
|
||||
"failedToRenderPage": "Kan pagina {{page}} niet renderen",
|
||||
"failedToGetCanvasContext": "Kan canvascontext voor pagina {{page}} niet ophalen",
|
||||
"failedToRenderPageToImage": "Kan pagina {{page}} niet als afbeelding renderen",
|
||||
"noPagesProcessed": "Geen pagina’s verwerkt",
|
||||
"cpdfNotConfigured": "CoherentPDF is niet geconfigureerd. Configureer het bij Geavanceerde instellingen.",
|
||||
"workerError": "Worker-fout: {{message}}",
|
||||
"alternateMergeWorkerError": "Fout in afwisselende samenvoeg-worker: {{message}}",
|
||||
"noPdfFilesUploaded": "Geen PDF-bestanden geüpload in PDF-invoer",
|
||||
"failedToLoadFile": "Kan \"{{file}}\" niet laden — bestand is mogelijk beschadigd",
|
||||
"noImagesUploaded": "Geen afbeeldingen geüpload in Afbeelding-invoer",
|
||||
"noWordDocsUploaded": "Geen documenten geüpload in Word-invoer",
|
||||
"noExcelUploaded": "Geen spreadsheets geüpload in Excel-invoer",
|
||||
"noPowerPointUploaded": "Geen presentaties geüpload in PowerPoint-invoer",
|
||||
"noCbzUploaded": "Geen stripverhalen geüpload in CBZ-invoer",
|
||||
"noEmailUploaded": "Geen e-mailbestanden geüpload in Email-invoer",
|
||||
"noEpubUploaded": "Geen EPUB-bestanden geüpload in EPUB-invoer",
|
||||
"noFb2Uploaded": "Geen FB2-bestanden geüpload in FB2-invoer",
|
||||
"noJsonUploaded": "Geen JSON-bestanden geüpload in JSON-invoer",
|
||||
"noMarkdownUploaded": "Geen Markdown-bestanden geüpload in Markdown-invoer",
|
||||
"noMobiUploaded": "Geen MOBI-bestanden geüpload in MOBI-invoer",
|
||||
"noOdgUploaded": "Geen ODG-bestanden geüpload in ODG-invoer",
|
||||
"noPagesUploaded": "Geen Pages-bestanden geüpload in Pages-invoer",
|
||||
"noPubUploaded": "Geen PUB-bestanden geüpload in PUB-invoer",
|
||||
"noSvgUploaded": "Geen SVG-bestanden geüpload in SVG-invoer",
|
||||
"noTextUploaded": "Geen tekstbestanden geüpload in Tekst-invoer",
|
||||
"noVsdUploaded": "Geen Visio-bestanden geüpload in VSD-invoer",
|
||||
"noWpdUploaded": "Geen WPD-bestanden geüpload in WPD-invoer",
|
||||
"noWpsUploaded": "Geen WPS-bestanden geüpload in WPS-invoer",
|
||||
"noXmlUploaded": "Geen XML-bestanden geüpload in XML-invoer",
|
||||
"noXpsUploaded": "Geen XPS-bestanden geüpload in XPS-invoer",
|
||||
"alternateMergeNeedsTwo": "Afwisselende samenvoeging vereist minstens twee PDF’s verbonden met de invoer",
|
||||
"cropMarginsExceed": "Bijsnijdmarges overschrijden paginadimensies. Verminder de waarden.",
|
||||
"digitalSignNoCertificate": "Geen certificaat geladen in Digitale-handtekening-knooppunt",
|
||||
"encryptUserPasswordRequired": "Gebruikerswachtwoord vereist voor versleuteling",
|
||||
"extractImagesNoneFound": "Geen afbeeldingen gevonden in de verbonden PDF’s",
|
||||
"invertColorsFailedReadImage": "Kan beeldgegevens niet lezen",
|
||||
"overlayRequiresPdf": "Overlay-knooppunt vereist een overlay-PDF-invoer.",
|
||||
"pdfToCsvNoTables": "Geen tabellen gevonden in PDF",
|
||||
"pdfToXlsxNoTables": "Geen tabellen gevonden in {{file}}",
|
||||
"posterizeFailedTileCanvas": "Kan tegel-canvascontext niet ophalen",
|
||||
"redactNoText": "Redacteren: geen tekst opgegeven om te redigeren",
|
||||
"removeBlankPagesAllBlank": "Alle pagina’s zijn leeg",
|
||||
"svgFailedToConvert": "SVG kan niet worden geconverteerd",
|
||||
"svgFailedToLoad": "SVG kan niet worden geladen",
|
||||
"timestampFailed": "Tijdstempel via TSA {{tsa}} mislukt: {{message}}",
|
||||
"noOutputNodes": "Geen uitvoerknooppunten gevonden. Voeg een Download-knooppunt toe om je workflow te voltooien.",
|
||||
"circularDependency": "Cyclische afhankelijkheid gedetecteerd in workflow. Verwijder lussen tussen knooppunten.",
|
||||
"encryptOrdering": "Het Versleutel-knooppunt voert in \"{{target}}\", dat kan mislukken met versleutelde gegevens. Verplaats Versleutel naar vlak voor het uitvoerknooppunt.",
|
||||
"invalidWorkflowFile": "Ongeldig workflowbestand: knooppunten- of verbindingen-array ontbreekt.",
|
||||
"storageQuotaExceeded": "Workflow opslaan mislukt: opslagquotum overschreden. Verwijder oude templates.",
|
||||
"failedToImport": "Workflow importeren mislukt: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Geavanceerde functie-instellingen",
|
||||
"description": "Configureer externe verwerkingsmodules om geavanceerde PDF-functies in te schakelen. Deze modules zijn optioneel en afzonderlijk gelicentieerd.",
|
||||
"status": {
|
||||
"testing": "Testen...",
|
||||
"customOverride": "Aangepaste override",
|
||||
"preConfigured": "Vooraf geconfigureerd",
|
||||
"notConfigured": "Niet geconfigureerd"
|
||||
},
|
||||
"preconfiguredTitle": "Vooraf geconfigureerd en klaar voor gebruik.",
|
||||
"preconfiguredDescription": "Geavanceerde verwerkingsmodules worden automatisch geladen vanaf CDN. Je kunt de URL's hieronder overschrijven als je een aangepaste bron moet gebruiken (bijv. voor air-gapped of zelf-gehoste deployments).",
|
||||
"usingDefault": "Standaard gebruiken: {{url}}",
|
||||
"pymupdfSubtitle": "Document verwerkingsengine",
|
||||
"pymupdfFeatures": "Schakelt in: PDF naar tekst, Markdown, SVG, DOCX, Excel • Afbeeldingen/tabellen extraheren • Formaatconversie",
|
||||
"testButton": "Testen",
|
||||
"recommendedLabel": "Aanbevolen:",
|
||||
"copyTitle": "Naar klembord kopiëren",
|
||||
"ghostscriptSubtitle": "PDF/A-conversie-engine",
|
||||
"ghostscriptFeatures": "Schakelt in: PDF/A-1b, PDF/A-2b, PDF/A-3b conversie • Lettertype naar contour",
|
||||
"cpdfSubtitle": "Bladwijzer- en metagegevensengine",
|
||||
"cpdfFeatures": "Schakelt in: Splitsen op bladwijzers • Bladwijzers bewerken • PDF-metagegevens",
|
||||
"saveConfiguration": "Configuratie opslaan",
|
||||
"savingConfiguration": "Configuratie opslaan...",
|
||||
"savedTitle": "Opgeslagen",
|
||||
"savedMessage": "Configuratie met succes opgeslagen!",
|
||||
"errorTitle": "Fout",
|
||||
"failedSave": "Kon configuratie niet opslaan: {{message}}",
|
||||
"emptyUrlTitle": "Lege URL",
|
||||
"emptyUrlMessage": "Voer een URL in om te testen.",
|
||||
"testSuccessTitle": "Succes",
|
||||
"connectionSuccess": "Verbinding met {{package}} gelukt!",
|
||||
"connectionFailedTitle": "Verbinding mislukt",
|
||||
"connectionFailedMessage": "Kan geen verbinding maken met de URL.",
|
||||
"resetDefaults": "Standaardwaarden herstellen",
|
||||
"resetTitle": "Resetten",
|
||||
"resetWithDefaults": "Aangepaste overrides gewist. Vooraf geconfigureerde standaardwaarden zijn actief.",
|
||||
"resetNoDefaults": "Alle configuraties en cachemodules zijn gewist.",
|
||||
"licenseTitle": "Licentiekennisgeving:",
|
||||
"licenseDescription": "De externe modules (PyMuPDF, Ghostscript, CoherentPDF) zijn gelicentieerd onder AGPL-3.0 of vergelijkbare copyleft-licenties. Door deze modules te configureren en te gebruiken ga je akkoord met de respectievelijke licentievoorwaarden. BentoPDF is compatibel met elke Ghostscript WASM- en PyMuPDF WASM-implementatie die de verwachte interface volgt."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "PDF-overlay",
|
||||
"subtitle": "Pagina's van een PDF over of onder een andere PDF plaatsen.",
|
||||
"subtitle": "Pagina's van een PDF boven of achter een andere PDF plaatsen.",
|
||||
"basePdfLabel": "Basis-PDF",
|
||||
"uploadBasePdf": "Basis-PDF uploaden",
|
||||
"uploadBasePdf": "Basis-PDF laden",
|
||||
"overlayPdfLabel": "Overlay / Underlay PDF",
|
||||
"uploadOverlayPdf": "Overlay/underlay PDF uploaden",
|
||||
"uploadOverlayPdf": "Overlay/underlay PDF laden",
|
||||
"modeLabel": "Modus",
|
||||
"overlayOption": "Overlay (boven de pagina's)",
|
||||
"underlayOption": "Underlay (achter de pagina's)",
|
||||
"pageRangeLabel": "Toepassen op pagina's (optioneel)",
|
||||
"pageRangeHint": "Gebruik \"z\" voor de laatste pagina. Laat leeg om op alle pagina's toe te passen.",
|
||||
"repeatLabel": "Overlay/underlay-pagina's herhalen als basis langer is",
|
||||
"processButton": "Overlay / underlay toepassen",
|
||||
"howItWorksUploadTitle": "Twee PDF's uploaden",
|
||||
"howItWorksUploadDescription": "Upload uw basis-PDF en de PDF die u wilt overleggen of onderleggen.",
|
||||
"howItWorksModeTitle": "Kies modus",
|
||||
"processButton": "Overlay/underlay toepassen",
|
||||
"howItWorksUploadTitle": "Twee PDF's laden",
|
||||
"howItWorksUploadDescription": "Laad de basis-PDF en de PDF die erboven of erachter moet worden geplaatst.",
|
||||
"howItWorksModeTitle": "Modus kiezen",
|
||||
"howItWorksModeDescription": "Selecteer overlay (erboven) of underlay (erachter). Stel optioneel een paginabereik en herhaling in.",
|
||||
"howItWorksDownloadTitle": "Downloaden",
|
||||
"howItWorksDownloadDescription": "Download uw PDF met de overlay of underlay toegepast.",
|
||||
"howItWorksDownloadDescription": "Download de PDF met de overlay of underlay toegepast.",
|
||||
"faqDifferenceQuestion": "Wat is het verschil tussen overlay en underlay?",
|
||||
"faqDifferenceAnswer": "Overlay plaatst pagina's boven uw basis-PDF (zoals een watermerk). Underlay plaatst pagina's achter uw basis-PDF (zoals een briefhoofd of achtergrond).",
|
||||
"faqDifferenceAnswer": "Overlay plaatst pagina's boven de basis-PDF (zoals een watermerk). Underlay plaatst pagina's achter de basis-PDF (zoals een briefhoofd of achtergrond).",
|
||||
"faqSinglePageQuestion": "Kan ik een enkele pagina PDF als overlay voor alle pagina's gebruiken?",
|
||||
"faqSinglePageAnswer": "Ja! Schakel de optie \"Herhalen\" in en uw overlay-pagina's worden herhaald over alle basispagina's. Een watermerk van één pagina wordt op elke pagina toegepast.",
|
||||
"faqSinglePageAnswer": "Ja! Schakel de optie \"Herhalen\" in en de overlay-pagina's worden herhaald over alle basispagina's. Een watermerk van één pagina wordt op elke pagina toegepast.",
|
||||
"faqPrivacyQuestion": "Zijn mijn bestanden privé en veilig?",
|
||||
"faqPrivacyAnswer": "Absoluut! Alle verwerking vindt plaats in uw browser. Uw bestanden verlaten nooit uw apparaat, wat volledige privacy garandeert."
|
||||
"faqPrivacyAnswer": "Absoluut! Alle verwerking vindt plaats in jouw browser. Jouw bestanden verlaten nooit jouw apparaat, wat volledige privacy garandeert."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "Contato",
|
||||
"licensing": "Licenciamento",
|
||||
"allTools": "Todas as Ferramentas",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Abrir menu principal",
|
||||
"language": "Idioma"
|
||||
"language": "Idioma",
|
||||
"searchLanguage": "Buscar idioma…",
|
||||
"noLanguagesFound": "Nenhum idioma encontrado"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Adora o BentoPDF? Ajude-nos a mantê-lo gratuito e de código aberto!",
|
||||
@@ -95,6 +98,18 @@
|
||||
"webpImages": "Imagens WebP"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Como funciona",
|
||||
"step1Title": "Carregar arquivo",
|
||||
"step1": "Clique ou arraste seu arquivo aqui",
|
||||
"step2Title": "Processar",
|
||||
"step2": "Clique no botão de processamento",
|
||||
"step3Title": "Baixar",
|
||||
"step3": "Salve seu arquivo processado instantaneamente"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Ferramentas PDF relacionadas"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Processando..."
|
||||
},
|
||||
@@ -120,6 +135,10 @@
|
||||
"resetToDefaults": "Restaurar Padrões",
|
||||
"fullWidthMode": "Modo Largura Total",
|
||||
"fullWidthDescription": "Usa toda a largura da tela para as ferramentas em vez de um container centralizado",
|
||||
"compactMode": "Modo compacto",
|
||||
"compactModeDescription": "Exibir ferramentas como lista compacta em vez de cartões",
|
||||
"advancedSettings": "Configurações avançadas",
|
||||
"advancedSettingsDescription": "Configurar módulos de processamento externos (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "As configurações são salvas automaticamente",
|
||||
"clickToSet": "Clique para definir",
|
||||
"pressKeys": "Pressione as teclas...",
|
||||
@@ -166,6 +185,7 @@
|
||||
"faq": {
|
||||
"title": "Perguntas",
|
||||
"questions": "Frequentes",
|
||||
"sectionTitle": "Perguntas frequentes",
|
||||
"isFree": {
|
||||
"question": "O BentoPDF é realmente grátis?",
|
||||
"answer": "Sim, com certeza. Todas as ferramentas do BentoPDF são 100% gratuitas, sem limites de arquivos, sem cadastros e sem marcas d'água. Acreditamos que todos merecem acesso a ferramentas PDF poderosas sem barreiras financeiras."
|
||||
@@ -196,9 +216,8 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Vocês usam cookies ou rastreamento?",
|
||||
"answer": "Usamos apenas o Simple Analytics para contar visitas de forma anônima. Sabemos quantos usuários nos visitam, mas nunca quem você é. O sistema respeita totalmente a GDPR."
|
||||
},
|
||||
"sectionTitle": "Perguntas frequentes"
|
||||
"answer": "Não. O BentoPDF não rastreia você de forma alguma. Não usamos cookies, análises nem scripts de rastreamento, nem mesmo no site ao vivo bentopdf.com. Nunca sabemos quem você é ou o que faz com as ferramentas."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "O que nossos",
|
||||
@@ -251,11 +270,14 @@
|
||||
"add": "Adicionar",
|
||||
"remove": "Remover",
|
||||
"loading": "Carregando...",
|
||||
"loadingPageCount": "Carregando páginas...",
|
||||
"error": "Erro",
|
||||
"success": "Sucesso",
|
||||
"file": "Arquivo",
|
||||
"files": "Arquivos",
|
||||
"close": "Fechar"
|
||||
"close": "Fechar",
|
||||
"convert": "Converter",
|
||||
"unknownError": "Erro desconhecido"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -328,9 +350,12 @@
|
||||
"download": "Baixar:",
|
||||
"downloadSelected": "Baixar Selecionadas",
|
||||
"exportPdf": "Exportar PDF",
|
||||
"uploadPdfFiles": "Selecionar Arquivos PDF",
|
||||
"dragAndDrop": "Arraste arquivos PDF aqui ou clique para selecionar",
|
||||
"uploadPdfFiles": "Selecionar Arquivos PDF ou Imagens",
|
||||
"dragAndDrop": "Arraste arquivos PDF ou imagens aqui ou clique para selecionar",
|
||||
"selectFiles": "Selecionar Arquivos",
|
||||
"dropToAdd": "Solte arquivos PDF ou imagens para adicionar",
|
||||
"convertingImages": "Convertendo imagens em PDF...",
|
||||
"failedToConvertImages": "Falha ao converter imagens em PDF.",
|
||||
"renderingPages": "Renderizando páginas...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplicar esta página",
|
||||
@@ -349,15 +374,6 @@
|
||||
"error": "Erro",
|
||||
"failedToLoad": "Falha ao carregar"
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Como funciona",
|
||||
"step1": "Clique ou arraste seu arquivo aqui",
|
||||
"step2": "Clique no botão de processamento",
|
||||
"step3": "Salve seu arquivo processado instantaneamente"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Ferramentas PDF relacionadas"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "Ferramentas PDF",
|
||||
"subtitle": "Selecione uma ferramenta para começar"
|
||||
|
||||
+555
-43
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Converter de PDF",
|
||||
"organizeManage": "Organizar e Gerenciar",
|
||||
"optimizeRepair": "Otimizar e Reparar",
|
||||
"securePdf": "Segurança de PDF"
|
||||
"securePdf": "Segurança de PDF",
|
||||
"input": "Entrada",
|
||||
"output": "Saída"
|
||||
},
|
||||
"convertToPdf": "Converter para PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "Multiferramenta PDF",
|
||||
"subtitle": "Mesclar, dividir, organizar, excluir, girar, adicionar páginas em branco, extrair e duplicar em uma única interface."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Mesclar PDF",
|
||||
"subtitle": "Combine vários PDFs em um único arquivo. Preserva os favoritos (bookmarks)."
|
||||
"subtitle": "Combine vários PDFs em um único arquivo. Preserva os favoritos (bookmarks).",
|
||||
"retainPageLabels": "Manter os rótulos de página originais de cada ficheiro",
|
||||
"retainPageLabelsHint": "Desligado (padrão): o PDF mesclado usa numeração natural 1–N. Ligado: os rótulos de página originais de cada ficheiro são preservados (pode produzir rótulos duplicados)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Dividir PDF",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "Editor de PDF",
|
||||
"subtitle": "Anotar, destacar, redigir, comentar, adicionar formas/imagens, pesquisar e visualizar PDFs."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "Editar texto do PDF",
|
||||
"subtitle": "Clique em qualquer parágrafo e edite-o no local com reorganização do texto em tempo real, fontes e estilos.",
|
||||
"saved": "PDF salvo com sucesso! ({{size}} KB)",
|
||||
"failedToLoad": "Não foi possível carregar o editor de texto PDF.",
|
||||
"howToUpload": "Enviar PDF",
|
||||
"howToClick": "Clique em um parágrafo",
|
||||
"howToRestyle": "Reestilize tudo",
|
||||
"relatedPdfEditor": "Anote e marque PDFs",
|
||||
"relatedSignPdf": "Desenhe, digite ou envie uma assinatura",
|
||||
"relatedWatermark": "Aplique texto ou imagens",
|
||||
"relatedStamps": "Coloque carimbos nas páginas",
|
||||
"relatedCompress": "Reduza o tamanho do arquivo",
|
||||
"relatedOrganizeName": "Organizar PDF",
|
||||
"relatedOrganize": "Reordene e gerencie páginas",
|
||||
"open": "Abrir",
|
||||
"export": "Exportar",
|
||||
"filterAll": "Tudo",
|
||||
"filterText": "Texto",
|
||||
"filterImages": "Imagens",
|
||||
"filterShapes": "Formas",
|
||||
"addText": "Adicionar texto",
|
||||
"langAuto": "Automático",
|
||||
"change": "Alterar",
|
||||
"ignore": "Ignorar",
|
||||
"next": "Próximo",
|
||||
"replace": "Substituir",
|
||||
"replaceAll": "Substituir tudo",
|
||||
"emptyState": "Abra um PDF para editar seu texto, imagens e formas.",
|
||||
"choosePdf": "Escolher um PDF…",
|
||||
"font": "Fonte",
|
||||
"systemFonts": "Fontes do sistema",
|
||||
"color": "Cor",
|
||||
"alignment": "Alinhamento",
|
||||
"style": "Estilo",
|
||||
"lists": "Listas",
|
||||
"outline": "Contorno",
|
||||
"spacing": "Espaçamento",
|
||||
"direction": "Direção",
|
||||
"dirAuto": "Automático",
|
||||
"pathStroke": "Contorno do traçado",
|
||||
"tipBackToUpload": "Voltar ao envio",
|
||||
"tipOpenAnotherPdf": "Abrir outro PDF",
|
||||
"tipExportS": "Exportar (⌘S)",
|
||||
"tipUndoZ": "Desfazer (⌘Z)",
|
||||
"tipRedoZ": "Refazer (⇧⌘Z)",
|
||||
"tipFileDetails": "Detalhes do arquivo",
|
||||
"tipEditExistingContent": "Editar conteúdo existente",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "O que a ferramenta Editar afeta — restrinja o alcance em páginas cheias",
|
||||
"tipClickThePageToAddATextBox": "Clique na página para adicionar uma caixa de texto",
|
||||
"tipSpellCheckLanguage": "Idioma do corretor ortográfico",
|
||||
"tipFindAndReplace": "Localizar e substituir",
|
||||
"tipAddAnImage": "Adicionar uma imagem",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Copiar o texto desta página na ordem de leitura",
|
||||
"tipCheckTheSpellingOfThisPage": "Verificar a ortografia desta página",
|
||||
"tipShowOrHideTheFormatPanel": "Mostrar ou ocultar o painel de formatação",
|
||||
"phReplaceWith": "Substituir por",
|
||||
"tipAddToYourDictionary": "Adicionar ao dicionário",
|
||||
"tipClose": "Fechar",
|
||||
"phFind": "Localizar",
|
||||
"tipPreviousMatch": "Ocorrência anterior",
|
||||
"tipNextMatch": "Próxima ocorrência",
|
||||
"tipRotateLeft90": "Girar 90° à esquerda",
|
||||
"tipRotateRight90": "Girar 90° à direita",
|
||||
"tipFlipHorizontal": "Inverter horizontalmente",
|
||||
"tipFlipVertical": "Inverter verticalmente",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Substituir esta imagem mantendo a posição",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Texto alternativo para acessibilidade (PDFs marcados)",
|
||||
"tipBringToFront": "Trazer para a frente",
|
||||
"tipSendToBack": "Enviar para trás",
|
||||
"tipDuplicate": "Duplicar",
|
||||
"tipDelete": "Excluir",
|
||||
"tipAlignLeftEdges": "Alinhar bordas esquerdas",
|
||||
"tipAlignHorizontalCenters": "Centralizar horizontalmente",
|
||||
"tipAlignRightEdges": "Alinhar bordas direitas",
|
||||
"tipAlignTops": "Alinhar bordas superiores",
|
||||
"tipAlignVerticalCenters": "Centralizar verticalmente",
|
||||
"tipAlignBottoms": "Alinhar bordas inferiores",
|
||||
"tipDistributeHorizontally": "Distribuir horizontalmente",
|
||||
"tipDistributeVertically": "Distribuir verticalmente",
|
||||
"tipFontSize": "Tamanho da fonte",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Listar as fontes instaladas neste dispositivo (Chromium)",
|
||||
"tipCustomTextColor": "Cor de texto personalizada",
|
||||
"tipAlignLeft": "Alinhar à esquerda",
|
||||
"tipAlignCenter": "Centralizar",
|
||||
"tipAlignRight": "Alinhar à direita",
|
||||
"tipJustify": "Justificar",
|
||||
"tipBold": "Negrito",
|
||||
"tipItalic": "Itálico",
|
||||
"tipUnderline": "Sublinhado",
|
||||
"tipStrikethrough": "Tachado",
|
||||
"tipSuperscript": "Sobrescrito",
|
||||
"tipSubscript": "Subscrito",
|
||||
"tipToggleBulletedItem": "Alternar item com marcador",
|
||||
"tipToggleNumberedItem": "Alternar item numerado",
|
||||
"tipNumberedListMarkerStyle": "Estilo de marcador de listas numeradas",
|
||||
"tipDecreaseListIndentTab": "Diminuir recuo (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Aumentar recuo (Tab)",
|
||||
"tipTextOutlineColor": "Cor do contorno do texto",
|
||||
"tipOutlineWidth0None": "Espessura do contorno (0 = nenhum)",
|
||||
"tipFromContent": "Do conteúdo",
|
||||
"tipLeftToRight": "Da esquerda para a direita",
|
||||
"tipRightToLeft": "Da direita para a esquerda",
|
||||
"tipStrokeColor": "Cor do traço",
|
||||
"tipStrokeWidth": "Espessura do traço",
|
||||
"tipZoomPresets": "Predefinições de zoom",
|
||||
"tipZoomOut": "Reduzir zoom",
|
||||
"tipZoomIn": "Ampliar zoom",
|
||||
"tipFitPage": "Ajustar página",
|
||||
"tipPreviousPage": "Página anterior",
|
||||
"tipTypeAPageNumberAndPressEnter": "Digite um número de página e pressione Enter",
|
||||
"tipNextPage": "Próxima página",
|
||||
"tipDocumentProperties": "Propriedades do documento",
|
||||
"tipHideBar": "Ocultar barra",
|
||||
"tipShowBar": "Mostrar barra"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG para PDF",
|
||||
"subtitle": "Crie um PDF a partir de uma ou mais imagens JPG."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplicar e Organizar",
|
||||
"subtitle": "Duplique, reordene e exclua páginas."
|
||||
"subtitle": "Duplique, reordene e exclua páginas.",
|
||||
"saveChanges": "Salvar alterações"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Excluir Páginas",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Editar Favoritos",
|
||||
"subtitle": "Adicione, edite, importe, exclua e extraia favoritos de PDF."
|
||||
"subtitle": "Adicione, edite, importe, exclua e extraia favoritos de PDF.",
|
||||
"autoExtractExisting": "Extrair automaticamente marcadores existentes",
|
||||
"importSectionTitle": "Ou importar marcadores",
|
||||
"csvFormat": "Formato CSV: título,página,nível",
|
||||
"jsonFormat": "Formato JSON",
|
||||
"uploadCsvAction": "Clique para enviar CSV",
|
||||
"uploadJsonAction": "Clique para enviar JSON",
|
||||
"orDragHere": "ou arraste aqui"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Sumário",
|
||||
"subtitle": "Gere uma página de sumário a partir dos favoritos do PDF."
|
||||
"subtitle": "Gere uma página de sumário a partir dos favoritos do PDF.",
|
||||
"titleLabel": "Título do Sumário",
|
||||
"fontSize": "Tamanho da fonte",
|
||||
"fontFamily": "Família da fonte",
|
||||
"addBookmark": "Adicionar marcador para página de Sumário",
|
||||
"generateButton": "Gerar Sumário",
|
||||
"selectPdfFirst": "Por favor selecione um arquivo PDF primeiro.",
|
||||
"statusReadingFileMainThread": "Lendo arquivo (Thread principal)...",
|
||||
"statusGenerating": "Gerando sumário...",
|
||||
"errorReadingFileWithMessage": "Erro ao ler arquivo: {{message}}",
|
||||
"successGeneratedDownloadStarted": "Sumário gerado com sucesso! Download iniciado.",
|
||||
"workerErrorWithMessage": "Erro: {{message}}",
|
||||
"workerErrorOccurred": "Ocorreu erro de worker. Verifique o console para detalhes."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Números de Página",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Adicione carimbos de imagem ao seu PDF usando a barra de ferramentas de anotação.",
|
||||
"usernameLabel": "Nome do Usuário no Carimbo",
|
||||
"usernamePlaceholder": "Digite seu nome (para os carimbos)",
|
||||
"usernameHint": "Este nome aparecerá nos carimbos que você criar."
|
||||
"usernameHint": "Este nome aparecerá nos carimbos que você criar.",
|
||||
"saveButton": "Salvar PDF carimbado"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Remover Anotações",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Preenchimento de Formulário",
|
||||
"subtitle": "Preencha formulários diretamente no navegador. Também suporta formulários XFA."
|
||||
"subtitle": "Preencha formulários diretamente no navegador. Também suporta formulários XFA.",
|
||||
"uploadHint": "Envie um PDF com campos de formulário. Preencha-os diretamente no visualizador abaixo, depois clique no botão para salvar e baixar o formulário preenchido. Também suporta formulários XFA.",
|
||||
"xfaNoteTitle": "Nota sobre formulários XFA:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) é um formato legado suportado apenas por certos visualizadores de PDF como BentoPDF e Firefox. Se você abrir um PDF XFA em outro software e ver páginas em branco ou nenhum campo de formulário, significa que esse visualizador não suporta XFA. Para visualizar e preencher corretamente formulários XFA, use Firefox ou o preenchedor de formulários do BentoPDF."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Criar Formulário PDF",
|
||||
"subtitle": "Crie formulários PDF preenchíveis com campos de texto de arrastar e soltar."
|
||||
"subtitle": "Crie formulários PDF preenchíveis com campos de texto de arrastar e soltar.",
|
||||
"orSeparator": "OU",
|
||||
"createBlankPdf": "Criar PDF em branco"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Remover Páginas em Branco",
|
||||
@@ -255,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Texto para PDF",
|
||||
"subtitle": "Converta um arquivo de texto simples (.txt) em PDF."
|
||||
"subtitle": "Converta um arquivo de texto simples (.txt) em PDF.",
|
||||
"uploadFiles": "Enviar arquivos",
|
||||
"typeText": "Digitar texto",
|
||||
"acceptedFormats": "Arquivos de texto (.txt)",
|
||||
"fontFamily": "Família da fonte",
|
||||
"fontSize": "Tamanho da fonte",
|
||||
"textColor": "Cor do texto",
|
||||
"pageSize": "Tamanho da página",
|
||||
"rtlAutoDetectNote": "Idiomas RTL (árabe, urdu, persa, etc.) são detectados automaticamente e a direção do texto é ajustada.",
|
||||
"createButton": "Criar PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON para PDF",
|
||||
"subtitle": "Converta arquivos JSON para o formato PDF."
|
||||
"subtitle": "Converta arquivos JSON para o formato PDF.",
|
||||
"noteLabel": "Nota:",
|
||||
"noteText": "Apenas arquivos JSON criados pela ferramenta PDF para JSON são suportados. Arquivos JSON padrão de outras ferramentas não funcionarão.",
|
||||
"acceptedFormats": "Vários arquivos JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Por favor selecione pelo menos 1 arquivo JSON",
|
||||
"selectedReady": "{{count}} arquivo(s) selecionado(s). Pronto para converter!",
|
||||
"readingFiles": "Lendo arquivos (Thread principal)...",
|
||||
"converting": "Convertendo arquivos JSON em PDF...",
|
||||
"readError": "Erro ao ler arquivos: {{message}}",
|
||||
"creatingZip": "Criando arquivo ZIP...",
|
||||
"success": "Arquivos JSON convertidos em PDF com sucesso! Download ZIP iniciado.",
|
||||
"zipError": "Erro ao criar ZIP: {{message}}",
|
||||
"workerError": "Erro de Worker: {{message}}",
|
||||
"getStarted": "Selecione arquivos JSON para começar"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF para JPG",
|
||||
"subtitle": "Converta cada página do PDF em uma imagem JPG."
|
||||
"subtitle": "Converta cada página do PDF em uma imagem JPG.",
|
||||
"imageQuality": "Qualidade da imagem",
|
||||
"imageQualityExplanation": "Maior qualidade = arquivo maior",
|
||||
"alert": {
|
||||
"invalidFile": "Arquivo inválido",
|
||||
"invalidFileExplanation": "Por favor envie um arquivo PDF.",
|
||||
"noFile": "Sem arquivo",
|
||||
"noFileExplanation": "Por favor envie um arquivo PDF primeiro.",
|
||||
"conversionSuccess": "PDF convertido para JPG com sucesso!",
|
||||
"conversionError": "Falha ao converter PDF para JPG. O arquivo pode estar corrompido."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Convertendo para JPG..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF para PNG",
|
||||
"subtitle": "Converta cada página do PDF em uma imagem PNG."
|
||||
"subtitle": "Converta cada página do PDF em uma imagem PNG.",
|
||||
"imageScale": "Escala da imagem",
|
||||
"imageScaleExplanation": "Maior escala = melhor qualidade mas arquivo maior",
|
||||
"alert": {
|
||||
"invalidFile": "Arquivo inválido",
|
||||
"invalidFileExplanation": "Por favor envie um arquivo PDF.",
|
||||
"noFile": "Sem arquivo",
|
||||
"noFileExplanation": "Por favor envie um arquivo PDF primeiro.",
|
||||
"conversionSuccess": "PDF convertido para PNG com sucesso!",
|
||||
"conversionError": "Falha ao converter PDF para PNG. O arquivo pode estar corrompido."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Convertendo para PNG..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF para WebP",
|
||||
"subtitle": "Converta cada página do PDF em uma imagem WebP."
|
||||
"subtitle": "Converta cada página do PDF em uma imagem WebP.",
|
||||
"imageQuality": "Qualidade da imagem",
|
||||
"imageQualityExplanation": "Maior qualidade = arquivo maior",
|
||||
"alert": {
|
||||
"invalidFile": "Arquivo inválido",
|
||||
"invalidFileExplanation": "Por favor envie um arquivo PDF.",
|
||||
"noFile": "Sem arquivo",
|
||||
"noFileExplanation": "Por favor envie um arquivo PDF primeiro.",
|
||||
"conversionSuccess": "PDF convertido para WebP com sucesso!",
|
||||
"conversionError": "Falha ao converter PDF para WebP. O arquivo pode estar corrompido."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Convertendo para WebP..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF para BMP",
|
||||
"subtitle": "Converta cada página do PDF em uma imagem BMP."
|
||||
"subtitle": "Converta cada página do PDF em uma imagem BMP.",
|
||||
"alert": {
|
||||
"invalidFile": "Arquivo inválido",
|
||||
"invalidFileExplanation": "Por favor envie um arquivo PDF.",
|
||||
"noFile": "Sem arquivo",
|
||||
"noFileExplanation": "Por favor envie um arquivo PDF primeiro.",
|
||||
"conversionSuccess": "PDF convertido para BMP com sucesso!",
|
||||
"conversionError": "Falha ao converter PDF para BMP. O arquivo pode estar corrompido."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Convertendo para BMP..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF para TIFF",
|
||||
@@ -287,7 +508,15 @@
|
||||
"colorMode": "Modo de Cor",
|
||||
"multiPage": "Salvar como TIFF de várias páginas (arquivo único)",
|
||||
"loadingVips": "Carregando processador de imagem...",
|
||||
"converting": "Convertendo para TIFF..."
|
||||
"converting": "Convertendo para TIFF...",
|
||||
"alert": {
|
||||
"invalidFile": "Arquivo inválido",
|
||||
"invalidFileExplanation": "Por favor envie um arquivo PDF.",
|
||||
"noFile": "Sem arquivo",
|
||||
"noFileExplanation": "Por favor envie um arquivo PDF primeiro.",
|
||||
"conversionSuccess": "PDF convertido para TIFF com sucesso!",
|
||||
"conversionError": "Falha ao converter PDF para TIFF. O arquivo pode estar corrompido."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF para CBZ",
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF para JSON",
|
||||
"subtitle": "Converta arquivos PDF para o formato JSON."
|
||||
"subtitle": "Converta arquivos PDF para o formato JSON.",
|
||||
"convertButton": "Converter para JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Por favor selecione pelo menos 1 arquivo PDF",
|
||||
"selectedReady": "{{count}} arquivo(s) selecionado(s). Pronto para converter!",
|
||||
"checkingEncrypted": "Verificando PDFs criptografados...",
|
||||
"readingFiles": "Lendo arquivos (Thread principal)...",
|
||||
"converting": "Convertendo PDFs para JSON...",
|
||||
"readError": "Erro ao ler arquivos: {{message}}",
|
||||
"creatingZip": "Criando arquivo ZIP...",
|
||||
"success": "PDFs convertidos para JSON com sucesso! Download ZIP iniciado.",
|
||||
"zipError": "Erro ao criar ZIP: {{message}}",
|
||||
"workerError": "Erro de Worker: {{message}}",
|
||||
"getStarted": "Selecione arquivos PDF para começar"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR para PDF",
|
||||
"subtitle": "Torne um PDF pesquisável e copiável (reconhecimento de texto)."
|
||||
"subtitle": "Torne um PDF pesquisável e copiável (reconhecimento de texto).",
|
||||
"languagesInDocument": "Idiomas no documento",
|
||||
"searchLanguagesPlaceholder": "Buscar idiomas...",
|
||||
"selectedLabel": "Selecionado:",
|
||||
"none": "Nenhum",
|
||||
"advancedSettingsSummary": "Configurações avançadas (recomendado para melhorar a precisão)",
|
||||
"resolutionLabel": "Resolução",
|
||||
"resolutionStandard": "Padrão (192 DPI)",
|
||||
"resolutionHigh": "Alta (288 DPI)",
|
||||
"resolutionUltra": "Ultra (384 DPI)",
|
||||
"binarizeLabel": "Binarizar imagem (melhorar contraste para digitalizações limpas)",
|
||||
"embedFullFontsLabel": "Incorporar fontes completas (arquivo maior, melhor compatibilidade)",
|
||||
"whitelistPresetLabel": "Preset de whitelist de caracteres",
|
||||
"whitelistNone": "Nenhum (todos os caracteres)",
|
||||
"whitelistAlphanumeric": "Alfanumérico + Pontuação básica",
|
||||
"whitelistNumbersCurrency": "Números + Símbolos de moeda",
|
||||
"whitelistLettersOnly": "Apenas letras (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Apenas números (0-9)",
|
||||
"whitelistInvoice": "Fatura/Recibo (números, $, ., -, /)",
|
||||
"whitelistForms": "Formulários (alfanumérico + símbolos comuns)",
|
||||
"whitelistCustom": "Personalizado...",
|
||||
"whitelistHelp": "Apenas estes caracteres serão reconhecidos. Deixe vazio para todos os caracteres.",
|
||||
"whitelistInputLabel": "Whitelist de caracteres (opcional)",
|
||||
"whitelistInputPlaceholder": "ex.: abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "Iniciar OCR",
|
||||
"progressInitializing": "Inicializando...",
|
||||
"resultsTitle": "OCR concluído",
|
||||
"resultsDescription": "Seu PDF pesquisável está pronto. Você também pode copiar ou baixar o texto extraído abaixo.",
|
||||
"copyToClipboard": "Copiar para área de transferência",
|
||||
"downloadTxt": "Baixar como .txt",
|
||||
"downloadSearchablePdf": "Baixar PDF pesquisável",
|
||||
"statusPrefix": "Status: {{status}}",
|
||||
"availabilityInvalidConfig": "Esta implantação não expõe idiomas OCR válidos. Reconstrua-a com VITE_TESSERACT_AVAILABLE_LANGUAGES definido para códigos Tesseract válidos.",
|
||||
"availabilityBundles": "Esta implantação inclui OCR para: {{languages}}.",
|
||||
"noLanguagesAvailable": "Nenhum idioma OCR disponível nesta implantação.",
|
||||
"noLanguagesTitle": "Nenhum idioma selecionado",
|
||||
"noLanguagesMessage": "Por favor selecione pelo menos um idioma para OCR.",
|
||||
"noFileTitle": "Sem arquivo",
|
||||
"noFileMessage": "Por favor envie um arquivo PDF primeiro.",
|
||||
"languageUnavailableTitle": "Idioma OCR não disponível",
|
||||
"ocrErrorTitle": "Erro OCR",
|
||||
"ocrErrorMessage": "Ocorreu um erro durante o processo OCR. O worker pode ter falhado ao carregar. Tente novamente.",
|
||||
"howItWorksTitle": "Como funciona:",
|
||||
"extractTextLabel": "Extrair texto:",
|
||||
"extractTextDescription": "Usa Tesseract OCR para reconhecer texto de imagens digitalizadas ou PDFs.",
|
||||
"searchableOutputLabel": "Saída pesquisável:",
|
||||
"searchableOutputDescription": "Cria um novo PDF com camada de texto invisível, tornando seu documento totalmente pesquisável e preservando a aparência original.",
|
||||
"characterFilteringLabel": "Filtragem de caracteres:",
|
||||
"characterFilteringDescription": "Use whitelists para filtrar caracteres indesejados e melhorar a precisão para tipos específicos de documentos (faturas, formulários, etc.).",
|
||||
"multiLanguageSupportLabel": "Suporte multilíngue:",
|
||||
"multiLanguageSupportDescription": "Selecione vários idiomas para documentos com conteúdo em idiomas mistos."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Alternar e Misturar Páginas",
|
||||
"subtitle": "Mescle PDFs alternando as páginas de cada arquivo. Preserva os favoritos."
|
||||
"subtitle": "Mescle PDFs alternando as páginas de cada arquivo. Preserva os favoritos.",
|
||||
"retainPageLabels": "Manter os rótulos de página originais de cada ficheiro",
|
||||
"retainPageLabelsHint": "Desligado (padrão): o PDF mesclado usa numeração natural 1–N. Ligado: os rótulos de página originais de cada ficheiro são preservados (pode produzir rótulos duplicados)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Intercalar digitalização frente e verso",
|
||||
"subtitle": "Reorganize um PDF digitalizado em dois blocos (primeiro todas as frentes, depois todos os versos) na ordem frente/verso correta.",
|
||||
"totalPagesLabel": "Total de páginas:",
|
||||
"splitAfterPageLabel": "Dividir após a página",
|
||||
"splitAfterPagePlaceholder": "ex.: 50",
|
||||
"backBlockOrderLabel": "Ordem do bloco de versos",
|
||||
"backBlockReverseOption": "Inverter o bloco de versos (comum quando a pilha é virada)",
|
||||
"backBlockKeepOption": "Manter o bloco de versos como está",
|
||||
"autoSplitButton": "Detectar divisão automaticamente (metade)",
|
||||
"exportGroupedLabel": "Exportar arquivos agrupados pelo tamanho do documento original",
|
||||
"pagesPerDocumentLabel": "Páginas por documento original",
|
||||
"groupedHelp": "Se ativado, a saída é um ZIP contendo um PDF para cada documento agrupado.",
|
||||
"collateButton": "Intercalar PDF",
|
||||
"invalidFileTitle": "Arquivo inválido",
|
||||
"invalidFileMessage": "Selecione um arquivo PDF.",
|
||||
"loadingPdf": "Carregando PDF...",
|
||||
"loadErrorMessage": "Falha ao carregar o arquivo PDF.",
|
||||
"fileMeta": "{{size}} - {{count}} páginas",
|
||||
"oddPageWarning": "Número ímpar de páginas ({{count}}). Uma digitalização frente e verso deve ter um número par de páginas; pode haver uma página faltando ou sobrando.",
|
||||
"previewSummary": "Bloco de frentes: {{frontCount}} página(s), bloco de versos: {{backCount}} página(s). Saída: {{outputCount}} página(s), na sequência frente/verso.",
|
||||
"previewMismatchWarning": "Os blocos de frentes e versos têm tamanhos diferentes ({{frontCount}} frentes contra {{backCount}} versos). As {{extraCount}} página(s) excedentes do bloco maior serão anexadas sem par no final.",
|
||||
"missingFileTitle": "Arquivo ausente",
|
||||
"missingFileMessage": "Envie um PDF com pelo menos 2 páginas antes de processar.",
|
||||
"invalidSplitTitle": "Ponto de divisão inválido",
|
||||
"invalidSplitMessage": "O ponto de divisão deve estar entre a página 1 e a página {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "Blocos desiguais",
|
||||
"unevenConfirmMessage": "O bloco de frentes tem {{frontCount}} página(s) e o de versos tem {{backCount}} página(s).\nNormalmente isso significa que uma página foi digitalizada duas vezes ou está faltando.\n\nAs {{extraCount}} página(s) sem par serão anexadas no final.\n\nContinuar mesmo assim?",
|
||||
"invalidGroupTitle": "Tamanho de grupo inválido",
|
||||
"invalidGroupMessage": "Informe um número válido de páginas por documento original.",
|
||||
"collatingLoader": "Intercalando a digitalização frente e verso...",
|
||||
"successMessage": "PDF intercalado gerado com sucesso.",
|
||||
"successGroupedMessage": "Intercalação concluída. {{fileCount}} arquivo(s) agrupado(s) gerado(s).",
|
||||
"processErrorMessage": "Falha ao intercalar o PDF.",
|
||||
"howItWorksStep1Title": "Envie a digitalização",
|
||||
"howItWorksStep1": "Solte o PDF único que contém todas as frentes seguidas de todos os versos.",
|
||||
"howItWorksStep2Title": "Defina o ponto de divisão",
|
||||
"howItWorksStep2": "Indique onde termina o bloco de frentes e escolha se o bloco de versos precisa ser invertido.",
|
||||
"howItWorksStep3Title": "Intercale e baixe",
|
||||
"howItWorksStep3": "Receba um PDF intercalado ou um ZIP com um arquivo separado para cada documento original.",
|
||||
"faqOddPagesQuestion": "E se a minha digitalização tiver um número ímpar de páginas?",
|
||||
"faqOddPagesAnswer": "Uma digitalização frente e verso deve ter um número par de páginas. Se não tiver, provavelmente uma página foi digitalizada duas vezes ou ficou de fora. A ferramenta avisa antes de processar, e as páginas sem par são anexadas no final para que nada se perca.",
|
||||
"faqBackOrderQuestion": "Por que eu manteria o bloco de versos como está?",
|
||||
"faqBackOrderAnswer": "Depende de como a pilha foi inserida na segunda passagem. Virar a pilha inteira produz versos em ordem invertida, que é a opção padrão. Se o seu scanner os devolveu na mesma ordem das frentes, escolha manter o bloco como está."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Adicionar Anexos",
|
||||
@@ -363,6 +703,10 @@
|
||||
"name": "Girar PDF",
|
||||
"subtitle": "Gire as páginas em incrementos de 90 graus."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Rotacionar em Graus Customizáveis",
|
||||
"subtitle": "Rotaciona páginas em qualquer ângulo customizado."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "PDF N-Up",
|
||||
"subtitle": "Organize várias páginas em uma única folha de impressão."
|
||||
@@ -475,24 +819,6 @@
|
||||
"name": "Alterar Permissões",
|
||||
"subtitle": "Defina ou altere as permissões de usuário em um PDF."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email para PDF",
|
||||
"subtitle": "Converta arquivos de email (EML, MSG) para PDF. Suporta exportações do Outlook e formatos de email padrão.",
|
||||
"acceptedFormats": "Arquivos EML, MSG",
|
||||
"convertButton": "Converter para PDF"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Fonte para Contorno",
|
||||
"subtitle": "Converta todas as fontes em contornos vetoriais para renderização consistente em todos os dispositivos."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "Desinclinar PDF",
|
||||
"subtitle": "Endireite automaticamente páginas digitalizadas inclinadas usando OpenCV."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Rotacionar em Graus Customizáveis",
|
||||
"subtitle": "Rotaciona páginas em qualquer ângulo customizado."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT para PDF",
|
||||
"subtitle": "Converte arquivos em formato OpenDocument Text para PDF. Suporta multiplos arquivos.",
|
||||
@@ -674,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF para Texto",
|
||||
"subtitle": "Extrai texto de arquivos PDF e salva como texto simples (.txt). Suporta múltiplos arquivos.",
|
||||
"note": "Esta ferrament funciona SOMENTE com PDFs criados digitalmente. Para documentos escaneados ou PDFs baseados em imagens, use nossa ferramenta OCR para PDF no lugar.",
|
||||
"convertButton": "Extrair Texto"
|
||||
"noteLabel": "Nota:",
|
||||
"noteText": "Esta ferramenta funciona APENAS com PDFs criados digitalmente. Para documentos digitalizados ou PDFs baseados em imagens, use nossa ferramenta OCR PDF.",
|
||||
"convertButton": "Extrair Texto",
|
||||
"note": "Esta ferrament funciona SOMENTE com PDFs criados digitalmente. Para documentos escaneados ou PDFs baseados em imagens, use nossa ferramenta OCR para PDF no lugar."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Assinatura Digital PDF",
|
||||
"pageTitle": "Assinatura Digital PDF - Adicionar Assinatura Criptográfica | BentoPDF",
|
||||
"subtitle": "Adicione uma assinatura digital criptográfica ao seu PDF usando certificados X.509. Suporta formatos PKCS#12 (.pfx, .p12) e PEM. Sua chave privada nunca sai do seu navegador.",
|
||||
"certificateSection": "Certificado",
|
||||
"uploadCert": "Carregar certificado (.pfx, .p12)",
|
||||
"uploadCert": "Carregar certificado (.pfx, .p12, .pem)",
|
||||
"certPassword": "Senha do Certificado",
|
||||
"privateKeyPassword": "Senha da chave privada",
|
||||
"certPasswordPlaceholder": "Digite a senha",
|
||||
"certInfo": "Informações do Certificado",
|
||||
"certSubject": "Assunto",
|
||||
@@ -696,8 +1025,71 @@
|
||||
"locationPlaceholder": "ex: Lisboa, Portugal",
|
||||
"contactInfo": "Contato",
|
||||
"contactPlaceholder": "ex: [email protected]",
|
||||
"visibleSignature": "Assinatura visível",
|
||||
"visibleSignatureDescription": "Quando habilitado, uma caixa de assinatura visível aparece no PDF. Você pode carregar uma imagem/logo ou adicionar texto. Se nenhum for fornecido, o nome do assinante do certificado será exibido automaticamente.",
|
||||
"signatureImage": "Imagem/Logo de assinatura (opcional)",
|
||||
"uploadSignatureImage": "Carregar imagem (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Pré-visualização da assinatura",
|
||||
"remove": "Remover",
|
||||
"page": "Página",
|
||||
"firstPage": "Primeira página",
|
||||
"lastPage": "Última página",
|
||||
"allPages": "Todas as páginas",
|
||||
"customPage": "Página personalizada #",
|
||||
"pageNumber": "Página #",
|
||||
"xPosition": "Posição X (esquerda)",
|
||||
"yPosition": "Posição Y (topo)",
|
||||
"width": "Largura",
|
||||
"height": "Altura",
|
||||
"addTextOverlay": "Adicionar sobreposição de texto",
|
||||
"text": "Texto",
|
||||
"textPlaceholder": "ex.: Assinado digitalmente por João da Silva",
|
||||
"textColor": "Cor do texto",
|
||||
"fontSize": "Tamanho da fonte",
|
||||
"invalidImageTitle": "Imagem inválida",
|
||||
"invalidImageMessage": "Por favor selecione uma imagem PNG, JPG ou WebP.",
|
||||
"invalidFileTitle": "Arquivo inválido",
|
||||
"invalidFileMessage": "Por favor selecione um arquivo PDF.",
|
||||
"invalidCertificateTitle": "Certificado inválido",
|
||||
"invalidCertificateMessage": "Por favor selecione um arquivo de certificado .pfx, .p12 ou .pem.",
|
||||
"certificateLoaded": "Certificado carregado",
|
||||
"certificateUnlocked": "Certificado desbloqueado",
|
||||
"failedParsePem": "Falha ao analisar arquivo PEM",
|
||||
"enterPasswordToUnlock": "Digite a senha para desbloquear",
|
||||
"invalidPasswordOrCertificate": "Senha ou certificado inválidos",
|
||||
"incorrectPassword": "Senha incorreta",
|
||||
"failedParseCertificate": "Falha ao analisar certificado",
|
||||
"missingDataTitle": "Dados faltando",
|
||||
"missingDataMessage": "Por favor envie um PDF e um certificado válido.",
|
||||
"applyingSignature": "Aplicando assinatura digital...",
|
||||
"signingFailedTitle": "Falha ao assinar",
|
||||
"chainFetchFailed": "Falha ao obter cadeia de certificados. Pode ser devido a problemas de rede ou indisponibilidade do proxy de certificados. Verifique sua conexão com a internet e tente novamente. Se o problema persistir, contate o suporte.",
|
||||
"failedToSignPdf": "Falha ao assinar PDF: {{message}}",
|
||||
"defaultSignatureText": "Assinado digitalmente por {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} páginas",
|
||||
"howToStep1Title": "Carregar PDF",
|
||||
"howToStep1Text": "Selecione o documento PDF que deseja assinar",
|
||||
"howToStep2Title": "Carregar certificado",
|
||||
"howToStep2Text": "Forneça seu arquivo de certificado .pfx ou .p12 e a senha",
|
||||
"howToStep3Title": "Assinar e baixar",
|
||||
"howToStep3Text": "Aplique a assinatura digital e baixe seu PDF assinado",
|
||||
"relatedEncryptDesc": "Proteger seu PDF com senha",
|
||||
"relatedDecryptDesc": "Remover senha do PDF",
|
||||
"relatedFlattenDesc": "Tornar anotações permanentes",
|
||||
"relatedSanitizeDesc": "Remover dados ocultos",
|
||||
"relatedPermissionsDesc": "Definir permissões do PDF",
|
||||
"faqWhatIsQuestion": "O que é uma assinatura digital?",
|
||||
"faqWhatIsAnswer": "Uma assinatura digital é um mecanismo criptográfico que verifica a autenticidade e integridade de um documento. Diferente de uma assinatura desenhada, ela usa criptografia de chave pública (certificados X.509) para provar a identidade do assinante.",
|
||||
"faqFormatsQuestion": "Quais formatos de certificado são suportados?",
|
||||
"faqFormatsAnswer": "Suportamos certificados no formato PKCS#12 (.pfx, .p12), que contêm tanto seu certificado quanto a chave privada em um único arquivo criptografado. Eles geralmente são emitidos por autoridades certificadoras.",
|
||||
"faqPrivateKeyQuestion": "Minha chave privada está segura?",
|
||||
"faqPrivateKeyAnswer": "Sim! Todo o processamento ocorre inteiramente no seu navegador. Seu certificado, chave privada e arquivos PDF nunca saem do seu dispositivo nem são enviados a qualquer servidor.",
|
||||
"faqValidReadersQuestion": "A assinatura será válida em leitores de PDF?",
|
||||
"faqValidReadersAnswer": "Sim, a ferramenta cria assinaturas separadas PKCS#7 padrão reconhecidas por todos os principais leitores de PDF. Para validação completa, use um certificado de uma autoridade certificadora confiável.",
|
||||
"applySignature": "Aplicar Assinatura",
|
||||
"successMessage": "PDF assinado com sucesso! A assinatura pode ser verificada em qualquer leitor de PDF."
|
||||
"successMessage": "PDF assinado com sucesso! A assinatura pode ser verificada em qualquer leitor de PDF.",
|
||||
"internetRequiredTitle": "Conexão com internet necessária",
|
||||
"internetRequiredDescription": "A assinatura pode precisar obter informações da cadeia de certificados do servidor do emissor para validar a assinatura."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validar Assinatura PDF",
|
||||
@@ -711,7 +1103,21 @@
|
||||
"tsaSectionTitle": "Servidor de carimbo de tempo (TSA)",
|
||||
"selectTsa": "Selecionar um servidor TSA",
|
||||
"applyTimestamp": "Aplicar carimbo de tempo",
|
||||
"successMessage": "PDF carimbado com sucesso! O carimbo pode ser verificado no Adobe Acrobat e noutros leitores de PDF."
|
||||
"successMessage": "PDF carimbado com sucesso! O carimbo de hora pode ser verificado em qualquer leitor de PDF."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email para PDF",
|
||||
"subtitle": "Converta arquivos de email (EML, MSG) para PDF. Suporta exportações do Outlook e formatos de email padrão.",
|
||||
"acceptedFormats": "Arquivos EML, MSG",
|
||||
"convertButton": "Converter para PDF"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Fonte para Contorno",
|
||||
"subtitle": "Converta todas as fontes em contornos vetoriais para renderização consistente em todos os dispositivos."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "Desinclinar PDF",
|
||||
"subtitle": "Endireite automaticamente páginas digitalizadas inclinadas usando OpenCV."
|
||||
},
|
||||
"pdfToWord": {
|
||||
"name": "PDF para Word",
|
||||
@@ -772,7 +1178,113 @@
|
||||
"templateLoaded": "Modelo \"{{name}}\" carregado.",
|
||||
"failedLoadTemplate": "Falha ao carregar o modelo.",
|
||||
"noSettings": "Nenhuma configuração disponível para este nó.",
|
||||
"advancedSettings": "Configurações avançadas"
|
||||
"advancedSettings": "Configurações avançadas",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "Entrada PDF",
|
||||
"description": "Carregar um ou mais arquivos PDF"
|
||||
},
|
||||
"download": {
|
||||
"name": "Baixar",
|
||||
"description": "Baixar como PDF ou ZIP automaticamente"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "Nenhum PDF conectado ao nó {{node}}",
|
||||
"noPdfInputs": "Nenhum PDF na entrada",
|
||||
"expectedPdfInput": "Entrada PDF esperada",
|
||||
"failedToRenderPage": "Falha ao renderizar a página {{page}}",
|
||||
"failedToGetCanvasContext": "Falha ao obter o contexto do canvas para a página {{page}}",
|
||||
"failedToRenderPageToImage": "Falha ao renderizar a página {{page}} como imagem",
|
||||
"noPagesProcessed": "Nenhuma página processada",
|
||||
"cpdfNotConfigured": "CoherentPDF não está configurado. Configure-o em Configurações Avançadas.",
|
||||
"workerError": "Erro do worker: {{message}}",
|
||||
"alternateMergeWorkerError": "Erro do worker de mesclagem alternada: {{message}}",
|
||||
"noPdfFilesUploaded": "Nenhum arquivo PDF enviado no nó de entrada PDF",
|
||||
"failedToLoadFile": "Falha ao carregar \"{{file}}\" — o arquivo pode estar corrompido",
|
||||
"noImagesUploaded": "Nenhuma imagem enviada no nó de entrada de imagem",
|
||||
"noWordDocsUploaded": "Nenhum documento enviado no nó de entrada Word",
|
||||
"noExcelUploaded": "Nenhuma planilha enviada no nó de entrada Excel",
|
||||
"noPowerPointUploaded": "Nenhuma apresentação enviada no nó de entrada PowerPoint",
|
||||
"noCbzUploaded": "Nenhum arquivo de quadrinhos enviado no nó de entrada CBZ",
|
||||
"noEmailUploaded": "Nenhum arquivo de e-mail enviado no nó de entrada de e-mail",
|
||||
"noEpubUploaded": "Nenhum arquivo EPUB enviado no nó de entrada EPUB",
|
||||
"noFb2Uploaded": "Nenhum arquivo FB2 enviado no nó de entrada FB2",
|
||||
"noJsonUploaded": "Nenhum arquivo JSON enviado no nó de entrada JSON",
|
||||
"noMarkdownUploaded": "Nenhum arquivo Markdown enviado no nó de entrada Markdown",
|
||||
"noMobiUploaded": "Nenhum arquivo MOBI enviado no nó de entrada MOBI",
|
||||
"noOdgUploaded": "Nenhum arquivo ODG enviado no nó de entrada ODG",
|
||||
"noPagesUploaded": "Nenhum arquivo Pages enviado no nó de entrada Pages",
|
||||
"noPubUploaded": "Nenhum arquivo PUB enviado no nó de entrada PUB",
|
||||
"noSvgUploaded": "Nenhum arquivo SVG enviado no nó de entrada SVG",
|
||||
"noTextUploaded": "Nenhum arquivo de texto enviado no nó de entrada de texto",
|
||||
"noVsdUploaded": "Nenhum arquivo Visio enviado no nó de entrada VSD",
|
||||
"noWpdUploaded": "Nenhum arquivo WPD enviado no nó de entrada WPD",
|
||||
"noWpsUploaded": "Nenhum arquivo WPS enviado no nó de entrada WPS",
|
||||
"noXmlUploaded": "Nenhum arquivo XML enviado no nó de entrada XML",
|
||||
"noXpsUploaded": "Nenhum arquivo XPS enviado no nó de entrada XPS",
|
||||
"alternateMergeNeedsTwo": "Mesclagem alternada precisa de pelo menos dois PDFs conectados à entrada",
|
||||
"cropMarginsExceed": "As margens de corte excedem as dimensões da página. Reduza os valores.",
|
||||
"digitalSignNoCertificate": "Nenhum certificado carregado no nó Assinatura Digital",
|
||||
"encryptUserPasswordRequired": "Senha do usuário é necessária para criptografia",
|
||||
"extractImagesNoneFound": "Nenhuma imagem encontrada nos PDFs conectados",
|
||||
"invertColorsFailedReadImage": "Falha ao ler dados da imagem",
|
||||
"overlayRequiresPdf": "O nó de sobreposição requer uma entrada de PDF de sobreposição.",
|
||||
"pdfToCsvNoTables": "Nenhuma tabela encontrada no PDF",
|
||||
"pdfToXlsxNoTables": "Nenhuma tabela encontrada em {{file}}",
|
||||
"posterizeFailedTileCanvas": "Falha ao obter o contexto do canvas do mosaico",
|
||||
"redactNoText": "Censura: nenhum texto especificado para censurar",
|
||||
"removeBlankPagesAllBlank": "Todas as páginas estão em branco",
|
||||
"svgFailedToConvert": "Falha ao converter SVG",
|
||||
"svgFailedToLoad": "Falha ao carregar SVG",
|
||||
"timestampFailed": "Falha ao carimbar via TSA {{tsa}}: {{message}}",
|
||||
"noOutputNodes": "Nenhum nó de saída encontrado. Adicione um nó Download para concluir seu workflow.",
|
||||
"circularDependency": "Dependência circular detectada no workflow. Remova quaisquer loops entre nós.",
|
||||
"encryptOrdering": "O nó Criptografar alimenta \"{{target}}\", que pode falhar com dados criptografados. Mova Criptografar para imediatamente antes do nó de saída.",
|
||||
"invalidWorkflowFile": "Arquivo de workflow inválido: array de nós ou conexões ausente.",
|
||||
"storageQuotaExceeded": "Falha ao salvar workflow: cota de armazenamento excedida. Tente excluir modelos antigos.",
|
||||
"failedToImport": "Falha ao importar workflow: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Configurações de funcionalidades avançadas",
|
||||
"description": "Configure módulos de processamento externos para habilitar funcionalidades PDF avançadas. Estes módulos são opcionais e licenciados separadamente.",
|
||||
"status": {
|
||||
"testing": "Testando...",
|
||||
"customOverride": "Substituição personalizada",
|
||||
"preConfigured": "Pré-configurado",
|
||||
"notConfigured": "Não configurado"
|
||||
},
|
||||
"preconfiguredTitle": "Pré-configurado e pronto para uso.",
|
||||
"preconfiguredDescription": "Os módulos avançados de processamento são carregados automaticamente do CDN. Você pode substituir as URLs abaixo se precisar usar uma fonte personalizada (ex.: para implantações air-gapped ou auto-hospedadas).",
|
||||
"usingDefault": "Usando padrão: {{url}}",
|
||||
"pymupdfSubtitle": "Mecanismo de processamento de documentos",
|
||||
"pymupdfFeatures": "Habilita: PDF para Texto, Markdown, SVG, DOCX, Excel • Extrair Imagens/Tabelas • Conversão de formato",
|
||||
"testButton": "Testar",
|
||||
"recommendedLabel": "Recomendado:",
|
||||
"copyTitle": "Copiar para área de transferência",
|
||||
"ghostscriptSubtitle": "Mecanismo de conversão PDF/A",
|
||||
"ghostscriptFeatures": "Habilita: Conversão PDF/A-1b, PDF/A-2b, PDF/A-3b • Fonte para contorno",
|
||||
"cpdfSubtitle": "Mecanismo de marcadores e metadados",
|
||||
"cpdfFeatures": "Habilita: Dividir por marcadores • Editar marcadores • Metadados PDF",
|
||||
"saveConfiguration": "Salvar configuração",
|
||||
"savingConfiguration": "Salvando configuração...",
|
||||
"savedTitle": "Salvo",
|
||||
"savedMessage": "Configuração salva com sucesso!",
|
||||
"errorTitle": "Erro",
|
||||
"failedSave": "Falha ao salvar configuração: {{message}}",
|
||||
"emptyUrlTitle": "URL vazia",
|
||||
"emptyUrlMessage": "Por favor digite uma URL para testar.",
|
||||
"testSuccessTitle": "Sucesso",
|
||||
"connectionSuccess": "Conexão a {{package}} bem-sucedida!",
|
||||
"connectionFailedTitle": "Falha na conexão",
|
||||
"connectionFailedMessage": "Não foi possível conectar à URL.",
|
||||
"resetDefaults": "Restaurar padrões",
|
||||
"resetTitle": "Redefinir",
|
||||
"resetWithDefaults": "Substituições personalizadas removidas. Padrões pré-configurados estão ativos.",
|
||||
"resetNoDefaults": "Todas as configurações e módulos em cache foram apagados.",
|
||||
"licenseTitle": "Aviso de licença:",
|
||||
"licenseDescription": "Os módulos externos (PyMuPDF, Ghostscript, CoherentPDF) são licenciados sob AGPL-3.0 ou licenças copyleft similares. Ao configurar e usar estes módulos, você concorda com seus respectivos termos de licença. BentoPDF é compatível com qualquer implementação WASM de Ghostscript e PyMuPDF que siga a interface esperada."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "Sobreposição de PDF",
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "Контакты",
|
||||
"licensing": "Лицензия",
|
||||
"allTools": "Все инструменты",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Открыть главное меню",
|
||||
"language": "Язык"
|
||||
"language": "Язык",
|
||||
"searchLanguage": "Поиск языка…",
|
||||
"noLanguagesFound": "Языки не найдены"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Нравится BentoPDF? Помогите ему оставаться бесплатным и с открытым исходным кодом!",
|
||||
@@ -97,8 +100,11 @@
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Как это работает",
|
||||
"step1Title": "Загрузить файл",
|
||||
"step1": "Нажмите или перетащите ваш файл, чтобы начать",
|
||||
"step2Title": "Обработка",
|
||||
"step2": "Нажмите кнопку обработки",
|
||||
"step3Title": "Скачать",
|
||||
"step3": "Мгновенно сохраните обработанный файл"
|
||||
},
|
||||
"relatedTools": {
|
||||
@@ -129,6 +135,10 @@
|
||||
"resetToDefaults": "По умолчанию",
|
||||
"fullWidthMode": "На всю ширину",
|
||||
"fullWidthDescription": "Используйте всю ширину экрана для всех инструментов вместо контейнера по центру",
|
||||
"compactMode": "Компактный режим",
|
||||
"compactModeDescription": "Показывать инструменты в виде компактного списка вместо карточек",
|
||||
"advancedSettings": "Расширенные настройки",
|
||||
"advancedSettingsDescription": "Настройте внешние модули обработки (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Настройки сохраняются автоматически",
|
||||
"clickToSet": "Задать",
|
||||
"pressKeys": "Нажмите...",
|
||||
@@ -206,7 +216,7 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Вы используете cookies или аналитику для слежки за мной?",
|
||||
"answer": "Мы уважаем вашу приватность. BentoPDF не отслеживает персональную информацию. Мы используем Simple Analytics исключительно для анонимного подсчета посещений нашего сайта. Это означает, что мы знаем, как много посетителей зашло на наш сайт, но мы не знаем, кто они. Simple Analytics полностью соответствует GDPR."
|
||||
"answer": "Нет. BentoPDF вас никак не отслеживает. Мы не используем файлы cookie, аналитику или трекинговые скрипты — даже на действующем сайте bentopdf.com. Мы никогда не знаем, кто вы и что вы делаете с инструментами."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
@@ -260,11 +270,14 @@
|
||||
"add": "Добавить",
|
||||
"remove": "Удалить",
|
||||
"loading": "Загрузка...",
|
||||
"loadingPageCount": "Загрузка страниц...",
|
||||
"error": "Ошибка",
|
||||
"success": "Успех",
|
||||
"file": "Файл",
|
||||
"files": "Файлы",
|
||||
"close": "Закрыть"
|
||||
"close": "Закрыть",
|
||||
"convert": "Конвертировать",
|
||||
"unknownError": "Неизвестная ошибка"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -337,9 +350,12 @@
|
||||
"download": "Скачать:",
|
||||
"downloadSelected": "Скачать выбранное",
|
||||
"exportPdf": "Экспортировать PDF",
|
||||
"uploadPdfFiles": "Выбрать PDF-файлы",
|
||||
"dragAndDrop": "Перетащите PDF-файлы сюда или нажмите, чтобы выбрать",
|
||||
"uploadPdfFiles": "Выбрать PDF-файлы или изображения",
|
||||
"dragAndDrop": "Перетащите PDF-файлы или изображения сюда или нажмите, чтобы выбрать",
|
||||
"selectFiles": "Выбрать файлы",
|
||||
"dropToAdd": "Отпустите PDF-файлы или изображения, чтобы добавить",
|
||||
"convertingImages": "Преобразование изображений в PDF...",
|
||||
"failedToConvertImages": "Не удалось преобразовать изображения в PDF.",
|
||||
"renderingPages": "Отрисовка страниц...",
|
||||
"actions": {
|
||||
"duplicatePage": "Дублировать эту страницу",
|
||||
@@ -358,6 +374,10 @@
|
||||
"error": "Ошибка",
|
||||
"failedToLoad": "Не удалось загрузить"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "Инструменты PDF",
|
||||
"subtitle": "Выберите инструмент, чтобы начать"
|
||||
},
|
||||
"disabledTool": {
|
||||
"title": "Инструмент недоступен",
|
||||
"heading": "Этот инструмент отключён",
|
||||
|
||||
+626
-26
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Конвертация из PDF",
|
||||
"organizeManage": "Организация и управление",
|
||||
"optimizeRepair": "Оптимизация и восстановление",
|
||||
"securePdf": "Защита PDF"
|
||||
"securePdf": "Защита PDF",
|
||||
"input": "Ввод",
|
||||
"output": "Вывод"
|
||||
},
|
||||
"convertToPdf": "Конвертировать в PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF мультиинструмент",
|
||||
"subtitle": "Объединить, разделить, организовать, удалить, повернуть, добавить пустые страницы, извлечь и дублировать страницы в едином интерфейсе."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Объединение PDF",
|
||||
"subtitle": "Объединить несколько PDF в один файл с сохранением закладок."
|
||||
"subtitle": "Объединить несколько PDF в один файл с сохранением закладок.",
|
||||
"retainPageLabels": "Сохранять исходные метки страниц из каждого файла",
|
||||
"retainPageLabelsHint": "Выкл (по умолчанию): объединённый PDF использует естественную нумерацию страниц 1–N. Вкл: исходные метки страниц каждого файла сохраняются (могут появиться дубликаты)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Разделение PDF",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "Редактор PDF",
|
||||
"subtitle": "Добавить аннотации, выделения и комментарии, вымарать текст, добавить фигуры/изображения, найти в тексте, просмотреть документ."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "Редактирование текста PDF",
|
||||
"subtitle": "Нажать на любой абзац и отредактировать его на месте — с мгновенной перекомпоновкой текста, шрифтами и стилями.",
|
||||
"saved": "PDF успешно сохранён! ({{size}} КБ)",
|
||||
"failedToLoad": "Не удалось загрузить редактор текста PDF.",
|
||||
"howToUpload": "Загрузить PDF",
|
||||
"howToClick": "Нажмите на абзац",
|
||||
"howToRestyle": "Измените стиль",
|
||||
"relatedPdfEditor": "Комментируйте и размечайте PDF",
|
||||
"relatedSignPdf": "Нарисуйте, введите или загрузите подпись",
|
||||
"relatedWatermark": "Нанесите текст или изображения",
|
||||
"relatedStamps": "Размещайте штампы на страницах",
|
||||
"relatedCompress": "Уменьшите размер файла",
|
||||
"relatedOrganizeName": "Упорядочить PDF",
|
||||
"relatedOrganize": "Меняйте порядок и управляйте страницами",
|
||||
"open": "Открыть",
|
||||
"export": "Экспорт",
|
||||
"filterAll": "Все",
|
||||
"filterText": "Текст",
|
||||
"filterImages": "Изображения",
|
||||
"filterShapes": "Фигуры",
|
||||
"addText": "Добавить текст",
|
||||
"langAuto": "Авто",
|
||||
"change": "Изменить",
|
||||
"ignore": "Пропустить",
|
||||
"next": "Далее",
|
||||
"replace": "Заменить",
|
||||
"replaceAll": "Заменить все",
|
||||
"emptyState": "Откройте PDF, чтобы редактировать текст, изображения и фигуры.",
|
||||
"choosePdf": "Выберите PDF…",
|
||||
"font": "Шрифт",
|
||||
"systemFonts": "Системные шрифты",
|
||||
"color": "Цвет",
|
||||
"alignment": "Выравнивание",
|
||||
"style": "Стиль",
|
||||
"lists": "Списки",
|
||||
"outline": "Обводка",
|
||||
"spacing": "Интервал",
|
||||
"direction": "Направление",
|
||||
"dirAuto": "Авто",
|
||||
"pathStroke": "Обводка контура",
|
||||
"tipBackToUpload": "Назад к загрузке",
|
||||
"tipOpenAnotherPdf": "Открыть другой PDF",
|
||||
"tipExportS": "Экспорт (⌘S)",
|
||||
"tipUndoZ": "Отменить (⌘Z)",
|
||||
"tipRedoZ": "Повторить (⇧⌘Z)",
|
||||
"tipFileDetails": "Сведения о файле",
|
||||
"tipEditExistingContent": "Редактировать существующее содержимое",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "На что действует инструмент редактирования — сузьте область на насыщенных страницах",
|
||||
"tipClickThePageToAddATextBox": "Нажмите на страницу, чтобы добавить текстовое поле",
|
||||
"tipSpellCheckLanguage": "Язык проверки орфографии",
|
||||
"tipFindAndReplace": "Найти и заменить",
|
||||
"tipAddAnImage": "Добавить изображение",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Скопировать текст страницы в порядке чтения",
|
||||
"tipCheckTheSpellingOfThisPage": "Проверить орфографию на этой странице",
|
||||
"tipShowOrHideTheFormatPanel": "Показать или скрыть панель форматирования",
|
||||
"phReplaceWith": "Заменить на",
|
||||
"tipAddToYourDictionary": "Добавить в словарь",
|
||||
"tipClose": "Закрыть",
|
||||
"phFind": "Найти",
|
||||
"tipPreviousMatch": "Предыдущее совпадение",
|
||||
"tipNextMatch": "Следующее совпадение",
|
||||
"tipRotateLeft90": "Повернуть на 90° влево",
|
||||
"tipRotateRight90": "Повернуть на 90° вправо",
|
||||
"tipFlipHorizontal": "Отразить по горизонтали",
|
||||
"tipFlipVertical": "Отразить по вертикали",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Заменить изображение, сохранив положение",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Альтернативный текст для доступности (теговые PDF)",
|
||||
"tipBringToFront": "На передний план",
|
||||
"tipSendToBack": "На задний план",
|
||||
"tipDuplicate": "Дублировать",
|
||||
"tipDelete": "Удалить",
|
||||
"tipAlignLeftEdges": "Выровнять по левым краям",
|
||||
"tipAlignHorizontalCenters": "Центрировать по горизонтали",
|
||||
"tipAlignRightEdges": "Выровнять по правым краям",
|
||||
"tipAlignTops": "Выровнять по верхним краям",
|
||||
"tipAlignVerticalCenters": "Центрировать по вертикали",
|
||||
"tipAlignBottoms": "Выровнять по нижним краям",
|
||||
"tipDistributeHorizontally": "Распределить по горизонтали",
|
||||
"tipDistributeVertically": "Распределить по вертикали",
|
||||
"tipFontSize": "Размер шрифта",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Показать шрифты, установленные на этом устройстве (Chromium)",
|
||||
"tipCustomTextColor": "Свой цвет текста",
|
||||
"tipAlignLeft": "По левому краю",
|
||||
"tipAlignCenter": "По центру",
|
||||
"tipAlignRight": "По правому краю",
|
||||
"tipJustify": "По ширине",
|
||||
"tipBold": "Полужирный",
|
||||
"tipItalic": "Курсив",
|
||||
"tipUnderline": "Подчёркнутый",
|
||||
"tipStrikethrough": "Зачёркнутый",
|
||||
"tipSuperscript": "Верхний индекс",
|
||||
"tipSubscript": "Нижний индекс",
|
||||
"tipToggleBulletedItem": "Маркированный пункт",
|
||||
"tipToggleNumberedItem": "Нумерованный пункт",
|
||||
"tipNumberedListMarkerStyle": "Стиль маркера нумерованных списков",
|
||||
"tipDecreaseListIndentTab": "Уменьшить отступ (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Увеличить отступ (Tab)",
|
||||
"tipTextOutlineColor": "Цвет контура текста",
|
||||
"tipOutlineWidth0None": "Толщина контура (0 = нет)",
|
||||
"tipFromContent": "Из содержимого",
|
||||
"tipLeftToRight": "Слева направо",
|
||||
"tipRightToLeft": "Справа налево",
|
||||
"tipStrokeColor": "Цвет обводки",
|
||||
"tipStrokeWidth": "Толщина обводки",
|
||||
"tipZoomPresets": "Предустановки масштаба",
|
||||
"tipZoomOut": "Уменьшить",
|
||||
"tipZoomIn": "Увеличить",
|
||||
"tipFitPage": "По размеру страницы",
|
||||
"tipPreviousPage": "Предыдущая страница",
|
||||
"tipTypeAPageNumberAndPressEnter": "Введите номер страницы и нажмите Enter",
|
||||
"tipNextPage": "Следующая страница",
|
||||
"tipDocumentProperties": "Свойства документа",
|
||||
"tipHideBar": "Скрыть панель",
|
||||
"tipShowBar": "Показать панель"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG в PDF",
|
||||
"subtitle": "Создать PDF из JPG, JPEG или JPEG2000 (JP2/JPX)."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Дублирование и организация",
|
||||
"subtitle": "Дублировать, переставить местами или удалить страницы."
|
||||
"subtitle": "Дублировать, переставить местами или удалить страницы.",
|
||||
"saveChanges": "Сохранить изменения"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Удаление страниц",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Редактирование закладок",
|
||||
"subtitle": "Добавить, редактировать, импортировать, удалить или извлечь закладки."
|
||||
"subtitle": "Добавить, редактировать, импортировать, удалить или извлечь закладки.",
|
||||
"autoExtractExisting": "Автоматически извлекать существующие закладки",
|
||||
"importSectionTitle": "Или импортировать закладки",
|
||||
"csvFormat": "Формат CSV: заголовок,страница,уровень",
|
||||
"jsonFormat": "Формат JSON",
|
||||
"uploadCsvAction": "Нажмите, чтобы загрузить CSV",
|
||||
"uploadJsonAction": "Нажмите, чтобы загрузить JSON",
|
||||
"orDragHere": "или перетащите сюда"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Оглавление",
|
||||
"subtitle": "Создать страницу с оглавлением, используя закладки."
|
||||
"subtitle": "Создать страницу с оглавлением, используя закладки.",
|
||||
"titleLabel": "Заголовок оглавления",
|
||||
"fontSize": "Размер шрифта",
|
||||
"fontFamily": "Семейство шрифтов",
|
||||
"addBookmark": "Добавить закладку для страницы оглавления",
|
||||
"generateButton": "Создать оглавление",
|
||||
"selectPdfFirst": "Сначала выберите PDF-файл.",
|
||||
"statusReadingFileMainThread": "Чтение файла (главный поток)...",
|
||||
"statusGenerating": "Создание оглавления...",
|
||||
"errorReadingFileWithMessage": "Ошибка чтения файла: {{message}}",
|
||||
"successGeneratedDownloadStarted": "Оглавление успешно создано! Загрузка начата.",
|
||||
"workerErrorWithMessage": "Ошибка: {{message}}",
|
||||
"workerErrorOccurred": "Произошла ошибка worker. Подробности в консоли."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Нумерация страниц",
|
||||
@@ -145,9 +286,14 @@
|
||||
"NoLabelPrefixOnly": "Только префикс без номера"
|
||||
}
|
||||
},
|
||||
"batesNumbering": {
|
||||
"name": "Bates-нумерация",
|
||||
"subtitle": "Добавьте последовательные номера Bates в один или несколько PDF-файлов."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Добавление водяных знаков",
|
||||
"subtitle": "Наложить текст или изображение на страницы документа."
|
||||
"subtitle": "Наложить текст или изображение на страницы документа.",
|
||||
"applyToAllPages": "Применить ко всем страницам"
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Колонтитулы",
|
||||
@@ -201,7 +347,8 @@
|
||||
"subtitle": "Добавить изображения штампов в документ, используя инструменты для добавления аннотаций.",
|
||||
"usernameLabel": "Имя для штампа",
|
||||
"usernamePlaceholder": "Введите ваше имя (для штампов)",
|
||||
"usernameHint": "Это имя будет добавляться на созданные вами штампы."
|
||||
"usernameHint": "Это имя будет добавляться на созданные вами штампы.",
|
||||
"saveButton": "Сохранить PDF со штампом"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Удаление аннотаций",
|
||||
@@ -209,15 +356,21 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Заполнение PDF-форм",
|
||||
"subtitle": "Заполнить форму прямо в браузере. Поддерживает формы XFA."
|
||||
"subtitle": "Заполнить форму прямо в браузере. Поддерживает формы XFA.",
|
||||
"uploadHint": "Загрузите PDF с полями формы. Заполните их прямо в просмотрщике ниже, затем нажмите кнопку, чтобы сохранить и скачать заполненную форму. Также поддерживаются формы XFA.",
|
||||
"xfaNoteTitle": "Примечание о формах XFA:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) — устаревший формат, поддерживаемый только некоторыми PDF-просмотрщиками, такими как BentoPDF и Firefox. Если вы открываете XFA PDF в другом ПО и видите пустые страницы или отсутствие полей формы, значит этот просмотрщик не поддерживает XFA. Для корректного просмотра и заполнения XFA-форм используйте Firefox или заполнитель форм BentoPDF."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Создание PDF-форм",
|
||||
"subtitle": "Создать заполняемую PDF-форму с перетаскиваемыми текстовыми полями."
|
||||
"subtitle": "Создать заполняемую PDF-форму с перетаскиваемыми текстовыми полями.",
|
||||
"orSeparator": "ИЛИ",
|
||||
"createBlankPdf": "Создать пустой PDF"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Удаление пустых страниц",
|
||||
"subtitle": "Автоматически обнаружить и удалить пустые страницы."
|
||||
"subtitle": "Автоматически обнаружить и удалить пустые страницы.",
|
||||
"sensitivityHint": "Выше = строже, только полностью пустые страницы. Ниже = допускает страницы с некоторым содержимым."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Изображения в PDF",
|
||||
@@ -249,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Текст в PDF",
|
||||
"subtitle": "Преобразовать текстовый файл в PDF."
|
||||
"subtitle": "Преобразовать текстовый файл в PDF.",
|
||||
"uploadFiles": "Загрузить файлы",
|
||||
"typeText": "Ввести текст",
|
||||
"acceptedFormats": "Текстовые файлы (.txt)",
|
||||
"fontFamily": "Семейство шрифтов",
|
||||
"fontSize": "Размер шрифта",
|
||||
"textColor": "Цвет текста",
|
||||
"pageSize": "Размер страницы",
|
||||
"rtlAutoDetectNote": "Языки RTL (арабский, урду, персидский и т.д.) автоматически определяются, и направление текста корректируется.",
|
||||
"createButton": "Создать PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON в PDF",
|
||||
"subtitle": "Преобразовать файлы JSON в формат PDF."
|
||||
"subtitle": "Преобразовать файлы JSON в формат PDF.",
|
||||
"noteLabel": "Примечание:",
|
||||
"noteText": "Поддерживаются только JSON-файлы, созданные инструментом PDF→JSON. Стандартные JSON-файлы из других инструментов не работают.",
|
||||
"acceptedFormats": "Несколько JSON-файлов",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Выберите хотя бы 1 JSON-файл",
|
||||
"selectedReady": "Выбрано {{count}} файл(ов). Готов к конвертации!",
|
||||
"readingFiles": "Чтение файлов (главный поток)...",
|
||||
"converting": "Конвертация JSON-файлов в PDF...",
|
||||
"readError": "Ошибка чтения файлов: {{message}}",
|
||||
"creatingZip": "Создание ZIP-файла...",
|
||||
"success": "JSON-файлы успешно конвертированы в PDF! Загрузка ZIP начата.",
|
||||
"zipError": "Ошибка создания ZIP: {{message}}",
|
||||
"workerError": "Ошибка Worker: {{message}}",
|
||||
"getStarted": "Выберите JSON-файлы, чтобы начать"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF в JPG",
|
||||
"subtitle": "Преобразовать каждую страницу PDF в изображение JPG."
|
||||
"subtitle": "Преобразовать каждую страницу PDF в изображение JPG.",
|
||||
"imageQuality": "Качество изображения",
|
||||
"imageQualityExplanation": "Выше качество = больше размер файла",
|
||||
"alert": {
|
||||
"invalidFile": "Недопустимый файл",
|
||||
"invalidFileExplanation": "Загрузите PDF-файл.",
|
||||
"noFile": "Нет файла",
|
||||
"noFileExplanation": "Сначала загрузите PDF-файл.",
|
||||
"conversionSuccess": "PDF успешно конвертирован в JPG!",
|
||||
"conversionError": "Не удалось конвертировать PDF в JPG. Файл может быть повреждён."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Конвертация в JPG..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF в PNG",
|
||||
"subtitle": "Преобразовать каждую страницу PDF в изображение PNG."
|
||||
"subtitle": "Преобразовать каждую страницу PDF в изображение PNG.",
|
||||
"imageScale": "Масштаб изображения",
|
||||
"imageScaleExplanation": "Больше масштаб = лучше качество, но больше файл",
|
||||
"alert": {
|
||||
"invalidFile": "Недопустимый файл",
|
||||
"invalidFileExplanation": "Загрузите PDF-файл.",
|
||||
"noFile": "Нет файла",
|
||||
"noFileExplanation": "Сначала загрузите PDF-файл.",
|
||||
"conversionSuccess": "PDF успешно конвертирован в PNG!",
|
||||
"conversionError": "Не удалось конвертировать PDF в PNG. Файл может быть повреждён."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Конвертация в PNG..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF в WebP",
|
||||
"subtitle": "Преобразовать каждую страницу PDF в изображение WebP."
|
||||
"subtitle": "Преобразовать каждую страницу PDF в изображение WebP.",
|
||||
"imageQuality": "Качество изображения",
|
||||
"imageQualityExplanation": "Выше качество = больше размер файла",
|
||||
"alert": {
|
||||
"invalidFile": "Недопустимый файл",
|
||||
"invalidFileExplanation": "Загрузите PDF-файл.",
|
||||
"noFile": "Нет файла",
|
||||
"noFileExplanation": "Сначала загрузите PDF-файл.",
|
||||
"conversionSuccess": "PDF успешно конвертирован в WebP!",
|
||||
"conversionError": "Не удалось конвертировать PDF в WebP. Файл может быть повреждён."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Конвертация в WebP..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF в BMP",
|
||||
"subtitle": "Преобразовать каждую страницу PDF в изображение BMP."
|
||||
"subtitle": "Преобразовать каждую страницу PDF в изображение BMP.",
|
||||
"alert": {
|
||||
"invalidFile": "Недопустимый файл",
|
||||
"invalidFileExplanation": "Загрузите PDF-файл.",
|
||||
"noFile": "Нет файла",
|
||||
"noFileExplanation": "Сначала загрузите PDF-файл.",
|
||||
"conversionSuccess": "PDF успешно конвертирован в BMP!",
|
||||
"conversionError": "Не удалось конвертировать PDF в BMP. Файл может быть повреждён."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Конвертация в BMP..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF в TIFF",
|
||||
@@ -281,7 +508,15 @@
|
||||
"colorMode": "Цветовой режим",
|
||||
"multiPage": "Сохранить как многостраничный TIFF (один файл)",
|
||||
"loadingVips": "Загрузка обработчика изображений...",
|
||||
"converting": "Конвертация в TIFF..."
|
||||
"converting": "Конвертация в TIFF...",
|
||||
"alert": {
|
||||
"invalidFile": "Недопустимый файл",
|
||||
"invalidFileExplanation": "Загрузите PDF-файл.",
|
||||
"noFile": "Нет файла",
|
||||
"noFileExplanation": "Сначала загрузите PDF-файл.",
|
||||
"conversionSuccess": "PDF успешно конвертирован в TIFF!",
|
||||
"conversionError": "Не удалось конвертировать PDF в TIFF. Файл может быть повреждён."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF в CBZ",
|
||||
@@ -319,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF в JSON",
|
||||
"subtitle": "Преобразовать PDF в JSON."
|
||||
"subtitle": "Преобразовать PDF в JSON.",
|
||||
"convertButton": "Конвертировать в JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Выберите хотя бы 1 PDF-файл",
|
||||
"selectedReady": "Выбрано {{count}} файл(ов). Готов к конвертации!",
|
||||
"checkingEncrypted": "Проверка зашифрованных PDF...",
|
||||
"readingFiles": "Чтение файлов (главный поток)...",
|
||||
"converting": "Конвертация PDF в JSON...",
|
||||
"readError": "Ошибка чтения файлов: {{message}}",
|
||||
"creatingZip": "Создание ZIP-файла...",
|
||||
"success": "PDF успешно конвертированы в JSON! Загрузка ZIP начата.",
|
||||
"zipError": "Ошибка создания ZIP: {{message}}",
|
||||
"workerError": "Ошибка Worker: {{message}}",
|
||||
"getStarted": "Выберите PDF-файлы, чтобы начать"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "Распознавание текста в PDF",
|
||||
"subtitle": "Распознать текст документа, сделав возможным поиск и копирование."
|
||||
"subtitle": "Распознать текст документа, сделав возможным поиск и копирование.",
|
||||
"languagesInDocument": "Языки в документе",
|
||||
"searchLanguagesPlaceholder": "Поиск языков...",
|
||||
"selectedLabel": "Выбрано:",
|
||||
"none": "Нет",
|
||||
"advancedSettingsSummary": "Расширенные настройки (рекомендуется для повышения точности)",
|
||||
"resolutionLabel": "Разрешение",
|
||||
"resolutionStandard": "Стандартное (192 DPI)",
|
||||
"resolutionHigh": "Высокое (288 DPI)",
|
||||
"resolutionUltra": "Ультра (384 DPI)",
|
||||
"binarizeLabel": "Бинаризация изображения (улучшение контраста для чистых сканов)",
|
||||
"embedFullFontsLabel": "Внедрить полные шрифты (больший файл, лучшая совместимость)",
|
||||
"whitelistPresetLabel": "Предустановка белого списка символов",
|
||||
"whitelistNone": "Нет (все символы)",
|
||||
"whitelistAlphanumeric": "Буквенно-цифровое + базовая пунктуация",
|
||||
"whitelistNumbersCurrency": "Числа + Символы валют",
|
||||
"whitelistLettersOnly": "Только буквы (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Только числа (0-9)",
|
||||
"whitelistInvoice": "Счёт/Чек (числа, $, ., -, /)",
|
||||
"whitelistForms": "Формы (буквенно-цифровое + общие символы)",
|
||||
"whitelistCustom": "Пользовательский...",
|
||||
"whitelistHelp": "Будут распознаны только эти символы. Оставьте пустым для всех символов.",
|
||||
"whitelistInputLabel": "Белый список символов (необязательно)",
|
||||
"whitelistInputPlaceholder": "напр., abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "Запустить OCR",
|
||||
"progressInitializing": "Инициализация...",
|
||||
"resultsTitle": "OCR завершён",
|
||||
"resultsDescription": "Ваш PDF с поиском готов. Также можно скопировать или скачать извлечённый текст ниже.",
|
||||
"copyToClipboard": "Копировать в буфер обмена",
|
||||
"downloadTxt": "Скачать как .txt",
|
||||
"downloadSearchablePdf": "Скачать PDF с поиском",
|
||||
"statusPrefix": "Статус: {{status}}",
|
||||
"availabilityInvalidConfig": "Этот выпуск не предоставляет действительных языков OCR. Пересоберите с VITE_TESSERACT_AVAILABLE_LANGUAGES, установленным на действительные коды Tesseract.",
|
||||
"availabilityBundles": "Этот выпуск включает OCR для: {{languages}}.",
|
||||
"noLanguagesAvailable": "В этом выпуске нет доступных языков OCR.",
|
||||
"noLanguagesTitle": "Языки не выбраны",
|
||||
"noLanguagesMessage": "Выберите хотя бы один язык для OCR.",
|
||||
"noFileTitle": "Нет файла",
|
||||
"noFileMessage": "Сначала загрузите PDF-файл.",
|
||||
"languageUnavailableTitle": "Язык OCR недоступен",
|
||||
"ocrErrorTitle": "Ошибка OCR",
|
||||
"ocrErrorMessage": "Произошла ошибка при выполнении OCR. Возможно, не удалось загрузить worker. Повторите попытку.",
|
||||
"howItWorksTitle": "Как это работает:",
|
||||
"extractTextLabel": "Извлечь текст:",
|
||||
"extractTextDescription": "Использует Tesseract OCR для распознавания текста на отсканированных изображениях или PDF.",
|
||||
"searchableOutputLabel": "Вывод с возможностью поиска:",
|
||||
"searchableOutputDescription": "Создаёт новый PDF с невидимым текстовым слоем, делая ваш документ полностью доступным для поиска при сохранении исходного вида.",
|
||||
"characterFilteringLabel": "Фильтрация символов:",
|
||||
"characterFilteringDescription": "Используйте белые списки для фильтрации нежелательных символов и повышения точности для конкретных типов документов (счета, формы и т.д.).",
|
||||
"multiLanguageSupportLabel": "Поддержка нескольких языков:",
|
||||
"multiLanguageSupportDescription": "Выберите несколько языков для документов со смешанным языковым содержимым."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Объединение документов с чередованием страниц",
|
||||
"subtitle": "Объединить документы, чередуя страницы, с сохранением закладок."
|
||||
"subtitle": "Объединить документы, чередуя страницы, с сохранением закладок.",
|
||||
"retainPageLabels": "Сохранять исходные метки страниц из каждого файла",
|
||||
"retainPageLabelsHint": "Выкл (по умолчанию): объединённый PDF использует естественную нумерацию страниц 1–N. Вкл: исходные метки страниц каждого файла сохраняются (могут появиться дубликаты)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Сортировка двустороннего сканирования",
|
||||
"subtitle": "Переупорядочивает PDF, отсканированный двумя блоками (сначала все лицевые стороны, затем все обороты), в правильный порядок лицевая/оборот.",
|
||||
"totalPagesLabel": "Всего страниц:",
|
||||
"splitAfterPageLabel": "Разделить после страницы",
|
||||
"splitAfterPagePlaceholder": "напр. 50",
|
||||
"backBlockOrderLabel": "Порядок блока оборотов",
|
||||
"backBlockReverseOption": "Обратить блок оборотов (обычно при перевёрнутой стопке)",
|
||||
"backBlockKeepOption": "Оставить блок оборотов без изменений",
|
||||
"autoSplitButton": "Определить разделение автоматически (половина)",
|
||||
"exportGroupedLabel": "Экспортировать файлы группами по длине исходного документа",
|
||||
"pagesPerDocumentLabel": "Страниц в исходном документе",
|
||||
"groupedHelp": "Если включено, результатом будет ZIP-архив с отдельным PDF для каждого сгруппированного документа.",
|
||||
"collateButton": "Собрать PDF",
|
||||
"invalidFileTitle": "Недопустимый файл",
|
||||
"invalidFileMessage": "Выберите файл PDF.",
|
||||
"loadingPdf": "Загрузка PDF...",
|
||||
"loadErrorMessage": "Не удалось загрузить файл PDF.",
|
||||
"fileMeta": "{{size}} - {{count}} стр.",
|
||||
"oddPageWarning": "Нечётное число страниц ({{count}}). При двустороннем сканировании число страниц должно быть чётным; возможно, страница пропущена или лишняя.",
|
||||
"previewSummary": "Блок лицевых сторон: {{frontCount}} стр., блок оборотов: {{backCount}} стр. Результат: {{outputCount}} стр. в порядке лицевая/оборот.",
|
||||
"previewMismatchWarning": "Длина блоков лицевых и оборотных сторон различается ({{frontCount}} лицевых против {{backCount}} оборотов). Лишние страницы ({{extraCount}}) из более длинного блока будут добавлены без пары в конец.",
|
||||
"missingFileTitle": "Файл не выбран",
|
||||
"missingFileMessage": "Перед обработкой загрузите PDF не менее чем с 2 страницами.",
|
||||
"invalidSplitTitle": "Недопустимая точка разделения",
|
||||
"invalidSplitMessage": "Точка разделения должна быть между страницей 1 и страницей {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "Неравные блоки",
|
||||
"unevenConfirmMessage": "В блоке лицевых сторон {{frontCount}} стр., в блоке оборотов — {{backCount}} стр.\nОбычно это означает, что страница отсканирована дважды или отсутствует.\n\nСтраницы без пары ({{extraCount}}) будут добавлены в конец.\n\nВсё равно продолжить?",
|
||||
"invalidGroupTitle": "Недопустимый размер группы",
|
||||
"invalidGroupMessage": "Введите допустимое число страниц в исходном документе.",
|
||||
"collatingLoader": "Сборка двустороннего сканирования...",
|
||||
"successMessage": "Собранный PDF успешно создан.",
|
||||
"successGroupedMessage": "Сборка завершена. Создано файлов: {{fileCount}}.",
|
||||
"processErrorMessage": "Не удалось собрать PDF.",
|
||||
"howItWorksStep1Title": "Загрузите скан",
|
||||
"howItWorksStep1": "Перетащите один PDF, в котором сначала идут все лицевые стороны, а затем все обороты.",
|
||||
"howItWorksStep2Title": "Задайте точку разделения",
|
||||
"howItWorksStep2": "Укажите, где заканчивается блок лицевых сторон, и выберите, нужно ли обращать блок оборотов.",
|
||||
"howItWorksStep3Title": "Соберите и скачайте",
|
||||
"howItWorksStep3": "Вы получите один PDF с чередованием страниц или ZIP-архив с отдельным файлом для каждого исходного документа.",
|
||||
"faqOddPagesQuestion": "Что делать, если в скане нечётное число страниц?",
|
||||
"faqOddPagesAnswer": "При двустороннем сканировании число страниц должно быть чётным. Если это не так, страница, скорее всего, отсканирована дважды или пропущена. Инструмент предупредит вас перед обработкой, а страницы без пары будут добавлены в конец, чтобы ничего не потерялось.",
|
||||
"faqBackOrderQuestion": "Зачем оставлять блок оборотов без изменений?",
|
||||
"faqBackOrderAnswer": "Это зависит от того, как стопка подавалась на втором проходе. Если перевернуть всю стопку целиком, обороты идут в обратном порядке — это вариант по умолчанию. Если сканер выдал их в том же порядке, что и лицевые стороны, выберите вариант «оставить без изменений»."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Добавление вложений",
|
||||
@@ -383,7 +729,47 @@
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "Сравнение документов",
|
||||
"subtitle": "Сравнить два документа, разместив их рядом."
|
||||
"subtitle": "Сравнить два документа, разместив их рядом.",
|
||||
"firstPdf": "Первый PDF",
|
||||
"secondPdf": "Второй PDF",
|
||||
"clickOrDrop": "Нажмите или перетащите",
|
||||
"page": "Страница",
|
||||
"overlay": "Наложение",
|
||||
"sideBySide": "Рядом",
|
||||
"flicker": "Мерцание",
|
||||
"syncScroll": "Синхронная прокрутка",
|
||||
"export": "Экспорт",
|
||||
"exportAsPdf": "Экспортировать как PDF",
|
||||
"splitView": "Разделённый вид",
|
||||
"alternating": "Чередование",
|
||||
"leftDocument": "Левый документ",
|
||||
"rightDocument": "Правый документ",
|
||||
"original": "Оригинал",
|
||||
"modified": "Изменено",
|
||||
"searchChanges": "Поиск изменений...",
|
||||
"deleted": "Удалено",
|
||||
"added": "Добавлено",
|
||||
"prevPage": "Предыдущая страница",
|
||||
"nextPage": "Следующая страница",
|
||||
"prevChange": "Предыдущее изменение",
|
||||
"nextChange": "Следующее изменение",
|
||||
"uploadTwoPdfs": "Загрузите два PDF, чтобы увидеть различия.",
|
||||
"noDifferences": "На этой странице различий не обнаружено.",
|
||||
"noMatchingChanges": "Нет изменений, соответствующих текущему фильтру.",
|
||||
"pageNotExist": "Страница {{page}} не существует в этом PDF.",
|
||||
"noPairedPage": "Нет парной страницы для этой стороны.",
|
||||
"buildingModel": "Построение модели сопоставления страниц...",
|
||||
"indexingPdf": "Индексация PDF {{num}}, страница {{page}} из {{total}}...",
|
||||
"loadingComparison": "Загрузка сравнения {{current}} из {{total}}...",
|
||||
"runningOcr": "Выполнение OCR на странице {{page}}...",
|
||||
"preparingExport": "Подготовка экспорта PDF...",
|
||||
"renderingPage": "Рендеринг страницы {{current}} из {{total}}...",
|
||||
"exportError": "Ошибка экспорта",
|
||||
"exportFailed": "Не удалось экспортировать PDF сравнения.",
|
||||
"loadingFile": "Загрузка {{name}}...",
|
||||
"invalidFile": "Недопустимый файл",
|
||||
"invalidFileMsg": "Выберите действительный PDF-файл.",
|
||||
"loadError": "Не удалось загрузить PDF. Возможно, файл повреждён или защищён паролем."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "Постеризация документа",
|
||||
@@ -614,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF в текст",
|
||||
"subtitle": "Извлечь текст из документа в текстовом формате (.txt). Поддерживает несколько файлов.",
|
||||
"note": "Данный инструмент работает ТОЛЬКО с PDF-файлами, созданными электронно. Для отсканированных документов или PDF-файлов, основывающихся на изображениях, используйте инструмент «Распознавание текста в PDF».",
|
||||
"convertButton": "Извлечь текст"
|
||||
"noteLabel": "Примечание:",
|
||||
"noteText": "Этот инструмент работает ТОЛЬКО с PDF-файлами, созданными в цифровой форме. Для отсканированных документов или PDF на основе изображений используйте наш инструмент OCR PDF.",
|
||||
"convertButton": "Извлечь текст",
|
||||
"note": "Данный инструмент работает ТОЛЬКО с PDF-файлами, созданными электронно. Для отсканированных документов или PDF-файлов, основывающихся на изображениях, используйте инструмент «Распознавание текста в PDF»."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Цифровая подпись PDF",
|
||||
"pageTitle": "Цифровая подпись PDF - Добавить криптографическую подпись | BentoPDF",
|
||||
"subtitle": "Добавить криптографическую цифровую подпись в PDF-файл, используя сертификаты X.509. Поддерживает форматы PKCS#12 (.pfx, .p12) и PEM. Ваш приватный ключ не покидает браузер.",
|
||||
"certificateSection": "Сертификат",
|
||||
"uploadCert": "Загрузить сертификат (.pfx, .p12)",
|
||||
"uploadCert": "Загрузить сертификат (.pfx, .p12, .pem)",
|
||||
"certPassword": "Пароль от сертификата",
|
||||
"privateKeyPassword": "Пароль закрытого ключа",
|
||||
"certPasswordPlaceholder": "Введите Пароль от сертификата",
|
||||
"certInfo": "Сведения о сертификате",
|
||||
"certSubject": "Субъект",
|
||||
@@ -636,14 +1025,86 @@
|
||||
"locationPlaceholder": "например, Москва, Россия",
|
||||
"contactInfo": "Контактная информация",
|
||||
"contactPlaceholder": "например, [email protected]",
|
||||
"visibleSignature": "Видимая подпись",
|
||||
"visibleSignatureDescription": "Когда включено, на PDF появляется видимое поле подписи. Можно загрузить изображение/логотип или добавить текст. Если ни то, ни другое не задано, имя подписавшего автоматически отображается из сертификата.",
|
||||
"signatureImage": "Изображение/логотип подписи (необязательно)",
|
||||
"uploadSignatureImage": "Загрузить изображение (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Предпросмотр подписи",
|
||||
"remove": "Удалить",
|
||||
"page": "Страница",
|
||||
"firstPage": "Первая страница",
|
||||
"lastPage": "Последняя страница",
|
||||
"allPages": "Все страницы",
|
||||
"customPage": "Произвольная страница #",
|
||||
"pageNumber": "Страница #",
|
||||
"xPosition": "Позиция X (слева)",
|
||||
"yPosition": "Позиция Y (сверху)",
|
||||
"width": "Ширина",
|
||||
"height": "Высота",
|
||||
"addTextOverlay": "Добавить текстовое наложение",
|
||||
"text": "Текст",
|
||||
"textPlaceholder": "напр., Подписано в цифровой форме Иван Иванов",
|
||||
"textColor": "Цвет текста",
|
||||
"fontSize": "Размер шрифта",
|
||||
"invalidImageTitle": "Недопустимое изображение",
|
||||
"invalidImageMessage": "Выберите изображение PNG, JPG или WebP.",
|
||||
"invalidFileTitle": "Недопустимый файл",
|
||||
"invalidFileMessage": "Выберите PDF-файл.",
|
||||
"invalidCertificateTitle": "Недопустимый сертификат",
|
||||
"invalidCertificateMessage": "Выберите файл сертификата .pfx, .p12 или .pem.",
|
||||
"certificateLoaded": "Сертификат загружен",
|
||||
"certificateUnlocked": "Сертификат разблокирован",
|
||||
"failedParsePem": "Не удалось разобрать PEM-файл",
|
||||
"enterPasswordToUnlock": "Введите пароль для разблокировки",
|
||||
"invalidPasswordOrCertificate": "Неверный пароль или сертификат",
|
||||
"incorrectPassword": "Неверный пароль",
|
||||
"failedParseCertificate": "Не удалось разобрать сертификат",
|
||||
"missingDataTitle": "Отсутствуют данные",
|
||||
"missingDataMessage": "Загрузите PDF и действительный сертификат.",
|
||||
"applyingSignature": "Применение цифровой подписи...",
|
||||
"signingFailedTitle": "Ошибка подписания",
|
||||
"chainFetchFailed": "Не удалось получить цепочку сертификатов. Возможно, проблема с сетью или прокси сертификатов недоступен. Проверьте подключение к интернету и повторите попытку. Если проблема не устранена, обратитесь в поддержку.",
|
||||
"failedToSignPdf": "Не удалось подписать PDF: {{message}}",
|
||||
"defaultSignatureText": "Подписано в цифровой форме {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} стр.",
|
||||
"howToStep1Title": "Загрузить PDF",
|
||||
"howToStep1Text": "Выберите PDF-документ, который хотите подписать",
|
||||
"howToStep2Title": "Загрузить сертификат",
|
||||
"howToStep2Text": "Предоставьте файл сертификата .pfx или .p12 и пароль",
|
||||
"howToStep3Title": "Подписать и скачать",
|
||||
"howToStep3Text": "Примените цифровую подпись и скачайте подписанный PDF",
|
||||
"relatedEncryptDesc": "Защитить PDF паролем",
|
||||
"relatedDecryptDesc": "Удалить пароль PDF",
|
||||
"relatedFlattenDesc": "Сделать аннотации постоянными",
|
||||
"relatedSanitizeDesc": "Удалить скрытые данные",
|
||||
"relatedPermissionsDesc": "Установить права PDF",
|
||||
"faqWhatIsQuestion": "Что такое цифровая подпись?",
|
||||
"faqWhatIsAnswer": "Цифровая подпись — это криптографический механизм, проверяющий подлинность и целостность документа. В отличие от нарисованной подписи, она использует криптографию с открытым ключом (сертификаты X.509) для подтверждения личности подписавшего.",
|
||||
"faqFormatsQuestion": "Какие форматы сертификатов поддерживаются?",
|
||||
"faqFormatsAnswer": "Мы поддерживаем сертификаты в формате PKCS#12 (.pfx, .p12), которые содержат ваш сертификат и закрытый ключ в одном зашифрованном файле. Обычно их выдают центры сертификации.",
|
||||
"faqPrivateKeyQuestion": "Безопасен ли мой закрытый ключ?",
|
||||
"faqPrivateKeyAnswer": "Да! Вся обработка происходит полностью в вашем браузере. Сертификат, закрытый ключ и PDF-файлы никогда не покидают ваше устройство и не загружаются на сервер.",
|
||||
"faqValidReadersQuestion": "Будет ли подпись действительна в PDF-читалках?",
|
||||
"faqValidReadersAnswer": "Да, инструмент создаёт стандартные отделённые подписи PKCS#7, которые распознаются всеми основными PDF-читалками. Для полной проверки используйте сертификат от доверенного центра сертификации.",
|
||||
"applySignature": "Подписать цифровой подписью",
|
||||
"successMessage": "PDF успешно подписан! Подпись может быть проверена в любом PDF-просмотрщике."
|
||||
"successMessage": "PDF успешно подписан! Подпись может быть проверена в любом PDF-просмотрщике.",
|
||||
"internetRequiredTitle": "Требуется интернет-соединение",
|
||||
"internetRequiredDescription": "Для проверки подписи может потребоваться получить информацию о цепочке сертификатов с сервера издателя сертификата."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Проверка подписи в PDF",
|
||||
"pageTitle": "Проверить подпись в PDF - проверить цифровые подписи | BentoPDF",
|
||||
"subtitle": "Проверить цифровые подписи в документах. Проверить срок действия сертификата, просмотреть сведения о подписанте и подтвердить действительность документа — всё это, не покидая браузер."
|
||||
},
|
||||
"timestampPdf": {
|
||||
"name": "Метка времени PDF",
|
||||
"pageTitle": "Метка времени PDF онлайн бесплатно - Метка времени документа RFC 3161 | BentoPDF",
|
||||
"subtitle": "Добавьте метку времени документа RFC 3161 к вашему PDF, используя сервер доверенного органа меток времени (TSA). Доказывает, что ваш документ существовал в определённый момент времени. Сертификат не требуется.",
|
||||
"tsaSectionTitle": "Сервер меток времени (TSA)",
|
||||
"selectTsa": "Выберите сервер TSA",
|
||||
"applyTimestamp": "Применить метку времени",
|
||||
"successMessage": "PDF успешно отмечен меткой времени! Метку можно проверить в любом PDF-просмотрщике."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email в PDF",
|
||||
"subtitle": "Преобразовать архив электронной почты (EML, MSG) в формат PDF. Поддерживает экспортированные файлы Outlook и стандартные email-форматы.",
|
||||
@@ -686,6 +1147,145 @@
|
||||
"name": "Растеризация документа",
|
||||
"subtitle": "Преобразовать содержимое страниц документа в изображения, свести слои и убрать выделяемый текст."
|
||||
},
|
||||
"pdfWorkflow": {
|
||||
"name": "Конструктор PDF-процессов",
|
||||
"subtitle": "Создавайте пользовательские конвейеры обработки PDF с визуальным редактором узлов.",
|
||||
"nodes": "Узлы",
|
||||
"searchNodes": "Поиск узлов...",
|
||||
"run": "Запустить",
|
||||
"clear": "Очистить",
|
||||
"save": "Сохранить",
|
||||
"load": "Загрузить",
|
||||
"export": "Экспорт",
|
||||
"import": "Импорт",
|
||||
"ready": "Готово",
|
||||
"settings": "Настройки",
|
||||
"processing": "Обработка...",
|
||||
"saveTemplate": "Сохранить шаблон",
|
||||
"templateName": "Имя шаблона",
|
||||
"templatePlaceholder": "напр. Процесс счетов",
|
||||
"cancel": "Отмена",
|
||||
"loadTemplate": "Загрузить шаблон",
|
||||
"noTemplates": "Сохранённых шаблонов пока нет.",
|
||||
"ok": "OK",
|
||||
"workflowCompleted": "Рабочий процесс завершён",
|
||||
"errorDuringExecution": "Ошибка во время выполнения",
|
||||
"addNodeError": "Добавьте хотя бы один узел для запуска рабочего процесса.",
|
||||
"needInputOutput": "Для запуска рабочего процесса требуется хотя бы один входной узел и один выходной узел.",
|
||||
"enterName": "Введите имя.",
|
||||
"templateExists": "Шаблон с таким именем уже существует.",
|
||||
"templateSaved": "Шаблон \"{{name}}\" сохранён.",
|
||||
"templateLoaded": "Шаблон \"{{name}}\" загружен.",
|
||||
"failedLoadTemplate": "Не удалось загрузить шаблон.",
|
||||
"noSettings": "Нет настраиваемых параметров для этого узла.",
|
||||
"advancedSettings": "Расширенные настройки",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "PDF-вход",
|
||||
"description": "Загрузить один или несколько PDF-файлов"
|
||||
},
|
||||
"download": {
|
||||
"name": "Скачать",
|
||||
"description": "Автоматически скачивать в формате PDF или ZIP"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "К узлу {{node}} не подключены PDF",
|
||||
"noPdfInputs": "Нет PDF на входе",
|
||||
"expectedPdfInput": "Ожидался PDF на входе",
|
||||
"failedToRenderPage": "Не удалось отрендерить страницу {{page}}",
|
||||
"failedToGetCanvasContext": "Не удалось получить контекст canvas для страницы {{page}}",
|
||||
"failedToRenderPageToImage": "Не удалось отрендерить страницу {{page}} в изображение",
|
||||
"noPagesProcessed": "Страницы не были обработаны",
|
||||
"cpdfNotConfigured": "CoherentPDF не настроен. Настройте его в Расширенных настройках.",
|
||||
"workerError": "Ошибка worker: {{message}}",
|
||||
"alternateMergeWorkerError": "Ошибка worker чередующегося слияния: {{message}}",
|
||||
"noPdfFilesUploaded": "В узел PDF-вход не загружены PDF-файлы",
|
||||
"failedToLoadFile": "Не удалось загрузить \"{{file}}\" — файл может быть повреждён",
|
||||
"noImagesUploaded": "В узел Изображение-вход не загружены изображения",
|
||||
"noWordDocsUploaded": "В узел Word-вход не загружены документы",
|
||||
"noExcelUploaded": "В узел Excel-вход не загружены электронные таблицы",
|
||||
"noPowerPointUploaded": "В узел PowerPoint-вход не загружены презентации",
|
||||
"noCbzUploaded": "В узел CBZ-вход не загружены архивы комиксов",
|
||||
"noEmailUploaded": "В узел Email-вход не загружены файлы электронной почты",
|
||||
"noEpubUploaded": "В узел EPUB-вход не загружены EPUB-файлы",
|
||||
"noFb2Uploaded": "В узел FB2-вход не загружены FB2-файлы",
|
||||
"noJsonUploaded": "В узел JSON-вход не загружены JSON-файлы",
|
||||
"noMarkdownUploaded": "В узел Markdown-вход не загружены Markdown-файлы",
|
||||
"noMobiUploaded": "В узел MOBI-вход не загружены MOBI-файлы",
|
||||
"noOdgUploaded": "В узел ODG-вход не загружены ODG-файлы",
|
||||
"noPagesUploaded": "В узел Pages-вход не загружены файлы Pages",
|
||||
"noPubUploaded": "В узел PUB-вход не загружены PUB-файлы",
|
||||
"noSvgUploaded": "В узел SVG-вход не загружены SVG-файлы",
|
||||
"noTextUploaded": "В узел Текст-вход не загружены текстовые файлы",
|
||||
"noVsdUploaded": "В узел VSD-вход не загружены файлы Visio",
|
||||
"noWpdUploaded": "В узел WPD-вход не загружены WPD-файлы",
|
||||
"noWpsUploaded": "В узел WPS-вход не загружены WPS-файлы",
|
||||
"noXmlUploaded": "В узел XML-вход не загружены XML-файлы",
|
||||
"noXpsUploaded": "В узел XPS-вход не загружены XPS-файлы",
|
||||
"alternateMergeNeedsTwo": "Чередующееся слияние требует не менее двух PDF, подключённых к его входу",
|
||||
"cropMarginsExceed": "Поля обрезки превышают размеры страницы. Уменьшите значения обрезки.",
|
||||
"digitalSignNoCertificate": "В узле Цифровая подпись не загружен сертификат",
|
||||
"encryptUserPasswordRequired": "Для шифрования требуется пароль пользователя",
|
||||
"extractImagesNoneFound": "Изображения не найдены ни в одном из подключённых PDF",
|
||||
"invertColorsFailedReadImage": "Не удалось прочитать данные изображения",
|
||||
"overlayRequiresPdf": "Узел Наложение требует PDF-вход наложения.",
|
||||
"pdfToCsvNoTables": "В PDF не найдены таблицы",
|
||||
"pdfToXlsxNoTables": "В {{file}} не найдены таблицы",
|
||||
"posterizeFailedTileCanvas": "Не удалось получить контекст плиточного canvas",
|
||||
"redactNoText": "Закрашивание: не указан текст для закрашивания",
|
||||
"removeBlankPagesAllBlank": "Все страницы пустые",
|
||||
"svgFailedToConvert": "Не удалось конвертировать SVG",
|
||||
"svgFailedToLoad": "Не удалось загрузить SVG",
|
||||
"timestampFailed": "Не удалось проставить временную метку с использованием TSA {{tsa}}: {{message}}",
|
||||
"noOutputNodes": "Не найдены выходные узлы. Добавьте узел Скачать для завершения рабочего процесса.",
|
||||
"circularDependency": "В рабочем процессе обнаружена циклическая зависимость. Удалите циклы между узлами.",
|
||||
"encryptOrdering": "Узел Шифровать подаёт данные в \"{{target}}\", который может не работать с зашифрованными данными. Переместите Шифровать прямо перед выходным узлом.",
|
||||
"invalidWorkflowFile": "Недопустимый файл рабочего процесса: отсутствует массив узлов или соединений.",
|
||||
"storageQuotaExceeded": "Не удалось сохранить рабочий процесс: превышен лимит хранения. Попробуйте удалить старые шаблоны.",
|
||||
"failedToImport": "Не удалось импортировать рабочий процесс: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Настройки расширенных функций",
|
||||
"description": "Настройте внешние модули обработки для включения расширенных функций PDF. Эти модули необязательны и лицензируются отдельно.",
|
||||
"status": {
|
||||
"testing": "Проверка...",
|
||||
"customOverride": "Пользовательское переопределение",
|
||||
"preConfigured": "Преднастроено",
|
||||
"notConfigured": "Не настроено"
|
||||
},
|
||||
"preconfiguredTitle": "Преднастроено и готово к использованию.",
|
||||
"preconfiguredDescription": "Расширенные модули обработки автоматически загружаются с CDN. Вы можете переопределить URL ниже, если требуется использовать пользовательский источник (например, для air-gapped или самостоятельно размещённых развёртываний).",
|
||||
"usingDefault": "Используется по умолчанию: {{url}}",
|
||||
"pymupdfSubtitle": "Движок обработки документов",
|
||||
"pymupdfFeatures": "Включает: PDF в текст, Markdown, SVG, DOCX, Excel • Извлечь изображения/таблицы • Конвертация формата",
|
||||
"testButton": "Проверить",
|
||||
"recommendedLabel": "Рекомендуется:",
|
||||
"copyTitle": "Копировать в буфер обмена",
|
||||
"ghostscriptSubtitle": "Движок конвертации PDF/A",
|
||||
"ghostscriptFeatures": "Включает: Конвертация PDF/A-1b, PDF/A-2b, PDF/A-3b • Шрифт в контур",
|
||||
"cpdfSubtitle": "Движок закладок и метаданных",
|
||||
"cpdfFeatures": "Включает: Разделить по закладкам • Редактировать закладки • Метаданные PDF",
|
||||
"saveConfiguration": "Сохранить конфигурацию",
|
||||
"savingConfiguration": "Сохранение конфигурации...",
|
||||
"savedTitle": "Сохранено",
|
||||
"savedMessage": "Конфигурация успешно сохранена!",
|
||||
"errorTitle": "Ошибка",
|
||||
"failedSave": "Не удалось сохранить конфигурацию: {{message}}",
|
||||
"emptyUrlTitle": "Пустой URL",
|
||||
"emptyUrlMessage": "Введите URL для проверки.",
|
||||
"testSuccessTitle": "Успех",
|
||||
"connectionSuccess": "Подключение к {{package}} успешно!",
|
||||
"connectionFailedTitle": "Сбой подключения",
|
||||
"connectionFailedMessage": "Не удалось подключиться к URL.",
|
||||
"resetDefaults": "Сбросить к значениям по умолчанию",
|
||||
"resetTitle": "Сброс",
|
||||
"resetWithDefaults": "Пользовательские переопределения очищены. Активны преднастроенные значения по умолчанию.",
|
||||
"resetNoDefaults": "Все конфигурации и кэшированные модули были очищены.",
|
||||
"licenseTitle": "Уведомление о лицензии:",
|
||||
"licenseDescription": "Внешние модули (PyMuPDF, Ghostscript, CoherentPDF) лицензированы под AGPL-3.0 или подобными copyleft-лицензиями. Настраивая и используя эти модули, вы соглашаетесь с их соответствующими условиями лицензирования. BentoPDF совместим с любой реализацией Ghostscript WASM и PyMuPDF WASM, следующей ожидаемому интерфейсу."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "Наложение PDF",
|
||||
"subtitle": "Наложить страницы одного PDF поверх или под страницы другого.",
|
||||
|
||||
@@ -0,0 +1,387 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "Domov",
|
||||
"about": "O nás",
|
||||
"contact": "Kontakt",
|
||||
"licensing": "Licencie",
|
||||
"allTools": "Všetky nástroje",
|
||||
"docs": "Dokumentácia",
|
||||
"openMainMenu": "Otvoriť hlavné menu",
|
||||
"language": "Jazyk",
|
||||
"searchLanguage": "Hľadať jazyk…",
|
||||
"noLanguagesFound": "Nenašli sa žiadne jazyky"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Páči sa vám BentoPDF? Pomôžte nám udržať ho bezplatný a open source!",
|
||||
"button": "Prispieť"
|
||||
},
|
||||
"hero": {
|
||||
"title": "Sada",
|
||||
"pdfToolkit": "PDF nástrojov",
|
||||
"builtForPrivacy": "vytvorená pre súkromie",
|
||||
"noSignups": "Žiadne registrácie",
|
||||
"unlimitedUse": "Neobmedzené používanie",
|
||||
"worksOffline": "Funguje offline",
|
||||
"startUsing": "Začať používať teraz"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Používajú spoločnosti a ľudia, ktorí pracujú v"
|
||||
},
|
||||
"features": {
|
||||
"title": "Prečo si vybrať",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "Žiadna registrácia",
|
||||
"description": "Začnite okamžite, nepotrebujete žiadne účty ani e-maily."
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "Žiadne nahrávanie na server",
|
||||
"description": "100% lokálne spracovanie, vaše súbory nikdy neopustia vaše zariadenie."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Navždy zadarmo",
|
||||
"description": "Všetky nástroje, žiadne skúšobné verzie, žiadne skryté poplatky."
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "Bez obmedzení",
|
||||
"description": "Používajte koľko chcete, bez skrytých limitov."
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "Dávkové spracovanie",
|
||||
"description": "Spracujte neobmedzené množstvo PDF dokumentov naraz."
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "Bleskovo rýchle",
|
||||
"description": "Spracujte PDF okamžite, bez zbytočného čakania."
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "Začnite s",
|
||||
"toolsLabel": "Nástroje",
|
||||
"subtitle": "Kliknutím na nástroj otvoríte nahrávanie súborov",
|
||||
"searchPlaceholder": "Vyhľadajte nástroj (napr. 'rozdeliť', 'usporiadať'...)",
|
||||
"backToTools": "Späť na nástroje",
|
||||
"firstLoadNotice": "Prvé načítanie chvíľu trvá, kým sa stiahne náš konverzný nástroj. Potom už budú všetky procesy okamžité."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Kliknite pre výber súboru",
|
||||
"orDragAndDrop": "alebo ho potiahnite a pusťte",
|
||||
"pdfOrImages": "PDF alebo obrázky",
|
||||
"filesNeverLeave": "Vaše súbory nikdy neopustia vaše zariadenie.",
|
||||
"addMore": "Pridať ďalšie súbory",
|
||||
"clearAll": "Vymazať všetko",
|
||||
"clearFiles": "Vymazať súbory",
|
||||
"hints": {
|
||||
"singlePdf": "Jeden PDF súbor",
|
||||
"pdfFile": "PDF súbor",
|
||||
"multiplePdfs2": "Viacero PDF súborov (aspoň 2)",
|
||||
"bmpImages": "Obrázky BMP",
|
||||
"oneOrMorePdfs": "Jeden alebo viac PDF súborov",
|
||||
"pdfDocuments": "PDF dokumenty",
|
||||
"oneOrMoreCsv": "Jeden alebo viac CSV súborov",
|
||||
"multiplePdfsSupported": "Podporuje sa viacero PDF súborov",
|
||||
"singleOrMultiplePdfs": "Podporovaný jeden alebo viacero PDF súborov",
|
||||
"singlePdfFile": "Jeden PDF súbor",
|
||||
"pdfWithForms": "PDF súbor s poľami formulára",
|
||||
"heicImages": "Obrázky HEIC/HEIF",
|
||||
"jpgImages": "Obrázky JPG, JPEG, JP2, JPX",
|
||||
"pdfsOrImages": "PDF alebo obrázky",
|
||||
"oneOrMoreOdt": "Jeden alebo viac ODT súborov",
|
||||
"singlePdfOnly": "Iba jeden PDF súbor",
|
||||
"pdfFiles": "PDF súbory",
|
||||
"multiplePdfs": "Viacero PDF súborov",
|
||||
"pngImages": "Obrázky PNG",
|
||||
"pdfFilesOneOrMore": "PDF súbory (jeden alebo viac)",
|
||||
"oneOrMoreRtf": "Jeden alebo viac RTF súborov",
|
||||
"svgGraphics": "Grafika SVG",
|
||||
"tiffImages": "Obrázky TIFF",
|
||||
"webpImages": "Obrázky WebP"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Ako to funguje",
|
||||
"step1Title": "Nahrať súbor",
|
||||
"step1": "Kliknite alebo presuňte súbor pre začiatok",
|
||||
"step2Title": "Spracovať",
|
||||
"step2": "Kliknutím na tlačidlo spracovať začnete",
|
||||
"step3Title": "Stiahnuť",
|
||||
"step3": "Okamžite si uložte svoj spracovaný súbor"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Súvisiace PDF nástroje"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Spracováva sa..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Upozornenie",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Náhľad dokumentu",
|
||||
"downloadAsPdf": "Stiahnuť ako PDF",
|
||||
"close": "Zavrieť"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Nastavenia",
|
||||
"shortcuts": "Klávesové skratky",
|
||||
"preferences": "Predvoľby",
|
||||
"displayPreferences": "Predvoľby zobrazenia",
|
||||
"searchShortcuts": "Hľadať skratky...",
|
||||
"shortcutsInfo": "Stlačením a podržaním klávesov nastavíte skratku. Zmeny sa automaticky ukladajú.",
|
||||
"shortcutsWarning": "⚠️ Vyhnite sa bežným skratkám prehliadača (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N atď.), pretože nemusia fungovať spoľahlivo.",
|
||||
"import": "Importovať",
|
||||
"export": "Exportovať",
|
||||
"resetToDefaults": "Obnoviť predvolené",
|
||||
"fullWidthMode": "Režim celej šírky",
|
||||
"fullWidthDescription": "Použiť celú šírku obrazovky pre všetky nástroje namiesto vycentrovaného rozloženia",
|
||||
"compactMode": "Kompaktný režim",
|
||||
"compactModeDescription": "Zobraziť nástroje ako kompaktný zoznam namiesto kariet",
|
||||
"advancedSettings": "Pokročilé nastavenia",
|
||||
"advancedSettingsDescription": "Konfigurácia externých modulov pre spracovanie (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Nastavenia sa automaticky ukladajú",
|
||||
"clickToSet": "Kliknutím nastavte",
|
||||
"pressKeys": "Stlačte klávesy...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Skratka sa už používa",
|
||||
"assignedTo": "je už priradená k:",
|
||||
"chooseDifferent": "Zvoľte si prosím inú skratku.",
|
||||
"reserved": "Upozornenie na vyhradenú skratku",
|
||||
"commonlyUsed": "sa bežne používa pre:",
|
||||
"unreliable": "Táto skratka nemusí fungovať spoľahlivo alebo môže spôsobovať konflikt s prehliadačom/systémom.",
|
||||
"useAnyway": "Chcete ju napriek tomu použiť?",
|
||||
"resetTitle": "Obnoviť skratky",
|
||||
"resetMessage": "Naozaj chcete obnoviť všetky skratky na predvolené?<br><br>Túto akciu nie je možné vrátiť späť.",
|
||||
"importSuccessTitle": "Import úspešný",
|
||||
"importSuccessMessage": "Skratky boli úspešne importované!",
|
||||
"importFailTitle": "Import zlyhal",
|
||||
"importFailMessage": "Nepodarilo sa importovať skratky. Neplatný formát súboru."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Varovanie",
|
||||
"cancel": "Zrušiť",
|
||||
"proceed": "Pokračovať"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Vaše dáta nikdy neopustia vaše zariadenie",
|
||||
"weKeep": "Udržujeme",
|
||||
"yourInfoSafe": "vaše informácie v bezpečí",
|
||||
"byFollowingStandards": "dodržiavaním globálnych bezpečnostných štandardov.",
|
||||
"processingLocal": "Všetko spracovanie prebieha lokálne priamo na vašom zariadení.",
|
||||
"gdpr": {
|
||||
"title": "Súlad s GDPR",
|
||||
"description": "Chráni osobné údaje a súkromie jednotlivcov v rámci Európskej únie."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "Súlad s CCPA",
|
||||
"description": "Dáva obyvateľom Kalifornie práva týkajúce sa toho, ako sa zhromažďujú, používajú a zdieľajú ich osobné informácie."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "Súlad s HIPAA",
|
||||
"description": "Stanovuje ochranné opatrenia pre nakladanie s citlivými zdravotnými informáciami v systéme zdravotnej starostlivosti v USA."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Často kladené",
|
||||
"questions": "otázky",
|
||||
"sectionTitle": "Často kladené otázky",
|
||||
"isFree": {
|
||||
"question": "Je BentoPDF naozaj zadarmo?",
|
||||
"answer": "Áno, absolútne. Všetky nástroje na BentoPDF sú na 100% bezplatné, bez obmedzení súborov, bez registrácie a bez vodotlače. Veríme, že každý si zaslúži prístup k jednoduchým a výkonným nástrojom PDF bez poplatkov."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Sú moje súbory v bezpečí? Kde sa spracúvajú?",
|
||||
"answer": "Vaše súbory sú v maximálnom bezpečí, pretože nikdy neopustia váš počítač. Všetko spracovanie prebieha priamo vo vašom webovom prehliadači (na strane klienta). Nikdy nenahrávame vaše súbory na server, takže máte úplné súkromie a kontrolu nad svojimi dokumentmi."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Funguje to na Macu, vo Windows a na mobilných zariadeniach?",
|
||||
"answer": "Áno! Keďže BentoPDF beží výlučne vo vašom prehliadači, funguje na akomkoľvek operačnom systéme s moderným webovým prehliadačom vrátane Windows, macOS, Linux, iOS a Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "Je BentoPDF v súlade s GDPR?",
|
||||
"answer": "Áno. BentoPDF je plne v súlade s GDPR. Keďže všetko spracovanie súborov prebieha lokálne vo vašom prehliadači a my vaše súbory nikdy nezhromažďujeme ani neprenášame na žiadny server, nemáme prístup k vašim údajom. To zaisťuje, že máte svoje dokumenty vždy pod kontrolou."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Ukladáte alebo sledujete nejaké moje súbory?",
|
||||
"answer": "Nie. Vaše súbory nikdy neukladáme, nesledujeme ani nezaznamenávame. Všetko, čo v BentoPDF urobíte, sa odohráva v pamäti vášho prehliadača a po zatvorení stránky zmizne. Nedochádza k žiadnemu nahrávaniu, logovaniu ani sa nevyužívajú žiadne servery."
|
||||
},
|
||||
"different": {
|
||||
"question": "V čom je BentoPDF odlišné od iných PDF nástrojov?",
|
||||
"answer": "Väčšina PDF nástrojov nahráva vaše súbory na spracovanie na server. BentoPDF to nerobí. Na spracovanie vašich súborov priamo vo vašom prehliadači používame bezpečné moderné webové technológie. Znamená to vyšší výkon, silnejšiu ochranu súkromia a úplný pokoj v duši."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "Ako ma spracovanie založené na prehliadači chráni?",
|
||||
"answer": "Tým, že BentoPDF beží výlučne vnútri vášho prehliadača, zabezpečuje, že vaše súbory nikdy neopustia vaše zariadenie. Tým sa eliminujú riziká napadnutia serverov, úniku dát alebo neoprávneného prístupu. Vaše súbory zostávajú vždy vaše."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Používate súbory cookie alebo analytiku na moje sledovanie?",
|
||||
"answer": "Nie. BentoPDF vás vôbec nesleduje. Nepoužívame cookies, analytiku ani sledovacie skripty – ani na živej webovej stránke bentopdf.com. Nikdy nevieme, kto ste ani čo s nástrojmi robíte."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Čo hovoria",
|
||||
"users": "naši",
|
||||
"say": "používatelia"
|
||||
},
|
||||
"support": {
|
||||
"title": "Páči sa vám moja práca?",
|
||||
"description": "BentoPDF je srdcový projekt, vytvorený s cieľom poskytnúť bezplatnú, súkromnú a výkonnú sadu PDF nástrojov pre každého. Ak sa vám zdá užitočný, zvážte podporu jeho vývoja. Každá káva pomôže!",
|
||||
"buyMeCoffee": "Kúpte mi kávu"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF. Všetky práva vyhradené.",
|
||||
"version": "Verzia",
|
||||
"company": "Spoločnosť",
|
||||
"aboutUs": "O nás",
|
||||
"faqLink": "Časté otázky",
|
||||
"contactUs": "Kontaktujte nás",
|
||||
"legal": "Právne informácie",
|
||||
"termsAndConditions": "Obchodné podmienky",
|
||||
"privacyPolicy": "Zásady ochrany osobných údajov",
|
||||
"followUs": "Sledujte nás"
|
||||
},
|
||||
"merge": {
|
||||
"title": "Zlúčiť PDF",
|
||||
"description": "Spojte celé súbory alebo vyberte konkrétne strany na zlúčenie do nového dokumentu.",
|
||||
"fileMode": "Režim súborov",
|
||||
"pageMode": "Režim strán",
|
||||
"howItWorks": "Ako to funguje:",
|
||||
"fileModeInstructions": [
|
||||
"Kliknite a potiahnite ikonu pre zmenu poradia súborov.",
|
||||
"V poli \"Strany\" pri každom súbore môžete zadať rozsahy (napr. \"1-3, 5\") na zlúčenie iba týchto strán.",
|
||||
"Ak chcete zahrnúť všetky strany z daného súboru, nechajte pole \"Strany\" prázdne."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Všetky strany z vašich nahratých PDF dokumentov sú zobrazené nižšie.",
|
||||
"Jednoducho potiahnite a pusťte jednotlivé miniatúry strán a vytvorte presné poradie pre váš nový súbor."
|
||||
],
|
||||
"mergePdfs": "Zlúčiť PDF"
|
||||
},
|
||||
"common": {
|
||||
"page": "Strana",
|
||||
"pages": "Strany",
|
||||
"of": "z",
|
||||
"download": "Stiahnuť",
|
||||
"cancel": "Zrušiť",
|
||||
"save": "Uložiť",
|
||||
"delete": "Zmazať",
|
||||
"edit": "Upraviť",
|
||||
"add": "Pridať",
|
||||
"remove": "Odstrániť",
|
||||
"loading": "Načítava sa...",
|
||||
"loadingPageCount": "Načítavajú sa strany...",
|
||||
"error": "Chyba",
|
||||
"success": "Úspech",
|
||||
"file": "Súbor",
|
||||
"files": "Súbory",
|
||||
"close": "Zavrieť",
|
||||
"convert": "Konvertovať",
|
||||
"unknownError": "Neznáma chyba"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "Veríme, že PDF nástroje by mali byť",
|
||||
"subtitle": "rýchle, súkromné a bezplatné.",
|
||||
"noCompromises": "Bez kompromisov."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Naša misia",
|
||||
"description": "Poskytnúť najkomplexnejšiu sadu PDF nástrojov, ktorá rešpektuje vaše súkromie a nikdy nepožaduje platbu. Veríme, že základné nástroje pre prácu s dokumentmi by mali byť dostupné pre každého, všade a bez bariér."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Naša hlavná filozofia",
|
||||
"title": "Súkromie na prvom mieste. Vždy.",
|
||||
"description": "V dobe, kedy sú dáta komoditou, k tomu pristupujeme inak. Všetko spracovanie nástrojov BentoPDF prebieha lokálne vo vašom prehliadači. To znamená, že vaše súbory sa nikdy nedotknú našich serverov, nikdy nevidíme vaše dokumenty a nesledujeme, čo robíte. Vaše dokumenty zostávajú úplne a jednoznačne súkromné. Nie je to len funkcia, je to náš základ."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Prečo",
|
||||
"speed": {
|
||||
"title": "Zostavené pre rýchlosť",
|
||||
"description": "Žiadne čakanie na nahrávanie alebo sťahovanie zo servera. Spracovaním súborov priamo vo vašom prehliadači pomocou moderných webových technológií ako WebAssembly, ponúkame bezkonkurenčnú rýchlosť pre všetky naše nástroje."
|
||||
},
|
||||
"free": {
|
||||
"title": "Úplne zadarmo",
|
||||
"description": "Žiadne skúšobné verzie, žiadne predplatné, žiadne skryté poplatky a žiadne „prémiové“ funkcie držané ako rukojemníci. Veríme, že výkonné PDF nástroje by mali byť verejnou službou, nie centrom zisku."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "Nevyžaduje sa žiadny účet",
|
||||
"description": "Začnite používať akýkoľvek nástroj okamžite. Nepotrebujeme váš e-mail, heslo ani žiadne osobné údaje. Váš pracovný postup by mal byť plynulý a anonymný."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Duch open-source",
|
||||
"description": "Vytvorené s ohľadom na transparentnosť. Využívame neuveriteľné open-source knižnice ako PDF-lib a PDF.js, a veríme v úsilie poháňané komunitou s cieľom sprístupniť výkonné nástroje všetkým."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Ste pripravení začať?",
|
||||
"description": "Pridajte sa k tisícom používateľov, ktorí dôverujú BentoPDF vo svojich každodenných potrebách s dokumentmi. Vyskúšajte, aký rozdiel môže urobiť súkromie a výkon.",
|
||||
"button": "Preskúmať všetky nástroje"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Kontaktujte nás",
|
||||
"subtitle": "Radi o vás budeme počuť. Či už máte otázku, spätnú väzbu, alebo návrh na novú funkciu, neváhajte sa ozvať.",
|
||||
"email": "Môžete nás kontaktovať priamo e-mailom na:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Licencovanie pre",
|
||||
"subtitle": "Vyberte si licenciu, ktorá vyhovuje vašim potrebám."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "Nahrať PDF",
|
||||
"upload": "Nahrať",
|
||||
"addBlankPage": "Pridať prázdnu stranu",
|
||||
"edit": "Upraviť:",
|
||||
"undo": "Späť",
|
||||
"redo": "Znova",
|
||||
"reset": "Obnoviť",
|
||||
"selection": "Výber:",
|
||||
"selectAll": "Vybrať všetko",
|
||||
"deselectAll": "Zrušiť výber",
|
||||
"rotate": "Otočiť:",
|
||||
"rotateLeft": "Doľava",
|
||||
"rotateRight": "Doprava",
|
||||
"transform": "Transformovať:",
|
||||
"duplicate": "Duplikovať",
|
||||
"split": "Rozdeliť",
|
||||
"clear": "Vyčistiť:",
|
||||
"delete": "Zmazať",
|
||||
"download": "Stiahnuť:",
|
||||
"downloadSelected": "Stiahnuť vybrané",
|
||||
"exportPdf": "Exportovať PDF",
|
||||
"uploadPdfFiles": "Vyberte PDF alebo obrázky",
|
||||
"dragAndDrop": "Potiahnite a pusťte PDF alebo obrázky sem, alebo kliknite pre výber",
|
||||
"selectFiles": "Vybrať súbory",
|
||||
"dropToAdd": "Pusťte PDF alebo obrázky pre pridanie",
|
||||
"convertingImages": "Konvertujú sa obrázky do PDF...",
|
||||
"failedToConvertImages": "Nepodarilo sa konvertovať obrázky do PDF.",
|
||||
"renderingPages": "Vykresľujú sa strany...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplikovať túto stranu",
|
||||
"deletePage": "Zmazať túto stranu",
|
||||
"insertPdf": "Vložiť PDF za túto stranu",
|
||||
"toggleSplit": "Prepnúť rozdelenie za touto stranou"
|
||||
},
|
||||
"pleaseWait": "Prosím čakajte",
|
||||
"pagesRendering": "Strany sa stále vykresľujú. Prosím čakajte...",
|
||||
"noPagesSelected": "Žiadne vybrané strany",
|
||||
"selectOnePage": "Prosím vyberte aspoň jednu stranu na stiahnutie.",
|
||||
"noPages": "Žiadne strany",
|
||||
"noPagesToExport": "Nie sú tu žiadne strany na export.",
|
||||
"renderingTitle": "Vykresľujú sa náhľady strán",
|
||||
"errorRendering": "Nepodarilo sa vykresliť miniatúry strán",
|
||||
"error": "Chyba",
|
||||
"failedToLoad": "Nepodarilo sa načítať"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "Nástroje PDF",
|
||||
"subtitle": "Vyberte si nástroj pre začiatok"
|
||||
},
|
||||
"disabledTool": {
|
||||
"title": "Nástroj nedostupný",
|
||||
"heading": "Tento nástroj bol zakázaný",
|
||||
"message": "Tento nástroj nie je vo vašom nasadení dostupný. Pre viac informácií kontaktujte svojho administrátora.",
|
||||
"backHome": "Späť domov"
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,8 +5,11 @@
|
||||
"contact": "Kontakt",
|
||||
"licensing": "Licensiering",
|
||||
"allTools": "Alla verktyg",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Öppna huvudmenyn",
|
||||
"language": "Språk"
|
||||
"language": "Språk",
|
||||
"searchLanguage": "Sök språk…",
|
||||
"noLanguagesFound": "Inga språk hittades"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Gillar du BentoPDF? Hjälp oss att hålla det gratis och öppen källkod!",
|
||||
@@ -97,8 +100,11 @@
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Så här fungerar det",
|
||||
"step1Title": "Ladda upp fil",
|
||||
"step1": "Klicka eller dra och släpp din fil för att börja",
|
||||
"step2Title": "Bearbeta",
|
||||
"step2": "Klicka på bearbeta-knappen för att starta",
|
||||
"step3Title": "Ladda ner",
|
||||
"step3": "Spara din bearbetade fil direkt"
|
||||
},
|
||||
"relatedTools": {
|
||||
@@ -129,6 +135,10 @@
|
||||
"resetToDefaults": "Återställ till standard",
|
||||
"fullWidthMode": "Fullbreddsläge",
|
||||
"fullWidthDescription": "Använd hela skärmbredden för alla verktyg istället för en centrerad behållare",
|
||||
"compactMode": "Kompakt läge",
|
||||
"compactModeDescription": "Visa verktyg som kompakt lista istället för kort",
|
||||
"advancedSettings": "Avancerade inställningar",
|
||||
"advancedSettingsDescription": "Konfigurera externa behandlingsmoduler (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Inställningar sparas automatiskt",
|
||||
"clickToSet": "Klicka för att ställa in",
|
||||
"pressKeys": "Tryck tangenter...",
|
||||
@@ -206,7 +216,7 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Använder ni cookies eller analys för att spåra mig?",
|
||||
"answer": "Vi bryr oss om din integritet. BentoPDF spårar inte personlig information. Vi använder Simple Analytics enbart för att se anonyma besöksantal. Det betyder att vi kan se hur många användare som besöker vår site, men vi vet aldrig vem du är. Simple Analytics är fullt GDPR-kompatibelt och respekterar din integritet."
|
||||
"answer": "Nej. BentoPDF spårar dig inte alls. Vi använder inga cookies, ingen analys och inga spårningsskript – inte ens på den publika webbplatsen bentopdf.com. Vi vet aldrig vem du är eller vad du gör med verktygen."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
@@ -260,11 +270,14 @@
|
||||
"add": "Lägg till",
|
||||
"remove": "Ta bort",
|
||||
"loading": "Laddar...",
|
||||
"loadingPageCount": "Laddar sidor...",
|
||||
"error": "Fel",
|
||||
"success": "Klart",
|
||||
"file": "Fil",
|
||||
"files": "Filer",
|
||||
"close": "Stäng"
|
||||
"close": "Stäng",
|
||||
"convert": "Konvertera",
|
||||
"unknownError": "Okänt fel"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -337,9 +350,12 @@
|
||||
"download": "Ladda ner:",
|
||||
"downloadSelected": "Ladda ner markerade",
|
||||
"exportPdf": "Exportera PDF",
|
||||
"uploadPdfFiles": "Välj PDF-filer",
|
||||
"dragAndDrop": "Dra och släpp PDF-filer här, eller klicka för att välja",
|
||||
"uploadPdfFiles": "Välj PDF- eller bildfiler",
|
||||
"dragAndDrop": "Dra och släpp PDF- eller bildfiler här, eller klicka för att välja",
|
||||
"selectFiles": "Välj filer",
|
||||
"dropToAdd": "Släpp PDF- eller bildfiler för att lägga till",
|
||||
"convertingImages": "Konverterar bilder till PDF...",
|
||||
"failedToConvertImages": "Kunde inte konvertera bilder till PDF.",
|
||||
"renderingPages": "Renderar sidor...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplicera denna sida",
|
||||
|
||||
+537
-25
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Konvertera från PDF",
|
||||
"organizeManage": "Organisera & Hantera",
|
||||
"optimizeRepair": "Optimera & Reparera",
|
||||
"securePdf": "Säkra PDF"
|
||||
"securePdf": "Säkra PDF",
|
||||
"input": "Inmatning",
|
||||
"output": "Utdata"
|
||||
},
|
||||
"convertToPdf": "Konvertera till PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF multiverktyg",
|
||||
"subtitle": "Sammanfoga, dela, organisera, ta bort, rotera, lägg till tomma sidor, extrahera och duplicera i ett enhetligt gränssnitt."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Sammanfoga PDF",
|
||||
"subtitle": "Kombinera flera PDF-filer till en fil. Bevarar bokmärken."
|
||||
"subtitle": "Kombinera flera PDF-filer till en fil. Bevarar bokmärken.",
|
||||
"retainPageLabels": "Behåll de ursprungliga sidetiketterna från varje fil",
|
||||
"retainPageLabelsHint": "Av (standard): den sammanslagna PDF:en använder naturlig sidnumrering 1–N. På: varje fils ursprungliga sidetiketter bevaras (kan ge duplicerade etiketter)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Dela PDF",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "PDF-redigerare",
|
||||
"subtitle": "Kommentera, markera, redigera, kommentera, lägg till former/bilder, sök och visa PDF:er."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "Redigera PDF-text",
|
||||
"subtitle": "Klicka på valfritt stycke och redigera det på plats med direkt textomflöde, typsnitt och stilar.",
|
||||
"saved": "PDF-filen sparades! ({{size}} KB)",
|
||||
"failedToLoad": "Det gick inte att läsa in PDF-textredigeraren.",
|
||||
"howToUpload": "Ladda upp PDF",
|
||||
"howToClick": "Klicka på ett stycke",
|
||||
"howToRestyle": "Ge allt ny stil",
|
||||
"relatedPdfEditor": "Kommentera och markera PDF-filer",
|
||||
"relatedSignPdf": "Rita, skriv eller ladda upp en signatur",
|
||||
"relatedWatermark": "Stämpla text eller bilder",
|
||||
"relatedStamps": "Placera stämplar på sidor",
|
||||
"relatedCompress": "Minska filstorleken",
|
||||
"relatedOrganizeName": "Organisera PDF",
|
||||
"relatedOrganize": "Ordna om och hantera sidor",
|
||||
"open": "Öppna",
|
||||
"export": "Exportera",
|
||||
"filterAll": "Alla",
|
||||
"filterText": "Text",
|
||||
"filterImages": "Bilder",
|
||||
"filterShapes": "Former",
|
||||
"addText": "Lägg till text",
|
||||
"langAuto": "Automatisk",
|
||||
"change": "Ändra",
|
||||
"ignore": "Ignorera",
|
||||
"next": "Nästa",
|
||||
"replace": "Ersätt",
|
||||
"replaceAll": "Ersätt alla",
|
||||
"emptyState": "Öppna en PDF för att redigera text, bilder och former.",
|
||||
"choosePdf": "Välj en PDF…",
|
||||
"font": "Teckensnitt",
|
||||
"systemFonts": "Systemteckensnitt",
|
||||
"color": "Färg",
|
||||
"alignment": "Justering",
|
||||
"style": "Stil",
|
||||
"lists": "Listor",
|
||||
"outline": "Kontur",
|
||||
"spacing": "Avstånd",
|
||||
"direction": "Riktning",
|
||||
"dirAuto": "Automatisk",
|
||||
"pathStroke": "Bankontur",
|
||||
"tipBackToUpload": "Tillbaka till uppladdning",
|
||||
"tipOpenAnotherPdf": "Öppna en annan PDF",
|
||||
"tipExportS": "Exportera (⌘S)",
|
||||
"tipUndoZ": "Ångra (⌘Z)",
|
||||
"tipRedoZ": "Gör om (⇧⌘Z)",
|
||||
"tipFileDetails": "Filinformation",
|
||||
"tipEditExistingContent": "Redigera befintligt innehåll",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "Vad verktyget Redigera påverkar – begränsa omfattningen på fulla sidor",
|
||||
"tipClickThePageToAddATextBox": "Klicka på sidan för att lägga till en textruta",
|
||||
"tipSpellCheckLanguage": "Språk för stavningskontroll",
|
||||
"tipFindAndReplace": "Sök och ersätt",
|
||||
"tipAddAnImage": "Lägg till en bild",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Kopiera sidans text i läsordning",
|
||||
"tipCheckTheSpellingOfThisPage": "Kontrollera stavningen på den här sidan",
|
||||
"tipShowOrHideTheFormatPanel": "Visa eller dölj formatpanelen",
|
||||
"phReplaceWith": "Ersätt med",
|
||||
"tipAddToYourDictionary": "Lägg till i ordlistan",
|
||||
"tipClose": "Stäng",
|
||||
"phFind": "Sök",
|
||||
"tipPreviousMatch": "Föregående träff",
|
||||
"tipNextMatch": "Nästa träff",
|
||||
"tipRotateLeft90": "Rotera 90° åt vänster",
|
||||
"tipRotateRight90": "Rotera 90° åt höger",
|
||||
"tipFlipHorizontal": "Vänd vågrätt",
|
||||
"tipFlipVertical": "Vänd lodrätt",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Ersätt den här bilden och behåll placeringen",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Alternativtext för tillgänglighet (taggade PDF-filer)",
|
||||
"tipBringToFront": "Flytta längst fram",
|
||||
"tipSendToBack": "Flytta längst bak",
|
||||
"tipDuplicate": "Duplicera",
|
||||
"tipDelete": "Ta bort",
|
||||
"tipAlignLeftEdges": "Justera vänsterkanter",
|
||||
"tipAlignHorizontalCenters": "Centrera vågrätt",
|
||||
"tipAlignRightEdges": "Justera högerkanter",
|
||||
"tipAlignTops": "Justera överkanter",
|
||||
"tipAlignVerticalCenters": "Centrera lodrätt",
|
||||
"tipAlignBottoms": "Justera underkanter",
|
||||
"tipDistributeHorizontally": "Fördela vågrätt",
|
||||
"tipDistributeVertically": "Fördela lodrätt",
|
||||
"tipFontSize": "Teckenstorlek",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Lista teckensnitt som är installerade på den här enheten (Chromium)",
|
||||
"tipCustomTextColor": "Anpassad textfärg",
|
||||
"tipAlignLeft": "Vänsterjustera",
|
||||
"tipAlignCenter": "Centrera",
|
||||
"tipAlignRight": "Högerjustera",
|
||||
"tipJustify": "Marginaljustera",
|
||||
"tipBold": "Fet",
|
||||
"tipItalic": "Kursiv",
|
||||
"tipUnderline": "Understruken",
|
||||
"tipStrikethrough": "Genomstruken",
|
||||
"tipSuperscript": "Upphöjd",
|
||||
"tipSubscript": "Nedsänkt",
|
||||
"tipToggleBulletedItem": "Växla punktlista",
|
||||
"tipToggleNumberedItem": "Växla numrerad punkt",
|
||||
"tipNumberedListMarkerStyle": "Markörstil för numrerade listor",
|
||||
"tipDecreaseListIndentTab": "Minska indrag (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Öka indrag (Tab)",
|
||||
"tipTextOutlineColor": "Färg på textkontur",
|
||||
"tipOutlineWidth0None": "Konturbredd (0 = ingen)",
|
||||
"tipFromContent": "Från innehåll",
|
||||
"tipLeftToRight": "Vänster till höger",
|
||||
"tipRightToLeft": "Höger till vänster",
|
||||
"tipStrokeColor": "Linjefärg",
|
||||
"tipStrokeWidth": "Linjebredd",
|
||||
"tipZoomPresets": "Zoomförinställningar",
|
||||
"tipZoomOut": "Zooma ut",
|
||||
"tipZoomIn": "Zooma in",
|
||||
"tipFitPage": "Anpassa sida",
|
||||
"tipPreviousPage": "Föregående sida",
|
||||
"tipTypeAPageNumberAndPressEnter": "Skriv ett sidnummer och tryck på Retur",
|
||||
"tipNextPage": "Nästa sida",
|
||||
"tipDocumentProperties": "Dokumentegenskaper",
|
||||
"tipHideBar": "Dölj fältet",
|
||||
"tipShowBar": "Visa fältet"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG till PDF",
|
||||
"subtitle": "Skapa en PDF från JPG, JPEG och JPEG2000 (JP2/JPX)-bilder."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplicera & organisera",
|
||||
"subtitle": "Duplicera, ordna om och ta bort sidor."
|
||||
"subtitle": "Duplicera, ordna om och ta bort sidor.",
|
||||
"saveChanges": "Spara ändringar"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Ta bort sidor",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Redigera bokmärken",
|
||||
"subtitle": "Lägg till, redigera, importera, ta bort och extrahera PDF-bokmärken."
|
||||
"subtitle": "Lägg till, redigera, importera, ta bort och extrahera PDF-bokmärken.",
|
||||
"autoExtractExisting": "Auto-extrahera befintliga bokmärken",
|
||||
"importSectionTitle": "Eller importera bokmärken",
|
||||
"csvFormat": "CSV-format: titel,sida,nivå",
|
||||
"jsonFormat": "JSON-format",
|
||||
"uploadCsvAction": "Klicka för att ladda upp CSV",
|
||||
"uploadJsonAction": "Klicka för att ladda upp JSON",
|
||||
"orDragHere": "eller dra hit"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Innehållsförteckning",
|
||||
"subtitle": "Generera en innehållsförteckningssida från PDF-bokmärken."
|
||||
"subtitle": "Generera en innehållsförteckningssida från PDF-bokmärken.",
|
||||
"titleLabel": "Innehållsförteckningstitel",
|
||||
"fontSize": "Teckenstorlek",
|
||||
"fontFamily": "Teckenfamilj",
|
||||
"addBookmark": "Lägg till bokmärke för innehållsförteckningssida",
|
||||
"generateButton": "Generera innehållsförteckning",
|
||||
"selectPdfFirst": "Välj först en PDF-fil.",
|
||||
"statusReadingFileMainThread": "Läser fil (Huvudtråd)...",
|
||||
"statusGenerating": "Genererar innehållsförteckning...",
|
||||
"errorReadingFileWithMessage": "Fel vid läsning av fil: {{message}}",
|
||||
"successGeneratedDownloadStarted": "Innehållsförteckning genererad! Nedladdning startad.",
|
||||
"workerErrorWithMessage": "Fel: {{message}}",
|
||||
"workerErrorOccurred": "Worker-fel uppstod. Kontrollera konsolen för detaljer."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Sidnummer",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Lägg till bildstämplar på din PDF med kommentarsverktygsfältet.",
|
||||
"usernameLabel": "Stämpelanvändarnamn",
|
||||
"usernamePlaceholder": "Ange ditt namn (för stämplar)",
|
||||
"usernameHint": "Detta namn kommer att visas på stämplar du skapar."
|
||||
"usernameHint": "Detta namn kommer att visas på stämplar du skapar.",
|
||||
"saveButton": "Spara stämplad PDF"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Ta bort anteckningar",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF-formulärifyllare",
|
||||
"subtitle": "Fyll i formulär direkt i webbläsaren. Stöder även XFA-formulär."
|
||||
"subtitle": "Fyll i formulär direkt i webbläsaren. Stöder även XFA-formulär.",
|
||||
"uploadHint": "Ladda upp en PDF med formulärfält. Fyll i dem direkt i visaren nedan, klicka sedan på knappen för att spara och ladda ner det ifyllda formuläret. Stöder även XFA-formulär.",
|
||||
"xfaNoteTitle": "Anmärkning om XFA-formulär:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) är ett äldre format som bara stöds av vissa PDF-visare som BentoPDF och Firefox. Om du öppnar en XFA-PDF i annan programvara och ser tomma sidor eller inga formulärfält betyder det att visaren inte stöder XFA. För att visa och fylla i XFA-formulär korrekt, använd Firefox eller BentoPDFs formulärifyllare."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Skapa PDF-formulär",
|
||||
"subtitle": "Skapa ifyllbara PDF-formulär med dra-och-släpp textfält."
|
||||
"subtitle": "Skapa ifyllbara PDF-formulär med dra-och-släpp textfält.",
|
||||
"orSeparator": "ELLER",
|
||||
"createBlankPdf": "Skapa tom PDF"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Ta bort tomma sidor",
|
||||
@@ -255,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Text till PDF",
|
||||
"subtitle": "Konvertera en vanlig textfil till en PDF."
|
||||
"subtitle": "Konvertera en vanlig textfil till en PDF.",
|
||||
"uploadFiles": "Ladda upp filer",
|
||||
"typeText": "Skriv text",
|
||||
"acceptedFormats": "Textfiler (.txt)",
|
||||
"fontFamily": "Teckenfamilj",
|
||||
"fontSize": "Teckenstorlek",
|
||||
"textColor": "Textfärg",
|
||||
"pageSize": "Sidstorlek",
|
||||
"rtlAutoDetectNote": "RTL-språk (arabiska, urdu, persiska osv.) detekteras automatiskt och textriktningen justeras.",
|
||||
"createButton": "Skapa PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON till PDF",
|
||||
"subtitle": "Konvertera JSON-filer till PDF-format."
|
||||
"subtitle": "Konvertera JSON-filer till PDF-format.",
|
||||
"noteLabel": "Obs:",
|
||||
"noteText": "Endast JSON-filer skapade av PDF-till-JSON-konverteringsverktyget stöds. Vanliga JSON-filer från andra verktyg fungerar inte.",
|
||||
"acceptedFormats": "Flera JSON-filer",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Välj minst 1 JSON-fil",
|
||||
"selectedReady": "{{count}} fil(er) valda. Redo att konvertera!",
|
||||
"readingFiles": "Läser filer (Huvudtråd)...",
|
||||
"converting": "Konverterar JSON-filer till PDF...",
|
||||
"readError": "Fel vid läsning av filer: {{message}}",
|
||||
"creatingZip": "Skapar ZIP-fil...",
|
||||
"success": "JSON-filer konverterade till PDF! ZIP-nedladdning startad.",
|
||||
"zipError": "Fel vid skapande av ZIP: {{message}}",
|
||||
"workerError": "Worker-fel: {{message}}",
|
||||
"getStarted": "Välj JSON-filer för att komma igång"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF till JPG",
|
||||
"subtitle": "Konvertera varje PDF-sida till en JPG-bild."
|
||||
"subtitle": "Konvertera varje PDF-sida till en JPG-bild.",
|
||||
"imageQuality": "Bildkvalitet",
|
||||
"imageQualityExplanation": "Högre kvalitet = större filstorlek",
|
||||
"alert": {
|
||||
"invalidFile": "Ogiltig fil",
|
||||
"invalidFileExplanation": "Ladda upp en PDF-fil.",
|
||||
"noFile": "Ingen fil",
|
||||
"noFileExplanation": "Ladda upp en PDF-fil först.",
|
||||
"conversionSuccess": "PDF konverterad till JPG!",
|
||||
"conversionError": "Kunde inte konvertera PDF till JPG. Filen kan vara skadad."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Konverterar till JPG..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF till PNG",
|
||||
"subtitle": "Konvertera varje PDF-sida till en PNG-bild."
|
||||
"subtitle": "Konvertera varje PDF-sida till en PNG-bild.",
|
||||
"imageScale": "Bildskala",
|
||||
"imageScaleExplanation": "Större skala = bättre kvalitet men större fil",
|
||||
"alert": {
|
||||
"invalidFile": "Ogiltig fil",
|
||||
"invalidFileExplanation": "Ladda upp en PDF-fil.",
|
||||
"noFile": "Ingen fil",
|
||||
"noFileExplanation": "Ladda upp en PDF-fil först.",
|
||||
"conversionSuccess": "PDF konverterad till PNG!",
|
||||
"conversionError": "Kunde inte konvertera PDF till PNG. Filen kan vara skadad."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Konverterar till PNG..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF till WebP",
|
||||
"subtitle": "Konvertera varje PDF-sida till en WebP-bild."
|
||||
"subtitle": "Konvertera varje PDF-sida till en WebP-bild.",
|
||||
"imageQuality": "Bildkvalitet",
|
||||
"imageQualityExplanation": "Högre kvalitet = större filstorlek",
|
||||
"alert": {
|
||||
"invalidFile": "Ogiltig fil",
|
||||
"invalidFileExplanation": "Ladda upp en PDF-fil.",
|
||||
"noFile": "Ingen fil",
|
||||
"noFileExplanation": "Ladda upp en PDF-fil först.",
|
||||
"conversionSuccess": "PDF konverterad till WebP!",
|
||||
"conversionError": "Kunde inte konvertera PDF till WebP. Filen kan vara skadad."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Konverterar till WebP..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF till BMP",
|
||||
"subtitle": "Konvertera varje PDF-sida till en BMP-bild."
|
||||
"subtitle": "Konvertera varje PDF-sida till en BMP-bild.",
|
||||
"alert": {
|
||||
"invalidFile": "Ogiltig fil",
|
||||
"invalidFileExplanation": "Ladda upp en PDF-fil.",
|
||||
"noFile": "Ingen fil",
|
||||
"noFileExplanation": "Ladda upp en PDF-fil först.",
|
||||
"conversionSuccess": "PDF konverterad till BMP!",
|
||||
"conversionError": "Kunde inte konvertera PDF till BMP. Filen kan vara skadad."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Konverterar till BMP..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF till TIFF",
|
||||
@@ -287,7 +508,15 @@
|
||||
"colorMode": "Färgläge",
|
||||
"multiPage": "Spara som flersidig TIFF (en fil)",
|
||||
"loadingVips": "Laddar bildprocessor...",
|
||||
"converting": "Konverterar till TIFF..."
|
||||
"converting": "Konverterar till TIFF...",
|
||||
"alert": {
|
||||
"invalidFile": "Ogiltig fil",
|
||||
"invalidFileExplanation": "Ladda upp en PDF-fil.",
|
||||
"noFile": "Ingen fil",
|
||||
"noFileExplanation": "Ladda upp en PDF-fil först.",
|
||||
"conversionSuccess": "PDF konverterad till TIFF!",
|
||||
"conversionError": "Kunde inte konvertera PDF till TIFF. Filen kan vara skadad."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF till CBZ",
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF till JSON",
|
||||
"subtitle": "Konvertera PDF-filer till JSON-format."
|
||||
"subtitle": "Konvertera PDF-filer till JSON-format.",
|
||||
"convertButton": "Konvertera till JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Välj minst 1 PDF-fil",
|
||||
"selectedReady": "{{count}} fil(er) valda. Redo att konvertera!",
|
||||
"checkingEncrypted": "Kontrollerar krypterade PDF:er...",
|
||||
"readingFiles": "Läser filer (Huvudtråd)...",
|
||||
"converting": "Konverterar PDF:er till JSON...",
|
||||
"readError": "Fel vid läsning av filer: {{message}}",
|
||||
"creatingZip": "Skapar ZIP-fil...",
|
||||
"success": "PDF:er konverterade till JSON! ZIP-nedladdning startad.",
|
||||
"zipError": "Fel vid skapande av ZIP: {{message}}",
|
||||
"workerError": "Worker-fel: {{message}}",
|
||||
"getStarted": "Välj PDF-filer för att komma igång"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Gör en PDF sökbar och kopiaerbar."
|
||||
"subtitle": "Gör en PDF sökbar och kopiaerbar.",
|
||||
"languagesInDocument": "Språk i dokumentet",
|
||||
"searchLanguagesPlaceholder": "Sök språk...",
|
||||
"selectedLabel": "Valda:",
|
||||
"none": "Inga",
|
||||
"advancedSettingsSummary": "Avancerade inställningar (rekommenderas för att förbättra noggrannhet)",
|
||||
"resolutionLabel": "Upplösning",
|
||||
"resolutionStandard": "Standard (192 DPI)",
|
||||
"resolutionHigh": "Hög (288 DPI)",
|
||||
"resolutionUltra": "Ultra (384 DPI)",
|
||||
"binarizeLabel": "Binarisera bild (förbättrar kontrast för rena skanningar)",
|
||||
"embedFullFontsLabel": "Bädda in fullständiga teckensnitt (större fil, bättre kompatibilitet)",
|
||||
"whitelistPresetLabel": "Tecken-whitelist förinställning",
|
||||
"whitelistNone": "Inga (alla tecken)",
|
||||
"whitelistAlphanumeric": "Alfanumeriskt + Grundläggande skiljetecken",
|
||||
"whitelistNumbersCurrency": "Siffror + Valutasymboler",
|
||||
"whitelistLettersOnly": "Endast bokstäver (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Endast siffror (0-9)",
|
||||
"whitelistInvoice": "Faktura/Kvitto (siffror, $, ., -, /)",
|
||||
"whitelistForms": "Formulär (alfanumeriskt + vanliga symboler)",
|
||||
"whitelistCustom": "Anpassad...",
|
||||
"whitelistHelp": "Endast dessa tecken kommer att kännas igen. Lämna tomt för alla tecken.",
|
||||
"whitelistInputLabel": "Tecken-whitelist (valfritt)",
|
||||
"whitelistInputPlaceholder": "t.ex. abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "Starta OCR",
|
||||
"progressInitializing": "Initialiserar...",
|
||||
"resultsTitle": "OCR slutförd",
|
||||
"resultsDescription": "Din sökbara PDF är klar. Du kan också kopiera eller ladda ner den extraherade texten nedan.",
|
||||
"copyToClipboard": "Kopiera till urklipp",
|
||||
"downloadTxt": "Ladda ner som .txt",
|
||||
"downloadSearchablePdf": "Ladda ner sökbar PDF",
|
||||
"statusPrefix": "Status: {{status}}",
|
||||
"availabilityInvalidConfig": "Denna distribution exponerar inga giltiga OCR-språk. Bygg om den med VITE_TESSERACT_AVAILABLE_LANGUAGES inställt på giltiga Tesseract-koder.",
|
||||
"availabilityBundles": "Denna distribution inkluderar OCR för: {{languages}}.",
|
||||
"noLanguagesAvailable": "Inga OCR-språk tillgängliga i denna distribution.",
|
||||
"noLanguagesTitle": "Inga språk valda",
|
||||
"noLanguagesMessage": "Välj minst ett språk för OCR.",
|
||||
"noFileTitle": "Ingen fil",
|
||||
"noFileMessage": "Ladda upp en PDF-fil först.",
|
||||
"languageUnavailableTitle": "OCR-språk inte tillgängligt",
|
||||
"ocrErrorTitle": "OCR-fel",
|
||||
"ocrErrorMessage": "Ett fel uppstod under OCR-processen. Workern kan ha misslyckats med att laddas. Försök igen.",
|
||||
"howItWorksTitle": "Så fungerar det:",
|
||||
"extractTextLabel": "Extrahera text:",
|
||||
"extractTextDescription": "Använder Tesseract OCR för att känna igen text från skannade bilder eller PDF:er.",
|
||||
"searchableOutputLabel": "Sökbar utdata:",
|
||||
"searchableOutputDescription": "Skapar en ny PDF med ett osynligt textlager, vilket gör ditt dokument fullt sökbart samtidigt som det ursprungliga utseendet bevaras.",
|
||||
"characterFilteringLabel": "Teckenfiltrering:",
|
||||
"characterFilteringDescription": "Använd whitelists för att filtrera bort oönskade tecken och förbättra noggrannheten för specifika dokumenttyper (fakturor, formulär osv.).",
|
||||
"multiLanguageSupportLabel": "Flerspråksstöd:",
|
||||
"multiLanguageSupportDescription": "Välj flera språk för dokument som innehåller blandat språkinnehåll."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Alternera & blanda sidor",
|
||||
"subtitle": "Sammanfoga PDF:er genom att alternera sidor från varje PDF. Bevarar bokmärken."
|
||||
"subtitle": "Sammanfoga PDF:er genom att alternera sidor från varje PDF. Bevarar bokmärken.",
|
||||
"retainPageLabels": "Behåll de ursprungliga sidetiketterna från varje fil",
|
||||
"retainPageLabelsHint": "Av (standard): den sammanslagna PDF:en använder naturlig sidnumrering 1–N. På: varje fils ursprungliga sidetiketter bevaras (kan ge duplicerade etiketter)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Sortera dubbelsidig skanning",
|
||||
"subtitle": "Ordna om en PDF som skannats i två block (först alla framsidor, sedan alla baksidor) till rätt fram-/baksidesordning.",
|
||||
"totalPagesLabel": "Totalt antal sidor:",
|
||||
"splitAfterPageLabel": "Dela efter sida",
|
||||
"splitAfterPagePlaceholder": "t.ex. 50",
|
||||
"backBlockOrderLabel": "Ordning för baksidesblocket",
|
||||
"backBlockReverseOption": "Vänd baksidesblocket (vanligt när bunten vänds)",
|
||||
"backBlockKeepOption": "Behåll baksidesblocket som det är",
|
||||
"autoSplitButton": "Hitta delning automatiskt (hälften)",
|
||||
"exportGroupedLabel": "Exportera grupperade filer efter originaldokumentets längd",
|
||||
"pagesPerDocumentLabel": "Sidor per originaldokument",
|
||||
"groupedHelp": "Om detta är aktiverat blir resultatet en ZIP-fil med en PDF per grupperat dokument.",
|
||||
"collateButton": "Sortera PDF",
|
||||
"invalidFileTitle": "Ogiltig fil",
|
||||
"invalidFileMessage": "Välj en PDF-fil.",
|
||||
"loadingPdf": "Läser in PDF...",
|
||||
"loadErrorMessage": "Det gick inte att läsa in PDF-filen.",
|
||||
"fileMeta": "{{size}} - {{count}} sidor",
|
||||
"oddPageWarning": "Udda antal sidor ({{count}}). En dubbelsidig skanning bör ha ett jämnt antal sidor; en sida kan saknas eller vara för mycket.",
|
||||
"previewSummary": "Framsidesblock: {{frontCount}} sidor, baksidesblock: {{backCount}} sidor. Resultat: {{outputCount}} sidor i fram-/baksidesordning.",
|
||||
"previewMismatchWarning": "Fram- och baksidesblocken är olika långa ({{frontCount}} framsidor mot {{backCount}} baksidor). De {{extraCount}} överblivna sidorna i det längre blocket läggs till oparade i slutet.",
|
||||
"missingFileTitle": "Fil saknas",
|
||||
"missingFileMessage": "Ladda upp en PDF med minst 2 sidor innan du bearbetar den.",
|
||||
"invalidSplitTitle": "Ogiltig delningspunkt",
|
||||
"invalidSplitMessage": "Delningspunkten måste ligga mellan sida 1 och sida {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "Ojämna block",
|
||||
"unevenConfirmMessage": "Framsidesblocket har {{frontCount}} sidor och baksidesblocket {{backCount}} sidor.\nDet betyder oftast att en sida skannats två gånger eller saknas.\n\nDe {{extraCount}} oparade sidorna läggs till i slutet.\n\nVill du fortsätta ändå?",
|
||||
"invalidGroupTitle": "Ogiltig gruppstorlek",
|
||||
"invalidGroupMessage": "Ange ett giltigt antal sidor per originaldokument.",
|
||||
"collatingLoader": "Sorterar dubbelsidig skanning...",
|
||||
"successMessage": "Den sorterade PDF-filen har skapats.",
|
||||
"successGroupedMessage": "Sorteringen är klar. {{fileCount}} grupperade filer har skapats.",
|
||||
"processErrorMessage": "Det gick inte att sortera PDF-filen.",
|
||||
"howItWorksStep1Title": "Ladda upp skanningen",
|
||||
"howItWorksStep1": "Släpp den enda PDF-filen som innehåller alla framsidor följt av alla baksidor.",
|
||||
"howItWorksStep2Title": "Ange delningspunkten",
|
||||
"howItWorksStep2": "Markera var framsidesblocket slutar och välj om baksidesblocket behöver vändas.",
|
||||
"howItWorksStep3Title": "Sortera och ladda ner",
|
||||
"howItWorksStep3": "Du får en PDF med varvade sidor, eller en ZIP-fil med en separat fil per originaldokument.",
|
||||
"faqOddPagesQuestion": "Vad händer om min skanning har ett udda antal sidor?",
|
||||
"faqOddPagesAnswer": "En dubbelsidig skanning bör ha ett jämnt antal sidor. Om den inte har det har en sida troligen skannats två gånger eller hoppats över. Verktyget varnar dig före bearbetningen, och oparade sidor läggs till i slutet så att inget går förlorat.",
|
||||
"faqBackOrderQuestion": "Varför skulle jag behålla baksidesblocket som det är?",
|
||||
"faqBackOrderAnswer": "Det beror på hur bunten matades in vid den andra körningen. Att vända hela bunten ger baksidor i omvänd ordning, vilket är standardinställningen. Om din skanner returnerade dem i samma ordning som framsidorna väljer du att behålla blocket som det är."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Lägg till bilagor",
|
||||
@@ -660,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF till text",
|
||||
"subtitle": "Extrahera text från PDF-filer och spara som vanlig text (.txt). Stöder flera filer.",
|
||||
"note": "Detta verktyg fungerar ENDAST med digitalt skapade PDF:er. För scannade dokument eller bildbaserade PDF:er, använd vårt OCR PDF-verktyg istället.",
|
||||
"convertButton": "Extrahera text"
|
||||
"noteLabel": "Obs:",
|
||||
"noteText": "Detta verktyg fungerar ENDAST med digitalt skapade PDF:er. För skannade dokument eller bildbaserade PDF:er, använd istället vårt OCR PDF-verktyg.",
|
||||
"convertButton": "Extrahera text",
|
||||
"note": "Detta verktyg fungerar ENDAST med digitalt skapade PDF:er. För scannade dokument eller bildbaserade PDF:er, använd vårt OCR PDF-verktyg istället."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Digital signatur PDF",
|
||||
"pageTitle": "Digital signatur PDF - Lägg till kryptografisk signatur | BentoPDF",
|
||||
"subtitle": "Lägg till en kryptografisk digital signatur på din PDF med X.509-certifikat. Stöder PKCS#12 (.pfx, .p12) och PEM-format. Din privata nyckel lämnar aldrig din webbläsare.",
|
||||
"certificateSection": "Certifikat",
|
||||
"uploadCert": "Ladda upp certifikat (.pfx, .p12)",
|
||||
"uploadCert": "Ladda upp certifikat (.pfx, .p12, .pem)",
|
||||
"certPassword": "Certifikatlösenord",
|
||||
"privateKeyPassword": "Lösenord för privat nyckel",
|
||||
"certPasswordPlaceholder": "Ange certifikatlösenord",
|
||||
"certInfo": "Certifikatinformation",
|
||||
"certSubject": "Ämne",
|
||||
@@ -682,8 +1025,71 @@
|
||||
"locationPlaceholder": "t.ex. Stockholm, Sverige",
|
||||
"contactInfo": "Kontaktinformation",
|
||||
"contactPlaceholder": "t.ex. [email protected]",
|
||||
"visibleSignature": "Synlig signatur",
|
||||
"visibleSignatureDescription": "När aktiverat visas en synlig signaturruta på PDF:en. Du kan ladda upp en bild/logotyp eller lägga till text. Om varken eller anges visas undertecknarens namn från certifikatet automatiskt.",
|
||||
"signatureImage": "Signaturbild/logotyp (valfritt)",
|
||||
"uploadSignatureImage": "Ladda upp bild (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Signaturförhandsgranskning",
|
||||
"remove": "Ta bort",
|
||||
"page": "Sida",
|
||||
"firstPage": "Första sidan",
|
||||
"lastPage": "Sista sidan",
|
||||
"allPages": "Alla sidor",
|
||||
"customPage": "Anpassad sida #",
|
||||
"pageNumber": "Sida #",
|
||||
"xPosition": "X-position (vänster)",
|
||||
"yPosition": "Y-position (topp)",
|
||||
"width": "Bredd",
|
||||
"height": "Höjd",
|
||||
"addTextOverlay": "Lägg till textöverlägg",
|
||||
"text": "Text",
|
||||
"textPlaceholder": "t.ex. Digitalt signerad av John Doe",
|
||||
"textColor": "Textfärg",
|
||||
"fontSize": "Teckenstorlek",
|
||||
"invalidImageTitle": "Ogiltig bild",
|
||||
"invalidImageMessage": "Välj en PNG-, JPG- eller WebP-bild.",
|
||||
"invalidFileTitle": "Ogiltig fil",
|
||||
"invalidFileMessage": "Välj en PDF-fil.",
|
||||
"invalidCertificateTitle": "Ogiltigt certifikat",
|
||||
"invalidCertificateMessage": "Välj en .pfx-, .p12- eller .pem-certifikatfil.",
|
||||
"certificateLoaded": "Certifikat laddat",
|
||||
"certificateUnlocked": "Certifikat upplåst",
|
||||
"failedParsePem": "Kunde inte tolka PEM-fil",
|
||||
"enterPasswordToUnlock": "Ange lösenord för att låsa upp",
|
||||
"invalidPasswordOrCertificate": "Ogiltigt lösenord eller certifikat",
|
||||
"incorrectPassword": "Felaktigt lösenord",
|
||||
"failedParseCertificate": "Kunde inte tolka certifikat",
|
||||
"missingDataTitle": "Saknad data",
|
||||
"missingDataMessage": "Ladda upp både en PDF och ett giltigt certifikat.",
|
||||
"applyingSignature": "Applicerar digital signatur...",
|
||||
"signingFailedTitle": "Signering misslyckades",
|
||||
"chainFetchFailed": "Kunde inte hämta certifikatkedjan. Det kan bero på nätverksproblem eller att certifikatproxyn inte är tillgänglig. Kontrollera din internetanslutning och försök igen. Kontakta supporten om problemet kvarstår.",
|
||||
"failedToSignPdf": "Kunde inte signera PDF: {{message}}",
|
||||
"defaultSignatureText": "Digitalt signerad av {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} sidor",
|
||||
"howToStep1Title": "Ladda upp PDF",
|
||||
"howToStep1Text": "Välj PDF-dokumentet du vill signera",
|
||||
"howToStep2Title": "Ladda upp certifikat",
|
||||
"howToStep2Text": "Tillhandahåll din .pfx- eller .p12-certifikatfil och lösenord",
|
||||
"howToStep3Title": "Signera och ladda ner",
|
||||
"howToStep3Text": "Applicera den digitala signaturen och ladda ner din signerade PDF",
|
||||
"relatedEncryptDesc": "Skydda din PDF med lösenord",
|
||||
"relatedDecryptDesc": "Ta bort PDF-lösenord",
|
||||
"relatedFlattenDesc": "Gör anteckningar permanenta",
|
||||
"relatedSanitizeDesc": "Ta bort dold data",
|
||||
"relatedPermissionsDesc": "Ange PDF-behörigheter",
|
||||
"faqWhatIsQuestion": "Vad är en digital signatur?",
|
||||
"faqWhatIsAnswer": "En digital signatur är en kryptografisk mekanism som verifierar äktheten och integriteten hos ett dokument. Till skillnad från en ritad signatur använder den publik nyckel-kryptografi (X.509-certifikat) för att bevisa undertecknarens identitet.",
|
||||
"faqFormatsQuestion": "Vilka certifikatformat stöds?",
|
||||
"faqFormatsAnswer": "Vi stöder PKCS#12-formatcertifikat (.pfx, .p12) som innehåller både ditt certifikat och din privata nyckel i en enda krypterad fil. Dessa utfärdas vanligtvis av certifikatmyndigheter.",
|
||||
"faqPrivateKeyQuestion": "Är min privata nyckel säker?",
|
||||
"faqPrivateKeyAnswer": "Ja! All bearbetning sker helt i din webbläsare. Ditt certifikat, din privata nyckel och dina PDF-filer lämnar aldrig din enhet eller laddas upp till någon server.",
|
||||
"faqValidReadersQuestion": "Kommer signaturen vara giltig i PDF-läsare?",
|
||||
"faqValidReadersAnswer": "Ja, verktyget skapar standard PKCS#7 detached signaturer som känns igen av alla större PDF-läsare. För full validering, använd ett certifikat från en betrodd certifikatmyndighet.",
|
||||
"applySignature": "Applicera digital signatur",
|
||||
"successMessage": "PDF signerad framgångsrikt! Signaturen kan verifieras i vilken PDF-läsare som helst."
|
||||
"successMessage": "PDF signerad framgångsrikt! Signaturen kan verifieras i vilken PDF-läsare som helst.",
|
||||
"internetRequiredTitle": "Internetanslutning krävs",
|
||||
"internetRequiredDescription": "Signering kan behöva hämta certifikatkedjeinformation från din certifikatutfärdares server för att validera signaturen."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validera PDF-signatur",
|
||||
@@ -697,7 +1103,7 @@
|
||||
"tsaSectionTitle": "Tidsstämpelserver (TSA)",
|
||||
"selectTsa": "Välj en TSA-server",
|
||||
"applyTimestamp": "Tillämpa tidsstämpel",
|
||||
"successMessage": "PDF tidsstämplad! Tidsstämpeln kan verifieras i Adobe Acrobat och andra PDF-läsare."
|
||||
"successMessage": "PDF tidsstämplad! Tidsstämpeln kan verifieras i vilken PDF-läsare som helst."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "E-post till PDF",
|
||||
@@ -772,7 +1178,113 @@
|
||||
"templateLoaded": "Mallen \"{{name}}\" laddad.",
|
||||
"failedLoadTemplate": "Det gick inte att ladda mallen.",
|
||||
"noSettings": "Inga konfigurerbara inställningar för denna nod.",
|
||||
"advancedSettings": "Avancerade inställningar"
|
||||
"advancedSettings": "Avancerade inställningar",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "PDF-inmatning",
|
||||
"description": "Ladda upp en eller flera PDF-filer"
|
||||
},
|
||||
"download": {
|
||||
"name": "Ladda ner",
|
||||
"description": "Ladda ner automatiskt som PDF eller ZIP"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "Inga PDFer anslutna till noden {{node}}",
|
||||
"noPdfInputs": "Inga PDFer i indata",
|
||||
"expectedPdfInput": "PDF-indata förväntades",
|
||||
"failedToRenderPage": "Kunde inte rendera sidan {{page}}",
|
||||
"failedToGetCanvasContext": "Kunde inte hämta canvas-kontext för sidan {{page}}",
|
||||
"failedToRenderPageToImage": "Kunde inte rendera sidan {{page}} till bild",
|
||||
"noPagesProcessed": "Inga sidor bearbetades",
|
||||
"cpdfNotConfigured": "CoherentPDF är inte konfigurerat. Konfigurera det under Avancerade inställningar.",
|
||||
"workerError": "Worker-fel: {{message}}",
|
||||
"alternateMergeWorkerError": "Fel i växelvis sammanslagnings-worker: {{message}}",
|
||||
"noPdfFilesUploaded": "Inga PDF-filer uppladdade i PDF Input-noden",
|
||||
"failedToLoadFile": "Kunde inte läsa in \"{{file}}\" — filen kan vara skadad",
|
||||
"noImagesUploaded": "Inga bilder uppladdade i Image Input-noden",
|
||||
"noWordDocsUploaded": "Inga dokument uppladdade i Word Input-noden",
|
||||
"noExcelUploaded": "Inga kalkylblad uppladdade i Excel Input-noden",
|
||||
"noPowerPointUploaded": "Inga presentationer uppladdade i PowerPoint Input-noden",
|
||||
"noCbzUploaded": "Inga serietidningsarkiv uppladdade i CBZ Input-noden",
|
||||
"noEmailUploaded": "Inga e-postfiler uppladdade i Email Input-noden",
|
||||
"noEpubUploaded": "Inga EPUB-filer uppladdade i EPUB Input-noden",
|
||||
"noFb2Uploaded": "Inga FB2-filer uppladdade i FB2 Input-noden",
|
||||
"noJsonUploaded": "Inga JSON-filer uppladdade i JSON Input-noden",
|
||||
"noMarkdownUploaded": "Inga Markdown-filer uppladdade i Markdown Input-noden",
|
||||
"noMobiUploaded": "Inga MOBI-filer uppladdade i MOBI Input-noden",
|
||||
"noOdgUploaded": "Inga ODG-filer uppladdade i ODG Input-noden",
|
||||
"noPagesUploaded": "Inga Pages-filer uppladdade i Pages Input-noden",
|
||||
"noPubUploaded": "Inga PUB-filer uppladdade i PUB Input-noden",
|
||||
"noSvgUploaded": "Inga SVG-filer uppladdade i SVG Input-noden",
|
||||
"noTextUploaded": "Inga textfiler uppladdade i Text Input-noden",
|
||||
"noVsdUploaded": "Inga Visio-filer uppladdade i VSD Input-noden",
|
||||
"noWpdUploaded": "Inga WPD-filer uppladdade i WPD Input-noden",
|
||||
"noWpsUploaded": "Inga WPS-filer uppladdade i WPS Input-noden",
|
||||
"noXmlUploaded": "Inga XML-filer uppladdade i XML Input-noden",
|
||||
"noXpsUploaded": "Inga XPS-filer uppladdade i XPS Input-noden",
|
||||
"alternateMergeNeedsTwo": "Växelvis sammanslagning kräver minst två PDFer anslutna till indata",
|
||||
"cropMarginsExceed": "Beskärningsmarginaler överskrider sidans dimensioner. Minska värdena.",
|
||||
"digitalSignNoCertificate": "Inget certifikat laddat i Digital signatur-noden",
|
||||
"encryptUserPasswordRequired": "Användarlösenord krävs för kryptering",
|
||||
"extractImagesNoneFound": "Inga bilder hittades i de anslutna PDFerna",
|
||||
"invertColorsFailedReadImage": "Kunde inte läsa bilddata",
|
||||
"overlayRequiresPdf": "Överläggsnoden kräver en överläggs-PDF-indata.",
|
||||
"pdfToCsvNoTables": "Inga tabeller hittades i PDFen",
|
||||
"pdfToXlsxNoTables": "Inga tabeller hittades i {{file}}",
|
||||
"posterizeFailedTileCanvas": "Kunde inte hämta canvas-kontext för plattan",
|
||||
"redactNoText": "Maskering: Ingen text angiven att maskera",
|
||||
"removeBlankPagesAllBlank": "Alla sidor är tomma",
|
||||
"svgFailedToConvert": "Kunde inte konvertera SVG",
|
||||
"svgFailedToLoad": "Kunde inte läsa in SVG",
|
||||
"timestampFailed": "Tidsstämpling via TSA {{tsa}} misslyckades: {{message}}",
|
||||
"noOutputNodes": "Inga utdata-noder hittades. Lägg till en Download-nod för att slutföra ditt arbetsflöde.",
|
||||
"circularDependency": "Cirkulärt beroende upptäckt i arbetsflödet. Ta bort eventuella loopar mellan noder.",
|
||||
"encryptOrdering": "Kryptera-noden matar in i \"{{target}}\" som kan misslyckas på krypterade data. Flytta Kryptera till strax före utdata-noden.",
|
||||
"invalidWorkflowFile": "Ogiltig arbetsflödesfil: nod- eller anslutnings-array saknas.",
|
||||
"storageQuotaExceeded": "Kunde inte spara arbetsflöde: lagringskvot överskriden. Försök att ta bort gamla mallar.",
|
||||
"failedToImport": "Kunde inte importera arbetsflöde: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Avancerade funktionsinställningar",
|
||||
"description": "Konfigurera externa behandlingsmoduler för att aktivera avancerade PDF-funktioner. Dessa moduler är valfria och licensierade separat.",
|
||||
"status": {
|
||||
"testing": "Testar...",
|
||||
"customOverride": "Anpassad åsidosättning",
|
||||
"preConfigured": "Förkonfigurerad",
|
||||
"notConfigured": "Inte konfigurerad"
|
||||
},
|
||||
"preconfiguredTitle": "Förkonfigurerad och redo att använda.",
|
||||
"preconfiguredDescription": "Avancerade behandlingsmoduler laddas automatiskt från CDN. Du kan åsidosätta URL:erna nedan om du behöver använda en anpassad källa (t.ex. för air-gapped eller självhostade distributioner).",
|
||||
"usingDefault": "Använder standard: {{url}}",
|
||||
"pymupdfSubtitle": "Dokumentbehandlingsmotor",
|
||||
"pymupdfFeatures": "Aktiverar: PDF till text, Markdown, SVG, DOCX, Excel • Extrahera bilder/tabeller • Formatkonvertering",
|
||||
"testButton": "Testa",
|
||||
"recommendedLabel": "Rekommenderat:",
|
||||
"copyTitle": "Kopiera till urklipp",
|
||||
"ghostscriptSubtitle": "PDF/A-konverteringsmotor",
|
||||
"ghostscriptFeatures": "Aktiverar: PDF/A-1b, PDF/A-2b, PDF/A-3b konvertering • Teckensnitt till kontur",
|
||||
"cpdfSubtitle": "Bokmärks- och metadatamotor",
|
||||
"cpdfFeatures": "Aktiverar: Dela med bokmärken • Redigera bokmärken • PDF-metadata",
|
||||
"saveConfiguration": "Spara konfiguration",
|
||||
"savingConfiguration": "Sparar konfiguration...",
|
||||
"savedTitle": "Sparad",
|
||||
"savedMessage": "Konfiguration sparad!",
|
||||
"errorTitle": "Fel",
|
||||
"failedSave": "Kunde inte spara konfiguration: {{message}}",
|
||||
"emptyUrlTitle": "Tom URL",
|
||||
"emptyUrlMessage": "Ange en URL att testa.",
|
||||
"testSuccessTitle": "Lyckades",
|
||||
"connectionSuccess": "Anslutning till {{package}} lyckades!",
|
||||
"connectionFailedTitle": "Anslutning misslyckades",
|
||||
"connectionFailedMessage": "Kunde inte ansluta till URL.",
|
||||
"resetDefaults": "Återställ till standard",
|
||||
"resetTitle": "Återställ",
|
||||
"resetWithDefaults": "Anpassade åsidosättningar rensade. Förkonfigurerade standardvärden är aktiva.",
|
||||
"resetNoDefaults": "Alla konfigurationer och cachade moduler har rensats.",
|
||||
"licenseTitle": "Licensmeddelande:",
|
||||
"licenseDescription": "De externa modulerna (PyMuPDF, Ghostscript, CoherentPDF) är licensierade under AGPL-3.0 eller liknande copyleft-licenser. Genom att konfigurera och använda dessa moduler godkänner du deras respektive licensvillkor. BentoPDF är kompatibel med alla Ghostscript WASM- och PyMuPDF WASM-implementationer som följer det förväntade gränssnittet."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "PDF-överlägg",
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
"contact": "İletişim",
|
||||
"licensing": "Lisanslama",
|
||||
"allTools": "Tüm Araçlar",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Ana menüyü aç",
|
||||
"language": "Dil"
|
||||
"language": "Dil",
|
||||
"searchLanguage": "Dil ara…",
|
||||
"noLanguagesFound": "Dil bulunamadı"
|
||||
},
|
||||
"donation": {
|
||||
"message": "BentoPDF'i seviyor musunuz? Ücretsiz ve açık kaynaklı kalmasına yardımcı olun!",
|
||||
@@ -95,6 +98,18 @@
|
||||
"webpImages": "WebP Görüntüler"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Nasıl Çalışır",
|
||||
"step1Title": "Dosya Yükle",
|
||||
"step1": "Dosyanızı tıklayın veya sürükleyin",
|
||||
"step2Title": "İşle",
|
||||
"step2": "İşlem düğmesine tıklayın",
|
||||
"step3Title": "İndir",
|
||||
"step3": "İşlenmiş dosyanızı anında kaydedin"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "İlgili PDF Araçları"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "İşleniyor..."
|
||||
},
|
||||
@@ -120,6 +135,10 @@
|
||||
"resetToDefaults": "Varsayılanlara Sıfırla",
|
||||
"fullWidthMode": "Tam Genişlik Modu",
|
||||
"fullWidthDescription": "Ortalanmış bir konteyner yerine tüm ekran genişliğini kullan",
|
||||
"compactMode": "Kompakt Mod",
|
||||
"compactModeDescription": "Araçları kart yerine kompakt liste olarak göster",
|
||||
"advancedSettings": "Gelişmiş Ayarlar",
|
||||
"advancedSettingsDescription": "Harici işleme modüllerini yapılandır (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Ayarlar otomatik olarak kaydedildi",
|
||||
"clickToSet": "Ayarlamak için tıklayın",
|
||||
"pressKeys": "Tuşlara basın...",
|
||||
@@ -166,6 +185,7 @@
|
||||
"faq": {
|
||||
"title": "Sıkça Sorulan",
|
||||
"questions": "Sorular",
|
||||
"sectionTitle": "Sıkça Sorulan Sorular",
|
||||
"isFree": {
|
||||
"question": "BentoPDF gerçekten ücretsiz mi?",
|
||||
"answer": "Evet, kesinlikle. BentoPDF'deki tüm araçlar %100 ücretsizdir, dosya sınırı yoktur, kayıt gerekmez ve filigran eklenmez. Herkesin ödeme duvarı olmadan basit, güçlü PDF araçlarına erişimi hak ettiğine inanıyoruz."
|
||||
@@ -196,9 +216,8 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Beni takip etmek için çerez veya analiz kullanıyor musunuz?",
|
||||
"answer": "Gizliliğinizi önemsiyoruz. BentoPDF kişisel bilgileri takip etmez. Sadece anonim ziyaretçi sayılarını görmek için Simple Analytics kullanıyoruz. Bu, sitemizi kaç kişinin ziyaret ettiğini görebileceğimiz, ancak kim olduğunuzu asla bilemeyeceğimiz anlamına gelir. Simple Analytics tamamen GDPR uyumludur ve gizliliğinize saygı gösterir."
|
||||
},
|
||||
"sectionTitle": "Sıkça Sorulan Sorular"
|
||||
"answer": "Hayır. BentoPDF sizi hiçbir şekilde takip etmez. Çerez, analiz aracı veya izleme betiği kullanmıyoruz; canlı web sitesi bentopdf.com'da bile. Kim olduğunuzu veya araçlarla ne yaptığınızı asla bilmeyiz."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Kullanıcılarımız",
|
||||
@@ -251,11 +270,14 @@
|
||||
"add": "Ekle",
|
||||
"remove": "Kaldır",
|
||||
"loading": "Yükleniyor...",
|
||||
"loadingPageCount": "Sayfalar yükleniyor...",
|
||||
"error": "Hata",
|
||||
"success": "Başarılı",
|
||||
"file": "Dosya",
|
||||
"files": "Dosya",
|
||||
"close": "Kapat"
|
||||
"close": "Kapat",
|
||||
"convert": "Dönüştür",
|
||||
"unknownError": "Bilinmeyen hata"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -328,9 +350,12 @@
|
||||
"download": "İndir:",
|
||||
"downloadSelected": "Seçilenleri İndir",
|
||||
"exportPdf": "PDF Olarak Dışa Aktar",
|
||||
"uploadPdfFiles": "PDF Dosyalarını Seçin",
|
||||
"dragAndDrop": "PDF dosyalarını buraya sürükleyip bırakın veya seçmek için tıklayın",
|
||||
"uploadPdfFiles": "PDF veya Görsel Dosyalarını Seçin",
|
||||
"dragAndDrop": "PDF veya görsel dosyalarını buraya sürükleyip bırakın veya seçmek için tıklayın",
|
||||
"selectFiles": "Dosya Seç",
|
||||
"dropToAdd": "Eklemek için PDF veya görsel dosyalarını bırakın",
|
||||
"convertingImages": "Görseller PDF'e dönüştürülüyor...",
|
||||
"failedToConvertImages": "Görseller PDF'e dönüştürülemedi.",
|
||||
"renderingPages": "Sayfalar oluşturuluyor...",
|
||||
"actions": {
|
||||
"duplicatePage": "Bu sayfayı çoğalt",
|
||||
@@ -349,15 +374,6 @@
|
||||
"error": "Hata",
|
||||
"failedToLoad": "Yüklenemedi"
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Nasıl Çalışır",
|
||||
"step1": "Dosyanızı tıklayın veya sürükleyin",
|
||||
"step2": "İşlem düğmesine tıklayın",
|
||||
"step3": "İşlenmiş dosyanızı anında kaydedin"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "İlgili PDF Araçları"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "PDF Araçları",
|
||||
"subtitle": "Başlamak için bir araç seçin"
|
||||
|
||||
+555
-43
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "PDF'den Dönüştür",
|
||||
"organizeManage": "Düzenle & Yönet",
|
||||
"optimizeRepair": "Optimize Et & Onar",
|
||||
"securePdf": "PDF Güvenliği"
|
||||
"securePdf": "PDF Güvenliği",
|
||||
"input": "Giriş",
|
||||
"output": "Çıkış"
|
||||
},
|
||||
"convertToPdf": "PDF'ye Dönüştür",
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF Çoklu Araç",
|
||||
"subtitle": "Birleştir, Böl, Düzenle, Sil, Döndür, Boş Sayfa Ekle, Çıkar ve Çoğalt işlemlerini tek bir arayüzde yapın."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "PDF Birleştir",
|
||||
"subtitle": "Birden fazla PDF'yi tek bir dosyada birleştirin. Yer imlerini korur."
|
||||
"subtitle": "Birden fazla PDF'yi tek bir dosyada birleştirin. Yer imlerini korur.",
|
||||
"retainPageLabels": "Her dosyanın orijinal sayfa etiketlerini koru",
|
||||
"retainPageLabelsHint": "Kapalı (varsayılan): birleştirilmiş PDF doğal 1–N sayfa numaralandırmasını kullanır. Açık: her dosyanın orijinal sayfa etiketleri korunur (yinelenen etiketler oluşabilir)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "PDF Böl",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "PDF Düzenleyici",
|
||||
"subtitle": "Açıklama ekleyin, vurgulayın, düzenleyin, yorum yapın, şekil/resim ekleyin, arama yapın ve PDF'leri görüntüleyin."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "PDF Metni Düzenle",
|
||||
"subtitle": "Herhangi bir paragrafa tıklayın ve canlı yeniden akış, yazı tipleri ve stillerle yerinde düzenleyin.",
|
||||
"saved": "PDF başarıyla kaydedildi! ({{size}} KB)",
|
||||
"failedToLoad": "PDF Metin Düzenleyici yüklenemedi.",
|
||||
"howToUpload": "PDF yükle",
|
||||
"howToClick": "Bir paragrafa tıklayın",
|
||||
"howToRestyle": "Her şeyi yeniden biçimlendirin",
|
||||
"relatedPdfEditor": "PDF'lere not ekleyin ve işaretleyin",
|
||||
"relatedSignPdf": "İmza çizin, yazın veya yükleyin",
|
||||
"relatedWatermark": "Metin veya görsel damgalayın",
|
||||
"relatedStamps": "Sayfalara damga yerleştirin",
|
||||
"relatedCompress": "Dosya boyutunu küçültün",
|
||||
"relatedOrganizeName": "PDF düzenle",
|
||||
"relatedOrganize": "Sayfaları yeniden sıralayın ve yönetin",
|
||||
"open": "Aç",
|
||||
"export": "Dışa aktar",
|
||||
"filterAll": "Tümü",
|
||||
"filterText": "Metin",
|
||||
"filterImages": "Görseller",
|
||||
"filterShapes": "Şekiller",
|
||||
"addText": "Metin ekle",
|
||||
"langAuto": "Otomatik",
|
||||
"change": "Değiştir",
|
||||
"ignore": "Yoksay",
|
||||
"next": "İleri",
|
||||
"replace": "Değiştir",
|
||||
"replaceAll": "Tümünü değiştir",
|
||||
"emptyState": "Metnini, görsellerini ve şekillerini düzenlemek için bir PDF açın.",
|
||||
"choosePdf": "Bir PDF seçin…",
|
||||
"font": "Yazı tipi",
|
||||
"systemFonts": "Sistem yazı tipleri",
|
||||
"color": "Renk",
|
||||
"alignment": "Hizalama",
|
||||
"style": "Stil",
|
||||
"lists": "Listeler",
|
||||
"outline": "Dış çizgi",
|
||||
"spacing": "Aralık",
|
||||
"direction": "Yön",
|
||||
"dirAuto": "Otomatik",
|
||||
"pathStroke": "Yol konturu",
|
||||
"tipBackToUpload": "Yüklemeye dön",
|
||||
"tipOpenAnotherPdf": "Başka bir PDF aç",
|
||||
"tipExportS": "Dışa aktar (⌘S)",
|
||||
"tipUndoZ": "Geri al (⌘Z)",
|
||||
"tipRedoZ": "Yinele (⇧⌘Z)",
|
||||
"tipFileDetails": "Dosya ayrıntıları",
|
||||
"tipEditExistingContent": "Mevcut içeriği düzenle",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "Düzenle aracının etkilediği öğeler — yoğun sayfalarda kapsamı daraltın",
|
||||
"tipClickThePageToAddATextBox": "Metin kutusu eklemek için sayfaya tıklayın",
|
||||
"tipSpellCheckLanguage": "Yazım denetimi dili",
|
||||
"tipFindAndReplace": "Bul ve değiştir",
|
||||
"tipAddAnImage": "Görsel ekle",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Bu sayfanın metnini okuma sırasına göre kopyala",
|
||||
"tipCheckTheSpellingOfThisPage": "Bu sayfanın yazımını denetle",
|
||||
"tipShowOrHideTheFormatPanel": "Biçim panelini göster veya gizle",
|
||||
"phReplaceWith": "Şununla değiştir",
|
||||
"tipAddToYourDictionary": "Sözlüğe ekle",
|
||||
"tipClose": "Kapat",
|
||||
"phFind": "Bul",
|
||||
"tipPreviousMatch": "Önceki eşleşme",
|
||||
"tipNextMatch": "Sonraki eşleşme",
|
||||
"tipRotateLeft90": "90° sola döndür",
|
||||
"tipRotateRight90": "90° sağa döndür",
|
||||
"tipFlipHorizontal": "Yatay çevir",
|
||||
"tipFlipVertical": "Dikey çevir",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Bu görseli, yerleşimini koruyarak değiştir",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Erişilebilirlik için alternatif metin (etiketli PDF'ler)",
|
||||
"tipBringToFront": "Öne getir",
|
||||
"tipSendToBack": "Arkaya gönder",
|
||||
"tipDuplicate": "Çoğalt",
|
||||
"tipDelete": "Sil",
|
||||
"tipAlignLeftEdges": "Sol kenarları hizala",
|
||||
"tipAlignHorizontalCenters": "Yatayda ortala",
|
||||
"tipAlignRightEdges": "Sağ kenarları hizala",
|
||||
"tipAlignTops": "Üst kenarları hizala",
|
||||
"tipAlignVerticalCenters": "Dikeyde ortala",
|
||||
"tipAlignBottoms": "Alt kenarları hizala",
|
||||
"tipDistributeHorizontally": "Yatayda dağıt",
|
||||
"tipDistributeVertically": "Dikeyde dağıt",
|
||||
"tipFontSize": "Yazı tipi boyutu",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Bu cihazda yüklü yazı tiplerini listele (Chromium)",
|
||||
"tipCustomTextColor": "Özel metin rengi",
|
||||
"tipAlignLeft": "Sola hizala",
|
||||
"tipAlignCenter": "Ortala",
|
||||
"tipAlignRight": "Sağa hizala",
|
||||
"tipJustify": "İki yana yasla",
|
||||
"tipBold": "Kalın",
|
||||
"tipItalic": "İtalik",
|
||||
"tipUnderline": "Altı çizili",
|
||||
"tipStrikethrough": "Üstü çizili",
|
||||
"tipSuperscript": "Üst simge",
|
||||
"tipSubscript": "Alt simge",
|
||||
"tipToggleBulletedItem": "Madde işaretini aç/kapat",
|
||||
"tipToggleNumberedItem": "Numaralı öğeyi aç/kapat",
|
||||
"tipNumberedListMarkerStyle": "Numaralı liste işareti stili",
|
||||
"tipDecreaseListIndentTab": "Girintiyi azalt (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Girintiyi artır (Tab)",
|
||||
"tipTextOutlineColor": "Metin dış çizgi rengi",
|
||||
"tipOutlineWidth0None": "Dış çizgi kalınlığı (0 = yok)",
|
||||
"tipFromContent": "İçerikten",
|
||||
"tipLeftToRight": "Soldan sağa",
|
||||
"tipRightToLeft": "Sağdan sola",
|
||||
"tipStrokeColor": "Kontur rengi",
|
||||
"tipStrokeWidth": "Kontur kalınlığı",
|
||||
"tipZoomPresets": "Yakınlaştırma ön ayarları",
|
||||
"tipZoomOut": "Uzaklaştır",
|
||||
"tipZoomIn": "Yakınlaştır",
|
||||
"tipFitPage": "Sayfaya sığdır",
|
||||
"tipPreviousPage": "Önceki sayfa",
|
||||
"tipTypeAPageNumberAndPressEnter": "Sayfa numarası yazıp Enter'a basın",
|
||||
"tipNextPage": "Sonraki sayfa",
|
||||
"tipDocumentProperties": "Belge özellikleri",
|
||||
"tipHideBar": "Çubuğu gizle",
|
||||
"tipShowBar": "Çubuğu göster"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG'den PDF'ye",
|
||||
"subtitle": "Bir veya daha fazla JPG görselinden PDF oluşturun."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Çoğalt & Düzenle",
|
||||
"subtitle": "Sayfaları çoğaltın, yeniden sıralayın ve silin."
|
||||
"subtitle": "Sayfaları çoğaltın, yeniden sıralayın ve silin.",
|
||||
"saveChanges": "Değişiklikleri Kaydet"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Sayfaları Sil",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Yer İşaretlerini Düzenle",
|
||||
"subtitle": "PDF yer imlerini ekleyin, düzenleyin, içe aktarın, silin ve çıkarın."
|
||||
"subtitle": "PDF yer imlerini ekleyin, düzenleyin, içe aktarın, silin ve çıkarın.",
|
||||
"autoExtractExisting": "Mevcut yer imlerini otomatik çıkar",
|
||||
"importSectionTitle": "Veya Yer İmlerini İçe Aktar",
|
||||
"csvFormat": "CSV formatı: başlık,sayfa,seviye",
|
||||
"jsonFormat": "JSON formatı",
|
||||
"uploadCsvAction": "CSV yüklemek için tıklayın",
|
||||
"uploadJsonAction": "JSON yüklemek için tıklayın",
|
||||
"orDragHere": "veya buraya sürükle"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "İçindekiler",
|
||||
"subtitle": "PDF yer imlerinden bir içindekiler sayfası oluşturun."
|
||||
"subtitle": "PDF yer imlerinden bir içindekiler sayfası oluşturun.",
|
||||
"titleLabel": "İçindekiler Başlığı",
|
||||
"fontSize": "Yazı Tipi Boyutu",
|
||||
"fontFamily": "Yazı Tipi Ailesi",
|
||||
"addBookmark": "İçindekiler sayfası için yer imi ekle",
|
||||
"generateButton": "İçindekiler Oluştur",
|
||||
"selectPdfFirst": "Lütfen önce bir PDF dosyası seçin.",
|
||||
"statusReadingFileMainThread": "Dosya okunuyor (Ana Konu)...",
|
||||
"statusGenerating": "İçindekiler oluşturuluyor...",
|
||||
"errorReadingFileWithMessage": "Dosya okuma hatası: {{message}}",
|
||||
"successGeneratedDownloadStarted": "İçindekiler başarıyla oluşturuldu! İndirme başladı.",
|
||||
"workerErrorWithMessage": "Hata: {{message}}",
|
||||
"workerErrorOccurred": "Worker hatası oluştu. Ayrıntılar için konsolu kontrol edin."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Sayfa Numaraları",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Açıklama araç çubuğunu kullanarak PDF'nize damga ekleyin.",
|
||||
"usernameLabel": "Kullanıcı Adı",
|
||||
"usernamePlaceholder": "Adınızı girin (damgalar için)",
|
||||
"usernameHint": "Bu isim oluşturduğunuz damgalarda görünecektir."
|
||||
"usernameHint": "Bu isim oluşturduğunuz damgalarda görünecektir.",
|
||||
"saveButton": "Damgalı PDF'yi Kaydet"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Açıklamaları Kaldır",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF Form Doldurucu",
|
||||
"subtitle": "Formları doğrudan tarayıcıda doldurun. XFA formlarını da destekler."
|
||||
"subtitle": "Formları doğrudan tarayıcıda doldurun. XFA formlarını da destekler.",
|
||||
"uploadHint": "Form alanları olan bir PDF yükleyin. Aşağıdaki görüntüleyicide doğrudan doldurun, ardından doldurulmuş formu kaydetmek ve indirmek için düğmeye tıklayın. XFA formlarını da destekler.",
|
||||
"xfaNoteTitle": "XFA Formları Hakkında Not:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture), yalnızca BentoPDF ve Firefox gibi belirli PDF görüntüleyicileri tarafından desteklenen eski bir biçimdir. XFA bir PDF'yi başka yazılımda açtığınızda boş sayfalar veya form alanı görmüyorsanız, görüntüleyicinin XFA'yı desteklemediği anlamına gelir. XFA formlarını doğru görüntülemek ve doldurmak için Firefox veya BentoPDF'in Form Doldurucu'yu kullanın."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "PDF Formu Oluştur",
|
||||
"subtitle": "Sürükle-bırak metin alanları ile doldurulabilir PDF formları oluşturun."
|
||||
"subtitle": "Sürükle-bırak metin alanları ile doldurulabilir PDF formları oluşturun.",
|
||||
"orSeparator": "VEYA",
|
||||
"createBlankPdf": "Boş PDF Oluştur"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Boş Sayfaları Kaldır",
|
||||
@@ -255,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Metinden PDF'ye",
|
||||
"subtitle": "Düz metin dosyasını PDF'ye dönüştürün."
|
||||
"subtitle": "Düz metin dosyasını PDF'ye dönüştürün.",
|
||||
"uploadFiles": "Dosya Yükle",
|
||||
"typeText": "Metin Yaz",
|
||||
"acceptedFormats": "Metin dosyaları (.txt)",
|
||||
"fontFamily": "Yazı Tipi Ailesi",
|
||||
"fontSize": "Yazı Tipi Boyutu",
|
||||
"textColor": "Metin Rengi",
|
||||
"pageSize": "Sayfa Boyutu",
|
||||
"rtlAutoDetectNote": "RTL dilleri (Arapça, Urduca, Farsça vb.) otomatik olarak algılanır ve metin yönü ayarlanır.",
|
||||
"createButton": "PDF Oluştur"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON'dan PDF'ye",
|
||||
"subtitle": "JSON dosyalarını PDF formatına dönüştürün."
|
||||
"subtitle": "JSON dosyalarını PDF formatına dönüştürün.",
|
||||
"noteLabel": "Not:",
|
||||
"noteText": "Yalnızca PDF-JSON dönüştürücü aracıyla oluşturulan JSON dosyaları desteklenir. Diğer araçlardan gelen standart JSON dosyaları çalışmayacaktır.",
|
||||
"acceptedFormats": "Birden fazla JSON dosyası",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Lütfen en az 1 JSON dosyası seçin",
|
||||
"selectedReady": "{{count}} dosya seçildi. Dönüştürmeye hazır!",
|
||||
"readingFiles": "Dosyalar okunuyor (Ana Konu)...",
|
||||
"converting": "JSON dosyaları PDF'ye dönüştürülüyor...",
|
||||
"readError": "Dosya okuma hatası: {{message}}",
|
||||
"creatingZip": "ZIP dosyası oluşturuluyor...",
|
||||
"success": "JSON dosyaları başarıyla PDF'ye dönüştürüldü! ZIP indirme başlatıldı.",
|
||||
"zipError": "ZIP oluşturma hatası: {{message}}",
|
||||
"workerError": "Worker Hatası: {{message}}",
|
||||
"getStarted": "Başlamak için JSON dosyaları seçin"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF'den JPG'ye",
|
||||
"subtitle": "Her PDF sayfasını JPG görseline dönüştürün."
|
||||
"subtitle": "Her PDF sayfasını JPG görseline dönüştürün.",
|
||||
"imageQuality": "Görüntü Kalitesi",
|
||||
"imageQualityExplanation": "Daha yüksek kalite = daha büyük dosya boyutu",
|
||||
"alert": {
|
||||
"invalidFile": "Geçersiz Dosya",
|
||||
"invalidFileExplanation": "Lütfen bir PDF dosyası yükleyin.",
|
||||
"noFile": "Dosya Yok",
|
||||
"noFileExplanation": "Lütfen önce bir PDF dosyası yükleyin.",
|
||||
"conversionSuccess": "PDF başarıyla JPG'ye dönüştürüldü!",
|
||||
"conversionError": "PDF JPG'ye dönüştürülemedi. Dosya bozulmuş olabilir."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "JPG'ye dönüştürülüyor..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF'den PNG'ye",
|
||||
"subtitle": "Her PDF sayfasını PNG görseline dönüştürün."
|
||||
"subtitle": "Her PDF sayfasını PNG görseline dönüştürün.",
|
||||
"imageScale": "Görüntü Ölçeği",
|
||||
"imageScaleExplanation": "Daha yüksek ölçek = daha iyi kalite ama daha büyük dosya",
|
||||
"alert": {
|
||||
"invalidFile": "Geçersiz Dosya",
|
||||
"invalidFileExplanation": "Lütfen bir PDF dosyası yükleyin.",
|
||||
"noFile": "Dosya Yok",
|
||||
"noFileExplanation": "Lütfen önce bir PDF dosyası yükleyin.",
|
||||
"conversionSuccess": "PDF başarıyla PNG'ye dönüştürüldü!",
|
||||
"conversionError": "PDF PNG'ye dönüştürülemedi. Dosya bozulmuş olabilir."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "PNG'ye dönüştürülüyor..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF'den WebP'ye",
|
||||
"subtitle": "Her PDF sayfasını WebP görseline dönüştürün."
|
||||
"subtitle": "Her PDF sayfasını WebP görseline dönüştürün.",
|
||||
"imageQuality": "Görüntü Kalitesi",
|
||||
"imageQualityExplanation": "Daha yüksek kalite = daha büyük dosya boyutu",
|
||||
"alert": {
|
||||
"invalidFile": "Geçersiz Dosya",
|
||||
"invalidFileExplanation": "Lütfen bir PDF dosyası yükleyin.",
|
||||
"noFile": "Dosya Yok",
|
||||
"noFileExplanation": "Lütfen önce bir PDF dosyası yükleyin.",
|
||||
"conversionSuccess": "PDF başarıyla WebP'ye dönüştürüldü!",
|
||||
"conversionError": "PDF WebP'ye dönüştürülemedi. Dosya bozulmuş olabilir."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "WebP'ye dönüştürülüyor..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF'den BMP'ye",
|
||||
"subtitle": "Her PDF sayfasını BMP görseline dönüştürün."
|
||||
"subtitle": "Her PDF sayfasını BMP görseline dönüştürün.",
|
||||
"alert": {
|
||||
"invalidFile": "Geçersiz Dosya",
|
||||
"invalidFileExplanation": "Lütfen bir PDF dosyası yükleyin.",
|
||||
"noFile": "Dosya Yok",
|
||||
"noFileExplanation": "Lütfen önce bir PDF dosyası yükleyin.",
|
||||
"conversionSuccess": "PDF başarıyla BMP'ye dönüştürüldü!",
|
||||
"conversionError": "PDF BMP'ye dönüştürülemedi. Dosya bozulmuş olabilir."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "BMP'ye dönüştürülüyor..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF'den TIFF'e",
|
||||
@@ -287,7 +508,15 @@
|
||||
"colorMode": "Renk Modu",
|
||||
"multiPage": "Çok sayfalı TIFF olarak kaydet (tek dosya)",
|
||||
"loadingVips": "Görüntü işlemci yükleniyor...",
|
||||
"converting": "TIFF'e dönüştürülüyor..."
|
||||
"converting": "TIFF'e dönüştürülüyor...",
|
||||
"alert": {
|
||||
"invalidFile": "Geçersiz Dosya",
|
||||
"invalidFileExplanation": "Lütfen bir PDF dosyası yükleyin.",
|
||||
"noFile": "Dosya Yok",
|
||||
"noFileExplanation": "Lütfen önce bir PDF dosyası yükleyin.",
|
||||
"conversionSuccess": "PDF başarıyla TIFF'e dönüştürüldü!",
|
||||
"conversionError": "PDF TIFF'e dönüştürülemedi. Dosya bozulmuş olabilir."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF'den CBZ'ye",
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF'den JSON'a",
|
||||
"subtitle": "PDF dosyalarını JSON formatına dönüştürün."
|
||||
"subtitle": "PDF dosyalarını JSON formatına dönüştürün.",
|
||||
"convertButton": "JSON'a Dönüştür",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Lütfen en az 1 PDF dosyası seçin",
|
||||
"selectedReady": "{{count}} dosya seçildi. Dönüştürmeye hazır!",
|
||||
"checkingEncrypted": "Şifrelenmiş PDF'ler kontrol ediliyor...",
|
||||
"readingFiles": "Dosyalar okunuyor (Ana Konu)...",
|
||||
"converting": "PDF'ler JSON'a dönüştürülüyor...",
|
||||
"readError": "Dosya okuma hatası: {{message}}",
|
||||
"creatingZip": "ZIP dosyası oluşturuluyor...",
|
||||
"success": "PDF'ler başarıyla JSON'a dönüştürüldü! ZIP indirme başlatıldı.",
|
||||
"zipError": "ZIP oluşturma hatası: {{message}}",
|
||||
"workerError": "Worker Hatası: {{message}}",
|
||||
"getStarted": "Başlamak için PDF dosyaları seçin"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "PDF'de OCR",
|
||||
"subtitle": "PDF'yi aranabilir ve kopyalanabilir hale getirin."
|
||||
"subtitle": "PDF'yi aranabilir ve kopyalanabilir hale getirin.",
|
||||
"languagesInDocument": "Belgedeki Diller",
|
||||
"searchLanguagesPlaceholder": "Dil ara...",
|
||||
"selectedLabel": "Seçildi:",
|
||||
"none": "Hiçbiri",
|
||||
"advancedSettingsSummary": "Gelişmiş Ayarlar (Doğruluğu artırmak için önerilir)",
|
||||
"resolutionLabel": "Çözünürlük",
|
||||
"resolutionStandard": "Standart (192 DPI)",
|
||||
"resolutionHigh": "Yüksek (288 DPI)",
|
||||
"resolutionUltra": "Ultra (384 DPI)",
|
||||
"binarizeLabel": "Görüntüyü İkiliye Dönüştür (Temiz Taramalar için Kontrastı Artır)",
|
||||
"embedFullFontsLabel": "Tam Yazı Tiplerini Göm (Daha büyük dosya, daha iyi uyumluluk)",
|
||||
"whitelistPresetLabel": "Karakter Beyaz Liste Ön Ayarı",
|
||||
"whitelistNone": "Yok (Tüm karakterler)",
|
||||
"whitelistAlphanumeric": "Alfanümerik + Temel Noktalama",
|
||||
"whitelistNumbersCurrency": "Sayılar + Para Birimi Sembolleri",
|
||||
"whitelistLettersOnly": "Sadece Harfler (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Sadece Sayılar (0-9)",
|
||||
"whitelistInvoice": "Fatura/Makbuz (sayılar, $, ., -, /)",
|
||||
"whitelistForms": "Formlar (alfanümerik + yaygın semboller)",
|
||||
"whitelistCustom": "Özel...",
|
||||
"whitelistHelp": "Yalnızca bu karakterler tanınacak. Tüm karakterler için boş bırakın.",
|
||||
"whitelistInputLabel": "Karakter Beyaz Listesi (İsteğe Bağlı)",
|
||||
"whitelistInputPlaceholder": "ör. abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "OCR'yi Başlat",
|
||||
"progressInitializing": "Başlatılıyor...",
|
||||
"resultsTitle": "OCR Tamamlandı",
|
||||
"resultsDescription": "Aranabilir PDF'niz hazır. Çıkarılan metni aşağıda kopyalayabilir veya indirebilirsiniz.",
|
||||
"copyToClipboard": "Panoya Kopyala",
|
||||
"downloadTxt": ".txt olarak indir",
|
||||
"downloadSearchablePdf": "Aranabilir PDF İndir",
|
||||
"statusPrefix": "Durum: {{status}}",
|
||||
"availabilityInvalidConfig": "Bu dağıtım geçerli OCR dilleri ortaya koymuyor. Geçerli Tesseract kodlarına ayarlanmış VITE_TESSERACT_AVAILABLE_LANGUAGES ile yeniden oluşturun.",
|
||||
"availabilityBundles": "Bu dağıtım şu OCR dillerini içerir: {{languages}}.",
|
||||
"noLanguagesAvailable": "Bu dağıtımda mevcut OCR dili yok.",
|
||||
"noLanguagesTitle": "Hiçbir Dil Seçilmedi",
|
||||
"noLanguagesMessage": "Lütfen OCR için en az bir dil seçin.",
|
||||
"noFileTitle": "Dosya Yok",
|
||||
"noFileMessage": "Lütfen önce bir PDF dosyası yükleyin.",
|
||||
"languageUnavailableTitle": "OCR Dili Mevcut Değil",
|
||||
"ocrErrorTitle": "OCR Hatası",
|
||||
"ocrErrorMessage": "OCR işlemi sırasında bir hata oluştu. Worker yüklenememiş olabilir. Lütfen tekrar deneyin.",
|
||||
"howItWorksTitle": "Nasıl çalışır:",
|
||||
"extractTextLabel": "Metni Çıkar:",
|
||||
"extractTextDescription": "Taranmış görüntülerden veya PDF'lerden metni tanımak için Tesseract OCR kullanır.",
|
||||
"searchableOutputLabel": "Aranabilir Çıktı:",
|
||||
"searchableOutputDescription": "Görünmeyen bir metin katmanı içeren yeni bir PDF oluşturarak belgenizi orijinal görünümünü koruyarak tamamen aranabilir hale getirir.",
|
||||
"characterFilteringLabel": "Karakter Filtreleme:",
|
||||
"characterFilteringDescription": "İstenmeyen karakterleri filtrelemek ve belirli belge türleri (faturalar, formlar vb.) için doğruluğu artırmak için beyaz listeler kullanın.",
|
||||
"multiLanguageSupportLabel": "Çok Dilli Destek:",
|
||||
"multiLanguageSupportDescription": "Karışık dil içeriği olan belgeler için birden fazla dil seçin."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Sayfaları Karıştır & Birleştir",
|
||||
"subtitle": "PDF'leri her birinden sayfaları sırayla birleştirin. Yer imlerini korur."
|
||||
"subtitle": "PDF'leri her birinden sayfaları sırayla birleştirin. Yer imlerini korur.",
|
||||
"retainPageLabels": "Her dosyanın orijinal sayfa etiketlerini koru",
|
||||
"retainPageLabelsHint": "Kapalı (varsayılan): birleştirilmiş PDF doğal 1–N sayfa numaralandırmasını kullanır. Açık: her dosyanın orijinal sayfa etiketleri korunur (yinelenen etiketler oluşabilir)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Çift taraflı taramayı harmanla",
|
||||
"subtitle": "İki blok hâlinde taranmış bir PDF'i (önce tüm ön yüzler, sonra tüm arka yüzler) doğru ön/arka sırasına göre yeniden düzenleyin.",
|
||||
"totalPagesLabel": "Toplam sayfa:",
|
||||
"splitAfterPageLabel": "Şu sayfadan sonra böl",
|
||||
"splitAfterPagePlaceholder": "örn. 50",
|
||||
"backBlockOrderLabel": "Arka yüz bloğu sırası",
|
||||
"backBlockReverseOption": "Arka yüz bloğunu ters çevir (deste ters konduğunda yaygındır)",
|
||||
"backBlockKeepOption": "Arka yüz bloğunu olduğu gibi bırak",
|
||||
"autoSplitButton": "Bölme noktasını otomatik bul (yarısı)",
|
||||
"exportGroupedLabel": "Dosyaları özgün belge uzunluğuna göre gruplayarak dışa aktar",
|
||||
"pagesPerDocumentLabel": "Özgün belge başına sayfa",
|
||||
"groupedHelp": "Etkinleştirilirse çıktı, her gruplanmış belge için bir PDF içeren bir ZIP dosyası olur.",
|
||||
"collateButton": "PDF'i harmanla",
|
||||
"invalidFileTitle": "Geçersiz dosya",
|
||||
"invalidFileMessage": "Lütfen bir PDF dosyası seçin.",
|
||||
"loadingPdf": "PDF yükleniyor...",
|
||||
"loadErrorMessage": "PDF dosyası yüklenemedi.",
|
||||
"fileMeta": "{{size}} - {{count}} sayfa",
|
||||
"oddPageWarning": "Sayfa sayısı tek ({{count}}). Çift taraflı taramanın sayfa sayısı çift olmalıdır; eksik ya da fazla bir sayfa olabilir.",
|
||||
"previewSummary": "Ön yüz bloğu: {{frontCount}} sayfa, arka yüz bloğu: {{backCount}} sayfa. Çıktı: ön/arka sırasında {{outputCount}} sayfa.",
|
||||
"previewMismatchWarning": "Ön ve arka blok uzunlukları farklı ({{frontCount}} ön, {{backCount}} arka). Uzun taraftaki {{extraCount}} fazla sayfa eşleşmeden sona eklenecek.",
|
||||
"missingFileTitle": "Dosya eksik",
|
||||
"missingFileMessage": "İşlemden önce en az 2 sayfalık bir PDF yükleyin.",
|
||||
"invalidSplitTitle": "Geçersiz bölme noktası",
|
||||
"invalidSplitMessage": "Bölme noktası 1. sayfa ile {{maxSplit}}. sayfa arasında olmalıdır.",
|
||||
"unevenConfirmTitle": "Eşit olmayan bloklar",
|
||||
"unevenConfirmMessage": "Ön yüz bloğunda {{frontCount}} sayfa, arka yüz bloğunda {{backCount}} sayfa var.\nBu genellikle bir sayfanın iki kez tarandığı ya da eksik olduğu anlamına gelir.\n\nEşleşmeyen {{extraCount}} sayfa sona eklenecek.\n\nYine de devam edilsin mi?",
|
||||
"invalidGroupTitle": "Geçersiz grup boyutu",
|
||||
"invalidGroupMessage": "Özgün belge başına geçerli bir sayfa sayısı girin.",
|
||||
"collatingLoader": "Çift taraflı tarama harmanlanıyor...",
|
||||
"successMessage": "Harmanlanmış PDF başarıyla oluşturuldu.",
|
||||
"successGroupedMessage": "Harmanlama tamamlandı. {{fileCount}} gruplanmış dosya oluşturuldu.",
|
||||
"processErrorMessage": "PDF harmanlanamadı.",
|
||||
"howItWorksStep1Title": "Taramayı yükleyin",
|
||||
"howItWorksStep1": "Önce tüm ön yüzleri, ardından tüm arka yüzleri içeren tek PDF'i bırakın.",
|
||||
"howItWorksStep2Title": "Bölme noktasını belirleyin",
|
||||
"howItWorksStep2": "Ön yüz bloğunun nerede bittiğini işaretleyin, sonra arka yüz bloğunun ters çevrilmesi gerekip gerekmediğini seçin.",
|
||||
"howItWorksStep3Title": "Harmanlayın ve indirin",
|
||||
"howItWorksStep3": "Sayfaları sırayla yerleştirilmiş tek bir PDF ya da her özgün belge için ayrı dosya içeren bir ZIP alın.",
|
||||
"faqOddPagesQuestion": "Taramamda tek sayıda sayfa varsa ne olur?",
|
||||
"faqOddPagesAnswer": "Çift taraflı taramanın sayfa sayısı çift olmalıdır. Değilse, bir sayfa muhtemelen iki kez tarandı ya da atlandı. Araç işlemden önce sizi uyarır ve eşleşmeyen sayfalar sona eklenir; böylece hiçbir şey kaybolmaz.",
|
||||
"faqBackOrderQuestion": "Arka yüz bloğunu neden olduğu gibi bırakayım?",
|
||||
"faqBackOrderAnswer": "Bu, ikinci geçişte destenin nasıl yerleştirildiğine bağlıdır. Tüm desteyi ters çevirmek arka yüzleri ters sırada verir; varsayılan ayar budur. Tarayıcınız bunları ön yüzlerle aynı sırada verdiyse bloğu olduğu gibi bırakmayı seçin."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Ek Dosya Ekle",
|
||||
@@ -363,6 +703,10 @@
|
||||
"name": "PDF'yi Döndür",
|
||||
"subtitle": "Sayfaları 90 derecelik artışlarla döndürün."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Rotate by Custom Degrees",
|
||||
"subtitle": "Rotate pages by any custom angle."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N'li PDF",
|
||||
"subtitle": "Birden fazla sayfayı tek bir sayfaya yerleştirin."
|
||||
@@ -475,24 +819,6 @@
|
||||
"name": "İzinleri Değiştir",
|
||||
"subtitle": "Bir PDF üzerindeki kullanıcı izinlerini ayarlayın veya değiştirin."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "E-posta'dan PDF'ye",
|
||||
"subtitle": "E-posta dosyalarını (EML, MSG) PDF formatına dönüştürün. Outlook dışa aktarmalarını ve standart e-posta formatlarını destekler.",
|
||||
"acceptedFormats": "EML, MSG Dosyaları",
|
||||
"convertButton": "PDF'ye Dönüştür"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Yazı Tipi Çerçeveye Dönüştür",
|
||||
"subtitle": "Tüm yazı tiplerini vektör çerçevelere dönüştürün, tüm cihazlarda tutarlı görüntü için."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "PDF Eğriliğini Düzelt",
|
||||
"subtitle": "OpenCV kullanarak eğik taranmış sayfaları otomatik olarak düzeltin."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Rotate by Custom Degrees",
|
||||
"subtitle": "Rotate pages by any custom angle."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT to PDF",
|
||||
"subtitle": "Convert OpenDocument Text files to PDF format. Supports multiple files.",
|
||||
@@ -674,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF to Text",
|
||||
"subtitle": "Extract text from PDF files and save as plain text (.txt). Supports multiple files.",
|
||||
"note": "This tool works ONLY with digitally created PDFs. For scanned documents or image-based PDFs, use our OCR PDF tool instead.",
|
||||
"convertButton": "Extract Text"
|
||||
"noteLabel": "Not:",
|
||||
"noteText": "Bu araç YALNIZCA dijital olarak oluşturulmuş PDF'lerle çalışır. Taranmış belgeler veya görüntü tabanlı PDF'ler için bunun yerine OCR PDF aracımızı kullanın.",
|
||||
"convertButton": "Extract Text",
|
||||
"note": "This tool works ONLY with digitally created PDFs. For scanned documents or image-based PDFs, use our OCR PDF tool instead."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Digital Signature PDF",
|
||||
"pageTitle": "Digital Signature PDF - Add Cryptographic Signature | BentoPDF",
|
||||
"subtitle": "Add a cryptographic digital signature to your PDF using X.509 certificates. Supports PKCS#12 (.pfx, .p12) and PEM formats. Your private key never leaves your browser.",
|
||||
"certificateSection": "Certificate",
|
||||
"uploadCert": "Upload certificate (.pfx, .p12)",
|
||||
"uploadCert": "Upload certificate (.pfx, .p12, .pem)",
|
||||
"certPassword": "Certificate Password",
|
||||
"privateKeyPassword": "Özel Anahtar Parolası",
|
||||
"certPasswordPlaceholder": "Enter certificate password",
|
||||
"certInfo": "Certificate Information",
|
||||
"certSubject": "Subject",
|
||||
@@ -696,8 +1025,71 @@
|
||||
"locationPlaceholder": "e.g., New York, USA",
|
||||
"contactInfo": "Contact Info",
|
||||
"contactPlaceholder": "e.g., [email protected]",
|
||||
"visibleSignature": "Görünür İmza",
|
||||
"visibleSignatureDescription": "Etkinleştirildiğinde, PDF'de görünür bir imza kutusu görünür. Bir görüntü/logo yükleyebilir veya metin ekleyebilirsiniz. Hiçbiri sağlanmazsa, sertifikadaki imzalayanın adı otomatik olarak gösterilir.",
|
||||
"signatureImage": "İmza Görüntüsü/Logosu (İsteğe Bağlı)",
|
||||
"uploadSignatureImage": "Görüntü yükle (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "İmza önizlemesi",
|
||||
"remove": "Kaldır",
|
||||
"page": "Sayfa",
|
||||
"firstPage": "İlk sayfa",
|
||||
"lastPage": "Son sayfa",
|
||||
"allPages": "Tüm sayfalar",
|
||||
"customPage": "Özel sayfa #",
|
||||
"pageNumber": "Sayfa #",
|
||||
"xPosition": "X Pozisyonu (sol)",
|
||||
"yPosition": "Y Pozisyonu (üst)",
|
||||
"width": "Genişlik",
|
||||
"height": "Yükseklik",
|
||||
"addTextOverlay": "Metin bindirme ekle",
|
||||
"text": "Metin",
|
||||
"textPlaceholder": "ör. Ali Yılmaz tarafından dijital olarak imzalandı",
|
||||
"textColor": "Metin Rengi",
|
||||
"fontSize": "Yazı Tipi Boyutu",
|
||||
"invalidImageTitle": "Geçersiz Görüntü",
|
||||
"invalidImageMessage": "Lütfen PNG, JPG veya WebP görüntüsü seçin.",
|
||||
"invalidFileTitle": "Geçersiz Dosya",
|
||||
"invalidFileMessage": "Lütfen bir PDF dosyası seçin.",
|
||||
"invalidCertificateTitle": "Geçersiz Sertifika",
|
||||
"invalidCertificateMessage": "Lütfen .pfx, .p12 veya .pem sertifika dosyası seçin.",
|
||||
"certificateLoaded": "Sertifika yüklendi",
|
||||
"certificateUnlocked": "Sertifikanın kilidi açıldı",
|
||||
"failedParsePem": "PEM dosyası ayrıştırılamadı",
|
||||
"enterPasswordToUnlock": "Kilit açmak için parolayı girin",
|
||||
"invalidPasswordOrCertificate": "Geçersiz parola veya sertifika",
|
||||
"incorrectPassword": "Yanlış parola",
|
||||
"failedParseCertificate": "Sertifika ayrıştırılamadı",
|
||||
"missingDataTitle": "Eksik Veri",
|
||||
"missingDataMessage": "Lütfen hem PDF hem de geçerli bir sertifika yükleyin.",
|
||||
"applyingSignature": "Dijital imza uygulanıyor...",
|
||||
"signingFailedTitle": "İmzalama Başarısız",
|
||||
"chainFetchFailed": "Sertifika zinciri alınamadı. Bunun nedeni ağ sorunları veya sertifika proxy'sinin kullanılamamış olması olabilir. Lütfen internet bağlantınızı kontrol edip tekrar deneyin. Sorun devam ederse desteğe başvurun.",
|
||||
"failedToSignPdf": "PDF imzalanamadı: {{message}}",
|
||||
"defaultSignatureText": "{{signer}} tarafından dijital olarak imzalandı\n{{date}}",
|
||||
"pageCount": "{{count}} sayfa",
|
||||
"howToStep1Title": "PDF Yükle",
|
||||
"howToStep1Text": "İmzalamak istediğiniz PDF belgesini seçin",
|
||||
"howToStep2Title": "Sertifika Yükle",
|
||||
"howToStep2Text": ".pfx veya .p12 sertifika dosyanızı ve parolanızı sağlayın",
|
||||
"howToStep3Title": "İmzala ve İndir",
|
||||
"howToStep3Text": "Dijital imzayı uygulayın ve imzalanmış PDF'nizi indirin",
|
||||
"relatedEncryptDesc": "PDF'yi parola ile koru",
|
||||
"relatedDecryptDesc": "PDF parolasını kaldır",
|
||||
"relatedFlattenDesc": "Açıklamaları kalıcı yap",
|
||||
"relatedSanitizeDesc": "Gizli verileri kaldır",
|
||||
"relatedPermissionsDesc": "PDF izinlerini ayarla",
|
||||
"faqWhatIsQuestion": "Dijital imza nedir?",
|
||||
"faqWhatIsAnswer": "Dijital imza, bir belgenin gerçekliğini ve bütünlüğünü doğrulayan kriptografik bir mekanizmadır. Çizilen imzanın aksine, imzalayanın kimliğini kanıtlamak için açık anahtar kriptografisi (X.509 sertifikaları) kullanır.",
|
||||
"faqFormatsQuestion": "Hangi sertifika formatları destekleniyor?",
|
||||
"faqFormatsAnswer": "Sertifikanızı ve özel anahtarınızı tek bir şifrelenmiş dosyada içeren PKCS#12 formatlı sertifikaları (.pfx, .p12) destekliyoruz. Bunlar genellikle sertifika otoriteleri tarafından verilir.",
|
||||
"faqPrivateKeyQuestion": "Özel anahtarım güvende mi?",
|
||||
"faqPrivateKeyAnswer": "Evet! Tüm işlemler tamamen tarayıcınızda gerçekleşir. Sertifikanız, özel anahtarınız ve PDF dosyalarınız asla cihazınızdan ayrılmaz veya herhangi bir sunucuya yüklenmez.",
|
||||
"faqValidReadersQuestion": "İmza PDF okuyucularda geçerli olacak mı?",
|
||||
"faqValidReadersAnswer": "Evet, araç tüm büyük PDF okuyucuları tarafından tanınan standart PKCS#7 ayrılmış imzalar oluşturur. Tam doğrulama için güvenilir bir Sertifika Otoritesi'nden bir sertifika kullanın.",
|
||||
"applySignature": "Apply Digital Signature",
|
||||
"successMessage": "PDF signed successfully! The signature can be verified in any PDF reader."
|
||||
"successMessage": "PDF signed successfully! The signature can be verified in any PDF reader.",
|
||||
"internetRequiredTitle": "İnternet bağlantısı gerekli",
|
||||
"internetRequiredDescription": "İmzalama, imzayı doğrulamak için sertifika düzenleyicinizin sunucusundan sertifika zinciri bilgilerini almayı gerektirebilir."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validate PDF Signature",
|
||||
@@ -711,7 +1103,21 @@
|
||||
"tsaSectionTitle": "Zaman Damgası Sunucusu (TSA)",
|
||||
"selectTsa": "Bir TSA sunucusu seçin",
|
||||
"applyTimestamp": "Zaman Damgası Uygula",
|
||||
"successMessage": "PDF başarıyla zaman damgalandı! Zaman damgası Adobe Acrobat ve diğer PDF okuyucularda doğrulanabilir."
|
||||
"successMessage": "PDF başarıyla zaman damgalandı! Zaman damgası herhangi bir PDF okuyucuda doğrulanabilir."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "E-posta'dan PDF'ye",
|
||||
"subtitle": "E-posta dosyalarını (EML, MSG) PDF formatına dönüştürün. Outlook dışa aktarmalarını ve standart e-posta formatlarını destekler.",
|
||||
"acceptedFormats": "EML, MSG Dosyaları",
|
||||
"convertButton": "PDF'ye Dönüştür"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Yazı Tipi Çerçeveye Dönüştür",
|
||||
"subtitle": "Tüm yazı tiplerini vektör çerçevelere dönüştürün, tüm cihazlarda tutarlı görüntü için."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "PDF Eğriliğini Düzelt",
|
||||
"subtitle": "OpenCV kullanarak eğik taranmış sayfaları otomatik olarak düzeltin."
|
||||
},
|
||||
"pdfToWord": {
|
||||
"name": "PDF'den Word'e",
|
||||
@@ -772,7 +1178,113 @@
|
||||
"templateLoaded": "\"{{name}}\" şablonu yüklendi.",
|
||||
"failedLoadTemplate": "Şablon yüklenemedi.",
|
||||
"noSettings": "Bu düğüm için yapılandırılabilir ayar yok.",
|
||||
"advancedSettings": "Gelişmiş Ayarlar"
|
||||
"advancedSettings": "Gelişmiş Ayarlar",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "PDF Girişi",
|
||||
"description": "Bir veya daha fazla PDF dosyası yükleyin"
|
||||
},
|
||||
"download": {
|
||||
"name": "İndir",
|
||||
"description": "Otomatik olarak PDF veya ZIP olarak indir"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "{{node}} düğümüne bağlı PDF yok",
|
||||
"noPdfInputs": "Girişte PDF yok",
|
||||
"expectedPdfInput": "PDF girişi bekleniyordu",
|
||||
"failedToRenderPage": "{{page}} sayfası işlenemedi",
|
||||
"failedToGetCanvasContext": "{{page}} sayfası için tuval bağlamı alınamadı",
|
||||
"failedToRenderPageToImage": "{{page}} sayfası görüntü olarak işlenemedi",
|
||||
"noPagesProcessed": "Hiçbir sayfa işlenmedi",
|
||||
"cpdfNotConfigured": "CoherentPDF yapılandırılmadı. Lütfen Gelişmiş Ayarlar’dan yapılandırın.",
|
||||
"workerError": "Worker hatası: {{message}}",
|
||||
"alternateMergeWorkerError": "Alternatif birleştirme worker hatası: {{message}}",
|
||||
"noPdfFilesUploaded": "PDF Input düğümüne PDF dosyası yüklenmedi",
|
||||
"failedToLoadFile": "\"{{file}}\" yüklenemedi — dosya bozuk olabilir",
|
||||
"noImagesUploaded": "Image Input düğümüne resim yüklenmedi",
|
||||
"noWordDocsUploaded": "Word Input düğümüne belge yüklenmedi",
|
||||
"noExcelUploaded": "Excel Input düğümüne hesap tablosu yüklenmedi",
|
||||
"noPowerPointUploaded": "PowerPoint Input düğümüne sunum yüklenmedi",
|
||||
"noCbzUploaded": "CBZ Input düğümüne çizgi roman arşivi yüklenmedi",
|
||||
"noEmailUploaded": "E-posta Input düğümüne e-posta dosyası yüklenmedi",
|
||||
"noEpubUploaded": "EPUB Input düğümüne EPUB dosyası yüklenmedi",
|
||||
"noFb2Uploaded": "FB2 Input düğümüne FB2 dosyası yüklenmedi",
|
||||
"noJsonUploaded": "JSON Input düğümüne JSON dosyası yüklenmedi",
|
||||
"noMarkdownUploaded": "Markdown Input düğümüne Markdown dosyası yüklenmedi",
|
||||
"noMobiUploaded": "MOBI Input düğümüne MOBI dosyası yüklenmedi",
|
||||
"noOdgUploaded": "ODG Input düğümüne ODG dosyası yüklenmedi",
|
||||
"noPagesUploaded": "Pages Input düğümüne Pages dosyası yüklenmedi",
|
||||
"noPubUploaded": "PUB Input düğümüne PUB dosyası yüklenmedi",
|
||||
"noSvgUploaded": "SVG Input düğümüne SVG dosyası yüklenmedi",
|
||||
"noTextUploaded": "Text Input düğümüne metin dosyası yüklenmedi",
|
||||
"noVsdUploaded": "VSD Input düğümüne Visio dosyası yüklenmedi",
|
||||
"noWpdUploaded": "WPD Input düğümüne WPD dosyası yüklenmedi",
|
||||
"noWpsUploaded": "WPS Input düğümüne WPS dosyası yüklenmedi",
|
||||
"noXmlUploaded": "XML Input düğümüne XML dosyası yüklenmedi",
|
||||
"noXpsUploaded": "XPS Input düğümüne XPS dosyası yüklenmedi",
|
||||
"alternateMergeNeedsTwo": "Alternatif Birleştirme girişine en az iki PDF bağlanmalıdır",
|
||||
"cropMarginsExceed": "Kırpma kenar boşlukları sayfa boyutlarını aşıyor. Değerleri azaltın.",
|
||||
"digitalSignNoCertificate": "Dijital İmza düğümüne sertifika yüklenmedi",
|
||||
"encryptUserPasswordRequired": "Şifreleme için kullanıcı parolası gerekli",
|
||||
"extractImagesNoneFound": "Bağlı PDF’lerde resim bulunamadı",
|
||||
"invertColorsFailedReadImage": "Görüntü verisi okunamadı",
|
||||
"overlayRequiresPdf": "Bindirme düğümü, bir bindirme PDF girişi gerektirir.",
|
||||
"pdfToCsvNoTables": "PDF’de tablo bulunamadı",
|
||||
"pdfToXlsxNoTables": "{{file}} içinde tablo bulunamadı",
|
||||
"posterizeFailedTileCanvas": "Karo tuval bağlamı alınamadı",
|
||||
"redactNoText": "Karartma: karartılacak metin belirtilmedi",
|
||||
"removeBlankPagesAllBlank": "Tüm sayfalar boş",
|
||||
"svgFailedToConvert": "SVG dönüştürülemedi",
|
||||
"svgFailedToLoad": "SVG yüklenemedi",
|
||||
"timestampFailed": "TSA {{tsa}} ile zaman damgalama başarısız: {{message}}",
|
||||
"noOutputNodes": "Çıkış düğümü bulunamadı. İş akışınızı tamamlamak için bir Download düğümü ekleyin.",
|
||||
"circularDependency": "İş akışında döngüsel bağımlılık tespit edildi. Düğümler arasındaki tüm döngüleri kaldırın.",
|
||||
"encryptOrdering": "Şifrele düğümü \"{{target}}\" adlı düğümü besliyor; şifrelenmiş veride başarısız olabilir. Şifrele’yi çıkış düğümünden hemen önceye taşıyın.",
|
||||
"invalidWorkflowFile": "Geçersiz iş akışı dosyası: düğüm veya bağlantı dizisi eksik.",
|
||||
"storageQuotaExceeded": "İş akışı kaydedilemedi: depolama kotası aşıldı. Eski şablonları silmeyi deneyin.",
|
||||
"failedToImport": "İş akışı içe aktarılamadı: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Gelişmiş Özellik Ayarları",
|
||||
"description": "Gelişmiş PDF özelliklerini etkinleştirmek için harici işleme modüllerini yapılandırın. Bu modüller isteğe bağlıdır ve ayrı olarak lisanslanır.",
|
||||
"status": {
|
||||
"testing": "Test ediliyor...",
|
||||
"customOverride": "Özel Geçersiz Kılma",
|
||||
"preConfigured": "Önceden Yapılandırılmış",
|
||||
"notConfigured": "Yapılandırılmamış"
|
||||
},
|
||||
"preconfiguredTitle": "Önceden yapılandırılmış ve kullanıma hazır.",
|
||||
"preconfiguredDescription": "Gelişmiş işleme modülleri otomatik olarak CDN'den yüklenir. Özel bir kaynak kullanmanız gerekiyorsa (ör. air-gapped veya self-hosted dağıtımlar için), aşağıdaki URL'leri geçersiz kılabilirsiniz.",
|
||||
"usingDefault": "Varsayılan kullanılıyor: {{url}}",
|
||||
"pymupdfSubtitle": "Belge İşleme Motoru",
|
||||
"pymupdfFeatures": "Etkinleştirir: PDF'den Metne, Markdown, SVG, DOCX, Excel • Görüntü/Tablo Çıkarma • Format Dönüşümü",
|
||||
"testButton": "Test Et",
|
||||
"recommendedLabel": "Önerilen:",
|
||||
"copyTitle": "Panoya kopyala",
|
||||
"ghostscriptSubtitle": "PDF/A Dönüştürme Motoru",
|
||||
"ghostscriptFeatures": "Etkinleştirir: PDF/A-1b, PDF/A-2b, PDF/A-3b Dönüşümü • Yazı Tipinden Dış Hatta",
|
||||
"cpdfSubtitle": "Yer İmi ve Meta Veri Motoru",
|
||||
"cpdfFeatures": "Etkinleştirir: Yer İmlerine Göre Böl • Yer İmlerini Düzenle • PDF Meta Verileri",
|
||||
"saveConfiguration": "Yapılandırmayı Kaydet",
|
||||
"savingConfiguration": "Yapılandırma kaydediliyor...",
|
||||
"savedTitle": "Kaydedildi",
|
||||
"savedMessage": "Yapılandırma başarıyla kaydedildi!",
|
||||
"errorTitle": "Hata",
|
||||
"failedSave": "Yapılandırma kaydedilemedi: {{message}}",
|
||||
"emptyUrlTitle": "Boş URL",
|
||||
"emptyUrlMessage": "Lütfen test etmek için bir URL girin.",
|
||||
"testSuccessTitle": "Başarılı",
|
||||
"connectionSuccess": "{{package}}'a bağlantı başarılı!",
|
||||
"connectionFailedTitle": "Bağlantı Başarısız",
|
||||
"connectionFailedMessage": "URL'ye bağlanılamadı.",
|
||||
"resetDefaults": "Varsayılanlara Sıfırla",
|
||||
"resetTitle": "Sıfırla",
|
||||
"resetWithDefaults": "Özel geçersiz kılmalar temizlendi. Önceden yapılandırılmış varsayılanlar etkin.",
|
||||
"resetNoDefaults": "Tüm yapılandırmalar ve önbelleğe alınmış modüller temizlendi.",
|
||||
"licenseTitle": "Lisans Bildirimi:",
|
||||
"licenseDescription": "Harici modüller (PyMuPDF, Ghostscript, CoherentPDF), AGPL-3.0 veya benzer copyleft lisansları altında lisanslanmıştır. Bu modülleri yapılandırarak ve kullanarak, ilgili lisans şartlarını kabul etmiş olursunuz. BentoPDF, beklenen arayüzü izleyen herhangi bir Ghostscript WASM ve PyMuPDF WASM uygulamasıyla uyumludur."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "PDF Katmanlama",
|
||||
|
||||
@@ -0,0 +1,387 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "Головна",
|
||||
"about": "Про нас",
|
||||
"contact": "Контакти",
|
||||
"licensing": "Ліцензія",
|
||||
"allTools": "Усі інструменти",
|
||||
"docs": "Документація",
|
||||
"openMainMenu": "Відкрити головне меню",
|
||||
"language": "Мова",
|
||||
"searchLanguage": "Пошук мови…",
|
||||
"noLanguagesFound": "Мови не знайдено"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Подобається BentoPDF? Допоможіть нам залишатися безкоштовними та з відкритим кодом!",
|
||||
"button": "Підтримати"
|
||||
},
|
||||
"hero": {
|
||||
"title": "",
|
||||
"pdfToolkit": "Набір PDF-інструментів",
|
||||
"builtForPrivacy": "створений з урахуванням конфіденційності",
|
||||
"noSignups": "Без реєстрації",
|
||||
"unlimitedUse": "Без обмежень",
|
||||
"worksOffline": "Працює офлайн",
|
||||
"startUsing": "Почати зараз"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Використовується компаніями та людьми, які працюють у"
|
||||
},
|
||||
"features": {
|
||||
"title": "Чому обирають",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "Без реєстрації",
|
||||
"description": "Почніть одразу — без акаунтів і email."
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "Без завантаження на сервер",
|
||||
"description": "100% обробка на вашому пристрої — файли не покидають його."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Завжди безкоштовно",
|
||||
"description": "Усі інструменти без обмежень, без пробних періодів і платних стін."
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "Без обмежень",
|
||||
"description": "Користуйтеся скільки завгодно — без прихованих лімітів."
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "Пакетна обробка",
|
||||
"description": "Обробляйте необмежену кількість PDF за один раз."
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "Блискавична швидкість",
|
||||
"description": "Миттєва обробка PDF без очікування та затримок."
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "Почніть роботу з",
|
||||
"toolsLabel": "інструментами",
|
||||
"subtitle": "Оберіть інструмент, щоб відкрити завантаження файлів",
|
||||
"searchPlaceholder": "Пошук інструмента (наприклад, «розділити», «організувати»...)",
|
||||
"backToTools": "Назад до інструментів",
|
||||
"firstLoadNotice": "Перший запуск може зайняти трохи часу — завантажується модуль обробки. Після цього все працюватиме миттєво."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Натисніть, щоб вибрати файл",
|
||||
"orDragAndDrop": "або перетягніть файл",
|
||||
"pdfOrImages": "PDF або зображення",
|
||||
"filesNeverLeave": "Ваші файли не покидають ваш пристрій.",
|
||||
"addMore": "Додати ще файли",
|
||||
"clearAll": "Очистити все",
|
||||
"clearFiles": "Очистити файли",
|
||||
"hints": {
|
||||
"singlePdf": "Один PDF-файл",
|
||||
"pdfFile": "PDF-файл",
|
||||
"multiplePdfs2": "Кілька PDF-файлів (щонайменше 2)",
|
||||
"bmpImages": "Зображення BMP",
|
||||
"oneOrMorePdfs": "Один або кілька PDF-файлів",
|
||||
"pdfDocuments": "PDF-документи",
|
||||
"oneOrMoreCsv": "Один або кілька CSV-файлів",
|
||||
"multiplePdfsSupported": "Підтримуються кілька PDF-файлів",
|
||||
"singleOrMultiplePdfs": "Підтримується один або кілька PDF-файлів",
|
||||
"singlePdfFile": "Один PDF-файл",
|
||||
"pdfWithForms": "PDF-файл із формами",
|
||||
"heicImages": "Зображення HEIC/HEIF",
|
||||
"jpgImages": "Зображення JPG, JPEG, JP2, JPX",
|
||||
"pdfsOrImages": "PDF або зображення",
|
||||
"oneOrMoreOdt": "Один або кілька ODT-файлів",
|
||||
"singlePdfOnly": "Лише один PDF-файл",
|
||||
"pdfFiles": "PDF-файли",
|
||||
"multiplePdfs": "Кілька PDF-файлів",
|
||||
"pngImages": "Зображення PNG",
|
||||
"pdfFilesOneOrMore": "PDF-файли (один або більше)",
|
||||
"oneOrMoreRtf": "Один або кілька RTF-файлів",
|
||||
"svgGraphics": "Графіка SVG",
|
||||
"tiffImages": "Зображення TIFF",
|
||||
"webpImages": "Зображення WebP"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Як це працює",
|
||||
"step1Title": "Завантажити файл",
|
||||
"step1": "Натисніть або перетягніть файл, щоб почати",
|
||||
"step2Title": "Обробити",
|
||||
"step2": "Натисніть кнопку обробки",
|
||||
"step3Title": "Завантажити",
|
||||
"step3": "Одразу збережіть готовий файл"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Схожі PDF-інструменти"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Обробка..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Сповіщення",
|
||||
"ok": "ОК"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Попередній перегляд документа",
|
||||
"downloadAsPdf": "Завантажити як PDF",
|
||||
"close": "Закрити"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Налаштування",
|
||||
"shortcuts": "Гарячі клавіші",
|
||||
"preferences": "Параметри",
|
||||
"displayPreferences": "Налаштування відображення",
|
||||
"searchShortcuts": "Пошук гарячих клавіш...",
|
||||
"shortcutsInfo": "Натисніть і утримуйте клавіші, щоб задати комбінацію. Зміни зберігаються автоматично.",
|
||||
"shortcutsWarning": "⚠️ Уникайте стандартних комбінацій браузера (Ctrl/Cmd+W, Ctrl/Cmd+T, Ctrl/Cmd+N тощо), вони можуть працювати некоректно.",
|
||||
"import": "Імпорт",
|
||||
"export": "Експорт",
|
||||
"resetToDefaults": "Скинути до стандартних",
|
||||
"fullWidthMode": "Повна ширина",
|
||||
"fullWidthDescription": "Використовувати всю ширину екрана замість центрування інтерфейсу",
|
||||
"compactMode": "Компактний режим",
|
||||
"compactModeDescription": "Показувати інструменти у вигляді компактного списку замість карток",
|
||||
"advancedSettings": "Додаткові налаштування",
|
||||
"advancedSettingsDescription": "Налаштувати зовнішні модулі обробки (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Налаштування зберігаються автоматично",
|
||||
"clickToSet": "Натисніть, щоб задати",
|
||||
"pressKeys": "Натисніть клавіші...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Комбінація вже використовується",
|
||||
"assignedTo": "вже призначена для:",
|
||||
"chooseDifferent": "Будь ласка, оберіть іншу комбінацію.",
|
||||
"reserved": "Попередження про зарезервовану комбінацію",
|
||||
"commonlyUsed": "зазвичай використовується для:",
|
||||
"unreliable": "Ця комбінація може працювати нестабільно або конфліктувати з браузером чи системою.",
|
||||
"useAnyway": "Все одно використати?",
|
||||
"resetTitle": "Скидання гарячих клавіш",
|
||||
"resetMessage": "Ви впевнені, що хочете скинути всі гарячі клавіші до стандартних?<br><br>Цю дію неможливо скасувати.",
|
||||
"importSuccessTitle": "Імпорт виконано",
|
||||
"importSuccessMessage": "Гарячі клавіші успішно імпортовано!",
|
||||
"importFailTitle": "Помилка імпорту",
|
||||
"importFailMessage": "Не вдалося імпортувати гарячі клавіші. Невірний формат файлу."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Попередження",
|
||||
"cancel": "Скасувати",
|
||||
"proceed": "Продовжити"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Ваші дані ніколи не покидають ваш пристрій",
|
||||
"weKeep": "Ми зберігаємо",
|
||||
"yourInfoSafe": "вашу інформацію в безпеці",
|
||||
"byFollowingStandards": "дотримуючись міжнародних стандартів безпеки.",
|
||||
"processingLocal": "Уся обробка відбувається локально на вашому пристрої.",
|
||||
"gdpr": {
|
||||
"title": "Відповідність GDPR",
|
||||
"description": "Захищає персональні дані та приватність осіб у Європейському Союзі."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "Відповідність CCPA",
|
||||
"description": "Надає мешканцям Каліфорнії права щодо збору, використання та поширення їхніх персональних даних."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "Відповідність HIPAA",
|
||||
"description": "Встановлює вимоги до захисту чутливої медичної інформації в системі охорони здоров’я США."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Поширені",
|
||||
"questions": "запитання",
|
||||
"sectionTitle": "Поширені запитання",
|
||||
"isFree": {
|
||||
"question": "Чи справді BentoPDF безкоштовний?",
|
||||
"answer": "Так, абсолютно. Усі інструменти BentoPDF на 100% безкоштовні — без обмежень на файли, без реєстрації та без водяних знаків. Ми вважаємо, що кожен має мати доступ до простих і потужних PDF-інструментів без платних обмежень."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Чи безпечні мої файли? Де вони обробляються?",
|
||||
"answer": "Ваші файли максимально захищені, оскільки вони ніколи не покидають ваш комп’ютер. Уся обробка відбувається прямо у вашому браузері (client-side). Ми не завантажуємо файли на сервер, тому ви повністю контролюєте свої документи."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Чи працює це на Mac, Windows та мобільних пристроях?",
|
||||
"answer": "Так! Оскільки BentoPDF працює повністю у браузері, він підтримується на будь-якій ОС із сучасним браузером — Windows, macOS, Linux, iOS та Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "Чи відповідає BentoPDF вимогам GDPR?",
|
||||
"answer": "Так. BentoPDF повністю відповідає GDPR. Оскільки всі файли обробляються локально у браузері, а ми не збираємо та не передаємо дані на сервери, ми не маємо доступу до ваших файлів. Ви завжди контролюєте свої документи."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Чи зберігаєте або відстежуєте ви мої файли?",
|
||||
"answer": "Ні. Ми не зберігаємо, не відстежуємо і не логгуємо ваші файли. Усе відбувається у пам’яті браузера і зникає після закриття сторінки. Немає завантажень, історії чи серверів."
|
||||
},
|
||||
"different": {
|
||||
"question": "Чим BentoPDF відрізняється від інших PDF-інструментів?",
|
||||
"answer": "Більшість PDF-сервісів завантажують файли на сервер для обробки. BentoPDF цього не робить. Ми використовуємо сучасні веб-технології для обробки файлів прямо у браузері. Це забезпечує швидкість, конфіденційність і повний контроль."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "Як обробка у браузері забезпечує безпеку?",
|
||||
"answer": "Оскільки все працює у вашому браузері, файли ніколи не покидають пристрій. Це усуває ризики зламів серверів, витоків даних або несанкціонованого доступу. Ваші файли залишаються тільки у вас."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Чи використовуєте ви cookies або аналітику?",
|
||||
"answer": "Ні. BentoPDF вас ніяк не відстежує. Ми не використовуємо файли cookie, аналітику чи скрипти відстеження — навіть на робочому сайті bentopdf.com. Ми ніколи не знаємо, хто ви і що ви робите з інструментами."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Що",
|
||||
"users": "користувачі",
|
||||
"say": "кажуть"
|
||||
},
|
||||
"support": {
|
||||
"title": "Подобається моя робота?",
|
||||
"description": "BentoPDF — це проєкт, створений із захопленням, щоб надати безкоштовний, приватний і потужний набір PDF-інструментів для всіх. Якщо він вам корисний — підтримайте його розвиток. Кожна кава має значення!",
|
||||
"buyMeCoffee": "Пригостити кавою"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF. Усі права захищені.",
|
||||
"version": "Версія",
|
||||
"company": "Компанія",
|
||||
"aboutUs": "Про нас",
|
||||
"faqLink": "FAQ",
|
||||
"contactUs": "Контакти",
|
||||
"legal": "Правова інформація",
|
||||
"termsAndConditions": "Умови використання",
|
||||
"privacyPolicy": "Політика конфіденційності",
|
||||
"followUs": "Слідкуйте за нами"
|
||||
},
|
||||
"merge": {
|
||||
"title": "Об’єднання PDF",
|
||||
"description": "Об’єднуйте файли повністю або вибирайте окремі сторінки для створення нового документа.",
|
||||
"fileMode": "Режим файлів",
|
||||
"pageMode": "Режим сторінок",
|
||||
"howItWorks": "Як це працює:",
|
||||
"fileModeInstructions": [
|
||||
"Перетягніть файли, щоб змінити їх порядок.",
|
||||
"У полі «Сторінки» для кожного файлу можна вказати діапазони (наприклад, «1-3, 5»).",
|
||||
"Залиште поле порожнім, щоб додати всі сторінки."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Усі сторінки завантажених PDF відображаються нижче.",
|
||||
"Перетягуйте мініатюри сторінок, щоб задати потрібний порядок."
|
||||
],
|
||||
"mergePdfs": "Об’єднати PDF"
|
||||
},
|
||||
"common": {
|
||||
"page": "Сторінка",
|
||||
"pages": "Сторінки",
|
||||
"of": "з",
|
||||
"download": "Завантажити",
|
||||
"cancel": "Скасувати",
|
||||
"save": "Зберегти",
|
||||
"delete": "Видалити",
|
||||
"edit": "Редагувати",
|
||||
"add": "Додати",
|
||||
"remove": "Видалити",
|
||||
"loading": "Завантаження...",
|
||||
"loadingPageCount": "Завантаження сторінок...",
|
||||
"error": "Помилка",
|
||||
"success": "Успішно",
|
||||
"file": "Файл",
|
||||
"files": "Файли",
|
||||
"close": "Закрити",
|
||||
"convert": "Конвертувати",
|
||||
"unknownError": "Невідома помилка"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "Ми вважаємо, що PDF-інструменти мають бути",
|
||||
"subtitle": "швидкими, приватними та безкоштовними.",
|
||||
"noCompromises": "Без компромісів."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Наша місія",
|
||||
"description": "Надавати найповніший набір PDF-інструментів із повагою до приватності та без оплати. Ми віримо, що необхідні інструменти для роботи з документами мають бути доступні кожному."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Наша філософія",
|
||||
"title": "Приватність понад усе",
|
||||
"description": "У світі, де дані стали ресурсом, ми обрали інший підхід. Уся обробка відбувається у вашому браузері. Ваші файли не потрапляють на сервери, ми їх не бачимо і не відстежуємо вашу діяльність."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Чому",
|
||||
"speed": {
|
||||
"title": "Швидкість",
|
||||
"description": "Жодних завантажень на сервер. Обробка відбувається миттєво прямо у браузері."
|
||||
},
|
||||
"free": {
|
||||
"title": "Повністю безкоштовно",
|
||||
"description": "Без підписок, пробних періодів і прихованих платежів."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "Без акаунта",
|
||||
"description": "Почніть одразу — без email і реєстрації."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Open Source",
|
||||
"description": "Створено з використанням відкритих бібліотек і з орієнтацією на прозорість."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Готові почати?",
|
||||
"description": "Приєднуйтесь до тисяч користувачів BentoPDF.",
|
||||
"button": "Переглянути всі інструменти"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Зв’яжіться з нами",
|
||||
"subtitle": "Ми раді зворотному зв’язку — питання, ідеї чи пропозиції.",
|
||||
"email": "Напишіть нам на email:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Ліцензування для",
|
||||
"subtitle": "Оберіть ліцензію відповідно до ваших потреб."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "Завантажити PDF",
|
||||
"upload": "Завантажити",
|
||||
"addBlankPage": "Додати порожню сторінку",
|
||||
"edit": "Редагування:",
|
||||
"undo": "Скасувати",
|
||||
"redo": "Повторити",
|
||||
"reset": "Скинути",
|
||||
"selection": "Вибір:",
|
||||
"selectAll": "Вибрати все",
|
||||
"deselectAll": "Зняти вибір",
|
||||
"rotate": "Повернути:",
|
||||
"rotateLeft": "Ліворуч",
|
||||
"rotateRight": "Праворуч",
|
||||
"transform": "Дії:",
|
||||
"duplicate": "Дублювати",
|
||||
"split": "Розділити",
|
||||
"clear": "Очистити:",
|
||||
"delete": "Видалити",
|
||||
"download": "Завантажити:",
|
||||
"downloadSelected": "Завантажити вибране",
|
||||
"exportPdf": "Експортувати PDF",
|
||||
"uploadPdfFiles": "Виберіть PDF-файли або зображення",
|
||||
"dragAndDrop": "Перетягніть PDF або зображення сюди, або натисніть для вибору",
|
||||
"selectFiles": "Вибрати файли",
|
||||
"dropToAdd": "Відпустіть PDF або зображення для додавання",
|
||||
"convertingImages": "Перетворення зображень на PDF...",
|
||||
"failedToConvertImages": "Не вдалося перетворити зображення на PDF.",
|
||||
"renderingPages": "Рендеринг сторінок...",
|
||||
"actions": {
|
||||
"duplicatePage": "Дублювати сторінку",
|
||||
"deletePage": "Видалити сторінку",
|
||||
"insertPdf": "Вставити PDF після цієї сторінки",
|
||||
"toggleSplit": "Розділити після цієї сторінки"
|
||||
},
|
||||
"pleaseWait": "Зачекайте",
|
||||
"pagesRendering": "Сторінки ще обробляються...",
|
||||
"noPagesSelected": "Сторінки не вибрані",
|
||||
"selectOnePage": "Оберіть хоча б одну сторінку.",
|
||||
"noPages": "Немає сторінок",
|
||||
"noPagesToExport": "Немає сторінок для експорту.",
|
||||
"renderingTitle": "Генерація прев’ю сторінок",
|
||||
"errorRendering": "Помилка рендерингу",
|
||||
"error": "Помилка",
|
||||
"failedToLoad": "Не вдалося завантажити"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "PDF інструменти",
|
||||
"subtitle": "Оберіть інструмент для початку"
|
||||
},
|
||||
"disabledTool": {
|
||||
"title": "Інструмент недоступний",
|
||||
"heading": "Цей інструмент вимкнено",
|
||||
"message": "Інструмент недоступний у цій конфігурації. Зверніться до адміністратора.",
|
||||
"backHome": "На головну"
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,8 +5,11 @@
|
||||
"contact": "Liên hệ",
|
||||
"licensing": "Giấy phép",
|
||||
"allTools": "Tất cả công cụ",
|
||||
"docs": "Docs",
|
||||
"openMainMenu": "Mở menu chính",
|
||||
"language": "Ngôn ngữ"
|
||||
"language": "Ngôn ngữ",
|
||||
"searchLanguage": "Tìm ngôn ngữ…",
|
||||
"noLanguagesFound": "Không tìm thấy ngôn ngữ"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Bạn yêu thích BentoPDF? Hãy giúp chúng tôi giữ nó miễn phí và mã nguồn mở!",
|
||||
@@ -95,6 +98,18 @@
|
||||
"webpImages": "Ảnh WebP"
|
||||
}
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Cách thức hoạt động",
|
||||
"step1Title": "Tải tệp lên",
|
||||
"step1": "Nhấp hoặc kéo tệp của bạn vào đây",
|
||||
"step2Title": "Xử lý",
|
||||
"step2": "Nhấp vào nút xử lý để bắt đầu",
|
||||
"step3Title": "Tải xuống",
|
||||
"step3": "Lưu tệp đã xử lý ngay lập tức"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Công cụ PDF liên quan"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Đang xử lý..."
|
||||
},
|
||||
@@ -120,6 +135,10 @@
|
||||
"resetToDefaults": "Đặt lại về mặc định",
|
||||
"fullWidthMode": "Chế độ toàn chiều rộng",
|
||||
"fullWidthDescription": "Sử dụng toàn bộ chiều rộng màn hình cho tất cả công cụ thay vì container căn giữa",
|
||||
"compactMode": "Chế độ thu gọn",
|
||||
"compactModeDescription": "Hiển thị công cụ dưới dạng danh sách thu gọn thay vì thẻ",
|
||||
"advancedSettings": "Cài đặt nâng cao",
|
||||
"advancedSettingsDescription": "Cấu hình các mô-đun xử lý bên ngoài (PyMuPDF, Ghostscript, CoherentPDF)",
|
||||
"settingsAutoSaved": "Cài đặt được lưu tự động",
|
||||
"clickToSet": "Nhấp để đặt",
|
||||
"pressKeys": "Nhấn phím...",
|
||||
@@ -166,6 +185,7 @@
|
||||
"faq": {
|
||||
"title": "Câu hỏi",
|
||||
"questions": "Thường gặp",
|
||||
"sectionTitle": "Câu hỏi thường gặp",
|
||||
"isFree": {
|
||||
"question": "BentoPDF có thực sự miễn phí không?",
|
||||
"answer": "Có, hoàn toàn miễn phí. Tất cả các công cụ trên BentoPDF đều 100% miễn phí sử dụng, không giới hạn tệp, không cần đăng ký và không có watermark. Chúng tôi tin rằng mọi người đều xứng đáng được tiếp cận với các công cụ PDF đơn giản, mạnh mẽ mà không có tường phí."
|
||||
@@ -196,9 +216,8 @@
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Bạn có sử dụng cookie hoặc phân tích để theo dõi tôi không?",
|
||||
"answer": "Chúng tôi quan tâm đến quyền riêng tư của bạn. BentoPDF không theo dõi thông tin cá nhân. Chúng tôi chỉ sử dụng Simple Analytics để xem số lượt truy cập ẩn danh. Điều này có nghĩa là chúng tôi có thể biết có bao nhiêu người dùng truy cập trang web của chúng tôi, nhưng chúng tôi không bao giờ biết bạn là ai. Simple Analytics hoàn toàn tuân thủ GDPR và tôn trọng quyền riêng tư của bạn."
|
||||
},
|
||||
"sectionTitle": "Câu hỏi thường gặp"
|
||||
"answer": "Không. BentoPDF hoàn toàn không theo dõi bạn. Chúng tôi không dùng cookie, công cụ phân tích hay bất kỳ tập lệnh theo dõi nào, kể cả trên trang web chính thức bentopdf.com. Chúng tôi không bao giờ biết bạn là ai hay bạn làm gì với các công cụ."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Người dùng",
|
||||
@@ -251,11 +270,14 @@
|
||||
"add": "Thêm",
|
||||
"remove": "Xóa",
|
||||
"loading": "Đang tải...",
|
||||
"loadingPageCount": "Đang tải trang...",
|
||||
"error": "Lỗi",
|
||||
"success": "Thành công",
|
||||
"file": "Tệp",
|
||||
"files": "Tệp",
|
||||
"close": "Đóng"
|
||||
"close": "Đóng",
|
||||
"convert": "Chuyển đổi",
|
||||
"unknownError": "Lỗi không xác định"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
@@ -328,9 +350,12 @@
|
||||
"download": "Tải xuống:",
|
||||
"downloadSelected": "Tải xuống đã chọn",
|
||||
"exportPdf": "Xuất PDF",
|
||||
"uploadPdfFiles": "Chọn tệp PDF",
|
||||
"dragAndDrop": "Kéo và thả tệp PDF vào đây, hoặc nhấp để chọn",
|
||||
"uploadPdfFiles": "Chọn tệp PDF hoặc hình ảnh",
|
||||
"dragAndDrop": "Kéo và thả tệp PDF hoặc hình ảnh vào đây, hoặc nhấp để chọn",
|
||||
"selectFiles": "Chọn tệp",
|
||||
"dropToAdd": "Thả tệp PDF hoặc hình ảnh để thêm",
|
||||
"convertingImages": "Đang chuyển đổi hình ảnh sang PDF...",
|
||||
"failedToConvertImages": "Không thể chuyển đổi hình ảnh sang PDF.",
|
||||
"renderingPages": "Đang kết xuất trang...",
|
||||
"actions": {
|
||||
"duplicatePage": "Nhân bản trang này",
|
||||
@@ -349,15 +374,6 @@
|
||||
"error": "Lỗi",
|
||||
"failedToLoad": "Không thể tải"
|
||||
},
|
||||
"howItWorks": {
|
||||
"title": "Cách thức hoạt động",
|
||||
"step1": "Nhấp hoặc kéo tệp của bạn vào đây",
|
||||
"step2": "Nhấp vào nút xử lý để bắt đầu",
|
||||
"step3": "Lưu tệp đã xử lý ngay lập tức"
|
||||
},
|
||||
"relatedTools": {
|
||||
"title": "Công cụ PDF liên quan"
|
||||
},
|
||||
"simpleMode": {
|
||||
"title": "Công cụ PDF",
|
||||
"subtitle": "Chọn một công cụ để bắt đầu"
|
||||
|
||||
+537
-25
@@ -6,15 +6,20 @@
|
||||
"convertFromPdf": "Chuyển đổi từ PDF",
|
||||
"organizeManage": "Sắp xếp & Quản lý",
|
||||
"optimizeRepair": "Tối ưu hóa & Sửa chữa",
|
||||
"securePdf": "Bảo mật PDF"
|
||||
"securePdf": "Bảo mật PDF",
|
||||
"input": "Đầu vào",
|
||||
"output": "Đầu ra"
|
||||
},
|
||||
"convertToPdf": "Chuyển đổi sang PDF",
|
||||
"pdfMultiTool": {
|
||||
"name": "Công cụ đa năng PDF",
|
||||
"subtitle": "Gộp, Chia, Sắp xếp, Xóa, Xoay, Thêm trang trống, Trích xuất và Nhân đôi trong một giao diện thống nhất."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Gộp PDF",
|
||||
"subtitle": "Kết hợp nhiều PDF thành một tệp. Giữ nguyên Bookmark."
|
||||
"subtitle": "Kết hợp nhiều PDF thành một tệp. Giữ nguyên Bookmark.",
|
||||
"retainPageLabels": "Giữ nhãn trang gốc từ mỗi tệp",
|
||||
"retainPageLabelsHint": "Tắt (mặc định): PDF đã hợp nhất sử dụng đánh số trang tự nhiên 1–N. Bật: nhãn trang gốc của từng tệp được giữ lại (có thể tạo ra nhãn trùng lặp)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Chia PDF",
|
||||
@@ -50,6 +55,122 @@
|
||||
"name": "Trình chỉnh sửa PDF",
|
||||
"subtitle": "Ghi chú, tô sáng, chỉnh sửa, bình luận, thêm hình dạng/hình ảnh, tìm kiếm và xem PDF."
|
||||
},
|
||||
"editPdfText": {
|
||||
"name": "Chỉnh sửa văn bản PDF",
|
||||
"subtitle": "Nhấp vào bất kỳ đoạn văn nào và chỉnh sửa ngay tại chỗ với tính năng tự động dàn lại văn bản, phông chữ và kiểu dáng.",
|
||||
"saved": "Đã lưu PDF thành công! ({{size}} KB)",
|
||||
"failedToLoad": "Không thể tải Trình chỉnh sửa văn bản PDF.",
|
||||
"howToUpload": "Tải PDF lên",
|
||||
"howToClick": "Nhấp vào một đoạn văn",
|
||||
"howToRestyle": "Đổi kiểu mọi thứ",
|
||||
"relatedPdfEditor": "Chú thích và đánh dấu PDF",
|
||||
"relatedSignPdf": "Vẽ, nhập hoặc tải lên chữ ký",
|
||||
"relatedWatermark": "Đóng dấu văn bản hoặc hình ảnh",
|
||||
"relatedStamps": "Đặt con dấu lên trang",
|
||||
"relatedCompress": "Giảm kích thước tệp",
|
||||
"relatedOrganizeName": "Sắp xếp PDF",
|
||||
"relatedOrganize": "Sắp xếp lại và quản lý trang",
|
||||
"open": "Mở",
|
||||
"export": "Xuất",
|
||||
"filterAll": "Tất cả",
|
||||
"filterText": "Văn bản",
|
||||
"filterImages": "Hình ảnh",
|
||||
"filterShapes": "Hình khối",
|
||||
"addText": "Thêm văn bản",
|
||||
"langAuto": "Tự động",
|
||||
"change": "Thay đổi",
|
||||
"ignore": "Bỏ qua",
|
||||
"next": "Tiếp theo",
|
||||
"replace": "Thay thế",
|
||||
"replaceAll": "Thay thế tất cả",
|
||||
"emptyState": "Mở một PDF để chỉnh sửa văn bản, hình ảnh và hình khối.",
|
||||
"choosePdf": "Chọn một PDF…",
|
||||
"font": "Phông chữ",
|
||||
"systemFonts": "Phông chữ hệ thống",
|
||||
"color": "Màu",
|
||||
"alignment": "Căn chỉnh",
|
||||
"style": "Kiểu",
|
||||
"lists": "Danh sách",
|
||||
"outline": "Đường viền",
|
||||
"spacing": "Giãn cách",
|
||||
"direction": "Hướng",
|
||||
"dirAuto": "Tự động",
|
||||
"pathStroke": "Nét đường dẫn",
|
||||
"tipBackToUpload": "Quay lại tải lên",
|
||||
"tipOpenAnotherPdf": "Mở PDF khác",
|
||||
"tipExportS": "Xuất (⌘S)",
|
||||
"tipUndoZ": "Hoàn tác (⌘Z)",
|
||||
"tipRedoZ": "Làm lại (⇧⌘Z)",
|
||||
"tipFileDetails": "Chi tiết tệp",
|
||||
"tipEditExistingContent": "Chỉnh sửa nội dung hiện có",
|
||||
"tipWhatTheEditToolTouchesNarrowTheScopeOnBus": "Phạm vi tác động của công cụ Chỉnh sửa — thu hẹp phạm vi trên trang dày đặc",
|
||||
"tipClickThePageToAddATextBox": "Nhấp vào trang để thêm hộp văn bản",
|
||||
"tipSpellCheckLanguage": "Ngôn ngữ kiểm tra chính tả",
|
||||
"tipFindAndReplace": "Tìm và thay thế",
|
||||
"tipAddAnImage": "Thêm hình ảnh",
|
||||
"tipCopyThisPageSTextInReadingOrder": "Sao chép văn bản trang này theo thứ tự đọc",
|
||||
"tipCheckTheSpellingOfThisPage": "Kiểm tra chính tả trang này",
|
||||
"tipShowOrHideTheFormatPanel": "Hiện hoặc ẩn bảng định dạng",
|
||||
"phReplaceWith": "Thay bằng",
|
||||
"tipAddToYourDictionary": "Thêm vào từ điển",
|
||||
"tipClose": "Đóng",
|
||||
"phFind": "Tìm",
|
||||
"tipPreviousMatch": "Kết quả trước",
|
||||
"tipNextMatch": "Kết quả tiếp theo",
|
||||
"tipRotateLeft90": "Xoay trái 90°",
|
||||
"tipRotateRight90": "Xoay phải 90°",
|
||||
"tipFlipHorizontal": "Lật ngang",
|
||||
"tipFlipVertical": "Lật dọc",
|
||||
"tipReplaceThisImageKeepingItsPlacement": "Thay ảnh này và giữ nguyên vị trí",
|
||||
"tipAlternateTextForAccessibilityTaggedPdfs": "Văn bản thay thế cho trợ năng (PDF có thẻ)",
|
||||
"tipBringToFront": "Đưa lên trước",
|
||||
"tipSendToBack": "Đưa ra sau",
|
||||
"tipDuplicate": "Nhân bản",
|
||||
"tipDelete": "Xóa",
|
||||
"tipAlignLeftEdges": "Căn mép trái",
|
||||
"tipAlignHorizontalCenters": "Căn giữa theo chiều ngang",
|
||||
"tipAlignRightEdges": "Căn mép phải",
|
||||
"tipAlignTops": "Căn mép trên",
|
||||
"tipAlignVerticalCenters": "Căn giữa theo chiều dọc",
|
||||
"tipAlignBottoms": "Căn mép dưới",
|
||||
"tipDistributeHorizontally": "Phân bố theo chiều ngang",
|
||||
"tipDistributeVertically": "Phân bố theo chiều dọc",
|
||||
"tipFontSize": "Cỡ chữ",
|
||||
"tipListFontsInstalledOnThisDeviceChromium": "Liệt kê phông chữ đã cài trên thiết bị này (Chromium)",
|
||||
"tipCustomTextColor": "Màu chữ tùy chỉnh",
|
||||
"tipAlignLeft": "Căn trái",
|
||||
"tipAlignCenter": "Căn giữa",
|
||||
"tipAlignRight": "Căn phải",
|
||||
"tipJustify": "Căn đều",
|
||||
"tipBold": "Đậm",
|
||||
"tipItalic": "Nghiêng",
|
||||
"tipUnderline": "Gạch chân",
|
||||
"tipStrikethrough": "Gạch ngang",
|
||||
"tipSuperscript": "Chỉ số trên",
|
||||
"tipSubscript": "Chỉ số dưới",
|
||||
"tipToggleBulletedItem": "Bật/tắt mục dấu đầu dòng",
|
||||
"tipToggleNumberedItem": "Bật/tắt mục đánh số",
|
||||
"tipNumberedListMarkerStyle": "Kiểu ký hiệu danh sách đánh số",
|
||||
"tipDecreaseListIndentTab": "Giảm thụt lề (⇧Tab)",
|
||||
"tipIncreaseListIndentTab": "Tăng thụt lề (Tab)",
|
||||
"tipTextOutlineColor": "Màu viền chữ",
|
||||
"tipOutlineWidth0None": "Độ dày viền (0 = không có)",
|
||||
"tipFromContent": "Từ nội dung",
|
||||
"tipLeftToRight": "Trái sang phải",
|
||||
"tipRightToLeft": "Phải sang trái",
|
||||
"tipStrokeColor": "Màu nét",
|
||||
"tipStrokeWidth": "Độ dày nét",
|
||||
"tipZoomPresets": "Mức thu phóng đặt sẵn",
|
||||
"tipZoomOut": "Thu nhỏ",
|
||||
"tipZoomIn": "Phóng to",
|
||||
"tipFitPage": "Vừa trang",
|
||||
"tipPreviousPage": "Trang trước",
|
||||
"tipTypeAPageNumberAndPressEnter": "Nhập số trang rồi nhấn Enter",
|
||||
"tipNextPage": "Trang sau",
|
||||
"tipDocumentProperties": "Thuộc tính tài liệu",
|
||||
"tipHideBar": "Ẩn thanh",
|
||||
"tipShowBar": "Hiện thanh"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG sang PDF",
|
||||
"subtitle": "Tạo PDF từ hình ảnh JPG, JPEG và JPEG2000 (JP2/JPX)."
|
||||
@@ -68,7 +189,8 @@
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Nhân đôi & Sắp xếp",
|
||||
"subtitle": "Nhân đôi, sắp xếp lại và xóa trang."
|
||||
"subtitle": "Nhân đôi, sắp xếp lại và xóa trang.",
|
||||
"saveChanges": "Lưu thay đổi"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Xóa trang",
|
||||
@@ -76,11 +198,30 @@
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Chỉnh sửa Bookmark",
|
||||
"subtitle": "Thêm, chỉnh sửa, nhập, xóa và trích xuất bookmark PDF."
|
||||
"subtitle": "Thêm, chỉnh sửa, nhập, xóa và trích xuất bookmark PDF.",
|
||||
"autoExtractExisting": "Tự động trích xuất dấu trang hiện có",
|
||||
"importSectionTitle": "Hoặc nhập dấu trang",
|
||||
"csvFormat": "Định dạng CSV: tiêu đề,trang,cấp",
|
||||
"jsonFormat": "Định dạng JSON",
|
||||
"uploadCsvAction": "Nhấp để tải lên CSV",
|
||||
"uploadJsonAction": "Nhấp để tải lên JSON",
|
||||
"orDragHere": "hoặc kéo vào đây"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Mục lục",
|
||||
"subtitle": "Tạo trang mục lục từ bookmark PDF."
|
||||
"subtitle": "Tạo trang mục lục từ bookmark PDF.",
|
||||
"titleLabel": "Tiêu đề Mục lục",
|
||||
"fontSize": "Cỡ chữ",
|
||||
"fontFamily": "Họ phông chữ",
|
||||
"addBookmark": "Thêm dấu trang cho trang Mục lục",
|
||||
"generateButton": "Tạo Mục lục",
|
||||
"selectPdfFirst": "Vui lòng chọn tệp PDF trước.",
|
||||
"statusReadingFileMainThread": "Đang đọc tệp (Luồng chính)...",
|
||||
"statusGenerating": "Đang tạo mục lục...",
|
||||
"errorReadingFileWithMessage": "Lỗi đọc tệp: {{message}}",
|
||||
"successGeneratedDownloadStarted": "Đã tạo mục lục thành công! Tải xuống đã bắt đầu.",
|
||||
"workerErrorWithMessage": "Lỗi: {{message}}",
|
||||
"workerErrorOccurred": "Đã xảy ra lỗi worker. Kiểm tra console để biết chi tiết."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Số trang",
|
||||
@@ -206,7 +347,8 @@
|
||||
"subtitle": "Thêm tem hình ảnh vào PDF của bạn bằng thanh công cụ ghi chú.",
|
||||
"usernameLabel": "Tên người dùng tem",
|
||||
"usernamePlaceholder": "Nhập tên của bạn (cho tem)",
|
||||
"usernameHint": "Tên này sẽ xuất hiện trên các tem bạn tạo."
|
||||
"usernameHint": "Tên này sẽ xuất hiện trên các tem bạn tạo.",
|
||||
"saveButton": "Lưu PDF đã đóng dấu"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Xóa ghi chú",
|
||||
@@ -214,11 +356,16 @@
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Điền form PDF",
|
||||
"subtitle": "Điền form trực tiếp trong trình duyệt. Cũng hỗ trợ form XFA."
|
||||
"subtitle": "Điền form trực tiếp trong trình duyệt. Cũng hỗ trợ form XFA.",
|
||||
"uploadHint": "Tải lên PDF có trường biểu mẫu. Điền trực tiếp vào trình xem bên dưới, sau đó nhấp vào nút để lưu và tải xuống biểu mẫu đã điền. Cũng hỗ trợ biểu mẫu XFA.",
|
||||
"xfaNoteTitle": "Lưu ý về biểu mẫu XFA:",
|
||||
"xfaNoteDescription": "XFA (XML Forms Architecture) là định dạng cũ chỉ được hỗ trợ bởi một số trình xem PDF nhất định như BentoPDF và Firefox. Nếu bạn mở PDF XFA trong phần mềm khác và thấy trang trống hoặc không có trường biểu mẫu, có nghĩa là trình xem đó không hỗ trợ XFA. Để xem và điền biểu mẫu XFA đúng cách, hãy sử dụng Firefox hoặc Form Filler của BentoPDF."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Tạo form PDF",
|
||||
"subtitle": "Tạo form PDF có thể điền với các trường văn bản kéo và thả."
|
||||
"subtitle": "Tạo form PDF có thể điền với các trường văn bản kéo và thả.",
|
||||
"orSeparator": "HOẶC",
|
||||
"createBlankPdf": "Tạo PDF trống"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Xóa trang trống",
|
||||
@@ -255,27 +402,101 @@
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Văn bản sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp văn bản thuần túy thành PDF."
|
||||
"subtitle": "Chuyển đổi tệp văn bản thuần túy thành PDF.",
|
||||
"uploadFiles": "Tải lên tệp",
|
||||
"typeText": "Nhập văn bản",
|
||||
"acceptedFormats": "Tệp văn bản (.txt)",
|
||||
"fontFamily": "Họ phông chữ",
|
||||
"fontSize": "Cỡ chữ",
|
||||
"textColor": "Màu văn bản",
|
||||
"pageSize": "Cỡ trang",
|
||||
"rtlAutoDetectNote": "Các ngôn ngữ RTL (Ả Rập, Urdu, Ba Tư, v.v.) được tự động phát hiện và hướng văn bản được điều chỉnh.",
|
||||
"createButton": "Tạo PDF"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp JSON sang định dạng PDF."
|
||||
"subtitle": "Chuyển đổi tệp JSON sang định dạng PDF.",
|
||||
"noteLabel": "Lưu ý:",
|
||||
"noteText": "Chỉ hỗ trợ các tệp JSON được tạo bởi công cụ chuyển đổi PDF sang JSON. Các tệp JSON tiêu chuẩn từ các công cụ khác sẽ không hoạt động.",
|
||||
"acceptedFormats": "Nhiều tệp JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Vui lòng chọn ít nhất 1 tệp JSON",
|
||||
"selectedReady": "Đã chọn {{count}} tệp. Sẵn sàng chuyển đổi!",
|
||||
"readingFiles": "Đang đọc tệp (Luồng chính)...",
|
||||
"converting": "Đang chuyển đổi tệp JSON sang PDF...",
|
||||
"readError": "Lỗi đọc tệp: {{message}}",
|
||||
"creatingZip": "Đang tạo tệp ZIP...",
|
||||
"success": "Đã chuyển đổi thành công tệp JSON sang PDF! Tải xuống ZIP đã bắt đầu.",
|
||||
"zipError": "Lỗi tạo ZIP: {{message}}",
|
||||
"workerError": "Lỗi Worker: {{message}}",
|
||||
"getStarted": "Chọn tệp JSON để bắt đầu"
|
||||
}
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF sang JPG",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh JPG."
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh JPG.",
|
||||
"imageQuality": "Chất lượng hình ảnh",
|
||||
"imageQualityExplanation": "Chất lượng cao hơn = kích thước tệp lớn hơn",
|
||||
"alert": {
|
||||
"invalidFile": "Tệp không hợp lệ",
|
||||
"invalidFileExplanation": "Vui lòng tải lên tệp PDF.",
|
||||
"noFile": "Không có tệp",
|
||||
"noFileExplanation": "Vui lòng tải lên tệp PDF trước.",
|
||||
"conversionSuccess": "Đã chuyển đổi PDF thành JPG thành công!",
|
||||
"conversionError": "Không thể chuyển đổi PDF sang JPG. Tệp có thể bị hỏng."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Đang chuyển đổi sang JPG..."
|
||||
}
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF sang PNG",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh PNG."
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh PNG.",
|
||||
"imageScale": "Tỷ lệ hình ảnh",
|
||||
"imageScaleExplanation": "Tỷ lệ lớn hơn = chất lượng tốt hơn nhưng tệp lớn hơn",
|
||||
"alert": {
|
||||
"invalidFile": "Tệp không hợp lệ",
|
||||
"invalidFileExplanation": "Vui lòng tải lên tệp PDF.",
|
||||
"noFile": "Không có tệp",
|
||||
"noFileExplanation": "Vui lòng tải lên tệp PDF trước.",
|
||||
"conversionSuccess": "Đã chuyển đổi PDF thành PNG thành công!",
|
||||
"conversionError": "Không thể chuyển đổi PDF sang PNG. Tệp có thể bị hỏng."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Đang chuyển đổi sang PNG..."
|
||||
}
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF sang WebP",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh WebP."
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh WebP.",
|
||||
"imageQuality": "Chất lượng hình ảnh",
|
||||
"imageQualityExplanation": "Chất lượng cao hơn = kích thước tệp lớn hơn",
|
||||
"alert": {
|
||||
"invalidFile": "Tệp không hợp lệ",
|
||||
"invalidFileExplanation": "Vui lòng tải lên tệp PDF.",
|
||||
"noFile": "Không có tệp",
|
||||
"noFileExplanation": "Vui lòng tải lên tệp PDF trước.",
|
||||
"conversionSuccess": "Đã chuyển đổi PDF thành WebP thành công!",
|
||||
"conversionError": "Không thể chuyển đổi PDF sang WebP. Tệp có thể bị hỏng."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Đang chuyển đổi sang WebP..."
|
||||
}
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF sang BMP",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh BMP."
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh BMP.",
|
||||
"alert": {
|
||||
"invalidFile": "Tệp không hợp lệ",
|
||||
"invalidFileExplanation": "Vui lòng tải lên tệp PDF.",
|
||||
"noFile": "Không có tệp",
|
||||
"noFileExplanation": "Vui lòng tải lên tệp PDF trước.",
|
||||
"conversionSuccess": "Đã chuyển đổi PDF thành BMP thành công!",
|
||||
"conversionError": "Không thể chuyển đổi PDF sang BMP. Tệp có thể bị hỏng."
|
||||
},
|
||||
"loader": {
|
||||
"converting": "Đang chuyển đổi sang BMP..."
|
||||
}
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF sang TIFF",
|
||||
@@ -287,7 +508,15 @@
|
||||
"colorMode": "Chế độ màu",
|
||||
"multiPage": "Lưu dưới dạng TIFF nhiều trang (một tệp)",
|
||||
"loadingVips": "Đang tải bộ xử lý hình ảnh...",
|
||||
"converting": "Đang chuyển đổi sang TIFF..."
|
||||
"converting": "Đang chuyển đổi sang TIFF...",
|
||||
"alert": {
|
||||
"invalidFile": "Tệp không hợp lệ",
|
||||
"invalidFileExplanation": "Vui lòng tải lên tệp PDF.",
|
||||
"noFile": "Không có tệp",
|
||||
"noFileExplanation": "Vui lòng tải lên tệp PDF trước.",
|
||||
"conversionSuccess": "Đã chuyển đổi PDF thành TIFF thành công!",
|
||||
"conversionError": "Không thể chuyển đổi PDF sang TIFF. Tệp có thể bị hỏng."
|
||||
}
|
||||
},
|
||||
"pdfToCbz": {
|
||||
"name": "PDF sang CBZ",
|
||||
@@ -325,15 +554,126 @@
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF sang JSON",
|
||||
"subtitle": "Chuyển đổi tệp PDF sang định dạng JSON."
|
||||
"subtitle": "Chuyển đổi tệp PDF sang định dạng JSON.",
|
||||
"convertButton": "Chuyển đổi sang JSON",
|
||||
"status": {
|
||||
"selectAtLeastOne": "Vui lòng chọn ít nhất 1 tệp PDF",
|
||||
"selectedReady": "Đã chọn {{count}} tệp. Sẵn sàng chuyển đổi!",
|
||||
"checkingEncrypted": "Đang kiểm tra PDF mã hóa...",
|
||||
"readingFiles": "Đang đọc tệp (Luồng chính)...",
|
||||
"converting": "Đang chuyển đổi PDF sang JSON...",
|
||||
"readError": "Lỗi đọc tệp: {{message}}",
|
||||
"creatingZip": "Đang tạo tệp ZIP...",
|
||||
"success": "Đã chuyển đổi PDF thành JSON thành công! Tải xuống ZIP đã bắt đầu.",
|
||||
"zipError": "Lỗi tạo ZIP: {{message}}",
|
||||
"workerError": "Lỗi Worker: {{message}}",
|
||||
"getStarted": "Chọn tệp PDF để bắt đầu"
|
||||
}
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Làm cho PDF có thể tìm kiếm và sao chép được."
|
||||
"subtitle": "Làm cho PDF có thể tìm kiếm và sao chép được.",
|
||||
"languagesInDocument": "Ngôn ngữ trong tài liệu",
|
||||
"searchLanguagesPlaceholder": "Tìm ngôn ngữ...",
|
||||
"selectedLabel": "Đã chọn:",
|
||||
"none": "Không có",
|
||||
"advancedSettingsSummary": "Cài đặt nâng cao (Khuyến nghị để cải thiện độ chính xác)",
|
||||
"resolutionLabel": "Độ phân giải",
|
||||
"resolutionStandard": "Tiêu chuẩn (192 DPI)",
|
||||
"resolutionHigh": "Cao (288 DPI)",
|
||||
"resolutionUltra": "Siêu (384 DPI)",
|
||||
"binarizeLabel": "Nhị phân hóa Hình ảnh (Tăng cường độ tương phản cho bản quét sạch)",
|
||||
"embedFullFontsLabel": "Nhúng phông chữ đầy đủ (Tệp lớn hơn, tương thích tốt hơn)",
|
||||
"whitelistPresetLabel": "Cài đặt sẵn danh sách trắng ký tự",
|
||||
"whitelistNone": "Không có (Tất cả ký tự)",
|
||||
"whitelistAlphanumeric": "Chữ và số + Dấu câu cơ bản",
|
||||
"whitelistNumbersCurrency": "Số + Ký hiệu tiền tệ",
|
||||
"whitelistLettersOnly": "Chỉ chữ cái (A-Z, a-z)",
|
||||
"whitelistNumbersOnly": "Chỉ số (0-9)",
|
||||
"whitelistInvoice": "Hóa đơn/Biên lai (số, $, ., -, /)",
|
||||
"whitelistForms": "Biểu mẫu (chữ và số + ký hiệu phổ biến)",
|
||||
"whitelistCustom": "Tùy chỉnh...",
|
||||
"whitelistHelp": "Chỉ những ký tự này sẽ được nhận diện. Để trống cho tất cả ký tự.",
|
||||
"whitelistInputLabel": "Danh sách trắng ký tự (Tùy chọn)",
|
||||
"whitelistInputPlaceholder": "ví dụ: abcdefghijklmnopqrstuvwxyz0123456789$.,",
|
||||
"startButton": "Bắt đầu OCR",
|
||||
"progressInitializing": "Đang khởi tạo...",
|
||||
"resultsTitle": "OCR hoàn thành",
|
||||
"resultsDescription": "PDF có thể tìm kiếm của bạn đã sẵn sàng. Bạn cũng có thể sao chép hoặc tải xuống văn bản đã trích xuất bên dưới.",
|
||||
"copyToClipboard": "Sao chép vào Clipboard",
|
||||
"downloadTxt": "Tải xuống dưới dạng .txt",
|
||||
"downloadSearchablePdf": "Tải xuống PDF có thể tìm kiếm",
|
||||
"statusPrefix": "Trạng thái: {{status}}",
|
||||
"availabilityInvalidConfig": "Triển khai này không cung cấp ngôn ngữ OCR hợp lệ. Xây dựng lại với VITE_TESSERACT_AVAILABLE_LANGUAGES được đặt thành mã Tesseract hợp lệ.",
|
||||
"availabilityBundles": "Triển khai này bao gồm OCR cho: {{languages}}.",
|
||||
"noLanguagesAvailable": "Không có ngôn ngữ OCR nào khả dụng trong triển khai này.",
|
||||
"noLanguagesTitle": "Chưa chọn ngôn ngữ",
|
||||
"noLanguagesMessage": "Vui lòng chọn ít nhất một ngôn ngữ cho OCR.",
|
||||
"noFileTitle": "Không có tệp",
|
||||
"noFileMessage": "Vui lòng tải lên tệp PDF trước.",
|
||||
"languageUnavailableTitle": "Ngôn ngữ OCR không khả dụng",
|
||||
"ocrErrorTitle": "Lỗi OCR",
|
||||
"ocrErrorMessage": "Đã xảy ra lỗi trong quá trình OCR. Worker có thể đã không tải được. Vui lòng thử lại.",
|
||||
"howItWorksTitle": "Cách hoạt động:",
|
||||
"extractTextLabel": "Trích xuất văn bản:",
|
||||
"extractTextDescription": "Sử dụng Tesseract OCR để nhận diện văn bản từ hình ảnh quét hoặc PDF.",
|
||||
"searchableOutputLabel": "Đầu ra có thể tìm kiếm:",
|
||||
"searchableOutputDescription": "Tạo PDF mới với lớp văn bản vô hình, làm cho tài liệu của bạn có thể tìm kiếm hoàn toàn trong khi vẫn giữ được hình thức ban đầu.",
|
||||
"characterFilteringLabel": "Lọc ký tự:",
|
||||
"characterFilteringDescription": "Sử dụng danh sách trắng để lọc các ký tự không mong muốn và cải thiện độ chính xác cho các loại tài liệu cụ thể (hóa đơn, biểu mẫu, v.v.).",
|
||||
"multiLanguageSupportLabel": "Hỗ trợ đa ngôn ngữ:",
|
||||
"multiLanguageSupportDescription": "Chọn nhiều ngôn ngữ cho tài liệu chứa nội dung ngôn ngữ hỗn hợp."
|
||||
},
|
||||
"alternateMix": {
|
||||
"alternateMerge": {
|
||||
"name": "Xen kẽ & Trộn trang",
|
||||
"subtitle": "Gộp PDF bằng cách xen kẽ trang từ mỗi PDF. Giữ nguyên Bookmark."
|
||||
"subtitle": "Gộp PDF bằng cách xen kẽ trang từ mỗi PDF. Giữ nguyên Bookmark.",
|
||||
"retainPageLabels": "Giữ nhãn trang gốc từ mỗi tệp",
|
||||
"retainPageLabelsHint": "Tắt (mặc định): PDF đã hợp nhất sử dụng đánh số trang tự nhiên 1–N. Bật: nhãn trang gốc của từng tệp được giữ lại (có thể tạo ra nhãn trùng lặp)."
|
||||
},
|
||||
"duplexCollate": {
|
||||
"name": "Sắp xếp bản quét hai mặt",
|
||||
"subtitle": "Sắp xếp lại tệp PDF được quét thành hai khối (tất cả mặt trước, rồi tất cả mặt sau) thành đúng thứ tự trước/sau.",
|
||||
"totalPagesLabel": "Tổng số trang:",
|
||||
"splitAfterPageLabel": "Tách sau trang",
|
||||
"splitAfterPagePlaceholder": "vd. 50",
|
||||
"backBlockOrderLabel": "Thứ tự khối mặt sau",
|
||||
"backBlockReverseOption": "Đảo ngược khối mặt sau (thường gặp khi lật chồng giấy)",
|
||||
"backBlockKeepOption": "Giữ nguyên khối mặt sau",
|
||||
"autoSplitButton": "Tự động xác định điểm tách (một nửa)",
|
||||
"exportGroupedLabel": "Xuất tệp theo nhóm dựa trên độ dài tài liệu gốc",
|
||||
"pagesPerDocumentLabel": "Số trang mỗi tài liệu gốc",
|
||||
"groupedHelp": "Nếu bật, kết quả là tệp ZIP chứa một PDF cho mỗi tài liệu được nhóm.",
|
||||
"collateButton": "Sắp xếp PDF",
|
||||
"invalidFileTitle": "Tệp không hợp lệ",
|
||||
"invalidFileMessage": "Vui lòng chọn một tệp PDF.",
|
||||
"loadingPdf": "Đang tải PDF...",
|
||||
"loadErrorMessage": "Không tải được tệp PDF.",
|
||||
"fileMeta": "{{size}} - {{count}} trang",
|
||||
"oddPageWarning": "Số trang lẻ ({{count}}). Bản quét hai mặt phải có số trang chẵn; có thể thiếu hoặc thừa một trang.",
|
||||
"previewSummary": "Khối mặt trước: {{frontCount}} trang, khối mặt sau: {{backCount}} trang. Kết quả: {{outputCount}} trang, theo thứ tự trước/sau.",
|
||||
"previewMismatchWarning": "Độ dài khối mặt trước và mặt sau khác nhau ({{frontCount}} mặt trước so với {{backCount}} mặt sau). {{extraCount}} trang dư ở khối dài hơn sẽ được thêm vào cuối mà không có trang ghép đôi.",
|
||||
"missingFileTitle": "Thiếu tệp",
|
||||
"missingFileMessage": "Vui lòng tải lên PDF có ít nhất 2 trang trước khi xử lý.",
|
||||
"invalidSplitTitle": "Điểm tách không hợp lệ",
|
||||
"invalidSplitMessage": "Điểm tách phải nằm giữa trang 1 và trang {{maxSplit}}.",
|
||||
"unevenConfirmTitle": "Khối không đều",
|
||||
"unevenConfirmMessage": "Khối mặt trước có {{frontCount}} trang và khối mặt sau có {{backCount}} trang.\nĐiều này thường có nghĩa là một trang bị quét hai lần hoặc bị thiếu.\n\n{{extraCount}} trang không ghép đôi sẽ được thêm vào cuối.\n\nVẫn tiếp tục?",
|
||||
"invalidGroupTitle": "Kích thước nhóm không hợp lệ",
|
||||
"invalidGroupMessage": "Vui lòng nhập số trang hợp lệ cho mỗi tài liệu gốc.",
|
||||
"collatingLoader": "Đang sắp xếp bản quét hai mặt...",
|
||||
"successMessage": "Đã tạo PDF đã sắp xếp thành công.",
|
||||
"successGroupedMessage": "Sắp xếp hoàn tất. Đã tạo {{fileCount}} tệp nhóm.",
|
||||
"processErrorMessage": "Không sắp xếp được PDF.",
|
||||
"howItWorksStep1Title": "Tải bản quét lên",
|
||||
"howItWorksStep1": "Thả vào tệp PDF duy nhất chứa tất cả mặt trước rồi đến tất cả mặt sau.",
|
||||
"howItWorksStep2Title": "Đặt điểm tách",
|
||||
"howItWorksStep2": "Đánh dấu nơi khối mặt trước kết thúc, sau đó chọn xem khối mặt sau có cần đảo ngược hay không.",
|
||||
"howItWorksStep3Title": "Sắp xếp và tải xuống",
|
||||
"howItWorksStep3": "Nhận một tệp PDF có các trang xen kẽ, hoặc một tệp ZIP với từng tệp riêng cho mỗi tài liệu gốc.",
|
||||
"faqOddPagesQuestion": "Nếu bản quét của tôi có số trang lẻ thì sao?",
|
||||
"faqOddPagesAnswer": "Bản quét hai mặt phải có số trang chẵn. Nếu không, có thể một trang đã bị quét hai lần hoặc bị bỏ sót. Công cụ sẽ cảnh báo bạn trước khi xử lý, và những trang không ghép đôi sẽ được thêm vào cuối để không mất gì.",
|
||||
"faqBackOrderQuestion": "Tại sao tôi lại giữ nguyên khối mặt sau?",
|
||||
"faqBackOrderAnswer": "Điều đó tùy thuộc vào cách xếp chồng giấy ở lần quét thứ hai. Lật cả chồng giấy sẽ cho các mặt sau theo thứ tự ngược lại, và đó là tùy chọn mặc định. Nếu máy quét trả về chúng theo cùng thứ tự với mặt trước, hãy chọn giữ nguyên khối."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Thêm tệp đính kèm",
|
||||
@@ -660,16 +1000,19 @@
|
||||
"pdfToText": {
|
||||
"name": "PDF sang Văn bản",
|
||||
"subtitle": "Trích xuất văn bản từ tệp PDF và lưu dưới dạng tệp văn bản (.txt). Hỗ trợ nhiều tệp.",
|
||||
"note": "Công cụ này CHỈ hoạt động với các tệp PDF được tạo kỹ thuật số. Đối với tài liệu quét hoặc PDF dựa trên hình ảnh, hãy sử dụng công cụ OCR PDF của chúng tôi.",
|
||||
"convertButton": "Trích xuất văn bản"
|
||||
"noteLabel": "Lưu ý:",
|
||||
"noteText": "Công cụ này CHỈ hoạt động với PDF được tạo kỹ thuật số. Đối với tài liệu quét hoặc PDF dựa trên hình ảnh, hãy sử dụng công cụ OCR PDF của chúng tôi thay thế.",
|
||||
"convertButton": "Trích xuất văn bản",
|
||||
"note": "Công cụ này CHỈ hoạt động với các tệp PDF được tạo kỹ thuật số. Đối với tài liệu quét hoặc PDF dựa trên hình ảnh, hãy sử dụng công cụ OCR PDF của chúng tôi."
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Chữ ký số PDF",
|
||||
"pageTitle": "Chữ ký số PDF - Thêm chữ ký mật mã | BentoPDF",
|
||||
"subtitle": "Thêm chữ ký số mật mã vào PDF của bạn bằng chứng chỉ X.509. Hỗ trợ định dạng PKCS#12 (.pfx, .p12) và PEM. Khóa riêng của bạn không bao giờ rời khỏi trình duyệt.",
|
||||
"certificateSection": "Chứng chỉ",
|
||||
"uploadCert": "Tải lên chứng chỉ (.pfx, .p12)",
|
||||
"uploadCert": "Tải lên chứng chỉ (.pfx, .p12, .pem)",
|
||||
"certPassword": "Mật khẩu chứng chỉ",
|
||||
"privateKeyPassword": "Mật khẩu khóa riêng",
|
||||
"certPasswordPlaceholder": "Nhập mật khẩu chứng chỉ",
|
||||
"certInfo": "Thông tin chứng chỉ",
|
||||
"certSubject": "Chủ thể",
|
||||
@@ -682,8 +1025,71 @@
|
||||
"locationPlaceholder": "ví dụ: Hà Nội, Việt Nam",
|
||||
"contactInfo": "Thông tin liên hệ",
|
||||
"contactPlaceholder": "ví dụ: [email protected]",
|
||||
"visibleSignature": "Chữ ký hiển thị",
|
||||
"visibleSignatureDescription": "Khi được bật, một hộp chữ ký hiển thị xuất hiện trên PDF. Bạn có thể tải lên ảnh/logo hoặc thêm văn bản. Nếu không cung cấp, tên người ký từ chứng chỉ sẽ được hiển thị tự động.",
|
||||
"signatureImage": "Ảnh/Logo chữ ký (Tùy chọn)",
|
||||
"uploadSignatureImage": "Tải lên ảnh (PNG, JPG, WebP)",
|
||||
"signaturePreviewAlt": "Xem trước chữ ký",
|
||||
"remove": "Xóa",
|
||||
"page": "Trang",
|
||||
"firstPage": "Trang đầu",
|
||||
"lastPage": "Trang cuối",
|
||||
"allPages": "Tất cả trang",
|
||||
"customPage": "Trang tùy chỉnh #",
|
||||
"pageNumber": "Trang #",
|
||||
"xPosition": "Vị trí X (trái)",
|
||||
"yPosition": "Vị trí Y (trên)",
|
||||
"width": "Chiều rộng",
|
||||
"height": "Chiều cao",
|
||||
"addTextOverlay": "Thêm lớp phủ văn bản",
|
||||
"text": "Văn bản",
|
||||
"textPlaceholder": "ví dụ: Đã ký số bởi Nguyễn Văn A",
|
||||
"textColor": "Màu văn bản",
|
||||
"fontSize": "Cỡ chữ",
|
||||
"invalidImageTitle": "Ảnh không hợp lệ",
|
||||
"invalidImageMessage": "Vui lòng chọn ảnh PNG, JPG hoặc WebP.",
|
||||
"invalidFileTitle": "Tệp không hợp lệ",
|
||||
"invalidFileMessage": "Vui lòng chọn tệp PDF.",
|
||||
"invalidCertificateTitle": "Chứng chỉ không hợp lệ",
|
||||
"invalidCertificateMessage": "Vui lòng chọn tệp chứng chỉ .pfx, .p12 hoặc .pem.",
|
||||
"certificateLoaded": "Đã tải chứng chỉ",
|
||||
"certificateUnlocked": "Đã mở khóa chứng chỉ",
|
||||
"failedParsePem": "Không thể phân tích tệp PEM",
|
||||
"enterPasswordToUnlock": "Nhập mật khẩu để mở khóa",
|
||||
"invalidPasswordOrCertificate": "Mật khẩu hoặc chứng chỉ không hợp lệ",
|
||||
"incorrectPassword": "Mật khẩu không đúng",
|
||||
"failedParseCertificate": "Không thể phân tích chứng chỉ",
|
||||
"missingDataTitle": "Thiếu dữ liệu",
|
||||
"missingDataMessage": "Vui lòng tải lên cả PDF và chứng chỉ hợp lệ.",
|
||||
"applyingSignature": "Đang áp dụng chữ ký số...",
|
||||
"signingFailedTitle": "Ký thất bại",
|
||||
"chainFetchFailed": "Không thể lấy chuỗi chứng chỉ. Có thể do sự cố mạng hoặc proxy chứng chỉ không khả dụng. Vui lòng kiểm tra kết nối Internet và thử lại. Nếu sự cố vẫn tiếp diễn, hãy liên hệ với bộ phận hỗ trợ.",
|
||||
"failedToSignPdf": "Không thể ký PDF: {{message}}",
|
||||
"defaultSignatureText": "Đã ký số bởi {{signer}}\n{{date}}",
|
||||
"pageCount": "{{count}} trang",
|
||||
"howToStep1Title": "Tải lên PDF",
|
||||
"howToStep1Text": "Chọn tài liệu PDF bạn muốn ký",
|
||||
"howToStep2Title": "Tải lên chứng chỉ",
|
||||
"howToStep2Text": "Cung cấp tệp chứng chỉ .pfx hoặc .p12 và mật khẩu",
|
||||
"howToStep3Title": "Ký & Tải xuống",
|
||||
"howToStep3Text": "Áp dụng chữ ký số và tải xuống PDF đã ký",
|
||||
"relatedEncryptDesc": "Bảo vệ PDF của bạn bằng mật khẩu",
|
||||
"relatedDecryptDesc": "Xóa mật khẩu PDF",
|
||||
"relatedFlattenDesc": "Làm cho chú thích vĩnh viễn",
|
||||
"relatedSanitizeDesc": "Xóa dữ liệu ẩn",
|
||||
"relatedPermissionsDesc": "Đặt quyền PDF",
|
||||
"faqWhatIsQuestion": "Chữ ký số là gì?",
|
||||
"faqWhatIsAnswer": "Chữ ký số là một cơ chế mật mã xác minh tính xác thực và toàn vẹn của tài liệu. Khác với chữ ký vẽ, nó sử dụng mật mã khóa công khai (chứng chỉ X.509) để chứng minh danh tính của người ký.",
|
||||
"faqFormatsQuestion": "Định dạng chứng chỉ nào được hỗ trợ?",
|
||||
"faqFormatsAnswer": "Chúng tôi hỗ trợ chứng chỉ định dạng PKCS#12 (.pfx, .p12) chứa cả chứng chỉ và khóa riêng của bạn trong một tệp được mã hóa duy nhất. Chúng thường được phát hành bởi các cơ quan chứng nhận.",
|
||||
"faqPrivateKeyQuestion": "Khóa riêng của tôi có an toàn không?",
|
||||
"faqPrivateKeyAnswer": "Có! Tất cả quá trình xử lý diễn ra hoàn toàn trong trình duyệt của bạn. Chứng chỉ, khóa riêng và tệp PDF của bạn không bao giờ rời khỏi thiết bị hoặc tải lên bất kỳ máy chủ nào.",
|
||||
"faqValidReadersQuestion": "Chữ ký có hợp lệ trong các trình đọc PDF không?",
|
||||
"faqValidReadersAnswer": "Có, công cụ tạo chữ ký tách rời PKCS#7 chuẩn được nhận dạng bởi tất cả các trình đọc PDF chính. Để xác thực đầy đủ, hãy sử dụng chứng chỉ từ một Cơ quan Chứng nhận đáng tin cậy.",
|
||||
"applySignature": "Áp dụng chữ ký số",
|
||||
"successMessage": "Ký PDF thành công! Chữ ký có thể được xác minh trong bất kỳ trình đọc PDF nào."
|
||||
"successMessage": "Ký PDF thành công! Chữ ký có thể được xác minh trong bất kỳ trình đọc PDF nào.",
|
||||
"internetRequiredTitle": "Yêu cầu kết nối Internet",
|
||||
"internetRequiredDescription": "Việc ký có thể cần lấy thông tin chuỗi chứng chỉ từ máy chủ của nhà phát hành chứng chỉ để xác thực chữ ký."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Xác minh chữ ký PDF",
|
||||
@@ -697,7 +1103,7 @@
|
||||
"tsaSectionTitle": "Máy chủ dấu thời gian (TSA)",
|
||||
"selectTsa": "Chọn máy chủ TSA",
|
||||
"applyTimestamp": "Áp dụng dấu thời gian",
|
||||
"successMessage": "PDF đã được đóng dấu thời gian thành công! Dấu thời gian có thể được xác minh trong Adobe Acrobat và các trình đọc PDF khác."
|
||||
"successMessage": "PDF đã được đóng dấu thời gian thành công! Dấu thời gian có thể được xác minh trong bất kỳ trình đọc PDF nào."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email sang PDF",
|
||||
@@ -772,7 +1178,113 @@
|
||||
"templateLoaded": "Đã tải mẫu \"{{name}}\".",
|
||||
"failedLoadTemplate": "Không thể tải mẫu.",
|
||||
"noSettings": "Không có cài đặt nào có thể cấu hình cho nút này.",
|
||||
"advancedSettings": "Cài đặt nâng cao"
|
||||
"advancedSettings": "Cài đặt nâng cao",
|
||||
"specialNodes": {
|
||||
"pdfInput": {
|
||||
"name": "Nhập PDF",
|
||||
"description": "Tải lên một hoặc nhiều tệp PDF"
|
||||
},
|
||||
"download": {
|
||||
"name": "Tải xuống",
|
||||
"description": "Tự động tải xuống dưới dạng PDF hoặc ZIP"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"noPdfsConnected": "Không có PDF nào kết nối với nút {{node}}",
|
||||
"noPdfInputs": "Không có PDF trong đầu vào",
|
||||
"expectedPdfInput": "Yêu cầu đầu vào PDF",
|
||||
"failedToRenderPage": "Không thể hiển thị trang {{page}}",
|
||||
"failedToGetCanvasContext": "Không thể lấy ngữ cảnh canvas cho trang {{page}}",
|
||||
"failedToRenderPageToImage": "Không thể hiển thị trang {{page}} thành hình ảnh",
|
||||
"noPagesProcessed": "Không có trang nào được xử lý",
|
||||
"cpdfNotConfigured": "CoherentPDF chưa được cấu hình. Vui lòng cấu hình trong Cài đặt nâng cao.",
|
||||
"workerError": "Lỗi worker: {{message}}",
|
||||
"alternateMergeWorkerError": "Lỗi worker hợp nhất xen kẽ: {{message}}",
|
||||
"noPdfFilesUploaded": "Chưa tải lên tệp PDF nào trong nút PDF Input",
|
||||
"failedToLoadFile": "Không thể tải \"{{file}}\" - tệp có thể bị hỏng",
|
||||
"noImagesUploaded": "Chưa tải lên hình ảnh nào trong nút Image Input",
|
||||
"noWordDocsUploaded": "Chưa tải lên tài liệu nào trong nút Word Input",
|
||||
"noExcelUploaded": "Chưa tải lên bảng tính nào trong nút Excel Input",
|
||||
"noPowerPointUploaded": "Chưa tải lên bài thuyết trình nào trong nút PowerPoint Input",
|
||||
"noCbzUploaded": "Chưa tải lên kho lưu trữ truyện tranh nào trong nút CBZ Input",
|
||||
"noEmailUploaded": "Chưa tải lên tệp email nào trong nút Email Input",
|
||||
"noEpubUploaded": "Chưa tải lên tệp EPUB nào trong nút EPUB Input",
|
||||
"noFb2Uploaded": "Chưa tải lên tệp FB2 nào trong nút FB2 Input",
|
||||
"noJsonUploaded": "Chưa tải lên tệp JSON nào trong nút JSON Input",
|
||||
"noMarkdownUploaded": "Chưa tải lên tệp Markdown nào trong nút Markdown Input",
|
||||
"noMobiUploaded": "Chưa tải lên tệp MOBI nào trong nút MOBI Input",
|
||||
"noOdgUploaded": "Chưa tải lên tệp ODG nào trong nút ODG Input",
|
||||
"noPagesUploaded": "Chưa tải lên tệp Pages nào trong nút Pages Input",
|
||||
"noPubUploaded": "Chưa tải lên tệp PUB nào trong nút PUB Input",
|
||||
"noSvgUploaded": "Chưa tải lên tệp SVG nào trong nút SVG Input",
|
||||
"noTextUploaded": "Chưa tải lên tệp văn bản nào trong nút Text Input",
|
||||
"noVsdUploaded": "Chưa tải lên tệp Visio nào trong nút VSD Input",
|
||||
"noWpdUploaded": "Chưa tải lên tệp WPD nào trong nút WPD Input",
|
||||
"noWpsUploaded": "Chưa tải lên tệp WPS nào trong nút WPS Input",
|
||||
"noXmlUploaded": "Chưa tải lên tệp XML nào trong nút XML Input",
|
||||
"noXpsUploaded": "Chưa tải lên tệp XPS nào trong nút XPS Input",
|
||||
"alternateMergeNeedsTwo": "Hợp nhất xen kẽ cần ít nhất hai PDF được kết nối với đầu vào",
|
||||
"cropMarginsExceed": "Lề cắt vượt quá kích thước trang. Hãy giảm các giá trị cắt.",
|
||||
"digitalSignNoCertificate": "Chưa tải chứng chỉ trong nút Chữ ký số",
|
||||
"encryptUserPasswordRequired": "Cần mật khẩu người dùng để mã hóa",
|
||||
"extractImagesNoneFound": "Không tìm thấy hình ảnh nào trong các PDF được kết nối",
|
||||
"invertColorsFailedReadImage": "Không thể đọc dữ liệu hình ảnh",
|
||||
"overlayRequiresPdf": "Nút lớp phủ yêu cầu một đầu vào PDF lớp phủ.",
|
||||
"pdfToCsvNoTables": "Không tìm thấy bảng nào trong PDF",
|
||||
"pdfToXlsxNoTables": "Không tìm thấy bảng nào trong {{file}}",
|
||||
"posterizeFailedTileCanvas": "Không thể lấy ngữ cảnh canvas của ô",
|
||||
"redactNoText": "Bôi đen: chưa chỉ định văn bản để bôi đen",
|
||||
"removeBlankPagesAllBlank": "Tất cả các trang đều trống",
|
||||
"svgFailedToConvert": "Không thể chuyển đổi SVG",
|
||||
"svgFailedToLoad": "Không thể tải SVG",
|
||||
"timestampFailed": "Không thể đóng dấu thời gian qua TSA {{tsa}}: {{message}}",
|
||||
"noOutputNodes": "Không tìm thấy nút đầu ra. Thêm một nút Download để hoàn tất quy trình của bạn.",
|
||||
"circularDependency": "Phát hiện phụ thuộc vòng tròn trong quy trình. Vui lòng xóa bất kỳ vòng lặp nào giữa các nút.",
|
||||
"encryptOrdering": "Nút mã hóa cấp dữ liệu vào \"{{target}}\", có thể thất bại với dữ liệu đã mã hóa. Di chuyển Mã hóa ngay trước nút đầu ra.",
|
||||
"invalidWorkflowFile": "Tệp quy trình không hợp lệ: thiếu mảng nút hoặc kết nối.",
|
||||
"storageQuotaExceeded": "Không thể lưu quy trình: đã vượt quá dung lượng lưu trữ. Hãy thử xóa các mẫu cũ.",
|
||||
"failedToImport": "Không thể nhập quy trình: {{message}}"
|
||||
}
|
||||
},
|
||||
"wasmSettings": {
|
||||
"title": "Cài đặt tính năng nâng cao",
|
||||
"description": "Cấu hình các mô-đun xử lý bên ngoài để kích hoạt các tính năng PDF nâng cao. Các mô-đun này là tùy chọn và được cấp phép riêng.",
|
||||
"status": {
|
||||
"testing": "Đang kiểm tra...",
|
||||
"customOverride": "Ghi đè tùy chỉnh",
|
||||
"preConfigured": "Đã cấu hình sẵn",
|
||||
"notConfigured": "Chưa cấu hình"
|
||||
},
|
||||
"preconfiguredTitle": "Đã cấu hình sẵn và sẵn sàng sử dụng.",
|
||||
"preconfiguredDescription": "Các mô-đun xử lý nâng cao được tải tự động từ CDN. Bạn có thể ghi đè các URL bên dưới nếu cần sử dụng nguồn tùy chỉnh (ví dụ: cho triển khai air-gapped hoặc tự lưu trữ).",
|
||||
"usingDefault": "Sử dụng mặc định: {{url}}",
|
||||
"pymupdfSubtitle": "Engine xử lý tài liệu",
|
||||
"pymupdfFeatures": "Kích hoạt: PDF sang văn bản, Markdown, SVG, DOCX, Excel • Trích xuất hình ảnh/bảng • Chuyển đổi định dạng",
|
||||
"testButton": "Kiểm tra",
|
||||
"recommendedLabel": "Khuyến nghị:",
|
||||
"copyTitle": "Sao chép vào clipboard",
|
||||
"ghostscriptSubtitle": "Engine chuyển đổi PDF/A",
|
||||
"ghostscriptFeatures": "Kích hoạt: Chuyển đổi PDF/A-1b, PDF/A-2b, PDF/A-3b • Phông chữ thành đường viền",
|
||||
"cpdfSubtitle": "Engine Dấu trang & Siêu dữ liệu",
|
||||
"cpdfFeatures": "Kích hoạt: Chia theo Dấu trang • Chỉnh sửa Dấu trang • Siêu dữ liệu PDF",
|
||||
"saveConfiguration": "Lưu cấu hình",
|
||||
"savingConfiguration": "Đang lưu cấu hình...",
|
||||
"savedTitle": "Đã lưu",
|
||||
"savedMessage": "Đã lưu cấu hình thành công!",
|
||||
"errorTitle": "Lỗi",
|
||||
"failedSave": "Không thể lưu cấu hình: {{message}}",
|
||||
"emptyUrlTitle": "URL trống",
|
||||
"emptyUrlMessage": "Vui lòng nhập URL để kiểm tra.",
|
||||
"testSuccessTitle": "Thành công",
|
||||
"connectionSuccess": "Kết nối đến {{package}} thành công!",
|
||||
"connectionFailedTitle": "Kết nối thất bại",
|
||||
"connectionFailedMessage": "Không thể kết nối đến URL.",
|
||||
"resetDefaults": "Đặt lại về mặc định",
|
||||
"resetTitle": "Đặt lại",
|
||||
"resetWithDefaults": "Đã xóa các ghi đè tùy chỉnh. Các giá trị mặc định đã cấu hình sẵn đang hoạt động.",
|
||||
"resetNoDefaults": "Tất cả cấu hình và mô-đun được lưu trong bộ nhớ đệm đã được xóa.",
|
||||
"licenseTitle": "Thông báo giấy phép:",
|
||||
"licenseDescription": "Các mô-đun bên ngoài (PyMuPDF, Ghostscript, CoherentPDF) được cấp phép theo AGPL-3.0 hoặc các giấy phép copyleft tương tự. Bằng cách cấu hình và sử dụng các mô-đun này, bạn đồng ý với các điều khoản giấy phép tương ứng. BentoPDF tương thích với bất kỳ triển khai Ghostscript WASM và PyMuPDF WASM nào tuân theo giao diện mong đợi."
|
||||
},
|
||||
"pdfOverlay": {
|
||||
"name": "Chồng PDF",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user