mirror of
https://github.com/mozilla/pdf.js.git
synced 2026-08-04 13:27:22 +02:00
Compare commits
No commits in common. "master" and "v6.1.200" have entirely different histories.
27
.gitattributes
vendored
27
.gitattributes
vendored
@ -1,24 +1,23 @@
|
||||
# Force Unix line endings for most file formats (except binary files)
|
||||
*.config text eol=lf
|
||||
*.css text eol=lf
|
||||
*.example text eol=lf
|
||||
*.ftl text eol=lf
|
||||
*.html text eol=lf
|
||||
*.js text eol=lf
|
||||
*.json text eol=lf
|
||||
*.link text eol=lf
|
||||
*.jsm text eol=lf
|
||||
*.css text eol=lf
|
||||
*.html text eol=lf
|
||||
*.md text eol=lf
|
||||
*.mjs text eol=lf
|
||||
*.mts text eol=lf
|
||||
*.njk text eol=lf
|
||||
*.py text eol=lf
|
||||
*.svg text eol=lf
|
||||
*.ts text eol=lf
|
||||
*.txt text eol=lf
|
||||
*.ftl text eol=lf
|
||||
*.yml text eol=lf
|
||||
*.json text eol=lf
|
||||
*.config text eol=lf
|
||||
*.inc text eol=lf
|
||||
*.manifest text eol=lf
|
||||
*.rdf text eol=lf
|
||||
*.jade text eol=lf
|
||||
*.coffee text eol=lf
|
||||
|
||||
# PDF files shall not modify CRLF line endings
|
||||
*.pdf -crlf
|
||||
|
||||
# Linguist language overrides
|
||||
*.js linguist-language=JavaScript
|
||||
*.jsm linguist-language=JavaScript
|
||||
*.inc linguist-language=XML
|
||||
|
||||
8
.github/fluent_linter_requirements.txt
vendored
8
.github/fluent_linter_requirements.txt
vendored
@ -1,7 +1 @@
|
||||
# The requirements below can be regenerated with the following one-liner:
|
||||
# `python3 -m venv venv; source venv/bin/activate; pip install -q moz-fluent-linter; pip freeze; deactivate; rm -rf venv`
|
||||
fluent.syntax==0.19.0
|
||||
moz-fluent-linter==0.4.10
|
||||
PyYAML==6.0.3
|
||||
six==1.17.0
|
||||
typing_extensions==4.16.0
|
||||
moz-fluent-linter==0.4.*
|
||||
|
||||
4
.github/font_tests_requirements.txt
vendored
4
.github/font_tests_requirements.txt
vendored
@ -1,3 +1 @@
|
||||
# The requirements below can be regenerated with the following one-liner:
|
||||
# `python3 -m venv venv; source venv/bin/activate; pip install -q fonttools; pip freeze; deactivate; rm -rf venv`
|
||||
fonttools==4.63.0
|
||||
fonttools==4.*
|
||||
|
||||
8
.github/workflows/ci.yml
vendored
8
.github/workflows/ci.yml
vendored
@ -16,13 +16,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
@ -31,7 +31,7 @@ jobs:
|
||||
run: npm ci
|
||||
|
||||
- name: Restore cached PDF files
|
||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||
with:
|
||||
path: test/pdfs/*.pdf
|
||||
key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }}
|
||||
@ -46,7 +46,7 @@ jobs:
|
||||
run: npx gulp unittestcli --coverage --coverage-output build/coverage/unitcli
|
||||
|
||||
- name: Save cached PDF files
|
||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||
with:
|
||||
path: test/pdfs/*.pdf
|
||||
key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }}
|
||||
|
||||
8
.github/workflows/codeql.yml
vendored
8
.github/workflows/codeql.yml
vendored
@ -18,19 +18,19 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2
|
||||
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
queries: security-and-quality
|
||||
|
||||
- name: Autobuild CodeQL
|
||||
uses: github/codeql-action/autobuild@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2
|
||||
uses: github/codeql-action/autobuild@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
|
||||
|
||||
- name: Perform CodeQL analysis
|
||||
uses: github/codeql-action/analyze@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2
|
||||
uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
|
||||
|
||||
10
.github/workflows/coverage_browser_tests.yml
vendored
10
.github/workflows/coverage_browser_tests.yml
vendored
@ -4,7 +4,6 @@ on:
|
||||
paths:
|
||||
- 'gulpfile.mjs'
|
||||
- 'external/**'
|
||||
- 'package-lock.json'
|
||||
- 'src/**'
|
||||
- 'test/images/**'
|
||||
- 'test/pdfs/**'
|
||||
@ -22,7 +21,6 @@ on:
|
||||
paths:
|
||||
- 'gulpfile.mjs'
|
||||
- 'external/**'
|
||||
- 'package-lock.json'
|
||||
- 'src/**'
|
||||
- 'test/images/**'
|
||||
- 'test/pdfs/**'
|
||||
@ -55,13 +53,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
@ -70,7 +68,7 @@ jobs:
|
||||
run: npm ci
|
||||
|
||||
- name: Restore cached PDF files
|
||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||
with:
|
||||
path: test/pdfs/*.pdf
|
||||
key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }}
|
||||
@ -82,7 +80,7 @@ jobs:
|
||||
run: npx gulp botbrowsertest --headless -j$(nproc) --coverage --coverage-output build/coverage/browser --noChrome
|
||||
|
||||
- name: Save cached PDF files
|
||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||
with:
|
||||
path: test/pdfs/*.pdf
|
||||
key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }}
|
||||
|
||||
6
.github/workflows/fluent_linter.yml
vendored
6
.github/workflows/fluent_linter.yml
vendored
@ -4,7 +4,6 @@ on:
|
||||
paths:
|
||||
- 'l10n/en-US/**.ftl'
|
||||
- '.github/fluent_linter_config.yml'
|
||||
- '.github/fluent_linter_requirements.txt'
|
||||
- '.github/workflows/fluent_linter.yml'
|
||||
branches:
|
||||
- master
|
||||
@ -12,7 +11,6 @@ on:
|
||||
paths:
|
||||
- 'l10n/en-US/**.ftl'
|
||||
- '.github/fluent_linter_config.yml'
|
||||
- '.github/fluent_linter_requirements.txt'
|
||||
- '.github/workflows/fluent_linter.yml'
|
||||
branches:
|
||||
- master
|
||||
@ -27,12 +25,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Python 3.14
|
||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
||||
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||
with:
|
||||
python-version: '3.14'
|
||||
cache: 'pip'
|
||||
|
||||
10
.github/workflows/font_tests.yml
vendored
10
.github/workflows/font_tests.yml
vendored
@ -4,11 +4,9 @@ on:
|
||||
paths:
|
||||
- 'gulpfile.mjs'
|
||||
- 'external/**'
|
||||
- 'package-lock.json'
|
||||
- 'src/**'
|
||||
- 'test/test.mjs'
|
||||
- 'test/font/**'
|
||||
- '.github/font_tests_requirements.txt'
|
||||
- '.github/workflows/font_tests.yml'
|
||||
branches:
|
||||
- master
|
||||
@ -16,11 +14,9 @@ on:
|
||||
paths:
|
||||
- 'gulpfile.mjs'
|
||||
- 'external/**'
|
||||
- 'package-lock.json'
|
||||
- 'src/**'
|
||||
- 'test/test.mjs'
|
||||
- 'test/font/**'
|
||||
- '.github/font_tests_requirements.txt'
|
||||
- '.github/workflows/font_tests.yml'
|
||||
branches:
|
||||
- master
|
||||
@ -49,13 +45,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
@ -64,7 +60,7 @@ jobs:
|
||||
run: npm ci
|
||||
|
||||
- name: Use Python 3.14
|
||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
||||
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.0.2
|
||||
with:
|
||||
python-version: '3.14'
|
||||
cache: 'pip'
|
||||
|
||||
10
.github/workflows/integration_tests.yml
vendored
10
.github/workflows/integration_tests.yml
vendored
@ -4,7 +4,6 @@ on:
|
||||
paths:
|
||||
- 'gulpfile.mjs'
|
||||
- 'external/**'
|
||||
- 'package-lock.json'
|
||||
- 'src/**'
|
||||
- 'test/test.mjs'
|
||||
- 'test/integration/**'
|
||||
@ -16,7 +15,6 @@ on:
|
||||
paths:
|
||||
- 'gulpfile.mjs'
|
||||
- 'external/**'
|
||||
- 'package-lock.json'
|
||||
- 'src/**'
|
||||
- 'test/test.mjs'
|
||||
- 'test/integration/**'
|
||||
@ -49,13 +47,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
@ -64,7 +62,7 @@ jobs:
|
||||
run: npm ci
|
||||
|
||||
- name: Restore cached PDF files
|
||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||
with:
|
||||
path: test/pdfs/*.pdf
|
||||
key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }}
|
||||
@ -89,7 +87,7 @@ jobs:
|
||||
run: xvfb-run -a --server-args="-screen 0, 1920x1080x24" npx gulp integrationtest --coverage --coverage-output build/coverage/integration ${{ matrix.skip }}
|
||||
|
||||
- name: Save cached PDF files
|
||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||
with:
|
||||
path: test/pdfs/*.pdf
|
||||
key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }}
|
||||
|
||||
4
.github/workflows/lint.yml
vendored
4
.github/workflows/lint.yml
vendored
@ -15,13 +15,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
|
||||
2
.github/workflows/notify-pdf-sync.yml
vendored
2
.github/workflows/notify-pdf-sync.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 1
|
||||
persist-credentials: false
|
||||
|
||||
4
.github/workflows/prefs_tests.yml
vendored
4
.github/workflows/prefs_tests.yml
vendored
@ -15,13 +15,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
|
||||
185
.github/workflows/publish_coverage_index.yml
vendored
185
.github/workflows/publish_coverage_index.yml
vendored
@ -1,185 +0,0 @@
|
||||
name: Publish per-test coverage index
|
||||
# Builds the per-test coverage index (which ref test exercises which source
|
||||
# line/function) and publishes it to the gh-pages branch of mozilla/pdf.js.refs,
|
||||
# where it's served at:
|
||||
# https://mozilla.github.io/pdf.js.refs/per-test-index.json
|
||||
# The index can then be queried with `npx gulp coverage_search`.
|
||||
#
|
||||
# This only runs when something is merged into master (push event); the build is
|
||||
# heavy (a full browser test run), so it's deliberately kept off pull requests.
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'gulpfile.mjs'
|
||||
- 'external/**'
|
||||
- 'package-lock.json'
|
||||
- 'src/**'
|
||||
- 'test/images/**'
|
||||
- 'test/pdfs/**'
|
||||
- 'test/resources/**'
|
||||
- 'test/*.css'
|
||||
- 'test/driver.js'
|
||||
- 'test/test.mjs'
|
||||
- 'test/test_manifest.json'
|
||||
- 'test/test_slave.html'
|
||||
- 'web/**'
|
||||
- '.github/workflows/publish_coverage_index.yml'
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
concurrency:
|
||||
group: publish-coverage-index-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
if: github.ref == 'refs/heads/master'
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
environment: sync_pdfs
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [lts/*]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
fetch-depth: 1
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Restore cached PDF files
|
||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
with:
|
||||
path: test/pdfs/*.pdf
|
||||
key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }}
|
||||
restore-keys: |
|
||||
cached-pdf-files-
|
||||
enableCrossOsArchive: true
|
||||
|
||||
- name: Build the per-test coverage index
|
||||
run: npx gulp botbrowsertest --headless -j$(nproc) --coverage-per-test --coverage-output build/coverage/browser --noChrome
|
||||
|
||||
- name: Save cached PDF files
|
||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
with:
|
||||
path: test/pdfs/*.pdf
|
||||
key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }}
|
||||
enableCrossOsArchive: true
|
||||
|
||||
- name: Check current master
|
||||
id: current-master
|
||||
run: |
|
||||
set -euo pipefail
|
||||
git fetch --no-tags --depth=1 origin master:refs/remotes/origin/master
|
||||
current_master="$(git rev-parse refs/remotes/origin/master)"
|
||||
if [ "$GITHUB_SHA" = "$current_master" ]; then
|
||||
echo "current=true" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "::notice::Skipping publish because ${GITHUB_SHA} is no longer origin/master (${current_master})"
|
||||
echo "current=false" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Generate app token for pdf.js.refs
|
||||
if: steps.current-master.outputs.current == 'true'
|
||||
id: refs-token
|
||||
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
with:
|
||||
client-id: ${{ secrets.CLIENT_ID }}
|
||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||
owner: mozilla
|
||||
repositories: pdf.js.refs
|
||||
# Least privilege: the token only needs to push to gh-pages.
|
||||
permission-contents: write
|
||||
|
||||
- name: Publish per-test coverage index
|
||||
if: steps.current-master.outputs.current == 'true'
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.refs-token.outputs.token }}
|
||||
INDEX_FILE: build/coverage/browser/per-test-index.json
|
||||
run: |
|
||||
set -euo pipefail
|
||||
if [ ! -f "$INDEX_FILE" ]; then
|
||||
# A successful per-test run always writes the index; test.mjs only
|
||||
# skips it when no per-test coverage was collected at all, so a
|
||||
# missing file here means a broken build, not "nothing to publish".
|
||||
echo "::error::Per-test coverage index not found at $INDEX_FILE"
|
||||
exit 1
|
||||
fi
|
||||
repo_url="https://github.com/mozilla/pdf.js.refs.git"
|
||||
# Authenticate with a short-lived header rather than embedding the
|
||||
# token in the remote URL, so it never persists in .git/config.
|
||||
auth_header="Authorization: basic $(printf 'x-access-token:%s' "$GH_TOKEN" | base64 | tr -d '\n')"
|
||||
git_refs() { git -c http.extraheader="$auth_header" "$@"; }
|
||||
stage_index() {
|
||||
cp "$GITHUB_WORKSPACE/$INDEX_FILE" per-test-index.json
|
||||
git add per-test-index.json
|
||||
}
|
||||
commit_index() {
|
||||
git \
|
||||
-c user.name="github-actions[bot]" \
|
||||
-c user.email="41898282+github-actions[bot]@users.noreply.github.com" \
|
||||
commit -q -m "Update per-test coverage index for ${GITHUB_SHA}"
|
||||
}
|
||||
work="$(mktemp -d)"
|
||||
# Does gh-pages already exist? Probe explicitly so a transient network
|
||||
# error isn't mistaken for "first run" (the orphan path below discards
|
||||
# whatever else the branch holds).
|
||||
ls_status=0
|
||||
git_refs ls-remote --exit-code --heads "$repo_url" gh-pages >/dev/null 2>&1 || ls_status=$?
|
||||
case "$ls_status" in
|
||||
0)
|
||||
# Reuse gh-pages, keeping any other files it holds.
|
||||
git_refs clone --depth=1 --branch gh-pages "$repo_url" "$work"
|
||||
cd "$work"
|
||||
;;
|
||||
2)
|
||||
# First run: start a fresh orphan branch without cloning history.
|
||||
git init -q "$work"
|
||||
cd "$work"
|
||||
git remote add origin "$repo_url"
|
||||
git checkout -q --orphan gh-pages
|
||||
;;
|
||||
*)
|
||||
echo "::error::Could not query gh-pages on pdf.js.refs (git ls-remote exit ${ls_status})"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
stage_index
|
||||
if git diff --cached --quiet; then
|
||||
echo "No changes to publish"
|
||||
exit 0
|
||||
fi
|
||||
commit_index
|
||||
# Retry against a concurrent update to gh-pages: re-sync onto the new
|
||||
# tip, re-apply our index (latest build wins), and push again.
|
||||
for attempt in 1 2 3; do
|
||||
if git_refs push origin gh-pages; then
|
||||
exit 0
|
||||
fi
|
||||
if [ "$attempt" -eq 3 ]; then
|
||||
echo "::error::Failed to push the per-test coverage index after ${attempt} attempts"
|
||||
exit 1
|
||||
fi
|
||||
echo "gh-pages advanced during the run; re-syncing and retrying (attempt ${attempt})"
|
||||
git_refs fetch --depth=1 origin gh-pages
|
||||
git reset --hard FETCH_HEAD
|
||||
stage_index
|
||||
if git diff --cached --quiet; then
|
||||
echo "No changes after re-sync"
|
||||
exit 0
|
||||
fi
|
||||
commit_index
|
||||
done
|
||||
4
.github/workflows/publish_release.yml
vendored
4
.github/workflows/publish_release.yml
vendored
@ -17,13 +17,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
|
||||
10
.github/workflows/publish_website.yml
vendored
10
.github/workflows/publish_website.yml
vendored
@ -6,12 +6,6 @@ on:
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
# Allow only one concurrent deployment, without cancelling in-progress runs, so
|
||||
# that an in-flight Pages deployment is allowed to finish before the next starts.
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
@ -23,13 +17,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
|
||||
4
.github/workflows/types_tests.yml
vendored
4
.github/workflows/types_tests.yml
vendored
@ -15,13 +15,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
|
||||
10
.github/workflows/unit_tests.yml
vendored
10
.github/workflows/unit_tests.yml
vendored
@ -4,7 +4,6 @@ on:
|
||||
paths:
|
||||
- 'gulpfile.mjs'
|
||||
- 'external/**'
|
||||
- 'package-lock.json'
|
||||
- 'src/**'
|
||||
- 'test/test.mjs'
|
||||
- 'test/unit/**'
|
||||
@ -16,7 +15,6 @@ on:
|
||||
paths:
|
||||
- 'gulpfile.mjs'
|
||||
- 'external/**'
|
||||
- 'package-lock.json'
|
||||
- 'src/**'
|
||||
- 'test/test.mjs'
|
||||
- 'test/unit/**'
|
||||
@ -49,13 +47,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
@ -64,7 +62,7 @@ jobs:
|
||||
run: npm ci
|
||||
|
||||
- name: Restore cached PDF files
|
||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||
with:
|
||||
path: test/pdfs/*.pdf
|
||||
key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }}
|
||||
@ -76,7 +74,7 @@ jobs:
|
||||
run: npx gulp unittest --headless --coverage --coverage-output build/coverage/unit ${{ matrix.skip }}
|
||||
|
||||
- name: Save cached PDF files
|
||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||
with:
|
||||
path: test/pdfs/*.pdf
|
||||
key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }}
|
||||
|
||||
4
.github/workflows/update_locales.yml
vendored
4
.github/workflows/update_locales.yml
vendored
@ -23,13 +23,13 @@ jobs:
|
||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
token: ${{ steps.app-token.outputs.token }}
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use Node.js LTS
|
||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
with:
|
||||
node-version: lts/*
|
||||
cache: 'npm'
|
||||
|
||||
30
README.md
30
README.md
@ -30,9 +30,6 @@ latest JavaScript features; please also see [this wiki page](https://github.com/
|
||||
|
||||
+ Older browsers: https://mozilla.github.io/pdf.js/legacy/web/viewer.html
|
||||
|
||||
> [!NOTE]
|
||||
> Open new files via the menu (the ">>" icon) or by dragging and dropping.
|
||||
|
||||
### Browser Extensions
|
||||
|
||||
#### Firefox
|
||||
@ -139,30 +136,13 @@ browsable HTML report instead, or pass several formats at once, e.g.
|
||||
|
||||
### Finding which tests cover a given line
|
||||
|
||||
`coverage_search` lists the ref tests that exercised a specific source line or
|
||||
function. It uses the per-test index (`per-test-index.json`) that is rebuilt on
|
||||
every push to `master` and published to the
|
||||
[`pdf.js.refs`](https://github.com/mozilla/pdf.js.refs/tree/gh-pages)
|
||||
repository. The index is downloaded on demand, cached locally, and only
|
||||
re-downloaded when it has changed, so no local coverage build is required:
|
||||
|
||||
$ npx gulp coverage_search --code="canvas.js::205"
|
||||
$ npx gulp coverage_search --code="canvas.js::drawImageAtIntegerCoords"
|
||||
|
||||
To run — or regenerate the reference images for — only the ref tests that touch
|
||||
a given line or function, pass the same `--code` option to a browser test or
|
||||
`makeref` task:
|
||||
|
||||
$ npx gulp browsertest --code="canvas.js::205"
|
||||
$ npx gulp makeref --code="canvas.js::205"
|
||||
|
||||
Pass `--no-download` to reuse the locally cached index without contacting the
|
||||
network. The index can also be built and queried locally (the CI job that
|
||||
publishes it builds it the same way):
|
||||
Run a browser test task with `--coverage-per-test` to build an index
|
||||
(`per-test-index.json`) in the coverage directory, then query it to list the
|
||||
tests that exercised a specific source line or function:
|
||||
|
||||
$ npx gulp botbrowsertest --coverage-per-test
|
||||
$ npx gulp coverage_search --code="canvas.js::205" \
|
||||
--index=build/coverage/per-test-index.json --no-download
|
||||
$ npx gulp coverage_search --code="canvas.js::205"
|
||||
$ npx gulp coverage_search --code="canvas.js::drawImageAtIntegerCoords"
|
||||
|
||||
### Continuous integration
|
||||
|
||||
|
||||
@ -178,11 +178,6 @@ export default [
|
||||
"unicorn/prefer-dom-node-remove": "error",
|
||||
"unicorn/prefer-import-meta-properties": "error",
|
||||
"unicorn/prefer-includes": "error",
|
||||
"unicorn/logical-assignment-operators": [
|
||||
"error",
|
||||
"always",
|
||||
{ enforceForIfStatements: true },
|
||||
],
|
||||
"unicorn/prefer-logical-operator-over-ternary": "error",
|
||||
"unicorn/prefer-modern-dom-apis": "error",
|
||||
"unicorn/prefer-modern-math-apis": "error",
|
||||
|
||||
@ -48,7 +48,7 @@ const jpegData = jpegImage.getData({
|
||||
//
|
||||
const imageData = jpegCtx.createImageData(width, height);
|
||||
const imageBytes = imageData.data;
|
||||
for (let j = 0, k = 0, jj = width * height * 4; j < jj;) {
|
||||
for (let j = 0, k = 0, jj = width * height * 4; j < jj; ) {
|
||||
imageBytes[j++] = jpegData[k++];
|
||||
imageBytes[j++] = jpegData[k++];
|
||||
imageBytes[j++] = jpegData[k++];
|
||||
|
||||
@ -192,7 +192,7 @@ function renderDefaultZoomValue(shortDescription) {
|
||||
document.getElementById("settings-boxes").append(wrapper);
|
||||
|
||||
function renderPreference(value) {
|
||||
value ||= "auto";
|
||||
value = value || "auto";
|
||||
select.value = value;
|
||||
var customOption = select.querySelector("option.custom-zoom");
|
||||
if (select.selectedIndex === -1 && value) {
|
||||
|
||||
@ -150,7 +150,7 @@ limitations under the License.
|
||||
*/
|
||||
function didUpdateSinceLastCheck() {
|
||||
var chromeVersion = /Chrome\/(\d+)\./.exec(navigator.userAgent);
|
||||
chromeVersion &&= chromeVersion[1];
|
||||
chromeVersion = chromeVersion && chromeVersion[1];
|
||||
if (!chromeVersion || localStorage.telemetryLastVersion === chromeVersion) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -319,16 +319,6 @@ function babelPluginStripSrcPath() {
|
||||
};
|
||||
}
|
||||
|
||||
function babelPluginAddHeaderComment(babel, { header }) {
|
||||
return {
|
||||
visitor: {
|
||||
Program(path) {
|
||||
path.addComment("leading", header);
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function preprocessPDFJSCode(ctx, content) {
|
||||
return transformSync(content, {
|
||||
configFile: false,
|
||||
@ -337,7 +327,6 @@ function preprocessPDFJSCode(ctx, content) {
|
||||
}
|
||||
|
||||
export {
|
||||
babelPluginAddHeaderComment,
|
||||
babelPluginPDFJSPreprocessor,
|
||||
babelPluginStripSrcPath,
|
||||
preprocessPDFJSCode,
|
||||
|
||||
23
external/builder/builder.mjs
vendored
23
external/builder/builder.mjs
vendored
@ -73,7 +73,10 @@ function preprocess(inFilename, outFilename, defines) {
|
||||
const out = [];
|
||||
let i = 0;
|
||||
function readLine() {
|
||||
return i < totalLines ? lines[i++] : null;
|
||||
if (i < totalLines) {
|
||||
return lines[i++];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
const writeLine =
|
||||
typeof outFilename === "function"
|
||||
@ -110,9 +113,16 @@ function preprocess(inFilename, outFilename, defines) {
|
||||
const realPath = fs.realpathSync(inFilename);
|
||||
const dir = path.dirname(realPath);
|
||||
try {
|
||||
const fullpath = file.startsWith("$ROOT/")
|
||||
? path.join(__dirname, "../..", file.substring("$ROOT/".length))
|
||||
: path.join(dir, file);
|
||||
let fullpath;
|
||||
if (file.indexOf("$ROOT/") === 0) {
|
||||
fullpath = path.join(
|
||||
__dirname,
|
||||
"../..",
|
||||
file.substring("$ROOT/".length)
|
||||
);
|
||||
} else {
|
||||
fullpath = path.join(dir, file);
|
||||
}
|
||||
preprocess(fullpath, writeLine, defines);
|
||||
} catch (e) {
|
||||
if (e.code === "ENOENT") {
|
||||
@ -124,7 +134,10 @@ function preprocess(inFilename, outFilename, defines) {
|
||||
function expand(line) {
|
||||
line = line.replaceAll(/__\w+__/g, function (variable) {
|
||||
variable = variable.substring(2, variable.length - 2);
|
||||
return variable in defines ? defines[variable] : "";
|
||||
if (variable in defines) {
|
||||
return defines[variable];
|
||||
}
|
||||
return "";
|
||||
});
|
||||
writeLine(line);
|
||||
}
|
||||
|
||||
169
external/ccov/coverage_search.mjs
vendored
169
external/ccov/coverage_search.mjs
vendored
@ -20,46 +20,26 @@ import path from "path";
|
||||
const __dirname = import.meta.dirname;
|
||||
const PROJECT_ROOT = path.join(__dirname, "../..");
|
||||
|
||||
// The per-test coverage index (which ref test exercises which source
|
||||
// line/function) is rebuilt on every push to master and published to the
|
||||
// gh-pages branch of the pdf.js.refs repository.
|
||||
const PER_TEST_INDEX_URL =
|
||||
"https://raw.githubusercontent.com/mozilla/pdf.js.refs/gh-pages/per-test-index.json";
|
||||
|
||||
let values;
|
||||
try {
|
||||
({ values } = parseArgs({
|
||||
args: process.argv.slice(2),
|
||||
options: {
|
||||
code: { type: "string" },
|
||||
index: { type: "string", default: "build/per-test-index.json" },
|
||||
"no-download": { type: "boolean", default: false },
|
||||
help: { type: "boolean", short: "h", default: false },
|
||||
},
|
||||
}));
|
||||
} catch (error) {
|
||||
// parseArgs is strict, so an unknown/renamed option (e.g. the removed
|
||||
// --coverage-dir) would otherwise abort with an uncaught stack trace.
|
||||
console.error(`Error: ${error.message}`);
|
||||
console.error("Run with --help to see the available options.");
|
||||
process.exit(1);
|
||||
}
|
||||
const { values } = parseArgs({
|
||||
args: process.argv.slice(2),
|
||||
options: {
|
||||
code: { type: "string" },
|
||||
"coverage-dir": { type: "string", default: "build/coverage" },
|
||||
help: { type: "boolean", short: "h", default: false },
|
||||
},
|
||||
});
|
||||
|
||||
if (values.help || !values.code) {
|
||||
console.log(
|
||||
"Usage: coverage_search.mjs --code=<file>::<line|function> [--index=<path>] [--no-download]\n\n" +
|
||||
"Usage: coverage_search.mjs --code=<file>::<line|function> [--coverage-dir=<path>]\n\n" +
|
||||
" --code Source file and line number or function name to search for.\n" +
|
||||
" Examples:\n" +
|
||||
" --code=canvas.js::205\n" +
|
||||
" --code=canvas.js::drawImageAtIntegerCoords\n" +
|
||||
" --index Where to cache or read the per-test index.\n" +
|
||||
" [build/per-test-index.json]\n" +
|
||||
" --no-download Don't contact the network; use the cached index as-is.\n\n" +
|
||||
" --coverage-dir Coverage directory containing per-test-index.json [build/coverage]\n\n" +
|
||||
"Prints to stdout the IDs of tests whose coverage includes the given line or\n" +
|
||||
"function (one ID per line).\n\n" +
|
||||
"The index is downloaded from the pdf.js.refs repository and cached locally;\n" +
|
||||
"it is only re-downloaded when the published file has changed.\n" +
|
||||
`Source: ${PER_TEST_INDEX_URL}`
|
||||
"function (one ID per line).\n" +
|
||||
"Run browsertest with --coverage-per-test first to generate the index."
|
||||
);
|
||||
process.exit(values.help ? 0 : 1);
|
||||
}
|
||||
@ -78,129 +58,18 @@ const isLine = /^\d+$/.test(location);
|
||||
const lineNum = isLine ? parseInt(location, 10) : null;
|
||||
const funcName = isLine ? null : location;
|
||||
|
||||
const indexPath = path.isAbsolute(values.index)
|
||||
? values.index
|
||||
: path.join(PROJECT_ROOT, values.index);
|
||||
// The ETag of the cached copy is stored alongside it, so the next run can ask
|
||||
// the server (via If-None-Match) to only re-send the file when it has changed.
|
||||
const etagPath = `${indexPath}.etag`;
|
||||
|
||||
// Refreshes the locally cached index from the published copy, downloading it
|
||||
// only when it has changed since the last run. When the network is unavailable
|
||||
// a previously cached copy is reused if present.
|
||||
async function refreshIndex() {
|
||||
if (values["no-download"]) {
|
||||
return; // Freshness check disabled; the read below validates existence.
|
||||
}
|
||||
|
||||
const hasCached = fs.existsSync(indexPath);
|
||||
|
||||
// On any download failure, fall back to a previously cached copy when one
|
||||
// exists; otherwise there's nothing to search, so fail.
|
||||
const fallbackOrFail = reason => {
|
||||
if (hasCached) {
|
||||
console.error(
|
||||
`Warning: couldn't refresh per-test index (${reason}); using the cached copy.`
|
||||
);
|
||||
return;
|
||||
}
|
||||
console.error(`Error: couldn't download per-test index (${reason}).`);
|
||||
process.exit(1);
|
||||
};
|
||||
|
||||
const headers = new Headers();
|
||||
if (hasCached && fs.existsSync(etagPath)) {
|
||||
const etag = fs.readFileSync(etagPath, "utf8").trim();
|
||||
// Only forward a syntactically valid HTTP ETag (RFC 7232), so the cached
|
||||
// file's contents can't be used to inject arbitrary data into the request.
|
||||
if (/^(?:W\/)?"[\x21\x23-\x7e]*"$/.test(etag)) {
|
||||
headers.set("If-None-Match", etag);
|
||||
}
|
||||
}
|
||||
|
||||
let response;
|
||||
try {
|
||||
console.log(`Fetching per-test index from ${PER_TEST_INDEX_URL} ...`);
|
||||
response = await fetch(PER_TEST_INDEX_URL, { headers });
|
||||
} catch (error) {
|
||||
fallbackOrFail(error.message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (response.status === 304) {
|
||||
console.log("Per-test index is up to date.");
|
||||
return;
|
||||
}
|
||||
if (!response.ok) {
|
||||
fallbackOrFail(`HTTP ${response.status}`);
|
||||
return;
|
||||
}
|
||||
|
||||
let text;
|
||||
try {
|
||||
text = await response.text();
|
||||
} catch (error) {
|
||||
fallbackOrFail(error.message);
|
||||
return;
|
||||
}
|
||||
|
||||
// Parse the payload before caching it, and cache the re-serialized result
|
||||
// rather than the raw response body: only well-formed JSON produced by our
|
||||
// own JSON.stringify is ever written to disk.
|
||||
let serialized;
|
||||
try {
|
||||
serialized = JSON.stringify(JSON.parse(text));
|
||||
} catch {
|
||||
fallbackOrFail("the downloaded index is not valid JSON");
|
||||
return;
|
||||
}
|
||||
|
||||
// Write to a temporary file and rename it into place.
|
||||
try {
|
||||
fs.mkdirSync(path.dirname(indexPath), { recursive: true });
|
||||
const tmpPath = `${indexPath}.${process.pid}.tmp`;
|
||||
fs.writeFileSync(tmpPath, serialized);
|
||||
fs.renameSync(tmpPath, indexPath);
|
||||
|
||||
const etag = response.headers.get("etag");
|
||||
if (etag) {
|
||||
fs.writeFileSync(etagPath, etag);
|
||||
} else {
|
||||
fs.rmSync(etagPath, { force: true });
|
||||
}
|
||||
} catch (error) {
|
||||
// A write failure (disk full, read-only dir, ...) shouldn't be fatal when
|
||||
// a usable cached copy already exists.
|
||||
fallbackOrFail(error.message);
|
||||
return;
|
||||
}
|
||||
console.log(`Per-test index updated (${serialized.length} bytes).`);
|
||||
}
|
||||
|
||||
await refreshIndex();
|
||||
const coverageDir = path.isAbsolute(values["coverage-dir"])
|
||||
? values["coverage-dir"]
|
||||
: path.join(PROJECT_ROOT, values["coverage-dir"]);
|
||||
|
||||
const indexPath = path.join(coverageDir, "per-test-index.json");
|
||||
if (!fs.existsSync(indexPath)) {
|
||||
console.error(`Error: per-test index not found: ${indexPath}`);
|
||||
console.error(
|
||||
"Build it locally (gulp botbrowsertest --coverage-per-test) or omit " +
|
||||
"--no-download to fetch it from the pdf.js.refs repository."
|
||||
);
|
||||
console.error(`Error: index file not found: ${indexPath}`);
|
||||
console.error("Run browsertest with --coverage-per-test first.");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
let ids, files;
|
||||
try {
|
||||
({ ids, files } = JSON.parse(fs.readFileSync(indexPath, "utf8")));
|
||||
} catch (error) {
|
||||
console.error(
|
||||
`Error: couldn't read per-test index at ${indexPath}: ${error.message}`
|
||||
);
|
||||
console.error(
|
||||
"The cached index may be corrupt; delete it and re-run without " +
|
||||
"--no-download to refetch it."
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
const { ids, files } = JSON.parse(fs.readFileSync(indexPath, "utf8"));
|
||||
|
||||
// Find the file entry whose path matches fileName.
|
||||
let fileEntry = null;
|
||||
|
||||
2
external/cmapscompress/compress.mjs
vendored
2
external/cmapscompress/compress.mjs
vendored
@ -386,7 +386,7 @@ function writeNumber(n) {
|
||||
if (buffer > 0) {
|
||||
s = writeByte((buffer & 0x7f) | (s.length > 0 ? 0x80 : 0)) + s;
|
||||
}
|
||||
while (s.startsWith("80")) {
|
||||
while (s.indexOf("80") === 0) {
|
||||
s = s.substring(2);
|
||||
}
|
||||
return s;
|
||||
|
||||
45
external/qcms/qcms.js
vendored
45
external/qcms/qcms.js
vendored
@ -1,5 +1,5 @@
|
||||
/* THIS FILE IS GENERATED - DO NOT EDIT */
|
||||
import { copy_result } from './qcms_utils.js';
|
||||
import { copy_result, copy_rgb, make_cssRGB } from './qcms_utils.js';
|
||||
|
||||
|
||||
/**
|
||||
@ -25,20 +25,16 @@ export const Intent = Object.freeze({
|
||||
});
|
||||
|
||||
/**
|
||||
* Converts `src` and hands the result to `copy_result`, laid out as RGB, or as
|
||||
* RGBA with an opaque alpha when `add_alpha` is set.
|
||||
*
|
||||
* # Safety
|
||||
*
|
||||
* This function is called directly from JavaScript.
|
||||
* @param {number} transformer
|
||||
* @param {Uint8Array} src
|
||||
* @param {boolean} add_alpha
|
||||
*/
|
||||
export function qcms_convert_array(transformer, src, add_alpha) {
|
||||
export function qcms_convert_array(transformer, src) {
|
||||
const ptr0 = passArray8ToWasm0(src, wasm.__wbindgen_malloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
wasm.qcms_convert_array(transformer, ptr0, len0, add_alpha);
|
||||
wasm.qcms_convert_array(transformer, ptr0, len0);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -50,11 +46,10 @@ export function qcms_convert_array(transformer, src, add_alpha) {
|
||||
* @param {number} src2
|
||||
* @param {number} src3
|
||||
* @param {number} src4
|
||||
* @returns {number}
|
||||
* @param {boolean} css
|
||||
*/
|
||||
export function qcms_convert_four(transformer, src1, src2, src3, src4) {
|
||||
const ret = wasm.qcms_convert_four(transformer, src1, src2, src3, src4);
|
||||
return ret >>> 0;
|
||||
export function qcms_convert_four(transformer, src1, src2, src3, src4, css) {
|
||||
wasm.qcms_convert_four(transformer, src1, src2, src3, src4, css);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -63,11 +58,10 @@ export function qcms_convert_four(transformer, src1, src2, src3, src4) {
|
||||
* This function is called directly from JavaScript.
|
||||
* @param {number} transformer
|
||||
* @param {number} src
|
||||
* @returns {number}
|
||||
* @param {boolean} css
|
||||
*/
|
||||
export function qcms_convert_one(transformer, src) {
|
||||
const ret = wasm.qcms_convert_one(transformer, src);
|
||||
return ret >>> 0;
|
||||
export function qcms_convert_one(transformer, src, css) {
|
||||
wasm.qcms_convert_one(transformer, src, css);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -78,11 +72,10 @@ export function qcms_convert_one(transformer, src) {
|
||||
* @param {number} src1
|
||||
* @param {number} src2
|
||||
* @param {number} src3
|
||||
* @returns {number}
|
||||
* @param {boolean} css
|
||||
*/
|
||||
export function qcms_convert_three(transformer, src1, src2, src3) {
|
||||
const ret = wasm.qcms_convert_three(transformer, src1, src2, src3);
|
||||
return ret >>> 0;
|
||||
export function qcms_convert_three(transformer, src1, src2, src3, css) {
|
||||
wasm.qcms_convert_three(transformer, src1, src2, src3, css);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -113,12 +106,18 @@ export function qcms_transformer_from_memory(mem, in_type, intent) {
|
||||
function __wbg_get_imports() {
|
||||
const import0 = {
|
||||
__proto__: null,
|
||||
__wbg___wbindgen_throw_344f42d3211c4765: function(arg0, arg1) {
|
||||
__wbg___wbindgen_throw_6b64449b9b9ed33c: function(arg0, arg1) {
|
||||
throw new Error(getStringFromWasm0(arg0, arg1));
|
||||
},
|
||||
__wbg_copy_result_0d15f3bf9d9012ae: function(arg0, arg1) {
|
||||
copy_result(arg0 >>> 0, arg1 >>> 0);
|
||||
},
|
||||
__wbg_copy_rgb_0106d9d9464fce43: function(arg0) {
|
||||
copy_rgb(arg0 >>> 0);
|
||||
},
|
||||
__wbg_make_cssRGB_8e24b34f71f5363e: function(arg0) {
|
||||
make_cssRGB(arg0 >>> 0);
|
||||
},
|
||||
__wbindgen_init_externref_table: function() {
|
||||
const table = wasm.__wbindgen_externrefs;
|
||||
const offset = table.grow(4);
|
||||
@ -136,7 +135,8 @@ function __wbg_get_imports() {
|
||||
}
|
||||
|
||||
function getStringFromWasm0(ptr, len) {
|
||||
return decodeText(ptr >>> 0, len);
|
||||
ptr = ptr >>> 0;
|
||||
return decodeText(ptr, len);
|
||||
}
|
||||
|
||||
let cachedUint8ArrayMemory0 = null;
|
||||
@ -170,9 +170,8 @@ function decodeText(ptr, len) {
|
||||
|
||||
let WASM_VECTOR_LEN = 0;
|
||||
|
||||
let wasmModule, wasmInstance, wasm;
|
||||
let wasmModule, wasm;
|
||||
function __wbg_finalize_init(instance, module) {
|
||||
wasmInstance = instance;
|
||||
wasm = instance.exports;
|
||||
wasmModule = module;
|
||||
cachedUint8ArrayMemory0 = null;
|
||||
|
||||
BIN
external/qcms/qcms_bg.wasm
vendored
BIN
external/qcms/qcms_bg.wasm
vendored
Binary file not shown.
74
external/qcms/qcms_utils.js
vendored
74
external/qcms/qcms_utils.js
vendored
@ -13,28 +13,22 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Alpha lives in the high byte of a pixel on a little-endian host and in the
|
||||
// low byte on a big-endian one.
|
||||
const ALPHA_MASK =
|
||||
new Uint8Array(new Uint32Array([1]).buffer)[0] === 1 ? 0xff000000 : 0x000000ff;
|
||||
const RGB_MASK = ~ALPHA_MASK;
|
||||
|
||||
class QCMS {
|
||||
static #memoryArray = null;
|
||||
|
||||
static _memory = null;
|
||||
|
||||
// Where the next `qcms_convert_array` result should land.
|
||||
static _mustAddAlpha = false;
|
||||
|
||||
static _destBuffer = null;
|
||||
|
||||
static _destOffset = 0;
|
||||
|
||||
// Set when the destination is RGBA and its alpha channel already holds
|
||||
// something worth keeping, which is the case whenever the image has an
|
||||
// /SMask: `fillOpacity` has run by then. The Wasm side does not know about
|
||||
// that, so it always fills alpha in, and the bytes are merged here instead of
|
||||
// copied wholesale.
|
||||
static _keepAlpha = false;
|
||||
static _destLength = 0;
|
||||
|
||||
static _cssColor = "";
|
||||
|
||||
static _makeHexColor = null;
|
||||
|
||||
static get _memoryArray() {
|
||||
const array = this.#memoryArray;
|
||||
@ -48,31 +42,43 @@ class QCMS {
|
||||
function copy_result(ptr, len) {
|
||||
// This function is called from the wasm module (it's an external
|
||||
// "C" function). Its goal is to copy the result from the wasm memory
|
||||
// to the destination buffer without any intermediate copies. The wasm side
|
||||
// has already laid the result out the way the caller asked for it, so this is
|
||||
// one bulk copy unless the destination's alpha has to survive.
|
||||
const { _destBuffer, _destOffset, _keepAlpha, _memoryArray } = QCMS;
|
||||
if (!_keepAlpha) {
|
||||
// to the destination buffer without any intermediate copies.
|
||||
const { _mustAddAlpha, _destBuffer, _destOffset, _destLength, _memoryArray } =
|
||||
QCMS;
|
||||
if (len === _destLength) {
|
||||
_destBuffer.set(_memoryArray.subarray(ptr, ptr + len), _destOffset);
|
||||
return;
|
||||
}
|
||||
const count = len >> 2;
|
||||
const destStart = _destBuffer.byteOffset + _destOffset;
|
||||
if (((destStart | ptr) & 3) === 0) {
|
||||
// Both sides are pixel-aligned, so RGB can be merged a whole pixel at a
|
||||
// time. `len` is a multiple of 4 here: the wasm side wrote RGBA.
|
||||
const dest32 = new Uint32Array(_destBuffer.buffer, destStart, count);
|
||||
const src32 = new Uint32Array(QCMS._memory.buffer, ptr, count);
|
||||
for (let i = 0; i < count; i++) {
|
||||
dest32[i] = (dest32[i] & ALPHA_MASK) | (src32[i] & RGB_MASK);
|
||||
if (_mustAddAlpha) {
|
||||
for (let i = ptr, ii = ptr + len, j = _destOffset; i < ii; i += 3, j += 4) {
|
||||
_destBuffer[j] = _memoryArray[i];
|
||||
_destBuffer[j + 1] = _memoryArray[i + 1];
|
||||
_destBuffer[j + 2] = _memoryArray[i + 2];
|
||||
_destBuffer[j + 3] = 255;
|
||||
}
|
||||
} else {
|
||||
for (let i = ptr, ii = ptr + len, j = _destOffset; i < ii; i += 3, j += 4) {
|
||||
_destBuffer[j] = _memoryArray[i];
|
||||
_destBuffer[j + 1] = _memoryArray[i + 1];
|
||||
_destBuffer[j + 2] = _memoryArray[i + 2];
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (let i = ptr, ii = ptr + len, j = _destOffset; i < ii; i += 4, j += 4) {
|
||||
_destBuffer[j] = _memoryArray[i];
|
||||
_destBuffer[j + 1] = _memoryArray[i + 1];
|
||||
_destBuffer[j + 2] = _memoryArray[i + 2];
|
||||
}
|
||||
}
|
||||
|
||||
export { copy_result, QCMS };
|
||||
function copy_rgb(ptr) {
|
||||
const { _destBuffer, _destOffset, _memoryArray } = QCMS;
|
||||
_destBuffer[_destOffset] = _memoryArray[ptr];
|
||||
_destBuffer[_destOffset + 1] = _memoryArray[ptr + 1];
|
||||
_destBuffer[_destOffset + 2] = _memoryArray[ptr + 2];
|
||||
}
|
||||
|
||||
function make_cssRGB(ptr) {
|
||||
const { _memoryArray } = QCMS;
|
||||
QCMS._cssColor = QCMS._makeHexColor(
|
||||
_memoryArray[ptr],
|
||||
_memoryArray[ptr + 1],
|
||||
_memoryArray[ptr + 2]
|
||||
);
|
||||
}
|
||||
|
||||
export { copy_result, copy_rgb, make_cssRGB, QCMS };
|
||||
|
||||
325
gulpfile.mjs
325
gulpfile.mjs
@ -13,9 +13,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import * as babel from "@babel/core";
|
||||
import {
|
||||
babelPluginAddHeaderComment,
|
||||
babelPluginPDFJSPreprocessor,
|
||||
babelPluginStripSrcPath,
|
||||
preprocessPDFJSCode,
|
||||
@ -26,6 +24,7 @@ import {
|
||||
} from "./external/ccov/coverage_format.mjs";
|
||||
import { exec, execSync, spawn, spawnSync } from "child_process";
|
||||
import autoprefixer from "autoprefixer";
|
||||
import babel from "@babel/core";
|
||||
import { buildPrefsSchema } from "./external/chromium/prefs.mjs";
|
||||
import crypto from "crypto";
|
||||
import { finished } from "stream/promises";
|
||||
@ -105,11 +104,11 @@ const AUTOPREFIXER_CONFIG = {
|
||||
// Default Babel targets used for generic, components, minified-pre
|
||||
const BABEL_TARGETS = ENV_TARGETS.join(", ");
|
||||
|
||||
const BABEL_COREJS_OPTS = Object.freeze({
|
||||
method: "usage-global",
|
||||
version: "3.49.0",
|
||||
const BABEL_PRESET_ENV_OPTS = Object.freeze({
|
||||
corejs: "3.49.0",
|
||||
exclude: ["web.structured-clone"],
|
||||
shippedProposals: true,
|
||||
useBuiltIns: "usage",
|
||||
});
|
||||
|
||||
const DEFINES = Object.freeze({
|
||||
@ -226,8 +225,6 @@ function createWebpackAlias(defines) {
|
||||
"web-print_service": "",
|
||||
"web-secondary_toolbar": "web/secondary_toolbar.js",
|
||||
"web-signature_manager": "web/signature_manager.js",
|
||||
"web-digital_signature_properties_manager":
|
||||
"web/digital_signature_properties_manager.js",
|
||||
"web-toolbar": "web/toolbar.js",
|
||||
"web-views_manager": "web/views_manager.js",
|
||||
};
|
||||
@ -328,7 +325,9 @@ function createWebpackConfig(
|
||||
/node_modules[\\/]core-js/,
|
||||
];
|
||||
|
||||
const babelPresets = skipBabel ? undefined : ["@babel/preset-env"];
|
||||
const babelPresets = skipBabel
|
||||
? undefined
|
||||
: [["@babel/preset-env", BABEL_PRESET_ENV_OPTS]];
|
||||
const babelPlugins = [
|
||||
[
|
||||
babelPluginPDFJSPreprocessor,
|
||||
@ -338,9 +337,6 @@ function createWebpackConfig(
|
||||
},
|
||||
],
|
||||
];
|
||||
if (!skipBabel) {
|
||||
babelPlugins.push(["babel-plugin-polyfill-corejs3", BABEL_COREJS_OPTS]);
|
||||
}
|
||||
if (bundleDefines.COVERAGE) {
|
||||
babelPlugins.push("babel-plugin-istanbul");
|
||||
}
|
||||
@ -793,18 +789,36 @@ function runTests(testsName, { bot = false } = {}) {
|
||||
args.push("--coveragePerTest");
|
||||
}
|
||||
|
||||
if (testsName === "browser") {
|
||||
let shouldRun;
|
||||
try {
|
||||
shouldRun = applyCodeTestFilter(args);
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
const codeArg = testsName === "browser" ? getArgValue("--code") : null;
|
||||
if (codeArg) {
|
||||
const coverageDir =
|
||||
getArgValue("--coverage-output") || BUILD_DIR + "coverage";
|
||||
const result = spawnSync(
|
||||
"node",
|
||||
[
|
||||
path.join(__dirname, "external/ccov/coverage_search.mjs"),
|
||||
`--code=${codeArg}`,
|
||||
`--coverage-dir=${coverageDir}`,
|
||||
],
|
||||
{ encoding: "utf8" }
|
||||
);
|
||||
if (result.status !== 0) {
|
||||
reject(new Error(result.stderr?.trim() || "coverage_search failed"));
|
||||
return;
|
||||
}
|
||||
if (!shouldRun) {
|
||||
const testIds = result.stdout.trim().split("\n").filter(Boolean);
|
||||
if (testIds.length === 0) {
|
||||
console.log(`\n### No tests found covering "${codeArg}"`);
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
console.log(
|
||||
`\n### Found ${testIds.length} test(s) covering "${codeArg}":\n` +
|
||||
testIds.map(id => ` ${id}`).join("\n")
|
||||
);
|
||||
for (const id of testIds) {
|
||||
args.push(`-t=${id}`);
|
||||
}
|
||||
}
|
||||
|
||||
const testProcess = startNode(args, { cwd: TEST_DIR, stdio: "inherit" });
|
||||
@ -870,136 +884,6 @@ function collectArgs(options, args) {
|
||||
}
|
||||
}
|
||||
|
||||
// Builds the coverage_search command line. By default the published index is
|
||||
// downloaded; an explicit --index=<path> selects a local index instead, used
|
||||
// read-only so it's never overwritten by the published copy.
|
||||
function getCoverageSearchArgs(codeArg) {
|
||||
const searchArgs = [
|
||||
path.join(__dirname, "external/ccov/coverage_search.mjs"),
|
||||
`--code=${codeArg}`,
|
||||
];
|
||||
const indexArg = getArgValue("--index");
|
||||
if (indexArg === "") {
|
||||
// An explicit but empty value (e.g. an unset shell variable expanding to
|
||||
// `--index=`) almost certainly isn't intended; fail loudly rather than
|
||||
// silently falling back to the downloaded index.
|
||||
throw new Error("--index was given without a value");
|
||||
}
|
||||
if (indexArg) {
|
||||
searchArgs.push(`--index=${indexArg}`, "--no-download");
|
||||
} else if (process.argv.includes("--no-download")) {
|
||||
searchArgs.push("--no-download");
|
||||
}
|
||||
return searchArgs;
|
||||
}
|
||||
|
||||
// Returns the set of test IDs defined in the local ref-test manifest, or null
|
||||
// when it can't be read. Used to drop coverage-derived IDs that don't exist on
|
||||
// this branch (e.g. a test renamed since the published index was built), which
|
||||
// would otherwise make test.mjs reject the entire run.
|
||||
function readManifestTestIds() {
|
||||
try {
|
||||
const manifestFile = process.env.PDF_TEST || "test_manifest.json";
|
||||
const manifest = JSON.parse(
|
||||
fs.readFileSync(path.join(__dirname, TEST_DIR, manifestFile), "utf8")
|
||||
);
|
||||
return new Set(manifest.map(entry => entry.id));
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// For a --code=<file>::<line|function> argument, runs coverage_search to find
|
||||
// the ref tests that exercise that location and returns their IDs (an empty
|
||||
// array when none match locally). Returns null when --code wasn't given; throws
|
||||
// when the search itself fails.
|
||||
function resolveCodeTestIds() {
|
||||
const codeArg = getArgValue("--code");
|
||||
if (!codeArg) {
|
||||
return null;
|
||||
}
|
||||
// Inherit stderr so the index download progress is visible; stdout is
|
||||
// captured because it carries the matching test IDs.
|
||||
const result = spawnSync("node", getCoverageSearchArgs(codeArg), {
|
||||
encoding: "utf8",
|
||||
stdio: ["ignore", "pipe", "inherit"],
|
||||
});
|
||||
if (result.status !== 0) {
|
||||
// status is null when the child couldn't be spawned or was killed by a
|
||||
// signal; surface the real cause instead of a generic message.
|
||||
throw new Error(
|
||||
result.error
|
||||
? `coverage_search failed: ${result.error.message}`
|
||||
: `coverage_search failed (exit code ${result.status})`
|
||||
);
|
||||
}
|
||||
let testIds = result.stdout.trim().split("\n").filter(Boolean);
|
||||
|
||||
// The published index is built from master, so some covering tests may not
|
||||
// exist on this branch. Drop them (with a note) rather than letting test.mjs
|
||||
// reject the whole run — and silently exit 0 — on the first unknown ID.
|
||||
const knownIds = readManifestTestIds();
|
||||
if (knownIds) {
|
||||
const missing = testIds.filter(id => !knownIds.has(id));
|
||||
if (missing.length) {
|
||||
console.log(
|
||||
`\n### Ignoring ${missing.length} covered test(s) not in the manifest:\n` +
|
||||
missing.map(id => ` ${id}`).join("\n")
|
||||
);
|
||||
testIds = testIds.filter(id => knownIds.has(id));
|
||||
}
|
||||
}
|
||||
|
||||
if (testIds.length === 0) {
|
||||
console.log(`\n### No tests found covering "${codeArg}"`);
|
||||
} else {
|
||||
console.log(
|
||||
`\n### Found ${testIds.length} test(s) covering "${codeArg}":\n` +
|
||||
testIds.map(id => ` ${id}`).join("\n")
|
||||
);
|
||||
}
|
||||
return testIds;
|
||||
}
|
||||
|
||||
function appendTestFilters(args, testIds) {
|
||||
const existingIds = new Set();
|
||||
|
||||
// collectArgs always normalizes filters to the space-separated
|
||||
// `-t <id>` / `--testfilter <id>` form, so that's the only shape to read.
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
if (args[i] === "-t" || args[i] === "--testfilter") {
|
||||
if (i + 1 < args.length) {
|
||||
existingIds.add(args[++i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const id of testIds) {
|
||||
if (!existingIds.has(id)) {
|
||||
// Pass the id as a separate argument: node's parseArgs parses the short
|
||||
// form `-t=<id>` as the literal value "=<id>", which matches no test and
|
||||
// aborts the run with "Unrecognized test IDs".
|
||||
args.push("-t", id);
|
||||
existingIds.add(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Applies the --code coverage filter to `args`. Returns false when the run
|
||||
// should be skipped (--code was given but resolved to no runnable tests), and
|
||||
// true otherwise (no --code, or matching tests were appended). Throws when the
|
||||
// coverage search itself fails.
|
||||
function applyCodeTestFilter(args) {
|
||||
const codeTestIds = resolveCodeTestIds();
|
||||
if (codeTestIds === null) {
|
||||
return true; // No --code argument; run normally.
|
||||
}
|
||||
if (codeTestIds.length === 0) {
|
||||
return false; // Nothing (runnable) covers the requested location.
|
||||
}
|
||||
appendTestFilters(args, codeTestIds);
|
||||
return true;
|
||||
}
|
||||
|
||||
function makeRef(done, bot) {
|
||||
console.log("\n### Creating reference images");
|
||||
|
||||
@ -1048,18 +932,6 @@ function makeRef(done, bot) {
|
||||
args
|
||||
);
|
||||
|
||||
let shouldRun;
|
||||
try {
|
||||
shouldRun = applyCodeTestFilter(args);
|
||||
} catch (error) {
|
||||
done(error);
|
||||
return;
|
||||
}
|
||||
if (!shouldRun) {
|
||||
done();
|
||||
return;
|
||||
}
|
||||
|
||||
const testProcess = startNode(args, { cwd: TEST_DIR, stdio: "inherit" });
|
||||
testProcess.on("close", function (code) {
|
||||
if (code !== 0) {
|
||||
@ -1070,33 +942,34 @@ function makeRef(done, bot) {
|
||||
});
|
||||
}
|
||||
|
||||
// Prints the IDs of tests that exercised a given source file location, using
|
||||
// the per-test coverage index published to the pdf.js.refs repository. The
|
||||
// index is downloaded on demand, cached locally, and only re-downloaded when
|
||||
// it has changed. Run with --code=<file>::<line|function>, e.g.
|
||||
// --code=canvas.js::205 (add --no-download to reuse the cached index offline).
|
||||
// Queries the per-test coverage index built by --coverage-per-test and prints
|
||||
// the IDs of tests that exercised a given source file location. Run with
|
||||
// --code=<file>::<line|function>, e.g. --code=canvas.js::205
|
||||
gulp.task("coverage_search", function (done) {
|
||||
const codeArg = getArgValue("--code");
|
||||
if (!codeArg) {
|
||||
done(new Error('Missing --code argument, e.g. --code="canvas.js::205"'));
|
||||
return;
|
||||
}
|
||||
let searchArgs;
|
||||
try {
|
||||
searchArgs = getCoverageSearchArgs(codeArg);
|
||||
} catch (error) {
|
||||
done(error);
|
||||
return;
|
||||
const coverageDir =
|
||||
getArgValue("--coverage-output") || BUILD_DIR + "coverage";
|
||||
const result = spawnSync(
|
||||
"node",
|
||||
[
|
||||
path.join(__dirname, "external/ccov/coverage_search.mjs"),
|
||||
`--code=${codeArg}`,
|
||||
`--coverage-dir=${coverageDir}`,
|
||||
],
|
||||
{ encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] }
|
||||
);
|
||||
if (result.stderr) {
|
||||
process.stderr.write(result.stderr);
|
||||
}
|
||||
if (result.stdout) {
|
||||
process.stdout.write(result.stdout);
|
||||
}
|
||||
const result = spawnSync("node", searchArgs, { stdio: "inherit" });
|
||||
if (result.status !== 0) {
|
||||
done(
|
||||
new Error(
|
||||
result.error
|
||||
? `coverage_search failed: ${result.error.message}`
|
||||
: `coverage_search failed (exit code ${result.status})`
|
||||
)
|
||||
);
|
||||
done(new Error("coverage_search failed"));
|
||||
return;
|
||||
}
|
||||
done();
|
||||
@ -1810,9 +1683,9 @@ function buildLibHelper(bundleDefines, inputStream, outputDir) {
|
||||
const licenseHeader = fs
|
||||
.readFileSync("./src/license_header.js")
|
||||
.toString()
|
||||
.trim()
|
||||
.replace(/^\/\*/, "")
|
||||
.replace(/\*\/$/, "");
|
||||
.split("\n")
|
||||
.slice(1, -2)
|
||||
.map(line => line.replace(/^\s*\*\s?/, ""));
|
||||
|
||||
const ctx = {
|
||||
rootPath: __dirname,
|
||||
@ -1852,9 +1725,6 @@ function buildLibHelper(bundleDefines, inputStream, outputDir) {
|
||||
[babelPluginPDFJSPreprocessor, ctx],
|
||||
[babelPluginStripSrcPath],
|
||||
];
|
||||
if (!skipBabel) {
|
||||
plugins.push(["babel-plugin-polyfill-corejs3", BABEL_COREJS_OPTS]);
|
||||
}
|
||||
if (enableCoverage) {
|
||||
plugins.push([
|
||||
"babel-plugin-istanbul",
|
||||
@ -1864,16 +1734,28 @@ function buildLibHelper(bundleDefines, inputStream, outputDir) {
|
||||
},
|
||||
]);
|
||||
}
|
||||
plugins.push([babelPluginAddHeaderComment, { header: licenseHeader }]);
|
||||
plugins.push([
|
||||
"add-header-comment",
|
||||
{
|
||||
header: licenseHeader,
|
||||
},
|
||||
]);
|
||||
|
||||
const result = babel.transformSync(file.contents.toString(), {
|
||||
const result = babel.transform(file.contents.toString(), {
|
||||
...(enableCoverage && {
|
||||
filename: file.path,
|
||||
babelrc: false,
|
||||
configFile: false,
|
||||
}),
|
||||
sourceType: "module",
|
||||
presets: skipBabel ? undefined : ["@babel/preset-env"],
|
||||
presets: skipBabel
|
||||
? undefined
|
||||
: [
|
||||
[
|
||||
"@babel/preset-env",
|
||||
{ ...BABEL_PRESET_ENV_OPTS, loose: false, modules: false },
|
||||
],
|
||||
],
|
||||
plugins,
|
||||
targets: BABEL_TARGETS,
|
||||
sourceMaps: enableSourceMaps,
|
||||
@ -2514,71 +2396,6 @@ gulp.task("lint-chmod", function (done) {
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("lint-bom", async function () {
|
||||
console.log("\n### Checking for UTF-8 byte order marks");
|
||||
|
||||
// Cover untracked-but-not-ignored files too, so a BOM in a freshly created
|
||||
// file is caught before `git add`.
|
||||
const files = execSync("git ls-files -coz --exclude-standard", {
|
||||
encoding: "utf8",
|
||||
maxBuffer: 1 << 28,
|
||||
})
|
||||
.split("\0")
|
||||
.filter(Boolean);
|
||||
|
||||
// Only the first three bytes matter: a leading EF BB BF is a UTF-8 BOM.
|
||||
async function hasBOM(file) {
|
||||
let handle;
|
||||
try {
|
||||
handle = await fs.promises.open(file, "r");
|
||||
} catch {
|
||||
return false; // Directory, broken symlink, removed file, etc.
|
||||
}
|
||||
try {
|
||||
const { bytesRead, buffer } = await handle.read(Buffer.alloc(3), 0, 3, 0);
|
||||
return (
|
||||
bytesRead === 3 &&
|
||||
buffer[0] === 0xef &&
|
||||
buffer[1] === 0xbb &&
|
||||
buffer[2] === 0xbf
|
||||
);
|
||||
} finally {
|
||||
await handle.close();
|
||||
}
|
||||
}
|
||||
|
||||
// Don't exhaust file descriptors.
|
||||
const offenders = [];
|
||||
for (let i = 0; i < files.length; i += 256) {
|
||||
const chunk = files.slice(i, i + 256);
|
||||
const flags = await Promise.all(chunk.map(hasBOM));
|
||||
chunk.forEach((file, j) => flags[j] && offenders.push(file));
|
||||
}
|
||||
offenders.sort();
|
||||
|
||||
if (offenders.length === 0) {
|
||||
console.log("files checked, no errors found");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!process.argv.includes("--fix")) {
|
||||
for (const file of offenders) {
|
||||
console.log(` Unexpected byte order mark: ${file}`);
|
||||
}
|
||||
throw new Error("BOM check failed (run `gulp lint-bom --fix` to clear).");
|
||||
}
|
||||
|
||||
// Strip the BOM on disk and let the user stage the change.
|
||||
await Promise.all(
|
||||
offenders.map(async file => {
|
||||
const content = await fs.promises.readFile(file);
|
||||
await fs.promises.writeFile(file, content.subarray(3));
|
||||
console.log(` removed byte order mark: ${file}`);
|
||||
})
|
||||
);
|
||||
console.log(`done: ${offenders.length} file(s) updated`);
|
||||
});
|
||||
|
||||
gulp.task("lint", function (done) {
|
||||
console.log("\n### Linting JS/CSS/JSON/SVG/HTML files");
|
||||
|
||||
@ -2643,7 +2460,7 @@ gulp.task("lint", function (done) {
|
||||
return;
|
||||
}
|
||||
|
||||
gulp.series("lint-licenses", "lint-chmod", "lint-bom")(done);
|
||||
gulp.series("lint-licenses", "lint-chmod")(done);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@ -153,19 +153,6 @@ pdfjs-document-properties-linearized = العرض السريع عبر الوِب
|
||||
pdfjs-document-properties-linearized-yes = نعم
|
||||
pdfjs-document-properties-linearized-no = لا
|
||||
pdfjs-document-properties-close-button = أغلق
|
||||
pdfjs-digital-signature-properties-view-certificate = اعرض الشهادة
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = السبب: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = الطابع الزمني: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
|
||||
## Print
|
||||
|
||||
@ -777,49 +764,6 @@ pdfjs-views-manager-waiting-for-file = يرفع ملف…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = أدِر الصفحات
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = خصائص التوقيع الرقمي
|
||||
.aria-label = خصائص التوقيع الرقمي
|
||||
pdfjs-digital-signature-properties-button-label = خصائص التوقيع الرقمي
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = وقِّع المستند بتوقيع رقمي صالح
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = الحالة: تحققَ من التوقيع
|
||||
pdfjs-digital-signature-properties-status-invalid = الحالة: التوقيع غير صالح
|
||||
pdfjs-digital-signature-properties-status-unknown = الحالة: تعذّر التحقق (غير مدعوم)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = الشهادة: موثوقة ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = الشهادة: غير متوفرة
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = الشهادة: غير موثوقة
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = الشهادة: جهة إصدار مجهولة ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = الشهادة: موقعّة ذاتيًا ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = الشهادة: جهة إصدار مجهولة ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = الشهادة: منتهية الصلاحية
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = الشهادة: منتهية الصلاحية ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = الشهادة: مُلغاة
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,28 +153,6 @@ pdfjs-document-properties-linearized = Хуткі прагляд у Інтэрн
|
||||
pdfjs-document-properties-linearized-yes = Так
|
||||
pdfjs-document-properties-linearized-no = Не
|
||||
pdfjs-document-properties-close-button = Закрыць
|
||||
pdfjs-digital-signature-properties-view-certificate = Паказаць сертыфікат
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Прычына: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Адзнака часу: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Дадатковы подпіс ({ $count })
|
||||
[few] Дадатковыя подпісы ({ $count })
|
||||
*[many] Дадатковыя подпісы ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -762,79 +740,6 @@ pdfjs-views-manager-waiting-for-file = Зацягваецца файл…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Кіраванне старонкамі
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Уласцівасці лічбавага подпісу
|
||||
.aria-label = Уласцівасці лічбавага подпісу
|
||||
pdfjs-digital-signature-properties-button-label = Уласцівасці лічбавага подпісу
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Дакумент быў падпісаны сапраўдным лічбавым подпісам
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Дакумент падпісаны, але { $count } лічбавы подпіс не ўдалося праверыць
|
||||
[few] Дакумент падпісаны, але { $count } лічбавыя подпісы не ўдалося праверыць
|
||||
*[many] Дакумент падпісаны, але { $count } лічбавых подпісаў не ўдалося праверыць
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Дакумент падпісаны { $count } недавераным сертыфікатам
|
||||
[few] Дакумент падпісаны { $count } недаверанымі сертыфікатамі
|
||||
*[many] Дакумент падпісаны { $count } недаверанымі сертыфікатамі
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Дакумент падпісаны { $count } пратэрмінаваным сертыфікатам
|
||||
[few] Дакумент падпісаны { $count } пратэрмінаванымі сертыфікатамі
|
||||
*[many] Дакумент падпісаны { $count } пратэрмінаванымі сертыфікатамі
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Дакумент мае { $count } нядзейсны лічбавы подпіс
|
||||
[few] Дакумент мае { $count } нядзейсныя лічбавыя подпісы
|
||||
*[many] Дакумент мае { $count } нядзейсных лічбавых подпісаў
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Дакумент падпісаны { $count } адкліканым сертыфікатам
|
||||
[few] Дакумент падпісаны { $count } адкліканымі сертыфікатамі
|
||||
*[many] Дакумент падпісаны { $count } адкліканымі сертыфікатамі
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Статус: Подпіс правераны
|
||||
pdfjs-digital-signature-properties-status-invalid = Статус: Подпіс нядзейсны
|
||||
pdfjs-digital-signature-properties-status-unknown = Статус: Немагчыма праверыць (не падтрымліваецца)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Сертыфікат: Давераны ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Сертыфікат: Недаступны
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Сертыфікат: Недавераны
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Сертыфікат: Невядомы выдавец ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Сертыфікат: Самападпісаны ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Сертыфікат: Недавераны выдавец ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Сертыфікат: Пратэрмінаваны
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Сертыфікат: Пратэрмінаваны ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Сертыфікат: Адкліканы
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -390,12 +390,3 @@ pdfjs-editor-alt-text-settings-delete-model-button = Изтриване
|
||||
## Controls
|
||||
|
||||
pdfjs-editor-add-signature-image-upload-error-description = Проверете мрежовата си връзка или опитайте с друго изображение.
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-expired = Сертификат: с изтекъл срок на валидност
|
||||
|
||||
@ -5,194 +5,18 @@
|
||||
|
||||
## Main toolbar buttons (tooltips and alt text for images)
|
||||
|
||||
pdfjs-previous-button =
|
||||
.title = بلگه دیندایی
|
||||
pdfjs-previous-button-label = دیندایی
|
||||
pdfjs-next-button =
|
||||
.title = بلگه نیایی
|
||||
pdfjs-next-button-label = بئڌی
|
||||
# .title: Tooltip for the pageNumber input.
|
||||
pdfjs-page-input =
|
||||
.title = بلگه
|
||||
# Variables:
|
||||
# $pagesCount (Number) - the total number of pages in the document
|
||||
# This string follows an input field with the number of the page currently displayed.
|
||||
pdfjs-of-pages = ز { $pagesCount }
|
||||
# Variables:
|
||||
# $pageNumber (Number) - the currently visible page
|
||||
# $pagesCount (Number) - the total number of pages in the document
|
||||
pdfjs-page-of-pages = ({ $pageNumber } ز { $pagesCount })
|
||||
pdfjs-zoom-out-button =
|
||||
.title = کۊچیر نمایی
|
||||
pdfjs-zoom-out-button-label = کۊچیر نمایی
|
||||
pdfjs-zoom-in-button =
|
||||
.title = گپ نمایی
|
||||
pdfjs-zoom-in-button-label = گپ نمایی
|
||||
pdfjs-zoom-select =
|
||||
.title = زۊم کردن
|
||||
pdfjs-open-file-button =
|
||||
.title = گۊشیڌن فایل
|
||||
pdfjs-open-file-button-label = گۊشیڌن
|
||||
pdfjs-print-button =
|
||||
.title = چاپ
|
||||
pdfjs-print-button-label = چاپ
|
||||
pdfjs-save-button =
|
||||
.title = زفت
|
||||
pdfjs-save-button-label = زفت
|
||||
# Used in Firefox for Android as a tooltip for the download button (“download” is a verb).
|
||||
pdfjs-download-button =
|
||||
.title = دانلود
|
||||
# Used in Firefox for Android as a label for the download button (“download” is a verb).
|
||||
# Length of the translation matters since we are in a mobile context, with limited screen estate.
|
||||
pdfjs-download-button-label = دانلود
|
||||
pdfjs-bookmark-button-label = بلگه هیم سکویی
|
||||
|
||||
## Secondary toolbar and context menu
|
||||
|
||||
pdfjs-tools-button =
|
||||
.title = ٱوزارا
|
||||
pdfjs-tools-button-label = ٱوزارا
|
||||
pdfjs-first-page-button =
|
||||
.title = رئڌن و بلگه نیایی
|
||||
pdfjs-first-page-button-label = رئڌن و بلگه نیایی
|
||||
pdfjs-last-page-button =
|
||||
.title = رئڌن و بلگه دیندایی
|
||||
pdfjs-last-page-button-label = رئڌن و بلگه دیندایی
|
||||
pdfjs-page-rotate-cw-button =
|
||||
.title = لر خردن ساعتگرد
|
||||
pdfjs-page-rotate-cw-button-label = لر خردن ساعتگرد
|
||||
pdfjs-page-rotate-ccw-button =
|
||||
.title = لر خردن پاد ساعتگرد
|
||||
pdfjs-page-rotate-ccw-button-label = لر خردن پاد ساعتگرد
|
||||
pdfjs-cursor-text-select-tool-button =
|
||||
.title = فعال کردن ٱوزار پسند هؽل
|
||||
pdfjs-cursor-text-select-tool-button-label = ٱوزار پسند هؽل
|
||||
pdfjs-cursor-hand-tool-button =
|
||||
.title = فعال کردن ٱوزار دست
|
||||
pdfjs-cursor-hand-tool-button-label = ٱوزار دست
|
||||
pdfjs-scroll-page-button =
|
||||
.title = و کار گرؽڌن اسکرۊل بلگه
|
||||
pdfjs-scroll-page-button-label = اسکرۊل بلگه
|
||||
pdfjs-scroll-vertical-button =
|
||||
.title = و کار گرؽڌن اسکرۊل عمۊدی
|
||||
pdfjs-scroll-vertical-button-label = اسکرۊل عمۊدی
|
||||
pdfjs-scroll-horizontal-button =
|
||||
.title = و کار گرؽڌن اسکرۊل اوفوقی
|
||||
pdfjs-scroll-horizontal-button-label = اسکرۊل اوفوقی
|
||||
pdfjs-scroll-wrapped-button =
|
||||
.title = و کار گرؽڌن اسکرۊل پؽچسته
|
||||
pdfjs-scroll-wrapped-button-label = اسکرۊل پؽچسته
|
||||
|
||||
## Document properties dialog
|
||||
|
||||
pdfjs-document-properties-button =
|
||||
.title = خۊسۊسیات سند…
|
||||
pdfjs-document-properties-button-label = خۊسۊسیات سند…
|
||||
pdfjs-document-properties-file-name = نوم فایل:
|
||||
pdfjs-document-properties-file-size = هندا فایل:
|
||||
pdfjs-document-properties-title = عونوان:
|
||||
pdfjs-document-properties-author = هؽل کوݩ:
|
||||
pdfjs-document-properties-subject = سرتال:
|
||||
pdfjs-document-properties-creation-date = تاریخ وورکل وابیڌن:
|
||||
pdfjs-document-properties-modification-date = تاریخ آلشتکاری:
|
||||
# Variables:
|
||||
# $dateObj (Date) - the creation/modification date and time of the PDF file
|
||||
pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
pdfjs-document-properties-creator = وورکل کون:
|
||||
pdfjs-document-properties-producer = وورکل کون PDF:
|
||||
pdfjs-document-properties-version = نوسخه PDF:
|
||||
pdfjs-document-properties-page-count = تئداد بلگه یل:
|
||||
pdfjs-document-properties-page-size = هندا بلگه:
|
||||
pdfjs-document-properties-page-size-unit-inches = اینچ
|
||||
pdfjs-document-properties-page-size-unit-millimeters = میلی متر
|
||||
pdfjs-document-properties-page-size-orientation-portrait = portrait
|
||||
pdfjs-document-properties-page-size-orientation-landscape = landscape
|
||||
pdfjs-document-properties-page-size-name-a-three = A3
|
||||
pdfjs-document-properties-page-size-name-a-four = A4
|
||||
pdfjs-document-properties-page-size-name-letter = نامه
|
||||
pdfjs-document-properties-page-size-name-legal = هۊقۊقی
|
||||
|
||||
## Variables:
|
||||
## $width (Number) - the width of the (current) page
|
||||
## $height (Number) - the height of the (current) page
|
||||
## $unit (String) - the unit of measurement of the (current) page
|
||||
## $name (String) - the name of the (current) page
|
||||
## $orientation (String) - the orientation of the (current) page
|
||||
|
||||
pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })
|
||||
pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })
|
||||
|
||||
##
|
||||
|
||||
# The linearization status of the document; usually called "Fast Web View" in
|
||||
# English locales of Adobe software.
|
||||
pdfjs-document-properties-linearized = نیشتن زل وب:
|
||||
pdfjs-document-properties-linearized-yes = هری
|
||||
pdfjs-document-properties-linearized-no = ن
|
||||
pdfjs-document-properties-close-button = بستن
|
||||
|
||||
## Print
|
||||
|
||||
pdfjs-print-progress-message = ٱماڌه کردن سند سی چاپ کردن…
|
||||
# Variables:
|
||||
# $progress (Number) - percent value
|
||||
pdfjs-print-progress-percent = { $progress }%
|
||||
pdfjs-print-progress-close-button = لقو
|
||||
|
||||
## Tooltips and alt text for side panel toolbar buttons
|
||||
|
||||
pdfjs-toggle-sidebar-button =
|
||||
.title = آلشت هالت نوار کلی
|
||||
pdfjs-toggle-sidebar-button-label = آلشت هالت نوار کلی
|
||||
pdfjs-document-outline-button-label = تئر سند
|
||||
pdfjs-attachments-button =
|
||||
.title = نشووݩ داڌن پیوستا
|
||||
pdfjs-attachments-button-label = پیوستا
|
||||
pdfjs-layers-button-label = لایه یل
|
||||
pdfjs-thumbs-button =
|
||||
.title = نشووݩ داڌن شؽواتا کۊچیر
|
||||
pdfjs-thumbs-button-label = شؽواتا کۊچیر
|
||||
pdfjs-findbar-button =
|
||||
.title = جوستن من سند
|
||||
pdfjs-findbar-button-label = جوستن
|
||||
pdfjs-additional-layers = لایه یل ازافه
|
||||
|
||||
## Thumbnails panel item (tooltip and alt text for images)
|
||||
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-title =
|
||||
.title = بلگه { $page }
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
pdfjs-find-previous-button-label = دیندایی
|
||||
pdfjs-find-next-button-label = بئڌی
|
||||
pdfjs-find-highlight-checkbox = هایلایت کردن پوی
|
||||
|
||||
## Predefined zoom values
|
||||
|
||||
pdfjs-page-scale-width = پئنا بلگه
|
||||
pdfjs-page-scale-fit = هندا کردن بلگه
|
||||
pdfjs-page-scale-auto = زۊم کردن خوتکار
|
||||
pdfjs-page-scale-actual = هندا واقعی
|
||||
# Variables:
|
||||
# $scale (Number) - percent value for page scale
|
||||
pdfjs-page-scale-percent = { $scale }%
|
||||
|
||||
## PDF page
|
||||
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-page-landmark =
|
||||
.aria-label = بلگه { $page }
|
||||
|
||||
## Annotations
|
||||
|
||||
# Variables:
|
||||
# $dateObj (Date) - the modification date and time of the annotation
|
||||
pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
|
||||
## Password
|
||||
|
||||
pdfjs-password-ok-button = خا
|
||||
@ -200,12 +24,6 @@ pdfjs-password-cancel-button = لقو
|
||||
|
||||
## Editing
|
||||
|
||||
pdfjs-editor-free-text-button =
|
||||
.title = هؽل
|
||||
pdfjs-editor-free-text-button-label = هؽل
|
||||
pdfjs-editor-ink-button =
|
||||
.title = کشیڌن
|
||||
pdfjs-editor-ink-button-label = کشیڌن
|
||||
pdfjs-editor-stamp-button =
|
||||
.title = ٱووردن یا آلشت شؽواتا
|
||||
pdfjs-editor-stamp-button-label = ٱووردن یا آلشت شؽواتا
|
||||
@ -217,14 +35,6 @@ pdfjs-editor-stamp-editor =
|
||||
|
||||
##
|
||||
|
||||
# Editor Parameters
|
||||
pdfjs-editor-free-text-color-input = رنگ
|
||||
pdfjs-editor-free-text-size-input = هندا
|
||||
pdfjs-editor-ink-color-input = رنگ
|
||||
pdfjs-editor-ink-thickness-input = کۊلۊفتی
|
||||
pdfjs-editor-ink-opacity-input = کر بیڌن
|
||||
# This refers to the thickness of the line used for free highlighting (not bound to text)
|
||||
pdfjs-editor-free-highlight-thickness-input = کۊلۊفتی
|
||||
# .default-content is used as a placeholder in an empty text editor.
|
||||
pdfjs-free-text2 =
|
||||
.aria-label = آلشتگر هؽل
|
||||
@ -234,55 +44,15 @@ pdfjs-editor-comments-sidebar-no-comments-link = قلوه دووسته بۊین
|
||||
## Alt-text dialog
|
||||
|
||||
pdfjs-editor-alt-text-cancel-button = لقو
|
||||
pdfjs-editor-alt-text-save-button = زفت
|
||||
|
||||
## Color picker
|
||||
|
||||
pdfjs-editor-colorpicker-yellow =
|
||||
.title = هیل
|
||||
pdfjs-editor-colorpicker-green =
|
||||
.title = ساوز
|
||||
pdfjs-editor-colorpicker-blue =
|
||||
.title = کوۊ
|
||||
pdfjs-editor-colorpicker-pink =
|
||||
.title = آل
|
||||
pdfjs-editor-colorpicker-red =
|
||||
.title = سوئر
|
||||
|
||||
## Show all highlights
|
||||
## This is a toggle button to show/hide all the highlights.
|
||||
|
||||
pdfjs-editor-highlight-show-all-button-label = نشووݩ داڌن پوی
|
||||
pdfjs-editor-highlight-show-all-button =
|
||||
.title = نشووݩ داڌن پوی
|
||||
|
||||
## New alt-text dialog
|
||||
## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy.
|
||||
|
||||
pdfjs-editor-new-alt-text-disclaimer-learn-more-url = قلوه دووسته بۊین
|
||||
pdfjs-editor-new-alt-text-not-now-button = سکو ن
|
||||
pdfjs-editor-new-alt-text-error-close-button = بستن
|
||||
|
||||
## "Annotations removed" bar
|
||||
|
||||
pdfjs-editor-undo-bar-undo-button-label = وورگندن
|
||||
pdfjs-editor-undo-bar-close-button =
|
||||
.title = بستن
|
||||
pdfjs-editor-undo-bar-close-button-label = بستن
|
||||
|
||||
## Tab panels
|
||||
|
||||
pdfjs-editor-add-signature-draw-thickness-range-label = کۊلۊفتی
|
||||
|
||||
## Controls
|
||||
|
||||
pdfjs-editor-add-signature-error-close-button = بستن
|
||||
|
||||
## Dialog buttons
|
||||
|
||||
pdfjs-editor-add-signature-cancel-button = لقو
|
||||
pdfjs-editor-add-signature-add-button = ٱووردن
|
||||
pdfjs-editor-edit-signature-update-button = ورۊ رسۊوی
|
||||
|
||||
## Comment popup
|
||||
|
||||
@ -294,32 +64,4 @@ pdfjs-editor-edit-comment-popup-button =
|
||||
|
||||
# An existing comment is edited
|
||||
pdfjs-editor-edit-comment-dialog-title-when-editing = آلشت منشڌ
|
||||
pdfjs-editor-edit-comment-dialog-save-button-when-editing = ورۊ رسۊوی
|
||||
pdfjs-editor-edit-comment-dialog-save-button-when-adding = ٱووردن
|
||||
pdfjs-editor-edit-comment-dialog-text-input =
|
||||
.placeholder = ناهاڌن پا هؽل کردن…
|
||||
pdfjs-editor-edit-comment-dialog-cancel-button = لقو
|
||||
|
||||
## The view manager is a sidebar displaying different views:
|
||||
## - thumbnails;
|
||||
## - outline;
|
||||
## - attachments;
|
||||
## - layers.
|
||||
## The thumbnails view is used to edit the pdf: remove/insert pages, ...
|
||||
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = نوار کلی
|
||||
pdfjs-views-manager-layers-option-label = لایه یل
|
||||
pdfjs-views-manager-pages-status-action-button-label = دؽوۉداری
|
||||
pdfjs-views-manager-pages-status-copy-button-label = لف گیری
|
||||
pdfjs-views-manager-pages-status-cut-button-label = بۊریڌن
|
||||
pdfjs-views-manager-pages-status-delete-button-label = پاک کردن
|
||||
pdfjs-views-manager-status-undo-button-label = وورگندن
|
||||
pdfjs-views-manager-status-done-button-label = ٱنجوم وابی
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = بستن
|
||||
pdfjs-views-manager-status-close-button-label = بستن
|
||||
pdfjs-views-manager-paste-button-label = جا وندن
|
||||
# Badge used to promote a new feature in the UI, keep it as short as possible.
|
||||
# It's spelled uppercase for English, but it can be translated as usual.
|
||||
pdfjs-new-badge-content = نۊ
|
||||
|
||||
@ -153,29 +153,6 @@ pdfjs-document-properties-linearized = Rychlé zobrazování z webu:
|
||||
pdfjs-document-properties-linearized-yes = Ano
|
||||
pdfjs-document-properties-linearized-no = Ne
|
||||
pdfjs-document-properties-close-button = Zavřít
|
||||
pdfjs-digital-signature-properties-view-certificate = Zobrazit certifikát
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Důvod: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Časové razítko: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Podpis ({ $count })
|
||||
[few] Podpisy ({ $count })
|
||||
[many] Podpisy ({ $count })
|
||||
*[other] Podpisy ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -771,84 +748,6 @@ pdfjs-views-manager-waiting-for-file = Nahrávání souboru…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Spravovat strany
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Vlastnosti digitálního podpisu
|
||||
.aria-label = Vlastnosti digitálního podpisu
|
||||
pdfjs-digital-signature-properties-button-label = Vlastnosti digitálního podpisu
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokument byl podepsán platným digitálním podpisem
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokument je podepsán, ale { $count } elektronický podpis se nepodařilo ověřit
|
||||
[few] Dokument je podepsán, ale { $count } elektronické podpisy se nepodařilo ověřit
|
||||
[many] Dokument je podepsán, ale { $count } elektronických podpisů se nepodařilo ověřit
|
||||
*[other] Dokument je podepsán, ale { $count } elektronických podpisů se nepodařilo ověřit
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Dokument podepsaný { $count } certifikátem, který není důvěryhodný
|
||||
[few] Dokument podepsaný { $count } certifikáty, které nejsou důvěryhodné
|
||||
[many] Dokument podepsaný { $count } certifikáty, které nejsou důvěryhodné
|
||||
*[other] Dokument podepsaný { $count } certifikáty, které nejsou důvěryhodné
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokument je podepsaný { $count } prošlým certifikátem
|
||||
[few] Dokument je podepsaný { $count } prošlými certifikáty
|
||||
[many] Dokument je podepsaný { $count } prošlými certifikáty
|
||||
*[other] Dokument je podepsaný { $count } prošlými certifikáty
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Dokument má { $count } neplatný elektronický podpis
|
||||
[few] Dokument má { $count } neplatné elektronické podpisy
|
||||
[many] Dokument má { $count } neplatných elektronických podpisů
|
||||
*[other] Dokument má { $count } neplatných elektronických podpisů
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokument je podepsaný { $count } zneplatněným certifikátem
|
||||
[few] Dokument je podepsaný { $count } zneplatněnými certifikáty
|
||||
[many] Dokument je podepsaný { $count } zneplatněnými certifikáty
|
||||
*[other] Dokument je podepsaný { $count } zneplatněnými certifikáty
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Stav: Podpis ověřen
|
||||
pdfjs-digital-signature-properties-status-invalid = Stav: Podpis je neplatný
|
||||
pdfjs-digital-signature-properties-status-unknown = Stav: Nelze ověřit (nepodporováno)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certifikát: Důvěryhodný ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certifikát: nedostupný
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certifikát: nedůvěryhodný
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certifikát: Neznámý vydavatel ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certifikát: Self-signed ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certifikát: Nedůvěryhodný vydavatel ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certifikát: vypršel
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certifikát: Vypršel ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certifikát: zneplatněn
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,31 +153,6 @@ pdfjs-document-properties-linearized = Golwg Gwe Cyflym:
|
||||
pdfjs-document-properties-linearized-yes = Iawn
|
||||
pdfjs-document-properties-linearized-no = Na
|
||||
pdfjs-document-properties-close-button = Cau
|
||||
pdfjs-digital-signature-properties-view-certificate = Gweld tystysgrif
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Rheswm: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Stamp amser: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[zero] Is-lofnodion ( { $count } )
|
||||
[one] Is-lofnodion ( { $count } )
|
||||
[two] Is-lofnodion ( { $count } )
|
||||
[few] Is-lofnodion ( { $count } )
|
||||
[many] Is-lofnodion ( { $count } )
|
||||
*[other] Is-lofnodion ( { $count } )
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -789,94 +764,6 @@ pdfjs-views-manager-waiting-for-file = Yn llwytho ffeil i fyny…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Rheoli tudalennau
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Priodweddau llofnod digidol
|
||||
.aria-label = Priodweddau llofnod digidol
|
||||
pdfjs-digital-signature-properties-button-label = Priodweddau llofnod digidol
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Llofnodwyd y ddogfen gyda llofnod digidol dilys
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[zero] Llofnodwyd y ddogfen ond doedd dim modd dilysu { $count } llofnod digidol
|
||||
[one] Llofnodwyd y ddogfen ond doedd dim modd dilysu { $count } llofnod digidol
|
||||
[two] Llofnodwyd y ddogfen ond doedd dim modd dilysu { $count } llofnod digidol
|
||||
[few] Llofnodwyd y ddogfen ond doedd dim modd dilysu { $count } llofnod digidol
|
||||
[many] Llofnodwyd y ddogfen ond doedd dim modd dilysu { $count } llofnod digidol
|
||||
*[other] Llofnodwyd y ddogfen ond doedd dim modd dilysu { $count } llofnod digidol
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[zero] Dogfen wedi'i llofnodi â { $count } thystysgrif does dim modd ymddiried ynddyn nhw
|
||||
[one] Dogfen wedi'i llofnodi â { $count } thystysgrif does dim modd ymddiried ynddi
|
||||
[two] Dogfen wedi'i llofnodi â { $count } thystysgrifau does dim modd ymddiried ynddyn nhw
|
||||
[few] Dogfen wedi'i llofnodi â { $count } thystysgrifau does dim modd ymddiried ynddyn nhw
|
||||
[many] Dogfen wedi'i llofnodi â { $count } thystysgrifau does dim modd ymddiried ynddyn nhw
|
||||
*[other] Dogfen wedi'i llofnodi â { $count } thystysgrifau does dim modd ymddiried ynddyn nhw
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[zero] Dogfen wedi'i llofnodi gyda { $count } tystysgrifau sydd wedi dod i ben
|
||||
[one] Dogfen wedi'i llofnodi gydag { $count } dystysgrif sydd wedi dod i ben
|
||||
[two] Dogfen wedi'i llofnodi gyda { $count } dystysgrif sydd wedi dod i ben
|
||||
[few] Dogfen wedi'i llofnodi gyda { $count } tystysgrif sydd wedi dod i ben
|
||||
[many] Dogfen wedi'i llofnodi gyda { $count } thystysgrif sydd wedi dod i ben
|
||||
*[other] Dogfen wedi'i llofnodi gyda { $count } tystysgrif sydd wedi dod i ben
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[zero] Mae gan y ddogfen { $count } llofnodion digidol annilys
|
||||
[one] Mae gan y ddogfen { $count } llofnod digidol annilys
|
||||
[two] Mae gan y ddogfen { $count } llofnod digidol annilys
|
||||
[few] Mae gan y ddogfen { $count } llofnod digidol annilys
|
||||
[many] Mae gan y ddogfen { $count } llofnod digidol annilys
|
||||
*[other] Mae gan y ddogfen { $count } llofnod digidol annilys
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[zero] Dogfen wedi'i llofnodi gyda { $count } tystysgrifau wedi'u dirymu
|
||||
[one] Dogfen wedi'i llofnodi gyda { $count } tystysgrif wedi'u dirymu
|
||||
[two] Dogfen wedi'i llofnodi gyda { $count } tystysgrif wedi'u dirymu
|
||||
[few] Dogfen wedi'i llofnodi gyda { $count } tystysgrif wedi'u dirymu
|
||||
[many] Dogfen wedi'i llofnodi gyda { $count } thystysgrif wedi'u dirymu
|
||||
*[other] Dogfen wedi'i llofnodi gyda { $count } tystysgrif wedi'u dirymu
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Statws: Llofnod wedi'i ddilysu
|
||||
pdfjs-digital-signature-properties-status-invalid = Statws: Llofnod annilys
|
||||
pdfjs-digital-signature-properties-status-unknown = Statws: Methu dilysu (heb ei gefnogi)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Tystysgrif: Wedi ymddiried ( { $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Tystysgrif: Ddim ar gael
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Tystysgrif: Dim ymddiriedaeth
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Tystysgrif: Cyhoeddwr anhysbys ( { $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Tystysgrif: Hunan-lofnod ( { $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Tystysgrif: Cyhoeddwr heb ymddiriedaeth ( { $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Tystysgrif: Wedi dod i ben
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Tystysgrif: Wedi dod i ben ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Tystysgrif: Wedi'i ddirymu
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -67,8 +67,8 @@ pdfjs-page-rotate-cw-button =
|
||||
.title = Im Uhrzeigersinn drehen
|
||||
pdfjs-page-rotate-cw-button-label = Im Uhrzeigersinn drehen
|
||||
pdfjs-page-rotate-ccw-button =
|
||||
.title = Gegen den Uhrzeigersinn drehen
|
||||
pdfjs-page-rotate-ccw-button-label = Gegen den Uhrzeigersinn drehen
|
||||
.title = Gegen Uhrzeigersinn drehen
|
||||
pdfjs-page-rotate-ccw-button-label = Gegen Uhrzeigersinn drehen
|
||||
pdfjs-cursor-text-select-tool-button =
|
||||
.title = Textauswahl-Werkzeug aktivieren
|
||||
pdfjs-cursor-text-select-tool-button-label = Textauswahl-Werkzeug
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Schnelle Webanzeige:
|
||||
pdfjs-document-properties-linearized-yes = Ja
|
||||
pdfjs-document-properties-linearized-no = Nein
|
||||
pdfjs-document-properties-close-button = Schließen
|
||||
pdfjs-digital-signature-properties-view-certificate = Zertifikat ansehen
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Grund: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Zeitstempel: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] ({ $count }) Untersignatur
|
||||
*[other] ({ $count }) Untersignaturen
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -299,7 +278,7 @@ pdfjs-rendering-error = Beim Darstellen der Seite trat ein Fehler auf.
|
||||
# (32000-1:2008 Table 169 – Annotation types).
|
||||
# Some common types are e.g.: "Check", "Text", "Comment", "Note"
|
||||
pdfjs-text-annotation-type =
|
||||
.alt = [{ $type } Anmerkung]
|
||||
.alt = [Anlage: { $type }]
|
||||
# Variables:
|
||||
# $dateObj (Date) - the modification date and time of the annotation
|
||||
pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
@ -626,7 +605,7 @@ pdfjs-editor-add-signature-save-checkbox = Unterschrift speichern
|
||||
pdfjs-editor-add-signature-save-warning-message = Sie haben die Grenze von 5 gespeicherten Unterschriften erreicht. Entfernen Sie eine, um weitere zu speichern.
|
||||
pdfjs-editor-add-signature-image-upload-error-title = Grafik konnte nicht hochgeladen werden
|
||||
pdfjs-editor-add-signature-image-upload-error-description = Überprüfen Sie Ihre Netzwerkverbindung, oder versuchen Sie es mit einer anderen Grafik.
|
||||
pdfjs-editor-add-signature-image-no-data-error-title = Kann Grafik nicht in eine Unterschrift umwandeln
|
||||
pdfjs-editor-add-signature-image-no-data-error-title = Kann Grafik nicht in eine Signatur umwandeln
|
||||
pdfjs-editor-add-signature-image-no-data-error-description = Bitte versuchen Sie, eine andere Grafik hochzuladen.
|
||||
pdfjs-editor-add-signature-error-close-button = Schließen
|
||||
|
||||
@ -730,9 +709,9 @@ pdfjs-views-manager-pages-status-undo-delete-label =
|
||||
}
|
||||
pdfjs-views-manager-pages-status-waiting-ready-label = Ihre Datei wird vorbereitet…
|
||||
pdfjs-views-manager-pages-status-waiting-uploading-label = Datei wird hochgeladen…
|
||||
pdfjs-views-manager-status-warning-cut-label = Ausschneiden nicht möglich. Aktualisieren Sie die Seite und versuchen Sie es erneut.
|
||||
pdfjs-views-manager-status-warning-cut-label = Ausschneiden war nicht möglich. Aktualisieren Sie die Seite und versuchen Sie es erneut.
|
||||
pdfjs-views-manager-status-warning-copy-label = Kopieren nicht möglich. Aktualisieren Sie die Seite und versuchen Sie es erneut.
|
||||
pdfjs-views-manager-status-warning-delete-label = Löschen nicht möglich. Aktualisieren Sie die Seite und versuchen Sie es erneut.
|
||||
pdfjs-views-manager-status-warning-delete-label = Löschen war nicht möglich. Aktualisieren Sie die Seite und versuchen Sie es erneut.
|
||||
pdfjs-views-manager-status-warning-save-label = Speichern nicht möglich. Aktualisieren Sie die Seite und versuchen Sie es erneut.
|
||||
pdfjs-views-manager-status-undo-button-label = Rückgängig
|
||||
pdfjs-views-manager-status-done-button-label = Fertig
|
||||
@ -753,79 +732,11 @@ pdfjs-views-manager-waiting-for-file = Datei wird hochgeladen…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Seiten verwalten
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Eigenschaften digitaler Signatur
|
||||
.aria-label = Eigenschaften digitaler Signatur
|
||||
pdfjs-digital-signature-properties-button-label = Eigenschaften digitaler Signatur
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokument wurde mit einer gültigen digitalen Signatur signiert
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokument signiert, aber { $count } digitale Signatur konnte nicht verifiziert werden
|
||||
*[other] Dokument signiert, aber { $count } digitale Signaturen konnten nicht verifiziert werden
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Dokument mit { $count } Zertifikat signiert, das nicht vertrauenswürdig ist
|
||||
*[other] Dokument mit { $count } Zertifikaten signiert, die nicht vertrauenswürdig sind
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokument mit { $count } abgelaufenen Zertifikat signiert
|
||||
*[other] Dokument mit { $count } abgelaufenen Zertifikaten signiert
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Dokument hat { $count } ungültige digitale Signatur
|
||||
*[other] Dokument hat { $count } ungültige digitale Signaturen
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokument mit { $count } gesperrten Zertifikat signiert
|
||||
*[other] Dokument mit { $count } gesperrten Zertifikaten signiert
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Status: Signatur überprüft
|
||||
pdfjs-digital-signature-properties-status-invalid = Status: Signatur ungültig
|
||||
pdfjs-digital-signature-properties-status-unknown = Status: Verifizieren nicht möglich (nicht unterstützt)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Zertifikat: Vertrauenswürdig ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Zertifikat: Nicht verfügbar
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Zertifikat: Nicht vertrauenswürdig
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Zertifikat: Unbekannter Aussteller ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Zertifikat: Selbstsigniert ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Zertifikat: Nicht vertrauenswürdiger Aussteller ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Zertifikat: Abgelaufen
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Zertifikat: Abgelaufen ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Zertifikat: Widerrufen
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
.title = Gespeicherte Unterschrift entfernen
|
||||
pdfjs-editor-delete-signature-button-label1 = Gespeicherte Unterschrift entfernen
|
||||
.title = Gespeicherte Signatur entfernen
|
||||
pdfjs-editor-delete-signature-button-label1 = Gespeicherte Signatur entfernen
|
||||
|
||||
## Editor toolbar
|
||||
|
||||
|
||||
@ -153,29 +153,6 @@ pdfjs-document-properties-linearized = Fast Web View:
|
||||
pdfjs-document-properties-linearized-yes = Jo
|
||||
pdfjs-document-properties-linearized-no = Ně
|
||||
pdfjs-document-properties-close-button = Zacyniś
|
||||
pdfjs-digital-signature-properties-view-certificate = Certifikat pokazaś
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Pśicyna: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Casowy kołk: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] { $count } pódsignatura
|
||||
[two] { $count } pódsignaturje
|
||||
[few] { $count } pódsignatury
|
||||
*[other] { $count } pódsignaturow
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -771,84 +748,6 @@ pdfjs-views-manager-waiting-for-file = Dataja se nagrawa…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Boki zastojaś
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Kakosći digitalneje signatury
|
||||
.aria-label = Kakosći digitalneje signatury
|
||||
pdfjs-digital-signature-properties-button-label = Kakosći digitalneje signatury
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokument jo se signěrował z płaśiweju digitalneju signaturu
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokument jo se signěrował, ale { $count } digitalna signatura njedajo se wobkšuśiś
|
||||
[two] Dokument jo se signěrował, ale { $count } digitalnej signaturje njedajotej se wobkšuśiś
|
||||
[few] Dokument jo se signěrował, ale { $count } digitalne signatury njedaju se wobkšuśiś
|
||||
*[other] Dokument jo se signěrował, ale { $count } digitalnych signaturow njedajo se wobkšuśiś
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Dokument jo z { $count } certifikatom signěrowany, kótaryž njejo dowěry gódny
|
||||
[two] Dokument jo z { $count } certifikatoma signěrowany, kótarejž njejstej dowěry gódnej
|
||||
[few] Dokument jo z { $count } certifikatami signěrowany, kótarež njejsu dowěry gódne
|
||||
*[other] Dokument jo z { $count } certifikatami signěrowany, kótarež njejsu dowěry gódne
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokument jo z { $count } spadnjonym certifikatom signěrowany
|
||||
[two] Dokument jo z { $count } spadnjonyma certifikatoma signěrowany
|
||||
[few] Dokument jo z { $count } spadnjonymi certifikatami signěrowany
|
||||
*[other] Dokument jo z { $count } spadnjonymi certifikatami signěrowany
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Dokument ma { $count } njepłaśiwu digitalnu signaturu
|
||||
[two] Dokument ma { $count } njepłaśiwej digitalnej signaturje
|
||||
[few] Dokument ma { $count } njepłaśiwe digitalne signatury
|
||||
*[other] Dokument ma { $count } njepłaśiwych digitalnych signaturow
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokument jo z { $count } wótwołanym certifikatom signěrowany
|
||||
[two] Dokument jo z { $count } wótwołanyma certifikatoma signěrowany
|
||||
[few] Dokument jo z { $count } wótwołanymi certifikatami signěrowany
|
||||
*[other] Dokument jo z { $count } wótwołanymi certifikatami signěrowany
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Status: Signatura jo wobkšuśona
|
||||
pdfjs-digital-signature-properties-status-invalid = Status: Signatura jo njepłaśiwa
|
||||
pdfjs-digital-signature-properties-status-unknown = Status: Njedajo se wobkšuśiś (njepódpěra se)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certifikat: Dowěry gódny ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certifikat: Nic k dispoziciji
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certifikat: Dowěry njegódny
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certifikat: Njeznaty wudawaŕ ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certifikat: Samsigněrowany ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certifikat: Dowěry njegódny wudawaŕ ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certifikat: Spadnjony
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certifikat: Spadnjony ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certifikat: Wótwołany
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Ταχεία προβολή ιστού:
|
||||
pdfjs-document-properties-linearized-yes = Ναι
|
||||
pdfjs-document-properties-linearized-no = Όχι
|
||||
pdfjs-document-properties-close-button = Κλείσιμο
|
||||
pdfjs-digital-signature-properties-view-certificate = Προβολή πιστοποιητικού
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Αιτία: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Χρονοσήμανση: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Δευτερεύουσα υπογραφή ({ $count })
|
||||
*[other] Δευτερεύουσες υπογραφές ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Μεταφόρτωση αρχείου…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Διαχείριση σελίδων
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Ιδιότητες ψηφιακής υπογραφής
|
||||
.aria-label = Ιδιότητες ψηφιακής υπογραφής
|
||||
pdfjs-digital-signature-properties-button-label = Ιδιότητες ψηφιακής υπογραφής
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Το έγγραφο έχει υπογραφεί με έγκυρη ψηφιακή υπογραφή
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Το έγγραφο έχει υπογραφεί, αλλά δεν ήταν δυνατή η επαλήθευση { $count } ψηφιακής υπογραφής
|
||||
*[other] Το έγγραφο έχει υπογραφεί, αλλά δεν ήταν δυνατή η επαλήθευση { $count } ψηφιακών υπογραφών
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Το έγγραφο έχει υπογραφεί με { $count } πιστοποιητικό που δεν είναι αξιόπιστο
|
||||
*[other] Το έγγραφο έχει υπογραφεί με { $count } πιστοποιητικά που δεν είναι αξιόπιστα
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Το έγγραφο έχει υπογραφεί με { $count } ληγμένο πιστοποιητικό
|
||||
*[other] Το έγγραφο έχει υπογραφεί με { $count } ληγμένα πιστοποιητικά
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Το έγγραφο διαθέτει { $count } μη έγκυρη ψηφιακή υπογραφή
|
||||
*[other] Το έγγραφο διαθέτει { $count } μη έγκυρες ψηφιακές υπογραφές
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Το έγγραφο έχει υπογραφεί με { $count } ανακληθέν πιστοποιητικό
|
||||
*[other] Το έγγραφο έχει υπογραφεί με { $count } ανακληθέντα πιστοποιητικά
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Κατάσταση: Επαληθευμένη υπογραφή
|
||||
pdfjs-digital-signature-properties-status-invalid = Κατάσταση: Μη έγκυρη υπογραφή
|
||||
pdfjs-digital-signature-properties-status-unknown = Κατάσταση: Αδυναμία επαλήθευσης (δεν υποστηρίζεται)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Πιστοποιητικό: Έμπιστο ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Πιστοποιητικό: Μη διαθέσιμο
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Πιστοποιητικό: Μη αξιόπιστο
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Πιστοποιητικό: Άγνωστος εκδότης ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Πιστοποιητικό: Αυτοϋπογεγραμμένο ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Πιστοποιητικό: Μη αξιόπιστος εκδότης ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Πιστοποιητικό: Έχει λήξει
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Πιστοποιητικό: Έχει λήξει ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Πιστοποιητικό: Έχει ανακληθεί
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Fast Web View:
|
||||
pdfjs-document-properties-linearized-yes = Yes
|
||||
pdfjs-document-properties-linearized-no = No
|
||||
pdfjs-document-properties-close-button = Close
|
||||
pdfjs-digital-signature-properties-view-certificate = View certificate
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Reason: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Timestamp: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Sub-signature ({ $count })
|
||||
*[other] Sub-signatures ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Uploading file…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Manage pages
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Digital signature properties
|
||||
.aria-label = Digital signature properties
|
||||
pdfjs-digital-signature-properties-button-label = Digital signature properties
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Document was signed with a valid digital signature
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Document signed but { $count } digital signature could not be verified
|
||||
*[other] Document signed but { $count } digital signatures could not be verified
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Document signed with { $count } certificate that is not trusted
|
||||
*[other] Document signed with { $count } certificates that are not trusted
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Document signed with { $count } expired certificate
|
||||
*[other] Document signed with { $count } expired certificates
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Document has { $count } invalid digital signature
|
||||
*[other] Document has { $count } invalid digital signatures
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Document signed with { $count } revoked certificate
|
||||
*[other] Document signed with { $count } revoked certificates
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Status: Signature verified
|
||||
pdfjs-digital-signature-properties-status-invalid = Status: Signature invalid
|
||||
pdfjs-digital-signature-properties-status-unknown = Status: Unable to verify (unsupported)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certificate: Trusted ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certificate: Unavailable
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certificate: Untrusted
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certificate: Unknown issuer ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certificate: Self-signed ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certificate: Untrusted issuer ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certificate: Expired
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certificate: Expired ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certificate: Revoked
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -785,96 +785,3 @@ pdfjs-views-manager-paste-button-after =
|
||||
pdfjs-new-badge-content = NEW
|
||||
|
||||
pdfjs-views-manager-waiting-for-file = Uploading file…
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Digital signature properties
|
||||
.aria-label = Digital signature properties
|
||||
pdfjs-digital-signature-properties-button-label = Digital signature properties
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Document was signed with a valid digital signature
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Document signed but { $count } digital signature could not be verified
|
||||
*[other] Document signed but { $count } digital signatures could not be verified
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Document signed with { $count } certificate that is not trusted
|
||||
*[other] Document signed with { $count } certificates that are not trusted
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Document signed with { $count } expired certificate
|
||||
*[other] Document signed with { $count } expired certificates
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Document has { $count } invalid digital signature
|
||||
*[other] Document has { $count } invalid digital signatures
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Document signed with { $count } revoked certificate
|
||||
*[other] Document signed with { $count } revoked certificates
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Status: Signature verified
|
||||
pdfjs-digital-signature-properties-status-invalid = Status: Signature invalid
|
||||
pdfjs-digital-signature-properties-status-unknown = Status: Unable to verify (unsupported)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certificate: Trusted ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certificate: Unavailable
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certificate: Untrusted
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certificate: Unknown issuer ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certificate: Self-signed ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certificate: Untrusted issuer ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certificate: Expired
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certificate: Expired ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certificate: Revoked
|
||||
|
||||
##
|
||||
|
||||
pdfjs-digital-signature-properties-view-certificate = View certificate
|
||||
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Reason: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Timestamp: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Sub-signature ({ $count })
|
||||
*[other] Sub-signatures ({ $count })
|
||||
}
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Rapida tekstaĵa vido:
|
||||
pdfjs-document-properties-linearized-yes = Jes
|
||||
pdfjs-document-properties-linearized-no = Ne
|
||||
pdfjs-document-properties-close-button = Fermi
|
||||
pdfjs-digital-signature-properties-view-certificate = Vidi atestilon
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Kialo: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Tempindiko: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Duaranga subskribo ({ $count })
|
||||
*[other] Duarangaj subskriboj ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Dosiero alŝutata…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Administri paĝojn
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Atributoj de cifereca subskribo
|
||||
.aria-label = Atributoj de cifereca subskribo
|
||||
pdfjs-digital-signature-properties-button-label = Atributoj de cifereca subskribo
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = La dokumento estis subskribita de valida cifereca subskribo
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokumento subskribita, tamen { $count } cifereca subskribo ne povis esti kontrolita
|
||||
*[other] Dokumento subskribita, tamen { $count } ciferecaj subskriboj ne povis esti kontrolita
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Dokumento subskribita de { $count } nefidata atestilo
|
||||
*[other] Dokumento subskribita de { $count } nefidataj atestiloj
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokumento subskribita de { $count } senvalidiĝinta atestilo
|
||||
*[other] Dokumento subskribita de { $count } senvalidiĝintaj atestiloj
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] La dokumento havas { $count } nevalidan ciferecan subskribon
|
||||
*[other] La dokumento havas { $count } nevalidajn ciferecajn subskribojn
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokumento subskribita de { $count } senvalidigita atestilo
|
||||
*[other] Dokumento subskribita de { $count } senvalidigitaj atestiloj
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Stato: Subskribo kontrolita
|
||||
pdfjs-digital-signature-properties-status-invalid = Stato: Subskribo nevalida
|
||||
pdfjs-digital-signature-properties-status-unknown = Stato: Ne eblas kontroli (nesubtenata)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Atestilo: Fidata ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Atestilo: Nedisponebla
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Atestilo: Ne fidata
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Atestilo: Nekonata eldoninto ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Atestilo: Memsubskribita ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Atestilo: Nefidata eldoninto ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Atestilo: Senvalidiĝinta
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Atestilo: Senvalidiĝinta ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Atestilo: Senvalidigita
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Vista rápida de la Web:
|
||||
pdfjs-document-properties-linearized-yes = Sí
|
||||
pdfjs-document-properties-linearized-no = No
|
||||
pdfjs-document-properties-close-button = Cerrar
|
||||
pdfjs-digital-signature-properties-view-certificate = Ver certificado
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Razón: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Fecha: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Subfirma ({ $count })
|
||||
*[other] Subfirmas ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Subiendo archivo…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Administrar páginas
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Propiedades de firma digital
|
||||
.aria-label = Propiedades de firma digital
|
||||
pdfjs-digital-signature-properties-button-label = Propiedades de firma digital
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = El documento fue firmado con una firma digital válida
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Documento firmado pero { $count } firma digital no pudo ser verificada
|
||||
*[other] Documento firmado pero { $count } firmas digitales no pudieron ser verificadas
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Documento firmado con { $count } certificado que no es confiable
|
||||
*[other] Documento firmado con { $count } certificados que no son confiables
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Documento firmado con { $count } certificado expirado
|
||||
*[other] Documento firmado con { $count } certificado expirado
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] El documento tiene { $count } firmas digital inválida
|
||||
*[other] El documento tiene { $count } firmas digitales inválidas
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Documento firmado con { $count } certificado revocado
|
||||
*[other] Documento firmado con { $count } certificados revocados
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Estado: Firma verificada
|
||||
pdfjs-digital-signature-properties-status-invalid = Estado: Firma inválida
|
||||
pdfjs-digital-signature-properties-status-unknown = Estado: No se puede verificar (no soportada)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certificado: Confiable ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certificado: No disponible
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certificado: No confiable
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certificado: Emisor desconocido ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certificado: Autofirmado ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certificado: Emisor no confiable ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certificado: Vencido
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certificado: Vencido ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certificado: Revocado
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Vista rápida en Web:
|
||||
pdfjs-document-properties-linearized-yes = Sí
|
||||
pdfjs-document-properties-linearized-no = No
|
||||
pdfjs-document-properties-close-button = Cerrar
|
||||
pdfjs-digital-signature-properties-view-certificate = Ver certificado
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Motivo: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Marca de tiempo: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Subfirma ({ $count })
|
||||
*[other] Subfirmas ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Subiendo archivo…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Gestionar páginas
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Propiedades de firma digital
|
||||
.aria-label = Propiedades de firma digital
|
||||
pdfjs-digital-signature-properties-button-label = Propiedades de firma digital
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = El documento fue firmado con una firma digital válida
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Documento firmado, pero no se pudo verificar la firma digital
|
||||
*[other] Documento firmado, pero no se pudieron verificar las { $count } firmas digitales
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Documento firmado con { $count } certificado que no es de confianza
|
||||
*[other] Documento firmado con { $count } certificados que no son de confianza
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Documento firmado con { $count } certificado expirado
|
||||
*[other] Documento firmado con { $count } certificados expirados
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] El documento tiene { $count } firma digital no válida
|
||||
*[other] El documento tiene { $count } firmas digitales no válidas
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Documento firmado con { $count } certificado revocado
|
||||
*[other] Documento firmado con { $count } certificados revocados
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Estado: Firma verificada
|
||||
pdfjs-digital-signature-properties-status-invalid = Estado: Firma inválida
|
||||
pdfjs-digital-signature-properties-status-unknown = Estado: No se puede verificar (no compatible)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certificado: Confiable ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certificado: No disponible
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certificado: No confiable
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certificado: Emisor desconocido ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certificado: Autofirmado ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certificado: Emisor no confiable ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certificado: Expirado
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certificado: Expirado ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certificado: Revocado
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,7 +153,6 @@ pdfjs-document-properties-linearized = Vista rápida de la web:
|
||||
pdfjs-document-properties-linearized-yes = Sí
|
||||
pdfjs-document-properties-linearized-no = No
|
||||
pdfjs-document-properties-close-button = Cerrar
|
||||
pdfjs-digital-signature-properties-view-certificate = Ver certificado
|
||||
|
||||
## Print
|
||||
|
||||
@ -162,8 +161,8 @@ pdfjs-print-progress-message = Preparando documento para impresión…
|
||||
# $progress (Number) - percent value
|
||||
pdfjs-print-progress-percent = { $progress }%
|
||||
pdfjs-print-progress-close-button = Cancelar
|
||||
pdfjs-printing-not-supported = Advertencia: La impresión no está completamente soportada por este navegador.
|
||||
pdfjs-printing-not-ready = Advertencia: El PDF no cargó completamente para impresión.
|
||||
pdfjs-printing-not-supported = Advertencia: La impresión no esta completamente soportada por este navegador.
|
||||
pdfjs-printing-not-ready = Advertencia: El PDF no cargo completamente para impresión.
|
||||
|
||||
## Tooltips and alt text for side panel toolbar buttons
|
||||
|
||||
@ -266,7 +265,7 @@ pdfjs-page-landmark =
|
||||
## Loading indicator messages
|
||||
|
||||
pdfjs-loading-error = Un error ocurrió al cargar el PDF.
|
||||
pdfjs-invalid-file-error = Archivo PDF inválido o dañado.
|
||||
pdfjs-invalid-file-error = Archivo PDF invalido o dañado.
|
||||
pdfjs-missing-file-error = Archivo PDF no encontrado.
|
||||
pdfjs-unexpected-response-error = Respuesta inesperada del servidor.
|
||||
pdfjs-rendering-error = Un error ocurrió al renderizar la página.
|
||||
@ -361,7 +360,7 @@ pdfjs-editor-remove-signature-button =
|
||||
pdfjs-editor-free-text-color-input = Color
|
||||
pdfjs-editor-free-text-size-input = Tamaño
|
||||
pdfjs-editor-ink-color-input = Color
|
||||
pdfjs-editor-ink-thickness-input = Grosor
|
||||
pdfjs-editor-ink-thickness-input = Grossor
|
||||
pdfjs-editor-ink-opacity-input = Opacidad
|
||||
pdfjs-editor-stamp-add-image-button =
|
||||
.title = Agregar imagen
|
||||
@ -581,7 +580,7 @@ pdfjs-editor-add-signature-type-input =
|
||||
.aria-label = Escribe tu firma
|
||||
.placeholder = Escribe tu firma
|
||||
pdfjs-editor-add-signature-draw-placeholder = Dibuja tu firma
|
||||
pdfjs-editor-add-signature-draw-thickness-range-label = Grosor
|
||||
pdfjs-editor-add-signature-draw-thickness-range-label = Grossor
|
||||
# Variables:
|
||||
# $thickness (Number) - the thickness (in pixels) of the line used to draw a signature.
|
||||
pdfjs-editor-add-signature-draw-thickness-range =
|
||||
@ -698,15 +697,15 @@ pdfjs-views-manager-status-undo-cut-label =
|
||||
# $count (Number) - the number of selected pages to be copied.
|
||||
pdfjs-views-manager-pages-status-undo-copy-label =
|
||||
{ $count ->
|
||||
[one] 1 página copiada
|
||||
*[other] { $count } páginas copiadas
|
||||
[one] 1 pagina copiada
|
||||
*[other] { $count } paginas copiadas
|
||||
}
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages to be deleted.
|
||||
pdfjs-views-manager-pages-status-undo-delete-label =
|
||||
{ $count ->
|
||||
[one] 1 página eliminada
|
||||
*[other] { $count } páginas eliminadas
|
||||
[one] 1 pagina eliminada
|
||||
*[other] { $count } paginas eliminadas
|
||||
}
|
||||
pdfjs-views-manager-pages-status-waiting-ready-label = Preparando tu archivo…
|
||||
pdfjs-views-manager-pages-status-waiting-uploading-label = Subiendo archivo…
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Webeko ikuspegi bizkorra:
|
||||
pdfjs-document-properties-linearized-yes = Bai
|
||||
pdfjs-document-properties-linearized-no = Ez
|
||||
pdfjs-document-properties-close-button = Itxi
|
||||
pdfjs-digital-signature-properties-view-certificate = Ikusi ziurtagiria
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Arrazoia: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Denbora-marka: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Azpi-sinadura ({ $count })
|
||||
*[other] Azpi-sinadurak ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -422,11 +401,11 @@ pdfjs-editor-comments-sidebar-no-comments-link = Argibide gehiago
|
||||
|
||||
## Alt-text dialog
|
||||
|
||||
pdfjs-editor-alt-text-button-label = Ordezko testua
|
||||
pdfjs-editor-alt-text-button-label = Testu alternatiboa
|
||||
pdfjs-editor-alt-text-edit-button =
|
||||
.aria-label = Editatu ordezko testua
|
||||
.aria-label = Editatu testu alternatiboa
|
||||
pdfjs-editor-alt-text-dialog-label = Aukeratu aukera
|
||||
pdfjs-editor-alt-text-dialog-description = Ordezko testuak laguntzen du jendeak ezin duenean irudia ikusi edo ez denean kargatzen.
|
||||
pdfjs-editor-alt-text-dialog-description = Testu alternatiboak laguntzen du jendeak ezin duenean irudia ikusi edo ez denean kargatzen.
|
||||
pdfjs-editor-alt-text-add-description-label = Gehitu azalpena
|
||||
pdfjs-editor-alt-text-add-description-description = Saiatu idazten gaia, ezarpena edo ekintzak deskribatzen dituen esaldi 1 edo 2.
|
||||
pdfjs-editor-alt-text-mark-decorative-label = Markatu apaingarri gisa
|
||||
@ -439,7 +418,7 @@ pdfjs-editor-alt-text-textarea =
|
||||
.placeholder = Adibidez, "gizon gaztea mahaian eserita dago bazkaltzeko"
|
||||
# Alternative text (alt text) helps when people can't see the image.
|
||||
pdfjs-editor-alt-text-button =
|
||||
.aria-label = Ordezko testua
|
||||
.aria-label = Testu alternatiboa
|
||||
|
||||
## Editor resizers
|
||||
## This is used in an aria label to help to understand the role of the resizer.
|
||||
@ -491,38 +470,38 @@ pdfjs-editor-highlight-show-all-button =
|
||||
## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy.
|
||||
|
||||
# Modal header positioned above a text box where users can edit the alt text.
|
||||
pdfjs-editor-new-alt-text-dialog-edit-label = Editatu ordezko testua (irudiaren azalpena)
|
||||
pdfjs-editor-new-alt-text-dialog-edit-label = Editatu testu alternatiboa (irudiaren azalpena)
|
||||
# Modal header positioned above a text box where users can add the alt text.
|
||||
pdfjs-editor-new-alt-text-dialog-add-label = Gehitu ordezko testua (irudiaren azalpena)
|
||||
pdfjs-editor-new-alt-text-dialog-add-label = Gehitu testu alternatiboa (irudiaren azalpena)
|
||||
pdfjs-editor-new-alt-text-textarea =
|
||||
.placeholder = Idatzi zure azalpena hemen…
|
||||
# This text refers to the alt text box above this description. It offers a definition of alt text.
|
||||
pdfjs-editor-new-alt-text-description = Azalpen laburra irudia ikusi ezin duen jendearentzat edo irudia kargatu ezin denerako.
|
||||
# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human.
|
||||
pdfjs-editor-new-alt-text-disclaimer1 = Ordezko testu hau automatikoki sortu da eta okerra izan liteke.
|
||||
pdfjs-editor-new-alt-text-disclaimer1 = Testu alternatibo hau automatikoki sortu da eta okerra izan liteke.
|
||||
pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Argibide gehiago
|
||||
pdfjs-editor-new-alt-text-create-automatically-button-label = Sortu ordezko testua automatikoki
|
||||
pdfjs-editor-new-alt-text-create-automatically-button-label = Sortu testu alternatiboa automatikoki
|
||||
pdfjs-editor-new-alt-text-not-now-button = Une honetan ez
|
||||
pdfjs-editor-new-alt-text-error-title = Ezin da ordezko testua automatikoki sortu
|
||||
pdfjs-editor-new-alt-text-error-description = Idatzi zure ordezko testu propioa edo saiatu berriro geroago.
|
||||
pdfjs-editor-new-alt-text-error-title = Ezin da testu alternatiboa automatikoki sortu
|
||||
pdfjs-editor-new-alt-text-error-description = Idatzi zure testu alternatibo propioa edo saiatu berriro geroago.
|
||||
pdfjs-editor-new-alt-text-error-close-button = Itxi
|
||||
# Variables:
|
||||
# $totalSize (Number) - the total size (in MB) of the AI model.
|
||||
# $downloadedSize (Number) - the downloaded size (in MB) of the AI model.
|
||||
pdfjs-editor-new-alt-text-ai-model-downloading-progress = Ordezko testuaren AA modeloa deskargatzen ({ $downloadedSize }/{ $totalSize } MB)
|
||||
.aria-valuetext = Ordezko testuaren AA modeloa deskargatzen ({ $downloadedSize }/{ $totalSize } MB)
|
||||
pdfjs-editor-new-alt-text-ai-model-downloading-progress = Testu alternatiboaren AA modeloa deskargatzen ({ $downloadedSize }/{ $totalSize } MB)
|
||||
.aria-valuetext = Testu alternatiboaren AA modeloa deskargatzen ({ $downloadedSize }/{ $totalSize } MB)
|
||||
# This is a button that users can click to edit the alt text they have already added.
|
||||
pdfjs-editor-new-alt-text-added-button =
|
||||
.aria-label = Ordezko testua gehituta
|
||||
pdfjs-editor-new-alt-text-added-button-label = Ordezko testua gehituta
|
||||
.aria-label = Testu alternatiboa gehituta
|
||||
pdfjs-editor-new-alt-text-added-button-label = Testu alternatiboa gehituta
|
||||
# This is a button that users can click to open the alt text editor and add alt text when it is not present.
|
||||
pdfjs-editor-new-alt-text-missing-button =
|
||||
.aria-label = Ordezko testua falta da
|
||||
pdfjs-editor-new-alt-text-missing-button-label = Ordezko testua falta da
|
||||
.aria-label = Testu alternatiboa falta da
|
||||
pdfjs-editor-new-alt-text-missing-button-label = Testu alternatiboa falta da
|
||||
# This is a button that opens up the alt text modal where users should review the alt text that was automatically generated.
|
||||
pdfjs-editor-new-alt-text-to-review-button =
|
||||
.aria-label = Berrikusi ordezko testua
|
||||
pdfjs-editor-new-alt-text-to-review-button-label = Berrikusi ordezko testua
|
||||
.aria-label = Berrikusi testu alternatiboa
|
||||
pdfjs-editor-new-alt-text-to-review-button-label = Berrikusi testu alternatiboa
|
||||
# "Created automatically" is a prefix that will be added to the beginning of any alt text that has been automatically generated. After the colon, the user will see/hear the actual alt text description. If the alt text has been edited by a human, this prefix will not appear.
|
||||
# Variables:
|
||||
# $generatedAltText (String) - the generated alt-text.
|
||||
@ -531,22 +510,22 @@ pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Automatikoki sort
|
||||
## Image alt-text settings
|
||||
|
||||
pdfjs-image-alt-text-settings-button =
|
||||
.title = Irudien ordezko testuaren ezarpenak
|
||||
pdfjs-image-alt-text-settings-button-label = Irudien ordezko testuaren ezarpenak
|
||||
pdfjs-editor-alt-text-settings-dialog-label = Irudien ordezko testuaren ezarpenak
|
||||
pdfjs-editor-alt-text-settings-automatic-title = Ordezko testu automatikoa
|
||||
pdfjs-editor-alt-text-settings-create-model-button-label = Sortu ordezko testua automatikoki
|
||||
.title = Irudiaren testu alternatiboaren ezarpenak
|
||||
pdfjs-image-alt-text-settings-button-label = Irudiaren testu alternatiboaren ezarpenak
|
||||
pdfjs-editor-alt-text-settings-dialog-label = Irudiaren testu alternatiboaren ezarpenak
|
||||
pdfjs-editor-alt-text-settings-automatic-title = Testu alternatibo automatikoa
|
||||
pdfjs-editor-alt-text-settings-create-model-button-label = Sortu testu alternatiboa automatikoki
|
||||
pdfjs-editor-alt-text-settings-create-model-description = Azalpenak iradokitzen ditu irudia ikusi ezin duen jendearentzat edo irudia kargatu ezin denerako.
|
||||
# Variables:
|
||||
# $totalSize (Number) - the total size (in MB) of the AI model.
|
||||
pdfjs-editor-alt-text-settings-download-model-label = Ordezko testuaren AA modeloa ({ $totalSize } MB)
|
||||
pdfjs-editor-alt-text-settings-ai-model-description = Zure gailuan modu lokalean exekutatzen da eta zure datuak pribatu mantentzen dira. Ordezko testu automatikorako beharrezkoa.
|
||||
pdfjs-editor-alt-text-settings-download-model-label = Testu alternatiboaren AA modeloa ({ $totalSize } MB)
|
||||
pdfjs-editor-alt-text-settings-ai-model-description = Zure gailuan modu lokalean exekutatzen da eta zure datuak pribatu mantentzen dira. Testu alternatibo automatikorako beharrezkoa.
|
||||
pdfjs-editor-alt-text-settings-delete-model-button = Ezabatu
|
||||
pdfjs-editor-alt-text-settings-download-model-button = Deskargatu
|
||||
pdfjs-editor-alt-text-settings-downloading-model-button = Deskargatzen…
|
||||
pdfjs-editor-alt-text-settings-editor-title = Ordezko testuaren editorea
|
||||
pdfjs-editor-alt-text-settings-show-dialog-button-label = Erakutsi ordezko testua irudi bat gehitzean berehala
|
||||
pdfjs-editor-alt-text-settings-show-dialog-description = Zure irudi guztiek ordezko testua dutela ziurtatzen laguntzen dizu.
|
||||
pdfjs-editor-alt-text-settings-editor-title = Testu alternatiboaren editorea
|
||||
pdfjs-editor-alt-text-settings-show-dialog-button-label = Erakutsi testu alternatiboa irudi bat gehitzean berehala
|
||||
pdfjs-editor-alt-text-settings-show-dialog-description = Zure irudiek testu alternatiboa duela ziurtatzen laguntzen dizu.
|
||||
pdfjs-editor-alt-text-settings-close-button = Itxi
|
||||
|
||||
## Accessibility labels (announced by screen readers) for objects added to the editor.
|
||||
@ -584,7 +563,7 @@ pdfjs-editor-undo-bar-close-button-label = Itxi
|
||||
pdfjs-editor-add-signature-dialog-label =
|
||||
Leiho modal honek PDF dokumentu batera gehitzeko sinadurak
|
||||
sortzea ahalbidetzen dio erabiltzaileari. Erabiltzaileak izena edita
|
||||
dezake (ordezko testu modura ere erabiltzen dena) eta sinadura
|
||||
dezake (testu alternatibo modura ere erabiltzen dena) eta sinadura
|
||||
gordetzeko aukera du gehiagotan erabili ahal izateko.
|
||||
pdfjs-editor-add-signature-dialog-title = Gehitu sinadura
|
||||
|
||||
@ -619,9 +598,9 @@ pdfjs-editor-add-signature-image-browse-link =
|
||||
|
||||
## Controls
|
||||
|
||||
pdfjs-editor-add-signature-description-label = Azalpena (ordezko testua)
|
||||
pdfjs-editor-add-signature-description-label = Azalpena (testu alternatiboa)
|
||||
pdfjs-editor-add-signature-description-input =
|
||||
.title = Azalpena (ordezko testua)
|
||||
.title = Azalpena (testu alternatiboa)
|
||||
pdfjs-editor-add-signature-description-default-when-drawing = Sinadura
|
||||
pdfjs-editor-add-signature-clear-button-label = Garbitu sinadura
|
||||
pdfjs-editor-add-signature-clear-button =
|
||||
@ -757,74 +736,6 @@ pdfjs-views-manager-waiting-for-file = Fitxategia igotzen…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Kudeatu orriak
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Sinadura digitalaren propietateak
|
||||
.aria-label = Sinadura digitalaren propietateak
|
||||
pdfjs-digital-signature-properties-button-label = Sinadura digitalaren propietateak
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokumentua baliozko sinadura digitalarekin sinatuta dago
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokumentua sinatuta dago baina sinadura digital bat ezin izan da egiaztatu
|
||||
*[other] Dokumentua sinatuta dago baina { $count } sinadura digital ezin izan dira egiaztatu
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Document ziurtagiri fidagaitz batekin sinatuta dago
|
||||
*[other] Document { $count } ziurtagiri fidagaitzekin sinatuta dago
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokumentua iraungitako ziurtagiri batekin sinatuta dago
|
||||
*[other] Dokumentua iraungitako { $count } ziurtagirirekin sinatuta dago
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Dokumentuak sinadura digital baliogabe bat du
|
||||
*[other] Dokumentuak { $count } sinadura digital baliogabe ditu
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokumentua baliogabetutako ziurtagiri batekin sinatuta dago
|
||||
*[other] Dokumentua baliogabetutako { $count } ziurtagirirekin sinatuta dago
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Egoera: sinadura egiaztatuta
|
||||
pdfjs-digital-signature-properties-status-invalid = Egoera: sinadura baliogabea
|
||||
pdfjs-digital-signature-properties-status-unknown = Egoera: ezin da egiaztatu (euskarririk ez)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Ziurtagiria: fidagarria ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Ziurtagiria: ez dago erabilgarri
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Ziurtagiria: fidagaitza
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Ziurtagiria: jaulkitzaile ezezaguna ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Ziurtagiria: bere buruak sinatutakoa ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Ziurtagiria: jaulkitzaile fidagaitza ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Ziurtagiria: iraungita
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Ziurtagiria: iraungita ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Ziurtagiria: baliogabetuta
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Nopea web-katselu:
|
||||
pdfjs-document-properties-linearized-yes = Kyllä
|
||||
pdfjs-document-properties-linearized-no = Ei
|
||||
pdfjs-document-properties-close-button = Sulje
|
||||
pdfjs-digital-signature-properties-view-certificate = Näytä varmenne
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Syy: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Aikaleima: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Aliallekirjoitus ({ $count })
|
||||
*[other] Aliallekirjoitukset ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Lähetetään tiedostoa…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Hallitse sivuja
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Digitaalisen allekirjoituksen ominaisuudet
|
||||
.aria-label = Digitaalisen allekirjoituksen ominaisuudet
|
||||
pdfjs-digital-signature-properties-button-label = Digitaalisen allekirjoituksen ominaisuudet
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Asiakirja allekirjoitettiin kelvollisella digitaalisella allekirjoituksella
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Asiakirja allekirjoitettu, mutta { $count } digitaalista allekirjoitusta ei voitu vahvistaa
|
||||
*[other] Asiakirja allekirjoitettu, mutta { $count } digitaalista allekirjoitusta ei voitu vahvistaa
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Asiakirja on allekirjoitettu { $count } varmenteella, johon ei luoteta
|
||||
*[other] Asiakirja on allekirjoitettu { $count } varmenteella, joihin ei luoteta
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Asiakirja allekirjoitettu { $count } vanhentuneella varmenteella
|
||||
*[other] Asiakirja allekirjoitettu { $count } vanhentuneella varmenteella
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Asiakirjassa on { $count } virheellinen digitaalinen allekirjoitus
|
||||
*[other] Asiakirjassa on { $count } virheellistä digitaalista allekirjoitusta
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Asiakirja allekirjoitettu { $count } kumotulla varmenteella
|
||||
*[other] Asiakirja allekirjoitettu { $count } kumotulla varmenteella
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Tila: Allekirjoitus vahvistettu
|
||||
pdfjs-digital-signature-properties-status-invalid = Tila: Allekirjoitus virheellinen
|
||||
pdfjs-digital-signature-properties-status-unknown = Tila: Vahvistus epäonnistui (ei tuettu)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Varmenne: Luotettu ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Varmenne: Ei saatavilla
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Varmenne: Ei-luotettu
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Varmenne: Tuntematon myöntäjä ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Varmenne: Itse allekirjoitettu ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Varmenne: Ei-luotettu myöntäjä ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Varmenne: Vanhentunut
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Varmenne: Vanhentunut ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Varmenne: Kumottu
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Affichage rapide des pages web :
|
||||
pdfjs-document-properties-linearized-yes = Oui
|
||||
pdfjs-document-properties-linearized-no = Non
|
||||
pdfjs-document-properties-close-button = Fermer
|
||||
pdfjs-digital-signature-properties-view-certificate = Afficher le certificat
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Raison : { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Horodatage : { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Sous-signature ({ $count })
|
||||
*[other] Sous-signatures ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -257,7 +236,7 @@ pdfjs-find-match-count = Occurrence { $current } sur { $total }
|
||||
# $limit (Number) - the maximum number of matches
|
||||
pdfjs-find-match-count-limit =
|
||||
{ $limit ->
|
||||
[1] Plus d’une occurrence
|
||||
[one] Plus d’{ $limit } occurrence
|
||||
*[other] Plus de { $limit } occurrences
|
||||
}
|
||||
pdfjs-find-not-found = Expression non trouvée
|
||||
@ -749,74 +728,6 @@ pdfjs-views-manager-waiting-for-file = Envoi du fichier…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Gérer les pages
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Propriétés de la signature numérique
|
||||
.aria-label = Propriétés de la signature numérique
|
||||
pdfjs-digital-signature-properties-button-label = Propriétés de la signature numérique
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Le document a été signé avec une signature numérique valide
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Document signé mais { $count } signature numérique n’a pas pu être vérifiée
|
||||
*[other] Document signé mais { $count } signatures numériques n’ont pas pu être vérifiées
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[1] Document signé avec un certificat non digne de confiance
|
||||
*[other] Document signé avec { $count } certificats non dignes de confiance
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[1] Document signé avec un certificat expiré
|
||||
*[other] Document signé avec { $count } certificats expirés
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[1] Le document contient une signature numérique non valide
|
||||
*[other] Le document contient { $count } signatures numériques non valides
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[1] Document signé avec un certificat révoqué
|
||||
*[other] Document signé avec { $count } certificats révoqués
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = État : signature vérifiée
|
||||
pdfjs-digital-signature-properties-status-invalid = État : signature invalide
|
||||
pdfjs-digital-signature-properties-status-unknown = État : impossible à vérifier (non pris en charge)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certificat : fiable ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certificat : indisponible
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certificat : non fiable
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certificat : émetteur inconnu ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certificat : auto-signé ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certificat : émetteur non fiable ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certificat : expiré
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certificat : expiré ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certificat : révoqué
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Flugge webwerjefte:
|
||||
pdfjs-document-properties-linearized-yes = Ja
|
||||
pdfjs-document-properties-linearized-no = Nee
|
||||
pdfjs-document-properties-close-button = Slute
|
||||
pdfjs-digital-signature-properties-view-certificate = Sertifikaat besjen
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Reden: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Tiidstimpel: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Undertekening ({ $count })
|
||||
*[other] Undertekeningen ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Bestân oplade…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Siden beheare
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Eigenskippen fan digitale hantekening
|
||||
.aria-label = Eigenskippen fan digitale hantekening
|
||||
pdfjs-digital-signature-properties-button-label = Eigenskippen fan digitale hantekening
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokumint is ûndertekene mei in jildige digitale hantekening
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokumint ûndertekene, mar { $count } digitale hantekening koe net ferifiearre wurde
|
||||
*[other] Dokumint ûndertekene, mar { $count } digitale hantekeningen koene net ferifiearre wurde
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Dokumint ûndertekene mei { $count } sertifikaat dat net fertroud wurdt
|
||||
*[other] Dokumint ûndertekene mei { $count } sertifikaten dy’t net fertroud wurde
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokumint ûndertekene mei { $count } ferrûne sertifikaat
|
||||
*[other] Dokumint ûndertekene mei { $count } ferrûne sertifikaten
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Dokumint hat { $count } ûnjildige digitale hantekening
|
||||
*[other] Dokumint hat { $count } ûnjildige digitale hantekeningen
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokumint ûndertekene mei { $count } ynlutsen sertifikaat
|
||||
*[other] Dokumint ûndertekene mei { $count } ynlutsen sertifikaten
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Status: hantekening ferifiearre
|
||||
pdfjs-digital-signature-properties-status-invalid = Status: hantekening ûnjildich
|
||||
pdfjs-digital-signature-properties-status-unknown = Status: kin net ferifiearje wurde (net stipe)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Sertifikaat: fertroud ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Sertifikaat: net beskikber
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Sertifikaat: net fertroud
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Sertifikaat: Unbekende útjouwer ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Sertifikaat: selsûndertekene ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Sertifikaat: net-fertroude útjouwer ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Sertifikaat: ferrûn
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Sertifikaat: ferrûn ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Sertifikaat: ynlutsen
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Ñanduti jahecha pya’e:
|
||||
pdfjs-document-properties-linearized-yes = Añete
|
||||
pdfjs-document-properties-linearized-no = Ahániri
|
||||
pdfjs-document-properties-close-button = Mboty
|
||||
pdfjs-digital-signature-properties-view-certificate = Mboajapyre jehecha
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Mba’ére: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Ára: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Mboheraguapy’i ({ $count })
|
||||
*[other] Mboheraguapy’ieta ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -581,7 +560,6 @@ pdfjs-editor-undo-bar-close-button-label = Mboty
|
||||
|
||||
## Add a signature dialog
|
||||
|
||||
pdfjs-editor-add-signature-dialog-label = Ko modal omoneĩ poruhárape omoheñóivo mboheraguapy ombojuaju hag̃ua PDF rehe. Upe poruhára ombosako’ikuaa téra (oikóva avei moñe’ẽrã mokõihávarõ) ha, ejaposérõ, eñongatu mboheraguapy eiporujey hag̃ua.
|
||||
pdfjs-editor-add-signature-dialog-title = Embojuaju teraguapy
|
||||
|
||||
## Tab names
|
||||
@ -753,49 +731,6 @@ pdfjs-views-manager-waiting-for-file = Ehupihína marandurenda…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Eñangareko kuotiarogue
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Firma digital oguerekóva
|
||||
.aria-label = Firma digital oguerekóva
|
||||
pdfjs-digital-signature-properties-button-label = Firma digital oguerekóva
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Pe kuatia oñemboheraguapy firma digital oikóvape
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Heko: Mboheraguapy hechajeypyre
|
||||
pdfjs-digital-signature-properties-status-invalid = Heko: Mboheraguapy oiko’ỹva
|
||||
pdfjs-digital-signature-properties-status-unknown = Heko: Ndojehechajeykuaái (ndojokupytýi)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Mboajapyre: Jeroviaha ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Mboajapyre: Oĩ’ỹva
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Mboajapyre: Jerovia’ỹha
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Mboajapyre: Guenohẽha jekuaa’ỹva ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Mboajapyre: Heraguapejeheguíva { $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Mboajapyre: Guenohẽha jerovia’ỹha ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Mboajapyre: Oikove’ỹmava
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Mboajapyre: Oikove’ỹmava ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Mboajapyre: Mbojevypyre
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = תצוגת דף מהירה:
|
||||
pdfjs-document-properties-linearized-yes = כן
|
||||
pdfjs-document-properties-linearized-no = לא
|
||||
pdfjs-document-properties-close-button = סגירה
|
||||
pdfjs-digital-signature-properties-view-certificate = הצגת אישור
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = סיבה: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = חותמת זמן: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] חתימת משנה ({ $count })
|
||||
*[other] חתימות משנה ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = בתהליך העלאת הקובץ…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = ניהול עמודים
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = מאפייני חתימה דיגיטלית
|
||||
.aria-label = מאפייני חתימה דיגיטלית
|
||||
pdfjs-digital-signature-properties-button-label = מאפייני חתימה דיגיטלית
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = המסמך נחתם בחתימה דיגיטלית תקפה
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] המסמך חתום אך לא ניתן היה לאמת חתימה דיגיטלית אחת
|
||||
*[other] המסמך חתום אך לא ניתן היה לאמת { $count } חתימות דיגיטליות
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] המסמך חתום עם אישור אחד שאינו מהימן
|
||||
*[other] המסמך חתום עם { $count } אישורים שאינם מהימנים
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] המסמך חתום עם אישור אחד שפג תוקפו
|
||||
*[other] המסמך חתום עם { $count } אישורים שפג תוקפם
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] למסמך יש חתימה דיגיטלית אחת שאינה תקינה
|
||||
*[other] למסמך יש { $count } חתימות דיגיטליות שאינן תקינות
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] המסמך חתום עם אישור אחד שנשלל
|
||||
*[other] המסמך חתום עם { $count } אישורים שנשללו
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = מצב: החתימה מאומתת
|
||||
pdfjs-digital-signature-properties-status-invalid = מצב: החתימה לא תקינה
|
||||
pdfjs-digital-signature-properties-status-unknown = מצב: לא ניתן לאמת (לא נתמך)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = אישור אבטחה: מהימן ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = אישור אבטחה: לא זמין
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = אישור אבטחה: לא מהימן
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = אישור אבטחה: מנפיק לא ידוע ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = אישור אבטחה: נחתם עצמית ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = אישור אבטחה: מנפיק לא מהימן ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = אישור אבטחה: פג תוקפו
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = אישור אבטחה: פג תוקפו ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = אישור אבטחה: נשלל
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,29 +153,6 @@ pdfjs-document-properties-linearized = Fast Web View:
|
||||
pdfjs-document-properties-linearized-yes = Haj
|
||||
pdfjs-document-properties-linearized-no = Ně
|
||||
pdfjs-document-properties-close-button = Začinić
|
||||
pdfjs-digital-signature-properties-view-certificate = Certifikat pokazać
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Přičina: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Časowy kołk: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] { $count } podsignatura
|
||||
[two] { $count } podsignaturje
|
||||
[few] { $count } podsignatury
|
||||
*[other] { $count } podsignaturow
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -771,84 +748,6 @@ pdfjs-views-manager-waiting-for-file = Dataja so nahrawa…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Strony rjadować
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Kajkosće digitalneje signatury
|
||||
.aria-label = Kajkosće digitalneje signatury
|
||||
pdfjs-digital-signature-properties-button-label = Kajkosće digitalneje signatury
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokument je so z płaćiwej digitalnej signaturu signował
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokument je so signował, ale { $count } digitalna signatura njeda so wobkrućić
|
||||
[two] Dokument je so signował, ale { $count } digitalnej signaturje njedatej so wobkrućić
|
||||
[few] Dokument je so signował, ale { $count } digitalne signatury njedachu so wobkrućić
|
||||
*[other] Dokument je so signował, ale { $count } digitalnych signaturow njeda so wobkrućić
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Dokument je z { $count } certifikatom signowany, kotryž dowěry hódny njeje
|
||||
[two] Dokument je z { $count } certifikatomaj signowany, kotrejž dowěry hódnej njejstej
|
||||
[few] Dokument je z { $count } certifikatami signowany, kotrež dowěry hódne njejsu
|
||||
*[other] Dokument je z { $count } certifikatami signowany, kotrež dowěry hódne njejsu
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokument je z { $count } spadnjenym certifikatom signowany
|
||||
[two] Dokument je z { $count } spadnjenymaj certifikatomaj signowany
|
||||
[few] Dokument je z { $count } spadnjenymi certifikatami signowany
|
||||
*[other] Dokument je z { $count } spadnjenymi certifikatami signowany
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Dokument ma { $count } njepłaćiwu digitalnu signaturu
|
||||
[two] Dokument ma { $count } njepłaćiwej digitalnej signaturje
|
||||
[few] Dokument ma { $count } njepłaćiwe digitalne signatury
|
||||
*[other] Dokument ma { $count } njepłaćiwych digitalnych signaturow
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokument je z { $count } wotwołanym certifikatom signowany
|
||||
[two] Dokument je z { $count } wotwołanymaj certifikatomaj signowany
|
||||
[few] Dokument je z { $count } wotwołanymi certifikatami signowany
|
||||
*[other] Dokument je z { $count } wotwołanymi certifikatami signowany
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Status: Signatura je wobkrućena
|
||||
pdfjs-digital-signature-properties-status-invalid = Status: Signatura je njepłaćiwa
|
||||
pdfjs-digital-signature-properties-status-unknown = Status: Njeda so wobkrućić (njepodpěruje so)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certifikat: Dowěry hódny ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certifikat: Nic k dispoziciji
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certifikat: Dowěry njehódny
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certifikat: Njeznaty wudawar ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certifikat: Samsignowany ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certifikat: Dowěry njehódny wudawar ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certifikat: Spadnjeny
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certifikat: Spadnjeny ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certifikat: Wotwołany
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Gyors webes nézet:
|
||||
pdfjs-document-properties-linearized-yes = Igen
|
||||
pdfjs-document-properties-linearized-no = Nem
|
||||
pdfjs-document-properties-close-button = Bezárás
|
||||
pdfjs-digital-signature-properties-view-certificate = Tanúsítvány megtekintése
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Ok: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Időbélyeg: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Részaláírás ({ $count })
|
||||
*[other] Részaláírások ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Fájl feltöltése…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Oldalak kezelése
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Digitális aláírás tulajdonságai
|
||||
.aria-label = Digitális aláírás tulajdonságai
|
||||
pdfjs-digital-signature-properties-button-label = Digitális aláírás tulajdonságai
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = A dokumentum érvényes digitális aláírással lett aláírva
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] A dokumentum alá van írva, de { $count } digitális aláírás nem ellenőrizhető
|
||||
*[other] A dokumentum alá van írva, de { $count } digitális aláírás nem ellenőrizhető
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] A dokumentum { $count } nem megbízható tanúsítvánnyal van aláírva
|
||||
*[other] A dokumentum { $count } nem megbízható tanúsítvánnyal van aláírva
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] A dokumentum { $count } lejárt tanúsítvánnyal van aláírva
|
||||
*[other] A dokumentum { $count } lejárt tanúsítvánnyal van aláírva
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] A dokumentum { $count } érvénytelen aláírással rendelkezik
|
||||
*[other] A dokumentum { $count } érvénytelen aláírással rendelkezik
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] A dokumentum { $count } visszavont tanúsítvánnyal van aláírva
|
||||
*[other] A dokumentum { $count } visszavont tanúsítvánnyal van aláírva
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Állapot: az aláírás ellenőrizve
|
||||
pdfjs-digital-signature-properties-status-invalid = Állapot: az aláírás érvénytelen
|
||||
pdfjs-digital-signature-properties-status-unknown = Állapot: nem ellenőrizhető (nem támogatott)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Tanúsítvány: megbízható ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Tanúsítvány: nem érhető el
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Tanúsítvány: nem megbízható
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Tanúsítvány: ismeretlen kibocsátó ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Tanúsítvány: önaláírt ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Tanúsítvány: nem megbízható kibocsátó ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Tanúsítvány: lejárt
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Tanúsítvány: lejárt ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Tanúsítvány: visszavonva
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,15 +153,6 @@ pdfjs-document-properties-linearized = Արագ վեբ դիտում․
|
||||
pdfjs-document-properties-linearized-yes = Այո
|
||||
pdfjs-document-properties-linearized-no = Ոչ
|
||||
pdfjs-document-properties-close-button = Փակել
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Պատճառը՝ { $reason }
|
||||
|
||||
## Print
|
||||
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Vista web rapide:
|
||||
pdfjs-document-properties-linearized-yes = Si
|
||||
pdfjs-document-properties-linearized-no = No
|
||||
pdfjs-document-properties-close-button = Clauder
|
||||
pdfjs-digital-signature-properties-view-certificate = Vider le certificato
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Ration: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Data e hora: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Firma secundari ({ $count })
|
||||
*[other] Firmas secundari ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Cargante file…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Gerer paginas
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Proprietates del firma digital
|
||||
.aria-label = Proprietates del firma digital
|
||||
pdfjs-digital-signature-properties-button-label = Proprietates del firma digital
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Le documento era firmate con un firma digital valide
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Documento firmate ma { $count } firma digital non poteva esser verificate
|
||||
*[other] Documento firmate ma { $count } firmas digital non poteva esser verificate
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Documento firmate con { $count } certificato que non es de fiducia
|
||||
*[other] Documento firmate con { $count } certificatos que non es de fiducia
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Documento firmate con { $count } certificato expirate
|
||||
*[other] Documento firmate con { $count } certificatos expirate
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Le documento ha { $count } firma digital non valide
|
||||
*[other] Le documento ha { $count } firmas digital non valide
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Documento firmate con { $count } certificato revocate
|
||||
*[other] Documento firmate con { $count } certificatos revocate
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Stato: firma verificate
|
||||
pdfjs-digital-signature-properties-status-invalid = Stato: firma non valide
|
||||
pdfjs-digital-signature-properties-status-unknown = Stato: impossibile verificar (non supportate)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certificato: de fiducia ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certificato: indisponibile
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certificato: non de confidentia
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certificato: emissor incognite ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certificato: auto-firmate ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certificato: emissor non de confidentia ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certificato: expirate
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certificato: expirate ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certificato: revocate
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Visualizzazione web veloce:
|
||||
pdfjs-document-properties-linearized-yes = Sì
|
||||
pdfjs-document-properties-linearized-no = No
|
||||
pdfjs-document-properties-close-button = Chiudi
|
||||
pdfjs-digital-signature-properties-view-certificate = Visualizza certificato
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Motivo: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Data e ora: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Firma secondaria ({ $count })
|
||||
*[other] Firme secondarie ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -261,7 +240,7 @@ pdfjs-find-match-count =
|
||||
# $limit (Number) - the maximum number of matches
|
||||
pdfjs-find-match-count-limit =
|
||||
{ $limit ->
|
||||
[one] Più di { $limit } corrispondenza
|
||||
[one] Più di una { $limit } corrispondenza
|
||||
*[other] Più di { $limit } corrispondenze
|
||||
}
|
||||
pdfjs-find-not-found = Testo non trovato
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Caricamento file…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Gestisci pagine
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Proprietà firma digitale
|
||||
.aria-label = Proprietà firma digitale
|
||||
pdfjs-digital-signature-properties-button-label = Proprietà firma digitale
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Il documento è stato firmato con una firma digitale valida
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Il documento è stato firmato ma non è stato possibile verificare { $count } firma digitale
|
||||
*[other] Il documento è stato firmato ma non è stato possibile verificare { $count } firme digitali
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Documento firmato con { $count } certificato non attendibile
|
||||
*[other] Documento firmato con { $count } certificati non attendibili
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Documento firmato con { $count } certificato scaduto
|
||||
*[other] Documento firmato con { $count } certificati scaduti
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Il documento contiene { $count } firma digitale non valida
|
||||
*[other] Il documento contiene { $count } firme digitali non valide
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Documento firmato con { $count } certificato revocato
|
||||
*[other] Documento firmato con { $count } certificati revocati
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Stato: firma verificata
|
||||
pdfjs-digital-signature-properties-status-invalid = Stato: firma non valida
|
||||
pdfjs-digital-signature-properties-status-unknown = Stato: impossibile verificare (non supportato)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certificato: affidabile ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certificato: non disponibile
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certificato: non attendibile
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certificato: emittente sconosciuto ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certificato: autofirmato ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certificato: emittente non attendibile ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certificato: scaduto
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certificato: scaduto ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certificato: revocato
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,23 +153,6 @@ pdfjs-document-properties-linearized = ウェブ表示用に最適化:
|
||||
pdfjs-document-properties-linearized-yes = はい
|
||||
pdfjs-document-properties-linearized-no = いいえ
|
||||
pdfjs-document-properties-close-button = 閉じる
|
||||
pdfjs-digital-signature-properties-view-certificate = 証明書を表示
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = 理由: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = タイムスタンプ: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures = サブ署名 ({ $count } 筆)
|
||||
|
||||
## Print
|
||||
|
||||
@ -717,54 +700,6 @@ pdfjs-views-manager-waiting-for-file = ファイルをアップロードして
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = ページを管理
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = デジタル署名のプロパティ
|
||||
.aria-label = デジタル署名のプロパティ
|
||||
pdfjs-digital-signature-properties-button-label = デジタル署名のプロパティ
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = 文書は検証されたデジタル署名で署名されています
|
||||
pdfjs-digital-signature-properties-banner-unknown = 文書は署名されていますが、{ $count } 筆のデジタル署名が検証できません
|
||||
pdfjs-digital-signature-properties-banner-untrusted = 文書は { $count } 筆の信頼できないデジタル署名で署名されています
|
||||
pdfjs-digital-signature-properties-banner-expired = 文書は { $count } 枚の有効期限が切れた証明書で署名されています
|
||||
pdfjs-digital-signature-properties-banner-invalid = 文書には { $count } 筆の不正なデジタル署名があります
|
||||
pdfjs-digital-signature-properties-banner-revoked = 文書は { $count } 枚の破棄された証明書で署名されています
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = 状態: 検証された証明書
|
||||
pdfjs-digital-signature-properties-status-invalid = 状態: 不正な証明書
|
||||
pdfjs-digital-signature-properties-status-unknown = 状態: 検証不可 (未サポート)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = 証明書: 信頼されている ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = 証明書: 利用不可
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = 証明書: 信頼できない
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = 証明書: 発行者不明 ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = 証明書: 自己署名 ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = 証明書: 信頼できない発行者 ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = 証明書: 有効期限切れ
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = 証明書: 有効期限切れ ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = 証明書: 破棄
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = მსუბუქი ვებჩვე
|
||||
pdfjs-document-properties-linearized-yes = დიახ
|
||||
pdfjs-document-properties-linearized-no = არა
|
||||
pdfjs-document-properties-close-button = დახურვა
|
||||
pdfjs-digital-signature-properties-view-certificate = სერტიფიკატის ნახვა
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = მიზეზი: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = დროის ნიშნული: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] ქვეხელმოწერები ({ $count })
|
||||
*[other] ქვეხელმოწერები ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = ფაილი აიტვირთე
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = გვერდების მართვა
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = ციფრული ხელმოწერის პარამეტრები
|
||||
.aria-label = ციფრული ხელმოწერის პარამეტრები
|
||||
pdfjs-digital-signature-properties-button-label = ციფრული ხელმოწერის პარამეტრები
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = დოკუმენტი ხელმოწერილია მართებული ციფრული ხელმოწერით
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] დოკუმენტი ხელმოწერილია, მაგრამ { $count } ციფრული ხელმოწერა ვერ დამოწმდა
|
||||
*[other] დოკუმენტი ხელმოწერილია, მაგრამ { $count } ციფრული ხელმოწერა ვერ დამოწმდა
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] დოკუმენტი ხელმოწერილია { $count } არასანდო სერტიფიკატით
|
||||
*[other] დოკუმენტი ხელმოწერილია { $count } არასანდო სერტიფიკატით
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] დოკუმენტი ხელმოწერილია { $count } ვადაგასული სერტიფიკატით
|
||||
*[other] დოკუმენტი ხელმოწერილია { $count } ვადაგასული სერტიფიკატით
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] დოკუმენტი ხელმოწერილია { $count } უმართებულო ციფრული სერტიფიკატით
|
||||
*[other] დოკუმენტი ხელმოწერილია { $count } უმართებულო ციფრული სერტიფიკატით
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] დოკუმენტი ხელმოწერილია { $count } ძალადაკარგული სერტიფიკატით
|
||||
*[other] დოკუმენტი ხელმოწერილია { $count } ძალადაკარგული სერტიფიკატით
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = მდგომარეობა: ხელმოწერა დამოწმებულია
|
||||
pdfjs-digital-signature-properties-status-invalid = მდგომარეობა: ხელმოწერა უმართებულოა
|
||||
pdfjs-digital-signature-properties-status-unknown = მდგომარეობა: ვერ მოწმდება (მხარდაუჭერელია)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = სერტიფიკატი: სანდოა ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = სერტიფიკატი: მიუწვდომელია
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = სერტიფიკატი: არასანდოა
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = სერტიფიკატი: უცნობი გამცემი ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = სერტიფიკატი: თვითხელმოწერით ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = სერტიფიკატი: არასანდო გამცემი ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = სერტიფიკატი: ვადაგასული
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = სერტიფიკატი: ვადაგასული ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = სერტიფიკატი: ძალადაკარგულია
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -125,7 +125,7 @@ pdfjs-document-properties-creator = Yerna-t:
|
||||
pdfjs-document-properties-producer = Afecku n uselket PDF:
|
||||
pdfjs-document-properties-version = Lqem PDF:
|
||||
pdfjs-document-properties-page-count = Amḍan n yisebtar:
|
||||
pdfjs-document-properties-page-size = Teɣzi n usebter:
|
||||
pdfjs-document-properties-page-size = Tuγzi n usebter:
|
||||
pdfjs-document-properties-page-size-unit-inches = deg
|
||||
pdfjs-document-properties-page-size-unit-millimeters = mm
|
||||
pdfjs-document-properties-page-size-orientation-portrait = s teɣzi
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Жылдам Web көрінісі:
|
||||
pdfjs-document-properties-linearized-yes = Иә
|
||||
pdfjs-document-properties-linearized-no = Жоқ
|
||||
pdfjs-document-properties-close-button = Жабу
|
||||
pdfjs-digital-signature-properties-view-certificate = Сертификатты қарау
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Себебі: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Күн мен уақыт белгісі: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Ішкі қолтаңба ({ $count })
|
||||
*[other] Ішкі қолтаңбалар ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Файл жүктеп салынуда…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Беттерді басқару
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Цифрлық қолтаңба қасиеттері
|
||||
.aria-label = Цифрлық қолтаңба қасиеттері
|
||||
pdfjs-digital-signature-properties-button-label = Цифрлық қолтаңба қасиеттері
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Құжатқа жарамды цифрлық қолтаңбамен қол қойылған
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Құжатқа қол қойылған, бірақ { $count } цифрлық қолтаңбаны тексеру мүмкін болмады
|
||||
*[other] Құжатқа қол қойылған, бірақ { $count } цифрлық қолтаңбаны тексеру мүмкін болмады
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Құжатқа сенімсіз { $count } сертификатпен қол қойылған
|
||||
*[other] Құжатқа сенімсіз { $count } сертификатпен қол қойылған
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Құжатқа мерзімі өткен { $count } сертификатпен қол қойылған
|
||||
*[other] Құжатқа мерзімі өткен { $count } сертификатпен қол қойылған
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Құжатта { $count } жарамсыз цифрлық қолтаңба бар
|
||||
*[other] Құжатта { $count } жарамсыз цифрлық қолтаңба бар
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Құжатқа қайтарылған { $count } сертификатпен қол қойылған
|
||||
*[other] Құжатқа қайтарылған { $count } сертификатпен қол қойылған
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Қалып-күй: Қолтаңба тексерілді
|
||||
pdfjs-digital-signature-properties-status-invalid = Қалып-күй: Қолтаңба жарамсыз
|
||||
pdfjs-digital-signature-properties-status-unknown = Қалып-күй: Тексеру мүмкін емес (қолдау көрсетілмейді)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Сертификат: Сенімді ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Сертификат: Қолжетімсіз
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Сертификат: Сенімсіз
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Сертификат: Белгісіз шығарушы ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Сертификат: Өздігінен қол қойылған ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Сертификат: Сенімсіз шығарушы ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Сертификат: Мерзімі өткен
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Сертификат: Мерзімі өткен ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Сертификат: Қайтарылған
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,23 +153,6 @@ pdfjs-document-properties-linearized = 빠른 웹 보기:
|
||||
pdfjs-document-properties-linearized-yes = 예
|
||||
pdfjs-document-properties-linearized-no = 아니요
|
||||
pdfjs-document-properties-close-button = 닫기
|
||||
pdfjs-digital-signature-properties-view-certificate = 인증서 보기
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = 이유: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = 타임스탬프: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures = 하위 서명 ({ $count }개)
|
||||
|
||||
## Print
|
||||
|
||||
@ -586,7 +569,7 @@ pdfjs-editor-add-signature-draw-thickness-range-label = 두께
|
||||
# $thickness (Number) - the thickness (in pixels) of the line used to draw a signature.
|
||||
pdfjs-editor-add-signature-draw-thickness-range =
|
||||
.title = 그리기 두께: { $thickness }
|
||||
pdfjs-editor-add-signature-image-placeholder = 이미지 파일을 여기에 끌어다 놓으세요
|
||||
pdfjs-editor-add-signature-image-placeholder = 이미지 파일을 여기에 끌어서 놓으세요
|
||||
pdfjs-editor-add-signature-image-browse-link =
|
||||
{ PLATFORM() ->
|
||||
[macos] 또는 이미지 파일 찾아보기
|
||||
@ -717,54 +700,6 @@ pdfjs-views-manager-waiting-for-file = 파일 업로드 중…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = 페이지 관리
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = 디지털 서명 속성
|
||||
.aria-label = 디지털 서명 속성
|
||||
pdfjs-digital-signature-properties-button-label = 디지털 서명 속성
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = 유효한 디지털 서명으로 문서에 서명되었습니다
|
||||
pdfjs-digital-signature-properties-banner-unknown = 문서에 서명되었지만 { $count }개의 디지털 서명을 확인할 수 없음
|
||||
pdfjs-digital-signature-properties-banner-untrusted = 신뢰할 수 없는 { $count }개의 인증서로 서명된 문서
|
||||
pdfjs-digital-signature-properties-banner-expired = { $count }개의 만료된 인증서로 서명된 문서
|
||||
pdfjs-digital-signature-properties-banner-invalid = 문서에 잘못된 { $count }개의 디지털 서명이 있음
|
||||
pdfjs-digital-signature-properties-banner-revoked = 폐기된 인증서 { $count }개로 서명된 문서
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = 상태: 서명 확인됨
|
||||
pdfjs-digital-signature-properties-status-invalid = 상태: 유효하지 않은 서명
|
||||
pdfjs-digital-signature-properties-status-unknown = 상태: 확인할 수 없음 (지원되지 않음)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = 인증서: 신뢰할 수 있음 ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = 인증서: 사용할 수 없음
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = 인증서: 신뢰할 수 없음
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = 인증서: 알 수 없는 발급자 ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = 인증서: 자체 서명 ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = 인증서: 신뢰할 수 없는 발급자 ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = 인증서: 만료됨
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = 인증서: 만료됨 ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = 인증서: 폐기됨
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Hurtig nettvisning:
|
||||
pdfjs-document-properties-linearized-yes = Ja
|
||||
pdfjs-document-properties-linearized-no = Nei
|
||||
pdfjs-document-properties-close-button = Lukk
|
||||
pdfjs-digital-signature-properties-view-certificate = Vis sertifikat
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Grunn: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Tidsstempel: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Undersignatur ({ $count })
|
||||
*[other] Undersignaturer ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Laster opp filen …
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Behandle sider
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Egenskaper for digital signatur
|
||||
.aria-label = Egenskaper for digital signatur
|
||||
pdfjs-digital-signature-properties-button-label = Egenskaper for digital signatur
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokumentet ble signert med en gyldig digital signatur
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokumentet er signert, men { $count } digital signatur kunne ikke verifiseres
|
||||
*[other] Dokumentet er signert, men { $count } digitale signaturer kunne ikke verifiseres
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Dokumentet er signert med { $count } sertifikat som ikke er klarert
|
||||
*[other] Dokumentet er signert med { $count } sertifikater som ikke er klarert
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokumentet er signert med { $count } utløpt sertifikat
|
||||
*[other] Dokumentet er signert med { $count } utløpte sertifikater
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Dokumentet har { $count } ugyldig digital signatur
|
||||
*[other] Dokumentet har { $count } ugyldige digitale signaturer
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokumentet er signert med { $count } tilbakekalt sertifikat
|
||||
*[other] Dokumentet er signert med { $count } tilbakekalte sertifikater
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Status: Signatur bekreftet
|
||||
pdfjs-digital-signature-properties-status-invalid = Status: Signatur ugyldig
|
||||
pdfjs-digital-signature-properties-status-unknown = Status: Kan ikke bekrefte (støttes ikke)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Sertifikat: Klarert ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Sertifikat: Utilgjengelig
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Sertifikat: Ikke klarert
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Sertifikat: Ukjent utsteder ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Sertifikat: Selvsignert ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Sertifikat: Ikke klarert utsteder ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Sertifikat: Utløpt
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Sertifikat: Utløpt ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Sertifikat: Tilbakekalt
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Snelle webweergave:
|
||||
pdfjs-document-properties-linearized-yes = Ja
|
||||
pdfjs-document-properties-linearized-no = Nee
|
||||
pdfjs-document-properties-close-button = Sluiten
|
||||
pdfjs-digital-signature-properties-view-certificate = Certificaat bekijken
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Reden: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Tijdstempel: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Ondertekening ({ $count })
|
||||
*[other] Ondertekeningen ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Bestand uploaden…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Pagina’s beheren
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Eigenschappen digitale handtekening
|
||||
.aria-label = Eigenschappen digitale handtekening
|
||||
pdfjs-digital-signature-properties-button-label = Eigenschappen digitale handtekening
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Document is ondertekend met een geldige digitale handtekening
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Document ondertekend, maar { $count } digitale handtekening kon niet worden geverifieerd
|
||||
*[other] Document ondertekend, maar { $count } digitale handtekeningen konden niet worden geverifieerd
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Document ondertekend met { $count } certificaat dat niet wordt vertrouwd
|
||||
*[other] Document ondertekend met { $count } certificaten die niet worden vertrouwd
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Document ondertekend met { $count } verlopen certificaat
|
||||
*[other] Document ondertekend met { $count } verlopen certificaten
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Document heeft { $count } ongeldige digitale handtekening
|
||||
*[other] Document heeft { $count } ongeldige digitale handtekeningen
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Document ondertekend met { $count } ingetrokken certificaat
|
||||
*[other] Document ondertekend met { $count } ingetrokken certificaten
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Status: handtekening geverifieerd
|
||||
pdfjs-digital-signature-properties-status-invalid = Status: handtekening ongeldig
|
||||
pdfjs-digital-signature-properties-status-unknown = Status: kan niet worden geverifieerd (niet ondersteund)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certificaat: vertrouwd ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certificaat: niet beschikbaar
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certificaat: niet vertrouwd
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certificaat: onbekende uitgever ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certificaat: zelfondertekend ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certificaat: niet-vertrouwde uitgever ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certificaat: verlopen
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certificaat: verlopen ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certificaat: ingetrokken
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Rask nettvising:
|
||||
pdfjs-document-properties-linearized-yes = Ja
|
||||
pdfjs-document-properties-linearized-no = Nei
|
||||
pdfjs-document-properties-close-button = Lat att
|
||||
pdfjs-digital-signature-properties-view-certificate = Vis sertifikat
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Grunn: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Tidsstempel: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Undersignatur ({ $count })
|
||||
*[other] Undersignaturar ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Lastar opp fila…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Handsam sider
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Eigenskapar for digital signatur
|
||||
.aria-label = Eigenskapar for digital signatur
|
||||
pdfjs-digital-signature-properties-button-label = Eigenskapar for digital signatur
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokumentet vart signert med ei gyldig digital signatur
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokumentet er signert, men { $count } digital signatur kunne ikkje verifiserast
|
||||
*[other] Dokumentet er signert, men { $count } digitale signaturar kunne ikkje verifiserast
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Dokumentet er signert med { $count } sertifikat som ikkje er klarert
|
||||
*[other] Dokumentet er signert med { $count } sertifikat som ikkje er klarerte
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokumentet er signert med { $count } utgåttt sertifikat
|
||||
*[other] Dokumentet er signert med { $count } utgåtte sertifikat
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Dokumentet har { $count } ugyldig digital signatur
|
||||
*[other] Dokumentet har { $count } ugyldige digitale signaturar
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokumentet er signert med { $count } tilbakekalt sertifikat
|
||||
*[other] Dokumentet er signert med { $count } tilbakekalte sertifikat
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Status: Signatur stadfesta
|
||||
pdfjs-digital-signature-properties-status-invalid = Status: Signatur ugyldig
|
||||
pdfjs-digital-signature-properties-status-unknown = Status: Kan ikkje stadfeste (blir ikkje støtta)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Sertifikat: Klarert ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Sertifikat: Utilgjengeleg
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Sertifikat: Ikkje klarert
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Sertifikat: Ukjent utferdar ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Sertifikat: Sjølvsignert ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Sertifikat: Ikkje klarert utferdar ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Sertifikat: Utgått
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Sertifikat: Utgått ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Sertifikat: Tilbakekalla
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,28 +153,6 @@ pdfjs-document-properties-linearized = Szybki podgląd w Internecie:
|
||||
pdfjs-document-properties-linearized-yes = tak
|
||||
pdfjs-document-properties-linearized-no = nie
|
||||
pdfjs-document-properties-close-button = Zamknij
|
||||
pdfjs-digital-signature-properties-view-certificate = Wyświetl certyfikat
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Powód: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Data: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] { $count } podpis podrzędny
|
||||
[few] { $count } podpisy podrzędne
|
||||
*[many] { $count } podpisów podrzędnych
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -761,79 +739,6 @@ pdfjs-views-manager-waiting-for-file = Przesyłanie pliku…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Zarządzaj stronami
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Właściwości podpisu cyfrowego
|
||||
.aria-label = Właściwości podpisu cyfrowego
|
||||
pdfjs-digital-signature-properties-button-label = Właściwości podpisu cyfrowego
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokument został podpisany ważnym podpisem cyfrowym
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokument jest popisany, ale nie można zweryfikować { $count } podpisu cyfrowego
|
||||
[few] Dokument jest popisany, ale nie można zweryfikować { $count } podpisów cyfrowych
|
||||
*[many] Dokument jest popisany, ale nie można zweryfikować { $count } podpisów cyfrowych
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Dokument jest podpisany za pomocą { $count } certyfikatu, który nie jest zaufany
|
||||
[few] Dokument jest podpisany za pomocą { $count } certyfikatów, które nie są zaufane
|
||||
*[many] Dokument jest podpisany za pomocą { $count } certyfikatów, które nie są zaufane
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokument jest podpisany za pomocą { $count } wygasłego certyfikatu
|
||||
[few] Dokument jest podpisany za pomocą { $count } wygasłych certyfikatów
|
||||
*[many] Dokument jest podpisany za pomocą { $count } wygasłych certyfikatów
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Dokument ma { $count } nieważny podpis cyfrowy
|
||||
[few] Dokument ma { $count } nieważne podpisy cyfrowe
|
||||
*[many] Dokument ma { $count } nieważnych podpisów cyfrowych
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokument jest podpisany za pomocą { $count } odwołanego certyfikatu
|
||||
[few] Dokument jest podpisany za pomocą { $count } odwołanych certyfikatów
|
||||
*[many] Dokument jest podpisany za pomocą { $count } odwołanych certyfikatów
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Stan: podpis jest zweryfikowany
|
||||
pdfjs-digital-signature-properties-status-invalid = Stan: podpis jest nieważny
|
||||
pdfjs-digital-signature-properties-status-unknown = Stan: nie można zweryfikować (nieobsługiwane)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certyfikat: zaufany ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certyfikat: niedostępny
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certyfikat: niezaufany
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certyfikat: nieznany wystawca ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certyfikat: samopodpisany ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certyfikat: niezaufany wystawca ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certyfikat: wygasły
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certyfikat: wygasły ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certyfikat: odwołany
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Exibição web rápida:
|
||||
pdfjs-document-properties-linearized-yes = Sim
|
||||
pdfjs-document-properties-linearized-no = Não
|
||||
pdfjs-document-properties-close-button = Fechar
|
||||
pdfjs-digital-signature-properties-view-certificate = Ver certificado
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Motivo: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Data e hora: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Assinatura secundária ({ $count })
|
||||
*[other] Assinaturas secundárias ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Enviando arquivo…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Gerenciar páginas
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Propriedades da assinatura digital
|
||||
.aria-label = Propriedades da assinatura digital
|
||||
pdfjs-digital-signature-properties-button-label = Propriedades da assinatura digital
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = O documento foi assinado com uma assinatura digital válida
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Documento assinado, mas { $count } assinatura digital não pôde ser verificada
|
||||
*[other] Documento assinado, mas { $count } assinaturas digitais não puderam ser verificadas
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Documento assinado com { $count } certificado que não é confiável
|
||||
*[other] Documento assinado com { $count } certificados que não são confiáveis
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Documento assinado com { $count } certificado expirado
|
||||
*[other] Documento assinado com { $count } certificados expirados
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] O documento tem { $count } assinatura digital inválida
|
||||
*[other] O documento tem { $count } assinaturas digitais inválidas
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Documento assinado com { $count } certificado revogado
|
||||
*[other] Documento assinado com { $count } certificados revogados
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Status: Assinatura verificada
|
||||
pdfjs-digital-signature-properties-status-invalid = Status: Assinatura inválida
|
||||
pdfjs-digital-signature-properties-status-unknown = Status: Não foi possível verificar (não há suporte)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certificado: Confiável ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certificado: Não disponível
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certificado: Não confiável
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certificado: Emissor desconhecido ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certificado: Autoassinado ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certificado: Emissor não confiável ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certificado: Expirado
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certificado: Expirado ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certificado: Revogado
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,28 +153,6 @@ pdfjs-document-properties-linearized = Vizualizare web rapidă:
|
||||
pdfjs-document-properties-linearized-yes = Da
|
||||
pdfjs-document-properties-linearized-no = Nu
|
||||
pdfjs-document-properties-close-button = Închide
|
||||
pdfjs-digital-signature-properties-view-certificate = Vezi certificatul
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Motiv: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Marcaj temporal: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] ({ $count }) sub semnătură
|
||||
[few] ({ $count }) sub semnături
|
||||
*[other] ({ $count }) de sub semnături
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -412,9 +390,8 @@ pdfjs-free-text2 =
|
||||
# $count (Number) - the number of comments.
|
||||
pdfjs-editor-comments-sidebar-title =
|
||||
{ $count ->
|
||||
[one] comentariu
|
||||
[few] comentarii
|
||||
*[other] de comentarii
|
||||
[one] Comentariu
|
||||
*[other] Comentarii
|
||||
}
|
||||
pdfjs-editor-comments-sidebar-close-button =
|
||||
.title = Închide bara laterală
|
||||
@ -762,79 +739,6 @@ pdfjs-views-manager-waiting-for-file = Se încarcă fișierul…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Gestionează paginile
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Proprietățile semnăturii digitale
|
||||
.aria-label = Proprietățile semnăturii digitale
|
||||
pdfjs-digital-signature-properties-button-label = Proprietățile semnăturii digitale
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Documentul a fost semnat cu o semnătură digitală validă
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Document semnat, dar { $count } semnătură digitală nu au putut fi verificată
|
||||
[few] Document semnat, dar { $count } semnături digitale nu au putut fi verificate
|
||||
*[other] Document semnat, dar { $count } de semnături digitale nu au putut fi verificate
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Document semnat cu { $count } certificat care nu este de încredere
|
||||
[few] Document semnat cu { $count } certificate care nu sunt de încredere
|
||||
*[other] Document semnat cu { $count } de certificate care nu sunt de încredere
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Document semnat cu { $count } certificat expirat
|
||||
[few] Document semnat cu { $count } certificate expirate
|
||||
*[other] Document semnat cu { $count } de certificate expirate
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Documentul are { $count } semnătură digitală nevalidă
|
||||
[few] Documentul are { $count } semnături digitale nevalide
|
||||
*[other] Documentul are { $count } de semnături digitale nevalide
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Document semnat cu { $count } certificat revocat
|
||||
[few] Document semnat cu { $count } certificate revocate
|
||||
*[other] Document semnat cu { $count } de certificate revocate
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Stare: Semnătură verificată
|
||||
pdfjs-digital-signature-properties-status-invalid = Stare: Semnătură nevalidă
|
||||
pdfjs-digital-signature-properties-status-unknown = Stare: Nu se poate verifica (neacceptat)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certificat: De încredere ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certificat: Indisponibil
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certificat: De neîncredere
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certificat: Emitent necunoscut ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certificat: Autosemnat ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certificat: Emitent de neîncredere ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certificat: Expirat
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certificat: Expirat ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certificat: Revocat
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,28 +153,6 @@ pdfjs-document-properties-linearized = Быстрый просмотр в Web:
|
||||
pdfjs-document-properties-linearized-yes = Да
|
||||
pdfjs-document-properties-linearized-no = Нет
|
||||
pdfjs-document-properties-close-button = Закрыть
|
||||
pdfjs-digital-signature-properties-view-certificate = Просмотреть сертификат
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Причина: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Метка времени: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Дополнительная подпись ({ $count })
|
||||
[few] Дополнительные подписи ({ $count })
|
||||
*[many] Дополнительные подписи ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -762,79 +740,6 @@ pdfjs-views-manager-waiting-for-file = Загрузка файла…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Управление страницами
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Свойства цифровой подписи
|
||||
.aria-label = Свойства цифровой подписи
|
||||
pdfjs-digital-signature-properties-button-label = Свойства цифровой подписи
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Документ был подписан действительной цифровой подписью
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Документ подписан, но { $count } цифровая подпись не может быть проверены
|
||||
[few] Документ подписан, но { $count } цифровых подписи не могут быть проверены
|
||||
*[many] Документ подписан, но { $count } цифровых подписей не могут быть проверены
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Документ, подписанный { $count } недоверенным сертификатом
|
||||
[few] Документ, подписанный { $count } недоверенными сертификатами
|
||||
*[many] Документ, подписанный { $count } недоверенных сертификатов
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Документ, подписанный { $count } истёкшим сертификатом
|
||||
[few] Документ, подписанный { $count } истёкшими сертификатами
|
||||
*[many] Документ, подписанный { $count } истёкших сертификатов
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Документ имеет { $count } неверную цифровую подпись
|
||||
[few] Документ имеет { $count } неверных цифровых подписей
|
||||
*[many] Документ имеет { $count } неверных цифровых подписей
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Документ, подписанный { $count } отозванным сертификатом
|
||||
[few] Документ, подписанный { $count } отозванными сертификатами
|
||||
*[many] Документ, подписанный { $count } отозванных сертификатов
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Статус: Подпись проверена
|
||||
pdfjs-digital-signature-properties-status-invalid = Статус: Подпись недействительна
|
||||
pdfjs-digital-signature-properties-status-unknown = Статус: Не удалось проверить (не поддерживается)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Сертификат: Доверенный ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Сертификат: Недоступен
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Сертификат: Недоверенный
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Сертификат: Неизвестный издатель ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Сертификат: Самоподписанный ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Сертификат: Недоверенный издатель ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Сертификат: Истёк срок действия
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Сертификат: Истёк срок действия ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Сертификат: Отозван
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -87,7 +87,6 @@ pdfjs-scroll-horizontal-button-label = Iscurrimentu orizontale
|
||||
pdfjs-scroll-wrapped-button =
|
||||
.title = Imprea s'iscurrimentu continu
|
||||
pdfjs-scroll-wrapped-button-label = Iscurrimentu continu
|
||||
pdfjs-spread-none-button-label = Pàginas individuales
|
||||
|
||||
## Document properties dialog
|
||||
|
||||
@ -134,19 +133,6 @@ pdfjs-document-properties-linearized = Visualizatzione web lestra:
|
||||
pdfjs-document-properties-linearized-yes = Eja
|
||||
pdfjs-document-properties-linearized-no = Nono
|
||||
pdfjs-document-properties-close-button = Serra
|
||||
pdfjs-digital-signature-properties-view-certificate = Ammustra su tzertificadu
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Resone: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Data e ora: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
|
||||
## Print
|
||||
|
||||
@ -193,15 +179,6 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = Miniatura de sa pàgina { $page }
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox1 =
|
||||
.title = Seletziona sa pàgina { $page }
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
# $total (Number) - the number of pages
|
||||
pdfjs-thumb-page-title1 =
|
||||
.title = Pàgina { $page } de { $total }
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -220,27 +197,10 @@ pdfjs-find-match-diacritics-checkbox-label = Respeta is diacrìticos
|
||||
pdfjs-find-entire-word-checkbox-label = Faeddos intreos
|
||||
pdfjs-find-reached-top = S'est lòmpidu a su cumintzu de su documentu, si sighit dae su bàsciu
|
||||
pdfjs-find-reached-bottom = Acabbu de su documentu, si sighit dae s'artu
|
||||
# Variables:
|
||||
# $current (Number) - the index of the currently active find result
|
||||
# $total (Number) - the total number of matches in the document
|
||||
pdfjs-find-match-count =
|
||||
{ $total ->
|
||||
[one] { $current } currispondèntzia de { $total }
|
||||
*[other] { $current } currispondèntzias de { $total }
|
||||
}
|
||||
# Variables:
|
||||
# $limit (Number) - the maximum number of matches
|
||||
pdfjs-find-match-count-limit =
|
||||
{ $limit ->
|
||||
[one] Prus de { $limit } currispondèntzia
|
||||
*[other] Prus de { $limit } currispondèntzias
|
||||
}
|
||||
pdfjs-find-not-found = Testu no agatadu
|
||||
|
||||
## Predefined zoom values
|
||||
|
||||
pdfjs-page-scale-width = Larghesa de sa pàgina
|
||||
pdfjs-page-scale-fit = Pàgina intrea
|
||||
pdfjs-page-scale-auto = Ingrandimentu automàticu
|
||||
pdfjs-page-scale-actual = Mannària reale
|
||||
# Variables:
|
||||
@ -262,12 +222,6 @@ pdfjs-missing-file-error = Ammancat s'archìviu PDF.
|
||||
pdfjs-unexpected-response-error = Risposta imprevista de su serbidore.
|
||||
pdfjs-rendering-error = Faddina in sa visualizatzione de sa pàgina.
|
||||
|
||||
## Annotations
|
||||
|
||||
# Variables:
|
||||
# $dateObj (Date) - the modification date and time of the annotation
|
||||
pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
|
||||
## Password
|
||||
|
||||
pdfjs-password-label = Inserta sa crae pro abèrrere custu archìviu PDF.
|
||||
@ -280,13 +234,9 @@ pdfjs-web-fonts-disabled = Is tipografias web sunt disativadas: is tipografias i
|
||||
|
||||
pdfjs-editor-free-text-button =
|
||||
.title = Testu
|
||||
pdfjs-editor-color-picker-free-text-input =
|
||||
.title = Muda su colore de su testu
|
||||
pdfjs-editor-free-text-button-label = Testu
|
||||
pdfjs-editor-ink-button =
|
||||
.title = Disinnu
|
||||
pdfjs-editor-color-picker-ink-input =
|
||||
.title = Muda su colore pro su disinnu
|
||||
pdfjs-editor-ink-button-label = Disinnu
|
||||
pdfjs-editor-stamp-button =
|
||||
.title = Agiunghe o modìfica immàgines
|
||||
@ -298,33 +248,6 @@ pdfjs-highlight-floating-button1 =
|
||||
.title = Evidèntzia
|
||||
.aria-label = Evidèntzia
|
||||
pdfjs-highlight-floating-button-label = Evidèntzia
|
||||
pdfjs-comment-floating-button =
|
||||
.title = Cummenta
|
||||
.aria-label = Cummenta
|
||||
pdfjs-comment-floating-button-label = Cummenta
|
||||
pdfjs-editor-comment-button =
|
||||
.title = Cummenta
|
||||
.aria-label = Cummenta
|
||||
pdfjs-editor-comment-button-label = Cummenta
|
||||
pdfjs-editor-signature-button =
|
||||
.title = Agiunghe una firma
|
||||
pdfjs-editor-signature-button-label = Agiunghe una firma
|
||||
|
||||
## Default editor aria labels
|
||||
|
||||
# “Highlight” is a noun, the string is used on the editor for highlights.
|
||||
pdfjs-editor-highlight-editor =
|
||||
.aria-label = Editore de sutaliniadura
|
||||
# “Drawing” is a noun, the string is used on the editor for drawings.
|
||||
pdfjs-editor-ink-editor =
|
||||
.aria-label = Editore de disinnos
|
||||
# Used when a signature editor is selected/hovered.
|
||||
# Variables:
|
||||
# $description (String) - a string describing/labeling the signature.
|
||||
pdfjs-editor-signature-editor1 =
|
||||
.aria-description = Editore de firmas: { $description }
|
||||
pdfjs-editor-stamp-editor =
|
||||
.aria-label = Editore de immàgines
|
||||
|
||||
## Remove button for the various kind of editor.
|
||||
|
||||
@ -336,8 +259,6 @@ pdfjs-editor-remove-stamp-button =
|
||||
.title = Boga s’immàgine
|
||||
pdfjs-editor-remove-highlight-button =
|
||||
.title = Boga s’evidèntzia
|
||||
pdfjs-editor-remove-signature-button =
|
||||
.title = Boga·nche sa firma
|
||||
|
||||
##
|
||||
|
||||
@ -351,47 +272,19 @@ pdfjs-editor-stamp-add-image-button =
|
||||
pdfjs-editor-stamp-add-image-button-label = Agiunghe un’immàgine
|
||||
# This refers to the thickness of the line used for free highlighting (not bound to text)
|
||||
pdfjs-editor-free-highlight-thickness-input = Grussària
|
||||
pdfjs-editor-add-signature-container =
|
||||
.aria-label = Controllos de firma e firmas sarvadas
|
||||
pdfjs-editor-signature-add-signature-button =
|
||||
.title = Agiunghe una firma noa
|
||||
pdfjs-editor-signature-add-signature-button-label = Agiunghe una firma noa
|
||||
# Used on the button to use an already saved signature.
|
||||
# Variables:
|
||||
# $description (String) - a string describing/labeling the signature.
|
||||
pdfjs-editor-add-saved-signature-button =
|
||||
.title = Firma sarvada: { $description }
|
||||
# .default-content is used as a placeholder in an empty text editor.
|
||||
pdfjs-free-text2 =
|
||||
.aria-label = Editore de testu
|
||||
.default-content = Cumintza a iscrìere…
|
||||
# Used to show how many comments are present in the pdf file.
|
||||
# Variables:
|
||||
# $count (Number) - the number of comments.
|
||||
pdfjs-editor-comments-sidebar-title =
|
||||
{ $count ->
|
||||
[one] Cummentu
|
||||
*[other] Cummentos
|
||||
}
|
||||
pdfjs-editor-comments-sidebar-close-button =
|
||||
.title = Serra sa barra laterale
|
||||
.aria-label = Serra sa barra laterale
|
||||
pdfjs-editor-comments-sidebar-close-button-label = Serra sa barra laterale
|
||||
# Instructional copy to add a comment by selecting text or an annotations.
|
||||
pdfjs-editor-comments-sidebar-no-comments1 = As rilevadu una cosa de interessu? Sinnala·dda e agiunghe unu cummentu.
|
||||
|
||||
## Alt-text dialog
|
||||
|
||||
pdfjs-editor-alt-text-button-label = Testu alternativu
|
||||
pdfjs-editor-alt-text-edit-button =
|
||||
.aria-label = Modifica su testu alternativu
|
||||
pdfjs-editor-alt-text-dialog-label = Sèbera un’optzione
|
||||
pdfjs-editor-alt-text-dialog-description = Su testu alternativu (“alt text”) est ùtile pro persones chi non podent bìdere s’immàgine o cando non benit carrigada.
|
||||
pdfjs-editor-alt-text-add-description-label = Agiunghe una descritzione
|
||||
pdfjs-editor-alt-text-mark-decorative-label = Sinnala comente decorativa
|
||||
pdfjs-editor-alt-text-cancel-button = Annulla
|
||||
pdfjs-editor-alt-text-save-button = Sarva
|
||||
pdfjs-editor-alt-text-decorative-tooltip = Sinnalada comente decorativu
|
||||
|
||||
## Color picker
|
||||
|
||||
@ -411,13 +304,7 @@ pdfjs-editor-colorpicker-pink =
|
||||
## New alt-text dialog
|
||||
## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy.
|
||||
|
||||
# This is a button that users can click to open the alt text editor and add alt text when it is not present.
|
||||
pdfjs-editor-new-alt-text-missing-button =
|
||||
.aria-label = Mancat su testu alternativu
|
||||
pdfjs-editor-new-alt-text-missing-button-label = Mancat su testu alternativu
|
||||
# This is a button that opens up the alt text modal where users should review the alt text that was automatically generated.
|
||||
pdfjs-editor-new-alt-text-to-review-button =
|
||||
.aria-label = Revisiona su testu alternativu
|
||||
pdfjs-editor-new-alt-text-to-review-button-label = Revisiona su testu alternativu
|
||||
# "Created automatically" is a prefix that will be added to the beginning of any alt text that has been automatically generated. After the colon, the user will see/hear the actual alt text description. If the alt text has been edited by a human, this prefix will not appear.
|
||||
# Variables:
|
||||
@ -445,19 +332,6 @@ pdfjs-editor-alt-text-settings-show-dialog-button-label = Mustra deretu s’edit
|
||||
pdfjs-editor-alt-text-settings-show-dialog-description = T’agiudat a assegurare chi totu is immàgines tuas tèngiant unu testu alternativu.
|
||||
pdfjs-editor-alt-text-settings-close-button = Serra
|
||||
|
||||
## "Annotations removed" bar
|
||||
|
||||
pdfjs-editor-undo-bar-message-freetext = Testu cantzelladu
|
||||
pdfjs-editor-undo-bar-message-ink = Disinnu cantzelladu
|
||||
pdfjs-editor-undo-bar-message-stamp = Immàgine cantzellada
|
||||
pdfjs-editor-undo-bar-message-signature = Firma cantzellada
|
||||
pdfjs-editor-undo-bar-undo-button =
|
||||
.title = Iscontza
|
||||
pdfjs-editor-undo-bar-undo-button-label = Iscontza
|
||||
pdfjs-editor-undo-bar-close-button =
|
||||
.title = Serra
|
||||
pdfjs-editor-undo-bar-close-button-label = Serra
|
||||
|
||||
## Dialog buttons
|
||||
|
||||
pdfjs-editor-add-signature-cancel-button = Annulla
|
||||
|
||||
@ -153,29 +153,6 @@ pdfjs-document-properties-linearized = Rýchle zobrazovanie z webu:
|
||||
pdfjs-document-properties-linearized-yes = Áno
|
||||
pdfjs-document-properties-linearized-no = Nie
|
||||
pdfjs-document-properties-close-button = Zavrieť
|
||||
pdfjs-digital-signature-properties-view-certificate = Zobraziť certifikát
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Dôvod: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Časová pečiatka: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Podpodpis ({ $count })
|
||||
[few] Podpodpisy ({ $count })
|
||||
[many] Podpodpisy ({ $count })
|
||||
*[other] Podpodpisy ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -771,84 +748,6 @@ pdfjs-views-manager-waiting-for-file = Nahráva sa súbor…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Spravovať strany
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Vlastnosti digitálneho podpisu
|
||||
.aria-label = Vlastnosti digitálneho podpisu
|
||||
pdfjs-digital-signature-properties-button-label = Vlastnosti digitálneho podpisu
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokument bol podpísaný platným digitálnym podpisom
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokument bol podpísaný, ale { $count } digitálny podpis sa nepodarilo overiť
|
||||
[few] Dokument bol podpísaný, ale { $count } digitálne podpisy sa nepodarilo overiť
|
||||
[many] Dokument bol podpísaný, ale { $count } digitálnych podpisov sa nepodarilo overiť
|
||||
*[other] Dokument bol podpísaný, ale { $count } digitálnych podpisov sa nepodarilo overiť
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Dokument bol podpísaný { $count } certifikátom, ktorý nie je dôveryhodný
|
||||
[few] Dokument bol podpísaný { $count } certifikátmi, ktoré nie sú dôveryhodné
|
||||
[many] Dokument bol podpísaný { $count } certifikátmi, ktoré nie sú dôveryhodné
|
||||
*[other] Dokument bol podpísaný { $count } certifikátmi, ktoré nie sú dôveryhodné
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokument bol podpísaný { $count } certifikátom, ktorému vypršala platnosť
|
||||
[few] Dokument bol podpísaný { $count } certifikátmi, ktorých platnosť vypršala
|
||||
[many] Dokument bol podpísaný { $count } certifikátmi, ktorých platnosť vypršala
|
||||
*[other] Dokument bol podpísaný { $count } certifikátmi, ktorých platnosť vypršala
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Dokument má { $count } neplatný digitálny podpis
|
||||
[few] Dokument má { $count } neplatné digitálne podpisy
|
||||
[many] Dokument má { $count } neplatných digitálnych podpisov
|
||||
*[other] Dokument má { $count } neplatných digitálnych podpisov
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokument bol podpísaný { $count } zrušeným certifikátom
|
||||
[few] Dokument bol podpísaný { $count } zrušenými certifikátmi
|
||||
[many] Dokument bol podpísaný { $count } zrušenými certifikátmi
|
||||
*[other] Dokument bol podpísaný { $count } zrušenými certifikátmi
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Stav: Podpis overený
|
||||
pdfjs-digital-signature-properties-status-invalid = Stav: Podpis neplatný
|
||||
pdfjs-digital-signature-properties-status-unknown = Stav: Nedá sa overiť (nepodporovaný)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certifikát: Dôveryhodný ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certifikát: Nie je k dispozícii
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certifikát: Nedôveryhodný
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certifikát: Neznámy vydavateľ ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certifikát: Samopodpísaný ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certifikát: Nedôveryhodný vydavateľ ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certifikát: Platnosť vypršala
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certifikát: Platnosť vypršala ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certifikát: Zrušený
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -132,8 +132,8 @@ pdfjs-document-properties-page-size-orientation-portrait = pokončno
|
||||
pdfjs-document-properties-page-size-orientation-landscape = ležeče
|
||||
pdfjs-document-properties-page-size-name-a-three = A3
|
||||
pdfjs-document-properties-page-size-name-a-four = A4
|
||||
pdfjs-document-properties-page-size-name-letter = Letter
|
||||
pdfjs-document-properties-page-size-name-legal = Legal
|
||||
pdfjs-document-properties-page-size-name-letter = Pismo
|
||||
pdfjs-document-properties-page-size-name-legal = Pravno
|
||||
|
||||
## Variables:
|
||||
## $width (Number) - the width of the (current) page
|
||||
@ -153,29 +153,6 @@ pdfjs-document-properties-linearized = Hitri spletni ogled:
|
||||
pdfjs-document-properties-linearized-yes = Da
|
||||
pdfjs-document-properties-linearized-no = Ne
|
||||
pdfjs-document-properties-close-button = Zapri
|
||||
pdfjs-digital-signature-properties-view-certificate = Ogled digitalnega potrdila
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Razlog: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Časovni žig: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Podpodpis ({ $count })
|
||||
[two] Podpodpisi ({ $count })
|
||||
[few] Podpodpisi ({ $count })
|
||||
*[other] Podpodpisi ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -771,23 +748,6 @@ pdfjs-views-manager-waiting-for-file = Nalaganje datoteke …
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Upravljanje strani
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Lastnosti digitalnega podpisa
|
||||
.aria-label = Lastnosti digitalnega podpisa
|
||||
pdfjs-digital-signature-properties-button-label = Lastnosti digitalnega podpisa
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokument je bil podpisan z veljavnim digitalnim podpisom
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,28 +153,6 @@ pdfjs-document-properties-linearized = Брз веб приказ:
|
||||
pdfjs-document-properties-linearized-yes = Да
|
||||
pdfjs-document-properties-linearized-no = Не
|
||||
pdfjs-document-properties-close-button = Затвори
|
||||
pdfjs-digital-signature-properties-view-certificate = Прикажи сертификат
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Разлог: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Временски жиг: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Подпотпис ({ $count })
|
||||
[few] Подпотписа ({ $count })
|
||||
*[other] Подпотписа ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -762,79 +740,6 @@ pdfjs-views-manager-waiting-for-file = Отпремам датотеку…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Управљај страницама
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Својства дигиталног потписа
|
||||
.aria-label = Својства дигиталног потписа
|
||||
pdfjs-digital-signature-properties-button-label = Својства дигиталног потписа
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Документ је потписан исправним дигиталним потписом
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Документ је потписан, али { $count } дигитални потпис није могао да се потврди
|
||||
[few] Документ је потписан, али { $count } дигитална потписа нису могли да се потврде
|
||||
*[other] Документ је потписан, али { $count } дигиталних потписа није могло да се потврде
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Документ је потписан са { $count } сертификатом који није поуздан
|
||||
[few] Документ је потписан са { $count } сертификата који нису поуздани
|
||||
*[other] Документ је потписан са { $count } сертификата који нису поуздани
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Документ је потписан са { $count } истеклим сертификатом
|
||||
[few] Документ је потписан са { $count } истекла сертификата
|
||||
*[other] Документ је потписан са { $count } истеклих сертификата
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Документ има { $count } неважећи дигитални потпис
|
||||
[few] Документ има { $count } неважећа дигитална потписа
|
||||
*[other] Документ има { $count } неважећих дигиталних потписа
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Документ је потписан са { $count } опозваним сертификатом
|
||||
[few] Документ је потписан са { $count } опозвана сертификата
|
||||
*[other] Документ је потписан са { $count } опозваних сертификата
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Статус: потврђен потпис
|
||||
pdfjs-digital-signature-properties-status-invalid = Статус: неважећи потпис
|
||||
pdfjs-digital-signature-properties-status-unknown = Статус: није могуће потврдити (неподржано)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Сертификат: поуздан ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Сертификат: недоступан
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Сертификат: неповерљив
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Сертификат: непознат издавач ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Сертификат: самопотписан ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Сертификат: неповерљив издавач ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Сертификат: истекао
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Сертификат: истекао ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Сертификат: опозван
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Snabb webbvisning:
|
||||
pdfjs-document-properties-linearized-yes = Ja
|
||||
pdfjs-document-properties-linearized-no = Nej
|
||||
pdfjs-document-properties-close-button = Stäng
|
||||
pdfjs-digital-signature-properties-view-certificate = Visa certifikat
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Orsak: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Tidsstämpel: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Undersignatur ({ $count })
|
||||
*[other] Undersignaturer ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Överför fil…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Hantera sidor
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Egenskaper för digital signatur
|
||||
.aria-label = Egenskaper för digital signatur
|
||||
pdfjs-digital-signature-properties-button-label = Egenskaper för digital signatur
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Dokumentet signerades med en giltig digital signatur
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Dokument signerat men { $count } digital signatur kunde inte verifieras
|
||||
*[other] Dokument signerat men { $count } digitala signaturer kunde inte verifieras
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Dokument signerat med { $count } certifikat som inte är tillförlitligt
|
||||
*[other] Dokument signerat med { $count } certifikat som inte är tillförlitliga
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Dokument signerat med { $count } utgånget certifikat
|
||||
*[other] Dokument signerat med { $count } utgångna certifikat
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Dokumentet har { $count } ogiltig digital signatur
|
||||
*[other] Dokumentet har { $count } ogiltiga digitala signaturer
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Dokument signerat med { $count } återkallat certifikat
|
||||
*[other] Dokument signerat med { $count } återkallade certifikat
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Status: Signatur verifierad
|
||||
pdfjs-digital-signature-properties-status-invalid = Status: Ogiltig signatur
|
||||
pdfjs-digital-signature-properties-status-unknown = Status: Kan inte verifiera (stöds inte)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Certifikat: Tillförlitligt ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Certifikat: Ej tillgänglig
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Certifikat: Otillförlitligt
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Certifikat: Okänd utfärdare ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Certifikat: Självsignerat ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Certifikat: Otillförlitlig utfärdare ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Certifikat: Utgånget
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Certifikat: Utgånget ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Certifikat: Återkallat
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Hızlı web görünümü:
|
||||
pdfjs-document-properties-linearized-yes = Evet
|
||||
pdfjs-document-properties-linearized-no = Hayır
|
||||
pdfjs-document-properties-close-button = Kapat
|
||||
pdfjs-digital-signature-properties-view-certificate = Sertifikayı göster
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Neden: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Zaman damgası: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures =
|
||||
{ $count ->
|
||||
[one] Alt imza ({ $count })
|
||||
*[other] Alt imzalar ({ $count })
|
||||
}
|
||||
|
||||
## Print
|
||||
|
||||
@ -517,11 +496,11 @@ pdfjs-editor-new-alt-text-added-button =
|
||||
pdfjs-editor-new-alt-text-added-button-label = Alt metin eklendi
|
||||
# This is a button that users can click to open the alt text editor and add alt text when it is not present.
|
||||
pdfjs-editor-new-alt-text-missing-button =
|
||||
.aria-label = Alt metin eksik
|
||||
.aria-label = Alternatif metin eksik
|
||||
pdfjs-editor-new-alt-text-missing-button-label = Alt metin eksik
|
||||
# This is a button that opens up the alt text modal where users should review the alt text that was automatically generated.
|
||||
pdfjs-editor-new-alt-text-to-review-button =
|
||||
.aria-label = Alt metni incele
|
||||
.aria-label = Alternatif metni incele
|
||||
pdfjs-editor-new-alt-text-to-review-button-label = Alt metni incele
|
||||
# "Created automatically" is a prefix that will be added to the beginning of any alt text that has been automatically generated. After the colon, the user will see/hear the actual alt text description. If the alt text has been edited by a human, this prefix will not appear.
|
||||
# Variables:
|
||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Dosya yükleniyor…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Sayfaları yönet
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Dijital imza özellikleri
|
||||
.aria-label = Dijital imza özellikleri
|
||||
pdfjs-digital-signature-properties-button-label = Dijital imza özellikleri
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Belge geçerli bir dijital imza ile imzalanmıştır
|
||||
pdfjs-digital-signature-properties-banner-unknown =
|
||||
{ $count ->
|
||||
[one] Belge imzalanmış ancak { $count } dijital imza doğrulanamadı
|
||||
*[other] Belge imzalanmış ancak { $count } dijital imza doğrulanamadı
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-untrusted =
|
||||
{ $count ->
|
||||
[one] Belge, güvenilmeyen { $count } sertifikayla imzalanmış
|
||||
*[other] Belge, güvenilmeyen { $count } sertifikayla imzalanmış
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-expired =
|
||||
{ $count ->
|
||||
[one] Belge, süresi dolmuş { $count } sertifika ile imzalanmış
|
||||
*[other] Belge, süresi dolmuş { $count } sertifika ile imzalanmış
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-invalid =
|
||||
{ $count ->
|
||||
[one] Belge { $count } geçersiz dijital imza içeriyor
|
||||
*[other] Belge { $count } geçersiz dijital imza içeriyor
|
||||
}
|
||||
pdfjs-digital-signature-properties-banner-revoked =
|
||||
{ $count ->
|
||||
[one] Belge, iptal edilmiş { $count } sertifika ile imzalanmış
|
||||
*[other] Belge, iptal edilmiş { $count } sertifika ile imzalanmış
|
||||
}
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Durum: İmza doğrulandı
|
||||
pdfjs-digital-signature-properties-status-invalid = Durum: İmza geçersiz
|
||||
pdfjs-digital-signature-properties-status-unknown = Durum: Doğrulanamadı (desteklenmiyor)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Sertifika: Güvenilir ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Sertifika: Kullanılamıyor
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Sertifika: Güvensiz
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Sertifika: Bilinmeyen yayıncı ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Sertifika: Kendi kendine imzalanmış ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Sertifika: Güvenilmeyen yayıncı ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Sertifika: Süresi dolmuş
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Sertifika: Süresi dolmuş ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Sertifika: İptal edilmiş
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,23 +153,6 @@ pdfjs-document-properties-linearized = Xem nhanh trên web:
|
||||
pdfjs-document-properties-linearized-yes = Có
|
||||
pdfjs-document-properties-linearized-no = Không
|
||||
pdfjs-document-properties-close-button = Ðóng
|
||||
pdfjs-digital-signature-properties-view-certificate = Xem chứng chỉ
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = Nguyên nhân: { $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = Timestamp: { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures = Chữ ký thành phần ({ $count })
|
||||
|
||||
## Print
|
||||
|
||||
@ -486,7 +469,7 @@ pdfjs-editor-new-alt-text-description = Mô tả ngắn gọn dành cho người
|
||||
pdfjs-editor-new-alt-text-disclaimer1 = Văn bản thay thế này được tạo tự động và có thể không chính xác.
|
||||
pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Tìm hiểu thêm
|
||||
pdfjs-editor-new-alt-text-create-automatically-button-label = Tạo văn bản thay thế tự động
|
||||
pdfjs-editor-new-alt-text-not-now-button = Để sau
|
||||
pdfjs-editor-new-alt-text-not-now-button = Không phải bây giờ
|
||||
pdfjs-editor-new-alt-text-error-title = Không thể tạo tự động văn bản thay thế
|
||||
pdfjs-editor-new-alt-text-error-description = Vui lòng viết văn bản thay thế của riêng bạn hoặc thử lại sau.
|
||||
pdfjs-editor-new-alt-text-error-close-button = Đóng
|
||||
@ -717,54 +700,6 @@ pdfjs-views-manager-waiting-for-file = Đang tải lên tập tin…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Quản lý trang
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = Thuộc tính chữ ký điện tử
|
||||
.aria-label = Thuộc tính chữ ký điện tử
|
||||
pdfjs-digital-signature-properties-button-label = Thuộc tính chữ ký điện tử
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = Tài liệu đã được ký bằng chữ ký điện tử hợp lệ
|
||||
pdfjs-digital-signature-properties-banner-unknown = Tài liệu đã được ký nhưng không thể xác minh { $count } chữ ký điện tử
|
||||
pdfjs-digital-signature-properties-banner-untrusted = Tài liệu được ký bằng { $count } chứng chỉ không đáng tin cậy
|
||||
pdfjs-digital-signature-properties-banner-expired = Tài liệu được ký bằng { $count } chứng chỉ đã hết hạn
|
||||
pdfjs-digital-signature-properties-banner-invalid = Tài liệu có { $count } chữ ký điện tử không hợp lệ
|
||||
pdfjs-digital-signature-properties-banner-revoked = Tài liệu được ký bằng { $count } chứng chỉ đã bị thu hồi
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = Trạng thái: Chữ ký đã được xác minh
|
||||
pdfjs-digital-signature-properties-status-invalid = Trạng thái: Chữ ký không hợp lệ
|
||||
pdfjs-digital-signature-properties-status-unknown = Trạng thái: Không thể xác minh (không được hỗ trợ)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = Chứng chỉ: Đáng tin cậy ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = Chứng chỉ: Không khả dụng
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = Chứng chỉ: Không đáng tin cậy
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = Chứng chỉ: Người cấp không xác định ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = Chứng chỉ: Tự ký ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = Chứng chỉ: Người cấp không đáng tin cậy ({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = Chứng chỉ: Đã hết hạn
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = Chứng chỉ: Đã hết hạn ({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = Chứng chỉ: Đã bị thu hồi
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -153,19 +153,6 @@ pdfjs-document-properties-linearized = 快速 Web 视图:
|
||||
pdfjs-document-properties-linearized-yes = 是
|
||||
pdfjs-document-properties-linearized-no = 否
|
||||
pdfjs-document-properties-close-button = 关闭
|
||||
pdfjs-digital-signature-properties-view-certificate = 查看证书
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = 原因:{ $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = 时间戳:{ DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
|
||||
## Print
|
||||
|
||||
|
||||
@ -153,23 +153,6 @@ pdfjs-document-properties-linearized = 快速 Web 檢視:
|
||||
pdfjs-document-properties-linearized-yes = 是
|
||||
pdfjs-document-properties-linearized-no = 否
|
||||
pdfjs-document-properties-close-button = 關閉
|
||||
pdfjs-digital-signature-properties-view-certificate = 檢視憑證
|
||||
# Shown beneath an invalid signature card to explain why verification
|
||||
# failed. The text comes from NSS (e.g. "Signature integrity has been
|
||||
# compromised", "PKCS#7 signature could not be parsed") and is not
|
||||
# itself localized — it is the underlying error message produced by
|
||||
# the verification backend.
|
||||
# Variables:
|
||||
# $reason (String) - error message describing why the signature
|
||||
# could not be verified.
|
||||
pdfjs-digital-signature-properties-reason = 原因:{ $reason }
|
||||
# Variables:
|
||||
# $dateObj (Date) - the signing time from the /Sig dict's /M entry.
|
||||
pdfjs-digital-signature-properties-timestamp = 時間戳記:{ DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
||||
# Variables:
|
||||
# $count (Number) - number of nested sub-signatures (one per earlier
|
||||
# incremental revision of the document).
|
||||
pdfjs-digital-signature-properties-sub-signatures = 子簽章({ $count })
|
||||
|
||||
## Print
|
||||
|
||||
@ -717,54 +700,6 @@ pdfjs-views-manager-waiting-for-file = 正在上傳檔案…
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = 管理頁面
|
||||
|
||||
## Digital signature properties (signature verification panel)
|
||||
|
||||
pdfjs-digital-signature-properties-button =
|
||||
.title = 數位簽章屬性
|
||||
.aria-label = 數位簽章屬性
|
||||
pdfjs-digital-signature-properties-button-label = 數位簽章屬性
|
||||
|
||||
## Banner shown above the signature list summarising the overall
|
||||
## verification state of the document. Each variant is selected by the
|
||||
## viewer based on the worst per-signature status; one signature is
|
||||
## enough to lower the banner.
|
||||
##
|
||||
## Variables:
|
||||
## $count (Number) - number of signatures at the worst level.
|
||||
|
||||
pdfjs-digital-signature-properties-banner-verified = 文件使用有效的數位簽章進行簽署
|
||||
pdfjs-digital-signature-properties-banner-unknown = 文件已進行簽署,但無法驗證當中的 { $count } 筆數位簽章
|
||||
pdfjs-digital-signature-properties-banner-untrusted = 文件已進行簽署,但當中的 { $count } 筆數位簽章不受信任
|
||||
pdfjs-digital-signature-properties-banner-expired = 文件已進行簽署,但當中的 { $count } 筆數位簽章已過期
|
||||
pdfjs-digital-signature-properties-banner-invalid = 文件中有 { $count } 筆無效的數位簽章
|
||||
pdfjs-digital-signature-properties-banner-revoked = 文件已進行簽署,但當中的 { $count } 筆數位簽章已廢止
|
||||
|
||||
## Per-signature status row. Only three distinct strings are needed:
|
||||
## the signature crypto either verified (the cert chain may still be
|
||||
## untrusted/expired/revoked, but that's surfaced on the cert row
|
||||
## below), or it failed, or its sub-format isn't supported.
|
||||
|
||||
pdfjs-digital-signature-properties-status-verified = 狀態:已驗證簽章
|
||||
pdfjs-digital-signature-properties-status-invalid = 狀態:簽章無效
|
||||
pdfjs-digital-signature-properties-status-unknown = 狀態:無法驗證(不支援)
|
||||
|
||||
## Per-signature certificate row. The variants with an issuer / date in
|
||||
## parentheses embed fully-localized context — no English fall-through.
|
||||
##
|
||||
## Variables:
|
||||
## $issuer (String) - issuer or subject common name from the cert.
|
||||
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||
|
||||
pdfjs-digital-signature-properties-certificate-trusted = 憑證:受信任({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-unknown = 憑證:無法使用
|
||||
pdfjs-digital-signature-properties-certificate-untrusted = 憑證:未受信任
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-unknown-issuer = 憑證:未知的簽發者({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-self-signed = 憑證:自行簽署({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-untrusted-untrusted-issuer = 憑證:未受信任的簽發者({ $issuer })
|
||||
pdfjs-digital-signature-properties-certificate-expired = 憑證:已過期
|
||||
pdfjs-digital-signature-properties-certificate-expired-with-date = 憑證:已過期({ DATETIME($dateObj, dateStyle: "medium") })
|
||||
pdfjs-digital-signature-properties-certificate-revoked = 憑證:已廢止
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
4079
package-lock.json
generated
4079
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
44
package.json
44
package.json
@ -2,33 +2,33 @@
|
||||
"name": "pdf.js",
|
||||
"type": "module",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^8.0.1",
|
||||
"@babel/preset-env": "^8.0.2",
|
||||
"@babel/runtime": "^8.0.0",
|
||||
"@eslint/json": "^2.0.1",
|
||||
"@babel/core": "^7.29.7",
|
||||
"@babel/preset-env": "^7.29.7",
|
||||
"@babel/runtime": "^7.29.7",
|
||||
"@eslint/json": "^2.0.0",
|
||||
"@fluent/bundle": "^0.19.1",
|
||||
"@fluent/dom": "^0.10.2",
|
||||
"@metalsmith/layouts": "^3.0.0",
|
||||
"@metalsmith/markdown": "^1.10.0",
|
||||
"@napi-rs/canvas": "^1.0.3",
|
||||
"@types/node": "^26.1.2",
|
||||
"autoprefixer": "^10.5.4",
|
||||
"@napi-rs/canvas": "^1.0.0",
|
||||
"@types/node": "^26.0.0",
|
||||
"autoprefixer": "^10.5.1",
|
||||
"babel-loader": "^10.1.1",
|
||||
"babel-plugin-add-header-comment": "^1.0.3",
|
||||
"babel-plugin-istanbul": "^8.0.2",
|
||||
"babel-plugin-polyfill-corejs3": "^1.0.0",
|
||||
"cached-iterable": "^0.3.0",
|
||||
"caniuse-lite": "^1.0.30001806",
|
||||
"caniuse-lite": "^1.0.30001799",
|
||||
"core-js": "^3.49.0",
|
||||
"eslint": "^10.8.0",
|
||||
"eslint": "^10.5.0",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-import-x": "^4.17.1",
|
||||
"eslint-plugin-import-x": "^4.17.0",
|
||||
"eslint-plugin-jasmine": "^4.2.2",
|
||||
"eslint-plugin-no-unsanitized": "^4.1.5",
|
||||
"eslint-plugin-perfectionist": "^5.10.0",
|
||||
"eslint-plugin-perfectionist": "^5.9.1",
|
||||
"eslint-plugin-prettier": "^5.5.6",
|
||||
"eslint-plugin-regexp": "^3.1.1",
|
||||
"eslint-plugin-unicorn": "^72.0.0",
|
||||
"globals": "^17.8.0",
|
||||
"eslint-plugin-regexp": "^3.1.0",
|
||||
"eslint-plugin-unicorn": "^68.0.0",
|
||||
"globals": "^17.7.0",
|
||||
"gulp": "^5.0.1",
|
||||
"gulp-cli": "^3.1.0",
|
||||
"gulp-postcss": "^10.0.0",
|
||||
@ -44,23 +44,23 @@
|
||||
"jstransformer-nunjucks": "^1.2.0",
|
||||
"kleur": "^4.1.5",
|
||||
"metalsmith": "^2.7.0",
|
||||
"metalsmith-html-relative": "^2.0.13",
|
||||
"metalsmith-html-relative": "^2.0.12",
|
||||
"ordered-read-streams": "^2.0.0",
|
||||
"pngjs": "^7.0.0",
|
||||
"postcss": "^8.5.25",
|
||||
"postcss": "^8.5.15",
|
||||
"postcss-discard-comments": "^8.0.1",
|
||||
"postcss-values-parser": "^8.0.0",
|
||||
"prettier": "^3.9.6",
|
||||
"puppeteer": "^25.4.0",
|
||||
"stylelint": "^17.14.1",
|
||||
"prettier": "^3.8.4",
|
||||
"puppeteer": "^25.2.0",
|
||||
"stylelint": "^17.13.0",
|
||||
"stylelint-prettier": "^5.0.3",
|
||||
"svglint": "^4.2.1",
|
||||
"terser-webpack-plugin": "^5.6.1",
|
||||
"tsc-alias": "^1.9.1",
|
||||
"tsc-alias": "^1.8.17",
|
||||
"ttest": "^4.0.0",
|
||||
"typescript": "^6.0.3",
|
||||
"vinyl": "^3.0.1",
|
||||
"webpack": "^5.109.2",
|
||||
"webpack": "^5.107.2",
|
||||
"webpack-stream": "^7.0.0"
|
||||
},
|
||||
"repository": {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
{
|
||||
"stableVersion": "6.2.108",
|
||||
"baseVersion": "ce4ff55faaa83b39b0137dc458af6eea6f96235f",
|
||||
"versionPrefix": "6.3."
|
||||
"stableVersion": "6.0.227",
|
||||
"baseVersion": "b168293c173b0b9befe462c0b254136cf038c3ef",
|
||||
"versionPrefix": "6.1."
|
||||
}
|
||||
|
||||
@ -74,7 +74,6 @@ import { Catalog } from "./catalog.js";
|
||||
import { ColorSpaceUtils } from "./colorspace_utils.js";
|
||||
import { createImage } from "./editor/pdf_images.js";
|
||||
import { FileSpec } from "./file_spec.js";
|
||||
import { getSoundFormat } from "./sound.js";
|
||||
import { JpegStream } from "./jpeg_stream.js";
|
||||
import { ObjectLoader } from "./object_loader.js";
|
||||
import { OperatorList } from "./operator_list.js";
|
||||
@ -292,9 +291,6 @@ class AnnotationFactory {
|
||||
case "Screen":
|
||||
return new ScreenAnnotation(parameters);
|
||||
|
||||
case "Sound":
|
||||
return new SoundAnnotation(parameters);
|
||||
|
||||
default:
|
||||
if (!collectFields) {
|
||||
if (!subtype) {
|
||||
@ -319,7 +315,10 @@ class AnnotationFactory {
|
||||
const pageRef = annotDict.getRaw("P");
|
||||
if (pageRef instanceof Ref) {
|
||||
try {
|
||||
return await pdfManager.ensureCatalog("getPageIndex", [pageRef]);
|
||||
const pageIndex = await pdfManager.ensureCatalog("getPageIndex", [
|
||||
pageRef,
|
||||
]);
|
||||
return pageIndex;
|
||||
} catch (ex) {
|
||||
info(`_getPageIndex -- not a valid page reference: "${ex}".`);
|
||||
}
|
||||
@ -1332,8 +1331,6 @@ class Annotation {
|
||||
|
||||
const text = [];
|
||||
const buffer = [];
|
||||
let firstPositionX = Infinity;
|
||||
let firstPositionY = Infinity;
|
||||
let firstPosition = null;
|
||||
const sink = {
|
||||
desiredSize: Math.Infinity,
|
||||
@ -1344,8 +1341,7 @@ class Annotation {
|
||||
if (item.str === undefined) {
|
||||
continue;
|
||||
}
|
||||
firstPositionX = Math.min(firstPositionX, item.transform[4]);
|
||||
firstPositionY = Math.min(firstPositionY, item.transform[5]);
|
||||
firstPosition ||= item.transform.slice(-2);
|
||||
buffer.push(item.str);
|
||||
if (item.hasEOL) {
|
||||
text.push(buffer.join("").trimEnd());
|
||||
@ -1366,10 +1362,6 @@ class Annotation {
|
||||
});
|
||||
this.reset();
|
||||
|
||||
if (firstPositionX !== Infinity) {
|
||||
firstPosition = [firstPositionX, firstPositionY];
|
||||
}
|
||||
|
||||
if (buffer.length) {
|
||||
text.push(buffer.join("").trimEnd());
|
||||
}
|
||||
@ -1517,7 +1509,7 @@ class Annotation {
|
||||
* usually indirect; when it's inline its embedded-file stream still isn't
|
||||
* (streams are always indirect), so fall back to that ref.
|
||||
*/
|
||||
_getAttachmentId(fsDict, fsRef, annotationGlobals, isSound = false) {
|
||||
_getAttachmentId(fsDict, fsRef, annotationGlobals) {
|
||||
if (!(fsDict instanceof Dict)) {
|
||||
return undefined;
|
||||
}
|
||||
@ -1525,7 +1517,7 @@ class Annotation {
|
||||
fsRef = FileSpec.pickPlatformItem(fsDict.get("EF"), /* raw = */ true);
|
||||
}
|
||||
return fsRef instanceof Ref
|
||||
? annotationGlobals.catalog.getAttachmentIdForAnnotation(fsRef, isSound)
|
||||
? annotationGlobals.catalog.getAttachmentIdForAnnotation(fsRef)
|
||||
: undefined;
|
||||
}
|
||||
|
||||
@ -2887,7 +2879,10 @@ class TextWidgetAnnotation extends WidgetAnnotation {
|
||||
this.data.doNotScroll = this.hasFieldFlag(AnnotationFieldFlag.DONOTSCROLL);
|
||||
|
||||
// Check if we have a date or time.
|
||||
const { actions } = this.data;
|
||||
const {
|
||||
data: { actions },
|
||||
} = this;
|
||||
|
||||
if (!actions) {
|
||||
return;
|
||||
}
|
||||
@ -2895,35 +2890,32 @@ class TextWidgetAnnotation extends WidgetAnnotation {
|
||||
const AFDateTime =
|
||||
/^AF(Date|Time)_(?:Keystroke|Format)(?:Ex)?\(['"]?([^'"]+)['"]?\);$/;
|
||||
let canUseHTMLDateTime = false;
|
||||
|
||||
const aFormat = actions.get("Format"),
|
||||
aKeystroke = actions.get("Keystroke");
|
||||
if (
|
||||
(aFormat?.length === 1 &&
|
||||
aKeystroke?.length === 1 &&
|
||||
AFDateTime.test(aFormat[0]) &&
|
||||
AFDateTime.test(aKeystroke[0])) ||
|
||||
(aFormat?.length === 0 &&
|
||||
aKeystroke?.length === 1 &&
|
||||
AFDateTime.test(aKeystroke[0])) ||
|
||||
(aKeystroke?.length === 0 &&
|
||||
aFormat?.length === 1 &&
|
||||
AFDateTime.test(aFormat[0]))
|
||||
(actions.Format?.length === 1 &&
|
||||
actions.Keystroke?.length === 1 &&
|
||||
AFDateTime.test(actions.Format[0]) &&
|
||||
AFDateTime.test(actions.Keystroke[0])) ||
|
||||
(actions.Format?.length === 0 &&
|
||||
actions.Keystroke?.length === 1 &&
|
||||
AFDateTime.test(actions.Keystroke[0])) ||
|
||||
(actions.Keystroke?.length === 0 &&
|
||||
actions.Format?.length === 1 &&
|
||||
AFDateTime.test(actions.Format[0]))
|
||||
) {
|
||||
// If the Format and Keystroke actions are the same, we can just use
|
||||
// the Format action.
|
||||
canUseHTMLDateTime = true;
|
||||
}
|
||||
const actionsToVisit = [];
|
||||
if (aFormat) {
|
||||
actionsToVisit.push(...aFormat);
|
||||
if (actions.Format) {
|
||||
actionsToVisit.push(...actions.Format);
|
||||
}
|
||||
if (aKeystroke) {
|
||||
actionsToVisit.push(...aKeystroke);
|
||||
if (actions.Keystroke) {
|
||||
actionsToVisit.push(...actions.Keystroke);
|
||||
}
|
||||
if (canUseHTMLDateTime) {
|
||||
actions.delete("Keystroke");
|
||||
actions.set("Format", actionsToVisit);
|
||||
delete actions.Keystroke;
|
||||
actions.Format = actionsToVisit;
|
||||
}
|
||||
|
||||
for (const formatAction of actionsToVisit) {
|
||||
@ -3315,11 +3307,13 @@ class ButtonWidgetAnnotation extends WidgetAnnotation {
|
||||
return super.getOperatorList(evaluator, task, intent, annotationStorage);
|
||||
}
|
||||
|
||||
// There is no default appearance, `value === null || value === undefined`,
|
||||
// so use the one derived from the field value.
|
||||
value ??= this.data.checkBox
|
||||
? this.data.fieldValue === this.data.exportValue
|
||||
: this.data.fieldValue === this.data.buttonValue;
|
||||
if (value === null || value === undefined) {
|
||||
// There is no default appearance so use the one derived
|
||||
// from the field value.
|
||||
value = this.data.checkBox
|
||||
? this.data.fieldValue === this.data.exportValue
|
||||
: this.data.fieldValue === this.data.buttonValue;
|
||||
}
|
||||
|
||||
return this.#getOperatorListForAppearance(
|
||||
evaluator,
|
||||
@ -4104,8 +4098,6 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation {
|
||||
}
|
||||
|
||||
class SignatureWidgetAnnotation extends WidgetAnnotation {
|
||||
_hasValueFromXFA = false;
|
||||
|
||||
constructor(params) {
|
||||
super(params);
|
||||
|
||||
@ -4713,7 +4705,9 @@ class PolylineAnnotation extends MarkupAnnotation {
|
||||
const strokeAlpha = dict.get("CA");
|
||||
|
||||
let fillColor = getRgbColor(dict.getArray("IC"), null);
|
||||
fillColor &&= getPdfColorArray(fillColor);
|
||||
if (fillColor) {
|
||||
fillColor = getPdfColorArray(fillColor);
|
||||
}
|
||||
|
||||
let operator;
|
||||
if (fillColor) {
|
||||
@ -4791,19 +4785,19 @@ class InkAnnotation extends MarkupAnnotation {
|
||||
if (!Array.isArray(rawInkLists)) {
|
||||
return;
|
||||
}
|
||||
for (const rawInkList of rawInkLists) {
|
||||
for (let i = 0, ii = rawInkLists.length; i < ii; ++i) {
|
||||
// The raw ink lists array contains arrays of numbers representing
|
||||
// the alternating horizontal and vertical coordinates, respectively,
|
||||
// of each vertex. Convert this to an array of objects with x and y
|
||||
// coordinates.
|
||||
if (!Array.isArray(rawInkList)) {
|
||||
if (!Array.isArray(rawInkLists[i])) {
|
||||
continue;
|
||||
}
|
||||
const inkList = new Float32Array(rawInkList.length);
|
||||
const inkList = new Float32Array(rawInkLists[i].length);
|
||||
this.data.inkLists.push(inkList);
|
||||
for (let j = 0, jj = rawInkList.length; j < jj; j += 2) {
|
||||
const x = xref.fetchIfRef(rawInkList[j]),
|
||||
y = xref.fetchIfRef(rawInkList[j + 1]);
|
||||
for (let j = 0, jj = rawInkLists[i].length; j < jj; j += 2) {
|
||||
const x = xref.fetchIfRef(rawInkLists[i][j]),
|
||||
y = xref.fetchIfRef(rawInkLists[i][j + 1]);
|
||||
if (typeof x === "number" && typeof y === "number") {
|
||||
inkList[j] = x;
|
||||
inkList[j + 1] = y;
|
||||
@ -5494,23 +5488,15 @@ class MediaAnnotation extends Annotation {
|
||||
* when `assetRef` isn't itself a reference.
|
||||
* @param {string} asset.filename
|
||||
* @param {string} asset.contentType
|
||||
* @param {boolean} [asset.wrapSound]
|
||||
* When set, the embedded bytes are raw PDF sound samples that the catalog
|
||||
* wraps in a WAV container when fetched (see `soundStreamToWav`).
|
||||
* @param {Object} annotationGlobals
|
||||
*/
|
||||
_setMediaData(
|
||||
{ assetRef, assetDict, filename, contentType, wrapSound = false },
|
||||
{ assetRef, assetDict, filename, contentType },
|
||||
annotationGlobals
|
||||
) {
|
||||
this.data.noHTML = false;
|
||||
this.data.richMedia = {
|
||||
fileId: this._getAttachmentId(
|
||||
assetDict,
|
||||
assetRef,
|
||||
annotationGlobals,
|
||||
wrapSound
|
||||
),
|
||||
fileId: this._getAttachmentId(assetDict, assetRef, annotationGlobals),
|
||||
filename,
|
||||
contentType,
|
||||
};
|
||||
@ -5839,45 +5825,6 @@ class ScreenAnnotation extends MediaAnnotation {
|
||||
}
|
||||
}
|
||||
|
||||
class SoundAnnotation extends MediaAnnotation {
|
||||
constructor(params) {
|
||||
super(params);
|
||||
|
||||
const { dict, xref, annotationGlobals } = params;
|
||||
const soundRef = dict.getRaw("Sound");
|
||||
if (!(soundRef instanceof Ref)) {
|
||||
return;
|
||||
}
|
||||
let sound;
|
||||
try {
|
||||
sound = xref.fetch(soundRef);
|
||||
} catch (ex) {
|
||||
if (ex instanceof MissingDataException) {
|
||||
throw ex;
|
||||
}
|
||||
// A corrupt sound stream: fall back to rendering the appearance.
|
||||
warn(`SoundAnnotation: "${ex}".`);
|
||||
return;
|
||||
}
|
||||
if (!(sound instanceof BaseStream) || !getSoundFormat(sound.dict)) {
|
||||
// No embedded samples, or an encoding we can't turn into a playable WAV
|
||||
// (compressed, or an unusual bit depth); just render the appearance.
|
||||
return;
|
||||
}
|
||||
|
||||
this._setMediaData(
|
||||
{
|
||||
assetRef: soundRef,
|
||||
assetDict: sound.dict,
|
||||
filename: "sound.wav",
|
||||
contentType: "audio/wav",
|
||||
wrapSound: true,
|
||||
},
|
||||
annotationGlobals
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
Annotation,
|
||||
AnnotationBorderStyle,
|
||||
|
||||
@ -75,7 +75,7 @@ function calculateMD5(data, offset, length) {
|
||||
i += 3;
|
||||
const w = new Int32Array(16);
|
||||
const { k, r } = PARAMS;
|
||||
for (i = 0; i < paddedLength;) {
|
||||
for (i = 0; i < paddedLength; ) {
|
||||
for (j = 0; j < 16; ++j, i += 4) {
|
||||
w[j] =
|
||||
padded[i] |
|
||||
|
||||
@ -96,7 +96,7 @@ function calculateSHA256(data, offset, length) {
|
||||
const w = new Uint32Array(64);
|
||||
const { k } = PARAMS;
|
||||
// for each 512 bit block
|
||||
for (i = 0; i < paddedLength;) {
|
||||
for (i = 0; i < paddedLength; ) {
|
||||
for (j = 0; j < 16; ++j) {
|
||||
w[j] =
|
||||
(padded[i] << 24) |
|
||||
|
||||
@ -303,7 +303,7 @@ function calculateSHA512(data, offset, length, mode384 = false) {
|
||||
let tmp3;
|
||||
|
||||
// for each 1024 bit block
|
||||
for (i = 0; i < paddedLength;) {
|
||||
for (i = 0; i < paddedLength; ) {
|
||||
for (j = 0; j < 16; ++j) {
|
||||
w[j].high =
|
||||
(padded[i] << 24) |
|
||||
|
||||
@ -19,7 +19,7 @@ import {
|
||||
DocumentActionEventType,
|
||||
FormatError,
|
||||
info,
|
||||
makeArr,
|
||||
objectSize,
|
||||
PermissionFlag,
|
||||
shadow,
|
||||
stringToUTF8String,
|
||||
@ -52,7 +52,6 @@ import { clearGlobalCaches } from "./cleanup_helper.js";
|
||||
import { ColorSpaceUtils } from "./colorspace_utils.js";
|
||||
import { FileSpec } from "./file_spec.js";
|
||||
import { MetadataParser } from "./metadata_parser.js";
|
||||
import { soundStreamToWav } from "./sound.js";
|
||||
import { stringToPDFString } from "./string_utils.js";
|
||||
import { StructTreeRoot } from "./struct_tree.js";
|
||||
|
||||
@ -124,8 +123,6 @@ class Catalog {
|
||||
|
||||
#annotationAttachmentRefById = new Map();
|
||||
|
||||
#soundAttachmentIds = new Set();
|
||||
|
||||
#catDict = null;
|
||||
|
||||
builtInCMapCache = new Map();
|
||||
@ -174,32 +171,28 @@ class Catalog {
|
||||
*
|
||||
* @param {Ref} ref
|
||||
* File-spec or embedded-file stream reference.
|
||||
* @param {boolean} [isSound]
|
||||
* When set, the referenced stream holds raw PDF sound samples that
|
||||
* `attachmentContent` wraps in a WAV container on fetch.
|
||||
* @returns {string}
|
||||
* Attachment id.
|
||||
*/
|
||||
getAttachmentIdForAnnotation(ref, isSound = false) {
|
||||
getAttachmentIdForAnnotation(ref) {
|
||||
let id = this.#annotationAttachmentIdByRef.get(ref);
|
||||
if (!id) {
|
||||
const baseId = `attachmentRef:${ref.toString()}`;
|
||||
id = baseId;
|
||||
|
||||
let i = 1;
|
||||
while (
|
||||
this.#annotationAttachmentRefById.has(id) ||
|
||||
this.attachments?.has(id)
|
||||
) {
|
||||
id = `${baseId}-${i++}`;
|
||||
}
|
||||
|
||||
this.#annotationAttachmentIdByRef.put(ref, id);
|
||||
this.#annotationAttachmentRefById.set(id, ref);
|
||||
if (id) {
|
||||
return id;
|
||||
}
|
||||
if (isSound) {
|
||||
this.#soundAttachmentIds.add(id);
|
||||
|
||||
const baseId = `attachmentRef:${ref.toString()}`;
|
||||
id = baseId;
|
||||
|
||||
let i = 1;
|
||||
while (
|
||||
this.#annotationAttachmentRefById.has(id) ||
|
||||
this.attachments?.has(id)
|
||||
) {
|
||||
id = `${baseId}-${i++}`;
|
||||
}
|
||||
|
||||
this.#annotationAttachmentIdByRef.put(ref, id);
|
||||
this.#annotationAttachmentRefById.set(id, ref);
|
||||
return id;
|
||||
}
|
||||
|
||||
@ -763,17 +756,15 @@ class Catalog {
|
||||
}
|
||||
|
||||
get destinations() {
|
||||
const dests = new Map();
|
||||
|
||||
for (const obj of this.#readDests()) {
|
||||
const rawDests = this.#readDests(),
|
||||
dests = Object.create(null);
|
||||
for (const obj of rawDests) {
|
||||
if (obj instanceof NameTree) {
|
||||
for (const [key, value] of obj.getAll()) {
|
||||
const dest = fetchDest(value);
|
||||
if (dest) {
|
||||
dests.set(
|
||||
stringToPDFString(key, /* keepEscapeSequence = */ true),
|
||||
dest
|
||||
);
|
||||
dests[stringToPDFString(key, /* keepEscapeSequence = */ true)] =
|
||||
dest;
|
||||
}
|
||||
}
|
||||
} else if (obj instanceof Dict) {
|
||||
@ -781,10 +772,8 @@ class Catalog {
|
||||
const dest = fetchDest(value);
|
||||
if (dest) {
|
||||
// Always let the NameTree take precedence.
|
||||
dests.getOrInsert(
|
||||
stringToPDFString(key, /* keepEscapeSequence = */ true),
|
||||
dest
|
||||
);
|
||||
dests[stringToPDFString(key, /* keepEscapeSequence = */ true)] ||=
|
||||
dest;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -795,10 +784,11 @@ class Catalog {
|
||||
getDestination(id) {
|
||||
// Avoid extra lookup/parsing when all destinations are already available.
|
||||
if (Object.hasOwn(this, "destinations")) {
|
||||
return this.destinations.get(id) ?? null;
|
||||
return this.destinations[id] ?? null;
|
||||
}
|
||||
|
||||
for (const obj of this.#readDests()) {
|
||||
const rawDests = this.#readDests();
|
||||
for (const obj of rawDests) {
|
||||
if (obj instanceof NameTree || obj instanceof Dict) {
|
||||
const dest = fetchDest(obj.get(id));
|
||||
if (dest) {
|
||||
@ -810,7 +800,13 @@ class Catalog {
|
||||
// Always fallback to checking all destinations, in order to support:
|
||||
// - PDF documents with out-of-order NameTrees (fixes issue 10272).
|
||||
// - Destination keys that use PDFDocEncoding (fixes issue 19835).
|
||||
return this.destinations.get(id) ?? null;
|
||||
if (rawDests.length) {
|
||||
const dest = this.destinations[id];
|
||||
if (dest) {
|
||||
return dest;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
#readDests() {
|
||||
@ -1076,18 +1072,17 @@ class Catalog {
|
||||
break;
|
||||
case "PrintPageRange":
|
||||
// The number of elements must be even.
|
||||
if (
|
||||
Array.isArray(value) &&
|
||||
value.length % 2 === 0 &&
|
||||
value.every(
|
||||
if (Array.isArray(value) && value.length % 2 === 0) {
|
||||
const isValid = value.every(
|
||||
(page, i, arr) =>
|
||||
Number.isInteger(page) &&
|
||||
page > 0 &&
|
||||
(i === 0 || page >= arr[i - 1]) &&
|
||||
page <= this.numPages
|
||||
)
|
||||
) {
|
||||
prefValue = value;
|
||||
);
|
||||
if (isValid) {
|
||||
prefValue = value;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "NumCopies":
|
||||
@ -1104,14 +1099,15 @@ class Catalog {
|
||||
warn(`Bad value, for key "${key}", in ViewerPreferences: ${value}.`);
|
||||
continue;
|
||||
}
|
||||
(prefs ??= new Map()).set(key, prefValue);
|
||||
prefs ??= Object.create(null);
|
||||
prefs[key] = prefValue;
|
||||
}
|
||||
return shadow(this, "viewerPreferences", prefs);
|
||||
}
|
||||
|
||||
get openAction() {
|
||||
const obj = this.#catDict.get("OpenAction");
|
||||
const openAction = new Map();
|
||||
const openAction = Object.create(null);
|
||||
|
||||
if (obj instanceof Dict) {
|
||||
// Convert the OpenAction dictionary into a format that works with
|
||||
@ -1123,14 +1119,18 @@ class Catalog {
|
||||
Catalog.parseDestDictionary({ destDict, resultObj });
|
||||
|
||||
if (Array.isArray(resultObj.dest)) {
|
||||
openAction.set("dest", resultObj.dest);
|
||||
openAction.dest = resultObj.dest;
|
||||
} else if (resultObj.action) {
|
||||
openAction.set("action", resultObj.action);
|
||||
openAction.action = resultObj.action;
|
||||
}
|
||||
} else if (isValidExplicitDest(obj)) {
|
||||
openAction.set("dest", obj);
|
||||
openAction.dest = obj;
|
||||
}
|
||||
return shadow(this, "openAction", openAction.size ? openAction : null);
|
||||
return shadow(
|
||||
this,
|
||||
"openAction",
|
||||
objectSize(openAction) > 0 ? openAction : null
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1198,11 +1198,7 @@ class Catalog {
|
||||
if (ref) {
|
||||
const target = this.xref.fetch(ref);
|
||||
if (target instanceof BaseStream) {
|
||||
const content = FileSpec.readStreamContent(target);
|
||||
if (this.#soundAttachmentIds.has(id)) {
|
||||
return soundStreamToWav(target, content) ?? content;
|
||||
}
|
||||
return content;
|
||||
return FileSpec.readStreamContent(target);
|
||||
}
|
||||
return target instanceof Dict ? FileSpec.readContent(target) : null;
|
||||
}
|
||||
@ -1242,9 +1238,13 @@ class Catalog {
|
||||
let javaScript = null;
|
||||
|
||||
function appendIfJavaScriptDict(name, jsDict) {
|
||||
if (!(jsDict instanceof Dict) || !isName(jsDict.get("S"), "JavaScript")) {
|
||||
if (!(jsDict instanceof Dict)) {
|
||||
return;
|
||||
}
|
||||
if (!isName(jsDict.get("S"), "JavaScript")) {
|
||||
return;
|
||||
}
|
||||
|
||||
let js = jsDict.get("JS");
|
||||
if (js instanceof BaseStream) {
|
||||
js = js.getString();
|
||||
@ -1257,7 +1257,7 @@ class Catalog {
|
||||
);
|
||||
// Skip empty entries, similar to the `_collectJS` function.
|
||||
if (js) {
|
||||
(javaScript ??= new Map()).set(name, js);
|
||||
(javaScript ||= new Map()).set(name, js);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1288,10 +1288,14 @@ class Catalog {
|
||||
);
|
||||
|
||||
if (javaScript) {
|
||||
actions ??= new Map();
|
||||
actions ||= Object.create(null);
|
||||
|
||||
for (const [key, val] of javaScript) {
|
||||
actions.getOrInsertComputed(key, makeArr).push(val);
|
||||
if (key in actions) {
|
||||
actions[key].push(val);
|
||||
} else {
|
||||
actions[key] = [val];
|
||||
}
|
||||
}
|
||||
}
|
||||
return shadow(this, "jsActions", actions);
|
||||
@ -1591,9 +1595,6 @@ class Catalog {
|
||||
const xref = this.xref;
|
||||
let total = 0,
|
||||
ref = pageRef;
|
||||
// Prevent circular references in the /Pages tree.
|
||||
const visited = new RefSet();
|
||||
visited.put(pageRef);
|
||||
|
||||
while (true) {
|
||||
const node = await xref.fetchAsync(ref);
|
||||
@ -1613,12 +1614,6 @@ class Catalog {
|
||||
throw new FormatError("Node must be a dictionary.");
|
||||
}
|
||||
const parentRef = node.getRaw("Parent");
|
||||
if (parentRef instanceof Ref) {
|
||||
if (visited.has(parentRef)) {
|
||||
throw new FormatError("Pages tree contains circular reference.");
|
||||
}
|
||||
visited.put(parentRef);
|
||||
}
|
||||
|
||||
const parent = await node.getAsync("Parent");
|
||||
if (!parent) {
|
||||
@ -1731,19 +1726,9 @@ class Catalog {
|
||||
// reached (e.g. integer MCIDs or MCR/OBJR dicts without further K).
|
||||
if (!pageRef) {
|
||||
const queue = [seDict];
|
||||
// Prevent circular references in the structure tree.
|
||||
const visited = new RefSet();
|
||||
visited.put(seRef);
|
||||
while (queue.length > 0 && !pageRef) {
|
||||
const node = queue.shift();
|
||||
let kids = node.getRaw("K");
|
||||
if (kids instanceof Ref) {
|
||||
if (visited.has(kids)) {
|
||||
continue;
|
||||
}
|
||||
visited.put(kids);
|
||||
kids = xref.fetch(kids);
|
||||
}
|
||||
const kids = node.get("K");
|
||||
let kidsArr;
|
||||
if (Array.isArray(kids)) {
|
||||
kidsArr = kids;
|
||||
@ -1753,12 +1738,6 @@ class Catalog {
|
||||
continue;
|
||||
}
|
||||
for (const kid of kidsArr) {
|
||||
if (kid instanceof Ref) {
|
||||
if (visited.has(kid)) {
|
||||
continue;
|
||||
}
|
||||
visited.put(kid);
|
||||
}
|
||||
const kidObj = xref.fetchIfRef(kid);
|
||||
if (!(kidObj instanceof Dict)) {
|
||||
continue; // integer MCID – leaf node, no Pg here
|
||||
|
||||
@ -58,9 +58,11 @@ class CCITTFaxStream extends DecodeStream {
|
||||
if (this.eof) {
|
||||
return this.buffer;
|
||||
}
|
||||
bytes ??= this.stream.isAsync
|
||||
? (await this.stream.asyncGetBytes()) || this.bytes
|
||||
: this.bytes;
|
||||
if (!bytes) {
|
||||
bytes = this.stream.isAsync
|
||||
? (await this.stream.asyncGetBytes()) || this.bytes
|
||||
: this.bytes;
|
||||
}
|
||||
|
||||
this.buffer = await JBig2CCITTFaxImage.instance.decode(
|
||||
bytes,
|
||||
|
||||
@ -546,7 +546,7 @@ class CFFParser {
|
||||
|
||||
let length = data.length;
|
||||
|
||||
for (let j = 0; j < length;) {
|
||||
for (let j = 0; j < length; ) {
|
||||
const value = data[j++];
|
||||
let validationCommand = null;
|
||||
if (value === 12) {
|
||||
@ -775,12 +775,14 @@ class CFFParser {
|
||||
} else if (localSubrIndex) {
|
||||
localSubrToUse = localSubrIndex;
|
||||
}
|
||||
valid &&= this.parseCharString(
|
||||
state,
|
||||
charstring,
|
||||
localSubrToUse,
|
||||
globalSubrIndex
|
||||
);
|
||||
if (valid) {
|
||||
valid = this.parseCharString(
|
||||
state,
|
||||
charstring,
|
||||
localSubrToUse,
|
||||
globalSubrIndex
|
||||
);
|
||||
}
|
||||
if (state.width !== null) {
|
||||
const nominalWidth = privateDictToUse.getByName("nominalWidthX");
|
||||
widths[i] = nominalWidth + state.width;
|
||||
@ -1428,9 +1430,10 @@ class CFFFDSelect {
|
||||
}
|
||||
|
||||
getFDIndex(glyphIndex) {
|
||||
return glyphIndex < 0 || glyphIndex >= this.fdSelect.length
|
||||
? -1
|
||||
: this.fdSelect[glyphIndex];
|
||||
if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
|
||||
return -1;
|
||||
}
|
||||
return this.fdSelect[glyphIndex];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -239,10 +239,10 @@ class ChunkedStream extends Stream {
|
||||
};
|
||||
Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", {
|
||||
get() {
|
||||
return (
|
||||
this.numChunksLoaded === this.numChunks ||
|
||||
this.getMissingChunks().length === 0
|
||||
);
|
||||
if (this.numChunksLoaded === this.numChunks) {
|
||||
return true;
|
||||
}
|
||||
return this.getMissingChunks().length === 0;
|
||||
},
|
||||
configurable: true,
|
||||
});
|
||||
|
||||
@ -326,7 +326,7 @@ class CMap {
|
||||
c = ((c << 8) | str.charCodeAt(offset + n)) >>> 0;
|
||||
// Check each codespace range to see if it falls within.
|
||||
const codespaceRange = codespaceRanges[n];
|
||||
for (let k = 0, kk = codespaceRange.length; k < kk;) {
|
||||
for (let k = 0, kk = codespaceRange.length; k < kk; ) {
|
||||
const low = codespaceRange[k++];
|
||||
const high = codespaceRange[k++];
|
||||
if (c >= low && c <= high) {
|
||||
@ -345,7 +345,7 @@ class CMap {
|
||||
for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {
|
||||
// Check each codespace range to see if it falls within.
|
||||
const codespaceRange = codespaceRanges[n];
|
||||
for (let k = 0, kk = codespaceRange.length; k < kk;) {
|
||||
for (let k = 0, kk = codespaceRange.length; k < kk; ) {
|
||||
const low = codespaceRange[k++];
|
||||
const high = codespaceRange[k++];
|
||||
if (charCode >= low && charCode <= high) {
|
||||
|
||||
@ -183,21 +183,6 @@ class ColorSpace {
|
||||
unreachable("Should not call ColorSpace.getRgbBuffer");
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts `count` unscaled colors to RGB, starting at `destOffset`.
|
||||
* Components use the native color-space ranges expected by `getRgbItem`,
|
||||
* and each output has a `3 + alpha01` byte stride.
|
||||
* Subclasses may override this to batch expensive conversions.
|
||||
*/
|
||||
getRgbItems(src, count, dest, destOffset, alpha01) {
|
||||
const { numComps } = this;
|
||||
|
||||
for (let i = 0, srcOffset = 0; i < count; i++, srcOffset += numComps) {
|
||||
this.getRgbItem(src, srcOffset, dest, destOffset);
|
||||
destOffset += 3 + alpha01;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines the number of bytes required to store the result of the
|
||||
* conversion done by the getRgbBuffer method. As in getRgbBuffer,
|
||||
@ -394,20 +379,6 @@ class AlternateCS extends ColorSpace {
|
||||
this.base.getRgbItem(tmpBuf, 0, dest, destOffset);
|
||||
}
|
||||
|
||||
getRgbItems(src, count, dest, destOffset, alpha01) {
|
||||
const { base, numComps, tintFn } = this;
|
||||
const baseNumComps = base.numComps;
|
||||
// Tint first so the base color space can convert the batch at once.
|
||||
const tinted = new Float32Array(count * baseNumComps);
|
||||
|
||||
for (let i = 0, srcOffset = 0, tintedOffset = 0; i < count; i++) {
|
||||
tintFn(src, srcOffset, tinted, tintedOffset);
|
||||
srcOffset += numComps;
|
||||
tintedOffset += baseNumComps;
|
||||
}
|
||||
base.getRgbItems(tinted, count, dest, destOffset, alpha01);
|
||||
}
|
||||
|
||||
getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
|
||||
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("TESTING")) {
|
||||
assert(
|
||||
@ -475,36 +446,24 @@ class PatternCS extends ColorSpace {
|
||||
* The default color is `new Uint8Array([0])`.
|
||||
*/
|
||||
class IndexedCS extends ColorSpace {
|
||||
#rgbLookup;
|
||||
|
||||
constructor(base, highVal, lookup) {
|
||||
super("Indexed", 1);
|
||||
this.base = base;
|
||||
this.highVal = highVal;
|
||||
|
||||
const count = highVal + 1;
|
||||
const length = base.numComps * count;
|
||||
const palette = new Uint8Array(length);
|
||||
const length = base.numComps * (highVal + 1);
|
||||
this.lookup = new Uint8Array(length);
|
||||
|
||||
if (lookup instanceof BaseStream) {
|
||||
palette.set(lookup.getBytes(length));
|
||||
const bytes = lookup.getBytes(length);
|
||||
this.lookup.set(bytes);
|
||||
} else if (typeof lookup === "string") {
|
||||
for (let i = 0; i < length; ++i) {
|
||||
palette[i] = lookup.charCodeAt(i);
|
||||
this.lookup[i] = lookup.charCodeAt(i) & 0xff;
|
||||
}
|
||||
} else {
|
||||
throw new FormatError(`IndexedCS - unrecognized lookup table: ${lookup}`);
|
||||
}
|
||||
|
||||
this.#rgbLookup = new Uint8ClampedArray(count * 3);
|
||||
base.getRgbBuffer(
|
||||
palette,
|
||||
0,
|
||||
count,
|
||||
this.#rgbLookup,
|
||||
0,
|
||||
/* bits = */ 8,
|
||||
/* alpha01 = */ 0
|
||||
);
|
||||
}
|
||||
|
||||
getRgbItem(src, srcOffset, dest, destOffset) {
|
||||
@ -514,12 +473,10 @@ class IndexedCS extends ColorSpace {
|
||||
'IndexedCS.getRgbItem: Unsupported "dest" type.'
|
||||
);
|
||||
}
|
||||
const rgbLookup = this.#rgbLookup;
|
||||
const pos = MathClamp(Math.round(src[srcOffset]), 0, this.highVal) * 3;
|
||||
|
||||
dest[destOffset] = rgbLookup[pos];
|
||||
dest[destOffset + 1] = rgbLookup[pos + 1];
|
||||
dest[destOffset + 2] = rgbLookup[pos + 2];
|
||||
const { base, highVal, lookup } = this;
|
||||
const start =
|
||||
MathClamp(Math.round(src[srcOffset]), 0, highVal) * base.numComps;
|
||||
base.getRgbBuffer(lookup, start, 1, dest, destOffset, 8, 0);
|
||||
}
|
||||
|
||||
getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
|
||||
@ -529,21 +486,20 @@ class IndexedCS extends ColorSpace {
|
||||
'IndexedCS.getRgbBuffer: Unsupported "dest" type.'
|
||||
);
|
||||
}
|
||||
const { highVal } = this;
|
||||
const rgbLookup = this.#rgbLookup;
|
||||
const { base, highVal, lookup } = this;
|
||||
const { numComps } = base;
|
||||
const outputDelta = base.getOutputLength(numComps, alpha01);
|
||||
|
||||
for (let i = 0; i < count; ++i) {
|
||||
const pos = MathClamp(Math.round(src[srcOffset++]), 0, highVal) * 3;
|
||||
|
||||
dest[destOffset++] = rgbLookup[pos];
|
||||
dest[destOffset++] = rgbLookup[pos + 1];
|
||||
dest[destOffset++] = rgbLookup[pos + 2];
|
||||
destOffset += alpha01;
|
||||
const lookupPos =
|
||||
MathClamp(Math.round(src[srcOffset++]), 0, highVal) * numComps;
|
||||
base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
|
||||
destOffset += outputDelta;
|
||||
}
|
||||
}
|
||||
|
||||
getOutputLength(inputLength, alpha01) {
|
||||
return inputLength * (3 + alpha01);
|
||||
return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);
|
||||
}
|
||||
|
||||
isDefaultDecode(decode, bpc) {
|
||||
|
||||
@ -243,7 +243,9 @@ class ColorSpaceUtils {
|
||||
break;
|
||||
case "Pattern":
|
||||
baseCS = cs[1] || null;
|
||||
baseCS &&= this.#subParse(baseCS, options);
|
||||
if (baseCS) {
|
||||
baseCS = this.#subParse(baseCS, options);
|
||||
}
|
||||
return new PatternCS(baseCS);
|
||||
case "I":
|
||||
case "Indexed":
|
||||
|
||||
@ -18,12 +18,12 @@ import {
|
||||
assert,
|
||||
BaseException,
|
||||
makeArr,
|
||||
objectSize,
|
||||
Util,
|
||||
warn,
|
||||
} from "../shared/util.js";
|
||||
import { Dict, isName, isRefsEqual, Name, Ref, RefSet } from "./primitives.js";
|
||||
import { BaseStream } from "./base_stream.js";
|
||||
import { CONTROL_CHAR_REGEXP } from "../shared/css_utils.js";
|
||||
import { stringToPDFString } from "./string_utils.js";
|
||||
|
||||
const PDF_VERSION_REGEXP = /^[1-9]\.\d$/;
|
||||
@ -342,8 +342,7 @@ function lookupNormalRect(arr, fallback) {
|
||||
* each part of the path.
|
||||
*/
|
||||
function parseXFAPath(path) {
|
||||
// Anchoring prevents retrying the match at every character.
|
||||
const positionPattern = /^(.+)\[(\d+)\]$/;
|
||||
const positionPattern = /(.+)\[(\d+)\]$/;
|
||||
return path.split(".").map(component => {
|
||||
const m = component.match(positionPattern);
|
||||
if (m) {
|
||||
@ -377,7 +376,7 @@ function escapePDFName(str) {
|
||||
if (start < i) {
|
||||
buffer.push(str.substring(start, i));
|
||||
}
|
||||
buffer.push(`#${char.toString(16).padStart(2, "0")}`);
|
||||
buffer.push(`#${char.toString(16)}`);
|
||||
start = i + 1;
|
||||
}
|
||||
}
|
||||
@ -451,7 +450,7 @@ function _collectJS(entry, xref, list, parents) {
|
||||
}
|
||||
|
||||
function collectActions(xref, dict, eventType) {
|
||||
const actions = new Map();
|
||||
const actions = Object.create(null);
|
||||
const additionalActionsDicts = getInheritableProperty({
|
||||
dict,
|
||||
key: "AA",
|
||||
@ -477,7 +476,7 @@ function collectActions(xref, dict, eventType) {
|
||||
const list = [];
|
||||
_collectJS(rawActionDict, xref, list, parents);
|
||||
if (list.length > 0) {
|
||||
actions.set(action, list);
|
||||
actions[action] = list;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -489,10 +488,10 @@ function collectActions(xref, dict, eventType) {
|
||||
const list = [];
|
||||
_collectJS(actionDict, xref, list, parents);
|
||||
if (list.length > 0) {
|
||||
actions.set("Action", list);
|
||||
actions.Action = list;
|
||||
}
|
||||
}
|
||||
return actions.size ? actions : null;
|
||||
return objectSize(actions) > 0 ? actions : null;
|
||||
}
|
||||
|
||||
const XMLEntities = {
|
||||
@ -534,7 +533,7 @@ function encodeToXmlString(str) {
|
||||
buffer.push(str.substring(start, i));
|
||||
}
|
||||
buffer.push(`&#x${char.toString(16).toUpperCase()};`);
|
||||
if (char > 0xffff) {
|
||||
if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) {
|
||||
// char is represented by two u16
|
||||
i++;
|
||||
}
|
||||
@ -562,17 +561,6 @@ function validateFontName(fontFamily, mustWarn = false) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// A <string> is terminated by a newline, which for CSS also includes the
|
||||
// form feed character; see https://drafts.csswg.org/css-syntax/#newline.
|
||||
// The font family is escaped before being used, see `serializeFontFamily`,
|
||||
// hence this only prevents values that cannot sensibly name a font from
|
||||
// being used at all (the unquoted case below is already this strict).
|
||||
if (CONTROL_CHAR_REGEXP.test(fontFamily)) {
|
||||
if (mustWarn) {
|
||||
warn(`FontFamily contains control characters: ${fontFamily}.`);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// See https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident.
|
||||
for (const ident of fontFamily.split(/[ \t]+/)) {
|
||||
@ -587,18 +575,6 @@ function validateFontName(fontFamily, mustWarn = false) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Strip the spaces preceding a digit, since e.g. "Wingdings 3" is not a valid
|
||||
// font name in the css specs.
|
||||
// The optional trailing digit is matched as part of the space run, so that a
|
||||
// failing match cannot backtrack over the spaces; otherwise the replacement
|
||||
// would be quadratic in the number of consecutive spaces.
|
||||
function normalizeCSSFontFamily(fontFamily) {
|
||||
return fontFamily.replaceAll(
|
||||
/( +)(\d)?/g,
|
||||
(_, spaces, digit) => digit ?? " "
|
||||
);
|
||||
}
|
||||
|
||||
function validateCSSFont(cssFontInfo) {
|
||||
// See https://developer.mozilla.org/en-US/docs/Web/CSS/font-style.
|
||||
const DEFAULT_CSS_FONT_OBLIQUE = "14";
|
||||
@ -775,7 +751,6 @@ export {
|
||||
lookupRect,
|
||||
MAX_INT_32,
|
||||
MissingDataException,
|
||||
normalizeCSSFontFamily,
|
||||
numberToString,
|
||||
ParserEOFException,
|
||||
parseXFAPath,
|
||||
|
||||
@ -34,7 +34,6 @@ import { Dict, isDict, isName, Name } from "./primitives.js";
|
||||
import { calculateMD5 } from "./calculate_md5.js";
|
||||
import { calculateSHA256 } from "./calculate_sha256.js";
|
||||
import { DecryptStream } from "./decrypt_stream.js";
|
||||
import { saslPrep } from "./sasl_prep.js";
|
||||
|
||||
/**
|
||||
* @typedef {typeof AES128Cipher | typeof AES256Cipher | typeof ARCFourCipher
|
||||
@ -854,15 +853,6 @@ class CipherTransform {
|
||||
}
|
||||
}
|
||||
|
||||
function utf8PasswordToBytes(password) {
|
||||
try {
|
||||
password = utf8StringToString(password);
|
||||
} catch {
|
||||
warn("CipherTransformFactory: Unable to convert UTF8 encoded password.");
|
||||
}
|
||||
return stringToBytes(password);
|
||||
}
|
||||
|
||||
class CipherTransformFactory {
|
||||
#fileId;
|
||||
|
||||
@ -1138,19 +1128,18 @@ class CipherTransformFactory {
|
||||
this.encryptMetadata = encryptMetadata;
|
||||
|
||||
const fileIdBytes = stringToBytes(fileId);
|
||||
let passwordBytes, rawPasswordBytes;
|
||||
let passwordBytes;
|
||||
if (password) {
|
||||
if (revision === 6) {
|
||||
const preppedPassword = saslPrep(password);
|
||||
passwordBytes = utf8PasswordToBytes(preppedPassword);
|
||||
if (preppedPassword !== password) {
|
||||
rawPasswordBytes = utf8PasswordToBytes(password);
|
||||
try {
|
||||
password = utf8StringToString(password);
|
||||
} catch {
|
||||
warn(
|
||||
"CipherTransformFactory: Unable to convert UTF8 encoded password."
|
||||
);
|
||||
}
|
||||
} else if (algorithm === 5) {
|
||||
passwordBytes = utf8PasswordToBytes(password);
|
||||
} else {
|
||||
passwordBytes = stringToBytes(password);
|
||||
}
|
||||
passwordBytes = stringToBytes(password);
|
||||
}
|
||||
|
||||
let encryptionKey;
|
||||
@ -1174,27 +1163,20 @@ class CipherTransformFactory {
|
||||
const ownerEncryption = stringToBytes(dict.get("OE"));
|
||||
const userEncryption = stringToBytes(dict.get("UE"));
|
||||
const perms = stringToBytes(dict.get("Perms"));
|
||||
for (const candidate of rawPasswordBytes
|
||||
? [passwordBytes, rawPasswordBytes]
|
||||
: [passwordBytes]) {
|
||||
encryptionKey = this.#createEncryptionKey20(
|
||||
revision,
|
||||
candidate,
|
||||
ownerPassword,
|
||||
ownerValidationSalt,
|
||||
ownerKeySalt,
|
||||
uBytes,
|
||||
userPassword,
|
||||
userValidationSalt,
|
||||
userKeySalt,
|
||||
ownerEncryption,
|
||||
userEncryption,
|
||||
perms
|
||||
);
|
||||
if (encryptionKey) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
encryptionKey = this.#createEncryptionKey20(
|
||||
revision,
|
||||
passwordBytes,
|
||||
ownerPassword,
|
||||
ownerValidationSalt,
|
||||
ownerKeySalt,
|
||||
uBytes,
|
||||
userPassword,
|
||||
userValidationSalt,
|
||||
userKeySalt,
|
||||
ownerEncryption,
|
||||
userEncryption,
|
||||
perms
|
||||
);
|
||||
}
|
||||
if (!encryptionKey) {
|
||||
if (!password) {
|
||||
@ -1298,7 +1280,7 @@ class CipherTransformFactory {
|
||||
PasswordResponses.NEED_PASSWORD
|
||||
);
|
||||
}
|
||||
if (this.algorithm === 5 || cfm.name === "AESV3") {
|
||||
if (this.algorithm === 5) {
|
||||
// V=5 always uses 256-bit AES with the file encryption key, even
|
||||
// when a producer wrongly sets the crypt filter's CFM to AESV2
|
||||
// (bug 2046659).
|
||||
@ -1326,6 +1308,9 @@ class CipherTransformFactory {
|
||||
)
|
||||
);
|
||||
}
|
||||
if (cfm.name === "AESV3") {
|
||||
return AES256Cipher.bind(null, this.encryptionKey);
|
||||
}
|
||||
throw new FormatError("Unknown crypto method");
|
||||
};
|
||||
|
||||
|
||||
@ -111,9 +111,10 @@ class DecodeStream extends BaseStream {
|
||||
|
||||
async getImageData(length, decoderOptions) {
|
||||
if (!this.canAsyncDecodeImageFromBuffer) {
|
||||
return this.isAsyncDecoder
|
||||
? this.decodeImage(null, length, decoderOptions)
|
||||
: this.getBytes(length, decoderOptions);
|
||||
if (this.isAsyncDecoder) {
|
||||
return this.decodeImage(null, length, decoderOptions);
|
||||
}
|
||||
return this.getBytes(length, decoderOptions);
|
||||
}
|
||||
const data = await this.stream.asyncGetBytes();
|
||||
return this.decodeImage(data, length, decoderOptions);
|
||||
|
||||
@ -25,7 +25,6 @@ import {
|
||||
LINE_FACTOR,
|
||||
OPS,
|
||||
shadow,
|
||||
Util,
|
||||
warn,
|
||||
} from "../shared/util.js";
|
||||
import { ColorSpaceUtils } from "./colorspace_utils.js";
|
||||
@ -145,8 +144,7 @@ class AppearanceStreamEvaluator extends EvaluatorPreprocessor {
|
||||
result = stack.pop() || result;
|
||||
break;
|
||||
case OPS.setTextMatrix:
|
||||
const tm = Util.transform(this.stateManager.state.ctm, args);
|
||||
result.scaleFactor *= Math.hypot(tm[0], tm[1]);
|
||||
result.scaleFactor *= Math.hypot(args[0], args[1]);
|
||||
break;
|
||||
case OPS.setFont:
|
||||
const [fontName, fontSize] = args;
|
||||
@ -154,7 +152,7 @@ class AppearanceStreamEvaluator extends EvaluatorPreprocessor {
|
||||
result.fontName = fontName.name;
|
||||
}
|
||||
if (typeof fontSize === "number" && fontSize > 0) {
|
||||
result.fontSize = fontSize;
|
||||
result.fontSize = fontSize * result.scaleFactor;
|
||||
}
|
||||
break;
|
||||
case OPS.setFillColorSpace:
|
||||
@ -184,10 +182,6 @@ class AppearanceStreamEvaluator extends EvaluatorPreprocessor {
|
||||
case OPS.showSpacedText:
|
||||
case OPS.nextLineShowText:
|
||||
case OPS.nextLineSetSpacingShowText:
|
||||
// The font (Tf) and the text matrix (Tm) can be set in any order,
|
||||
// so the scale factor is applied here, when text is actually shown
|
||||
// and both are known to be in effect.
|
||||
result.fontSize *= result.scaleFactor;
|
||||
breakLoop = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -21,6 +21,7 @@ import {
|
||||
InvalidPDFException,
|
||||
isArrayEqual,
|
||||
makeArr,
|
||||
objectSize,
|
||||
PageActionEventType,
|
||||
RenderingIntentFlag,
|
||||
shadow,
|
||||
@ -42,7 +43,6 @@ import {
|
||||
isWhiteSpace,
|
||||
lookupNormalRect,
|
||||
MissingDataException,
|
||||
normalizeCSSFontFamily,
|
||||
PDF_VERSION_REGEXP,
|
||||
RESOURCES_KEYS_OPERATOR_LIST,
|
||||
RESOURCES_KEYS_TEXT_CONTENT,
|
||||
@ -81,7 +81,6 @@ import { XFAFactory } from "./xfa/factory.js";
|
||||
import { XRef } from "./xref.js";
|
||||
|
||||
const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];
|
||||
const SIGNATURE_TAIL_CHUNK_SIZE = 65536;
|
||||
|
||||
class Page {
|
||||
#resourcesPromise = null;
|
||||
@ -1005,12 +1004,6 @@ function find(stream, signature, limit = 1024, backwards = false) {
|
||||
class PDFDocument {
|
||||
#pagePromises = new Map();
|
||||
|
||||
// Map<id, {byteRange: number[4], pkcs7: Uint8Array}> — populated by the
|
||||
// `signatures` getter, consumed by `getSignatureData`. We deliberately
|
||||
// keep the signed byte spans out of the metadata array and only slice
|
||||
// them out of the stream when the viewer actually asks to verify.
|
||||
#signatureData = null;
|
||||
|
||||
#version = null;
|
||||
|
||||
constructor(pdfManager, stream) {
|
||||
@ -1195,10 +1188,7 @@ class PDFDocument {
|
||||
recursionDepth
|
||||
);
|
||||
}
|
||||
const isSignature = isName(
|
||||
getInheritableProperty({ dict: field, key: "FT" }),
|
||||
"Sig"
|
||||
);
|
||||
const isSignature = isName(field.get("FT"), "Sig");
|
||||
const rectangle = field.get("Rect");
|
||||
const isInvisible =
|
||||
Array.isArray(rectangle) && rectangle.every(value => value === 0);
|
||||
@ -1283,13 +1273,13 @@ class PDFDocument {
|
||||
if (!streams) {
|
||||
return null;
|
||||
}
|
||||
const data = new Map();
|
||||
const data = Object.create(null);
|
||||
for (const [key, stream] of streams) {
|
||||
if (!stream) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
data.set(key, stringToUTF8String(stream.getString()));
|
||||
data[key] = stringToUTF8String(stream.getString());
|
||||
} catch {
|
||||
warn("XFA - Invalid utf-8 string.");
|
||||
return null;
|
||||
@ -1397,7 +1387,9 @@ class PDFDocument {
|
||||
if (!(descriptor instanceof Dict)) {
|
||||
continue;
|
||||
}
|
||||
const fontFamily = normalizeCSSFontFamily(descriptor.get("FontFamily"));
|
||||
let fontFamily = descriptor.get("FontFamily");
|
||||
// For example, "Wingdings 3" is not a valid font name in the css specs.
|
||||
fontFamily = fontFamily.replaceAll(/ +(\d)/g, "$1");
|
||||
const fontWeight = descriptor.get("FontWeight");
|
||||
|
||||
// Angle is expressed in degrees counterclockwise in PDF
|
||||
@ -1879,15 +1871,12 @@ class PDFDocument {
|
||||
name = name === "" ? partName : `${name}.${partName}`;
|
||||
} else {
|
||||
let obj = field;
|
||||
// The `Parent` chain can be cyclic, hence the local `RefSet`.
|
||||
const walkedRefs = new RefSet();
|
||||
while (true) {
|
||||
obj = obj.getRaw("Parent") || parentRef;
|
||||
if (obj instanceof Ref) {
|
||||
if (visitedRefs.has(obj) || walkedRefs.has(obj)) {
|
||||
if (visitedRefs.has(obj)) {
|
||||
break;
|
||||
}
|
||||
walkedRefs.put(obj);
|
||||
obj = await xref.fetchAsync(obj);
|
||||
}
|
||||
if (!(obj instanceof Dict)) {
|
||||
@ -1961,7 +1950,7 @@ class PDFDocument {
|
||||
const { acroForm } = annotationGlobals;
|
||||
|
||||
const visitedRefs = new RefSet();
|
||||
const allFields = new Map();
|
||||
const allFields = Object.create(null);
|
||||
const fieldPromises = new Map();
|
||||
const orphanFields = new RefSetCache();
|
||||
for (const fieldRef of acroForm.get("Fields")) {
|
||||
@ -1982,7 +1971,7 @@ class PDFDocument {
|
||||
Promise.all(promises).then(fields => {
|
||||
fields = fields.filter(field => !!field);
|
||||
if (fields.length > 0) {
|
||||
allFields.set(name, fields);
|
||||
allFields[name] = fields;
|
||||
}
|
||||
})
|
||||
);
|
||||
@ -1990,7 +1979,7 @@ class PDFDocument {
|
||||
await Promise.all(allPromises);
|
||||
|
||||
return {
|
||||
allFields: allFields.size ? allFields : null,
|
||||
allFields: objectSize(allFields) > 0 ? allFields : null,
|
||||
orphanFields,
|
||||
};
|
||||
});
|
||||
@ -1998,258 +1987,6 @@ class PDFDocument {
|
||||
return shadow(this, "fieldObjects", promise);
|
||||
}
|
||||
|
||||
async #collectSignatureFields(fields, out, visitedRefs) {
|
||||
if (!Array.isArray(fields)) {
|
||||
return;
|
||||
}
|
||||
for (const fieldRef of fields) {
|
||||
if (fieldRef instanceof Ref) {
|
||||
if (visitedRefs.has(fieldRef)) {
|
||||
continue;
|
||||
}
|
||||
visitedRefs.put(fieldRef);
|
||||
}
|
||||
const field = await this.xref.fetchIfRefAsync(fieldRef);
|
||||
if (!(field instanceof Dict)) {
|
||||
continue;
|
||||
}
|
||||
if (isName(await field.getAsync("FT"), "Sig")) {
|
||||
const sigDict = await field.getAsync("V");
|
||||
if (sigDict instanceof Dict) {
|
||||
const parsed = await this.#parseSignatureDict(
|
||||
field,
|
||||
sigDict,
|
||||
fieldRef
|
||||
);
|
||||
if (parsed) {
|
||||
out.push(parsed);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (field.has("Kids")) {
|
||||
// A terminal field can have Widget annotations as children, so its
|
||||
// own signature must be collected before walking the field tree.
|
||||
await this.#collectSignatureFields(
|
||||
await field.getAsync("Kids"),
|
||||
out,
|
||||
visitedRefs
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async #getByteRange(begin, end) {
|
||||
try {
|
||||
return this.stream.getByteRange(begin, end);
|
||||
} catch (ex) {
|
||||
if (!(ex instanceof MissingDataException)) {
|
||||
throw ex;
|
||||
}
|
||||
await this.pdfManager.requestRange(begin, end);
|
||||
return this.#getByteRange(begin, end);
|
||||
}
|
||||
}
|
||||
|
||||
async #coversWholeDocument(signedEnd, modificationsAfterSignature) {
|
||||
if (modificationsAfterSignature > 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const fileLength = this.stream.end;
|
||||
for (
|
||||
let begin = signedEnd;
|
||||
begin < fileLength;
|
||||
begin += SIGNATURE_TAIL_CHUNK_SIZE
|
||||
) {
|
||||
const end = Math.min(begin + SIGNATURE_TAIL_CHUNK_SIZE, fileLength);
|
||||
const tail = await this.#getByteRange(begin, end);
|
||||
|
||||
for (const byte of tail) {
|
||||
if (
|
||||
byte !== 0x00 && // null
|
||||
byte !== 0x09 && // horizontal tab
|
||||
byte !== 0x0a && // line feed
|
||||
byte !== 0x0c && // form feed
|
||||
byte !== 0x0d && // carriage return
|
||||
byte !== 0x20 // space
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
async #parseSignatureDict(field, sigDict, fieldRef) {
|
||||
const byteRange = await sigDict.getAsync("ByteRange");
|
||||
if (
|
||||
!Array.isArray(byteRange) ||
|
||||
byteRange.length !== 4 ||
|
||||
byteRange.some(n => !Number.isInteger(n) || n < 0)
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
// Slice the two ByteRange byte spans out of the underlying PDF stream.
|
||||
// ByteRange = [a, b, c, d] means signed bytes are [a..a+b] and [c..c+d];
|
||||
// the gap covers the /Contents hex blob itself.
|
||||
const [a, b, c, d] = byteRange;
|
||||
// `/ByteRange` offsets are absolute, so compare against `stream.end`
|
||||
// (raw buffer end), not `stream.length` (post-`moveStart` payload).
|
||||
const fileLength = this.stream.end || 0;
|
||||
// Reject signatures whose /ByteRange is structurally implausible: it
|
||||
// must start at the file head, define a non-empty first span, leave
|
||||
// room for the /Contents blob between the two spans, and fit within
|
||||
// the file. Without this a crafted PDF can claim to cover the whole
|
||||
// document while only signing a small prologue.
|
||||
if (
|
||||
a !== 0 ||
|
||||
b <= 0 ||
|
||||
a + b > c ||
|
||||
c + d > fileLength ||
|
||||
fileLength === 0
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const contents = await sigDict.getAsync("Contents");
|
||||
if (typeof contents !== "string" || contents.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const [
|
||||
filterName,
|
||||
subFilterName,
|
||||
t,
|
||||
name,
|
||||
reason,
|
||||
location,
|
||||
contactInfo,
|
||||
m,
|
||||
] = await Promise.all([
|
||||
sigDict.getAsync("Filter"),
|
||||
sigDict.getAsync("SubFilter"),
|
||||
field.getAsync("T"),
|
||||
sigDict.getAsync("Name"),
|
||||
sigDict.getAsync("Reason"),
|
||||
sigDict.getAsync("Location"),
|
||||
sigDict.getAsync("ContactInfo"),
|
||||
sigDict.getAsync("M"),
|
||||
]);
|
||||
|
||||
const filter = filterName instanceof Name ? filterName.name : null,
|
||||
subFilter = subFilterName instanceof Name ? subFilterName.name : null;
|
||||
|
||||
let signatureType = null;
|
||||
if (subFilter === "adbe.pkcs7.detached") {
|
||||
signatureType = 0;
|
||||
} else if (subFilter === "adbe.pkcs7.sha1") {
|
||||
signatureType = 1;
|
||||
}
|
||||
const refKey = fieldRef instanceof Ref ? fieldRef.toString() : "inline";
|
||||
|
||||
return {
|
||||
id: `${refKey}:${a}-${b}-${c}-${d}`,
|
||||
fieldName: typeof t === "string" ? stringToPDFString(t) : "",
|
||||
signerName: typeof name === "string" ? stringToPDFString(name) : null,
|
||||
reason: typeof reason === "string" ? stringToPDFString(reason) : null,
|
||||
location:
|
||||
typeof location === "string" ? stringToPDFString(location) : null,
|
||||
contactInfo:
|
||||
typeof contactInfo === "string" ? stringToPDFString(contactInfo) : null,
|
||||
signingTime: typeof m === "string" ? m : null,
|
||||
filter,
|
||||
subFilter,
|
||||
signatureType,
|
||||
byteRange,
|
||||
pkcs7: stringToBytes(contents),
|
||||
revisionIndex: 0,
|
||||
parentId: null,
|
||||
};
|
||||
}
|
||||
|
||||
get signatures() {
|
||||
const promise = this.pdfManager
|
||||
.ensureDoc("formInfo")
|
||||
.then(async formInfo => {
|
||||
if (!formInfo.hasSignatures || !formInfo.hasFields) {
|
||||
return null;
|
||||
}
|
||||
const annotationGlobals = await this.annotationGlobals;
|
||||
if (!annotationGlobals) {
|
||||
return null;
|
||||
}
|
||||
const fields = annotationGlobals.acroForm.get("Fields");
|
||||
|
||||
const collected = [];
|
||||
await this.#collectSignatureFields(fields, collected, new RefSet());
|
||||
|
||||
await Promise.all(
|
||||
collected.map(async signature => {
|
||||
const signedEnd = signature.byteRange[2] + signature.byteRange[3];
|
||||
signature.modificationsAfterSignature =
|
||||
this.xref.countUpdatesAfter(signedEnd);
|
||||
signature.coversWholeDocument = await this.#coversWholeDocument(
|
||||
signedEnd,
|
||||
signature.modificationsAfterSignature
|
||||
);
|
||||
})
|
||||
);
|
||||
|
||||
// Group sub-signatures by ByteRange containment: outer revision is
|
||||
// the largest covering signature (largest c + d). Sort descending,
|
||||
// then point each later signature at the smallest enclosing parent
|
||||
// that came before it.
|
||||
collected.sort(
|
||||
(a, b) =>
|
||||
b.byteRange[2] + b.byteRange[3] - (a.byteRange[2] + a.byteRange[3])
|
||||
);
|
||||
for (let i = 0, ii = collected.length; i < ii; i++) {
|
||||
const sig = collected[i];
|
||||
sig.revisionIndex = i;
|
||||
for (let j = i - 1; j >= 0; j--) {
|
||||
const candidate = collected[j];
|
||||
if (
|
||||
candidate.byteRange[2] + candidate.byteRange[3] >
|
||||
sig.byteRange[2] + sig.byteRange[3]
|
||||
) {
|
||||
sig.parentId = candidate.id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Keep the PKCS#7 blob and byte-range information worker-side so the
|
||||
// metadata array stays small. The viewer fetches the signed bytes on
|
||||
// demand via `getSignatureData(id)`, one signature at a time, only
|
||||
// when verification is about to run.
|
||||
const signatureData = new Map();
|
||||
const metadata = collected.map(sig => {
|
||||
const { pkcs7, ...rest } = sig;
|
||||
signatureData.set(sig.id, { byteRange: sig.byteRange, pkcs7 });
|
||||
return rest;
|
||||
});
|
||||
this.#signatureData = signatureData;
|
||||
return metadata.length ? metadata : null;
|
||||
});
|
||||
|
||||
return shadow(this, "signatures", promise);
|
||||
}
|
||||
|
||||
async getSignatureData(id) {
|
||||
// Ensure parsing is finished and `#signatureData` is populated.
|
||||
await this.signatures;
|
||||
const signature = this.#signatureData?.get(id);
|
||||
if (!signature) {
|
||||
return null;
|
||||
}
|
||||
const { byteRange, pkcs7 } = signature;
|
||||
const [a, b, c, d] = byteRange;
|
||||
const data = await Promise.all([
|
||||
this.#getByteRange(a, a + b),
|
||||
this.#getByteRange(c, c + d),
|
||||
]);
|
||||
return { data, pkcs7 };
|
||||
}
|
||||
|
||||
get hasJSActions() {
|
||||
const promise = this.pdfManager.ensureDoc("_parseHasJSActions");
|
||||
return shadow(this, "hasJSActions", promise);
|
||||
@ -2268,9 +2005,9 @@ class PDFDocument {
|
||||
return true;
|
||||
}
|
||||
if (fieldObjects?.allFields) {
|
||||
return fieldObjects.allFields
|
||||
.values()
|
||||
.some(fieldObj => fieldObj.some(obj => obj.actions !== null));
|
||||
return Object.values(fieldObjects.allFields).some(fieldObject =>
|
||||
fieldObject.some(object => object.actions !== null)
|
||||
);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -104,10 +104,6 @@ class XRefWrapper {
|
||||
return this._getNewRef();
|
||||
}
|
||||
|
||||
countUpdatesAfter(offset) {
|
||||
return null;
|
||||
}
|
||||
|
||||
fetchIfRef(obj) {
|
||||
return obj instanceof Ref ? this.fetch(obj) : obj;
|
||||
}
|
||||
@ -263,7 +259,7 @@ class PDFEditor {
|
||||
) {
|
||||
if (obj instanceof Ref) {
|
||||
const {
|
||||
currentDocument: { fieldToParent, oldRefMapping },
|
||||
currentDocument: { oldRefMapping },
|
||||
} = this;
|
||||
const existingRef = oldRefMapping.get(obj);
|
||||
if (existingRef) {
|
||||
@ -271,12 +267,6 @@ class PDFEditor {
|
||||
}
|
||||
const oldRef = obj;
|
||||
obj = await xref.fetchAsync(oldRef);
|
||||
const mappedRef = oldRefMapping.get(oldRef);
|
||||
if (mappedRef) {
|
||||
// Another concurrent traversal may have allocated the clone while the
|
||||
// source object was being fetched.
|
||||
return mappedRef;
|
||||
}
|
||||
if (typeof obj === "number") {
|
||||
// Simple value; no need to create a new reference.
|
||||
return obj;
|
||||
@ -305,17 +295,9 @@ class PDFEditor {
|
||||
}
|
||||
}
|
||||
|
||||
let cloneSource = true;
|
||||
if (fieldToParent.has(oldRef) && obj instanceof Dict) {
|
||||
// Avoid following a widget's field hierarchy while cloning the page,
|
||||
// without mutating the source dictionary cached by its XRef.
|
||||
obj = this.cloneDict(obj);
|
||||
obj.delete("Parent");
|
||||
cloneSource = false;
|
||||
}
|
||||
this.xref[newRef.num] = await this.#collectDependencies(
|
||||
obj,
|
||||
cloneSource,
|
||||
true,
|
||||
xref,
|
||||
resourceStreamPath
|
||||
);
|
||||
@ -473,7 +455,12 @@ class PDFEditor {
|
||||
// Re-entry means a (malformed) cycle back to this stream: allocate its
|
||||
// reference now to break the loop, like the generic path's eager alloc.
|
||||
if (resourceStreamPath.has(oldRef)) {
|
||||
return oldRefMapping.getOrPutComputed(oldRef, () => this.newRef);
|
||||
let ref = oldRefMapping.get(oldRef);
|
||||
if (!ref) {
|
||||
ref = this.newRef;
|
||||
oldRefMapping.put(oldRef, ref);
|
||||
}
|
||||
return ref;
|
||||
}
|
||||
|
||||
const key = oldRef.toString();
|
||||
@ -543,14 +530,6 @@ class PDFEditor {
|
||||
return ref;
|
||||
}
|
||||
|
||||
async #resolveStructKids(rawKids, xref) {
|
||||
if (rawKids instanceof Ref) {
|
||||
const fetched = await xref.fetchAsync(rawKids);
|
||||
return Array.isArray(fetched) ? fetched : [rawKids];
|
||||
}
|
||||
return Array.isArray(rawKids) ? rawKids : [rawKids];
|
||||
}
|
||||
|
||||
async #cloneStructTreeNode(
|
||||
parentStructRef,
|
||||
node,
|
||||
@ -568,11 +547,19 @@ class PDFEditor {
|
||||
if (pg instanceof Ref && !pagesMap.has(pg)) {
|
||||
return null;
|
||||
}
|
||||
const k = node.getRaw("K");
|
||||
if (k instanceof Ref && visited.has(k)) {
|
||||
return null;
|
||||
let kids;
|
||||
const k = (kids = node.getRaw("K"));
|
||||
if (k instanceof Ref) {
|
||||
// We're only interested by ref referencing nodes and not an array.
|
||||
if (visited.has(k)) {
|
||||
return null;
|
||||
}
|
||||
kids = await xref.fetchAsync(k);
|
||||
if (!Array.isArray(kids)) {
|
||||
kids = [k];
|
||||
}
|
||||
}
|
||||
const kids = await this.#resolveStructKids(k, xref);
|
||||
kids = Array.isArray(kids) ? kids : [kids];
|
||||
const newKids = [];
|
||||
const structElemIndices = [];
|
||||
for (let kid of kids) {
|
||||
@ -633,15 +620,10 @@ class PDFEditor {
|
||||
if (!kidRef) {
|
||||
continue;
|
||||
}
|
||||
// Only keep the reference when its target was actually copied. A link
|
||||
// annotation targeting a removed page is dropped, so skip its OBJR.
|
||||
const oldObjRef = kid.getRaw("Obj");
|
||||
if (oldObjRef instanceof Ref && !oldRefMapping.get(oldObjRef)) {
|
||||
const newKidRef = oldRefMapping.get(kidRef);
|
||||
if (!newKidRef) {
|
||||
continue;
|
||||
}
|
||||
const newKidRef =
|
||||
oldRefMapping.get(kidRef) ||
|
||||
(await this.#collectDependencies(kidRef, true, xref));
|
||||
const newKid = this.xref[newKidRef.num];
|
||||
// Fix the missing StructParent entry in the referenced object.
|
||||
const objRef = newKid.getRaw("Obj");
|
||||
@ -727,21 +709,12 @@ class PDFEditor {
|
||||
}
|
||||
for (let attr of attributes) {
|
||||
attr = this.xrefWrapper.fetchIfRef(attr);
|
||||
if (!(attr instanceof Dict)) {
|
||||
// An attribute array may interleave dictionaries and revision
|
||||
// numbers (ISO 32000-2, 14.7.6.3).
|
||||
continue;
|
||||
}
|
||||
if (isName(attr.get("O"), "Table") && attr.has("Headers")) {
|
||||
const headers = this.xrefWrapper.fetchIfRef(attr.getRaw("Headers"));
|
||||
if (Array.isArray(headers)) {
|
||||
for (let i = 0, ii = headers.length; i < ii; i++) {
|
||||
const header = this.xrefWrapper.fetchIfRef(headers[i]);
|
||||
if (typeof header !== "string") {
|
||||
continue;
|
||||
}
|
||||
const newId = dedupIDs.get(
|
||||
stringToPDFString(header, /* keepEscapeSequence = */ false)
|
||||
stringToPDFString(headers[i], /* keepEscapeSequence = */ false)
|
||||
);
|
||||
if (newId) {
|
||||
headers[i] = newId;
|
||||
@ -1233,12 +1206,15 @@ class PDFEditor {
|
||||
if (!isName(annotationDict.get("Subtype"), "Link")) {
|
||||
if (isName(annotationDict.get("Subtype"), "Widget")) {
|
||||
hasSignatureAnnotations ||= isName(
|
||||
getInheritableProperty({ dict: annotationDict, key: "FT" }),
|
||||
annotationDict.get("FT"),
|
||||
"Sig"
|
||||
);
|
||||
const parentRef = annotationDict.getRaw("Parent") || null;
|
||||
// The parent will be omitted from the annotation clone to avoid
|
||||
// visiting it, then restored by #mergeAcroForms.
|
||||
const parentRef = annotationDict.get("Parent") || null;
|
||||
// We remove the parent to avoid visiting it when cloning the
|
||||
// annotation.
|
||||
// It'll be fixed later in #mergeAcroForms when merging the
|
||||
// AcroForms.
|
||||
annotationDict.delete("Parent");
|
||||
fieldToParent.put(annotationRef, parentRef);
|
||||
}
|
||||
|
||||
@ -1246,13 +1222,6 @@ class PDFEditor {
|
||||
return;
|
||||
}
|
||||
const action = annotationDict.get("A");
|
||||
if (action instanceof Dict && !isName(action.get("S"), "GoTo")) {
|
||||
// Only GoTo actions point to pages in the current document. Other
|
||||
// actions, such as GoToR, must not be filtered using the current
|
||||
// document's page map.
|
||||
newAnnotations[newAnnotationIndex] = annotationRef;
|
||||
return;
|
||||
}
|
||||
const dest =
|
||||
action instanceof Dict
|
||||
? action.get("D")
|
||||
@ -1264,9 +1233,9 @@ class PDFEditor {
|
||||
) {
|
||||
// Keep the annotation as is: it isn't linking to a deleted page.
|
||||
newAnnotations[newAnnotationIndex] = annotationRef;
|
||||
} else if (dest instanceof Name || typeof dest === "string") {
|
||||
} else if (typeof dest === "string") {
|
||||
const destString = stringToPDFString(
|
||||
dest instanceof Name ? dest.name : dest,
|
||||
dest,
|
||||
/* keepEscapeSequence = */ true
|
||||
);
|
||||
if (destinations.has(destString)) {
|
||||
@ -1547,24 +1516,17 @@ class PDFEditor {
|
||||
}
|
||||
|
||||
// Get the kids.
|
||||
const rawKids = structTreeRoot.dict.getRaw("K");
|
||||
if (!rawKids) {
|
||||
let kids = structTreeRoot.dict.get("K");
|
||||
if (!kids) {
|
||||
continue;
|
||||
}
|
||||
const kids = await this.#resolveStructKids(rawKids, xref);
|
||||
kids = Array.isArray(kids) ? kids : [kids];
|
||||
for (let kid of kids) {
|
||||
const kidRef = kid instanceof Ref ? kid : null;
|
||||
kid = await xref.fetchIfRefAsync(kid);
|
||||
if (!(kid instanceof Dict)) {
|
||||
if (kidRef && removedStructElements.has(kidRef)) {
|
||||
continue;
|
||||
}
|
||||
let setAsSpan = false;
|
||||
if (kidRef && removedStructElements.has(kidRef)) {
|
||||
if (!isName(kid.get("S"), "Link")) {
|
||||
continue;
|
||||
}
|
||||
setAsSpan = true;
|
||||
}
|
||||
kid = await xref.fetchIfRefAsync(kid);
|
||||
const newKidRef = await this.#cloneStructTreeNode(
|
||||
kidRef,
|
||||
kid,
|
||||
@ -1576,12 +1538,6 @@ class PDFEditor {
|
||||
);
|
||||
if (newKidRef) {
|
||||
structTreeKids.push(newKidRef);
|
||||
if (kidRef) {
|
||||
oldRefMapping.put(kidRef, newKidRef);
|
||||
}
|
||||
if (setAsSpan) {
|
||||
this.xref[newKidRef.num].setIfName("S", "Span");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1639,7 +1595,7 @@ class PDFEditor {
|
||||
}
|
||||
const { destinations, pagesMap } = documentData;
|
||||
const newDestinations = (documentData.destinations = new Map());
|
||||
for (const [key, dest] of destinations) {
|
||||
for (const [key, dest] of Object.entries(destinations)) {
|
||||
const pageRef = dest[0];
|
||||
const pageData = pageRef instanceof Ref && pagesMap.get(pageRef);
|
||||
if (!pageData) {
|
||||
@ -2133,14 +2089,14 @@ class PDFEditor {
|
||||
* If the document has some fields but no Fields entry in the AcroForm, we
|
||||
* need to fix that by creating a Fields entry with the oldest parent field
|
||||
* for each field.
|
||||
* @param {RefSetCache} fieldToParent
|
||||
* @param {Map<Ref, Ref>} fieldToParent
|
||||
* @param {XRef} xref
|
||||
* @returns {Array<Ref>}
|
||||
*/
|
||||
#fixFields(fieldToParent, xref) {
|
||||
const newFields = [];
|
||||
const processed = new RefSet();
|
||||
for (const [fieldRef, parentRef] of fieldToParent.items()) {
|
||||
for (const [fieldRef, parentRef] of fieldToParent) {
|
||||
if (!parentRef) {
|
||||
newFields.push(fieldRef);
|
||||
continue;
|
||||
@ -2254,7 +2210,11 @@ class PDFEditor {
|
||||
if (data.parentRef) {
|
||||
newKid.set("Parent", data.parentRef);
|
||||
}
|
||||
if (acroFormDefaultAppearance && !newKid.has("DA")) {
|
||||
if (
|
||||
acroFormDefaultAppearance &&
|
||||
isName(newKid.get("FT"), "Tx") &&
|
||||
!newKid.has("DA")
|
||||
) {
|
||||
// Fix the DA later since we need to have all the fields tree.
|
||||
daToFix.push(newKid);
|
||||
}
|
||||
@ -2272,10 +2232,6 @@ class PDFEditor {
|
||||
}
|
||||
|
||||
for (const field of daToFix) {
|
||||
const fieldType = getInheritableProperty({ dict: field, key: "FT" });
|
||||
if (!isName(fieldType, "Tx")) {
|
||||
continue;
|
||||
}
|
||||
const da = getInheritableProperty({ dict: field, key: "DA" });
|
||||
if (!da) {
|
||||
// No DA in a parent field, we can set the default one.
|
||||
@ -2283,51 +2239,47 @@ class PDFEditor {
|
||||
}
|
||||
}
|
||||
const resourcesValuesCache = new Map();
|
||||
const fixAppearanceResources = async stream => {
|
||||
let resources = stream.dict.getRaw("Resources");
|
||||
resources &&= this.xrefWrapper.fetchIfRef(resources);
|
||||
if (!(resources instanceof Dict)) {
|
||||
const newResourcesRef = await resourcesValuesCache.getOrInsertComputed(
|
||||
acroFormDefaultResources,
|
||||
() => this.#cloneObject(acroFormDefaultResources, xref)
|
||||
);
|
||||
stream.dict.set("Resources", newResourcesRef);
|
||||
return;
|
||||
}
|
||||
for (const [
|
||||
resKey,
|
||||
resValue,
|
||||
] of acroFormDefaultResources.getRawEntries()) {
|
||||
if (resources.has(resKey)) {
|
||||
continue;
|
||||
}
|
||||
let newResValue = resValue;
|
||||
if (resValue instanceof Ref) {
|
||||
newResValue = await this.#collectDependencies(resValue, true, xref);
|
||||
} else if (
|
||||
resValue instanceof Dict ||
|
||||
resValue instanceof BaseStream ||
|
||||
Array.isArray(resValue)
|
||||
) {
|
||||
newResValue = await resourcesValuesCache.getOrInsertComputed(
|
||||
resValue,
|
||||
() => this.#cloneObject(resValue, xref)
|
||||
);
|
||||
}
|
||||
resources.set(resKey, newResValue);
|
||||
}
|
||||
};
|
||||
|
||||
for (const field of drToFix) {
|
||||
const ap = field.get("AP");
|
||||
for (const [, value] of ap) {
|
||||
if (value instanceof BaseStream) {
|
||||
await fixAppearanceResources(value);
|
||||
} else if (value instanceof Dict) {
|
||||
for (const [, stream] of value) {
|
||||
if (stream instanceof BaseStream) {
|
||||
await fixAppearanceResources(stream);
|
||||
if (!(value instanceof BaseStream)) {
|
||||
continue;
|
||||
}
|
||||
let resources = value.dict.getRaw("Resources");
|
||||
if (!resources) {
|
||||
const newResourcesRef =
|
||||
await resourcesValuesCache.getOrInsertComputed(
|
||||
acroFormDefaultResources,
|
||||
() => this.#cloneObject(acroFormDefaultResources, xref)
|
||||
);
|
||||
value.dict.set("Resources", newResourcesRef);
|
||||
continue;
|
||||
}
|
||||
|
||||
resources = xref.fetchIfRef(resources);
|
||||
for (const [
|
||||
resKey,
|
||||
resValue,
|
||||
] of acroFormDefaultResources.getRawEntries()) {
|
||||
if (!resources.has(resKey)) {
|
||||
let newResValue = resValue;
|
||||
if (resValue instanceof Ref) {
|
||||
newResValue = await this.#collectDependencies(
|
||||
resValue,
|
||||
true,
|
||||
xref
|
||||
);
|
||||
} else if (
|
||||
resValue instanceof Dict ||
|
||||
resValue instanceof BaseStream ||
|
||||
Array.isArray(resValue)
|
||||
) {
|
||||
newResValue = await resourcesValuesCache.getOrInsertComputed(
|
||||
resValue,
|
||||
() => this.#cloneObject(resValue, xref)
|
||||
);
|
||||
}
|
||||
resources.set(resKey, newResValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2693,15 +2645,7 @@ class PDFEditor {
|
||||
#makeNameNumTree(map, areNames) {
|
||||
const allEntries = map.sort(
|
||||
areNames
|
||||
? ([keyA], [keyB]) => {
|
||||
if (keyA < keyB) {
|
||||
return -1;
|
||||
}
|
||||
if (keyA > keyB) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
? ([keyA], [keyB]) => keyA.localeCompare(keyB)
|
||||
: ([keyA], [keyB]) => keyA - keyB
|
||||
);
|
||||
const maxLeaves =
|
||||
@ -2778,7 +2722,7 @@ class PDFEditor {
|
||||
/* keepEscapeSequence = */ true
|
||||
);
|
||||
for (let i = 1; ; i++) {
|
||||
const deduped = stringToAsciiOrUTF16BE(`${displayName}_${i}`);
|
||||
const deduped = `${displayName}_${i}`;
|
||||
if (!embeddedFiles.has(deduped)) {
|
||||
name = deduped;
|
||||
break;
|
||||
@ -2824,10 +2768,7 @@ class PDFEditor {
|
||||
this.namesDict.set(
|
||||
"Dests",
|
||||
this.#makeNameNumTree(
|
||||
Array.from(namedDestinations, ([name, dest]) => [
|
||||
stringToAsciiOrUTF16BE(name),
|
||||
dest,
|
||||
]),
|
||||
Array.from(namedDestinations.entries()),
|
||||
/* areNames = */ true
|
||||
)
|
||||
);
|
||||
@ -2914,7 +2855,7 @@ class PDFEditor {
|
||||
acroForm.set("SigFlags", this.acroFormSigFlags);
|
||||
}
|
||||
acroForm.setIfArray("CO", this.acroFormCalculationOrder);
|
||||
acroForm.setIfDefined("DR", this.acroFormDefaultResources);
|
||||
acroForm.setIfDict("DR", this.acroFormDefaultResources);
|
||||
if (this.acroFormDefaultAppearance) {
|
||||
acroForm.set("DA", this.acroFormDefaultAppearance);
|
||||
}
|
||||
|
||||
@ -200,7 +200,8 @@ async function createImage(bitmap, xref, { closeBitmap = false } = {}) {
|
||||
const colorCounter = new Set();
|
||||
let hasAlpha = false;
|
||||
let useFlate = true;
|
||||
for (const v of buf32) {
|
||||
for (let i = 0, ii = buf32.length; i < ii; i++) {
|
||||
const v = buf32[i];
|
||||
if ((isLE ? v >>> 24 : v & 0xff) !== 0xff) {
|
||||
hasAlpha = true;
|
||||
break;
|
||||
|
||||
@ -33,6 +33,10 @@ import {
|
||||
import { CheckedOperatorList, OperatorList } from "./operator_list.js";
|
||||
import { CMapFactory, IdentityCMap } from "./cmap.js";
|
||||
import { Cmd, Dict, EOF, isName, Name, Ref, RefSet } from "./primitives.js";
|
||||
import {
|
||||
compileFontPathInfo,
|
||||
compilePatternInfo,
|
||||
} from "./obj_bin_transform_core.js";
|
||||
import {
|
||||
compileType3Glyph,
|
||||
FontFlags,
|
||||
@ -79,7 +83,6 @@ import { BaseStream } from "./base_stream.js";
|
||||
import { bidi } from "./bidi.js";
|
||||
import { ColorSpace } from "./colorspace.js";
|
||||
import { ColorSpaceUtils } from "./colorspace_utils.js";
|
||||
import { compilePatternInfo } from "./obj_bin_transform_core.js";
|
||||
import { getFontSubstitution } from "./font_substitutions.js";
|
||||
import { getGlyphsUnicode } from "./glyphlist.js";
|
||||
import { getMetrics } from "./metrics.js";
|
||||
@ -140,45 +143,52 @@ function normalizeBlendMode(value, parsingArray = false) {
|
||||
return "source-over";
|
||||
}
|
||||
|
||||
if (value instanceof Name) {
|
||||
switch (value.name) {
|
||||
case "Normal":
|
||||
case "Compatible":
|
||||
return "source-over";
|
||||
case "Multiply":
|
||||
return "multiply";
|
||||
case "Screen":
|
||||
return "screen";
|
||||
case "Overlay":
|
||||
return "overlay";
|
||||
case "Darken":
|
||||
return "darken";
|
||||
case "Lighten":
|
||||
return "lighten";
|
||||
case "ColorDodge":
|
||||
return "color-dodge";
|
||||
case "ColorBurn":
|
||||
return "color-burn";
|
||||
case "HardLight":
|
||||
return "hard-light";
|
||||
case "SoftLight":
|
||||
return "soft-light";
|
||||
case "Difference":
|
||||
return "difference";
|
||||
case "Exclusion":
|
||||
return "exclusion";
|
||||
case "Hue":
|
||||
return "hue";
|
||||
case "Saturation":
|
||||
return "saturation";
|
||||
case "Color":
|
||||
return "color";
|
||||
case "Luminosity":
|
||||
return "luminosity";
|
||||
if (!(value instanceof Name)) {
|
||||
if (parsingArray) {
|
||||
return null;
|
||||
}
|
||||
warn(`Unsupported blend mode: ${value.name}`);
|
||||
return "source-over";
|
||||
}
|
||||
return parsingArray ? null : "source-over";
|
||||
switch (value.name) {
|
||||
case "Normal":
|
||||
case "Compatible":
|
||||
return "source-over";
|
||||
case "Multiply":
|
||||
return "multiply";
|
||||
case "Screen":
|
||||
return "screen";
|
||||
case "Overlay":
|
||||
return "overlay";
|
||||
case "Darken":
|
||||
return "darken";
|
||||
case "Lighten":
|
||||
return "lighten";
|
||||
case "ColorDodge":
|
||||
return "color-dodge";
|
||||
case "ColorBurn":
|
||||
return "color-burn";
|
||||
case "HardLight":
|
||||
return "hard-light";
|
||||
case "SoftLight":
|
||||
return "soft-light";
|
||||
case "Difference":
|
||||
return "difference";
|
||||
case "Exclusion":
|
||||
return "exclusion";
|
||||
case "Hue":
|
||||
return "hue";
|
||||
case "Saturation":
|
||||
return "saturation";
|
||||
case "Color":
|
||||
return "color";
|
||||
case "Luminosity":
|
||||
return "luminosity";
|
||||
}
|
||||
if (parsingArray) {
|
||||
return null;
|
||||
}
|
||||
warn(`Unsupported blend mode: ${value.name}`);
|
||||
return "source-over";
|
||||
}
|
||||
|
||||
function addCachedImageOps(
|
||||
@ -1981,64 +1991,40 @@ class PartialEvaluator {
|
||||
return;
|
||||
}
|
||||
case OPS.setFillColor:
|
||||
if (!isNumberArray(args, null)) {
|
||||
continue;
|
||||
}
|
||||
cs = stateManager.state.fillColorSpace;
|
||||
args = [cs.getRgbHex(args, 0)];
|
||||
fn = OPS.setFillRGBColor;
|
||||
break;
|
||||
case OPS.setStrokeColor:
|
||||
if (!isNumberArray(args, null)) {
|
||||
continue;
|
||||
}
|
||||
cs = stateManager.state.strokeColorSpace;
|
||||
args = [cs.getRgbHex(args, 0)];
|
||||
fn = OPS.setStrokeRGBColor;
|
||||
break;
|
||||
case OPS.setFillGray:
|
||||
if (!isNumberArray(args, null)) {
|
||||
continue;
|
||||
}
|
||||
stateManager.state.fillColorSpace = ColorSpaceUtils.gray;
|
||||
args = [ColorSpaceUtils.gray.getRgbHex(args, 0)];
|
||||
fn = OPS.setFillRGBColor;
|
||||
break;
|
||||
case OPS.setStrokeGray:
|
||||
if (!isNumberArray(args, null)) {
|
||||
continue;
|
||||
}
|
||||
stateManager.state.strokeColorSpace = ColorSpaceUtils.gray;
|
||||
args = [ColorSpaceUtils.gray.getRgbHex(args, 0)];
|
||||
fn = OPS.setStrokeRGBColor;
|
||||
break;
|
||||
case OPS.setFillCMYKColor:
|
||||
if (!isNumberArray(args, null)) {
|
||||
continue;
|
||||
}
|
||||
stateManager.state.fillColorSpace = ColorSpaceUtils.cmyk;
|
||||
args = [ColorSpaceUtils.cmyk.getRgbHex(args, 0)];
|
||||
fn = OPS.setFillRGBColor;
|
||||
break;
|
||||
case OPS.setStrokeCMYKColor:
|
||||
if (!isNumberArray(args, null)) {
|
||||
continue;
|
||||
}
|
||||
stateManager.state.strokeColorSpace = ColorSpaceUtils.cmyk;
|
||||
args = [ColorSpaceUtils.cmyk.getRgbHex(args, 0)];
|
||||
fn = OPS.setStrokeRGBColor;
|
||||
break;
|
||||
case OPS.setFillRGBColor:
|
||||
if (!isNumberArray(args, null)) {
|
||||
continue;
|
||||
}
|
||||
stateManager.state.fillColorSpace = ColorSpaceUtils.rgb;
|
||||
args = [ColorSpaceUtils.rgb.getRgbHex(args, 0)];
|
||||
break;
|
||||
case OPS.setStrokeRGBColor:
|
||||
if (!isNumberArray(args, null)) {
|
||||
continue;
|
||||
}
|
||||
stateManager.state.strokeColorSpace = ColorSpaceUtils.rgb;
|
||||
args = [ColorSpaceUtils.rgb.getRgbHex(args, 0)];
|
||||
break;
|
||||
@ -2055,9 +2041,6 @@ class PartialEvaluator {
|
||||
break;
|
||||
}
|
||||
if (cs.name === "Pattern") {
|
||||
if (!Array.isArray(args)) {
|
||||
continue;
|
||||
}
|
||||
next(
|
||||
self.handleColorN(
|
||||
operatorList,
|
||||
@ -2075,9 +2058,6 @@ class PartialEvaluator {
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (!isNumberArray(args, null)) {
|
||||
continue;
|
||||
}
|
||||
args = [cs.getRgbHex(args, 0)];
|
||||
fn = OPS.setFillRGBColor;
|
||||
break;
|
||||
@ -2094,9 +2074,6 @@ class PartialEvaluator {
|
||||
break;
|
||||
}
|
||||
if (cs.name === "Pattern") {
|
||||
if (!Array.isArray(args)) {
|
||||
continue;
|
||||
}
|
||||
next(
|
||||
self.handleColorN(
|
||||
operatorList,
|
||||
@ -2114,9 +2091,6 @@ class PartialEvaluator {
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (!isNumberArray(args, null)) {
|
||||
continue;
|
||||
}
|
||||
args = [cs.getRgbHex(args, 0)];
|
||||
fn = OPS.setStrokeRGBColor;
|
||||
break;
|
||||
@ -3299,7 +3273,9 @@ class PartialEvaluator {
|
||||
|
||||
const spaceFactor =
|
||||
((textState.font.vertical ? 1 : -1) * textState.fontSize) / 1000;
|
||||
for (const item of args[0]) {
|
||||
const elements = args[0];
|
||||
for (let i = 0, ii = elements.length; i < ii; i++) {
|
||||
const item = elements[i];
|
||||
if (typeof item === "string") {
|
||||
showSpacedTextBuffer.push(item);
|
||||
} else if (typeof item === "number" && item !== 0) {
|
||||
@ -4799,10 +4775,10 @@ class PartialEvaluator {
|
||||
function buildPath(fontChar) {
|
||||
const glyphName = `${font.loadedName}_path_${fontChar}`;
|
||||
try {
|
||||
const buffer = font.renderer.getPath(fontChar);
|
||||
if (!buffer) {
|
||||
return; // Previously compiled, and sent to the main-thread.
|
||||
if (font.renderer.hasBuiltPath(fontChar)) {
|
||||
return;
|
||||
}
|
||||
const buffer = compileFontPathInfo(font.renderer.getPathJs(fontChar));
|
||||
handler.send("commonobj", [glyphName, "FontPath", buffer], [buffer]);
|
||||
} catch (reason) {
|
||||
if (evaluatorOptions.ignoreErrors) {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user