mirror of
https://github.com/mozilla/pdf.js.git
synced 2026-08-04 21:37:23 +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)
|
# 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
|
*.js text eol=lf
|
||||||
*.json text eol=lf
|
*.jsm text eol=lf
|
||||||
*.link text eol=lf
|
*.css text eol=lf
|
||||||
|
*.html text eol=lf
|
||||||
*.md text eol=lf
|
*.md text eol=lf
|
||||||
*.mjs text eol=lf
|
*.ftl 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
|
|
||||||
*.yml 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 files shall not modify CRLF line endings
|
||||||
*.pdf -crlf
|
*.pdf -crlf
|
||||||
|
|
||||||
# Linguist language overrides
|
# Linguist language overrides
|
||||||
*.js linguist-language=JavaScript
|
*.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:
|
moz-fluent-linter==0.4.*
|
||||||
# `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
|
|
||||||
|
|||||||
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:
|
fonttools==4.*
|
||||||
# `python3 -m venv venv; source venv/bin/activate; pip install -q fonttools; pip freeze; deactivate; rm -rf venv`
|
|
||||||
fonttools==4.63.0
|
|
||||||
|
|||||||
8
.github/workflows/ci.yml
vendored
8
.github/workflows/ci.yml
vendored
@ -16,13 +16,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -31,7 +31,7 @@ jobs:
|
|||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Restore cached PDF files
|
- name: Restore cached PDF files
|
||||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||||
with:
|
with:
|
||||||
path: test/pdfs/*.pdf
|
path: test/pdfs/*.pdf
|
||||||
key: cached-pdf-files-${{ hashFiles('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
|
run: npx gulp unittestcli --coverage --coverage-output build/coverage/unitcli
|
||||||
|
|
||||||
- name: Save cached PDF files
|
- name: Save cached PDF files
|
||||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||||
with:
|
with:
|
||||||
path: test/pdfs/*.pdf
|
path: test/pdfs/*.pdf
|
||||||
key: cached-pdf-files-${{ hashFiles('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:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
|
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
queries: security-and-quality
|
queries: security-and-quality
|
||||||
|
|
||||||
- name: Autobuild CodeQL
|
- name: Autobuild CodeQL
|
||||||
uses: github/codeql-action/autobuild@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
|
uses: github/codeql-action/autobuild@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
|
||||||
|
|
||||||
- name: Perform CodeQL analysis
|
- name: Perform CodeQL analysis
|
||||||
uses: github/codeql-action/analyze@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
|
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:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/**'
|
- 'external/**'
|
||||||
- 'package-lock.json'
|
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/images/**'
|
- 'test/images/**'
|
||||||
- 'test/pdfs/**'
|
- 'test/pdfs/**'
|
||||||
@ -22,7 +21,6 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/**'
|
- 'external/**'
|
||||||
- 'package-lock.json'
|
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/images/**'
|
- 'test/images/**'
|
||||||
- 'test/pdfs/**'
|
- 'test/pdfs/**'
|
||||||
@ -55,13 +53,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -70,7 +68,7 @@ jobs:
|
|||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Restore cached PDF files
|
- name: Restore cached PDF files
|
||||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||||
with:
|
with:
|
||||||
path: test/pdfs/*.pdf
|
path: test/pdfs/*.pdf
|
||||||
key: cached-pdf-files-${{ hashFiles('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
|
run: npx gulp botbrowsertest --headless -j$(nproc) --coverage --coverage-output build/coverage/browser --noChrome
|
||||||
|
|
||||||
- name: Save cached PDF files
|
- name: Save cached PDF files
|
||||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||||
with:
|
with:
|
||||||
path: test/pdfs/*.pdf
|
path: test/pdfs/*.pdf
|
||||||
key: cached-pdf-files-${{ hashFiles('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:
|
paths:
|
||||||
- 'l10n/en-US/**.ftl'
|
- 'l10n/en-US/**.ftl'
|
||||||
- '.github/fluent_linter_config.yml'
|
- '.github/fluent_linter_config.yml'
|
||||||
- '.github/fluent_linter_requirements.txt'
|
|
||||||
- '.github/workflows/fluent_linter.yml'
|
- '.github/workflows/fluent_linter.yml'
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
@ -12,7 +11,6 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'l10n/en-US/**.ftl'
|
- 'l10n/en-US/**.ftl'
|
||||||
- '.github/fluent_linter_config.yml'
|
- '.github/fluent_linter_config.yml'
|
||||||
- '.github/fluent_linter_requirements.txt'
|
|
||||||
- '.github/workflows/fluent_linter.yml'
|
- '.github/workflows/fluent_linter.yml'
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
@ -27,12 +25,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Python 3.14
|
- name: Use Python 3.14
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
with:
|
with:
|
||||||
python-version: '3.14'
|
python-version: '3.14'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
|||||||
10
.github/workflows/font_tests.yml
vendored
10
.github/workflows/font_tests.yml
vendored
@ -4,11 +4,9 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/**'
|
- 'external/**'
|
||||||
- 'package-lock.json'
|
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/test.mjs'
|
- 'test/test.mjs'
|
||||||
- 'test/font/**'
|
- 'test/font/**'
|
||||||
- '.github/font_tests_requirements.txt'
|
|
||||||
- '.github/workflows/font_tests.yml'
|
- '.github/workflows/font_tests.yml'
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
@ -16,11 +14,9 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/**'
|
- 'external/**'
|
||||||
- 'package-lock.json'
|
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/test.mjs'
|
- 'test/test.mjs'
|
||||||
- 'test/font/**'
|
- 'test/font/**'
|
||||||
- '.github/font_tests_requirements.txt'
|
|
||||||
- '.github/workflows/font_tests.yml'
|
- '.github/workflows/font_tests.yml'
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
@ -49,13 +45,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -64,7 +60,7 @@ jobs:
|
|||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Use Python 3.14
|
- name: Use Python 3.14
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.0.2
|
||||||
with:
|
with:
|
||||||
python-version: '3.14'
|
python-version: '3.14'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
|||||||
10
.github/workflows/integration_tests.yml
vendored
10
.github/workflows/integration_tests.yml
vendored
@ -4,7 +4,6 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/**'
|
- 'external/**'
|
||||||
- 'package-lock.json'
|
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/test.mjs'
|
- 'test/test.mjs'
|
||||||
- 'test/integration/**'
|
- 'test/integration/**'
|
||||||
@ -16,7 +15,6 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/**'
|
- 'external/**'
|
||||||
- 'package-lock.json'
|
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/test.mjs'
|
- 'test/test.mjs'
|
||||||
- 'test/integration/**'
|
- 'test/integration/**'
|
||||||
@ -49,13 +47,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -64,7 +62,7 @@ jobs:
|
|||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Restore cached PDF files
|
- name: Restore cached PDF files
|
||||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||||
with:
|
with:
|
||||||
path: test/pdfs/*.pdf
|
path: test/pdfs/*.pdf
|
||||||
key: cached-pdf-files-${{ hashFiles('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 }}
|
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
|
- name: Save cached PDF files
|
||||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||||
with:
|
with:
|
||||||
path: test/pdfs/*.pdf
|
path: test/pdfs/*.pdf
|
||||||
key: cached-pdf-files-${{ hashFiles('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:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
|
|||||||
2
.github/workflows/notify-pdf-sync.yml
vendored
2
.github/workflows/notify-pdf-sync.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|||||||
4
.github/workflows/prefs_tests.yml
vendored
4
.github/workflows/prefs_tests.yml
vendored
@ -15,13 +15,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
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:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
|
|||||||
10
.github/workflows/publish_website.yml
vendored
10
.github/workflows/publish_website.yml
vendored
@ -6,12 +6,6 @@ on:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
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:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build
|
name: Build
|
||||||
@ -23,13 +17,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
|
|||||||
4
.github/workflows/types_tests.yml
vendored
4
.github/workflows/types_tests.yml
vendored
@ -15,13 +15,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
|
|||||||
10
.github/workflows/unit_tests.yml
vendored
10
.github/workflows/unit_tests.yml
vendored
@ -4,7 +4,6 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/**'
|
- 'external/**'
|
||||||
- 'package-lock.json'
|
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/test.mjs'
|
- 'test/test.mjs'
|
||||||
- 'test/unit/**'
|
- 'test/unit/**'
|
||||||
@ -16,7 +15,6 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/**'
|
- 'external/**'
|
||||||
- 'package-lock.json'
|
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/test.mjs'
|
- 'test/test.mjs'
|
||||||
- 'test/unit/**'
|
- 'test/unit/**'
|
||||||
@ -49,13 +47,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -64,7 +62,7 @@ jobs:
|
|||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Restore cached PDF files
|
- name: Restore cached PDF files
|
||||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||||
with:
|
with:
|
||||||
path: test/pdfs/*.pdf
|
path: test/pdfs/*.pdf
|
||||||
key: cached-pdf-files-${{ hashFiles('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 }}
|
run: npx gulp unittest --headless --coverage --coverage-output build/coverage/unit ${{ matrix.skip }}
|
||||||
|
|
||||||
- name: Save cached PDF files
|
- name: Save cached PDF files
|
||||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||||
with:
|
with:
|
||||||
path: test/pdfs/*.pdf
|
path: test/pdfs/*.pdf
|
||||||
key: cached-pdf-files-${{ hashFiles('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 }}
|
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
token: ${{ steps.app-token.outputs.token }}
|
token: ${{ steps.app-token.outputs.token }}
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Node.js LTS
|
- name: Use Node.js LTS
|
||||||
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: lts/*
|
node-version: lts/*
|
||||||
cache: 'npm'
|
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
|
+ 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
|
### Browser Extensions
|
||||||
|
|
||||||
#### Firefox
|
#### Firefox
|
||||||
@ -139,30 +136,13 @@ browsable HTML report instead, or pass several formats at once, e.g.
|
|||||||
|
|
||||||
### Finding which tests cover a given line
|
### Finding which tests cover a given line
|
||||||
|
|
||||||
`coverage_search` lists the ref tests that exercised a specific source line or
|
Run a browser test task with `--coverage-per-test` to build an index
|
||||||
function. It uses the per-test index (`per-test-index.json`) that is rebuilt on
|
(`per-test-index.json`) in the coverage directory, then query it to list the
|
||||||
every push to `master` and published to the
|
tests that exercised a specific source line or function:
|
||||||
[`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):
|
|
||||||
|
|
||||||
$ npx gulp botbrowsertest --coverage-per-test
|
$ npx gulp botbrowsertest --coverage-per-test
|
||||||
$ npx gulp coverage_search --code="canvas.js::205" \
|
$ npx gulp coverage_search --code="canvas.js::205"
|
||||||
--index=build/coverage/per-test-index.json --no-download
|
$ npx gulp coverage_search --code="canvas.js::drawImageAtIntegerCoords"
|
||||||
|
|
||||||
### Continuous integration
|
### Continuous integration
|
||||||
|
|
||||||
|
|||||||
@ -62,13 +62,6 @@ export default [
|
|||||||
rules: {
|
rules: {
|
||||||
...regexpPlugin.configs["flat/recommended"].rules,
|
...regexpPlugin.configs["flat/recommended"].rules,
|
||||||
"regexp/no-legacy-features": "off",
|
"regexp/no-legacy-features": "off",
|
||||||
"regexp/no-octal": "error",
|
|
||||||
"regexp/no-potentially-useless-backreference": "error",
|
|
||||||
"regexp/no-standalone-backslash": "error",
|
|
||||||
"regexp/no-super-linear-move": "error",
|
|
||||||
"regexp/optimal-lookaround-quantifier": "error",
|
|
||||||
"regexp/prefer-escape-replacement-dollar-char": "error",
|
|
||||||
"regexp/prefer-regexp-exec": "error",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -185,11 +178,6 @@ export default [
|
|||||||
"unicorn/prefer-dom-node-remove": "error",
|
"unicorn/prefer-dom-node-remove": "error",
|
||||||
"unicorn/prefer-import-meta-properties": "error",
|
"unicorn/prefer-import-meta-properties": "error",
|
||||||
"unicorn/prefer-includes": "error",
|
"unicorn/prefer-includes": "error",
|
||||||
"unicorn/logical-assignment-operators": [
|
|
||||||
"error",
|
|
||||||
"always",
|
|
||||||
{ enforceForIfStatements: true },
|
|
||||||
],
|
|
||||||
"unicorn/prefer-logical-operator-over-ternary": "error",
|
"unicorn/prefer-logical-operator-over-ternary": "error",
|
||||||
"unicorn/prefer-modern-dom-apis": "error",
|
"unicorn/prefer-modern-dom-apis": "error",
|
||||||
"unicorn/prefer-modern-math-apis": "error",
|
"unicorn/prefer-modern-math-apis": "error",
|
||||||
|
|||||||
@ -48,7 +48,7 @@ const jpegData = jpegImage.getData({
|
|||||||
//
|
//
|
||||||
const imageData = jpegCtx.createImageData(width, height);
|
const imageData = jpegCtx.createImageData(width, height);
|
||||||
const imageBytes = imageData.data;
|
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++];
|
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);
|
document.getElementById("settings-boxes").append(wrapper);
|
||||||
|
|
||||||
function renderPreference(value) {
|
function renderPreference(value) {
|
||||||
value ||= "auto";
|
value = value || "auto";
|
||||||
select.value = value;
|
select.value = value;
|
||||||
var customOption = select.querySelector("option.custom-zoom");
|
var customOption = select.querySelector("option.custom-zoom");
|
||||||
if (select.selectedIndex === -1 && value) {
|
if (select.selectedIndex === -1 && value) {
|
||||||
|
|||||||
@ -150,7 +150,7 @@ limitations under the License.
|
|||||||
*/
|
*/
|
||||||
function didUpdateSinceLastCheck() {
|
function didUpdateSinceLastCheck() {
|
||||||
var chromeVersion = /Chrome\/(\d+)\./.exec(navigator.userAgent);
|
var chromeVersion = /Chrome\/(\d+)\./.exec(navigator.userAgent);
|
||||||
chromeVersion &&= chromeVersion[1];
|
chromeVersion = chromeVersion && chromeVersion[1];
|
||||||
if (!chromeVersion || localStorage.telemetryLastVersion === chromeVersion) {
|
if (!chromeVersion || localStorage.telemetryLastVersion === chromeVersion) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -319,16 +319,6 @@ function babelPluginStripSrcPath() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function babelPluginAddHeaderComment(babel, { header }) {
|
|
||||||
return {
|
|
||||||
visitor: {
|
|
||||||
Program(path) {
|
|
||||||
path.addComment("leading", header);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function preprocessPDFJSCode(ctx, content) {
|
function preprocessPDFJSCode(ctx, content) {
|
||||||
return transformSync(content, {
|
return transformSync(content, {
|
||||||
configFile: false,
|
configFile: false,
|
||||||
@ -337,7 +327,6 @@ function preprocessPDFJSCode(ctx, content) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
babelPluginAddHeaderComment,
|
|
||||||
babelPluginPDFJSPreprocessor,
|
babelPluginPDFJSPreprocessor,
|
||||||
babelPluginStripSrcPath,
|
babelPluginStripSrcPath,
|
||||||
preprocessPDFJSCode,
|
preprocessPDFJSCode,
|
||||||
|
|||||||
25
external/builder/builder.mjs
vendored
25
external/builder/builder.mjs
vendored
@ -53,7 +53,7 @@ function preprocess(inFilename, outFilename, defines) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return content.replaceAll(
|
return content.replaceAll(
|
||||||
/^[ \t]*@import\s+url\(([^)]+)\);[ \t]*$/gm,
|
/^\s*@import\s+url\(([^)]+)\);\s*$/gm,
|
||||||
function (all, url) {
|
function (all, url) {
|
||||||
const file = path.join(path.dirname(baseUrl), url);
|
const file = path.join(path.dirname(baseUrl), url);
|
||||||
const imported = fs.readFileSync(file, "utf8").toString();
|
const imported = fs.readFileSync(file, "utf8").toString();
|
||||||
@ -73,7 +73,10 @@ function preprocess(inFilename, outFilename, defines) {
|
|||||||
const out = [];
|
const out = [];
|
||||||
let i = 0;
|
let i = 0;
|
||||||
function readLine() {
|
function readLine() {
|
||||||
return i < totalLines ? lines[i++] : null;
|
if (i < totalLines) {
|
||||||
|
return lines[i++];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
const writeLine =
|
const writeLine =
|
||||||
typeof outFilename === "function"
|
typeof outFilename === "function"
|
||||||
@ -110,9 +113,16 @@ function preprocess(inFilename, outFilename, defines) {
|
|||||||
const realPath = fs.realpathSync(inFilename);
|
const realPath = fs.realpathSync(inFilename);
|
||||||
const dir = path.dirname(realPath);
|
const dir = path.dirname(realPath);
|
||||||
try {
|
try {
|
||||||
const fullpath = file.startsWith("$ROOT/")
|
let fullpath;
|
||||||
? path.join(__dirname, "../..", file.substring("$ROOT/".length))
|
if (file.indexOf("$ROOT/") === 0) {
|
||||||
: path.join(dir, file);
|
fullpath = path.join(
|
||||||
|
__dirname,
|
||||||
|
"../..",
|
||||||
|
file.substring("$ROOT/".length)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
fullpath = path.join(dir, file);
|
||||||
|
}
|
||||||
preprocess(fullpath, writeLine, defines);
|
preprocess(fullpath, writeLine, defines);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e.code === "ENOENT") {
|
if (e.code === "ENOENT") {
|
||||||
@ -124,7 +134,10 @@ function preprocess(inFilename, outFilename, defines) {
|
|||||||
function expand(line) {
|
function expand(line) {
|
||||||
line = line.replaceAll(/__\w+__/g, function (variable) {
|
line = line.replaceAll(/__\w+__/g, function (variable) {
|
||||||
variable = variable.substring(2, variable.length - 2);
|
variable = variable.substring(2, variable.length - 2);
|
||||||
return variable in defines ? defines[variable] : "";
|
if (variable in defines) {
|
||||||
|
return defines[variable];
|
||||||
|
}
|
||||||
|
return "";
|
||||||
});
|
});
|
||||||
writeLine(line);
|
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 __dirname = import.meta.dirname;
|
||||||
const PROJECT_ROOT = path.join(__dirname, "../..");
|
const PROJECT_ROOT = path.join(__dirname, "../..");
|
||||||
|
|
||||||
// The per-test coverage index (which ref test exercises which source
|
const { values } = parseArgs({
|
||||||
// line/function) is rebuilt on every push to master and published to the
|
args: process.argv.slice(2),
|
||||||
// gh-pages branch of the pdf.js.refs repository.
|
options: {
|
||||||
const PER_TEST_INDEX_URL =
|
code: { type: "string" },
|
||||||
"https://raw.githubusercontent.com/mozilla/pdf.js.refs/gh-pages/per-test-index.json";
|
"coverage-dir": { type: "string", default: "build/coverage" },
|
||||||
|
help: { type: "boolean", short: "h", default: false },
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (values.help || !values.code) {
|
if (values.help || !values.code) {
|
||||||
console.log(
|
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" +
|
" --code Source file and line number or function name to search for.\n" +
|
||||||
" Examples:\n" +
|
" Examples:\n" +
|
||||||
" --code=canvas.js::205\n" +
|
" --code=canvas.js::205\n" +
|
||||||
" --code=canvas.js::drawImageAtIntegerCoords\n" +
|
" --code=canvas.js::drawImageAtIntegerCoords\n" +
|
||||||
" --index Where to cache or read the per-test index.\n" +
|
" --coverage-dir Coverage directory containing per-test-index.json [build/coverage]\n\n" +
|
||||||
" [build/per-test-index.json]\n" +
|
|
||||||
" --no-download Don't contact the network; use the cached index as-is.\n\n" +
|
|
||||||
"Prints to stdout the IDs of tests whose coverage includes the given line or\n" +
|
"Prints to stdout the IDs of tests whose coverage includes the given line or\n" +
|
||||||
"function (one ID per line).\n\n" +
|
"function (one ID per line).\n" +
|
||||||
"The index is downloaded from the pdf.js.refs repository and cached locally;\n" +
|
"Run browsertest with --coverage-per-test first to generate the index."
|
||||||
"it is only re-downloaded when the published file has changed.\n" +
|
|
||||||
`Source: ${PER_TEST_INDEX_URL}`
|
|
||||||
);
|
);
|
||||||
process.exit(values.help ? 0 : 1);
|
process.exit(values.help ? 0 : 1);
|
||||||
}
|
}
|
||||||
@ -78,129 +58,18 @@ const isLine = /^\d+$/.test(location);
|
|||||||
const lineNum = isLine ? parseInt(location, 10) : null;
|
const lineNum = isLine ? parseInt(location, 10) : null;
|
||||||
const funcName = isLine ? null : location;
|
const funcName = isLine ? null : location;
|
||||||
|
|
||||||
const indexPath = path.isAbsolute(values.index)
|
const coverageDir = path.isAbsolute(values["coverage-dir"])
|
||||||
? values.index
|
? values["coverage-dir"]
|
||||||
: path.join(PROJECT_ROOT, values.index);
|
: path.join(PROJECT_ROOT, values["coverage-dir"]);
|
||||||
// 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 indexPath = path.join(coverageDir, "per-test-index.json");
|
||||||
if (!fs.existsSync(indexPath)) {
|
if (!fs.existsSync(indexPath)) {
|
||||||
console.error(`Error: per-test index not found: ${indexPath}`);
|
console.error(`Error: index file not found: ${indexPath}`);
|
||||||
console.error(
|
console.error("Run browsertest with --coverage-per-test first.");
|
||||||
"Build it locally (gulp botbrowsertest --coverage-per-test) or omit " +
|
|
||||||
"--no-download to fetch it from the pdf.js.refs repository."
|
|
||||||
);
|
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
let ids, files;
|
const { ids, files } = JSON.parse(fs.readFileSync(indexPath, "utf8"));
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the file entry whose path matches fileName.
|
// Find the file entry whose path matches fileName.
|
||||||
let fileEntry = null;
|
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) {
|
if (buffer > 0) {
|
||||||
s = writeByte((buffer & 0x7f) | (s.length > 0 ? 0x80 : 0)) + s;
|
s = writeByte((buffer & 0x7f) | (s.length > 0 ? 0x80 : 0)) + s;
|
||||||
}
|
}
|
||||||
while (s.startsWith("80")) {
|
while (s.indexOf("80") === 0) {
|
||||||
s = s.substring(2);
|
s = s.substring(2);
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
|
|||||||
2
external/cmapscompress/parse.mjs
vendored
2
external/cmapscompress/parse.mjs
vendored
@ -37,7 +37,7 @@ function parseAdobeCMap(content) {
|
|||||||
result.usecmap = m[1];
|
result.usecmap = m[1];
|
||||||
}
|
}
|
||||||
const re =
|
const re =
|
||||||
/\b(\d+)\s+(begincodespacerange|beginnotdefrange|begincidchar|begincidrange|beginbfchar|beginbfrange)\n([\s\S]*?)\n(?:endcodespacerange|endnotdefrange|endcidchar|endcidrange|endbfchar|endbfrange)/g;
|
/(\d+)\s+(begincodespacerange|beginnotdefrange|begincidchar|begincidrange|beginbfchar|beginbfrange)\n([\s\S]*?)\n(?:endcodespacerange|endnotdefrange|endcidchar|endcidrange|endbfchar|endbfrange)/g;
|
||||||
while ((m = re.exec(body))) {
|
while ((m = re.exec(body))) {
|
||||||
const lines = m[3].toLowerCase().split("\n");
|
const lines = m[3].toLowerCase().split("\n");
|
||||||
|
|
||||||
|
|||||||
45
external/qcms/qcms.js
vendored
45
external/qcms/qcms.js
vendored
@ -1,5 +1,5 @@
|
|||||||
/* THIS FILE IS GENERATED - DO NOT EDIT */
|
/* 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
|
* # Safety
|
||||||
*
|
*
|
||||||
* This function is called directly from JavaScript.
|
* This function is called directly from JavaScript.
|
||||||
* @param {number} transformer
|
* @param {number} transformer
|
||||||
* @param {Uint8Array} src
|
* @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 ptr0 = passArray8ToWasm0(src, wasm.__wbindgen_malloc);
|
||||||
const len0 = WASM_VECTOR_LEN;
|
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} src2
|
||||||
* @param {number} src3
|
* @param {number} src3
|
||||||
* @param {number} src4
|
* @param {number} src4
|
||||||
* @returns {number}
|
* @param {boolean} css
|
||||||
*/
|
*/
|
||||||
export function qcms_convert_four(transformer, src1, src2, src3, src4) {
|
export function qcms_convert_four(transformer, src1, src2, src3, src4, css) {
|
||||||
const ret = wasm.qcms_convert_four(transformer, src1, src2, src3, src4);
|
wasm.qcms_convert_four(transformer, src1, src2, src3, src4, css);
|
||||||
return ret >>> 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -63,11 +58,10 @@ export function qcms_convert_four(transformer, src1, src2, src3, src4) {
|
|||||||
* This function is called directly from JavaScript.
|
* This function is called directly from JavaScript.
|
||||||
* @param {number} transformer
|
* @param {number} transformer
|
||||||
* @param {number} src
|
* @param {number} src
|
||||||
* @returns {number}
|
* @param {boolean} css
|
||||||
*/
|
*/
|
||||||
export function qcms_convert_one(transformer, src) {
|
export function qcms_convert_one(transformer, src, css) {
|
||||||
const ret = wasm.qcms_convert_one(transformer, src);
|
wasm.qcms_convert_one(transformer, src, css);
|
||||||
return ret >>> 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -78,11 +72,10 @@ export function qcms_convert_one(transformer, src) {
|
|||||||
* @param {number} src1
|
* @param {number} src1
|
||||||
* @param {number} src2
|
* @param {number} src2
|
||||||
* @param {number} src3
|
* @param {number} src3
|
||||||
* @returns {number}
|
* @param {boolean} css
|
||||||
*/
|
*/
|
||||||
export function qcms_convert_three(transformer, src1, src2, src3) {
|
export function qcms_convert_three(transformer, src1, src2, src3, css) {
|
||||||
const ret = wasm.qcms_convert_three(transformer, src1, src2, src3);
|
wasm.qcms_convert_three(transformer, src1, src2, src3, css);
|
||||||
return ret >>> 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -113,12 +106,18 @@ export function qcms_transformer_from_memory(mem, in_type, intent) {
|
|||||||
function __wbg_get_imports() {
|
function __wbg_get_imports() {
|
||||||
const import0 = {
|
const import0 = {
|
||||||
__proto__: null,
|
__proto__: null,
|
||||||
__wbg___wbindgen_throw_344f42d3211c4765: function(arg0, arg1) {
|
__wbg___wbindgen_throw_6b64449b9b9ed33c: function(arg0, arg1) {
|
||||||
throw new Error(getStringFromWasm0(arg0, arg1));
|
throw new Error(getStringFromWasm0(arg0, arg1));
|
||||||
},
|
},
|
||||||
__wbg_copy_result_0d15f3bf9d9012ae: function(arg0, arg1) {
|
__wbg_copy_result_0d15f3bf9d9012ae: function(arg0, arg1) {
|
||||||
copy_result(arg0 >>> 0, arg1 >>> 0);
|
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() {
|
__wbindgen_init_externref_table: function() {
|
||||||
const table = wasm.__wbindgen_externrefs;
|
const table = wasm.__wbindgen_externrefs;
|
||||||
const offset = table.grow(4);
|
const offset = table.grow(4);
|
||||||
@ -136,7 +135,8 @@ function __wbg_get_imports() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getStringFromWasm0(ptr, len) {
|
function getStringFromWasm0(ptr, len) {
|
||||||
return decodeText(ptr >>> 0, len);
|
ptr = ptr >>> 0;
|
||||||
|
return decodeText(ptr, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
let cachedUint8ArrayMemory0 = null;
|
let cachedUint8ArrayMemory0 = null;
|
||||||
@ -170,9 +170,8 @@ function decodeText(ptr, len) {
|
|||||||
|
|
||||||
let WASM_VECTOR_LEN = 0;
|
let WASM_VECTOR_LEN = 0;
|
||||||
|
|
||||||
let wasmModule, wasmInstance, wasm;
|
let wasmModule, wasm;
|
||||||
function __wbg_finalize_init(instance, module) {
|
function __wbg_finalize_init(instance, module) {
|
||||||
wasmInstance = instance;
|
|
||||||
wasm = instance.exports;
|
wasm = instance.exports;
|
||||||
wasmModule = module;
|
wasmModule = module;
|
||||||
cachedUint8ArrayMemory0 = null;
|
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.
|
* 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 {
|
class QCMS {
|
||||||
static #memoryArray = null;
|
static #memoryArray = null;
|
||||||
|
|
||||||
static _memory = null;
|
static _memory = null;
|
||||||
|
|
||||||
// Where the next `qcms_convert_array` result should land.
|
static _mustAddAlpha = false;
|
||||||
|
|
||||||
static _destBuffer = null;
|
static _destBuffer = null;
|
||||||
|
|
||||||
static _destOffset = 0;
|
static _destOffset = 0;
|
||||||
|
|
||||||
// Set when the destination is RGBA and its alpha channel already holds
|
static _destLength = 0;
|
||||||
// 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
|
static _cssColor = "";
|
||||||
// that, so it always fills alpha in, and the bytes are merged here instead of
|
|
||||||
// copied wholesale.
|
static _makeHexColor = null;
|
||||||
static _keepAlpha = false;
|
|
||||||
|
|
||||||
static get _memoryArray() {
|
static get _memoryArray() {
|
||||||
const array = this.#memoryArray;
|
const array = this.#memoryArray;
|
||||||
@ -48,31 +42,43 @@ class QCMS {
|
|||||||
function copy_result(ptr, len) {
|
function copy_result(ptr, len) {
|
||||||
// This function is called from the wasm module (it's an external
|
// 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
|
// "C" function). Its goal is to copy the result from the wasm memory
|
||||||
// to the destination buffer without any intermediate copies. The wasm side
|
// to the destination buffer without any intermediate copies.
|
||||||
// has already laid the result out the way the caller asked for it, so this is
|
const { _mustAddAlpha, _destBuffer, _destOffset, _destLength, _memoryArray } =
|
||||||
// one bulk copy unless the destination's alpha has to survive.
|
QCMS;
|
||||||
const { _destBuffer, _destOffset, _keepAlpha, _memoryArray } = QCMS;
|
if (len === _destLength) {
|
||||||
if (!_keepAlpha) {
|
|
||||||
_destBuffer.set(_memoryArray.subarray(ptr, ptr + len), _destOffset);
|
_destBuffer.set(_memoryArray.subarray(ptr, ptr + len), _destOffset);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const count = len >> 2;
|
if (_mustAddAlpha) {
|
||||||
const destStart = _destBuffer.byteOffset + _destOffset;
|
for (let i = ptr, ii = ptr + len, j = _destOffset; i < ii; i += 3, j += 4) {
|
||||||
if (((destStart | ptr) & 3) === 0) {
|
_destBuffer[j] = _memoryArray[i];
|
||||||
// Both sides are pixel-aligned, so RGB can be merged a whole pixel at a
|
_destBuffer[j + 1] = _memoryArray[i + 1];
|
||||||
// time. `len` is a multiple of 4 here: the wasm side wrote RGBA.
|
_destBuffer[j + 2] = _memoryArray[i + 2];
|
||||||
const dest32 = new Uint32Array(_destBuffer.buffer, destStart, count);
|
_destBuffer[j + 3] = 255;
|
||||||
const src32 = new Uint32Array(QCMS._memory.buffer, ptr, count);
|
}
|
||||||
for (let i = 0; i < count; i++) {
|
} else {
|
||||||
dest32[i] = (dest32[i] & ALPHA_MASK) | (src32[i] & RGB_MASK);
|
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.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as babel from "@babel/core";
|
|
||||||
import {
|
import {
|
||||||
babelPluginAddHeaderComment,
|
|
||||||
babelPluginPDFJSPreprocessor,
|
babelPluginPDFJSPreprocessor,
|
||||||
babelPluginStripSrcPath,
|
babelPluginStripSrcPath,
|
||||||
preprocessPDFJSCode,
|
preprocessPDFJSCode,
|
||||||
@ -26,6 +24,7 @@ import {
|
|||||||
} from "./external/ccov/coverage_format.mjs";
|
} from "./external/ccov/coverage_format.mjs";
|
||||||
import { exec, execSync, spawn, spawnSync } from "child_process";
|
import { exec, execSync, spawn, spawnSync } from "child_process";
|
||||||
import autoprefixer from "autoprefixer";
|
import autoprefixer from "autoprefixer";
|
||||||
|
import babel from "@babel/core";
|
||||||
import { buildPrefsSchema } from "./external/chromium/prefs.mjs";
|
import { buildPrefsSchema } from "./external/chromium/prefs.mjs";
|
||||||
import crypto from "crypto";
|
import crypto from "crypto";
|
||||||
import { finished } from "stream/promises";
|
import { finished } from "stream/promises";
|
||||||
@ -105,11 +104,11 @@ const AUTOPREFIXER_CONFIG = {
|
|||||||
// Default Babel targets used for generic, components, minified-pre
|
// Default Babel targets used for generic, components, minified-pre
|
||||||
const BABEL_TARGETS = ENV_TARGETS.join(", ");
|
const BABEL_TARGETS = ENV_TARGETS.join(", ");
|
||||||
|
|
||||||
const BABEL_COREJS_OPTS = Object.freeze({
|
const BABEL_PRESET_ENV_OPTS = Object.freeze({
|
||||||
method: "usage-global",
|
corejs: "3.49.0",
|
||||||
version: "3.49.0",
|
|
||||||
exclude: ["web.structured-clone"],
|
exclude: ["web.structured-clone"],
|
||||||
shippedProposals: true,
|
shippedProposals: true,
|
||||||
|
useBuiltIns: "usage",
|
||||||
});
|
});
|
||||||
|
|
||||||
const DEFINES = Object.freeze({
|
const DEFINES = Object.freeze({
|
||||||
@ -226,8 +225,6 @@ function createWebpackAlias(defines) {
|
|||||||
"web-print_service": "",
|
"web-print_service": "",
|
||||||
"web-secondary_toolbar": "web/secondary_toolbar.js",
|
"web-secondary_toolbar": "web/secondary_toolbar.js",
|
||||||
"web-signature_manager": "web/signature_manager.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-toolbar": "web/toolbar.js",
|
||||||
"web-views_manager": "web/views_manager.js",
|
"web-views_manager": "web/views_manager.js",
|
||||||
};
|
};
|
||||||
@ -328,7 +325,9 @@ function createWebpackConfig(
|
|||||||
/node_modules[\\/]core-js/,
|
/node_modules[\\/]core-js/,
|
||||||
];
|
];
|
||||||
|
|
||||||
const babelPresets = skipBabel ? undefined : ["@babel/preset-env"];
|
const babelPresets = skipBabel
|
||||||
|
? undefined
|
||||||
|
: [["@babel/preset-env", BABEL_PRESET_ENV_OPTS]];
|
||||||
const babelPlugins = [
|
const babelPlugins = [
|
||||||
[
|
[
|
||||||
babelPluginPDFJSPreprocessor,
|
babelPluginPDFJSPreprocessor,
|
||||||
@ -338,9 +337,6 @@ function createWebpackConfig(
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
if (!skipBabel) {
|
|
||||||
babelPlugins.push(["babel-plugin-polyfill-corejs3", BABEL_COREJS_OPTS]);
|
|
||||||
}
|
|
||||||
if (bundleDefines.COVERAGE) {
|
if (bundleDefines.COVERAGE) {
|
||||||
babelPlugins.push("babel-plugin-istanbul");
|
babelPlugins.push("babel-plugin-istanbul");
|
||||||
}
|
}
|
||||||
@ -793,18 +789,36 @@ function runTests(testsName, { bot = false } = {}) {
|
|||||||
args.push("--coveragePerTest");
|
args.push("--coveragePerTest");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (testsName === "browser") {
|
const codeArg = testsName === "browser" ? getArgValue("--code") : null;
|
||||||
let shouldRun;
|
if (codeArg) {
|
||||||
try {
|
const coverageDir =
|
||||||
shouldRun = applyCodeTestFilter(args);
|
getArgValue("--coverage-output") || BUILD_DIR + "coverage";
|
||||||
} catch (error) {
|
const result = spawnSync(
|
||||||
reject(error);
|
"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;
|
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();
|
resolve();
|
||||||
return;
|
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" });
|
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) {
|
function makeRef(done, bot) {
|
||||||
console.log("\n### Creating reference images");
|
console.log("\n### Creating reference images");
|
||||||
|
|
||||||
@ -1048,18 +932,6 @@ function makeRef(done, bot) {
|
|||||||
args
|
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" });
|
const testProcess = startNode(args, { cwd: TEST_DIR, stdio: "inherit" });
|
||||||
testProcess.on("close", function (code) {
|
testProcess.on("close", function (code) {
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
@ -1070,33 +942,34 @@ function makeRef(done, bot) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prints the IDs of tests that exercised a given source file location, using
|
// Queries the per-test coverage index built by --coverage-per-test and prints
|
||||||
// the per-test coverage index published to the pdf.js.refs repository. The
|
// the IDs of tests that exercised a given source file location. Run with
|
||||||
// index is downloaded on demand, cached locally, and only re-downloaded when
|
// --code=<file>::<line|function>, e.g. --code=canvas.js::205
|
||||||
// it has changed. Run with --code=<file>::<line|function>, e.g.
|
|
||||||
// --code=canvas.js::205 (add --no-download to reuse the cached index offline).
|
|
||||||
gulp.task("coverage_search", function (done) {
|
gulp.task("coverage_search", function (done) {
|
||||||
const codeArg = getArgValue("--code");
|
const codeArg = getArgValue("--code");
|
||||||
if (!codeArg) {
|
if (!codeArg) {
|
||||||
done(new Error('Missing --code argument, e.g. --code="canvas.js::205"'));
|
done(new Error('Missing --code argument, e.g. --code="canvas.js::205"'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let searchArgs;
|
const coverageDir =
|
||||||
try {
|
getArgValue("--coverage-output") || BUILD_DIR + "coverage";
|
||||||
searchArgs = getCoverageSearchArgs(codeArg);
|
const result = spawnSync(
|
||||||
} catch (error) {
|
"node",
|
||||||
done(error);
|
[
|
||||||
return;
|
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) {
|
if (result.status !== 0) {
|
||||||
done(
|
done(new Error("coverage_search failed"));
|
||||||
new Error(
|
|
||||||
result.error
|
|
||||||
? `coverage_search failed: ${result.error.message}`
|
|
||||||
: `coverage_search failed (exit code ${result.status})`
|
|
||||||
)
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
done();
|
done();
|
||||||
@ -1810,9 +1683,9 @@ function buildLibHelper(bundleDefines, inputStream, outputDir) {
|
|||||||
const licenseHeader = fs
|
const licenseHeader = fs
|
||||||
.readFileSync("./src/license_header.js")
|
.readFileSync("./src/license_header.js")
|
||||||
.toString()
|
.toString()
|
||||||
.trim()
|
.split("\n")
|
||||||
.replace(/^\/\*/, "")
|
.slice(1, -2)
|
||||||
.replace(/\*\/$/, "");
|
.map(line => line.replace(/^\s*\*\s?/, ""));
|
||||||
|
|
||||||
const ctx = {
|
const ctx = {
|
||||||
rootPath: __dirname,
|
rootPath: __dirname,
|
||||||
@ -1852,9 +1725,6 @@ function buildLibHelper(bundleDefines, inputStream, outputDir) {
|
|||||||
[babelPluginPDFJSPreprocessor, ctx],
|
[babelPluginPDFJSPreprocessor, ctx],
|
||||||
[babelPluginStripSrcPath],
|
[babelPluginStripSrcPath],
|
||||||
];
|
];
|
||||||
if (!skipBabel) {
|
|
||||||
plugins.push(["babel-plugin-polyfill-corejs3", BABEL_COREJS_OPTS]);
|
|
||||||
}
|
|
||||||
if (enableCoverage) {
|
if (enableCoverage) {
|
||||||
plugins.push([
|
plugins.push([
|
||||||
"babel-plugin-istanbul",
|
"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 && {
|
...(enableCoverage && {
|
||||||
filename: file.path,
|
filename: file.path,
|
||||||
babelrc: false,
|
babelrc: false,
|
||||||
configFile: false,
|
configFile: false,
|
||||||
}),
|
}),
|
||||||
sourceType: "module",
|
sourceType: "module",
|
||||||
presets: skipBabel ? undefined : ["@babel/preset-env"],
|
presets: skipBabel
|
||||||
|
? undefined
|
||||||
|
: [
|
||||||
|
[
|
||||||
|
"@babel/preset-env",
|
||||||
|
{ ...BABEL_PRESET_ENV_OPTS, loose: false, modules: false },
|
||||||
|
],
|
||||||
|
],
|
||||||
plugins,
|
plugins,
|
||||||
targets: BABEL_TARGETS,
|
targets: BABEL_TARGETS,
|
||||||
sourceMaps: enableSourceMaps,
|
sourceMaps: enableSourceMaps,
|
||||||
@ -2514,71 +2396,6 @@ gulp.task("lint-chmod", function (done) {
|
|||||||
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) {
|
gulp.task("lint", function (done) {
|
||||||
console.log("\n### Linting JS/CSS/JSON/SVG/HTML files");
|
console.log("\n### Linting JS/CSS/JSON/SVG/HTML files");
|
||||||
|
|
||||||
@ -2643,7 +2460,7 @@ gulp.task("lint", function (done) {
|
|||||||
return;
|
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-yes = نعم
|
||||||
pdfjs-document-properties-linearized-no = لا
|
pdfjs-document-properties-linearized-no = لا
|
||||||
pdfjs-document-properties-close-button = أغلق
|
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
|
## Print
|
||||||
|
|
||||||
@ -777,49 +764,6 @@ pdfjs-views-manager-waiting-for-file = يرفع ملف…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = أدِر الصفحات
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -153,28 +153,6 @@ pdfjs-document-properties-linearized = Хуткі прагляд у Інтэрн
|
|||||||
pdfjs-document-properties-linearized-yes = Так
|
pdfjs-document-properties-linearized-yes = Так
|
||||||
pdfjs-document-properties-linearized-no = Не
|
pdfjs-document-properties-linearized-no = Не
|
||||||
pdfjs-document-properties-close-button = Закрыць
|
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
|
## Print
|
||||||
|
|
||||||
@ -762,79 +740,6 @@ pdfjs-views-manager-waiting-for-file = Зацягваецца файл…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Кіраванне старонкамі
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -390,12 +390,3 @@ pdfjs-editor-alt-text-settings-delete-model-button = Изтриване
|
|||||||
## Controls
|
## Controls
|
||||||
|
|
||||||
pdfjs-editor-add-signature-image-upload-error-description = Проверете мрежовата си връзка или опитайте с друго изображение.
|
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)
|
## 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 =
|
pdfjs-print-button =
|
||||||
.title = چاپ
|
.title = چاپ
|
||||||
pdfjs-print-button-label = چاپ
|
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-yes = هری
|
||||||
pdfjs-document-properties-linearized-no = ن
|
|
||||||
pdfjs-document-properties-close-button = بستن
|
|
||||||
|
|
||||||
## Print
|
## Print
|
||||||
|
|
||||||
pdfjs-print-progress-message = ٱماڌه کردن سند سی چاپ کردن…
|
|
||||||
# Variables:
|
|
||||||
# $progress (Number) - percent value
|
|
||||||
pdfjs-print-progress-percent = { $progress }%
|
|
||||||
pdfjs-print-progress-close-button = لقو
|
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
|
## Password
|
||||||
|
|
||||||
pdfjs-password-ok-button = خا
|
pdfjs-password-ok-button = خا
|
||||||
@ -200,12 +24,6 @@ pdfjs-password-cancel-button = لقو
|
|||||||
|
|
||||||
## Editing
|
## 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 =
|
pdfjs-editor-stamp-button =
|
||||||
.title = ٱووردن یا آلشت شؽواتا
|
.title = ٱووردن یا آلشت شؽواتا
|
||||||
pdfjs-editor-stamp-button-label = ٱووردن یا آلشت شؽواتا
|
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.
|
# .default-content is used as a placeholder in an empty text editor.
|
||||||
pdfjs-free-text2 =
|
pdfjs-free-text2 =
|
||||||
.aria-label = آلشتگر هؽل
|
.aria-label = آلشتگر هؽل
|
||||||
@ -234,55 +44,15 @@ pdfjs-editor-comments-sidebar-no-comments-link = قلوه دووسته بۊین
|
|||||||
## Alt-text dialog
|
## Alt-text dialog
|
||||||
|
|
||||||
pdfjs-editor-alt-text-cancel-button = لقو
|
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
|
## 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.
|
## 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-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
|
## Dialog buttons
|
||||||
|
|
||||||
pdfjs-editor-add-signature-cancel-button = لقو
|
pdfjs-editor-add-signature-cancel-button = لقو
|
||||||
pdfjs-editor-add-signature-add-button = ٱووردن
|
|
||||||
pdfjs-editor-edit-signature-update-button = ورۊ رسۊوی
|
|
||||||
|
|
||||||
## Comment popup
|
## Comment popup
|
||||||
|
|
||||||
@ -294,32 +64,4 @@ pdfjs-editor-edit-comment-popup-button =
|
|||||||
|
|
||||||
# An existing comment is edited
|
# An existing comment is edited
|
||||||
pdfjs-editor-edit-comment-dialog-title-when-editing = آلشت منشڌ
|
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 = لقو
|
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-yes = Ano
|
||||||
pdfjs-document-properties-linearized-no = Ne
|
pdfjs-document-properties-linearized-no = Ne
|
||||||
pdfjs-document-properties-close-button = Zavřít
|
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
|
## Print
|
||||||
|
|
||||||
@ -771,84 +748,6 @@ pdfjs-views-manager-waiting-for-file = Nahrávání souboru…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Spravovat strany
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Iawn
|
||||||
pdfjs-document-properties-linearized-no = Na
|
pdfjs-document-properties-linearized-no = Na
|
||||||
pdfjs-document-properties-close-button = Cau
|
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
|
## Print
|
||||||
|
|
||||||
@ -789,94 +764,6 @@ pdfjs-views-manager-waiting-for-file = Yn llwytho ffeil i fyny…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Rheoli tudalennau
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -67,8 +67,8 @@ pdfjs-page-rotate-cw-button =
|
|||||||
.title = Im Uhrzeigersinn drehen
|
.title = Im Uhrzeigersinn drehen
|
||||||
pdfjs-page-rotate-cw-button-label = Im Uhrzeigersinn drehen
|
pdfjs-page-rotate-cw-button-label = Im Uhrzeigersinn drehen
|
||||||
pdfjs-page-rotate-ccw-button =
|
pdfjs-page-rotate-ccw-button =
|
||||||
.title = Gegen den Uhrzeigersinn drehen
|
.title = Gegen Uhrzeigersinn drehen
|
||||||
pdfjs-page-rotate-ccw-button-label = Gegen den Uhrzeigersinn drehen
|
pdfjs-page-rotate-ccw-button-label = Gegen Uhrzeigersinn drehen
|
||||||
pdfjs-cursor-text-select-tool-button =
|
pdfjs-cursor-text-select-tool-button =
|
||||||
.title = Textauswahl-Werkzeug aktivieren
|
.title = Textauswahl-Werkzeug aktivieren
|
||||||
pdfjs-cursor-text-select-tool-button-label = Textauswahl-Werkzeug
|
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-yes = Ja
|
||||||
pdfjs-document-properties-linearized-no = Nein
|
pdfjs-document-properties-linearized-no = Nein
|
||||||
pdfjs-document-properties-close-button = Schließen
|
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
|
## Print
|
||||||
|
|
||||||
@ -299,7 +278,7 @@ pdfjs-rendering-error = Beim Darstellen der Seite trat ein Fehler auf.
|
|||||||
# (32000-1:2008 Table 169 – Annotation types).
|
# (32000-1:2008 Table 169 – Annotation types).
|
||||||
# Some common types are e.g.: "Check", "Text", "Comment", "Note"
|
# Some common types are e.g.: "Check", "Text", "Comment", "Note"
|
||||||
pdfjs-text-annotation-type =
|
pdfjs-text-annotation-type =
|
||||||
.alt = [{ $type } Anmerkung]
|
.alt = [Anlage: { $type }]
|
||||||
# Variables:
|
# Variables:
|
||||||
# $dateObj (Date) - the modification date and time of the annotation
|
# $dateObj (Date) - the modification date and time of the annotation
|
||||||
pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
|
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-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-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-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-image-no-data-error-description = Bitte versuchen Sie, eine andere Grafik hochzuladen.
|
||||||
pdfjs-editor-add-signature-error-close-button = Schließen
|
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-ready-label = Ihre Datei wird vorbereitet…
|
||||||
pdfjs-views-manager-pages-status-waiting-uploading-label = Datei wird hochgeladen…
|
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-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-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-undo-button-label = Rückgängig
|
||||||
pdfjs-views-manager-status-done-button-label = Fertig
|
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 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Seiten verwalten
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
.title = Gespeicherte Unterschrift entfernen
|
.title = Gespeicherte Signatur entfernen
|
||||||
pdfjs-editor-delete-signature-button-label1 = Gespeicherte Unterschrift entfernen
|
pdfjs-editor-delete-signature-button-label1 = Gespeicherte Signatur entfernen
|
||||||
|
|
||||||
## Editor toolbar
|
## Editor toolbar
|
||||||
|
|
||||||
|
|||||||
@ -153,29 +153,6 @@ pdfjs-document-properties-linearized = Fast Web View:
|
|||||||
pdfjs-document-properties-linearized-yes = Jo
|
pdfjs-document-properties-linearized-yes = Jo
|
||||||
pdfjs-document-properties-linearized-no = Ně
|
pdfjs-document-properties-linearized-no = Ně
|
||||||
pdfjs-document-properties-close-button = Zacyniś
|
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
|
## Print
|
||||||
|
|
||||||
@ -771,84 +748,6 @@ pdfjs-views-manager-waiting-for-file = Dataja se nagrawa…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Boki zastojaś
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Ταχεία προβολή ιστού:
|
|||||||
pdfjs-document-properties-linearized-yes = Ναι
|
pdfjs-document-properties-linearized-yes = Ναι
|
||||||
pdfjs-document-properties-linearized-no = Όχι
|
pdfjs-document-properties-linearized-no = Όχι
|
||||||
pdfjs-document-properties-close-button = Κλείσιμο
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Μεταφόρτωση αρχείου…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Διαχείριση σελίδων
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Yes
|
||||||
pdfjs-document-properties-linearized-no = No
|
pdfjs-document-properties-linearized-no = No
|
||||||
pdfjs-document-properties-close-button = Close
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Uploading file…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Manage pages
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -785,96 +785,3 @@ pdfjs-views-manager-paste-button-after =
|
|||||||
pdfjs-new-badge-content = NEW
|
pdfjs-new-badge-content = NEW
|
||||||
|
|
||||||
pdfjs-views-manager-waiting-for-file = Uploading file…
|
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-yes = Jes
|
||||||
pdfjs-document-properties-linearized-no = Ne
|
pdfjs-document-properties-linearized-no = Ne
|
||||||
pdfjs-document-properties-close-button = Fermi
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Dosiero alŝutata…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Administri paĝojn
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Sí
|
||||||
pdfjs-document-properties-linearized-no = No
|
pdfjs-document-properties-linearized-no = No
|
||||||
pdfjs-document-properties-close-button = Cerrar
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Subiendo archivo…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Administrar páginas
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Sí
|
||||||
pdfjs-document-properties-linearized-no = No
|
pdfjs-document-properties-linearized-no = No
|
||||||
pdfjs-document-properties-close-button = Cerrar
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Subiendo archivo…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Gestionar páginas
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Sí
|
||||||
pdfjs-document-properties-linearized-no = No
|
pdfjs-document-properties-linearized-no = No
|
||||||
pdfjs-document-properties-close-button = Cerrar
|
pdfjs-document-properties-close-button = Cerrar
|
||||||
pdfjs-digital-signature-properties-view-certificate = Ver certificado
|
|
||||||
|
|
||||||
## Print
|
## Print
|
||||||
|
|
||||||
@ -162,8 +161,8 @@ pdfjs-print-progress-message = Preparando documento para impresión…
|
|||||||
# $progress (Number) - percent value
|
# $progress (Number) - percent value
|
||||||
pdfjs-print-progress-percent = { $progress }%
|
pdfjs-print-progress-percent = { $progress }%
|
||||||
pdfjs-print-progress-close-button = Cancelar
|
pdfjs-print-progress-close-button = Cancelar
|
||||||
pdfjs-printing-not-supported = Advertencia: La impresión no está completamente soportada por este navegador.
|
pdfjs-printing-not-supported = Advertencia: La impresión no esta completamente soportada por este navegador.
|
||||||
pdfjs-printing-not-ready = Advertencia: El PDF no cargó completamente para impresión.
|
pdfjs-printing-not-ready = Advertencia: El PDF no cargo completamente para impresión.
|
||||||
|
|
||||||
## Tooltips and alt text for side panel toolbar buttons
|
## Tooltips and alt text for side panel toolbar buttons
|
||||||
|
|
||||||
@ -266,7 +265,7 @@ pdfjs-page-landmark =
|
|||||||
## Loading indicator messages
|
## Loading indicator messages
|
||||||
|
|
||||||
pdfjs-loading-error = Un error ocurrió al cargar el PDF.
|
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-missing-file-error = Archivo PDF no encontrado.
|
||||||
pdfjs-unexpected-response-error = Respuesta inesperada del servidor.
|
pdfjs-unexpected-response-error = Respuesta inesperada del servidor.
|
||||||
pdfjs-rendering-error = Un error ocurrió al renderizar la página.
|
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-color-input = Color
|
||||||
pdfjs-editor-free-text-size-input = Tamaño
|
pdfjs-editor-free-text-size-input = Tamaño
|
||||||
pdfjs-editor-ink-color-input = Color
|
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-ink-opacity-input = Opacidad
|
||||||
pdfjs-editor-stamp-add-image-button =
|
pdfjs-editor-stamp-add-image-button =
|
||||||
.title = Agregar imagen
|
.title = Agregar imagen
|
||||||
@ -581,7 +580,7 @@ pdfjs-editor-add-signature-type-input =
|
|||||||
.aria-label = Escribe tu firma
|
.aria-label = Escribe tu firma
|
||||||
.placeholder = Escribe tu firma
|
.placeholder = Escribe tu firma
|
||||||
pdfjs-editor-add-signature-draw-placeholder = Dibuja 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:
|
# Variables:
|
||||||
# $thickness (Number) - the thickness (in pixels) of the line used to draw a signature.
|
# $thickness (Number) - the thickness (in pixels) of the line used to draw a signature.
|
||||||
pdfjs-editor-add-signature-draw-thickness-range =
|
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.
|
# $count (Number) - the number of selected pages to be copied.
|
||||||
pdfjs-views-manager-pages-status-undo-copy-label =
|
pdfjs-views-manager-pages-status-undo-copy-label =
|
||||||
{ $count ->
|
{ $count ->
|
||||||
[one] 1 página copiada
|
[one] 1 pagina copiada
|
||||||
*[other] { $count } páginas copiadas
|
*[other] { $count } paginas copiadas
|
||||||
}
|
}
|
||||||
# Variables:
|
# Variables:
|
||||||
# $count (Number) - the number of selected pages to be deleted.
|
# $count (Number) - the number of selected pages to be deleted.
|
||||||
pdfjs-views-manager-pages-status-undo-delete-label =
|
pdfjs-views-manager-pages-status-undo-delete-label =
|
||||||
{ $count ->
|
{ $count ->
|
||||||
[one] 1 página eliminada
|
[one] 1 pagina eliminada
|
||||||
*[other] { $count } páginas eliminadas
|
*[other] { $count } paginas eliminadas
|
||||||
}
|
}
|
||||||
pdfjs-views-manager-pages-status-waiting-ready-label = Preparando tu archivo…
|
pdfjs-views-manager-pages-status-waiting-ready-label = Preparando tu archivo…
|
||||||
pdfjs-views-manager-pages-status-waiting-uploading-label = Subiendo 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-yes = Bai
|
||||||
pdfjs-document-properties-linearized-no = Ez
|
pdfjs-document-properties-linearized-no = Ez
|
||||||
pdfjs-document-properties-close-button = Itxi
|
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
|
## Print
|
||||||
|
|
||||||
@ -422,11 +401,11 @@ pdfjs-editor-comments-sidebar-no-comments-link = Argibide gehiago
|
|||||||
|
|
||||||
## Alt-text dialog
|
## 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 =
|
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-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-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-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
|
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"
|
.placeholder = Adibidez, "gizon gaztea mahaian eserita dago bazkaltzeko"
|
||||||
# Alternative text (alt text) helps when people can't see the image.
|
# Alternative text (alt text) helps when people can't see the image.
|
||||||
pdfjs-editor-alt-text-button =
|
pdfjs-editor-alt-text-button =
|
||||||
.aria-label = Ordezko testua
|
.aria-label = Testu alternatiboa
|
||||||
|
|
||||||
## Editor resizers
|
## Editor resizers
|
||||||
## This is used in an aria label to help to understand the role of the resizer.
|
## 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.
|
## 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.
|
# 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.
|
# 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 =
|
pdfjs-editor-new-alt-text-textarea =
|
||||||
.placeholder = Idatzi zure azalpena hemen…
|
.placeholder = Idatzi zure azalpena hemen…
|
||||||
# This text refers to the alt text box above this description. It offers a definition of alt text.
|
# 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.
|
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.
|
# 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-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-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-title = Ezin da testu alternatiboa automatikoki sortu
|
||||||
pdfjs-editor-new-alt-text-error-description = Idatzi zure ordezko testu propioa edo saiatu berriro geroago.
|
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
|
pdfjs-editor-new-alt-text-error-close-button = Itxi
|
||||||
# Variables:
|
# Variables:
|
||||||
# $totalSize (Number) - the total size (in MB) of the AI model.
|
# $totalSize (Number) - the total size (in MB) of the AI model.
|
||||||
# $downloadedSize (Number) - the downloaded 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)
|
pdfjs-editor-new-alt-text-ai-model-downloading-progress = Testu alternatiboaren AA modeloa deskargatzen ({ $downloadedSize }/{ $totalSize } MB)
|
||||||
.aria-valuetext = Ordezko testuaren 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.
|
# This is a button that users can click to edit the alt text they have already added.
|
||||||
pdfjs-editor-new-alt-text-added-button =
|
pdfjs-editor-new-alt-text-added-button =
|
||||||
.aria-label = Ordezko testua gehituta
|
.aria-label = Testu alternatiboa gehituta
|
||||||
pdfjs-editor-new-alt-text-added-button-label = Ordezko testua 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.
|
# 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 =
|
pdfjs-editor-new-alt-text-missing-button =
|
||||||
.aria-label = Ordezko testua falta da
|
.aria-label = Testu alternatiboa falta da
|
||||||
pdfjs-editor-new-alt-text-missing-button-label = Ordezko testua 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.
|
# 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 =
|
pdfjs-editor-new-alt-text-to-review-button =
|
||||||
.aria-label = Berrikusi ordezko testua
|
.aria-label = Berrikusi testu alternatiboa
|
||||||
pdfjs-editor-new-alt-text-to-review-button-label = Berrikusi ordezko testua
|
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.
|
# "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:
|
# Variables:
|
||||||
# $generatedAltText (String) - the generated alt-text.
|
# $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
|
## Image alt-text settings
|
||||||
|
|
||||||
pdfjs-image-alt-text-settings-button =
|
pdfjs-image-alt-text-settings-button =
|
||||||
.title = Irudien ordezko testuaren ezarpenak
|
.title = Irudiaren testu alternatiboaren ezarpenak
|
||||||
pdfjs-image-alt-text-settings-button-label = Irudien ordezko testuaren ezarpenak
|
pdfjs-image-alt-text-settings-button-label = Irudiaren testu alternatiboaren ezarpenak
|
||||||
pdfjs-editor-alt-text-settings-dialog-label = Irudien ordezko testuaren ezarpenak
|
pdfjs-editor-alt-text-settings-dialog-label = Irudiaren testu alternatiboaren ezarpenak
|
||||||
pdfjs-editor-alt-text-settings-automatic-title = Ordezko testu automatikoa
|
pdfjs-editor-alt-text-settings-automatic-title = Testu alternatibo automatikoa
|
||||||
pdfjs-editor-alt-text-settings-create-model-button-label = Sortu ordezko testua automatikoki
|
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.
|
pdfjs-editor-alt-text-settings-create-model-description = Azalpenak iradokitzen ditu irudia ikusi ezin duen jendearentzat edo irudia kargatu ezin denerako.
|
||||||
# Variables:
|
# Variables:
|
||||||
# $totalSize (Number) - the total size (in MB) of the AI model.
|
# $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-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. Ordezko testu automatikorako beharrezkoa.
|
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-delete-model-button = Ezabatu
|
||||||
pdfjs-editor-alt-text-settings-download-model-button = Deskargatu
|
pdfjs-editor-alt-text-settings-download-model-button = Deskargatu
|
||||||
pdfjs-editor-alt-text-settings-downloading-model-button = Deskargatzen…
|
pdfjs-editor-alt-text-settings-downloading-model-button = Deskargatzen…
|
||||||
pdfjs-editor-alt-text-settings-editor-title = Ordezko testuaren editorea
|
pdfjs-editor-alt-text-settings-editor-title = Testu alternatiboaren editorea
|
||||||
pdfjs-editor-alt-text-settings-show-dialog-button-label = Erakutsi ordezko testua irudi bat gehitzean berehala
|
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 irudi guztiek ordezko testua dutela ziurtatzen laguntzen dizu.
|
pdfjs-editor-alt-text-settings-show-dialog-description = Zure irudiek testu alternatiboa duela ziurtatzen laguntzen dizu.
|
||||||
pdfjs-editor-alt-text-settings-close-button = Itxi
|
pdfjs-editor-alt-text-settings-close-button = Itxi
|
||||||
|
|
||||||
## Accessibility labels (announced by screen readers) for objects added to the editor.
|
## 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 =
|
pdfjs-editor-add-signature-dialog-label =
|
||||||
Leiho modal honek PDF dokumentu batera gehitzeko sinadurak
|
Leiho modal honek PDF dokumentu batera gehitzeko sinadurak
|
||||||
sortzea ahalbidetzen dio erabiltzaileari. Erabiltzaileak izena edita
|
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.
|
gordetzeko aukera du gehiagotan erabili ahal izateko.
|
||||||
pdfjs-editor-add-signature-dialog-title = Gehitu sinadura
|
pdfjs-editor-add-signature-dialog-title = Gehitu sinadura
|
||||||
|
|
||||||
@ -619,9 +598,9 @@ pdfjs-editor-add-signature-image-browse-link =
|
|||||||
|
|
||||||
## Controls
|
## 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 =
|
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-description-default-when-drawing = Sinadura
|
||||||
pdfjs-editor-add-signature-clear-button-label = Garbitu sinadura
|
pdfjs-editor-add-signature-clear-button-label = Garbitu sinadura
|
||||||
pdfjs-editor-add-signature-clear-button =
|
pdfjs-editor-add-signature-clear-button =
|
||||||
@ -757,74 +736,6 @@ pdfjs-views-manager-waiting-for-file = Fitxategia igotzen…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Kudeatu orriak
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Kyllä
|
||||||
pdfjs-document-properties-linearized-no = Ei
|
pdfjs-document-properties-linearized-no = Ei
|
||||||
pdfjs-document-properties-close-button = Sulje
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Lähetetään tiedostoa…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Hallitse sivuja
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Oui
|
||||||
pdfjs-document-properties-linearized-no = Non
|
pdfjs-document-properties-linearized-no = Non
|
||||||
pdfjs-document-properties-close-button = Fermer
|
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
|
## Print
|
||||||
|
|
||||||
@ -257,7 +236,7 @@ pdfjs-find-match-count = Occurrence { $current } sur { $total }
|
|||||||
# $limit (Number) - the maximum number of matches
|
# $limit (Number) - the maximum number of matches
|
||||||
pdfjs-find-match-count-limit =
|
pdfjs-find-match-count-limit =
|
||||||
{ $limit ->
|
{ $limit ->
|
||||||
[1] Plus d’une occurrence
|
[one] Plus d’{ $limit } occurrence
|
||||||
*[other] Plus de { $limit } occurrences
|
*[other] Plus de { $limit } occurrences
|
||||||
}
|
}
|
||||||
pdfjs-find-not-found = Expression non trouvée
|
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 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Gérer les pages
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Ja
|
||||||
pdfjs-document-properties-linearized-no = Nee
|
pdfjs-document-properties-linearized-no = Nee
|
||||||
pdfjs-document-properties-close-button = Slute
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Bestân oplade…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Siden beheare
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Añete
|
||||||
pdfjs-document-properties-linearized-no = Ahániri
|
pdfjs-document-properties-linearized-no = Ahániri
|
||||||
pdfjs-document-properties-close-button = Mboty
|
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
|
## Print
|
||||||
|
|
||||||
@ -581,7 +560,6 @@ pdfjs-editor-undo-bar-close-button-label = Mboty
|
|||||||
|
|
||||||
## Add a signature dialog
|
## 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
|
pdfjs-editor-add-signature-dialog-title = Embojuaju teraguapy
|
||||||
|
|
||||||
## Tab names
|
## Tab names
|
||||||
@ -753,49 +731,6 @@ pdfjs-views-manager-waiting-for-file = Ehupihína marandurenda…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Eñangareko kuotiarogue
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = תצוגת דף מהירה:
|
|||||||
pdfjs-document-properties-linearized-yes = כן
|
pdfjs-document-properties-linearized-yes = כן
|
||||||
pdfjs-document-properties-linearized-no = לא
|
pdfjs-document-properties-linearized-no = לא
|
||||||
pdfjs-document-properties-close-button = סגירה
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = בתהליך העלאת הקובץ…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = ניהול עמודים
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Haj
|
||||||
pdfjs-document-properties-linearized-no = Ně
|
pdfjs-document-properties-linearized-no = Ně
|
||||||
pdfjs-document-properties-close-button = Začinić
|
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
|
## Print
|
||||||
|
|
||||||
@ -771,84 +748,6 @@ pdfjs-views-manager-waiting-for-file = Dataja so nahrawa…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Strony rjadować
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Igen
|
||||||
pdfjs-document-properties-linearized-no = Nem
|
pdfjs-document-properties-linearized-no = Nem
|
||||||
pdfjs-document-properties-close-button = Bezárás
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Fájl feltöltése…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Oldalak kezelése
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -153,15 +153,6 @@ pdfjs-document-properties-linearized = Արագ վեբ դիտում․
|
|||||||
pdfjs-document-properties-linearized-yes = Այո
|
pdfjs-document-properties-linearized-yes = Այո
|
||||||
pdfjs-document-properties-linearized-no = Ոչ
|
pdfjs-document-properties-linearized-no = Ոչ
|
||||||
pdfjs-document-properties-close-button = Փակել
|
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
|
## Print
|
||||||
|
|
||||||
|
|||||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = Vista web rapide:
|
|||||||
pdfjs-document-properties-linearized-yes = Si
|
pdfjs-document-properties-linearized-yes = Si
|
||||||
pdfjs-document-properties-linearized-no = No
|
pdfjs-document-properties-linearized-no = No
|
||||||
pdfjs-document-properties-close-button = Clauder
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Cargante file…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Gerer paginas
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Sì
|
||||||
pdfjs-document-properties-linearized-no = No
|
pdfjs-document-properties-linearized-no = No
|
||||||
pdfjs-document-properties-close-button = Chiudi
|
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
|
## Print
|
||||||
|
|
||||||
@ -261,7 +240,7 @@ pdfjs-find-match-count =
|
|||||||
# $limit (Number) - the maximum number of matches
|
# $limit (Number) - the maximum number of matches
|
||||||
pdfjs-find-match-count-limit =
|
pdfjs-find-match-count-limit =
|
||||||
{ $limit ->
|
{ $limit ->
|
||||||
[one] Più di { $limit } corrispondenza
|
[one] Più di una { $limit } corrispondenza
|
||||||
*[other] Più di { $limit } corrispondenze
|
*[other] Più di { $limit } corrispondenze
|
||||||
}
|
}
|
||||||
pdfjs-find-not-found = Testo non trovato
|
pdfjs-find-not-found = Testo non trovato
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Caricamento file…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Gestisci pagine
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -153,23 +153,6 @@ pdfjs-document-properties-linearized = ウェブ表示用に最適化:
|
|||||||
pdfjs-document-properties-linearized-yes = はい
|
pdfjs-document-properties-linearized-yes = はい
|
||||||
pdfjs-document-properties-linearized-no = いいえ
|
pdfjs-document-properties-linearized-no = いいえ
|
||||||
pdfjs-document-properties-close-button = 閉じる
|
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
|
## Print
|
||||||
|
|
||||||
@ -717,54 +700,6 @@ pdfjs-views-manager-waiting-for-file = ファイルをアップロードして
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = ページを管理
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -153,27 +153,6 @@ pdfjs-document-properties-linearized = მსუბუქი ვებჩვე
|
|||||||
pdfjs-document-properties-linearized-yes = დიახ
|
pdfjs-document-properties-linearized-yes = დიახ
|
||||||
pdfjs-document-properties-linearized-no = არა
|
pdfjs-document-properties-linearized-no = არა
|
||||||
pdfjs-document-properties-close-button = დახურვა
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = ფაილი აიტვირთე
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = გვერდების მართვა
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-producer = Afecku n uselket PDF:
|
||||||
pdfjs-document-properties-version = Lqem PDF:
|
pdfjs-document-properties-version = Lqem PDF:
|
||||||
pdfjs-document-properties-page-count = Amḍan n yisebtar:
|
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-inches = deg
|
||||||
pdfjs-document-properties-page-size-unit-millimeters = mm
|
pdfjs-document-properties-page-size-unit-millimeters = mm
|
||||||
pdfjs-document-properties-page-size-orientation-portrait = s teɣzi
|
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-yes = Иә
|
||||||
pdfjs-document-properties-linearized-no = Жоқ
|
pdfjs-document-properties-linearized-no = Жоқ
|
||||||
pdfjs-document-properties-close-button = Жабу
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Файл жүктеп салынуда…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Беттерді басқару
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -153,23 +153,6 @@ pdfjs-document-properties-linearized = 빠른 웹 보기:
|
|||||||
pdfjs-document-properties-linearized-yes = 예
|
pdfjs-document-properties-linearized-yes = 예
|
||||||
pdfjs-document-properties-linearized-no = 아니요
|
pdfjs-document-properties-linearized-no = 아니요
|
||||||
pdfjs-document-properties-close-button = 닫기
|
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
|
## 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.
|
# $thickness (Number) - the thickness (in pixels) of the line used to draw a signature.
|
||||||
pdfjs-editor-add-signature-draw-thickness-range =
|
pdfjs-editor-add-signature-draw-thickness-range =
|
||||||
.title = 그리기 두께: { $thickness }
|
.title = 그리기 두께: { $thickness }
|
||||||
pdfjs-editor-add-signature-image-placeholder = 이미지 파일을 여기에 끌어다 놓으세요
|
pdfjs-editor-add-signature-image-placeholder = 이미지 파일을 여기에 끌어서 놓으세요
|
||||||
pdfjs-editor-add-signature-image-browse-link =
|
pdfjs-editor-add-signature-image-browse-link =
|
||||||
{ PLATFORM() ->
|
{ PLATFORM() ->
|
||||||
[macos] 또는 이미지 파일 찾아보기
|
[macos] 또는 이미지 파일 찾아보기
|
||||||
@ -717,54 +700,6 @@ pdfjs-views-manager-waiting-for-file = 파일 업로드 중…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = 페이지 관리
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Ja
|
||||||
pdfjs-document-properties-linearized-no = Nei
|
pdfjs-document-properties-linearized-no = Nei
|
||||||
pdfjs-document-properties-close-button = Lukk
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Laster opp filen …
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Behandle sider
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Ja
|
||||||
pdfjs-document-properties-linearized-no = Nee
|
pdfjs-document-properties-linearized-no = Nee
|
||||||
pdfjs-document-properties-close-button = Sluiten
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Bestand uploaden…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Pagina’s beheren
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Ja
|
||||||
pdfjs-document-properties-linearized-no = Nei
|
pdfjs-document-properties-linearized-no = Nei
|
||||||
pdfjs-document-properties-close-button = Lat att
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Lastar opp fila…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Handsam sider
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = tak
|
||||||
pdfjs-document-properties-linearized-no = nie
|
pdfjs-document-properties-linearized-no = nie
|
||||||
pdfjs-document-properties-close-button = Zamknij
|
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
|
## Print
|
||||||
|
|
||||||
@ -761,79 +739,6 @@ pdfjs-views-manager-waiting-for-file = Przesyłanie pliku…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Zarządzaj stronami
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Sim
|
||||||
pdfjs-document-properties-linearized-no = Não
|
pdfjs-document-properties-linearized-no = Não
|
||||||
pdfjs-document-properties-close-button = Fechar
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Enviando arquivo…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Gerenciar páginas
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Da
|
||||||
pdfjs-document-properties-linearized-no = Nu
|
pdfjs-document-properties-linearized-no = Nu
|
||||||
pdfjs-document-properties-close-button = Închide
|
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
|
## Print
|
||||||
|
|
||||||
@ -412,9 +390,8 @@ pdfjs-free-text2 =
|
|||||||
# $count (Number) - the number of comments.
|
# $count (Number) - the number of comments.
|
||||||
pdfjs-editor-comments-sidebar-title =
|
pdfjs-editor-comments-sidebar-title =
|
||||||
{ $count ->
|
{ $count ->
|
||||||
[one] comentariu
|
[one] Comentariu
|
||||||
[few] comentarii
|
*[other] Comentarii
|
||||||
*[other] de comentarii
|
|
||||||
}
|
}
|
||||||
pdfjs-editor-comments-sidebar-close-button =
|
pdfjs-editor-comments-sidebar-close-button =
|
||||||
.title = Închide bara laterală
|
.title = Închide bara laterală
|
||||||
@ -762,79 +739,6 @@ pdfjs-views-manager-waiting-for-file = Se încarcă fișierul…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Gestionează paginile
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -153,28 +153,6 @@ pdfjs-document-properties-linearized = Быстрый просмотр в Web:
|
|||||||
pdfjs-document-properties-linearized-yes = Да
|
pdfjs-document-properties-linearized-yes = Да
|
||||||
pdfjs-document-properties-linearized-no = Нет
|
pdfjs-document-properties-linearized-no = Нет
|
||||||
pdfjs-document-properties-close-button = Закрыть
|
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
|
## Print
|
||||||
|
|
||||||
@ -762,79 +740,6 @@ pdfjs-views-manager-waiting-for-file = Загрузка файла…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Управление страницами
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -87,7 +87,6 @@ pdfjs-scroll-horizontal-button-label = Iscurrimentu orizontale
|
|||||||
pdfjs-scroll-wrapped-button =
|
pdfjs-scroll-wrapped-button =
|
||||||
.title = Imprea s'iscurrimentu continu
|
.title = Imprea s'iscurrimentu continu
|
||||||
pdfjs-scroll-wrapped-button-label = Iscurrimentu continu
|
pdfjs-scroll-wrapped-button-label = Iscurrimentu continu
|
||||||
pdfjs-spread-none-button-label = Pàginas individuales
|
|
||||||
|
|
||||||
## Document properties dialog
|
## Document properties dialog
|
||||||
|
|
||||||
@ -134,19 +133,6 @@ pdfjs-document-properties-linearized = Visualizatzione web lestra:
|
|||||||
pdfjs-document-properties-linearized-yes = Eja
|
pdfjs-document-properties-linearized-yes = Eja
|
||||||
pdfjs-document-properties-linearized-no = Nono
|
pdfjs-document-properties-linearized-no = Nono
|
||||||
pdfjs-document-properties-close-button = Serra
|
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
|
## Print
|
||||||
|
|
||||||
@ -193,15 +179,6 @@ pdfjs-thumb-page-title =
|
|||||||
# $page (Number) - the page number
|
# $page (Number) - the page number
|
||||||
pdfjs-thumb-page-canvas =
|
pdfjs-thumb-page-canvas =
|
||||||
.aria-label = Miniatura de sa pàgina { $page }
|
.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
|
## 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-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-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
|
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
|
pdfjs-find-not-found = Testu no agatadu
|
||||||
|
|
||||||
## Predefined zoom values
|
## 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-auto = Ingrandimentu automàticu
|
||||||
pdfjs-page-scale-actual = Mannària reale
|
pdfjs-page-scale-actual = Mannària reale
|
||||||
# Variables:
|
# Variables:
|
||||||
@ -262,12 +222,6 @@ pdfjs-missing-file-error = Ammancat s'archìviu PDF.
|
|||||||
pdfjs-unexpected-response-error = Risposta imprevista de su serbidore.
|
pdfjs-unexpected-response-error = Risposta imprevista de su serbidore.
|
||||||
pdfjs-rendering-error = Faddina in sa visualizatzione de sa pàgina.
|
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
|
## Password
|
||||||
|
|
||||||
pdfjs-password-label = Inserta sa crae pro abèrrere custu archìviu PDF.
|
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 =
|
pdfjs-editor-free-text-button =
|
||||||
.title = Testu
|
.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-free-text-button-label = Testu
|
||||||
pdfjs-editor-ink-button =
|
pdfjs-editor-ink-button =
|
||||||
.title = Disinnu
|
.title = Disinnu
|
||||||
pdfjs-editor-color-picker-ink-input =
|
|
||||||
.title = Muda su colore pro su disinnu
|
|
||||||
pdfjs-editor-ink-button-label = Disinnu
|
pdfjs-editor-ink-button-label = Disinnu
|
||||||
pdfjs-editor-stamp-button =
|
pdfjs-editor-stamp-button =
|
||||||
.title = Agiunghe o modìfica immàgines
|
.title = Agiunghe o modìfica immàgines
|
||||||
@ -298,33 +248,6 @@ pdfjs-highlight-floating-button1 =
|
|||||||
.title = Evidèntzia
|
.title = Evidèntzia
|
||||||
.aria-label = Evidèntzia
|
.aria-label = Evidèntzia
|
||||||
pdfjs-highlight-floating-button-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.
|
## Remove button for the various kind of editor.
|
||||||
|
|
||||||
@ -336,8 +259,6 @@ pdfjs-editor-remove-stamp-button =
|
|||||||
.title = Boga s’immàgine
|
.title = Boga s’immàgine
|
||||||
pdfjs-editor-remove-highlight-button =
|
pdfjs-editor-remove-highlight-button =
|
||||||
.title = Boga s’evidèntzia
|
.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
|
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)
|
# 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-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.
|
# .default-content is used as a placeholder in an empty text editor.
|
||||||
pdfjs-free-text2 =
|
pdfjs-free-text2 =
|
||||||
.aria-label = Editore de testu
|
.aria-label = Editore de testu
|
||||||
.default-content = Cumintza a iscrìere…
|
.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
|
## Alt-text dialog
|
||||||
|
|
||||||
pdfjs-editor-alt-text-button-label = Testu alternativu
|
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-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-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-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-cancel-button = Annulla
|
||||||
pdfjs-editor-alt-text-save-button = Sarva
|
pdfjs-editor-alt-text-save-button = Sarva
|
||||||
pdfjs-editor-alt-text-decorative-tooltip = Sinnalada comente decorativu
|
|
||||||
|
|
||||||
## Color picker
|
## Color picker
|
||||||
|
|
||||||
@ -411,13 +304,7 @@ pdfjs-editor-colorpicker-pink =
|
|||||||
## New alt-text dialog
|
## 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.
|
## 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
|
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
|
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.
|
# "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:
|
# 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-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
|
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
|
## Dialog buttons
|
||||||
|
|
||||||
pdfjs-editor-add-signature-cancel-button = Annulla
|
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-yes = Áno
|
||||||
pdfjs-document-properties-linearized-no = Nie
|
pdfjs-document-properties-linearized-no = Nie
|
||||||
pdfjs-document-properties-close-button = Zavrieť
|
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
|
## Print
|
||||||
|
|
||||||
@ -771,84 +748,6 @@ pdfjs-views-manager-waiting-for-file = Nahráva sa súbor…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Spravovať strany
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-orientation-landscape = ležeče
|
||||||
pdfjs-document-properties-page-size-name-a-three = A3
|
pdfjs-document-properties-page-size-name-a-three = A3
|
||||||
pdfjs-document-properties-page-size-name-a-four = A4
|
pdfjs-document-properties-page-size-name-a-four = A4
|
||||||
pdfjs-document-properties-page-size-name-letter = Letter
|
pdfjs-document-properties-page-size-name-letter = Pismo
|
||||||
pdfjs-document-properties-page-size-name-legal = Legal
|
pdfjs-document-properties-page-size-name-legal = Pravno
|
||||||
|
|
||||||
## Variables:
|
## Variables:
|
||||||
## $width (Number) - the width of the (current) page
|
## $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-yes = Da
|
||||||
pdfjs-document-properties-linearized-no = Ne
|
pdfjs-document-properties-linearized-no = Ne
|
||||||
pdfjs-document-properties-close-button = Zapri
|
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
|
## Print
|
||||||
|
|
||||||
@ -771,23 +748,6 @@ pdfjs-views-manager-waiting-for-file = Nalaganje datoteke …
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Upravljanje strani
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -153,28 +153,6 @@ pdfjs-document-properties-linearized = Брз веб приказ:
|
|||||||
pdfjs-document-properties-linearized-yes = Да
|
pdfjs-document-properties-linearized-yes = Да
|
||||||
pdfjs-document-properties-linearized-no = Не
|
pdfjs-document-properties-linearized-no = Не
|
||||||
pdfjs-document-properties-close-button = Затвори
|
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
|
## Print
|
||||||
|
|
||||||
@ -762,79 +740,6 @@ pdfjs-views-manager-waiting-for-file = Отпремам датотеку…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Управљај страницама
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Ja
|
||||||
pdfjs-document-properties-linearized-no = Nej
|
pdfjs-document-properties-linearized-no = Nej
|
||||||
pdfjs-document-properties-close-button = Stäng
|
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
|
## Print
|
||||||
|
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Överför fil…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Hantera sidor
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Evet
|
||||||
pdfjs-document-properties-linearized-no = Hayır
|
pdfjs-document-properties-linearized-no = Hayır
|
||||||
pdfjs-document-properties-close-button = Kapat
|
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
|
## Print
|
||||||
|
|
||||||
@ -517,11 +496,11 @@ pdfjs-editor-new-alt-text-added-button =
|
|||||||
pdfjs-editor-new-alt-text-added-button-label = Alt metin eklendi
|
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.
|
# 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 =
|
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
|
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.
|
# 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 =
|
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
|
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.
|
# "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:
|
# Variables:
|
||||||
@ -753,74 +732,6 @@ pdfjs-views-manager-waiting-for-file = Dosya yükleniyor…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Sayfaları yönet
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
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-yes = Có
|
||||||
pdfjs-document-properties-linearized-no = Không
|
pdfjs-document-properties-linearized-no = Không
|
||||||
pdfjs-document-properties-close-button = Ðó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
|
## 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-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-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-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-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-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
|
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 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Quản lý trang
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -153,19 +153,6 @@ pdfjs-document-properties-linearized = 快速 Web 视图:
|
|||||||
pdfjs-document-properties-linearized-yes = 是
|
pdfjs-document-properties-linearized-yes = 是
|
||||||
pdfjs-document-properties-linearized-no = 否
|
pdfjs-document-properties-linearized-no = 否
|
||||||
pdfjs-document-properties-close-button = 关闭
|
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
|
## Print
|
||||||
|
|
||||||
|
|||||||
@ -153,23 +153,6 @@ pdfjs-document-properties-linearized = 快速 Web 檢視:
|
|||||||
pdfjs-document-properties-linearized-yes = 是
|
pdfjs-document-properties-linearized-yes = 是
|
||||||
pdfjs-document-properties-linearized-no = 否
|
pdfjs-document-properties-linearized-no = 否
|
||||||
pdfjs-document-properties-close-button = 關閉
|
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
|
## Print
|
||||||
|
|
||||||
@ -717,54 +700,6 @@ pdfjs-views-manager-waiting-for-file = 正在上傳檔案…
|
|||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = 管理頁面
|
.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
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
4085
package-lock.json
generated
4085
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",
|
"name": "pdf.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^8.0.1",
|
"@babel/core": "^7.29.7",
|
||||||
"@babel/preset-env": "^8.0.2",
|
"@babel/preset-env": "^7.29.7",
|
||||||
"@babel/runtime": "^8.0.0",
|
"@babel/runtime": "^7.29.7",
|
||||||
"@eslint/json": "^2.0.1",
|
"@eslint/json": "^2.0.0",
|
||||||
"@fluent/bundle": "^0.19.1",
|
"@fluent/bundle": "^0.19.1",
|
||||||
"@fluent/dom": "^0.10.2",
|
"@fluent/dom": "^0.10.2",
|
||||||
"@metalsmith/layouts": "^3.0.0",
|
"@metalsmith/layouts": "^3.0.0",
|
||||||
"@metalsmith/markdown": "^1.10.0",
|
"@metalsmith/markdown": "^1.10.0",
|
||||||
"@napi-rs/canvas": "^1.0.3",
|
"@napi-rs/canvas": "^1.0.0",
|
||||||
"@types/node": "^26.1.2",
|
"@types/node": "^26.0.0",
|
||||||
"autoprefixer": "^10.5.4",
|
"autoprefixer": "^10.5.1",
|
||||||
"babel-loader": "^10.1.1",
|
"babel-loader": "^10.1.1",
|
||||||
|
"babel-plugin-add-header-comment": "^1.0.3",
|
||||||
"babel-plugin-istanbul": "^8.0.2",
|
"babel-plugin-istanbul": "^8.0.2",
|
||||||
"babel-plugin-polyfill-corejs3": "^1.0.0",
|
|
||||||
"cached-iterable": "^0.3.0",
|
"cached-iterable": "^0.3.0",
|
||||||
"caniuse-lite": "^1.0.30001806",
|
"caniuse-lite": "^1.0.30001799",
|
||||||
"core-js": "^3.49.0",
|
"core-js": "^3.49.0",
|
||||||
"eslint": "^10.8.0",
|
"eslint": "^10.5.0",
|
||||||
"eslint-config-prettier": "^10.1.8",
|
"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-jasmine": "^4.2.2",
|
||||||
"eslint-plugin-no-unsanitized": "^4.1.5",
|
"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-prettier": "^5.5.6",
|
||||||
"eslint-plugin-regexp": "^3.1.1",
|
"eslint-plugin-regexp": "^3.1.0",
|
||||||
"eslint-plugin-unicorn": "^72.0.0",
|
"eslint-plugin-unicorn": "^68.0.0",
|
||||||
"globals": "^17.8.0",
|
"globals": "^17.7.0",
|
||||||
"gulp": "^5.0.1",
|
"gulp": "^5.0.1",
|
||||||
"gulp-cli": "^3.1.0",
|
"gulp-cli": "^3.1.0",
|
||||||
"gulp-postcss": "^10.0.0",
|
"gulp-postcss": "^10.0.0",
|
||||||
@ -44,23 +44,23 @@
|
|||||||
"jstransformer-nunjucks": "^1.2.0",
|
"jstransformer-nunjucks": "^1.2.0",
|
||||||
"kleur": "^4.1.5",
|
"kleur": "^4.1.5",
|
||||||
"metalsmith": "^2.7.0",
|
"metalsmith": "^2.7.0",
|
||||||
"metalsmith-html-relative": "^2.0.13",
|
"metalsmith-html-relative": "^2.0.12",
|
||||||
"ordered-read-streams": "^2.0.0",
|
"ordered-read-streams": "^2.0.0",
|
||||||
"pngjs": "^7.0.0",
|
"pngjs": "^7.0.0",
|
||||||
"postcss": "^8.5.25",
|
"postcss": "^8.5.15",
|
||||||
"postcss-discard-comments": "^8.0.1",
|
"postcss-discard-comments": "^8.0.1",
|
||||||
"postcss-values-parser": "^8.0.0",
|
"postcss-values-parser": "^8.0.0",
|
||||||
"prettier": "^3.9.6",
|
"prettier": "^3.8.4",
|
||||||
"puppeteer": "^25.4.0",
|
"puppeteer": "^25.2.0",
|
||||||
"stylelint": "^17.14.1",
|
"stylelint": "^17.13.0",
|
||||||
"stylelint-prettier": "^5.0.3",
|
"stylelint-prettier": "^5.0.3",
|
||||||
"svglint": "^4.2.1",
|
"svglint": "^4.2.1",
|
||||||
"terser-webpack-plugin": "^5.6.1",
|
"terser-webpack-plugin": "^5.6.1",
|
||||||
"tsc-alias": "^1.9.1",
|
"tsc-alias": "^1.8.17",
|
||||||
"ttest": "^4.0.0",
|
"ttest": "^4.0.0",
|
||||||
"typescript": "^6.0.3",
|
"typescript": "^6.0.3",
|
||||||
"vinyl": "^3.0.1",
|
"vinyl": "^3.0.1",
|
||||||
"webpack": "^5.109.2",
|
"webpack": "^5.107.2",
|
||||||
"webpack-stream": "^7.0.0"
|
"webpack-stream": "^7.0.0"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"stableVersion": "6.2.108",
|
"stableVersion": "6.0.227",
|
||||||
"baseVersion": "ce4ff55faaa83b39b0137dc458af6eea6f96235f",
|
"baseVersion": "b168293c173b0b9befe462c0b254136cf038c3ef",
|
||||||
"versionPrefix": "6.3."
|
"versionPrefix": "6.1."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -74,7 +74,6 @@ import { Catalog } from "./catalog.js";
|
|||||||
import { ColorSpaceUtils } from "./colorspace_utils.js";
|
import { ColorSpaceUtils } from "./colorspace_utils.js";
|
||||||
import { createImage } from "./editor/pdf_images.js";
|
import { createImage } from "./editor/pdf_images.js";
|
||||||
import { FileSpec } from "./file_spec.js";
|
import { FileSpec } from "./file_spec.js";
|
||||||
import { getSoundFormat } from "./sound.js";
|
|
||||||
import { JpegStream } from "./jpeg_stream.js";
|
import { JpegStream } from "./jpeg_stream.js";
|
||||||
import { ObjectLoader } from "./object_loader.js";
|
import { ObjectLoader } from "./object_loader.js";
|
||||||
import { OperatorList } from "./operator_list.js";
|
import { OperatorList } from "./operator_list.js";
|
||||||
@ -292,9 +291,6 @@ class AnnotationFactory {
|
|||||||
case "Screen":
|
case "Screen":
|
||||||
return new ScreenAnnotation(parameters);
|
return new ScreenAnnotation(parameters);
|
||||||
|
|
||||||
case "Sound":
|
|
||||||
return new SoundAnnotation(parameters);
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (!collectFields) {
|
if (!collectFields) {
|
||||||
if (!subtype) {
|
if (!subtype) {
|
||||||
@ -319,7 +315,10 @@ class AnnotationFactory {
|
|||||||
const pageRef = annotDict.getRaw("P");
|
const pageRef = annotDict.getRaw("P");
|
||||||
if (pageRef instanceof Ref) {
|
if (pageRef instanceof Ref) {
|
||||||
try {
|
try {
|
||||||
return await pdfManager.ensureCatalog("getPageIndex", [pageRef]);
|
const pageIndex = await pdfManager.ensureCatalog("getPageIndex", [
|
||||||
|
pageRef,
|
||||||
|
]);
|
||||||
|
return pageIndex;
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
info(`_getPageIndex -- not a valid page reference: "${ex}".`);
|
info(`_getPageIndex -- not a valid page reference: "${ex}".`);
|
||||||
}
|
}
|
||||||
@ -1332,8 +1331,6 @@ class Annotation {
|
|||||||
|
|
||||||
const text = [];
|
const text = [];
|
||||||
const buffer = [];
|
const buffer = [];
|
||||||
let firstPositionX = Infinity;
|
|
||||||
let firstPositionY = Infinity;
|
|
||||||
let firstPosition = null;
|
let firstPosition = null;
|
||||||
const sink = {
|
const sink = {
|
||||||
desiredSize: Math.Infinity,
|
desiredSize: Math.Infinity,
|
||||||
@ -1344,8 +1341,7 @@ class Annotation {
|
|||||||
if (item.str === undefined) {
|
if (item.str === undefined) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
firstPositionX = Math.min(firstPositionX, item.transform[4]);
|
firstPosition ||= item.transform.slice(-2);
|
||||||
firstPositionY = Math.min(firstPositionY, item.transform[5]);
|
|
||||||
buffer.push(item.str);
|
buffer.push(item.str);
|
||||||
if (item.hasEOL) {
|
if (item.hasEOL) {
|
||||||
text.push(buffer.join("").trimEnd());
|
text.push(buffer.join("").trimEnd());
|
||||||
@ -1366,10 +1362,6 @@ class Annotation {
|
|||||||
});
|
});
|
||||||
this.reset();
|
this.reset();
|
||||||
|
|
||||||
if (firstPositionX !== Infinity) {
|
|
||||||
firstPosition = [firstPositionX, firstPositionY];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buffer.length) {
|
if (buffer.length) {
|
||||||
text.push(buffer.join("").trimEnd());
|
text.push(buffer.join("").trimEnd());
|
||||||
}
|
}
|
||||||
@ -1517,7 +1509,7 @@ class Annotation {
|
|||||||
* usually indirect; when it's inline its embedded-file stream still isn't
|
* usually indirect; when it's inline its embedded-file stream still isn't
|
||||||
* (streams are always indirect), so fall back to that ref.
|
* (streams are always indirect), so fall back to that ref.
|
||||||
*/
|
*/
|
||||||
_getAttachmentId(fsDict, fsRef, annotationGlobals, isSound = false) {
|
_getAttachmentId(fsDict, fsRef, annotationGlobals) {
|
||||||
if (!(fsDict instanceof Dict)) {
|
if (!(fsDict instanceof Dict)) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
@ -1525,7 +1517,7 @@ class Annotation {
|
|||||||
fsRef = FileSpec.pickPlatformItem(fsDict.get("EF"), /* raw = */ true);
|
fsRef = FileSpec.pickPlatformItem(fsDict.get("EF"), /* raw = */ true);
|
||||||
}
|
}
|
||||||
return fsRef instanceof Ref
|
return fsRef instanceof Ref
|
||||||
? annotationGlobals.catalog.getAttachmentIdForAnnotation(fsRef, isSound)
|
? annotationGlobals.catalog.getAttachmentIdForAnnotation(fsRef)
|
||||||
: undefined;
|
: undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2887,7 +2879,10 @@ class TextWidgetAnnotation extends WidgetAnnotation {
|
|||||||
this.data.doNotScroll = this.hasFieldFlag(AnnotationFieldFlag.DONOTSCROLL);
|
this.data.doNotScroll = this.hasFieldFlag(AnnotationFieldFlag.DONOTSCROLL);
|
||||||
|
|
||||||
// Check if we have a date or time.
|
// Check if we have a date or time.
|
||||||
const { actions } = this.data;
|
const {
|
||||||
|
data: { actions },
|
||||||
|
} = this;
|
||||||
|
|
||||||
if (!actions) {
|
if (!actions) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2895,35 +2890,32 @@ class TextWidgetAnnotation extends WidgetAnnotation {
|
|||||||
const AFDateTime =
|
const AFDateTime =
|
||||||
/^AF(Date|Time)_(?:Keystroke|Format)(?:Ex)?\(['"]?([^'"]+)['"]?\);$/;
|
/^AF(Date|Time)_(?:Keystroke|Format)(?:Ex)?\(['"]?([^'"]+)['"]?\);$/;
|
||||||
let canUseHTMLDateTime = false;
|
let canUseHTMLDateTime = false;
|
||||||
|
|
||||||
const aFormat = actions.get("Format"),
|
|
||||||
aKeystroke = actions.get("Keystroke");
|
|
||||||
if (
|
if (
|
||||||
(aFormat?.length === 1 &&
|
(actions.Format?.length === 1 &&
|
||||||
aKeystroke?.length === 1 &&
|
actions.Keystroke?.length === 1 &&
|
||||||
AFDateTime.test(aFormat[0]) &&
|
AFDateTime.test(actions.Format[0]) &&
|
||||||
AFDateTime.test(aKeystroke[0])) ||
|
AFDateTime.test(actions.Keystroke[0])) ||
|
||||||
(aFormat?.length === 0 &&
|
(actions.Format?.length === 0 &&
|
||||||
aKeystroke?.length === 1 &&
|
actions.Keystroke?.length === 1 &&
|
||||||
AFDateTime.test(aKeystroke[0])) ||
|
AFDateTime.test(actions.Keystroke[0])) ||
|
||||||
(aKeystroke?.length === 0 &&
|
(actions.Keystroke?.length === 0 &&
|
||||||
aFormat?.length === 1 &&
|
actions.Format?.length === 1 &&
|
||||||
AFDateTime.test(aFormat[0]))
|
AFDateTime.test(actions.Format[0]))
|
||||||
) {
|
) {
|
||||||
// If the Format and Keystroke actions are the same, we can just use
|
// If the Format and Keystroke actions are the same, we can just use
|
||||||
// the Format action.
|
// the Format action.
|
||||||
canUseHTMLDateTime = true;
|
canUseHTMLDateTime = true;
|
||||||
}
|
}
|
||||||
const actionsToVisit = [];
|
const actionsToVisit = [];
|
||||||
if (aFormat) {
|
if (actions.Format) {
|
||||||
actionsToVisit.push(...aFormat);
|
actionsToVisit.push(...actions.Format);
|
||||||
}
|
}
|
||||||
if (aKeystroke) {
|
if (actions.Keystroke) {
|
||||||
actionsToVisit.push(...aKeystroke);
|
actionsToVisit.push(...actions.Keystroke);
|
||||||
}
|
}
|
||||||
if (canUseHTMLDateTime) {
|
if (canUseHTMLDateTime) {
|
||||||
actions.delete("Keystroke");
|
delete actions.Keystroke;
|
||||||
actions.set("Format", actionsToVisit);
|
actions.Format = actionsToVisit;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const formatAction of actionsToVisit) {
|
for (const formatAction of actionsToVisit) {
|
||||||
@ -3315,11 +3307,13 @@ class ButtonWidgetAnnotation extends WidgetAnnotation {
|
|||||||
return super.getOperatorList(evaluator, task, intent, annotationStorage);
|
return super.getOperatorList(evaluator, task, intent, annotationStorage);
|
||||||
}
|
}
|
||||||
|
|
||||||
// There is no default appearance, `value === null || value === undefined`,
|
if (value === null || value === undefined) {
|
||||||
// so use the one derived from the field value.
|
// There is no default appearance so use the one derived
|
||||||
value ??= this.data.checkBox
|
// from the field value.
|
||||||
? this.data.fieldValue === this.data.exportValue
|
value = this.data.checkBox
|
||||||
: this.data.fieldValue === this.data.buttonValue;
|
? this.data.fieldValue === this.data.exportValue
|
||||||
|
: this.data.fieldValue === this.data.buttonValue;
|
||||||
|
}
|
||||||
|
|
||||||
return this.#getOperatorListForAppearance(
|
return this.#getOperatorListForAppearance(
|
||||||
evaluator,
|
evaluator,
|
||||||
@ -4104,8 +4098,6 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class SignatureWidgetAnnotation extends WidgetAnnotation {
|
class SignatureWidgetAnnotation extends WidgetAnnotation {
|
||||||
_hasValueFromXFA = false;
|
|
||||||
|
|
||||||
constructor(params) {
|
constructor(params) {
|
||||||
super(params);
|
super(params);
|
||||||
|
|
||||||
@ -4713,7 +4705,9 @@ class PolylineAnnotation extends MarkupAnnotation {
|
|||||||
const strokeAlpha = dict.get("CA");
|
const strokeAlpha = dict.get("CA");
|
||||||
|
|
||||||
let fillColor = getRgbColor(dict.getArray("IC"), null);
|
let fillColor = getRgbColor(dict.getArray("IC"), null);
|
||||||
fillColor &&= getPdfColorArray(fillColor);
|
if (fillColor) {
|
||||||
|
fillColor = getPdfColorArray(fillColor);
|
||||||
|
}
|
||||||
|
|
||||||
let operator;
|
let operator;
|
||||||
if (fillColor) {
|
if (fillColor) {
|
||||||
@ -4791,19 +4785,19 @@ class InkAnnotation extends MarkupAnnotation {
|
|||||||
if (!Array.isArray(rawInkLists)) {
|
if (!Array.isArray(rawInkLists)) {
|
||||||
return;
|
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 raw ink lists array contains arrays of numbers representing
|
||||||
// the alternating horizontal and vertical coordinates, respectively,
|
// the alternating horizontal and vertical coordinates, respectively,
|
||||||
// of each vertex. Convert this to an array of objects with x and y
|
// of each vertex. Convert this to an array of objects with x and y
|
||||||
// coordinates.
|
// coordinates.
|
||||||
if (!Array.isArray(rawInkList)) {
|
if (!Array.isArray(rawInkLists[i])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const inkList = new Float32Array(rawInkList.length);
|
const inkList = new Float32Array(rawInkLists[i].length);
|
||||||
this.data.inkLists.push(inkList);
|
this.data.inkLists.push(inkList);
|
||||||
for (let j = 0, jj = rawInkList.length; j < jj; j += 2) {
|
for (let j = 0, jj = rawInkLists[i].length; j < jj; j += 2) {
|
||||||
const x = xref.fetchIfRef(rawInkList[j]),
|
const x = xref.fetchIfRef(rawInkLists[i][j]),
|
||||||
y = xref.fetchIfRef(rawInkList[j + 1]);
|
y = xref.fetchIfRef(rawInkLists[i][j + 1]);
|
||||||
if (typeof x === "number" && typeof y === "number") {
|
if (typeof x === "number" && typeof y === "number") {
|
||||||
inkList[j] = x;
|
inkList[j] = x;
|
||||||
inkList[j + 1] = y;
|
inkList[j + 1] = y;
|
||||||
@ -5494,23 +5488,15 @@ class MediaAnnotation extends Annotation {
|
|||||||
* when `assetRef` isn't itself a reference.
|
* when `assetRef` isn't itself a reference.
|
||||||
* @param {string} asset.filename
|
* @param {string} asset.filename
|
||||||
* @param {string} asset.contentType
|
* @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
|
* @param {Object} annotationGlobals
|
||||||
*/
|
*/
|
||||||
_setMediaData(
|
_setMediaData(
|
||||||
{ assetRef, assetDict, filename, contentType, wrapSound = false },
|
{ assetRef, assetDict, filename, contentType },
|
||||||
annotationGlobals
|
annotationGlobals
|
||||||
) {
|
) {
|
||||||
this.data.noHTML = false;
|
this.data.noHTML = false;
|
||||||
this.data.richMedia = {
|
this.data.richMedia = {
|
||||||
fileId: this._getAttachmentId(
|
fileId: this._getAttachmentId(assetDict, assetRef, annotationGlobals),
|
||||||
assetDict,
|
|
||||||
assetRef,
|
|
||||||
annotationGlobals,
|
|
||||||
wrapSound
|
|
||||||
),
|
|
||||||
filename,
|
filename,
|
||||||
contentType,
|
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 {
|
export {
|
||||||
Annotation,
|
Annotation,
|
||||||
AnnotationBorderStyle,
|
AnnotationBorderStyle,
|
||||||
|
|||||||
@ -75,7 +75,7 @@ function calculateMD5(data, offset, length) {
|
|||||||
i += 3;
|
i += 3;
|
||||||
const w = new Int32Array(16);
|
const w = new Int32Array(16);
|
||||||
const { k, r } = PARAMS;
|
const { k, r } = PARAMS;
|
||||||
for (i = 0; i < paddedLength;) {
|
for (i = 0; i < paddedLength; ) {
|
||||||
for (j = 0; j < 16; ++j, i += 4) {
|
for (j = 0; j < 16; ++j, i += 4) {
|
||||||
w[j] =
|
w[j] =
|
||||||
padded[i] |
|
padded[i] |
|
||||||
|
|||||||
@ -96,7 +96,7 @@ function calculateSHA256(data, offset, length) {
|
|||||||
const w = new Uint32Array(64);
|
const w = new Uint32Array(64);
|
||||||
const { k } = PARAMS;
|
const { k } = PARAMS;
|
||||||
// for each 512 bit block
|
// for each 512 bit block
|
||||||
for (i = 0; i < paddedLength;) {
|
for (i = 0; i < paddedLength; ) {
|
||||||
for (j = 0; j < 16; ++j) {
|
for (j = 0; j < 16; ++j) {
|
||||||
w[j] =
|
w[j] =
|
||||||
(padded[i] << 24) |
|
(padded[i] << 24) |
|
||||||
|
|||||||
@ -303,7 +303,7 @@ function calculateSHA512(data, offset, length, mode384 = false) {
|
|||||||
let tmp3;
|
let tmp3;
|
||||||
|
|
||||||
// for each 1024 bit block
|
// for each 1024 bit block
|
||||||
for (i = 0; i < paddedLength;) {
|
for (i = 0; i < paddedLength; ) {
|
||||||
for (j = 0; j < 16; ++j) {
|
for (j = 0; j < 16; ++j) {
|
||||||
w[j].high =
|
w[j].high =
|
||||||
(padded[i] << 24) |
|
(padded[i] << 24) |
|
||||||
|
|||||||
@ -19,7 +19,7 @@ import {
|
|||||||
DocumentActionEventType,
|
DocumentActionEventType,
|
||||||
FormatError,
|
FormatError,
|
||||||
info,
|
info,
|
||||||
makeArr,
|
objectSize,
|
||||||
PermissionFlag,
|
PermissionFlag,
|
||||||
shadow,
|
shadow,
|
||||||
stringToUTF8String,
|
stringToUTF8String,
|
||||||
@ -52,7 +52,6 @@ import { clearGlobalCaches } from "./cleanup_helper.js";
|
|||||||
import { ColorSpaceUtils } from "./colorspace_utils.js";
|
import { ColorSpaceUtils } from "./colorspace_utils.js";
|
||||||
import { FileSpec } from "./file_spec.js";
|
import { FileSpec } from "./file_spec.js";
|
||||||
import { MetadataParser } from "./metadata_parser.js";
|
import { MetadataParser } from "./metadata_parser.js";
|
||||||
import { soundStreamToWav } from "./sound.js";
|
|
||||||
import { stringToPDFString } from "./string_utils.js";
|
import { stringToPDFString } from "./string_utils.js";
|
||||||
import { StructTreeRoot } from "./struct_tree.js";
|
import { StructTreeRoot } from "./struct_tree.js";
|
||||||
|
|
||||||
@ -124,8 +123,6 @@ class Catalog {
|
|||||||
|
|
||||||
#annotationAttachmentRefById = new Map();
|
#annotationAttachmentRefById = new Map();
|
||||||
|
|
||||||
#soundAttachmentIds = new Set();
|
|
||||||
|
|
||||||
#catDict = null;
|
#catDict = null;
|
||||||
|
|
||||||
builtInCMapCache = new Map();
|
builtInCMapCache = new Map();
|
||||||
@ -174,32 +171,28 @@ class Catalog {
|
|||||||
*
|
*
|
||||||
* @param {Ref} ref
|
* @param {Ref} ref
|
||||||
* File-spec or embedded-file stream reference.
|
* 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}
|
* @returns {string}
|
||||||
* Attachment id.
|
* Attachment id.
|
||||||
*/
|
*/
|
||||||
getAttachmentIdForAnnotation(ref, isSound = false) {
|
getAttachmentIdForAnnotation(ref) {
|
||||||
let id = this.#annotationAttachmentIdByRef.get(ref);
|
let id = this.#annotationAttachmentIdByRef.get(ref);
|
||||||
if (!id) {
|
if (id) {
|
||||||
const baseId = `attachmentRef:${ref.toString()}`;
|
return id;
|
||||||
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 (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;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -763,17 +756,15 @@ class Catalog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get destinations() {
|
get destinations() {
|
||||||
const dests = new Map();
|
const rawDests = this.#readDests(),
|
||||||
|
dests = Object.create(null);
|
||||||
for (const obj of this.#readDests()) {
|
for (const obj of rawDests) {
|
||||||
if (obj instanceof NameTree) {
|
if (obj instanceof NameTree) {
|
||||||
for (const [key, value] of obj.getAll()) {
|
for (const [key, value] of obj.getAll()) {
|
||||||
const dest = fetchDest(value);
|
const dest = fetchDest(value);
|
||||||
if (dest) {
|
if (dest) {
|
||||||
dests.set(
|
dests[stringToPDFString(key, /* keepEscapeSequence = */ true)] =
|
||||||
stringToPDFString(key, /* keepEscapeSequence = */ true),
|
dest;
|
||||||
dest
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (obj instanceof Dict) {
|
} else if (obj instanceof Dict) {
|
||||||
@ -781,10 +772,8 @@ class Catalog {
|
|||||||
const dest = fetchDest(value);
|
const dest = fetchDest(value);
|
||||||
if (dest) {
|
if (dest) {
|
||||||
// Always let the NameTree take precedence.
|
// Always let the NameTree take precedence.
|
||||||
dests.getOrInsert(
|
dests[stringToPDFString(key, /* keepEscapeSequence = */ true)] ||=
|
||||||
stringToPDFString(key, /* keepEscapeSequence = */ true),
|
dest;
|
||||||
dest
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -795,10 +784,11 @@ class Catalog {
|
|||||||
getDestination(id) {
|
getDestination(id) {
|
||||||
// Avoid extra lookup/parsing when all destinations are already available.
|
// Avoid extra lookup/parsing when all destinations are already available.
|
||||||
if (Object.hasOwn(this, "destinations")) {
|
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) {
|
if (obj instanceof NameTree || obj instanceof Dict) {
|
||||||
const dest = fetchDest(obj.get(id));
|
const dest = fetchDest(obj.get(id));
|
||||||
if (dest) {
|
if (dest) {
|
||||||
@ -810,7 +800,13 @@ class Catalog {
|
|||||||
// Always fallback to checking all destinations, in order to support:
|
// Always fallback to checking all destinations, in order to support:
|
||||||
// - PDF documents with out-of-order NameTrees (fixes issue 10272).
|
// - PDF documents with out-of-order NameTrees (fixes issue 10272).
|
||||||
// - Destination keys that use PDFDocEncoding (fixes issue 19835).
|
// - 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() {
|
#readDests() {
|
||||||
@ -1076,18 +1072,17 @@ class Catalog {
|
|||||||
break;
|
break;
|
||||||
case "PrintPageRange":
|
case "PrintPageRange":
|
||||||
// The number of elements must be even.
|
// The number of elements must be even.
|
||||||
if (
|
if (Array.isArray(value) && value.length % 2 === 0) {
|
||||||
Array.isArray(value) &&
|
const isValid = value.every(
|
||||||
value.length % 2 === 0 &&
|
|
||||||
value.every(
|
|
||||||
(page, i, arr) =>
|
(page, i, arr) =>
|
||||||
Number.isInteger(page) &&
|
Number.isInteger(page) &&
|
||||||
page > 0 &&
|
page > 0 &&
|
||||||
(i === 0 || page >= arr[i - 1]) &&
|
(i === 0 || page >= arr[i - 1]) &&
|
||||||
page <= this.numPages
|
page <= this.numPages
|
||||||
)
|
);
|
||||||
) {
|
if (isValid) {
|
||||||
prefValue = value;
|
prefValue = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "NumCopies":
|
case "NumCopies":
|
||||||
@ -1104,14 +1099,15 @@ class Catalog {
|
|||||||
warn(`Bad value, for key "${key}", in ViewerPreferences: ${value}.`);
|
warn(`Bad value, for key "${key}", in ViewerPreferences: ${value}.`);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
(prefs ??= new Map()).set(key, prefValue);
|
prefs ??= Object.create(null);
|
||||||
|
prefs[key] = prefValue;
|
||||||
}
|
}
|
||||||
return shadow(this, "viewerPreferences", prefs);
|
return shadow(this, "viewerPreferences", prefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
get openAction() {
|
get openAction() {
|
||||||
const obj = this.#catDict.get("OpenAction");
|
const obj = this.#catDict.get("OpenAction");
|
||||||
const openAction = new Map();
|
const openAction = Object.create(null);
|
||||||
|
|
||||||
if (obj instanceof Dict) {
|
if (obj instanceof Dict) {
|
||||||
// Convert the OpenAction dictionary into a format that works with
|
// Convert the OpenAction dictionary into a format that works with
|
||||||
@ -1123,14 +1119,18 @@ class Catalog {
|
|||||||
Catalog.parseDestDictionary({ destDict, resultObj });
|
Catalog.parseDestDictionary({ destDict, resultObj });
|
||||||
|
|
||||||
if (Array.isArray(resultObj.dest)) {
|
if (Array.isArray(resultObj.dest)) {
|
||||||
openAction.set("dest", resultObj.dest);
|
openAction.dest = resultObj.dest;
|
||||||
} else if (resultObj.action) {
|
} else if (resultObj.action) {
|
||||||
openAction.set("action", resultObj.action);
|
openAction.action = resultObj.action;
|
||||||
}
|
}
|
||||||
} else if (isValidExplicitDest(obj)) {
|
} 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) {
|
if (ref) {
|
||||||
const target = this.xref.fetch(ref);
|
const target = this.xref.fetch(ref);
|
||||||
if (target instanceof BaseStream) {
|
if (target instanceof BaseStream) {
|
||||||
const content = FileSpec.readStreamContent(target);
|
return FileSpec.readStreamContent(target);
|
||||||
if (this.#soundAttachmentIds.has(id)) {
|
|
||||||
return soundStreamToWav(target, content) ?? content;
|
|
||||||
}
|
|
||||||
return content;
|
|
||||||
}
|
}
|
||||||
return target instanceof Dict ? FileSpec.readContent(target) : null;
|
return target instanceof Dict ? FileSpec.readContent(target) : null;
|
||||||
}
|
}
|
||||||
@ -1242,9 +1238,13 @@ class Catalog {
|
|||||||
let javaScript = null;
|
let javaScript = null;
|
||||||
|
|
||||||
function appendIfJavaScriptDict(name, jsDict) {
|
function appendIfJavaScriptDict(name, jsDict) {
|
||||||
if (!(jsDict instanceof Dict) || !isName(jsDict.get("S"), "JavaScript")) {
|
if (!(jsDict instanceof Dict)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!isName(jsDict.get("S"), "JavaScript")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let js = jsDict.get("JS");
|
let js = jsDict.get("JS");
|
||||||
if (js instanceof BaseStream) {
|
if (js instanceof BaseStream) {
|
||||||
js = js.getString();
|
js = js.getString();
|
||||||
@ -1257,7 +1257,7 @@ class Catalog {
|
|||||||
);
|
);
|
||||||
// Skip empty entries, similar to the `_collectJS` function.
|
// Skip empty entries, similar to the `_collectJS` function.
|
||||||
if (js) {
|
if (js) {
|
||||||
(javaScript ??= new Map()).set(name, js);
|
(javaScript ||= new Map()).set(name, js);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1288,10 +1288,14 @@ class Catalog {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (javaScript) {
|
if (javaScript) {
|
||||||
actions ??= new Map();
|
actions ||= Object.create(null);
|
||||||
|
|
||||||
for (const [key, val] of javaScript) {
|
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);
|
return shadow(this, "jsActions", actions);
|
||||||
@ -1591,9 +1595,6 @@ class Catalog {
|
|||||||
const xref = this.xref;
|
const xref = this.xref;
|
||||||
let total = 0,
|
let total = 0,
|
||||||
ref = pageRef;
|
ref = pageRef;
|
||||||
// Prevent circular references in the /Pages tree.
|
|
||||||
const visited = new RefSet();
|
|
||||||
visited.put(pageRef);
|
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
const node = await xref.fetchAsync(ref);
|
const node = await xref.fetchAsync(ref);
|
||||||
@ -1613,12 +1614,6 @@ class Catalog {
|
|||||||
throw new FormatError("Node must be a dictionary.");
|
throw new FormatError("Node must be a dictionary.");
|
||||||
}
|
}
|
||||||
const parentRef = node.getRaw("Parent");
|
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");
|
const parent = await node.getAsync("Parent");
|
||||||
if (!parent) {
|
if (!parent) {
|
||||||
@ -1731,19 +1726,9 @@ class Catalog {
|
|||||||
// reached (e.g. integer MCIDs or MCR/OBJR dicts without further K).
|
// reached (e.g. integer MCIDs or MCR/OBJR dicts without further K).
|
||||||
if (!pageRef) {
|
if (!pageRef) {
|
||||||
const queue = [seDict];
|
const queue = [seDict];
|
||||||
// Prevent circular references in the structure tree.
|
|
||||||
const visited = new RefSet();
|
|
||||||
visited.put(seRef);
|
|
||||||
while (queue.length > 0 && !pageRef) {
|
while (queue.length > 0 && !pageRef) {
|
||||||
const node = queue.shift();
|
const node = queue.shift();
|
||||||
let kids = node.getRaw("K");
|
const kids = node.get("K");
|
||||||
if (kids instanceof Ref) {
|
|
||||||
if (visited.has(kids)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
visited.put(kids);
|
|
||||||
kids = xref.fetch(kids);
|
|
||||||
}
|
|
||||||
let kidsArr;
|
let kidsArr;
|
||||||
if (Array.isArray(kids)) {
|
if (Array.isArray(kids)) {
|
||||||
kidsArr = kids;
|
kidsArr = kids;
|
||||||
@ -1753,12 +1738,6 @@ class Catalog {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (const kid of kidsArr) {
|
for (const kid of kidsArr) {
|
||||||
if (kid instanceof Ref) {
|
|
||||||
if (visited.has(kid)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
visited.put(kid);
|
|
||||||
}
|
|
||||||
const kidObj = xref.fetchIfRef(kid);
|
const kidObj = xref.fetchIfRef(kid);
|
||||||
if (!(kidObj instanceof Dict)) {
|
if (!(kidObj instanceof Dict)) {
|
||||||
continue; // integer MCID – leaf node, no Pg here
|
continue; // integer MCID – leaf node, no Pg here
|
||||||
|
|||||||
@ -58,9 +58,11 @@ class CCITTFaxStream extends DecodeStream {
|
|||||||
if (this.eof) {
|
if (this.eof) {
|
||||||
return this.buffer;
|
return this.buffer;
|
||||||
}
|
}
|
||||||
bytes ??= this.stream.isAsync
|
if (!bytes) {
|
||||||
? (await this.stream.asyncGetBytes()) || this.bytes
|
bytes = this.stream.isAsync
|
||||||
: this.bytes;
|
? (await this.stream.asyncGetBytes()) || this.bytes
|
||||||
|
: this.bytes;
|
||||||
|
}
|
||||||
|
|
||||||
this.buffer = await JBig2CCITTFaxImage.instance.decode(
|
this.buffer = await JBig2CCITTFaxImage.instance.decode(
|
||||||
bytes,
|
bytes,
|
||||||
|
|||||||
@ -546,7 +546,7 @@ class CFFParser {
|
|||||||
|
|
||||||
let length = data.length;
|
let length = data.length;
|
||||||
|
|
||||||
for (let j = 0; j < length;) {
|
for (let j = 0; j < length; ) {
|
||||||
const value = data[j++];
|
const value = data[j++];
|
||||||
let validationCommand = null;
|
let validationCommand = null;
|
||||||
if (value === 12) {
|
if (value === 12) {
|
||||||
@ -775,12 +775,14 @@ class CFFParser {
|
|||||||
} else if (localSubrIndex) {
|
} else if (localSubrIndex) {
|
||||||
localSubrToUse = localSubrIndex;
|
localSubrToUse = localSubrIndex;
|
||||||
}
|
}
|
||||||
valid &&= this.parseCharString(
|
if (valid) {
|
||||||
state,
|
valid = this.parseCharString(
|
||||||
charstring,
|
state,
|
||||||
localSubrToUse,
|
charstring,
|
||||||
globalSubrIndex
|
localSubrToUse,
|
||||||
);
|
globalSubrIndex
|
||||||
|
);
|
||||||
|
}
|
||||||
if (state.width !== null) {
|
if (state.width !== null) {
|
||||||
const nominalWidth = privateDictToUse.getByName("nominalWidthX");
|
const nominalWidth = privateDictToUse.getByName("nominalWidthX");
|
||||||
widths[i] = nominalWidth + state.width;
|
widths[i] = nominalWidth + state.width;
|
||||||
@ -1428,9 +1430,10 @@ class CFFFDSelect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getFDIndex(glyphIndex) {
|
getFDIndex(glyphIndex) {
|
||||||
return glyphIndex < 0 || glyphIndex >= this.fdSelect.length
|
if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
|
||||||
? -1
|
return -1;
|
||||||
: this.fdSelect[glyphIndex];
|
}
|
||||||
|
return this.fdSelect[glyphIndex];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -239,10 +239,10 @@ class ChunkedStream extends Stream {
|
|||||||
};
|
};
|
||||||
Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", {
|
Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", {
|
||||||
get() {
|
get() {
|
||||||
return (
|
if (this.numChunksLoaded === this.numChunks) {
|
||||||
this.numChunksLoaded === this.numChunks ||
|
return true;
|
||||||
this.getMissingChunks().length === 0
|
}
|
||||||
);
|
return this.getMissingChunks().length === 0;
|
||||||
},
|
},
|
||||||
configurable: true,
|
configurable: true,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -326,7 +326,7 @@ class CMap {
|
|||||||
c = ((c << 8) | str.charCodeAt(offset + n)) >>> 0;
|
c = ((c << 8) | str.charCodeAt(offset + n)) >>> 0;
|
||||||
// Check each codespace range to see if it falls within.
|
// Check each codespace range to see if it falls within.
|
||||||
const codespaceRange = codespaceRanges[n];
|
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 low = codespaceRange[k++];
|
||||||
const high = codespaceRange[k++];
|
const high = codespaceRange[k++];
|
||||||
if (c >= low && c <= high) {
|
if (c >= low && c <= high) {
|
||||||
@ -345,7 +345,7 @@ class CMap {
|
|||||||
for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {
|
for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {
|
||||||
// Check each codespace range to see if it falls within.
|
// Check each codespace range to see if it falls within.
|
||||||
const codespaceRange = codespaceRanges[n];
|
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 low = codespaceRange[k++];
|
||||||
const high = codespaceRange[k++];
|
const high = codespaceRange[k++];
|
||||||
if (charCode >= low && charCode <= high) {
|
if (charCode >= low && charCode <= high) {
|
||||||
|
|||||||
@ -183,21 +183,6 @@ class ColorSpace {
|
|||||||
unreachable("Should not call ColorSpace.getRgbBuffer");
|
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
|
* Determines the number of bytes required to store the result of the
|
||||||
* conversion done by the getRgbBuffer method. As in getRgbBuffer,
|
* conversion done by the getRgbBuffer method. As in getRgbBuffer,
|
||||||
@ -394,20 +379,6 @@ class AlternateCS extends ColorSpace {
|
|||||||
this.base.getRgbItem(tmpBuf, 0, dest, destOffset);
|
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) {
|
getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
|
||||||
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("TESTING")) {
|
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("TESTING")) {
|
||||||
assert(
|
assert(
|
||||||
@ -475,36 +446,24 @@ class PatternCS extends ColorSpace {
|
|||||||
* The default color is `new Uint8Array([0])`.
|
* The default color is `new Uint8Array([0])`.
|
||||||
*/
|
*/
|
||||||
class IndexedCS extends ColorSpace {
|
class IndexedCS extends ColorSpace {
|
||||||
#rgbLookup;
|
|
||||||
|
|
||||||
constructor(base, highVal, lookup) {
|
constructor(base, highVal, lookup) {
|
||||||
super("Indexed", 1);
|
super("Indexed", 1);
|
||||||
|
this.base = base;
|
||||||
this.highVal = highVal;
|
this.highVal = highVal;
|
||||||
|
|
||||||
const count = highVal + 1;
|
const length = base.numComps * (highVal + 1);
|
||||||
const length = base.numComps * count;
|
this.lookup = new Uint8Array(length);
|
||||||
const palette = new Uint8Array(length);
|
|
||||||
|
|
||||||
if (lookup instanceof BaseStream) {
|
if (lookup instanceof BaseStream) {
|
||||||
palette.set(lookup.getBytes(length));
|
const bytes = lookup.getBytes(length);
|
||||||
|
this.lookup.set(bytes);
|
||||||
} else if (typeof lookup === "string") {
|
} else if (typeof lookup === "string") {
|
||||||
for (let i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
palette[i] = lookup.charCodeAt(i);
|
this.lookup[i] = lookup.charCodeAt(i) & 0xff;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new FormatError(`IndexedCS - unrecognized lookup table: ${lookup}`);
|
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) {
|
getRgbItem(src, srcOffset, dest, destOffset) {
|
||||||
@ -514,12 +473,10 @@ class IndexedCS extends ColorSpace {
|
|||||||
'IndexedCS.getRgbItem: Unsupported "dest" type.'
|
'IndexedCS.getRgbItem: Unsupported "dest" type.'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const rgbLookup = this.#rgbLookup;
|
const { base, highVal, lookup } = this;
|
||||||
const pos = MathClamp(Math.round(src[srcOffset]), 0, this.highVal) * 3;
|
const start =
|
||||||
|
MathClamp(Math.round(src[srcOffset]), 0, highVal) * base.numComps;
|
||||||
dest[destOffset] = rgbLookup[pos];
|
base.getRgbBuffer(lookup, start, 1, dest, destOffset, 8, 0);
|
||||||
dest[destOffset + 1] = rgbLookup[pos + 1];
|
|
||||||
dest[destOffset + 2] = rgbLookup[pos + 2];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
|
getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
|
||||||
@ -529,21 +486,20 @@ class IndexedCS extends ColorSpace {
|
|||||||
'IndexedCS.getRgbBuffer: Unsupported "dest" type.'
|
'IndexedCS.getRgbBuffer: Unsupported "dest" type.'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const { highVal } = this;
|
const { base, highVal, lookup } = this;
|
||||||
const rgbLookup = this.#rgbLookup;
|
const { numComps } = base;
|
||||||
|
const outputDelta = base.getOutputLength(numComps, alpha01);
|
||||||
|
|
||||||
for (let i = 0; i < count; ++i) {
|
for (let i = 0; i < count; ++i) {
|
||||||
const pos = MathClamp(Math.round(src[srcOffset++]), 0, highVal) * 3;
|
const lookupPos =
|
||||||
|
MathClamp(Math.round(src[srcOffset++]), 0, highVal) * numComps;
|
||||||
dest[destOffset++] = rgbLookup[pos];
|
base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
|
||||||
dest[destOffset++] = rgbLookup[pos + 1];
|
destOffset += outputDelta;
|
||||||
dest[destOffset++] = rgbLookup[pos + 2];
|
|
||||||
destOffset += alpha01;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getOutputLength(inputLength, alpha01) {
|
getOutputLength(inputLength, alpha01) {
|
||||||
return inputLength * (3 + alpha01);
|
return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);
|
||||||
}
|
}
|
||||||
|
|
||||||
isDefaultDecode(decode, bpc) {
|
isDefaultDecode(decode, bpc) {
|
||||||
|
|||||||
@ -243,7 +243,9 @@ class ColorSpaceUtils {
|
|||||||
break;
|
break;
|
||||||
case "Pattern":
|
case "Pattern":
|
||||||
baseCS = cs[1] || null;
|
baseCS = cs[1] || null;
|
||||||
baseCS &&= this.#subParse(baseCS, options);
|
if (baseCS) {
|
||||||
|
baseCS = this.#subParse(baseCS, options);
|
||||||
|
}
|
||||||
return new PatternCS(baseCS);
|
return new PatternCS(baseCS);
|
||||||
case "I":
|
case "I":
|
||||||
case "Indexed":
|
case "Indexed":
|
||||||
|
|||||||
@ -18,12 +18,12 @@ import {
|
|||||||
assert,
|
assert,
|
||||||
BaseException,
|
BaseException,
|
||||||
makeArr,
|
makeArr,
|
||||||
|
objectSize,
|
||||||
Util,
|
Util,
|
||||||
warn,
|
warn,
|
||||||
} from "../shared/util.js";
|
} from "../shared/util.js";
|
||||||
import { Dict, isName, isRefsEqual, Name, Ref, RefSet } from "./primitives.js";
|
import { Dict, isName, isRefsEqual, Name, Ref, RefSet } from "./primitives.js";
|
||||||
import { BaseStream } from "./base_stream.js";
|
import { BaseStream } from "./base_stream.js";
|
||||||
import { CONTROL_CHAR_REGEXP } from "../shared/css_utils.js";
|
|
||||||
import { stringToPDFString } from "./string_utils.js";
|
import { stringToPDFString } from "./string_utils.js";
|
||||||
|
|
||||||
const PDF_VERSION_REGEXP = /^[1-9]\.\d$/;
|
const PDF_VERSION_REGEXP = /^[1-9]\.\d$/;
|
||||||
@ -342,8 +342,7 @@ function lookupNormalRect(arr, fallback) {
|
|||||||
* each part of the path.
|
* each part of the path.
|
||||||
*/
|
*/
|
||||||
function parseXFAPath(path) {
|
function parseXFAPath(path) {
|
||||||
// Anchoring prevents retrying the match at every character.
|
const positionPattern = /(.+)\[(\d+)\]$/;
|
||||||
const positionPattern = /^(.+)\[(\d+)\]$/;
|
|
||||||
return path.split(".").map(component => {
|
return path.split(".").map(component => {
|
||||||
const m = component.match(positionPattern);
|
const m = component.match(positionPattern);
|
||||||
if (m) {
|
if (m) {
|
||||||
@ -377,7 +376,7 @@ function escapePDFName(str) {
|
|||||||
if (start < i) {
|
if (start < i) {
|
||||||
buffer.push(str.substring(start, i));
|
buffer.push(str.substring(start, i));
|
||||||
}
|
}
|
||||||
buffer.push(`#${char.toString(16).padStart(2, "0")}`);
|
buffer.push(`#${char.toString(16)}`);
|
||||||
start = i + 1;
|
start = i + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -451,7 +450,7 @@ function _collectJS(entry, xref, list, parents) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function collectActions(xref, dict, eventType) {
|
function collectActions(xref, dict, eventType) {
|
||||||
const actions = new Map();
|
const actions = Object.create(null);
|
||||||
const additionalActionsDicts = getInheritableProperty({
|
const additionalActionsDicts = getInheritableProperty({
|
||||||
dict,
|
dict,
|
||||||
key: "AA",
|
key: "AA",
|
||||||
@ -477,7 +476,7 @@ function collectActions(xref, dict, eventType) {
|
|||||||
const list = [];
|
const list = [];
|
||||||
_collectJS(rawActionDict, xref, list, parents);
|
_collectJS(rawActionDict, xref, list, parents);
|
||||||
if (list.length > 0) {
|
if (list.length > 0) {
|
||||||
actions.set(action, list);
|
actions[action] = list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -489,10 +488,10 @@ function collectActions(xref, dict, eventType) {
|
|||||||
const list = [];
|
const list = [];
|
||||||
_collectJS(actionDict, xref, list, parents);
|
_collectJS(actionDict, xref, list, parents);
|
||||||
if (list.length > 0) {
|
if (list.length > 0) {
|
||||||
actions.set("Action", list);
|
actions.Action = list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return actions.size ? actions : null;
|
return objectSize(actions) > 0 ? actions : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const XMLEntities = {
|
const XMLEntities = {
|
||||||
@ -534,7 +533,7 @@ function encodeToXmlString(str) {
|
|||||||
buffer.push(str.substring(start, i));
|
buffer.push(str.substring(start, i));
|
||||||
}
|
}
|
||||||
buffer.push(`&#x${char.toString(16).toUpperCase()};`);
|
buffer.push(`&#x${char.toString(16).toUpperCase()};`);
|
||||||
if (char > 0xffff) {
|
if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) {
|
||||||
// char is represented by two u16
|
// char is represented by two u16
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -562,17 +561,6 @@ function validateFontName(fontFamily, mustWarn = false) {
|
|||||||
}
|
}
|
||||||
return 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 {
|
} else {
|
||||||
// See https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident.
|
// See https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident.
|
||||||
for (const ident of fontFamily.split(/[ \t]+/)) {
|
for (const ident of fontFamily.split(/[ \t]+/)) {
|
||||||
@ -587,18 +575,6 @@ function validateFontName(fontFamily, mustWarn = false) {
|
|||||||
return true;
|
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) {
|
function validateCSSFont(cssFontInfo) {
|
||||||
// See https://developer.mozilla.org/en-US/docs/Web/CSS/font-style.
|
// See https://developer.mozilla.org/en-US/docs/Web/CSS/font-style.
|
||||||
const DEFAULT_CSS_FONT_OBLIQUE = "14";
|
const DEFAULT_CSS_FONT_OBLIQUE = "14";
|
||||||
@ -775,7 +751,6 @@ export {
|
|||||||
lookupRect,
|
lookupRect,
|
||||||
MAX_INT_32,
|
MAX_INT_32,
|
||||||
MissingDataException,
|
MissingDataException,
|
||||||
normalizeCSSFontFamily,
|
|
||||||
numberToString,
|
numberToString,
|
||||||
ParserEOFException,
|
ParserEOFException,
|
||||||
parseXFAPath,
|
parseXFAPath,
|
||||||
|
|||||||
@ -34,7 +34,6 @@ import { Dict, isDict, isName, Name } from "./primitives.js";
|
|||||||
import { calculateMD5 } from "./calculate_md5.js";
|
import { calculateMD5 } from "./calculate_md5.js";
|
||||||
import { calculateSHA256 } from "./calculate_sha256.js";
|
import { calculateSHA256 } from "./calculate_sha256.js";
|
||||||
import { DecryptStream } from "./decrypt_stream.js";
|
import { DecryptStream } from "./decrypt_stream.js";
|
||||||
import { saslPrep } from "./sasl_prep.js";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {typeof AES128Cipher | typeof AES256Cipher | typeof ARCFourCipher
|
* @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 {
|
class CipherTransformFactory {
|
||||||
#fileId;
|
#fileId;
|
||||||
|
|
||||||
@ -1138,19 +1128,18 @@ class CipherTransformFactory {
|
|||||||
this.encryptMetadata = encryptMetadata;
|
this.encryptMetadata = encryptMetadata;
|
||||||
|
|
||||||
const fileIdBytes = stringToBytes(fileId);
|
const fileIdBytes = stringToBytes(fileId);
|
||||||
let passwordBytes, rawPasswordBytes;
|
let passwordBytes;
|
||||||
if (password) {
|
if (password) {
|
||||||
if (revision === 6) {
|
if (revision === 6) {
|
||||||
const preppedPassword = saslPrep(password);
|
try {
|
||||||
passwordBytes = utf8PasswordToBytes(preppedPassword);
|
password = utf8StringToString(password);
|
||||||
if (preppedPassword !== password) {
|
} catch {
|
||||||
rawPasswordBytes = utf8PasswordToBytes(password);
|
warn(
|
||||||
|
"CipherTransformFactory: Unable to convert UTF8 encoded password."
|
||||||
|
);
|
||||||
}
|
}
|
||||||
} else if (algorithm === 5) {
|
|
||||||
passwordBytes = utf8PasswordToBytes(password);
|
|
||||||
} else {
|
|
||||||
passwordBytes = stringToBytes(password);
|
|
||||||
}
|
}
|
||||||
|
passwordBytes = stringToBytes(password);
|
||||||
}
|
}
|
||||||
|
|
||||||
let encryptionKey;
|
let encryptionKey;
|
||||||
@ -1174,27 +1163,20 @@ class CipherTransformFactory {
|
|||||||
const ownerEncryption = stringToBytes(dict.get("OE"));
|
const ownerEncryption = stringToBytes(dict.get("OE"));
|
||||||
const userEncryption = stringToBytes(dict.get("UE"));
|
const userEncryption = stringToBytes(dict.get("UE"));
|
||||||
const perms = stringToBytes(dict.get("Perms"));
|
const perms = stringToBytes(dict.get("Perms"));
|
||||||
for (const candidate of rawPasswordBytes
|
encryptionKey = this.#createEncryptionKey20(
|
||||||
? [passwordBytes, rawPasswordBytes]
|
revision,
|
||||||
: [passwordBytes]) {
|
passwordBytes,
|
||||||
encryptionKey = this.#createEncryptionKey20(
|
ownerPassword,
|
||||||
revision,
|
ownerValidationSalt,
|
||||||
candidate,
|
ownerKeySalt,
|
||||||
ownerPassword,
|
uBytes,
|
||||||
ownerValidationSalt,
|
userPassword,
|
||||||
ownerKeySalt,
|
userValidationSalt,
|
||||||
uBytes,
|
userKeySalt,
|
||||||
userPassword,
|
ownerEncryption,
|
||||||
userValidationSalt,
|
userEncryption,
|
||||||
userKeySalt,
|
perms
|
||||||
ownerEncryption,
|
);
|
||||||
userEncryption,
|
|
||||||
perms
|
|
||||||
);
|
|
||||||
if (encryptionKey) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!encryptionKey) {
|
if (!encryptionKey) {
|
||||||
if (!password) {
|
if (!password) {
|
||||||
@ -1298,7 +1280,7 @@ class CipherTransformFactory {
|
|||||||
PasswordResponses.NEED_PASSWORD
|
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
|
// 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
|
// when a producer wrongly sets the crypt filter's CFM to AESV2
|
||||||
// (bug 2046659).
|
// (bug 2046659).
|
||||||
@ -1326,6 +1308,9 @@ class CipherTransformFactory {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if (cfm.name === "AESV3") {
|
||||||
|
return AES256Cipher.bind(null, this.encryptionKey);
|
||||||
|
}
|
||||||
throw new FormatError("Unknown crypto method");
|
throw new FormatError("Unknown crypto method");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -111,9 +111,10 @@ class DecodeStream extends BaseStream {
|
|||||||
|
|
||||||
async getImageData(length, decoderOptions) {
|
async getImageData(length, decoderOptions) {
|
||||||
if (!this.canAsyncDecodeImageFromBuffer) {
|
if (!this.canAsyncDecodeImageFromBuffer) {
|
||||||
return this.isAsyncDecoder
|
if (this.isAsyncDecoder) {
|
||||||
? this.decodeImage(null, length, decoderOptions)
|
return this.decodeImage(null, length, decoderOptions);
|
||||||
: this.getBytes(length, decoderOptions);
|
}
|
||||||
|
return this.getBytes(length, decoderOptions);
|
||||||
}
|
}
|
||||||
const data = await this.stream.asyncGetBytes();
|
const data = await this.stream.asyncGetBytes();
|
||||||
return this.decodeImage(data, length, decoderOptions);
|
return this.decodeImage(data, length, decoderOptions);
|
||||||
|
|||||||
@ -25,7 +25,6 @@ import {
|
|||||||
LINE_FACTOR,
|
LINE_FACTOR,
|
||||||
OPS,
|
OPS,
|
||||||
shadow,
|
shadow,
|
||||||
Util,
|
|
||||||
warn,
|
warn,
|
||||||
} from "../shared/util.js";
|
} from "../shared/util.js";
|
||||||
import { ColorSpaceUtils } from "./colorspace_utils.js";
|
import { ColorSpaceUtils } from "./colorspace_utils.js";
|
||||||
@ -145,8 +144,7 @@ class AppearanceStreamEvaluator extends EvaluatorPreprocessor {
|
|||||||
result = stack.pop() || result;
|
result = stack.pop() || result;
|
||||||
break;
|
break;
|
||||||
case OPS.setTextMatrix:
|
case OPS.setTextMatrix:
|
||||||
const tm = Util.transform(this.stateManager.state.ctm, args);
|
result.scaleFactor *= Math.hypot(args[0], args[1]);
|
||||||
result.scaleFactor *= Math.hypot(tm[0], tm[1]);
|
|
||||||
break;
|
break;
|
||||||
case OPS.setFont:
|
case OPS.setFont:
|
||||||
const [fontName, fontSize] = args;
|
const [fontName, fontSize] = args;
|
||||||
@ -154,7 +152,7 @@ class AppearanceStreamEvaluator extends EvaluatorPreprocessor {
|
|||||||
result.fontName = fontName.name;
|
result.fontName = fontName.name;
|
||||||
}
|
}
|
||||||
if (typeof fontSize === "number" && fontSize > 0) {
|
if (typeof fontSize === "number" && fontSize > 0) {
|
||||||
result.fontSize = fontSize;
|
result.fontSize = fontSize * result.scaleFactor;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OPS.setFillColorSpace:
|
case OPS.setFillColorSpace:
|
||||||
@ -184,10 +182,6 @@ class AppearanceStreamEvaluator extends EvaluatorPreprocessor {
|
|||||||
case OPS.showSpacedText:
|
case OPS.showSpacedText:
|
||||||
case OPS.nextLineShowText:
|
case OPS.nextLineShowText:
|
||||||
case OPS.nextLineSetSpacingShowText:
|
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;
|
breakLoop = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import {
|
|||||||
InvalidPDFException,
|
InvalidPDFException,
|
||||||
isArrayEqual,
|
isArrayEqual,
|
||||||
makeArr,
|
makeArr,
|
||||||
|
objectSize,
|
||||||
PageActionEventType,
|
PageActionEventType,
|
||||||
RenderingIntentFlag,
|
RenderingIntentFlag,
|
||||||
shadow,
|
shadow,
|
||||||
@ -42,7 +43,6 @@ import {
|
|||||||
isWhiteSpace,
|
isWhiteSpace,
|
||||||
lookupNormalRect,
|
lookupNormalRect,
|
||||||
MissingDataException,
|
MissingDataException,
|
||||||
normalizeCSSFontFamily,
|
|
||||||
PDF_VERSION_REGEXP,
|
PDF_VERSION_REGEXP,
|
||||||
RESOURCES_KEYS_OPERATOR_LIST,
|
RESOURCES_KEYS_OPERATOR_LIST,
|
||||||
RESOURCES_KEYS_TEXT_CONTENT,
|
RESOURCES_KEYS_TEXT_CONTENT,
|
||||||
@ -81,7 +81,6 @@ import { XFAFactory } from "./xfa/factory.js";
|
|||||||
import { XRef } from "./xref.js";
|
import { XRef } from "./xref.js";
|
||||||
|
|
||||||
const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];
|
const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];
|
||||||
const SIGNATURE_TAIL_CHUNK_SIZE = 65536;
|
|
||||||
|
|
||||||
class Page {
|
class Page {
|
||||||
#resourcesPromise = null;
|
#resourcesPromise = null;
|
||||||
@ -1005,12 +1004,6 @@ function find(stream, signature, limit = 1024, backwards = false) {
|
|||||||
class PDFDocument {
|
class PDFDocument {
|
||||||
#pagePromises = new Map();
|
#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;
|
#version = null;
|
||||||
|
|
||||||
constructor(pdfManager, stream) {
|
constructor(pdfManager, stream) {
|
||||||
@ -1195,10 +1188,7 @@ class PDFDocument {
|
|||||||
recursionDepth
|
recursionDepth
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const isSignature = isName(
|
const isSignature = isName(field.get("FT"), "Sig");
|
||||||
getInheritableProperty({ dict: field, key: "FT" }),
|
|
||||||
"Sig"
|
|
||||||
);
|
|
||||||
const rectangle = field.get("Rect");
|
const rectangle = field.get("Rect");
|
||||||
const isInvisible =
|
const isInvisible =
|
||||||
Array.isArray(rectangle) && rectangle.every(value => value === 0);
|
Array.isArray(rectangle) && rectangle.every(value => value === 0);
|
||||||
@ -1283,13 +1273,13 @@ class PDFDocument {
|
|||||||
if (!streams) {
|
if (!streams) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const data = new Map();
|
const data = Object.create(null);
|
||||||
for (const [key, stream] of streams) {
|
for (const [key, stream] of streams) {
|
||||||
if (!stream) {
|
if (!stream) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
data.set(key, stringToUTF8String(stream.getString()));
|
data[key] = stringToUTF8String(stream.getString());
|
||||||
} catch {
|
} catch {
|
||||||
warn("XFA - Invalid utf-8 string.");
|
warn("XFA - Invalid utf-8 string.");
|
||||||
return null;
|
return null;
|
||||||
@ -1397,7 +1387,9 @@ class PDFDocument {
|
|||||||
if (!(descriptor instanceof Dict)) {
|
if (!(descriptor instanceof Dict)) {
|
||||||
continue;
|
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");
|
const fontWeight = descriptor.get("FontWeight");
|
||||||
|
|
||||||
// Angle is expressed in degrees counterclockwise in PDF
|
// Angle is expressed in degrees counterclockwise in PDF
|
||||||
@ -1879,15 +1871,12 @@ class PDFDocument {
|
|||||||
name = name === "" ? partName : `${name}.${partName}`;
|
name = name === "" ? partName : `${name}.${partName}`;
|
||||||
} else {
|
} else {
|
||||||
let obj = field;
|
let obj = field;
|
||||||
// The `Parent` chain can be cyclic, hence the local `RefSet`.
|
|
||||||
const walkedRefs = new RefSet();
|
|
||||||
while (true) {
|
while (true) {
|
||||||
obj = obj.getRaw("Parent") || parentRef;
|
obj = obj.getRaw("Parent") || parentRef;
|
||||||
if (obj instanceof Ref) {
|
if (obj instanceof Ref) {
|
||||||
if (visitedRefs.has(obj) || walkedRefs.has(obj)) {
|
if (visitedRefs.has(obj)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
walkedRefs.put(obj);
|
|
||||||
obj = await xref.fetchAsync(obj);
|
obj = await xref.fetchAsync(obj);
|
||||||
}
|
}
|
||||||
if (!(obj instanceof Dict)) {
|
if (!(obj instanceof Dict)) {
|
||||||
@ -1961,7 +1950,7 @@ class PDFDocument {
|
|||||||
const { acroForm } = annotationGlobals;
|
const { acroForm } = annotationGlobals;
|
||||||
|
|
||||||
const visitedRefs = new RefSet();
|
const visitedRefs = new RefSet();
|
||||||
const allFields = new Map();
|
const allFields = Object.create(null);
|
||||||
const fieldPromises = new Map();
|
const fieldPromises = new Map();
|
||||||
const orphanFields = new RefSetCache();
|
const orphanFields = new RefSetCache();
|
||||||
for (const fieldRef of acroForm.get("Fields")) {
|
for (const fieldRef of acroForm.get("Fields")) {
|
||||||
@ -1982,7 +1971,7 @@ class PDFDocument {
|
|||||||
Promise.all(promises).then(fields => {
|
Promise.all(promises).then(fields => {
|
||||||
fields = fields.filter(field => !!field);
|
fields = fields.filter(field => !!field);
|
||||||
if (fields.length > 0) {
|
if (fields.length > 0) {
|
||||||
allFields.set(name, fields);
|
allFields[name] = fields;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
@ -1990,7 +1979,7 @@ class PDFDocument {
|
|||||||
await Promise.all(allPromises);
|
await Promise.all(allPromises);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
allFields: allFields.size ? allFields : null,
|
allFields: objectSize(allFields) > 0 ? allFields : null,
|
||||||
orphanFields,
|
orphanFields,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
@ -1998,258 +1987,6 @@ class PDFDocument {
|
|||||||
return shadow(this, "fieldObjects", promise);
|
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() {
|
get hasJSActions() {
|
||||||
const promise = this.pdfManager.ensureDoc("_parseHasJSActions");
|
const promise = this.pdfManager.ensureDoc("_parseHasJSActions");
|
||||||
return shadow(this, "hasJSActions", promise);
|
return shadow(this, "hasJSActions", promise);
|
||||||
@ -2268,9 +2005,9 @@ class PDFDocument {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (fieldObjects?.allFields) {
|
if (fieldObjects?.allFields) {
|
||||||
return fieldObjects.allFields
|
return Object.values(fieldObjects.allFields).some(fieldObject =>
|
||||||
.values()
|
fieldObject.some(object => object.actions !== null)
|
||||||
.some(fieldObj => fieldObj.some(obj => obj.actions !== null));
|
);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -57,8 +57,6 @@ class PageData {
|
|||||||
this.annotations = null;
|
this.annotations = null;
|
||||||
// Named destinations which points to this page.
|
// Named destinations which points to this page.
|
||||||
this.pointingNamedDestinations = null;
|
this.pointingNamedDestinations = null;
|
||||||
// Rank of this page among the output pages sharing the same source page.
|
|
||||||
this.copyLevel = 0;
|
|
||||||
|
|
||||||
documentData.pagesMap.put(page.ref, this);
|
documentData.pagesMap.put(page.ref, this);
|
||||||
}
|
}
|
||||||
@ -106,10 +104,6 @@ class XRefWrapper {
|
|||||||
return this._getNewRef();
|
return this._getNewRef();
|
||||||
}
|
}
|
||||||
|
|
||||||
countUpdatesAfter(offset) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
fetchIfRef(obj) {
|
fetchIfRef(obj) {
|
||||||
return obj instanceof Ref ? this.fetch(obj) : obj;
|
return obj instanceof Ref ? this.fetch(obj) : obj;
|
||||||
}
|
}
|
||||||
@ -265,7 +259,7 @@ class PDFEditor {
|
|||||||
) {
|
) {
|
||||||
if (obj instanceof Ref) {
|
if (obj instanceof Ref) {
|
||||||
const {
|
const {
|
||||||
currentDocument: { fieldToParent, oldRefMapping },
|
currentDocument: { oldRefMapping },
|
||||||
} = this;
|
} = this;
|
||||||
const existingRef = oldRefMapping.get(obj);
|
const existingRef = oldRefMapping.get(obj);
|
||||||
if (existingRef) {
|
if (existingRef) {
|
||||||
@ -273,12 +267,6 @@ class PDFEditor {
|
|||||||
}
|
}
|
||||||
const oldRef = obj;
|
const oldRef = obj;
|
||||||
obj = await xref.fetchAsync(oldRef);
|
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") {
|
if (typeof obj === "number") {
|
||||||
// Simple value; no need to create a new reference.
|
// Simple value; no need to create a new reference.
|
||||||
return obj;
|
return obj;
|
||||||
@ -307,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(
|
this.xref[newRef.num] = await this.#collectDependencies(
|
||||||
obj,
|
obj,
|
||||||
cloneSource,
|
true,
|
||||||
xref,
|
xref,
|
||||||
resourceStreamPath
|
resourceStreamPath
|
||||||
);
|
);
|
||||||
@ -475,7 +455,12 @@ class PDFEditor {
|
|||||||
// Re-entry means a (malformed) cycle back to this stream: allocate its
|
// 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.
|
// reference now to break the loop, like the generic path's eager alloc.
|
||||||
if (resourceStreamPath.has(oldRef)) {
|
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();
|
const key = oldRef.toString();
|
||||||
@ -545,14 +530,6 @@ class PDFEditor {
|
|||||||
return ref;
|
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(
|
async #cloneStructTreeNode(
|
||||||
parentStructRef,
|
parentStructRef,
|
||||||
node,
|
node,
|
||||||
@ -570,11 +547,19 @@ class PDFEditor {
|
|||||||
if (pg instanceof Ref && !pagesMap.has(pg)) {
|
if (pg instanceof Ref && !pagesMap.has(pg)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const k = node.getRaw("K");
|
let kids;
|
||||||
if (k instanceof Ref && visited.has(k)) {
|
const k = (kids = node.getRaw("K"));
|
||||||
return null;
|
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 newKids = [];
|
||||||
const structElemIndices = [];
|
const structElemIndices = [];
|
||||||
for (let kid of kids) {
|
for (let kid of kids) {
|
||||||
@ -635,15 +620,10 @@ class PDFEditor {
|
|||||||
if (!kidRef) {
|
if (!kidRef) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Only keep the reference when its target was actually copied. A link
|
const newKidRef = oldRefMapping.get(kidRef);
|
||||||
// annotation targeting a removed page is dropped, so skip its OBJR.
|
if (!newKidRef) {
|
||||||
const oldObjRef = kid.getRaw("Obj");
|
|
||||||
if (oldObjRef instanceof Ref && !oldRefMapping.get(oldObjRef)) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const newKidRef =
|
|
||||||
oldRefMapping.get(kidRef) ||
|
|
||||||
(await this.#collectDependencies(kidRef, true, xref));
|
|
||||||
const newKid = this.xref[newKidRef.num];
|
const newKid = this.xref[newKidRef.num];
|
||||||
// Fix the missing StructParent entry in the referenced object.
|
// Fix the missing StructParent entry in the referenced object.
|
||||||
const objRef = newKid.getRaw("Obj");
|
const objRef = newKid.getRaw("Obj");
|
||||||
@ -729,21 +709,12 @@ class PDFEditor {
|
|||||||
}
|
}
|
||||||
for (let attr of attributes) {
|
for (let attr of attributes) {
|
||||||
attr = this.xrefWrapper.fetchIfRef(attr);
|
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")) {
|
if (isName(attr.get("O"), "Table") && attr.has("Headers")) {
|
||||||
const headers = this.xrefWrapper.fetchIfRef(attr.getRaw("Headers"));
|
const headers = this.xrefWrapper.fetchIfRef(attr.getRaw("Headers"));
|
||||||
if (Array.isArray(headers)) {
|
if (Array.isArray(headers)) {
|
||||||
for (let i = 0, ii = headers.length; i < ii; i++) {
|
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(
|
const newId = dedupIDs.get(
|
||||||
stringToPDFString(header, /* keepEscapeSequence = */ false)
|
stringToPDFString(headers[i], /* keepEscapeSequence = */ false)
|
||||||
);
|
);
|
||||||
if (newId) {
|
if (newId) {
|
||||||
headers[i] = newId;
|
headers[i] = newId;
|
||||||
@ -1099,18 +1070,10 @@ class PDFEditor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
const copyCounts = new Map();
|
|
||||||
for (let i = 0, ii = this.oldPages.length; i < ii; i++) {
|
for (let i = 0, ii = this.oldPages.length; i < ii; i++) {
|
||||||
const pageData = this.oldPages[i];
|
if (this.oldPages[i] === undefined) {
|
||||||
if (pageData === undefined) {
|
|
||||||
throw new Error("extractPages: sparse pageIndices.");
|
throw new Error("extractPages: sparse pageIndices.");
|
||||||
}
|
}
|
||||||
if (pageData) {
|
|
||||||
const { page } = pageData;
|
|
||||||
const copyLevel = copyCounts.get(page) ?? 0;
|
|
||||||
copyCounts.set(page, copyLevel + 1);
|
|
||||||
pageData.copyLevel = copyLevel;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
promises.length = 0;
|
promises.length = 0;
|
||||||
|
|
||||||
@ -1243,12 +1206,15 @@ class PDFEditor {
|
|||||||
if (!isName(annotationDict.get("Subtype"), "Link")) {
|
if (!isName(annotationDict.get("Subtype"), "Link")) {
|
||||||
if (isName(annotationDict.get("Subtype"), "Widget")) {
|
if (isName(annotationDict.get("Subtype"), "Widget")) {
|
||||||
hasSignatureAnnotations ||= isName(
|
hasSignatureAnnotations ||= isName(
|
||||||
getInheritableProperty({ dict: annotationDict, key: "FT" }),
|
annotationDict.get("FT"),
|
||||||
"Sig"
|
"Sig"
|
||||||
);
|
);
|
||||||
const parentRef = annotationDict.getRaw("Parent") || null;
|
const parentRef = annotationDict.get("Parent") || null;
|
||||||
// The parent will be omitted from the annotation clone to avoid
|
// We remove the parent to avoid visiting it when cloning the
|
||||||
// visiting it, then restored by #mergeAcroForms.
|
// annotation.
|
||||||
|
// It'll be fixed later in #mergeAcroForms when merging the
|
||||||
|
// AcroForms.
|
||||||
|
annotationDict.delete("Parent");
|
||||||
fieldToParent.put(annotationRef, parentRef);
|
fieldToParent.put(annotationRef, parentRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1256,13 +1222,6 @@ class PDFEditor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const action = annotationDict.get("A");
|
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 =
|
const dest =
|
||||||
action instanceof Dict
|
action instanceof Dict
|
||||||
? action.get("D")
|
? action.get("D")
|
||||||
@ -1274,9 +1233,9 @@ class PDFEditor {
|
|||||||
) {
|
) {
|
||||||
// Keep the annotation as is: it isn't linking to a deleted page.
|
// Keep the annotation as is: it isn't linking to a deleted page.
|
||||||
newAnnotations[newAnnotationIndex] = annotationRef;
|
newAnnotations[newAnnotationIndex] = annotationRef;
|
||||||
} else if (dest instanceof Name || typeof dest === "string") {
|
} else if (typeof dest === "string") {
|
||||||
const destString = stringToPDFString(
|
const destString = stringToPDFString(
|
||||||
dest instanceof Name ? dest.name : dest,
|
dest,
|
||||||
/* keepEscapeSequence = */ true
|
/* keepEscapeSequence = */ true
|
||||||
);
|
);
|
||||||
if (destinations.has(destString)) {
|
if (destinations.has(destString)) {
|
||||||
@ -1557,24 +1516,17 @@ class PDFEditor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the kids.
|
// Get the kids.
|
||||||
const rawKids = structTreeRoot.dict.getRaw("K");
|
let kids = structTreeRoot.dict.get("K");
|
||||||
if (!rawKids) {
|
if (!kids) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const kids = await this.#resolveStructKids(rawKids, xref);
|
kids = Array.isArray(kids) ? kids : [kids];
|
||||||
for (let kid of kids) {
|
for (let kid of kids) {
|
||||||
const kidRef = kid instanceof Ref ? kid : null;
|
const kidRef = kid instanceof Ref ? kid : null;
|
||||||
kid = await xref.fetchIfRefAsync(kid);
|
if (kidRef && removedStructElements.has(kidRef)) {
|
||||||
if (!(kid instanceof Dict)) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let setAsSpan = false;
|
kid = await xref.fetchIfRefAsync(kid);
|
||||||
if (kidRef && removedStructElements.has(kidRef)) {
|
|
||||||
if (!isName(kid.get("S"), "Link")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
setAsSpan = true;
|
|
||||||
}
|
|
||||||
const newKidRef = await this.#cloneStructTreeNode(
|
const newKidRef = await this.#cloneStructTreeNode(
|
||||||
kidRef,
|
kidRef,
|
||||||
kid,
|
kid,
|
||||||
@ -1586,12 +1538,6 @@ class PDFEditor {
|
|||||||
);
|
);
|
||||||
if (newKidRef) {
|
if (newKidRef) {
|
||||||
structTreeKids.push(newKidRef);
|
structTreeKids.push(newKidRef);
|
||||||
if (kidRef) {
|
|
||||||
oldRefMapping.put(kidRef, newKidRef);
|
|
||||||
}
|
|
||||||
if (setAsSpan) {
|
|
||||||
this.xref[newKidRef.num].setIfName("S", "Span");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1649,7 +1595,7 @@ class PDFEditor {
|
|||||||
}
|
}
|
||||||
const { destinations, pagesMap } = documentData;
|
const { destinations, pagesMap } = documentData;
|
||||||
const newDestinations = (documentData.destinations = new Map());
|
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 pageRef = dest[0];
|
||||||
const pageData = pageRef instanceof Ref && pagesMap.get(pageRef);
|
const pageData = pageRef instanceof Ref && pagesMap.get(pageRef);
|
||||||
if (!pageData) {
|
if (!pageData) {
|
||||||
@ -2143,34 +2089,22 @@ class PDFEditor {
|
|||||||
* If the document has some fields but no Fields entry in the AcroForm, we
|
* 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
|
* need to fix that by creating a Fields entry with the oldest parent field
|
||||||
* for each field.
|
* for each field.
|
||||||
* @param {RefSetCache} fieldToParent
|
* @param {Map<Ref, Ref>} fieldToParent
|
||||||
* @param {XRef} xref
|
* @param {XRef} xref
|
||||||
* @returns {Array<Ref>}
|
* @returns {Array<Ref>}
|
||||||
*/
|
*/
|
||||||
#fixFields(fieldToParent, xref) {
|
#fixFields(fieldToParent, xref) {
|
||||||
const newFields = [];
|
const newFields = [];
|
||||||
const processed = new RefSet();
|
const processed = new RefSet();
|
||||||
for (const [fieldRef, parentRef] of fieldToParent.items()) {
|
for (const [fieldRef, parentRef] of fieldToParent) {
|
||||||
if (!parentRef) {
|
if (!parentRef) {
|
||||||
newFields.push(fieldRef);
|
newFields.push(fieldRef);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let parent = parentRef;
|
let parent = parentRef;
|
||||||
let lastNonNullParent = parentRef;
|
let lastNonNullParent = parentRef;
|
||||||
const visited = new RefSet();
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (parent instanceof Ref) {
|
parent = xref.fetchIfRef(parent)?.getRaw("Parent") || null;
|
||||||
if (visited.has(parent)) {
|
|
||||||
// Cyclic Parent chain: stop on the field closing the cycle.
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
visited.put(parent);
|
|
||||||
}
|
|
||||||
const parentDict = xref.fetchIfRef(parent);
|
|
||||||
if (!(parentDict instanceof Dict)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
parent = parentDict.getRaw("Parent") || null;
|
|
||||||
if (!parent) {
|
if (!parent) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2243,9 +2177,6 @@ class PDFEditor {
|
|||||||
}
|
}
|
||||||
processed.put(oldKidRef);
|
processed.put(oldKidRef);
|
||||||
const kid = xref.fetchIfRef(oldKidRef);
|
const kid = xref.fetchIfRef(oldKidRef);
|
||||||
if (!(kid instanceof Dict)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (kid.has("Kids")) {
|
if (kid.has("Kids")) {
|
||||||
const kidsArray = kid.get("Kids");
|
const kidsArray = kid.get("Kids");
|
||||||
if (!Array.isArray(kidsArray)) {
|
if (!Array.isArray(kidsArray)) {
|
||||||
@ -2279,7 +2210,11 @@ class PDFEditor {
|
|||||||
if (data.parentRef) {
|
if (data.parentRef) {
|
||||||
newKid.set("Parent", 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.
|
// Fix the DA later since we need to have all the fields tree.
|
||||||
daToFix.push(newKid);
|
daToFix.push(newKid);
|
||||||
}
|
}
|
||||||
@ -2297,10 +2232,6 @@ class PDFEditor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const field of daToFix) {
|
for (const field of daToFix) {
|
||||||
const fieldType = getInheritableProperty({ dict: field, key: "FT" });
|
|
||||||
if (!isName(fieldType, "Tx")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const da = getInheritableProperty({ dict: field, key: "DA" });
|
const da = getInheritableProperty({ dict: field, key: "DA" });
|
||||||
if (!da) {
|
if (!da) {
|
||||||
// No DA in a parent field, we can set the default one.
|
// No DA in a parent field, we can set the default one.
|
||||||
@ -2308,51 +2239,47 @@ class PDFEditor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const resourcesValuesCache = new Map();
|
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) {
|
for (const field of drToFix) {
|
||||||
const ap = field.get("AP");
|
const ap = field.get("AP");
|
||||||
for (const [, value] of ap) {
|
for (const [, value] of ap) {
|
||||||
if (value instanceof BaseStream) {
|
if (!(value instanceof BaseStream)) {
|
||||||
await fixAppearanceResources(value);
|
continue;
|
||||||
} else if (value instanceof Dict) {
|
}
|
||||||
for (const [, stream] of value) {
|
let resources = value.dict.getRaw("Resources");
|
||||||
if (stream instanceof BaseStream) {
|
if (!resources) {
|
||||||
await fixAppearanceResources(stream);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2423,18 +2350,12 @@ class PDFEditor {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a copy of a page.
|
* Create a copy of a page.
|
||||||
* @param {number} pageIndex - Index of the page slot in the new document
|
* @param {number} pageIndex
|
||||||
* (the index of the source page is `page.pageIndex`).
|
|
||||||
* @returns {Promise<Ref>} the page reference in the new PDF document.
|
* @returns {Promise<Ref>} the page reference in the new PDF document.
|
||||||
*/
|
*/
|
||||||
async #makePageCopy(pageIndex) {
|
async #makePageCopy(pageIndex) {
|
||||||
const {
|
const { page, documentData, annotations, pointingNamedDestinations } =
|
||||||
page,
|
this.oldPages[pageIndex];
|
||||||
documentData,
|
|
||||||
annotations,
|
|
||||||
pointingNamedDestinations,
|
|
||||||
copyLevel,
|
|
||||||
} = this.oldPages[pageIndex];
|
|
||||||
this.currentDocument = documentData;
|
this.currentDocument = documentData;
|
||||||
const { dedupNamedDestinations, oldRefMapping } = documentData;
|
const { dedupNamedDestinations, oldRefMapping } = documentData;
|
||||||
const { xref, rotate, mediaBox, resources, ref: oldPageRef } = page;
|
const { xref, rotate, mediaBox, resources, ref: oldPageRef } = page;
|
||||||
@ -2503,11 +2424,9 @@ class PDFEditor {
|
|||||||
|
|
||||||
const newAnnotations =
|
const newAnnotations =
|
||||||
documentData.document === this.#primaryDocument
|
documentData.document === this.#primaryDocument
|
||||||
? this.#newAnnotationsParams?.newAnnotationsByPage
|
? this.#newAnnotationsParams?.newAnnotationsByPage?.get(page.pageIndex)
|
||||||
?.get(page.pageIndex)
|
|
||||||
?.filter(({ copyLevel: level }) => (level ?? 0) === copyLevel)
|
|
||||||
: null;
|
: null;
|
||||||
if (newAnnotations?.length) {
|
if (newAnnotations) {
|
||||||
const { handler, task, imagesPromises } = this.#newAnnotationsParams;
|
const { handler, task, imagesPromises } = this.#newAnnotationsParams;
|
||||||
const changes = new RefSetCache();
|
const changes = new RefSetCache();
|
||||||
const newData = await AnnotationFactory.saveNewAnnotations(
|
const newData = await AnnotationFactory.saveNewAnnotations(
|
||||||
@ -2726,15 +2645,7 @@ class PDFEditor {
|
|||||||
#makeNameNumTree(map, areNames) {
|
#makeNameNumTree(map, areNames) {
|
||||||
const allEntries = map.sort(
|
const allEntries = map.sort(
|
||||||
areNames
|
areNames
|
||||||
? ([keyA], [keyB]) => {
|
? ([keyA], [keyB]) => keyA.localeCompare(keyB)
|
||||||
if (keyA < keyB) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (keyA > keyB) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
: ([keyA], [keyB]) => keyA - keyB
|
: ([keyA], [keyB]) => keyA - keyB
|
||||||
);
|
);
|
||||||
const maxLeaves =
|
const maxLeaves =
|
||||||
@ -2811,7 +2722,7 @@ class PDFEditor {
|
|||||||
/* keepEscapeSequence = */ true
|
/* keepEscapeSequence = */ true
|
||||||
);
|
);
|
||||||
for (let i = 1; ; i++) {
|
for (let i = 1; ; i++) {
|
||||||
const deduped = stringToAsciiOrUTF16BE(`${displayName}_${i}`);
|
const deduped = `${displayName}_${i}`;
|
||||||
if (!embeddedFiles.has(deduped)) {
|
if (!embeddedFiles.has(deduped)) {
|
||||||
name = deduped;
|
name = deduped;
|
||||||
break;
|
break;
|
||||||
@ -2857,10 +2768,7 @@ class PDFEditor {
|
|||||||
this.namesDict.set(
|
this.namesDict.set(
|
||||||
"Dests",
|
"Dests",
|
||||||
this.#makeNameNumTree(
|
this.#makeNameNumTree(
|
||||||
Array.from(namedDestinations, ([name, dest]) => [
|
Array.from(namedDestinations.entries()),
|
||||||
stringToAsciiOrUTF16BE(name),
|
|
||||||
dest,
|
|
||||||
]),
|
|
||||||
/* areNames = */ true
|
/* areNames = */ true
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -2947,7 +2855,7 @@ class PDFEditor {
|
|||||||
acroForm.set("SigFlags", this.acroFormSigFlags);
|
acroForm.set("SigFlags", this.acroFormSigFlags);
|
||||||
}
|
}
|
||||||
acroForm.setIfArray("CO", this.acroFormCalculationOrder);
|
acroForm.setIfArray("CO", this.acroFormCalculationOrder);
|
||||||
acroForm.setIfDefined("DR", this.acroFormDefaultResources);
|
acroForm.setIfDict("DR", this.acroFormDefaultResources);
|
||||||
if (this.acroFormDefaultAppearance) {
|
if (this.acroFormDefaultAppearance) {
|
||||||
acroForm.set("DA", this.acroFormDefaultAppearance);
|
acroForm.set("DA", this.acroFormDefaultAppearance);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -200,7 +200,8 @@ async function createImage(bitmap, xref, { closeBitmap = false } = {}) {
|
|||||||
const colorCounter = new Set();
|
const colorCounter = new Set();
|
||||||
let hasAlpha = false;
|
let hasAlpha = false;
|
||||||
let useFlate = true;
|
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) {
|
if ((isLE ? v >>> 24 : v & 0xff) !== 0xff) {
|
||||||
hasAlpha = true;
|
hasAlpha = true;
|
||||||
break;
|
break;
|
||||||
|
|||||||
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