mirror of
https://github.com/mozilla/pdf.js.git
synced 2026-08-04 05:17:24 +02:00
Compare commits
545 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4ba666b0c | ||
|
|
4c4e8feafd | ||
|
|
f21fe34747 | ||
|
|
ba7bf7b26c | ||
|
|
1da36fb6bf | ||
|
|
92d027eaeb | ||
|
|
5375bff642 | ||
|
|
b1f51818ae | ||
|
|
ae976b924b | ||
|
|
ec691130e6 | ||
|
|
88716313d6 | ||
|
|
82624a5e50 | ||
|
|
7590ad5312 | ||
|
|
923d48ead4 | ||
|
|
1f9fbc764e | ||
|
|
f7f30dd844 | ||
|
|
d2ebbd10de | ||
|
|
09ad726a3f | ||
|
|
d0779c411e | ||
|
|
89852881b8 | ||
|
|
eb8f6af8cc | ||
|
|
f73978083d | ||
|
|
5dc1d0c5d5 | ||
|
|
2475c4ec91 | ||
|
|
08f6769390 | ||
|
|
7862875438 | ||
|
|
cba911df86 | ||
|
|
cec8d2eed6 | ||
|
|
491792f0e2 | ||
|
|
664526ee65 | ||
|
|
7fc7072f9c | ||
|
|
bb1a948397 | ||
|
|
4b4c784a85 | ||
|
|
0f999e27b5 | ||
|
|
af38789499 | ||
|
|
0d5df9d96e | ||
|
|
8960eddfc1 | ||
|
|
ee59db5018 | ||
|
|
ce4ff55faa | ||
|
|
40f6492997 | ||
|
|
613e004b2e | ||
|
|
734b21e61e | ||
|
|
b4d028132b | ||
|
|
a80897dc9a | ||
|
|
0163438e1a | ||
|
|
f70f55d743 | ||
|
|
9e02ceed09 | ||
|
|
803c9d7d21 | ||
|
|
73707b62e9 | ||
|
|
1813ab0774 | ||
|
|
aa812b531a | ||
|
|
61acf93172 | ||
|
|
822d3ea809 | ||
|
|
3a19a20d50 | ||
|
|
4d9007e6f9 | ||
|
|
7f5fd4eba4 | ||
|
|
0365cbde02 | ||
|
|
f704f2ef02 | ||
|
|
01ba4c476d | ||
|
|
0299cdcab9 | ||
|
|
8c3e1014f4 | ||
|
|
14afb8669f | ||
|
|
14fc73bf05 | ||
|
|
257f4c2a5e | ||
|
|
93958e4ff6 | ||
|
|
bc6b5b0f44 | ||
|
|
ac51b29777 | ||
|
|
3736000aee | ||
|
|
8d1afad39b | ||
|
|
c9eaf13ae4 | ||
|
|
1ce8e8a320 | ||
|
|
f38e8b659e | ||
|
|
4b924df453 | ||
|
|
2f873ef13a | ||
|
|
4a11934d1e | ||
|
|
31d49e18de | ||
|
|
5d93c1bdff | ||
|
|
e7acffcef3 | ||
|
|
1609bd87c5 | ||
|
|
a03ec7e8c5 | ||
|
|
63a0f285b8 | ||
|
|
5406d3159b | ||
|
|
2ea8820d92 | ||
|
|
526b69651f | ||
|
|
ce59339829 | ||
|
|
fd612d86bd | ||
|
|
a0f100c4a8 | ||
|
|
010da074af | ||
|
|
f7578565ef | ||
|
|
f38ea2d4cc | ||
|
|
1012c3e500 | ||
|
|
d246a6c495 | ||
|
|
150fbba6e0 | ||
|
|
e2d602122d | ||
|
|
62d211ee8d | ||
|
|
a97d0aa682 | ||
|
|
6963b0ef4f | ||
|
|
b75ca17e85 | ||
|
|
dd41cd487d | ||
|
|
503632a382 | ||
|
|
83844f1261 | ||
|
|
432d5c57a4 | ||
|
|
a9672298fc | ||
|
|
60340d9f28 | ||
|
|
a7b7cec2e7 | ||
|
|
1ee8705093 | ||
|
|
f195bec9b2 | ||
|
|
ac75b10be1 | ||
|
|
27cf9e24f3 | ||
|
|
05e100c76e | ||
|
|
b0f73a321a | ||
|
|
586c3095d8 | ||
|
|
be87eab392 | ||
|
|
a97939b0d7 | ||
|
|
da713dfdd0 | ||
|
|
675e9219b5 | ||
|
|
fe0b880926 | ||
|
|
01642ed10c | ||
|
|
63329559d3 | ||
|
|
47969a5953 | ||
|
|
e58091a769 | ||
|
|
890f2add63 | ||
|
|
388168a2b8 | ||
|
|
c474a97932 | ||
|
|
ed81227557 | ||
|
|
4ea07c2431 | ||
|
|
27a8002f7e | ||
|
|
6c18df5768 | ||
|
|
0c8f67059e | ||
|
|
f988c56394 | ||
|
|
1b48daa461 | ||
|
|
2bdd9e3d9c | ||
|
|
34268e38fc | ||
|
|
876ec4bd96 | ||
|
|
f0bbfa6f9e | ||
|
|
69e26ad319 | ||
|
|
cfb92313fa | ||
|
|
569bae5900 | ||
|
|
6509517da3 | ||
|
|
f97e61a7a2 | ||
|
|
028c02f539 | ||
|
|
d314788368 | ||
|
|
1a1090a0ae | ||
|
|
559ab148a9 | ||
|
|
997dabf5a9 | ||
|
|
67ed457bb8 | ||
|
|
de3eecca11 | ||
|
|
09a45ad2af | ||
|
|
d5661f801f | ||
|
|
778aa450d9 | ||
|
|
cd03276d60 | ||
|
|
547236bcd5 | ||
|
|
ee56dc7719 | ||
|
|
850020a84e | ||
|
|
50601d0341 | ||
|
|
154e82871a | ||
|
|
a3a0d5d9a0 | ||
|
|
299624a2d3 | ||
|
|
5266f13ea4 | ||
|
|
02027ba381 | ||
|
|
ee6d5f2102 | ||
|
|
e6c7ab5425 | ||
|
|
c7dc7d7dd0 | ||
|
|
eddd70a2ca | ||
|
|
d504000012 | ||
|
|
b83274803c | ||
|
|
fd77b3ea9f | ||
|
|
4f7f3baed4 | ||
|
|
8c3941a0d5 | ||
|
|
0a3ed983be | ||
|
|
be89d6475d | ||
|
|
f12c6f64ad | ||
|
|
e624336b2e | ||
|
|
6fbd2227db | ||
|
|
344736bcad | ||
|
|
b2cf8527c6 | ||
|
|
47f2b22842 | ||
|
|
922d57631b | ||
|
|
0f060e1e64 | ||
|
|
dd7e3731d1 | ||
|
|
9720182511 | ||
|
|
eb58ccc100 | ||
|
|
f554d0c9c8 | ||
|
|
9a7335d26b | ||
|
|
16290afa3b | ||
|
|
d473678201 | ||
|
|
f472cb081c | ||
|
|
6d7bca521b | ||
|
|
6e18a52b86 | ||
|
|
244fb9e822 | ||
|
|
2ea9c26d77 | ||
|
|
e909f1f64f | ||
|
|
5f09f797ab | ||
|
|
01454570a7 | ||
|
|
e39b23904c | ||
|
|
914545dea3 | ||
|
|
a3a7247366 | ||
|
|
a18b581f00 | ||
|
|
82c6046e1d | ||
|
|
c661ba1408 | ||
|
|
ff075a9c67 | ||
|
|
4c0dcff572 | ||
|
|
f62702068a | ||
|
|
2cf7d30763 | ||
|
|
d12d215302 | ||
|
|
127470d994 | ||
|
|
e5c0130b80 | ||
|
|
accfa9a162 | ||
|
|
8070e9dce1 | ||
|
|
0b613612ed | ||
|
|
dae773d74a | ||
|
|
b19cc7c746 | ||
|
|
850dccbc17 | ||
|
|
7505eeaeb4 | ||
|
|
ac25471588 | ||
|
|
125f692589 | ||
|
|
a36e5acb30 | ||
|
|
5e3272c929 | ||
|
|
e6a80f4893 | ||
|
|
ae179be764 | ||
|
|
ebaa98b854 | ||
|
|
174fd47973 | ||
|
|
cbdea64c8a | ||
|
|
abae23d6aa | ||
|
|
3435fb0da0 | ||
|
|
5b26d8d413 | ||
|
|
54af145989 | ||
|
|
612fa34760 | ||
|
|
c46720d893 | ||
|
|
199d738917 | ||
|
|
c4574a5470 | ||
|
|
bd845483ac | ||
|
|
4e43e7f1af | ||
|
|
f0822e527e | ||
|
|
8bc2fe68e5 | ||
|
|
d13c28a044 | ||
|
|
f0b5fc3b73 | ||
|
|
d29293622e | ||
|
|
0d5a7d8adc | ||
|
|
18f9aa91b6 | ||
|
|
67d591f413 | ||
|
|
6689097a0a | ||
|
|
98ccc87fdc | ||
|
|
f0818c1860 | ||
|
|
bf924ff31b | ||
|
|
f03e18f336 | ||
|
|
d008aba0b1 | ||
|
|
cde4f9a7ed | ||
|
|
a4ed5b39f4 | ||
|
|
e148b154cd | ||
|
|
0c97aa7555 | ||
|
|
c188012280 | ||
|
|
330cc4f2f4 | ||
|
|
139d5a2951 | ||
|
|
ac101f0381 | ||
|
|
d62118073b | ||
|
|
86dad16df3 | ||
|
|
4fd232a124 | ||
|
|
2bbf32d83d | ||
|
|
36835d919d | ||
|
|
cb70c93e8a | ||
|
|
c79b005db7 | ||
|
|
9c46f48f88 | ||
|
|
be90aa4f46 | ||
|
|
20e0d6de08 | ||
|
|
046e68d140 | ||
|
|
2bc64ec330 | ||
|
|
5b100c4509 | ||
|
|
cca78c1d32 | ||
|
|
32f3906960 | ||
|
|
e414f74375 | ||
|
|
70c52132af | ||
|
|
0c076f5f0b | ||
|
|
14f4cce29d | ||
|
|
0cc1718b02 | ||
|
|
ab90210aa4 | ||
|
|
44ae5b0e9a | ||
|
|
394a08f8b0 | ||
|
|
4952e4d5eb | ||
|
|
95604a3401 | ||
|
|
f373fbfa5b | ||
|
|
34629bd2cf | ||
|
|
12691fdf50 | ||
|
|
a1f1a56080 | ||
|
|
a0061817e6 | ||
|
|
6f2dcd3955 | ||
|
|
f7a4abf9a7 | ||
|
|
d5dafc3fb3 | ||
|
|
15969fbe19 | ||
|
|
0aee1d5382 | ||
|
|
d9999dcedd | ||
|
|
d66bd324fa | ||
|
|
fa207b4ce8 | ||
|
|
43c29379de | ||
|
|
9710372a1b | ||
|
|
89836b76f0 | ||
|
|
ea43bb43fb | ||
|
|
f9aacb1ba1 | ||
|
|
614349086b | ||
|
|
3a3047efc8 | ||
|
|
4d3b747a17 | ||
|
|
9d4f06129c | ||
|
|
2578f6bff6 | ||
|
|
bb9c4af462 | ||
|
|
2ce10c68d5 | ||
|
|
6b0777d55f | ||
|
|
642f4d1b7a | ||
|
|
07b1c625e1 | ||
|
|
b9609d0365 | ||
|
|
25eae30e4e | ||
|
|
649fb9c970 | ||
|
|
3ccc3ec65c | ||
|
|
d142fd2451 | ||
|
|
1651e57e61 | ||
|
|
e4846726ee | ||
|
|
f2f3a7fdce | ||
|
|
a20c46eca0 | ||
|
|
6353acefe5 | ||
|
|
b7b3a4c454 | ||
|
|
8bdd159699 | ||
|
|
195226e3a6 | ||
|
|
d8526132f5 | ||
|
|
82324408cd | ||
|
|
86ffd68c05 | ||
|
|
5d81fe5098 | ||
|
|
a1953e7c3c | ||
|
|
beb332a245 | ||
|
|
10844326c7 | ||
|
|
7f9c54a259 | ||
|
|
eee03693a0 | ||
|
|
7414f6ed5a | ||
|
|
5964e88be1 | ||
|
|
6718c2924c | ||
|
|
44e637a064 | ||
|
|
15d93e1f34 | ||
|
|
8a2c112c20 | ||
|
|
f07a106529 | ||
|
|
04eeeec4a4 | ||
|
|
078b96229d | ||
|
|
e6539f6516 | ||
|
|
7a9abfb2dc | ||
|
|
048331b09a | ||
|
|
56843f9b42 | ||
|
|
7818ab1b9d | ||
|
|
d8ea2afe47 | ||
|
|
4117b75a10 | ||
|
|
813d1949ba | ||
|
|
a1acf4fc9f | ||
|
|
9ca13c9a23 | ||
|
|
09c9f7f2fe | ||
|
|
d71fe9025d | ||
|
|
d537f5ba4b | ||
|
|
b6469341c1 | ||
|
|
7ac6dff4b7 | ||
|
|
22871eef23 | ||
|
|
7f7e63333d | ||
|
|
1ddf6449ac | ||
|
|
28a7606c14 | ||
|
|
623e6d9476 | ||
|
|
9c9b465fd2 | ||
|
|
8ebc2382e3 | ||
|
|
38daede697 | ||
|
|
86b901fcde | ||
|
|
1d8e952062 | ||
|
|
018ba66228 | ||
|
|
a911ce22e5 | ||
|
|
a46ee2b647 | ||
|
|
bd6541864b | ||
|
|
124228e318 | ||
|
|
bff30726fa | ||
|
|
34516bcec3 | ||
|
|
bade1f3190 | ||
|
|
00e1aabe93 | ||
|
|
dfa673290b | ||
|
|
59df671552 | ||
|
|
87361aa094 | ||
|
|
786019eb0d | ||
|
|
e20c810dd4 | ||
|
|
07d4c1018a | ||
|
|
e74be44919 | ||
|
|
b4b0a3fa04 | ||
|
|
a443a635a1 | ||
|
|
3956ac1b39 | ||
|
|
9d9fb06d7f | ||
|
|
187c22126a | ||
|
|
ece1e2ed0c | ||
|
|
2ed018ec2d | ||
|
|
eae42379f2 | ||
|
|
d28030f838 | ||
|
|
cbefb334fd | ||
|
|
5432642250 | ||
|
|
f0dc2166ab | ||
|
|
9ed97a859f | ||
|
|
8bc13d502b | ||
|
|
36eae2c978 | ||
|
|
bc99fc0678 | ||
|
|
fdeed2af5e | ||
|
|
082ad21387 | ||
|
|
6cdd3c19fd | ||
|
|
6c0ad865c6 | ||
|
|
7f7b38b424 | ||
|
|
7d3ec9da1e | ||
|
|
67e6ff0090 | ||
|
|
2550b91be9 | ||
|
|
d9e4cc5f65 | ||
|
|
f781ac33da | ||
|
|
3a09329113 | ||
|
|
0ea67ed96f | ||
|
|
92bd2dbb38 | ||
|
|
26b4206d87 | ||
|
|
6bfefa53da | ||
|
|
66c22b1fc5 | ||
|
|
8560125056 | ||
|
|
ed1b2f91be | ||
|
|
bfcafbc004 | ||
|
|
2dc73ad2a7 | ||
|
|
feec28583d | ||
|
|
1373aa4a48 | ||
|
|
e1c930adfe | ||
|
|
d305b542df | ||
|
|
86a18bd5fe | ||
|
|
68a5ec1403 | ||
|
|
827ddf6e09 | ||
|
|
01948aff23 | ||
|
|
c88f0bba04 | ||
|
|
55c8516944 | ||
|
|
e75a7cfd62 | ||
|
|
5f8f6b1e40 | ||
|
|
ec1e94423b | ||
|
|
5873e1cbc0 | ||
|
|
ffa7ac7a91 | ||
|
|
ca34359e1f | ||
|
|
35d275d3b1 | ||
|
|
4781194b37 | ||
|
|
069b757998 | ||
|
|
131d6b7d38 | ||
|
|
63db4bb777 | ||
|
|
53d0856ee9 | ||
|
|
3b628d59fb | ||
|
|
2466a76ba4 | ||
|
|
587abf0ef4 | ||
|
|
f3f5acc418 | ||
|
|
ac64bcfa2b | ||
|
|
d1926fb179 | ||
|
|
a543d0a2e0 | ||
|
|
ce08a803c4 | ||
|
|
a13f2aa793 | ||
|
|
fe5eb0f779 | ||
|
|
5ca6026d80 | ||
|
|
cb53dbecb9 | ||
|
|
c541d24ac3 | ||
|
|
29ad297626 | ||
|
|
8a80f1b8b7 | ||
|
|
7f5b42140d | ||
|
|
9e5cbcef50 | ||
|
|
cf8677154b | ||
|
|
3602db7456 | ||
|
|
5140371ebe | ||
|
|
380c4c8139 | ||
|
|
ea139e7df1 | ||
|
|
473b53fe3c | ||
|
|
ea4fe68c01 | ||
|
|
ecd43bc8e1 | ||
|
|
879437247b | ||
|
|
f93faae01c | ||
|
|
7b54ec0a8d | ||
|
|
fadd201c09 | ||
|
|
5f83408099 | ||
|
|
52a44a68be | ||
|
|
7a7e4fd382 | ||
|
|
82098f175b | ||
|
|
ff88446d01 | ||
|
|
4a01dd669a | ||
|
|
4112c2953b | ||
|
|
984fcd4bae | ||
|
|
9c0b56ac07 | ||
|
|
f86b5abb05 | ||
|
|
b8ad7c8d0f | ||
|
|
d9eea18876 | ||
|
|
bfc33678da | ||
|
|
43dd2781a0 | ||
|
|
0eca809589 | ||
|
|
f12c463452 | ||
|
|
81f15c3437 | ||
|
|
f4d6b4ef85 | ||
|
|
0b3b101dbc | ||
|
|
a5333f2a92 | ||
|
|
ae30748956 | ||
|
|
2348365874 | ||
|
|
08b704d4b1 | ||
|
|
a7d32f4518 | ||
|
|
9c437e6ab4 | ||
|
|
4ed78beb38 | ||
|
|
e34e11cf78 | ||
|
|
c8fb1be7b6 | ||
|
|
9ab6b743ea | ||
|
|
173e083c71 | ||
|
|
88c52a1523 | ||
|
|
959ce38f5b | ||
|
|
a66782615e | ||
|
|
091f459d2e | ||
|
|
23ea0810d9 | ||
|
|
b9e3a6b5d0 | ||
|
|
7f15bd6591 | ||
|
|
dc3696f23c | ||
|
|
0cc139fdfc | ||
|
|
d619ff3207 | ||
|
|
f45a1b4df5 | ||
|
|
dc602ae543 | ||
|
|
d36d3ab893 | ||
|
|
e4a3e91444 | ||
|
|
936a472f05 | ||
|
|
9071f451a5 | ||
|
|
890edc9265 | ||
|
|
b168293c17 | ||
|
|
4db9e45b8c | ||
|
|
5907d87774 | ||
|
|
836a08084e | ||
|
|
1a7821ab13 | ||
|
|
19046a6949 | ||
|
|
e9a946ec0b | ||
|
|
744c1e6d7a | ||
|
|
e9ee61f67c | ||
|
|
27b345a61e | ||
|
|
a8cf37f6bc | ||
|
|
b43ef1c746 | ||
|
|
065ea625dd | ||
|
|
4e6b7be4d7 | ||
|
|
69e8d6900f | ||
|
|
a6321e7201 | ||
|
|
5fbab91f71 | ||
|
|
94fdea15f4 | ||
|
|
04237100a5 | ||
|
|
345089de1f | ||
|
|
add30f3ca0 | ||
|
|
06439a95c3 | ||
|
|
327822c21f | ||
|
|
af2380060a | ||
|
|
0e1660700a | ||
|
|
5d28cf5e88 | ||
|
|
eef4ea620e | ||
|
|
145feeaa3f | ||
|
|
6701ccd86b | ||
|
|
ce45d5a443 | ||
|
|
8e6e35473f |
31
.gitattributes
vendored
31
.gitattributes
vendored
@ -1,23 +1,24 @@
|
|||||||
# Force Unix line endings for most file formats (except binary files)
|
# Force Unix line endings for most file formats (except binary files)
|
||||||
*.js text eol=lf
|
|
||||||
*.jsm text eol=lf
|
|
||||||
*.css text eol=lf
|
|
||||||
*.html text eol=lf
|
|
||||||
*.md text eol=lf
|
|
||||||
*.ftl text eol=lf
|
|
||||||
*.yml text eol=lf
|
|
||||||
*.json text eol=lf
|
|
||||||
*.config text eol=lf
|
*.config text eol=lf
|
||||||
*.inc text eol=lf
|
*.css text eol=lf
|
||||||
*.manifest text eol=lf
|
*.example text eol=lf
|
||||||
*.rdf text eol=lf
|
*.ftl text eol=lf
|
||||||
*.jade text eol=lf
|
*.html text eol=lf
|
||||||
*.coffee text eol=lf
|
*.js text eol=lf
|
||||||
|
*.json text eol=lf
|
||||||
|
*.link text eol=lf
|
||||||
|
*.md text eol=lf
|
||||||
|
*.mjs text eol=lf
|
||||||
|
*.mts text eol=lf
|
||||||
|
*.njk text eol=lf
|
||||||
|
*.py text eol=lf
|
||||||
|
*.svg text eol=lf
|
||||||
|
*.ts text eol=lf
|
||||||
|
*.txt text eol=lf
|
||||||
|
*.yml 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 +1,7 @@
|
|||||||
moz-fluent-linter==0.4.*
|
# The requirements below can be regenerated with the following one-liner:
|
||||||
|
# `python3 -m venv venv; source venv/bin/activate; pip install -q moz-fluent-linter; pip freeze; deactivate; rm -rf venv`
|
||||||
|
fluent.syntax==0.19.0
|
||||||
|
moz-fluent-linter==0.4.10
|
||||||
|
PyYAML==6.0.3
|
||||||
|
six==1.17.0
|
||||||
|
typing_extensions==4.16.0
|
||||||
|
|||||||
4
.github/font_tests_requirements.txt
vendored
4
.github/font_tests_requirements.txt
vendored
@ -1 +1,3 @@
|
|||||||
fonttools==4.*
|
# The requirements below can be regenerated with the following one-liner:
|
||||||
|
# `python3 -m venv venv; source venv/bin/activate; pip install -q fonttools; pip freeze; deactivate; rm -rf venv`
|
||||||
|
fonttools==4.63.0
|
||||||
|
|||||||
10
.github/workflows/ci.yml
vendored
10
.github/workflows/ci.yml
vendored
@ -16,13 +16,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.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@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||||
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,14 +46,14 @@ 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@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||||
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') }}
|
||||||
enableCrossOsArchive: true
|
enableCrossOsArchive: true
|
||||||
|
|
||||||
- name: Upload results to Codecov
|
- name: Upload results to Codecov
|
||||||
uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
|
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: true
|
||||||
|
|||||||
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
|
uses: github/codeql-action/init@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.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@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
|
uses: github/codeql-action/autobuild@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2
|
||||||
|
|
||||||
- name: Perform CodeQL analysis
|
- name: Perform CodeQL analysis
|
||||||
uses: github/codeql-action/analyze@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
|
uses: github/codeql-action/analyze@e0647621c2984b5ed2f768cb892365bf2a616ad1 # v4.37.2
|
||||||
|
|||||||
101
.github/workflows/coverage_browser_tests.yml
vendored
Normal file
101
.github/workflows/coverage_browser_tests.yml
vendored
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
name: Coverage (Browser tests)
|
||||||
|
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/coverage_browser_tests.yml'
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
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/coverage_browser_tests.yml'
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
workflow_dispatch:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
name: ${{ matrix.os }} / firefox
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
node-version: [lts/*]
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
environment: code-coverage
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
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: Run browser tests with code coverage
|
||||||
|
run: npx gulp botbrowsertest --headless -j$(nproc) --coverage --coverage-output build/coverage/browser --noChrome
|
||||||
|
|
||||||
|
- name: Save cached PDF files
|
||||||
|
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||||
|
with:
|
||||||
|
path: test/pdfs/*.pdf
|
||||||
|
key: cached-pdf-files-${{ hashFiles('test/pdfs/*.pdf') }}
|
||||||
|
enableCrossOsArchive: true
|
||||||
|
|
||||||
|
- name: Upload results to Codecov
|
||||||
|
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
fail_ci_if_error: true
|
||||||
|
files: ./build/coverage/browser/lcov.info
|
||||||
|
flags: browsertest
|
||||||
|
name: codecov-umbrella
|
||||||
|
disable_search: true
|
||||||
|
disable_telem: true
|
||||||
|
verbose: true
|
||||||
6
.github/workflows/fluent_linter.yml
vendored
6
.github/workflows/fluent_linter.yml
vendored
@ -4,6 +4,7 @@ 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
|
||||||
@ -11,6 +12,7 @@ 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
|
||||||
@ -25,12 +27,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Use Python 3.14
|
- name: Use Python 3.14
|
||||||
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
||||||
with:
|
with:
|
||||||
python-version: '3.14'
|
python-version: '3.14'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
|||||||
14
.github/workflows/font_tests.yml
vendored
14
.github/workflows/font_tests.yml
vendored
@ -3,18 +3,24 @@ on:
|
|||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
|
- '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
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
|
- '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
|
||||||
@ -43,13 +49,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -58,7 +64,7 @@ jobs:
|
|||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Use Python 3.14
|
- name: Use Python 3.14
|
||||||
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.0.2
|
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
||||||
with:
|
with:
|
||||||
python-version: '3.14'
|
python-version: '3.14'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
@ -71,7 +77,7 @@ jobs:
|
|||||||
run: npx gulp fonttest --headless --coverage --coverage-output build/coverage/font ${{ matrix.skip }}
|
run: npx gulp fonttest --headless --coverage --coverage-output build/coverage/font ${{ matrix.skip }}
|
||||||
|
|
||||||
- name: Upload results to Codecov
|
- name: Upload results to Codecov
|
||||||
uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
|
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: true
|
||||||
|
|||||||
16
.github/workflows/integration_tests.yml
vendored
16
.github/workflows/integration_tests.yml
vendored
@ -3,7 +3,8 @@ on:
|
|||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/builder/**'
|
- 'external/**'
|
||||||
|
- 'package-lock.json'
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/test.mjs'
|
- 'test/test.mjs'
|
||||||
- 'test/integration/**'
|
- 'test/integration/**'
|
||||||
@ -14,7 +15,8 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/builder/**'
|
- 'external/**'
|
||||||
|
- 'package-lock.json'
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/test.mjs'
|
- 'test/test.mjs'
|
||||||
- 'test/integration/**'
|
- 'test/integration/**'
|
||||||
@ -47,13 +49,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -62,7 +64,7 @@ jobs:
|
|||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Restore cached PDF files
|
- name: Restore cached PDF files
|
||||||
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||||
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') }}
|
||||||
@ -87,14 +89,14 @@ 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@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||||
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') }}
|
||||||
enableCrossOsArchive: true
|
enableCrossOsArchive: true
|
||||||
|
|
||||||
- name: Upload results to Codecov
|
- name: Upload results to Codecov
|
||||||
uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
|
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: true
|
||||||
|
|||||||
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.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
Normal file
185
.github/workflows/publish_coverage_index.yml
vendored
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.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,6 +6,12 @@ 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
|
||||||
@ -17,13 +23,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
|
|||||||
16
.github/workflows/unit_tests.yml
vendored
16
.github/workflows/unit_tests.yml
vendored
@ -3,7 +3,8 @@ on:
|
|||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/builder/**'
|
- 'external/**'
|
||||||
|
- 'package-lock.json'
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/test.mjs'
|
- 'test/test.mjs'
|
||||||
- 'test/unit/**'
|
- 'test/unit/**'
|
||||||
@ -14,7 +15,8 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- 'gulpfile.mjs'
|
- 'gulpfile.mjs'
|
||||||
- 'external/builder/**'
|
- 'external/**'
|
||||||
|
- 'package-lock.json'
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'test/test.mjs'
|
- 'test/test.mjs'
|
||||||
- 'test/unit/**'
|
- 'test/unit/**'
|
||||||
@ -47,13 +49,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
@ -62,7 +64,7 @@ jobs:
|
|||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Restore cached PDF files
|
- name: Restore cached PDF files
|
||||||
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||||
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') }}
|
||||||
@ -74,14 +76,14 @@ 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@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||||
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') }}
|
||||||
enableCrossOsArchive: true
|
enableCrossOsArchive: true
|
||||||
|
|
||||||
- name: Upload results to Codecov
|
- name: Upload results to Codecov
|
||||||
uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
|
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: true
|
||||||
|
|||||||
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||||
with:
|
with:
|
||||||
node-version: lts/*
|
node-version: lts/*
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
|
|||||||
@ -1,9 +1,13 @@
|
|||||||
{
|
{
|
||||||
"chrome": {
|
"chrome": {
|
||||||
"skipDownload": false
|
"skipDownload": true,
|
||||||
|
"version": "stable"
|
||||||
|
},
|
||||||
|
"chrome-headless-shell": {
|
||||||
|
"skipDownload": true
|
||||||
},
|
},
|
||||||
"firefox": {
|
"firefox": {
|
||||||
"skipDownload": false,
|
"skipDownload": true,
|
||||||
"version": "nightly"
|
"version": "nightly"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
84
README.md
84
README.md
@ -46,7 +46,7 @@ directory `build/chromium`.
|
|||||||
|
|
||||||
### PDF debugger
|
### PDF debugger
|
||||||
|
|
||||||
Browser the internal structure of a PDF document with https://mozilla.github.io/pdf.js/internal-viewer/web/debugger.html
|
Browse the internal structure of a PDF document with https://mozilla.github.io/pdf.js/internal-viewer/web/debugger.html
|
||||||
|
|
||||||
## Getting the Code
|
## Getting the Code
|
||||||
|
|
||||||
@ -91,6 +91,88 @@ This will generate `pdf.js` and `pdf.worker.js` in the `build/generic/build/` di
|
|||||||
Both scripts are needed but only `pdf.js` needs to be included since `pdf.worker.js` will
|
Both scripts are needed but only `pdf.js` needs to be included since `pdf.worker.js` will
|
||||||
be loaded by `pdf.js`. The PDF.js files are large and should be minified for production.
|
be loaded by `pdf.js`. The PDF.js files are large and should be minified for production.
|
||||||
|
|
||||||
|
## Code coverage
|
||||||
|
|
||||||
|
We track how much of the code is exercised by the test suite on
|
||||||
|
[Codecov](https://codecov.io/gh/mozilla/pdf.js) (see the badge at the top of this
|
||||||
|
file).
|
||||||
|
|
||||||
|
### How it is collected
|
||||||
|
|
||||||
|
When coverage is enabled, the build instruments the bundled code with
|
||||||
|
[`babel-plugin-istanbul`](https://github.com/istanbuljs/babel-plugin-istanbul),
|
||||||
|
which adds counters that record every line, branch and function that runs:
|
||||||
|
|
||||||
|
+ For browser-based tests (unit, integration and reference tests) the
|
||||||
|
instrumented code runs in the browser, fills a global `window.__coverage__`
|
||||||
|
object, and the test runner collects it from each browser session, merges the
|
||||||
|
results, and writes the report.
|
||||||
|
+ For the Node-based unit tests (`unittestcli`) the raw data is written to
|
||||||
|
`build/tmp/unittestcli-coverage.json` and turned into a report afterwards.
|
||||||
|
|
||||||
|
### Collecting coverage locally
|
||||||
|
|
||||||
|
Add the `--coverage` flag to any of the test tasks, for example:
|
||||||
|
|
||||||
|
$ npx gulp unittest --coverage # browser unit tests
|
||||||
|
$ npx gulp unittestcli --coverage # Node unit tests
|
||||||
|
$ npx gulp integrationtest --coverage # Puppeteer integration tests
|
||||||
|
$ npx gulp botbrowsertest --coverage # reference tests
|
||||||
|
|
||||||
|
The following options control the output:
|
||||||
|
|
||||||
|
| Option | Description | Default |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `--coverage` | Enable coverage collection. | off |
|
||||||
|
| `--coverage-output <dir>` | Directory where the report is written. | `build/coverage` |
|
||||||
|
| `--coverage-formats <list>` | Comma-separated list of formats: `info`, `html`, `json`, `text`, `cobertura`, `clover`. | `info` |
|
||||||
|
| `--coverage-per-test` | Also build a per-test index (see below). | off |
|
||||||
|
|
||||||
|
By default the report is written to `build/coverage` in the `info` format, i.e.
|
||||||
|
an [LCOV](https://github.com/linux-test-project/lcov) `lcov.info` file (the same
|
||||||
|
format that is uploaded to Codecov). Use `--coverage-formats html` to get a
|
||||||
|
browsable HTML report instead, or pass several formats at once, e.g.
|
||||||
|
`--coverage-formats info,html`.
|
||||||
|
|
||||||
|
### Finding which tests cover a given line
|
||||||
|
|
||||||
|
`coverage_search` lists the ref tests that exercised a specific source line or
|
||||||
|
function. It uses the per-test index (`per-test-index.json`) that is rebuilt on
|
||||||
|
every push to `master` and published to the
|
||||||
|
[`pdf.js.refs`](https://github.com/mozilla/pdf.js.refs/tree/gh-pages)
|
||||||
|
repository. The index is downloaded on demand, cached locally, and only
|
||||||
|
re-downloaded when it has changed, so no local coverage build is required:
|
||||||
|
|
||||||
|
$ npx gulp coverage_search --code="canvas.js::205"
|
||||||
|
$ npx gulp coverage_search --code="canvas.js::drawImageAtIntegerCoords"
|
||||||
|
|
||||||
|
To run — or regenerate the reference images for — only the ref tests that touch
|
||||||
|
a given line or function, pass the same `--code` option to a browser test or
|
||||||
|
`makeref` task:
|
||||||
|
|
||||||
|
$ npx gulp browsertest --code="canvas.js::205"
|
||||||
|
$ npx gulp makeref --code="canvas.js::205"
|
||||||
|
|
||||||
|
Pass `--no-download` to reuse the locally cached index without contacting the
|
||||||
|
network. The index can also be built and queried locally (the CI job that
|
||||||
|
publishes it builds it the same way):
|
||||||
|
|
||||||
|
$ npx gulp botbrowsertest --coverage-per-test
|
||||||
|
$ npx gulp coverage_search --code="canvas.js::205" \
|
||||||
|
--index=build/coverage/per-test-index.json --no-download
|
||||||
|
|
||||||
|
### Continuous integration
|
||||||
|
|
||||||
|
On every push and pull request three GitHub Actions workflows collect coverage
|
||||||
|
and upload it to Codecov, each tagged with its own Codecov *flag* so the test
|
||||||
|
types can be told apart:
|
||||||
|
|
||||||
|
| Workflow | Task | Codecov flag |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `unit_tests.yml` | `unittest` | `unittest` |
|
||||||
|
| `integration_tests.yml` | `integrationtest` | `integrationtest` |
|
||||||
|
| `coverage_browser_tests.yml` | `botbrowsertest` | `browsertest` |
|
||||||
|
|
||||||
## Using PDF.js in a web application
|
## Using PDF.js in a web application
|
||||||
|
|
||||||
To use PDF.js in a web application you can choose to use a pre-built version of the library
|
To use PDF.js in a web application you can choose to use a pre-built version of the library
|
||||||
|
|||||||
@ -178,6 +178,11 @@ 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 = value || "auto";
|
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 && chromeVersion[1];
|
chromeVersion &&= chromeVersion[1];
|
||||||
if (!chromeVersion || localStorage.telemetryLastVersion === chromeVersion) {
|
if (!chromeVersion || localStorage.telemetryLastVersion === chromeVersion) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -319,6 +319,16 @@ 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,
|
||||||
@ -327,6 +337,7 @@ function preprocessPDFJSCode(ctx, content) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
babelPluginAddHeaderComment,
|
||||||
babelPluginPDFJSPreprocessor,
|
babelPluginPDFJSPreprocessor,
|
||||||
babelPluginStripSrcPath,
|
babelPluginStripSrcPath,
|
||||||
preprocessPDFJSCode,
|
preprocessPDFJSCode,
|
||||||
|
|||||||
23
external/builder/builder.mjs
vendored
23
external/builder/builder.mjs
vendored
@ -73,10 +73,7 @@ function preprocess(inFilename, outFilename, defines) {
|
|||||||
const out = [];
|
const out = [];
|
||||||
let i = 0;
|
let i = 0;
|
||||||
function readLine() {
|
function readLine() {
|
||||||
if (i < totalLines) {
|
return i < totalLines ? lines[i++] : null;
|
||||||
return lines[i++];
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
const writeLine =
|
const writeLine =
|
||||||
typeof outFilename === "function"
|
typeof outFilename === "function"
|
||||||
@ -113,16 +110,9 @@ 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 {
|
||||||
let fullpath;
|
const fullpath = file.startsWith("$ROOT/")
|
||||||
if (file.indexOf("$ROOT/") === 0) {
|
? path.join(__dirname, "../..", file.substring("$ROOT/".length))
|
||||||
fullpath = path.join(
|
: path.join(dir, file);
|
||||||
__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") {
|
||||||
@ -134,10 +124,7 @@ 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);
|
||||||
if (variable in defines) {
|
return variable in defines ? defines[variable] : "";
|
||||||
return defines[variable];
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
});
|
});
|
||||||
writeLine(line);
|
writeLine(line);
|
||||||
}
|
}
|
||||||
|
|||||||
159
external/ccov/coverage_search.mjs
vendored
159
external/ccov/coverage_search.mjs
vendored
@ -20,26 +20,46 @@ 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, "../..");
|
||||||
|
|
||||||
const { values } = parseArgs({
|
// The per-test coverage index (which ref test exercises which source
|
||||||
|
// line/function) is rebuilt on every push to master and published to the
|
||||||
|
// gh-pages branch of the pdf.js.refs repository.
|
||||||
|
const PER_TEST_INDEX_URL =
|
||||||
|
"https://raw.githubusercontent.com/mozilla/pdf.js.refs/gh-pages/per-test-index.json";
|
||||||
|
|
||||||
|
let values;
|
||||||
|
try {
|
||||||
|
({ values } = parseArgs({
|
||||||
args: process.argv.slice(2),
|
args: process.argv.slice(2),
|
||||||
options: {
|
options: {
|
||||||
code: { type: "string" },
|
code: { type: "string" },
|
||||||
"coverage-dir": { type: "string", default: "build/coverage" },
|
index: { type: "string", default: "build/per-test-index.json" },
|
||||||
|
"no-download": { type: "boolean", default: false },
|
||||||
help: { type: "boolean", short: "h", 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> [--coverage-dir=<path>]\n\n" +
|
"Usage: coverage_search.mjs --code=<file>::<line|function> [--index=<path>] [--no-download]\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" +
|
||||||
" --coverage-dir Coverage directory containing per-test-index.json [build/coverage]\n\n" +
|
" --index Where to cache or read the per-test index.\n" +
|
||||||
|
" [build/per-test-index.json]\n" +
|
||||||
|
" --no-download Don't contact the network; use the cached index as-is.\n\n" +
|
||||||
"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" +
|
"function (one ID per line).\n\n" +
|
||||||
"Run browsertest with --coverage-per-test first to generate the index."
|
"The index is downloaded from the pdf.js.refs repository and cached locally;\n" +
|
||||||
|
"it is only re-downloaded when the published file has changed.\n" +
|
||||||
|
`Source: ${PER_TEST_INDEX_URL}`
|
||||||
);
|
);
|
||||||
process.exit(values.help ? 0 : 1);
|
process.exit(values.help ? 0 : 1);
|
||||||
}
|
}
|
||||||
@ -58,18 +78,129 @@ 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 coverageDir = path.isAbsolute(values["coverage-dir"])
|
const indexPath = path.isAbsolute(values.index)
|
||||||
? values["coverage-dir"]
|
? values.index
|
||||||
: path.join(PROJECT_ROOT, values["coverage-dir"]);
|
: path.join(PROJECT_ROOT, values.index);
|
||||||
|
// The ETag of the cached copy is stored alongside it, so the next run can ask
|
||||||
|
// the server (via If-None-Match) to only re-send the file when it has changed.
|
||||||
|
const etagPath = `${indexPath}.etag`;
|
||||||
|
|
||||||
|
// Refreshes the locally cached index from the published copy, downloading it
|
||||||
|
// only when it has changed since the last run. When the network is unavailable
|
||||||
|
// a previously cached copy is reused if present.
|
||||||
|
async function refreshIndex() {
|
||||||
|
if (values["no-download"]) {
|
||||||
|
return; // Freshness check disabled; the read below validates existence.
|
||||||
|
}
|
||||||
|
|
||||||
|
const hasCached = fs.existsSync(indexPath);
|
||||||
|
|
||||||
|
// On any download failure, fall back to a previously cached copy when one
|
||||||
|
// exists; otherwise there's nothing to search, so fail.
|
||||||
|
const fallbackOrFail = reason => {
|
||||||
|
if (hasCached) {
|
||||||
|
console.error(
|
||||||
|
`Warning: couldn't refresh per-test index (${reason}); using the cached copy.`
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.error(`Error: couldn't download per-test index (${reason}).`);
|
||||||
|
process.exit(1);
|
||||||
|
};
|
||||||
|
|
||||||
|
const headers = new Headers();
|
||||||
|
if (hasCached && fs.existsSync(etagPath)) {
|
||||||
|
const etag = fs.readFileSync(etagPath, "utf8").trim();
|
||||||
|
// Only forward a syntactically valid HTTP ETag (RFC 7232), so the cached
|
||||||
|
// file's contents can't be used to inject arbitrary data into the request.
|
||||||
|
if (/^(?:W\/)?"[\x21\x23-\x7e]*"$/.test(etag)) {
|
||||||
|
headers.set("If-None-Match", etag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let response;
|
||||||
|
try {
|
||||||
|
console.log(`Fetching per-test index from ${PER_TEST_INDEX_URL} ...`);
|
||||||
|
response = await fetch(PER_TEST_INDEX_URL, { headers });
|
||||||
|
} catch (error) {
|
||||||
|
fallbackOrFail(error.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.status === 304) {
|
||||||
|
console.log("Per-test index is up to date.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!response.ok) {
|
||||||
|
fallbackOrFail(`HTTP ${response.status}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let text;
|
||||||
|
try {
|
||||||
|
text = await response.text();
|
||||||
|
} catch (error) {
|
||||||
|
fallbackOrFail(error.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse the payload before caching it, and cache the re-serialized result
|
||||||
|
// rather than the raw response body: only well-formed JSON produced by our
|
||||||
|
// own JSON.stringify is ever written to disk.
|
||||||
|
let serialized;
|
||||||
|
try {
|
||||||
|
serialized = JSON.stringify(JSON.parse(text));
|
||||||
|
} catch {
|
||||||
|
fallbackOrFail("the downloaded index is not valid JSON");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write to a temporary file and rename it into place.
|
||||||
|
try {
|
||||||
|
fs.mkdirSync(path.dirname(indexPath), { recursive: true });
|
||||||
|
const tmpPath = `${indexPath}.${process.pid}.tmp`;
|
||||||
|
fs.writeFileSync(tmpPath, serialized);
|
||||||
|
fs.renameSync(tmpPath, indexPath);
|
||||||
|
|
||||||
|
const etag = response.headers.get("etag");
|
||||||
|
if (etag) {
|
||||||
|
fs.writeFileSync(etagPath, etag);
|
||||||
|
} else {
|
||||||
|
fs.rmSync(etagPath, { force: true });
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// A write failure (disk full, read-only dir, ...) shouldn't be fatal when
|
||||||
|
// a usable cached copy already exists.
|
||||||
|
fallbackOrFail(error.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log(`Per-test index updated (${serialized.length} bytes).`);
|
||||||
|
}
|
||||||
|
|
||||||
|
await refreshIndex();
|
||||||
|
|
||||||
const indexPath = path.join(coverageDir, "per-test-index.json");
|
|
||||||
if (!fs.existsSync(indexPath)) {
|
if (!fs.existsSync(indexPath)) {
|
||||||
console.error(`Error: index file not found: ${indexPath}`);
|
console.error(`Error: per-test index not found: ${indexPath}`);
|
||||||
console.error("Run browsertest with --coverage-per-test first.");
|
console.error(
|
||||||
|
"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);
|
||||||
}
|
}
|
||||||
|
|
||||||
const { ids, files } = JSON.parse(fs.readFileSync(indexPath, "utf8"));
|
let ids, files;
|
||||||
|
try {
|
||||||
|
({ ids, files } = JSON.parse(fs.readFileSync(indexPath, "utf8")));
|
||||||
|
} catch (error) {
|
||||||
|
console.error(
|
||||||
|
`Error: couldn't read per-test index at ${indexPath}: ${error.message}`
|
||||||
|
);
|
||||||
|
console.error(
|
||||||
|
"The cached index may be corrupt; delete it and re-run without " +
|
||||||
|
"--no-download to refetch it."
|
||||||
|
);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
// 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.indexOf("80") === 0) {
|
while (s.startsWith("80")) {
|
||||||
s = s.substring(2);
|
s = s.substring(2);
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
|
|||||||
45
external/qcms/qcms.js
vendored
45
external/qcms/qcms.js
vendored
@ -1,5 +1,5 @@
|
|||||||
/* THIS FILE IS GENERATED - DO NOT EDIT */
|
/* THIS FILE IS GENERATED - DO NOT EDIT */
|
||||||
import { copy_result, copy_rgb, make_cssRGB } from './qcms_utils.js';
|
import { copy_result } from './qcms_utils.js';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -25,16 +25,20 @@ 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) {
|
export function qcms_convert_array(transformer, src, add_alpha) {
|
||||||
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);
|
wasm.qcms_convert_array(transformer, ptr0, len0, add_alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -46,10 +50,11 @@ export function qcms_convert_array(transformer, src) {
|
|||||||
* @param {number} src2
|
* @param {number} src2
|
||||||
* @param {number} src3
|
* @param {number} src3
|
||||||
* @param {number} src4
|
* @param {number} src4
|
||||||
* @param {boolean} css
|
* @returns {number}
|
||||||
*/
|
*/
|
||||||
export function qcms_convert_four(transformer, src1, src2, src3, src4, css) {
|
export function qcms_convert_four(transformer, src1, src2, src3, src4) {
|
||||||
wasm.qcms_convert_four(transformer, src1, src2, src3, src4, css);
|
const ret = wasm.qcms_convert_four(transformer, src1, src2, src3, src4);
|
||||||
|
return ret >>> 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -58,10 +63,11 @@ export function qcms_convert_four(transformer, src1, src2, src3, src4, css) {
|
|||||||
* 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
|
||||||
* @param {boolean} css
|
* @returns {number}
|
||||||
*/
|
*/
|
||||||
export function qcms_convert_one(transformer, src, css) {
|
export function qcms_convert_one(transformer, src) {
|
||||||
wasm.qcms_convert_one(transformer, src, css);
|
const ret = wasm.qcms_convert_one(transformer, src);
|
||||||
|
return ret >>> 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -72,10 +78,11 @@ export function qcms_convert_one(transformer, src, css) {
|
|||||||
* @param {number} src1
|
* @param {number} src1
|
||||||
* @param {number} src2
|
* @param {number} src2
|
||||||
* @param {number} src3
|
* @param {number} src3
|
||||||
* @param {boolean} css
|
* @returns {number}
|
||||||
*/
|
*/
|
||||||
export function qcms_convert_three(transformer, src1, src2, src3, css) {
|
export function qcms_convert_three(transformer, src1, src2, src3) {
|
||||||
wasm.qcms_convert_three(transformer, src1, src2, src3, css);
|
const ret = wasm.qcms_convert_three(transformer, src1, src2, src3);
|
||||||
|
return ret >>> 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -106,18 +113,12 @@ 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_6b64449b9b9ed33c: function(arg0, arg1) {
|
__wbg___wbindgen_throw_344f42d3211c4765: 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);
|
||||||
@ -135,8 +136,7 @@ function __wbg_get_imports() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getStringFromWasm0(ptr, len) {
|
function getStringFromWasm0(ptr, len) {
|
||||||
ptr = ptr >>> 0;
|
return decodeText(ptr >>> 0, len);
|
||||||
return decodeText(ptr, len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let cachedUint8ArrayMemory0 = null;
|
let cachedUint8ArrayMemory0 = null;
|
||||||
@ -170,8 +170,9 @@ function decodeText(ptr, len) {
|
|||||||
|
|
||||||
let WASM_VECTOR_LEN = 0;
|
let WASM_VECTOR_LEN = 0;
|
||||||
|
|
||||||
let wasmModule, wasm;
|
let wasmModule, wasmInstance, 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.
68
external/qcms/qcms_utils.js
vendored
68
external/qcms/qcms_utils.js
vendored
@ -13,22 +13,28 @@
|
|||||||
* 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;
|
||||||
|
|
||||||
static _mustAddAlpha = false;
|
// Where the next `qcms_convert_array` result should land.
|
||||||
|
|
||||||
static _destBuffer = null;
|
static _destBuffer = null;
|
||||||
|
|
||||||
static _destOffset = 0;
|
static _destOffset = 0;
|
||||||
|
|
||||||
static _destLength = 0;
|
// Set when the destination is RGBA and its alpha channel already holds
|
||||||
|
// something worth keeping, which is the case whenever the image has an
|
||||||
static _cssColor = "";
|
// /SMask: `fillOpacity` has run by then. The Wasm side does not know about
|
||||||
|
// that, so it always fills alpha in, and the bytes are merged here instead of
|
||||||
static _makeHexColor = null;
|
// copied wholesale.
|
||||||
|
static _keepAlpha = false;
|
||||||
|
|
||||||
static get _memoryArray() {
|
static get _memoryArray() {
|
||||||
const array = this.#memoryArray;
|
const array = this.#memoryArray;
|
||||||
@ -42,43 +48,31 @@ 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.
|
// to the destination buffer without any intermediate copies. The wasm side
|
||||||
const { _mustAddAlpha, _destBuffer, _destOffset, _destLength, _memoryArray } =
|
// has already laid the result out the way the caller asked for it, so this is
|
||||||
QCMS;
|
// one bulk copy unless the destination's alpha has to survive.
|
||||||
if (len === _destLength) {
|
const { _destBuffer, _destOffset, _keepAlpha, _memoryArray } = QCMS;
|
||||||
|
if (!_keepAlpha) {
|
||||||
_destBuffer.set(_memoryArray.subarray(ptr, ptr + len), _destOffset);
|
_destBuffer.set(_memoryArray.subarray(ptr, ptr + len), _destOffset);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_mustAddAlpha) {
|
const count = len >> 2;
|
||||||
for (let i = ptr, ii = ptr + len, j = _destOffset; i < ii; i += 3, j += 4) {
|
const destStart = _destBuffer.byteOffset + _destOffset;
|
||||||
_destBuffer[j] = _memoryArray[i];
|
if (((destStart | ptr) & 3) === 0) {
|
||||||
_destBuffer[j + 1] = _memoryArray[i + 1];
|
// Both sides are pixel-aligned, so RGB can be merged a whole pixel at a
|
||||||
_destBuffer[j + 2] = _memoryArray[i + 2];
|
// time. `len` is a multiple of 4 here: the wasm side wrote RGBA.
|
||||||
_destBuffer[j + 3] = 255;
|
const dest32 = new Uint32Array(_destBuffer.buffer, destStart, count);
|
||||||
|
const src32 = new Uint32Array(QCMS._memory.buffer, ptr, count);
|
||||||
|
for (let i = 0; i < count; i++) {
|
||||||
|
dest32[i] = (dest32[i] & ALPHA_MASK) | (src32[i] & RGB_MASK);
|
||||||
}
|
}
|
||||||
} else {
|
return;
|
||||||
for (let i = ptr, ii = ptr + len, j = _destOffset; i < ii; i += 3, j += 4) {
|
}
|
||||||
|
for (let i = ptr, ii = ptr + len, j = _destOffset; i < ii; i += 4, j += 4) {
|
||||||
_destBuffer[j] = _memoryArray[i];
|
_destBuffer[j] = _memoryArray[i];
|
||||||
_destBuffer[j + 1] = _memoryArray[i + 1];
|
_destBuffer[j + 1] = _memoryArray[i + 1];
|
||||||
_destBuffer[j + 2] = _memoryArray[i + 2];
|
_destBuffer[j + 2] = _memoryArray[i + 2];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function copy_rgb(ptr) {
|
export { copy_result, QCMS };
|
||||||
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 };
|
|
||||||
|
|||||||
20
external/quickjs/quickjs-eval.js
vendored
20
external/quickjs/quickjs-eval.js
vendored
@ -2,15 +2,15 @@
|
|||||||
async function QuickJS(moduleArg={}){var moduleRtn;var e=moduleArg,aa=import.meta.url,h="",m;try{h=(new URL(".",aa)).href}catch{}m=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);};var q=console.error.bind(console),r,t=!1,u,v,w,x=!1;function y(){var a=z.buffer;A=new Int8Array(a);new Int16Array(a);B=new Uint8Array(a);new Uint16Array(a);C=new Int32Array(a);D=new Uint32Array(a);new Float32Array(a);new Float64Array(a);new BigInt64Array(a);new BigUint64Array(a)}
|
async function QuickJS(moduleArg={}){var moduleRtn;var e=moduleArg,aa=import.meta.url,h="",m;try{h=(new URL(".",aa)).href}catch{}m=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);};var q=console.error.bind(console),r,t=!1,u,v,w,x=!1;function y(){var a=z.buffer;A=new Int8Array(a);new Int16Array(a);B=new Uint8Array(a);new Uint16Array(a);C=new Int32Array(a);D=new Uint32Array(a);new Float32Array(a);new Float64Array(a);new BigInt64Array(a);new BigUint64Array(a)}
|
||||||
function E(a){e.onAbort?.(a);a=`Aborted(${a})`;q(a);t=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");w?.(a);throw a;}var F;async function ba(a){if(!r)try{var b=await m(a);return new Uint8Array(b)}catch{}if(a==F&&r)a=new Uint8Array(r);else throw"both async and sync fetching of the wasm failed";return a}async function ca(a,b){try{var c=await ba(a);return await WebAssembly.instantiate(c,b)}catch(d){q(`failed to asynchronously prepare wasm: ${d}`),E(d)}}
|
function E(a){e.onAbort?.(a);a=`Aborted(${a})`;q(a);t=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");w?.(a);throw a;}var F;async function ba(a){if(!r)try{var b=await m(a);return new Uint8Array(b)}catch{}if(a==F&&r)a=new Uint8Array(r);else throw"both async and sync fetching of the wasm failed";return a}async function ca(a,b){try{var c=await ba(a);return await WebAssembly.instantiate(c,b)}catch(d){q(`failed to asynchronously prepare wasm: ${d}`),E(d)}}
|
||||||
async function da(a){var b=F;if(!r)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){q(`wasm streaming compile failed: ${d}`),q("falling back to ArrayBuffer instantiation")}return ca(b,a)}class G{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}}
|
async function da(a){var b=F;if(!r)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){q(`wasm streaming compile failed: ${d}`),q("falling back to ArrayBuffer instantiation")}return ca(b,a)}class G{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}}
|
||||||
var C,A,D,B,H=a=>{for(;0<a.length;)a.shift()(e)},I=[],J=[],ea=()=>{var a=e.preRun.shift();J.push(a)},K=!0,L=0,fa=[0,31,60,91,121,152,182,213,244,274,305,335],ha=[0,31,59,90,120,151,181,212,243,273,304,334],M={},N=a=>{if(!(a instanceof G||"unwind"==a))throw a;},O=a=>{u=a;K||0<L||(e.onExit?.(a),t=!0);throw new G(a);},ia=a=>{if(!t)try{a()}catch(b){N(b)}finally{if(!(K||0<L))try{u=a=u,O(a)}catch(b){N(b)}}},P=(a,b,c)=>{var d=B;if(0<c){c=b+c-1;for(var g=0;g<a.length;++g){var f=a.codePointAt(g);if(127>=f){if(b>=
|
var C,A,D,B,H=a=>{for(;a.length>0;)a.shift()(e)},I=[],J=[],ea=()=>{var a=e.preRun.shift();J.push(a)},K=!0,L=0,fa=[0,31,60,91,121,152,182,213,244,274,305,335],ha=[0,31,59,90,120,151,181,212,243,273,304,334],M={},N=a=>{if(!(a instanceof G||a=="unwind"))throw a;},O=a=>{u=a;K||L>0||(e.onExit?.(a),t=!0);throw new G(a);},ia=a=>{if(!t)try{a()}catch(b){N(b)}finally{if(!(K||L>0))try{u=a=u,O(a)}catch(b){N(b)}}},P=(a,b,c)=>{var d=B;if(c>0){c=b+c-1;for(var g=0;g<a.length;++g){var f=a.codePointAt(g);if(f<=127){if(b>=
|
||||||
c)break;d[b++]=f}else if(2047>=f){if(b+1>=c)break;d[b++]=192|f>>6;d[b++]=128|f&63}else if(65535>=f){if(b+2>=c)break;d[b++]=224|f>>12;d[b++]=128|f>>6&63;d[b++]=128|f&63}else{if(b+3>=c)break;d[b++]=240|f>>18;d[b++]=128|f>>12&63;d[b++]=128|f>>6&63;d[b++]=128|f&63;g++}}d[b]=0}},ja=new TextDecoder,Q=a=>{if(a){for(var b=a,c=B,d=b+void 0;c[b]&&!(b>=d);)++b;a=ja.decode(B.subarray(a,b))}else a="";return a},R=a=>{for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);127>=d?b++:2047>=d?b+=2:55296<=d&&57343>=
|
c)break;d[b++]=f}else if(f<=2047){if(b+1>=c)break;d[b++]=192|f>>6;d[b++]=128|f&63}else if(f<=65535){if(b+2>=c)break;d[b++]=224|f>>12;d[b++]=128|f>>6&63;d[b++]=128|f&63}else{if(b+3>=c)break;d[b++]=240|f>>18;d[b++]=128|f>>12&63;d[b++]=128|f>>6&63;d[b++]=128|f&63;g++}}d[b]=0}},ja=new TextDecoder,Q=a=>{if(a){for(var b=a,c=B,d=b+void 0;c[b]&&!(b>=d);)++b;a=ja.decode(B.subarray(a,b))}else a="";return a},R=a=>{for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);d<=127?b++:d<=2047?b+=2:d>=55296&&d<=57343?
|
||||||
d?(b+=4,++c):b+=3}return b},T=a=>{var b=R(a)+1,c=S(b);c&&P(a,c,b);return c};function U(){}var la=(a,b,c,d)=>{var g={string:k=>{var n=0;if(null!==k&&void 0!==k&&0!==k){n=R(k)+1;var X=V(n);P(k,X,n);n=X}return n},array:k=>{var n=V(k.length);A.set(k,n);return n}};a=e["_"+a];var f=[],p=0;if(d)for(var l=0;l<d.length;l++){var Y=g[c[l]];Y?(0===p&&(p=W()),f[l]=Y(d[l])):f[l]=d[l]}c=a(...f);return c=function(k){0!==p&&ka(p);return"string"===b?Q(k):"boolean"===b?!!k:k}(c)};
|
(b+=4,++c):b+=3}return b},T=a=>{var b=R(a)+1,c=S(b);c&&P(a,c,b);return c};function U(){}var la=(a,b,c,d)=>{var g={string:k=>{var n=0;if(k!==null&&k!==void 0&&k!==0){n=R(k)+1;var X=V(n);P(k,X,n);n=X}return n},array:k=>{var n=V(k.length);A.set(k,n);return n}};a=e["_"+a];var f=[],p=0;if(d)for(var l=0;l<d.length;l++){var Y=g[c[l]];Y?(p===0&&(p=W()),f[l]=Y(d[l])):f[l]=d[l]}c=a(...f);return c=function(k){p!==0&&ka(p);return b==="string"?Q(k):b==="boolean"?!!k:k}(c)};
|
||||||
U=(a,b,c)=>{a=Q(a);b=null!==b?JSON.parse(Q(b)):[];try{const d=e.externalCall(a,b);return d?T(d):null}catch(d){return e.HEAPU8[c]=1,T(d.message)}};e.noExitRuntime&&(K=e.noExitRuntime);e.printErr&&(q=e.printErr);e.wasmBinary&&(r=e.wasmBinary);if(e.preInit)for("function"==typeof e.preInit&&(e.preInit=[e.preInit]);0<e.preInit.length;)e.preInit.shift()();e.ccall=la;e.cwrap=(a,b,c,d)=>{var g=!c||c.every(f=>"number"===f||"boolean"===f);return"string"!==b&&g&&!d?e["_"+a]:(...f)=>la(a,b,c,f,d)};
|
U=(a,b,c)=>{a=Q(a);b=b!==null?JSON.parse(Q(b)):[];try{let d=e.externalCall(a,b);return d?T(d):null}catch(d){return e.HEAPU8[c]=1,T(d.message)}};e.noExitRuntime&&(K=e.noExitRuntime);e.printErr&&(q=e.printErr);e.wasmBinary&&(r=e.wasmBinary);if(e.preInit)for(typeof e.preInit=="function"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.shift()();e.ccall=la;e.cwrap=(a,b,c,d)=>{var g=!c||c.every(f=>f==="number"||f==="boolean");return b!=="string"&&g&&!d?e["_"+a]:(...f)=>la(a,b,c,f,d)};
|
||||||
e.stringToNewUTF8=T;
|
e.stringToNewUTF8=T;
|
||||||
var S,ma,ka,V,W,z,na={e:()=>E(""),a:()=>{K=!1;L=0},b:function(a,b){a=-9007199254740992>a||9007199254740992<a?NaN:Number(a);a=new Date(1E3*a);C[b>>2]=a.getSeconds();C[b+4>>2]=a.getMinutes();C[b+8>>2]=a.getHours();C[b+12>>2]=a.getDate();C[b+16>>2]=a.getMonth();C[b+20>>2]=a.getFullYear()-1900;C[b+24>>2]=a.getDay();var c=a.getFullYear();C[b+28>>2]=(0!==c%4||0===c%100&&0!==c%400?ha:fa)[a.getMonth()]+a.getDate()-1|0;C[b+36>>2]=-(60*a.getTimezoneOffset());c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();
|
var S,ma,ka,V,W,z,na={e:()=>E(""),a:()=>{K=!1;L=0},b:function(a,b){a=a<-9007199254740992||a>9007199254740992?NaN:Number(a);a=new Date(a*1E3);C[b>>2]=a.getSeconds();C[b+4>>2]=a.getMinutes();C[b+8>>2]=a.getHours();C[b+12>>2]=a.getDate();C[b+16>>2]=a.getMonth();C[b+20>>2]=a.getFullYear()-1900;C[b+24>>2]=a.getDay();var c=a.getFullYear();C[b+28>>2]=(c%4!==0||c%100===0&&c%400!==0?ha:fa)[a.getMonth()]+a.getDate()-1|0;C[b+36>>2]=-(a.getTimezoneOffset()*60);c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();
|
||||||
var d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();C[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0},i:(a,b)=>{M[a]&&(clearTimeout(M[a].id),delete M[a]);if(!b)return 0;var c=setTimeout(()=>{delete M[a];ia(()=>ma(a,performance.now()))},b);M[a]={id:c,A:b};return 0},c:(a,b,c,d)=>{var g=(new Date).getFullYear(),f=(new Date(g,0,1)).getTimezoneOffset();g=(new Date(g,6,1)).getTimezoneOffset();D[a>>2]=60*Math.max(f,g);C[b>>2]=Number(f!=g);b=p=>{var l=Math.abs(p);return`UTC${0<=p?"-":"+"}${String(Math.floor(l/
|
var d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();C[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0},i:(a,b)=>{M[a]&&(clearTimeout(M[a].id),delete M[a]);if(!b)return 0;var c=setTimeout(()=>{delete M[a];ia(()=>ma(a,performance.now()))},b);M[a]={id:c,A:b};return 0},c:(a,b,c,d)=>{var g=(new Date).getFullYear(),f=(new Date(g,0,1)).getTimezoneOffset();g=(new Date(g,6,1)).getTimezoneOffset();D[a>>2]=Math.max(f,g)*60;C[b>>2]=Number(f!=g);b=p=>{var l=Math.abs(p);return`UTC${p>=0?"-":"+"}${String(Math.floor(l/
|
||||||
60)).padStart(2,"0")}${String(l%60).padStart(2,"0")}`};a=b(f);b=b(g);g<f?(P(a,c,17),P(b,d,17)):(P(a,d,17),P(b,c,17))},g:U,f:function(a,b){a=Q(a);let c;try{c=window.JSON.parse(a)}catch(d){c=a}0!==b?window.alert(a):window.console.log("DUMP",c)},d:()=>Date.now(),j:a=>{var b=B.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);a:{d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,d)/65536))-z.buffer.byteLength+65535)/65536|0;try{z.grow(d);y();var g=
|
60)).padStart(2,"0")}${String(l%60).padStart(2,"0")}`};a=b(f);b=b(g);g<f?(P(a,c,17),P(b,d,17)):(P(a,d,17),P(b,c,17))},g:U,f:function(a,b){a=Q(a);try{var c=window.JSON.parse(a)}catch(d){c=a}b!==0?window.alert(a):window.console.log("DUMP",c)},d:()=>Date.now(),j:a=>{var b=B.length;a>>>=0;if(a>2147483648)return!1;for(var c=1;c<=4;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);a:{d=(Math.min(2147483648,Math.ceil(Math.max(a,d)/65536)*65536)-z.buffer.byteLength+65535)/65536|0;try{z.grow(d);y();var g=1;
|
||||||
1;break a}catch(f){}g=void 0}if(g)return!0}return!1},m:function(a){a=Q(a);window.console.log(a)},h:function(a){a=Q(a);return Date.parse(a)},l:function(a,b,c,d){a=Q(a);b=Q(b);c=Q(c);c=`Quickjs -- ${a}: ${b}\n${c}`;0!==d?window.alert(c):window.console.error(c)},k:O},Z;
|
break a}catch(f){}g=void 0}if(g)return!0}return!1},m:function(a){a=Q(a);window.console.log(a)},h:function(a){a=Q(a);return Date.parse(a)},l:function(a,b,c,d){a=Q(a);b=Q(b);c=Q(c);c=`Quickjs -- ${a}: ${b}\n${c}`;d!==0?window.alert(c):window.console.error(c)},k:O},Z;
|
||||||
Z=await (async function(){function a(c){c=Z=c.exports;e._evalInSandbox=c.p;e._nukeSandbox=c.q;e._init=c.r;e._commFun=c.s;e._dumpMemoryUse=c.t;S=c.u;e._free=c.v;ma=c.w;ka=c.x;V=c.y;W=c.z;z=c.n;y();return Z}var b={a:na};if(e.instantiateWasm)return new Promise(c=>{e.instantiateWasm(b,(d,g)=>{c(a(d,g))})});F??=e.locateFile?e.locateFile?e.locateFile("quickjs-eval.wasm",h):h+"quickjs-eval.wasm":(new URL("quickjs-eval.wasm",import.meta.url)).href;return a((await da(b)).instance)}());
|
Z=await (async function(){function a(c){c=Z=c.exports;e._evalInSandbox=c.p;e._nukeSandbox=c.q;e._init=c.r;e._commFun=c.s;e._dumpMemoryUse=c.t;S=c.u;e._free=c.v;ma=c.w;ka=c.x;V=c.y;W=c.z;z=c.n;y();return Z}var b={a:na};if(e.instantiateWasm)return new Promise(c=>{e.instantiateWasm(b,(d,g)=>{c(a(d,g))})});F??=e.locateFile?e.locateFile?e.locateFile("quickjs-eval.wasm",h):h+"quickjs-eval.wasm":(new URL("quickjs-eval.wasm",import.meta.url)).href;return function(c){return a(c.instance)}(await da(b))}());
|
||||||
(function(){function a(){e.calledRun=!0;if(!t){x=!0;Z.o();v?.(e);e.onRuntimeInitialized?.();if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();I.push(b)}H(I)}}if(e.preRun)for("function"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)ea();H(J);e.setStatus?(e.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>e.setStatus(""),1);a()},1)):a()})();x?moduleRtn=e:moduleRtn=new Promise((a,b)=>{v=a;w=b});
|
(function(){function a(){e.calledRun=!0;if(!t){x=!0;Z.o();v?.(e);e.onRuntimeInitialized?.();if(e.postRun)for(typeof e.postRun=="function"&&(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();I.push(b)}H(I)}}if(e.preRun)for(typeof e.preRun=="function"&&(e.preRun=[e.preRun]);e.preRun.length;)ea();H(J);e.setStatus?(e.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>e.setStatus(""),1);a()},1)):a()})();x?moduleRtn=e:moduleRtn=new Promise((a,b)=>{v=a;w=b});
|
||||||
;return moduleRtn}export default QuickJS;
|
;return moduleRtn}export default QuickJS;
|
||||||
|
|||||||
BIN
external/quickjs/quickjs-eval.wasm
vendored
BIN
external/quickjs/quickjs-eval.wasm
vendored
Binary file not shown.
330
gulpfile.mjs
330
gulpfile.mjs
@ -13,7 +13,9 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import * as babel from "@babel/core";
|
||||||
import {
|
import {
|
||||||
|
babelPluginAddHeaderComment,
|
||||||
babelPluginPDFJSPreprocessor,
|
babelPluginPDFJSPreprocessor,
|
||||||
babelPluginStripSrcPath,
|
babelPluginStripSrcPath,
|
||||||
preprocessPDFJSCode,
|
preprocessPDFJSCode,
|
||||||
@ -24,7 +26,6 @@ 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";
|
||||||
@ -104,11 +105,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_PRESET_ENV_OPTS = Object.freeze({
|
const BABEL_COREJS_OPTS = Object.freeze({
|
||||||
corejs: "3.49.0",
|
method: "usage-global",
|
||||||
|
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({
|
||||||
@ -225,6 +226,8 @@ 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",
|
||||||
};
|
};
|
||||||
@ -325,9 +328,7 @@ function createWebpackConfig(
|
|||||||
/node_modules[\\/]core-js/,
|
/node_modules[\\/]core-js/,
|
||||||
];
|
];
|
||||||
|
|
||||||
const babelPresets = skipBabel
|
const babelPresets = skipBabel ? undefined : ["@babel/preset-env"];
|
||||||
? undefined
|
|
||||||
: [["@babel/preset-env", BABEL_PRESET_ENV_OPTS]];
|
|
||||||
const babelPlugins = [
|
const babelPlugins = [
|
||||||
[
|
[
|
||||||
babelPluginPDFJSPreprocessor,
|
babelPluginPDFJSPreprocessor,
|
||||||
@ -337,6 +338,9 @@ 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");
|
||||||
}
|
}
|
||||||
@ -789,36 +793,18 @@ function runTests(testsName, { bot = false } = {}) {
|
|||||||
args.push("--coveragePerTest");
|
args.push("--coveragePerTest");
|
||||||
}
|
}
|
||||||
|
|
||||||
const codeArg = testsName === "browser" ? getArgValue("--code") : null;
|
if (testsName === "browser") {
|
||||||
if (codeArg) {
|
let shouldRun;
|
||||||
const coverageDir =
|
try {
|
||||||
getArgValue("--coverage-output") || BUILD_DIR + "coverage";
|
shouldRun = applyCodeTestFilter(args);
|
||||||
const result = spawnSync(
|
} catch (error) {
|
||||||
"node",
|
reject(error);
|
||||||
[
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
const testIds = result.stdout.trim().split("\n").filter(Boolean);
|
if (!shouldRun) {
|
||||||
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" });
|
||||||
@ -884,6 +870,136 @@ 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");
|
||||||
|
|
||||||
@ -932,6 +1048,18 @@ 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) {
|
||||||
@ -942,34 +1070,33 @@ function makeRef(done, bot) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Queries the per-test coverage index built by --coverage-per-test and prints
|
// Prints the IDs of tests that exercised a given source file location, using
|
||||||
// the IDs of tests that exercised a given source file location. Run with
|
// the per-test coverage index published to the pdf.js.refs repository. The
|
||||||
// --code=<file>::<line|function>, e.g. --code=canvas.js::205
|
// index is downloaded on demand, cached locally, and only re-downloaded when
|
||||||
|
// it has changed. Run with --code=<file>::<line|function>, e.g.
|
||||||
|
// --code=canvas.js::205 (add --no-download to reuse the cached index offline).
|
||||||
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;
|
||||||
}
|
}
|
||||||
const coverageDir =
|
let searchArgs;
|
||||||
getArgValue("--coverage-output") || BUILD_DIR + "coverage";
|
try {
|
||||||
const result = spawnSync(
|
searchArgs = getCoverageSearchArgs(codeArg);
|
||||||
"node",
|
} catch (error) {
|
||||||
[
|
done(error);
|
||||||
path.join(__dirname, "external/ccov/coverage_search.mjs"),
|
return;
|
||||||
`--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(new Error("coverage_search failed"));
|
done(
|
||||||
|
new Error(
|
||||||
|
result.error
|
||||||
|
? `coverage_search failed: ${result.error.message}`
|
||||||
|
: `coverage_search failed (exit code ${result.status})`
|
||||||
|
)
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
done();
|
done();
|
||||||
@ -1030,10 +1157,7 @@ function createBuildNumber(done) {
|
|||||||
const version = config.versionPrefix + buildNumber;
|
const version = config.versionPrefix + buildNumber;
|
||||||
|
|
||||||
exec('git log --format="%h" -n 1', function (err2, stdout2, stderr2) {
|
exec('git log --format="%h" -n 1', function (err2, stdout2, stderr2) {
|
||||||
let buildCommit = "";
|
const buildCommit = !err2 ? stdout2.replace("\n", "") : "";
|
||||||
if (!err2) {
|
|
||||||
buildCommit = stdout2.replace("\n", "");
|
|
||||||
}
|
|
||||||
|
|
||||||
createStringSource(
|
createStringSource(
|
||||||
"version.json",
|
"version.json",
|
||||||
@ -1686,9 +1810,9 @@ function buildLibHelper(bundleDefines, inputStream, outputDir) {
|
|||||||
const licenseHeader = fs
|
const licenseHeader = fs
|
||||||
.readFileSync("./src/license_header.js")
|
.readFileSync("./src/license_header.js")
|
||||||
.toString()
|
.toString()
|
||||||
.split("\n")
|
.trim()
|
||||||
.slice(1, -2)
|
.replace(/^\/\*/, "")
|
||||||
.map(line => line.replace(/^\s*\*\s?/, ""));
|
.replace(/\*\/$/, "");
|
||||||
|
|
||||||
const ctx = {
|
const ctx = {
|
||||||
rootPath: __dirname,
|
rootPath: __dirname,
|
||||||
@ -1728,6 +1852,9 @@ 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",
|
||||||
@ -1737,28 +1864,16 @@ function buildLibHelper(bundleDefines, inputStream, outputDir) {
|
|||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
plugins.push([
|
plugins.push([babelPluginAddHeaderComment, { header: licenseHeader }]);
|
||||||
"add-header-comment",
|
|
||||||
{
|
|
||||||
header: licenseHeader,
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
const result = babel.transform(file.contents.toString(), {
|
const result = babel.transformSync(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
|
presets: skipBabel ? undefined : ["@babel/preset-env"],
|
||||||
? undefined
|
|
||||||
: [
|
|
||||||
[
|
|
||||||
"@babel/preset-env",
|
|
||||||
{ ...BABEL_PRESET_ENV_OPTS, loose: false, modules: false },
|
|
||||||
],
|
|
||||||
],
|
|
||||||
plugins,
|
plugins,
|
||||||
targets: BABEL_TARGETS,
|
targets: BABEL_TARGETS,
|
||||||
sourceMaps: enableSourceMaps,
|
sourceMaps: enableSourceMaps,
|
||||||
@ -2399,6 +2514,71 @@ 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");
|
||||||
|
|
||||||
@ -2463,7 +2643,7 @@ gulp.task("lint", function (done) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
gulp.series("lint-licenses", "lint-chmod")(done);
|
gulp.series("lint-licenses", "lint-chmod", "lint-bom")(done);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -153,6 +153,19 @@ 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
|
||||||
|
|
||||||
@ -764,6 +777,49 @@ 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,6 +153,28 @@ 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
|
||||||
|
|
||||||
@ -740,6 +762,79 @@ 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 =
|
||||||
|
|||||||
@ -386,3 +386,16 @@ pdfjs-editor-new-alt-text-not-now-button = Не сега
|
|||||||
## Image alt-text settings
|
## Image alt-text settings
|
||||||
|
|
||||||
pdfjs-editor-alt-text-settings-delete-model-button = Изтриване
|
pdfjs-editor-alt-text-settings-delete-model-button = Изтриване
|
||||||
|
|
||||||
|
## Controls
|
||||||
|
|
||||||
|
pdfjs-editor-add-signature-image-upload-error-description = Проверете мрежовата си връзка или опитайте с друго изображение.
|
||||||
|
|
||||||
|
## Per-signature certificate row. The variants with an issuer / date in
|
||||||
|
## parentheses embed fully-localized context — no English fall-through.
|
||||||
|
##
|
||||||
|
## Variables:
|
||||||
|
## $issuer (String) - issuer or subject common name from the cert.
|
||||||
|
## $dateObj (Date) - notAfter date for the expired-with-date form.
|
||||||
|
|
||||||
|
pdfjs-digital-signature-properties-certificate-expired = Сертификат: с изтекъл срок на валидност
|
||||||
|
|||||||
@ -5,18 +5,194 @@
|
|||||||
|
|
||||||
## 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 = خا
|
||||||
@ -24,6 +200,12 @@ 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 = ٱووردن یا آلشت شؽواتا
|
||||||
@ -35,6 +217,14 @@ 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 = آلشتگر هؽل
|
||||||
@ -44,15 +234,55 @@ 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
|
||||||
|
|
||||||
@ -64,4 +294,32 @@ 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,6 +153,29 @@ 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
|
||||||
|
|
||||||
@ -748,6 +771,84 @@ 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,6 +153,31 @@ 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
|
||||||
|
|
||||||
@ -764,6 +789,94 @@ 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 =
|
||||||
|
|||||||
@ -660,7 +660,10 @@ pdfjs-views-manager-view-selector-button =
|
|||||||
pdfjs-views-manager-view-selector-button-label = Visninger
|
pdfjs-views-manager-view-selector-button-label = Visninger
|
||||||
pdfjs-views-manager-pages-title = Sider
|
pdfjs-views-manager-pages-title = Sider
|
||||||
pdfjs-views-manager-attachments-title = Vedhæftede filer
|
pdfjs-views-manager-attachments-title = Vedhæftede filer
|
||||||
|
pdfjs-views-manager-layers-title1 = Lag
|
||||||
|
.title = Lag (dobbeltklik for at nulstille alle lag til standard-tilstanden)
|
||||||
pdfjs-views-manager-pages-option-label = Sider
|
pdfjs-views-manager-pages-option-label = Sider
|
||||||
|
pdfjs-views-manager-outlines-option-label = Dokument-disposition
|
||||||
pdfjs-views-manager-attachments-option-label = Vedhæftede filer
|
pdfjs-views-manager-attachments-option-label = Vedhæftede filer
|
||||||
pdfjs-views-manager-layers-option-label = Lag
|
pdfjs-views-manager-layers-option-label = Lag
|
||||||
pdfjs-views-manager-add-file-button =
|
pdfjs-views-manager-add-file-button =
|
||||||
@ -678,6 +681,7 @@ pdfjs-views-manager-pages-status-action-button-label = Håndter
|
|||||||
pdfjs-views-manager-pages-status-copy-button-label = Kopier
|
pdfjs-views-manager-pages-status-copy-button-label = Kopier
|
||||||
pdfjs-views-manager-pages-status-cut-button-label = Klip
|
pdfjs-views-manager-pages-status-cut-button-label = Klip
|
||||||
pdfjs-views-manager-pages-status-delete-button-label = Slet
|
pdfjs-views-manager-pages-status-delete-button-label = Slet
|
||||||
|
pdfjs-views-manager-pages-status-export-selected-button-label = Eksporter valgte…
|
||||||
# Variables:
|
# Variables:
|
||||||
# $count (Number) - the number of selected pages to be cut.
|
# $count (Number) - the number of selected pages to be cut.
|
||||||
pdfjs-views-manager-status-undo-cut-label =
|
pdfjs-views-manager-status-undo-cut-label =
|
||||||
@ -699,6 +703,8 @@ pdfjs-views-manager-pages-status-undo-delete-label =
|
|||||||
[one] 1 side slettet
|
[one] 1 side slettet
|
||||||
*[other] { $count } sider slettet
|
*[other] { $count } sider slettet
|
||||||
}
|
}
|
||||||
|
pdfjs-views-manager-pages-status-waiting-ready-label = Gør din fil klar…
|
||||||
|
pdfjs-views-manager-pages-status-waiting-uploading-label = Uploader fil…
|
||||||
pdfjs-views-manager-status-undo-button-label = Fortryd
|
pdfjs-views-manager-status-undo-button-label = Fortryd
|
||||||
pdfjs-views-manager-status-done-button-label = Færdig
|
pdfjs-views-manager-status-done-button-label = Færdig
|
||||||
pdfjs-views-manager-status-close-button =
|
pdfjs-views-manager-status-close-button =
|
||||||
@ -711,6 +717,10 @@ pdfjs-views-manager-paste-button-before =
|
|||||||
# $page (Number) - the page number after which the paste button is.
|
# $page (Number) - the page number after which the paste button is.
|
||||||
pdfjs-views-manager-paste-button-after =
|
pdfjs-views-manager-paste-button-after =
|
||||||
.title = Indsæt efter side { $page }
|
.title = Indsæt efter side { $page }
|
||||||
|
# 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 = NY
|
||||||
|
pdfjs-views-manager-waiting-for-file = Uploader fil…
|
||||||
pdfjs-toggle-views-manager-button1 =
|
pdfjs-toggle-views-manager-button1 =
|
||||||
.title = Håndter sider
|
.title = Håndter sider
|
||||||
|
|
||||||
|
|||||||
@ -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 Uhrzeigersinn drehen
|
.title = Gegen den Uhrzeigersinn drehen
|
||||||
pdfjs-page-rotate-ccw-button-label = Gegen Uhrzeigersinn drehen
|
pdfjs-page-rotate-ccw-button-label = Gegen den 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -278,7 +299,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 = [Anlage: { $type }]
|
.alt = [{ $type } Anmerkung]
|
||||||
# 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") }
|
||||||
@ -605,7 +626,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 Signatur umwandeln
|
pdfjs-editor-add-signature-image-no-data-error-title = Kann Grafik nicht in eine Unterschrift 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
|
||||||
|
|
||||||
@ -709,9 +730,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 war nicht möglich. Aktualisieren Sie die Seite und versuchen Sie es erneut.
|
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-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 war 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-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
|
||||||
@ -732,11 +753,79 @@ 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 Signatur entfernen
|
.title = Gespeicherte Unterschrift entfernen
|
||||||
pdfjs-editor-delete-signature-button-label1 = Gespeicherte Signatur entfernen
|
pdfjs-editor-delete-signature-button-label1 = Gespeicherte Unterschrift entfernen
|
||||||
|
|
||||||
## Editor toolbar
|
## Editor toolbar
|
||||||
|
|
||||||
|
|||||||
@ -153,6 +153,29 @@ 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
|
||||||
|
|
||||||
@ -748,6 +771,84 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,3 +785,96 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,7 @@ 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
|
||||||
|
|
||||||
@ -161,8 +162,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 esta completamente soportada por este navegador.
|
pdfjs-printing-not-supported = Advertencia: La impresión no está completamente soportada por este navegador.
|
||||||
pdfjs-printing-not-ready = Advertencia: El PDF no cargo completamente para impresión.
|
pdfjs-printing-not-ready = Advertencia: El PDF no cargó completamente para impresión.
|
||||||
|
|
||||||
## Tooltips and alt text for side panel toolbar buttons
|
## Tooltips and alt text for side panel toolbar buttons
|
||||||
|
|
||||||
@ -265,7 +266,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 invalido o dañado.
|
pdfjs-invalid-file-error = Archivo PDF inválido 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.
|
||||||
@ -360,7 +361,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 = Grossor
|
pdfjs-editor-ink-thickness-input = Grosor
|
||||||
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
|
||||||
@ -580,7 +581,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 = Grossor
|
pdfjs-editor-add-signature-draw-thickness-range-label = Grosor
|
||||||
# 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 =
|
||||||
@ -697,15 +698,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 pagina copiada
|
[one] 1 página copiada
|
||||||
*[other] { $count } paginas copiadas
|
*[other] { $count } páginas 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 pagina eliminada
|
[one] 1 página eliminada
|
||||||
*[other] { $count } paginas eliminadas
|
*[other] { $count } páginas 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -401,11 +422,11 @@ pdfjs-editor-comments-sidebar-no-comments-link = Argibide gehiago
|
|||||||
|
|
||||||
## Alt-text dialog
|
## Alt-text dialog
|
||||||
|
|
||||||
pdfjs-editor-alt-text-button-label = Testu alternatiboa
|
pdfjs-editor-alt-text-button-label = Ordezko testua
|
||||||
pdfjs-editor-alt-text-edit-button =
|
pdfjs-editor-alt-text-edit-button =
|
||||||
.aria-label = Editatu testu alternatiboa
|
.aria-label = Editatu ordezko testua
|
||||||
pdfjs-editor-alt-text-dialog-label = Aukeratu aukera
|
pdfjs-editor-alt-text-dialog-label = Aukeratu aukera
|
||||||
pdfjs-editor-alt-text-dialog-description = Testu alternatiboak laguntzen du jendeak ezin duenean irudia ikusi edo ez denean kargatzen.
|
pdfjs-editor-alt-text-dialog-description = Ordezko testuak 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
|
||||||
@ -418,7 +439,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 = Testu alternatiboa
|
.aria-label = Ordezko testua
|
||||||
|
|
||||||
## 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.
|
||||||
@ -470,38 +491,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 testu alternatiboa (irudiaren azalpena)
|
pdfjs-editor-new-alt-text-dialog-edit-label = Editatu ordezko testua (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 testu alternatiboa (irudiaren azalpena)
|
pdfjs-editor-new-alt-text-dialog-add-label = Gehitu ordezko testua (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 = Testu alternatibo hau automatikoki sortu da eta okerra izan liteke.
|
pdfjs-editor-new-alt-text-disclaimer1 = Ordezko testu 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 testu alternatiboa automatikoki
|
pdfjs-editor-new-alt-text-create-automatically-button-label = Sortu ordezko testua 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 testu alternatiboa automatikoki sortu
|
pdfjs-editor-new-alt-text-error-title = Ezin da ordezko testua automatikoki sortu
|
||||||
pdfjs-editor-new-alt-text-error-description = Idatzi zure testu alternatibo propioa edo saiatu berriro geroago.
|
pdfjs-editor-new-alt-text-error-description = Idatzi zure ordezko testu 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 = Testu alternatiboaren AA modeloa deskargatzen ({ $downloadedSize }/{ $totalSize } MB)
|
pdfjs-editor-new-alt-text-ai-model-downloading-progress = Ordezko testuaren AA modeloa deskargatzen ({ $downloadedSize }/{ $totalSize } MB)
|
||||||
.aria-valuetext = Testu alternatiboaren AA modeloa deskargatzen ({ $downloadedSize }/{ $totalSize } MB)
|
.aria-valuetext = Ordezko testuaren 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 = Testu alternatiboa gehituta
|
.aria-label = Ordezko testua gehituta
|
||||||
pdfjs-editor-new-alt-text-added-button-label = Testu alternatiboa gehituta
|
pdfjs-editor-new-alt-text-added-button-label = Ordezko testua 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 = Testu alternatiboa falta da
|
.aria-label = Ordezko testua falta da
|
||||||
pdfjs-editor-new-alt-text-missing-button-label = Testu alternatiboa falta da
|
pdfjs-editor-new-alt-text-missing-button-label = Ordezko testua 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 testu alternatiboa
|
.aria-label = Berrikusi ordezko testua
|
||||||
pdfjs-editor-new-alt-text-to-review-button-label = Berrikusi testu alternatiboa
|
pdfjs-editor-new-alt-text-to-review-button-label = Berrikusi ordezko testua
|
||||||
# "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.
|
||||||
@ -510,22 +531,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 = Irudiaren testu alternatiboaren ezarpenak
|
.title = Irudien ordezko testuaren ezarpenak
|
||||||
pdfjs-image-alt-text-settings-button-label = Irudiaren testu alternatiboaren ezarpenak
|
pdfjs-image-alt-text-settings-button-label = Irudien ordezko testuaren ezarpenak
|
||||||
pdfjs-editor-alt-text-settings-dialog-label = Irudiaren testu alternatiboaren ezarpenak
|
pdfjs-editor-alt-text-settings-dialog-label = Irudien ordezko testuaren ezarpenak
|
||||||
pdfjs-editor-alt-text-settings-automatic-title = Testu alternatibo automatikoa
|
pdfjs-editor-alt-text-settings-automatic-title = Ordezko testu automatikoa
|
||||||
pdfjs-editor-alt-text-settings-create-model-button-label = Sortu testu alternatiboa automatikoki
|
pdfjs-editor-alt-text-settings-create-model-button-label = Sortu ordezko testua 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 = Testu alternatiboaren AA modeloa ({ $totalSize } MB)
|
pdfjs-editor-alt-text-settings-download-model-label = Ordezko testuaren AA modeloa ({ $totalSize } MB)
|
||||||
pdfjs-editor-alt-text-settings-ai-model-description = Zure gailuan modu lokalean exekutatzen da eta zure datuak pribatu mantentzen dira. Testu alternatibo automatikorako beharrezkoa.
|
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-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 = Testu alternatiboaren editorea
|
pdfjs-editor-alt-text-settings-editor-title = Ordezko testuaren editorea
|
||||||
pdfjs-editor-alt-text-settings-show-dialog-button-label = Erakutsi testu alternatiboa irudi bat gehitzean berehala
|
pdfjs-editor-alt-text-settings-show-dialog-button-label = Erakutsi ordezko testua irudi bat gehitzean berehala
|
||||||
pdfjs-editor-alt-text-settings-show-dialog-description = Zure irudiek testu alternatiboa duela ziurtatzen laguntzen dizu.
|
pdfjs-editor-alt-text-settings-show-dialog-description = Zure irudi guztiek ordezko testua dutela 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.
|
||||||
@ -563,7 +584,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 (testu alternatibo modura ere erabiltzen dena) eta sinadura
|
dezake (ordezko testu 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
|
||||||
|
|
||||||
@ -598,9 +619,9 @@ pdfjs-editor-add-signature-image-browse-link =
|
|||||||
|
|
||||||
## Controls
|
## Controls
|
||||||
|
|
||||||
pdfjs-editor-add-signature-description-label = Azalpena (testu alternatiboa)
|
pdfjs-editor-add-signature-description-label = Azalpena (ordezko testua)
|
||||||
pdfjs-editor-add-signature-description-input =
|
pdfjs-editor-add-signature-description-input =
|
||||||
.title = Azalpena (testu alternatiboa)
|
.title = Azalpena (ordezko testua)
|
||||||
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 =
|
||||||
@ -736,6 +757,74 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -236,7 +257,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 ->
|
||||||
[one] Plus d’{ $limit } occurrence
|
[1] Plus d’une 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
|
||||||
@ -728,6 +749,74 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -560,6 +581,7 @@ 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
|
||||||
@ -731,6 +753,49 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,29 @@ 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
|
||||||
|
|
||||||
@ -748,6 +771,84 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,15 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -240,7 +261,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 una { $limit } corrispondenza
|
[one] Più di { $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
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,23 @@ 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
|
||||||
|
|
||||||
@ -700,6 +717,54 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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 = Tuγzi n usebter:
|
pdfjs-document-properties-page-size = Teɣ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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,23 @@ 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
|
||||||
|
|
||||||
@ -569,7 +586,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] 또는 이미지 파일 찾아보기
|
||||||
@ -665,7 +682,7 @@ pdfjs-views-manager-pages-status-action-button-label = 관리
|
|||||||
pdfjs-views-manager-pages-status-copy-button-label = 복사
|
pdfjs-views-manager-pages-status-copy-button-label = 복사
|
||||||
pdfjs-views-manager-pages-status-cut-button-label = 잘라내기
|
pdfjs-views-manager-pages-status-cut-button-label = 잘라내기
|
||||||
pdfjs-views-manager-pages-status-delete-button-label = 삭제
|
pdfjs-views-manager-pages-status-delete-button-label = 삭제
|
||||||
pdfjs-views-manager-pages-status-export-selected-button-label = 선택 페이지 내보내기…
|
pdfjs-views-manager-pages-status-export-selected-button-label = 선택한 페이지 내보내기…
|
||||||
# Variables:
|
# Variables:
|
||||||
# $count (Number) - the number of selected pages to be cut.
|
# $count (Number) - the number of selected pages to be cut.
|
||||||
pdfjs-views-manager-status-undo-cut-label = { $count }개 페이지 잘림
|
pdfjs-views-manager-status-undo-cut-label = { $count }개 페이지 잘림
|
||||||
@ -700,6 +717,54 @@ 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 =
|
||||||
|
|||||||
@ -479,6 +479,21 @@ pdfjs-editor-add-signature-cancel-button = റദ്ദാക്കുക
|
|||||||
pdfjs-editor-add-signature-add-button = ചേൎക്കുക
|
pdfjs-editor-add-signature-add-button = ചേൎക്കുക
|
||||||
pdfjs-editor-edit-signature-update-button = പുതുക്കുക
|
pdfjs-editor-edit-signature-update-button = പുതുക്കുക
|
||||||
|
|
||||||
|
## Edit a comment dialog
|
||||||
|
|
||||||
|
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-status-close-button =
|
||||||
|
.title = അടയ്ക്കുക
|
||||||
|
pdfjs-views-manager-status-close-button-label = അടയ്ക്കുക
|
||||||
|
|
||||||
## Main menu for adding/removing signatures
|
## Main menu for adding/removing signatures
|
||||||
|
|
||||||
pdfjs-editor-delete-signature-button1 =
|
pdfjs-editor-delete-signature-button1 =
|
||||||
|
|||||||
@ -153,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -515,7 +536,7 @@ pdfjs-image-alt-text-settings-button-label = Alternative tekst-innstillingar for
|
|||||||
pdfjs-editor-alt-text-settings-dialog-label = Alternative tekst-innstillingar for bilde
|
pdfjs-editor-alt-text-settings-dialog-label = Alternative tekst-innstillingar for bilde
|
||||||
pdfjs-editor-alt-text-settings-automatic-title = Automatisk alternativ tekst
|
pdfjs-editor-alt-text-settings-automatic-title = Automatisk alternativ tekst
|
||||||
pdfjs-editor-alt-text-settings-create-model-button-label = Opprett alternativ tekt automatisk
|
pdfjs-editor-alt-text-settings-create-model-button-label = Opprett alternativ tekt automatisk
|
||||||
pdfjs-editor-alt-text-settings-create-model-description = Foreslår skildringar for å hjelpe folk som ikkje kan sjå bildet eller når bildet ikkje blir lasta inn.
|
pdfjs-editor-alt-text-settings-create-model-description = Føreslår skildringar for å hjelpe folk som ikkje kan sjå bildet eller når bildet ikkje blir lasta inn.
|
||||||
# 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 = KI-modell for alternativ tekst ({ $totalSize } MB)
|
pdfjs-editor-alt-text-settings-download-model-label = KI-modell for alternativ tekst ({ $totalSize } MB)
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,28 @@ 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
|
||||||
|
|
||||||
@ -739,6 +761,79 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,28 @@ 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
|
||||||
|
|
||||||
@ -390,8 +412,9 @@ 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
|
||||||
*[other] Comentarii
|
[few] comentarii
|
||||||
|
*[other] de comentarii
|
||||||
}
|
}
|
||||||
pdfjs-editor-comments-sidebar-close-button =
|
pdfjs-editor-comments-sidebar-close-button =
|
||||||
.title = Închide bara laterală
|
.title = Închide bara laterală
|
||||||
@ -739,6 +762,79 @@ 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,6 +153,28 @@ 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
|
||||||
|
|
||||||
@ -740,6 +762,79 @@ 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,6 +87,7 @@ 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
|
||||||
|
|
||||||
@ -133,6 +134,19 @@ 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
|
||||||
|
|
||||||
@ -179,6 +193,15 @@ 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
|
||||||
|
|
||||||
@ -197,10 +220,27 @@ 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:
|
||||||
@ -222,6 +262,12 @@ 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.
|
||||||
@ -234,9 +280,13 @@ 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
|
||||||
@ -248,6 +298,33 @@ 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.
|
||||||
|
|
||||||
@ -259,6 +336,8 @@ 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
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
||||||
@ -272,19 +351,47 @@ 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
|
||||||
|
|
||||||
@ -304,7 +411,13 @@ 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:
|
||||||
@ -332,6 +445,19 @@ 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,6 +153,29 @@ 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
|
||||||
|
|
||||||
@ -748,6 +771,84 @@ 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 = Pismo
|
pdfjs-document-properties-page-size-name-letter = Letter
|
||||||
pdfjs-document-properties-page-size-name-legal = Pravno
|
pdfjs-document-properties-page-size-name-legal = Legal
|
||||||
|
|
||||||
## Variables:
|
## Variables:
|
||||||
## $width (Number) - the width of the (current) page
|
## $width (Number) - the width of the (current) page
|
||||||
@ -153,6 +153,29 @@ 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
|
||||||
|
|
||||||
@ -748,6 +771,23 @@ 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,6 +153,28 @@ 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
|
||||||
|
|
||||||
@ -740,6 +762,79 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,27 @@ 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
|
||||||
|
|
||||||
@ -496,11 +517,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 = Alternatif metin eksik
|
.aria-label = Alt 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 = Alternatif metni incele
|
.aria-label = Alt 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:
|
||||||
@ -732,6 +753,74 @@ 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,6 +153,23 @@ 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
|
||||||
|
|
||||||
@ -469,7 +486,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 = Không phải bây giờ
|
pdfjs-editor-new-alt-text-not-now-button = Để sau
|
||||||
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
|
||||||
@ -700,6 +717,54 @@ 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,6 +153,19 @@ 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,6 +153,23 @@ 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
|
||||||
|
|
||||||
@ -700,6 +717,54 @@ 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 =
|
||||||
|
|||||||
4478
package-lock.json
generated
4478
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
54
package.json
54
package.json
@ -2,33 +2,33 @@
|
|||||||
"name": "pdf.js",
|
"name": "pdf.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.29.0",
|
"@babel/core": "^8.0.1",
|
||||||
"@babel/preset-env": "^7.29.5",
|
"@babel/preset-env": "^8.0.2",
|
||||||
"@babel/runtime": "^7.29.2",
|
"@babel/runtime": "^8.0.0",
|
||||||
"@eslint/json": "^1.2.0",
|
"@eslint/json": "^2.0.1",
|
||||||
"@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.0",
|
"@napi-rs/canvas": "^1.0.3",
|
||||||
"@types/node": "^25.9.1",
|
"@types/node": "^26.1.2",
|
||||||
"autoprefixer": "^10.5.0",
|
"autoprefixer": "^10.5.4",
|
||||||
"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.0",
|
"babel-plugin-polyfill-corejs3": "^1.0.0",
|
||||||
"cached-iterable": "^0.3.0",
|
"cached-iterable": "^0.3.0",
|
||||||
"caniuse-lite": "^1.0.30001793",
|
"caniuse-lite": "^1.0.30001806",
|
||||||
"core-js": "^3.49.0",
|
"core-js": "^3.49.0",
|
||||||
"eslint": "^10.4.0",
|
"eslint": "^10.8.0",
|
||||||
"eslint-config-prettier": "^10.1.8",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-import-x": "^4.16.2",
|
"eslint-plugin-import-x": "^4.17.1",
|
||||||
"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.9.0",
|
"eslint-plugin-perfectionist": "^5.10.0",
|
||||||
"eslint-plugin-prettier": "^5.5.5",
|
"eslint-plugin-prettier": "^5.5.6",
|
||||||
"eslint-plugin-regexp": "^3.1.0",
|
"eslint-plugin-regexp": "^3.1.1",
|
||||||
"eslint-plugin-unicorn": "^64.0.0",
|
"eslint-plugin-unicorn": "^72.0.0",
|
||||||
"globals": "^17.6.0",
|
"globals": "^17.8.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",
|
||||||
@ -39,28 +39,28 @@
|
|||||||
"istanbul-lib-coverage": "^3.2.2",
|
"istanbul-lib-coverage": "^3.2.2",
|
||||||
"istanbul-lib-report": "^3.0.1",
|
"istanbul-lib-report": "^3.0.1",
|
||||||
"istanbul-reports": "^3.2.0",
|
"istanbul-reports": "^3.2.0",
|
||||||
"jasmine": "^6.2.0",
|
"jasmine": "^6.3.0",
|
||||||
"jsdoc": "^4.0.5",
|
"jsdoc": "^4.0.5",
|
||||||
"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.12",
|
"metalsmith-html-relative": "^2.0.13",
|
||||||
"ordered-read-streams": "^2.0.0",
|
"ordered-read-streams": "^2.0.0",
|
||||||
"pngjs": "^7.0.0",
|
"pngjs": "^7.0.0",
|
||||||
"postcss": "^8.5.15",
|
"postcss": "^8.5.25",
|
||||||
"postcss-discard-comments": "^8.0.0",
|
"postcss-discard-comments": "^8.0.1",
|
||||||
"postcss-values-parser": "^8.0.0",
|
"postcss-values-parser": "^8.0.0",
|
||||||
"prettier": "^3.8.3",
|
"prettier": "^3.9.6",
|
||||||
"puppeteer": "^25.1.0",
|
"puppeteer": "^25.4.0",
|
||||||
"stylelint": "^17.12.0",
|
"stylelint": "^17.14.1",
|
||||||
"stylelint-prettier": "^5.0.3",
|
"stylelint-prettier": "^5.0.3",
|
||||||
"svglint": "^4.2.1",
|
"svglint": "^4.2.1",
|
||||||
"terser-webpack-plugin": "^5.6.0",
|
"terser-webpack-plugin": "^5.6.1",
|
||||||
"tsc-alias": "^1.8.17",
|
"tsc-alias": "^1.9.1",
|
||||||
"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.107.1",
|
"webpack": "^5.109.2",
|
||||||
"webpack-stream": "^7.0.0"
|
"webpack-stream": "^7.0.0"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"stableVersion": "5.7.284",
|
"stableVersion": "6.2.108",
|
||||||
"baseVersion": "e6e06cf6b5307fe39e0de69c6c884f816b0cb21b",
|
"baseVersion": "ce4ff55faaa83b39b0137dc458af6eea6f96235f",
|
||||||
"versionPrefix": "6.0."
|
"versionPrefix": "6.3."
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -25,11 +25,17 @@ class BaseStream {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {number}
|
||||||
|
*/
|
||||||
// eslint-disable-next-line getter-return
|
// eslint-disable-next-line getter-return
|
||||||
get length() {
|
get length() {
|
||||||
unreachable("Abstract getter `length` accessed");
|
unreachable("Abstract getter `length` accessed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
// eslint-disable-next-line getter-return
|
// eslint-disable-next-line getter-return
|
||||||
get isEmpty() {
|
get isEmpty() {
|
||||||
unreachable("Abstract getter `isEmpty` accessed");
|
unreachable("Abstract getter `isEmpty` accessed");
|
||||||
@ -43,6 +49,10 @@ class BaseStream {
|
|||||||
unreachable("Abstract method `getByte` called");
|
unreachable("Abstract method `getByte` called");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number | undefined} [length]
|
||||||
|
* @returns {Uint8Array}
|
||||||
|
*/
|
||||||
getBytes(length) {
|
getBytes(length) {
|
||||||
unreachable("Abstract method `getBytes` called");
|
unreachable("Abstract method `getBytes` called");
|
||||||
}
|
}
|
||||||
@ -135,6 +145,10 @@ class BaseStream {
|
|||||||
unreachable("Abstract method `makeSubStream` called");
|
unreachable("Abstract method `makeSubStream` called");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clone() {
|
||||||
|
unreachable("Abstract method `clone` called");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns {Array | null}
|
* @returns {Array | null}
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -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,
|
||||||
objectSize,
|
makeArr,
|
||||||
PermissionFlag,
|
PermissionFlag,
|
||||||
shadow,
|
shadow,
|
||||||
stringToUTF8String,
|
stringToUTF8String,
|
||||||
@ -52,9 +52,41 @@ 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";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @import {XRef} from "./xref.js";
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @callback GetAttachmentContent
|
||||||
|
* Callback used to lazily fetch attachment content.
|
||||||
|
* @param {string} id
|
||||||
|
* Unique attachment identifier.
|
||||||
|
* @returns {CatalogAttachmentContent}
|
||||||
|
* Result.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Uint8Array | null} CatalogAttachmentContent
|
||||||
|
* Attachment value.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef CatalogAttachment
|
||||||
|
* Attachment metadata.
|
||||||
|
* @property {CatalogAttachmentContent | undefined} [content]
|
||||||
|
* Value, when already available.
|
||||||
|
* @property {string} description
|
||||||
|
* Description.
|
||||||
|
* @property {string} filename
|
||||||
|
* Filename (just the basename) for display.
|
||||||
|
* @property {string} rawFilename
|
||||||
|
* File path.
|
||||||
|
*/
|
||||||
|
|
||||||
const isRef = v => v instanceof Ref;
|
const isRef = v => v instanceof Ref;
|
||||||
|
|
||||||
const isValidExplicitDest = _isValidExplicitDest.bind(
|
const isValidExplicitDest = _isValidExplicitDest.bind(
|
||||||
@ -88,6 +120,12 @@ function fetchRemoteDest(action) {
|
|||||||
class Catalog {
|
class Catalog {
|
||||||
#actualNumPages = null;
|
#actualNumPages = null;
|
||||||
|
|
||||||
|
#annotationAttachmentIdByRef = new RefSetCache();
|
||||||
|
|
||||||
|
#annotationAttachmentRefById = new Map();
|
||||||
|
|
||||||
|
#soundAttachmentIds = new Set();
|
||||||
|
|
||||||
#catDict = null;
|
#catDict = null;
|
||||||
|
|
||||||
builtInCMapCache = new Map();
|
builtInCMapCache = new Map();
|
||||||
@ -127,6 +165,44 @@ class Catalog {
|
|||||||
return this.#catDict.clone();
|
return this.#catDict.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an id for an attachment from a FileAttachment annotation.
|
||||||
|
*
|
||||||
|
* The id is registered here rather than parsed from a public string prefix in
|
||||||
|
* `attachmentContent`, since catalog attachment names can be arbitrary PDF
|
||||||
|
* strings and may otherwise collide with annotation-local ids.
|
||||||
|
*
|
||||||
|
* @param {Ref} ref
|
||||||
|
* File-spec or embedded-file stream reference.
|
||||||
|
* @param {boolean} [isSound]
|
||||||
|
* When set, the referenced stream holds raw PDF sound samples that
|
||||||
|
* `attachmentContent` wraps in a WAV container on fetch.
|
||||||
|
* @returns {string}
|
||||||
|
* Attachment id.
|
||||||
|
*/
|
||||||
|
getAttachmentIdForAnnotation(ref, isSound = false) {
|
||||||
|
let id = this.#annotationAttachmentIdByRef.get(ref);
|
||||||
|
if (!id) {
|
||||||
|
const baseId = `attachmentRef:${ref.toString()}`;
|
||||||
|
id = baseId;
|
||||||
|
|
||||||
|
let i = 1;
|
||||||
|
while (
|
||||||
|
this.#annotationAttachmentRefById.has(id) ||
|
||||||
|
this.attachments?.has(id)
|
||||||
|
) {
|
||||||
|
id = `${baseId}-${i++}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.#annotationAttachmentIdByRef.put(ref, id);
|
||||||
|
this.#annotationAttachmentRefById.set(id, ref);
|
||||||
|
}
|
||||||
|
if (isSound) {
|
||||||
|
this.#soundAttachmentIds.add(id);
|
||||||
|
}
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
get version() {
|
get version() {
|
||||||
const version = this.#catDict.get("Version");
|
const version = this.#catDict.get("Version");
|
||||||
if (version instanceof Name) {
|
if (version instanceof Name) {
|
||||||
@ -210,11 +286,11 @@ class Catalog {
|
|||||||
/* suppressEncryption = */ !this.xref.encrypt?.encryptMetadata
|
/* suppressEncryption = */ !this.xref.encrypt?.encryptMetadata
|
||||||
);
|
);
|
||||||
|
|
||||||
if (stream instanceof BaseStream && stream.dict instanceof Dict) {
|
if (
|
||||||
const type = stream.dict.get("Type");
|
stream instanceof BaseStream &&
|
||||||
const subtype = stream.dict.get("Subtype");
|
isDict(stream.dict, "Metadata") &&
|
||||||
|
isName(stream.dict.get("Subtype"), "XML")
|
||||||
if (isName(type, "Metadata") && isName(subtype, "XML")) {
|
) {
|
||||||
// XXX: This should examine the charset the XML document defines,
|
// XXX: This should examine the charset the XML document defines,
|
||||||
// however since there are currently no real means to decode arbitrary
|
// however since there are currently no real means to decode arbitrary
|
||||||
// charsets, let's just hope that the author of the PDF was reasonable
|
// charsets, let's just hope that the author of the PDF was reasonable
|
||||||
@ -224,7 +300,6 @@ class Catalog {
|
|||||||
metadata = new MetadataParser(data).serializable;
|
metadata = new MetadataParser(data).serializable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
if (ex instanceof MissingDataException) {
|
if (ex instanceof MissingDataException) {
|
||||||
throw ex;
|
throw ex;
|
||||||
@ -286,15 +361,11 @@ class Catalog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#readStructTreeRoot() {
|
#readStructTreeRoot() {
|
||||||
const rawObj = this.#catDict.getRaw("StructTreeRoot");
|
const rawObj = this.#catDict.getRaw("StructTreeRoot"),
|
||||||
const obj = this.xref.fetchIfRef(rawObj);
|
obj = this.xref.fetchIfRef(rawObj);
|
||||||
if (!(obj instanceof Dict)) {
|
return obj instanceof Dict
|
||||||
return null;
|
? new StructTreeRoot(this.xref, obj, rawObj)
|
||||||
}
|
: null;
|
||||||
|
|
||||||
const root = new StructTreeRoot(this.xref, obj, rawObj);
|
|
||||||
root.init();
|
|
||||||
return root;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get toplevelPagesDict() {
|
get toplevelPagesDict() {
|
||||||
@ -369,6 +440,7 @@ class Catalog {
|
|||||||
|
|
||||||
const outlineItem = {
|
const outlineItem = {
|
||||||
action: data.action,
|
action: data.action,
|
||||||
|
attachmentId: data.attachmentId,
|
||||||
attachment: data.attachment,
|
attachment: data.attachment,
|
||||||
dest: data.dest,
|
dest: data.dest,
|
||||||
url: data.url,
|
url: data.url,
|
||||||
@ -691,15 +763,17 @@ class Catalog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get destinations() {
|
get destinations() {
|
||||||
const rawDests = this.#readDests(),
|
const dests = new Map();
|
||||||
dests = Object.create(null);
|
|
||||||
for (const obj of rawDests) {
|
for (const obj of this.#readDests()) {
|
||||||
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[stringToPDFString(key, /* keepEscapeSequence = */ true)] =
|
dests.set(
|
||||||
dest;
|
stringToPDFString(key, /* keepEscapeSequence = */ true),
|
||||||
|
dest
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (obj instanceof Dict) {
|
} else if (obj instanceof Dict) {
|
||||||
@ -707,8 +781,10 @@ 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[stringToPDFString(key, /* keepEscapeSequence = */ true)] ||=
|
dests.getOrInsert(
|
||||||
dest;
|
stringToPDFString(key, /* keepEscapeSequence = */ true),
|
||||||
|
dest
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -719,11 +795,10 @@ 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[id] ?? null;
|
return this.destinations.get(id) ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const rawDests = this.#readDests();
|
for (const obj of 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) {
|
||||||
@ -735,13 +810,7 @@ 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).
|
||||||
if (rawDests.length) {
|
return this.destinations.get(id) ?? null;
|
||||||
const dest = this.destinations[id];
|
|
||||||
if (dest) {
|
|
||||||
return dest;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#readDests() {
|
#readDests() {
|
||||||
@ -1007,18 +1076,19 @@ class Catalog {
|
|||||||
break;
|
break;
|
||||||
case "PrintPageRange":
|
case "PrintPageRange":
|
||||||
// The number of elements must be even.
|
// The number of elements must be even.
|
||||||
if (Array.isArray(value) && value.length % 2 === 0) {
|
if (
|
||||||
const isValid = value.every(
|
Array.isArray(value) &&
|
||||||
|
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":
|
||||||
if (Number.isInteger(value) && value > 0) {
|
if (Number.isInteger(value) && value > 0) {
|
||||||
@ -1034,15 +1104,14 @@ class Catalog {
|
|||||||
warn(`Bad value, for key "${key}", in ViewerPreferences: ${value}.`);
|
warn(`Bad value, for key "${key}", in ViewerPreferences: ${value}.`);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
prefs ??= Object.create(null);
|
(prefs ??= new Map()).set(key, prefValue);
|
||||||
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 = Object.create(null);
|
const openAction = new Map();
|
||||||
|
|
||||||
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
|
||||||
@ -1054,36 +1123,92 @@ class Catalog {
|
|||||||
Catalog.parseDestDictionary({ destDict, resultObj });
|
Catalog.parseDestDictionary({ destDict, resultObj });
|
||||||
|
|
||||||
if (Array.isArray(resultObj.dest)) {
|
if (Array.isArray(resultObj.dest)) {
|
||||||
openAction.dest = resultObj.dest;
|
openAction.set("dest", resultObj.dest);
|
||||||
} else if (resultObj.action) {
|
} else if (resultObj.action) {
|
||||||
openAction.action = resultObj.action;
|
openAction.set("action", resultObj.action);
|
||||||
}
|
}
|
||||||
} else if (isValidExplicitDest(obj)) {
|
} else if (isValidExplicitDest(obj)) {
|
||||||
openAction.dest = obj;
|
openAction.set("dest", obj);
|
||||||
}
|
}
|
||||||
return shadow(
|
return shadow(this, "openAction", openAction.size ? openAction : null);
|
||||||
this,
|
|
||||||
"openAction",
|
|
||||||
objectSize(openAction) > 0 ? openAction : null
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get attachments.
|
||||||
|
*
|
||||||
|
* @returns {Map<string, CatalogAttachment> | null}
|
||||||
|
* Attachments.
|
||||||
|
*/
|
||||||
get attachments() {
|
get attachments() {
|
||||||
const obj = this.#catDict.get("Names");
|
const obj = this.#catDict.get("Names");
|
||||||
|
/** @type {Map<string, CatalogAttachment> | null} */
|
||||||
let attachments = null;
|
let attachments = null;
|
||||||
|
|
||||||
if (obj instanceof Dict && obj.has("EmbeddedFiles")) {
|
if (obj instanceof Dict && obj.has("EmbeddedFiles")) {
|
||||||
const nameTree = new NameTree(obj.getRaw("EmbeddedFiles"), this.xref);
|
const nameTree = new NameTree(obj.getRaw("EmbeddedFiles"), this.xref);
|
||||||
for (const [key, value] of nameTree.getAll()) {
|
for (const [key, value] of nameTree.getAll()) {
|
||||||
const fs = new FileSpec(value);
|
(attachments ??= new Map()).set(
|
||||||
attachments ??= Object.create(null);
|
stringToPDFString(key, /* keepEscapeSequence = */ true),
|
||||||
attachments[stringToPDFString(key, /* keepEscapeSequence = */ true)] =
|
new FileSpec(value).serializable
|
||||||
fs.serializable;
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return shadow(this, "attachments", attachments);
|
return shadow(this, "attachments", attachments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} id
|
||||||
|
* Unique attachment identifier.
|
||||||
|
* @returns {CatalogAttachmentContent | undefined}
|
||||||
|
* Content, or `undefined` when no named attachment exists for the id.
|
||||||
|
*/
|
||||||
|
#attachmentContentByName(id) {
|
||||||
|
const obj = this.#catDict.get("Names");
|
||||||
|
if (obj instanceof Dict && obj.has("EmbeddedFiles")) {
|
||||||
|
const nameTree = new NameTree(obj.getRaw("EmbeddedFiles"), this.xref);
|
||||||
|
for (const [key, value] of nameTree.getAll()) {
|
||||||
|
if (stringToPDFString(key, /* keepEscapeSequence = */ true) === id) {
|
||||||
|
return FileSpec.readContent(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get content for an attachment.
|
||||||
|
*
|
||||||
|
* @param {string} id
|
||||||
|
* Unique attachment identifier (required).
|
||||||
|
* @returns {CatalogAttachmentContent}
|
||||||
|
* Content.
|
||||||
|
*/
|
||||||
|
attachmentContent(id) {
|
||||||
|
const namedContent = this.#attachmentContentByName(id);
|
||||||
|
if (namedContent !== undefined) {
|
||||||
|
return namedContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Annotation-local attachments register the reference of their embedded
|
||||||
|
// content in the catalog, so it's re-fetched from the xref on demand
|
||||||
|
// instead of being cached (which would then need to survive `cleanup`).
|
||||||
|
// The reference points either at the file-spec dictionary or, for an inline
|
||||||
|
// file-spec, straight at the embedded-file stream.
|
||||||
|
const ref = this.#annotationAttachmentRefById.get(id);
|
||||||
|
if (ref) {
|
||||||
|
const target = this.xref.fetch(ref);
|
||||||
|
if (target instanceof BaseStream) {
|
||||||
|
const content = FileSpec.readStreamContent(target);
|
||||||
|
if (this.#soundAttachmentIds.has(id)) {
|
||||||
|
return soundStreamToWav(target, content) ?? content;
|
||||||
|
}
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
return target instanceof Dict ? FileSpec.readContent(target) : null;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
get rawEmbeddedFiles() {
|
get rawEmbeddedFiles() {
|
||||||
const obj = this.#catDict.get("Names");
|
const obj = this.#catDict.get("Names");
|
||||||
if (!(obj instanceof Dict) || !obj.has("EmbeddedFiles")) {
|
if (!(obj instanceof Dict) || !obj.has("EmbeddedFiles")) {
|
||||||
@ -1117,13 +1242,9 @@ class Catalog {
|
|||||||
let javaScript = null;
|
let javaScript = null;
|
||||||
|
|
||||||
function appendIfJavaScriptDict(name, jsDict) {
|
function appendIfJavaScriptDict(name, jsDict) {
|
||||||
if (!(jsDict instanceof Dict)) {
|
if (!(jsDict instanceof Dict) || !isName(jsDict.get("S"), "JavaScript")) {
|
||||||
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();
|
||||||
@ -1136,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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1167,14 +1288,10 @@ class Catalog {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (javaScript) {
|
if (javaScript) {
|
||||||
actions ||= Object.create(null);
|
actions ??= new Map();
|
||||||
|
|
||||||
for (const [key, val] of javaScript) {
|
for (const [key, val] of javaScript) {
|
||||||
if (key in actions) {
|
actions.getOrInsertComputed(key, makeArr).push(val);
|
||||||
actions[key].push(val);
|
|
||||||
} else {
|
|
||||||
actions[key] = [val];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return shadow(this, "jsActions", actions);
|
return shadow(this, "jsActions", actions);
|
||||||
@ -1383,6 +1500,22 @@ class Catalog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!Array.isArray(kids)) {
|
if (!Array.isArray(kids)) {
|
||||||
|
// Prevent errors in corrupt PDF documents that violate the
|
||||||
|
// specification by *inlining* Page dicts (fixes issue21436.pdf).
|
||||||
|
let type = currentNode.getRaw("Type");
|
||||||
|
if (type instanceof Ref) {
|
||||||
|
try {
|
||||||
|
type = await xref.fetchAsync(type);
|
||||||
|
} catch (ex) {
|
||||||
|
addPageError(ex);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isName(type, "Page") || !currentNode.has("Kids")) {
|
||||||
|
addPageDict(currentNode, null);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
addPageError(
|
addPageError(
|
||||||
new FormatError("Page dictionary kids object is not an array.")
|
new FormatError("Page dictionary kids object is not an array.")
|
||||||
);
|
);
|
||||||
@ -1458,6 +1591,9 @@ 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);
|
||||||
@ -1477,6 +1613,12 @@ 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) {
|
||||||
@ -1556,8 +1698,8 @@ class Catalog {
|
|||||||
* properties will be placed.
|
* properties will be placed.
|
||||||
* @property {string} [docBaseUrl] - The document base URL that is used when
|
* @property {string} [docBaseUrl] - The document base URL that is used when
|
||||||
* attempting to recover valid absolute URLs from relative ones.
|
* attempting to recover valid absolute URLs from relative ones.
|
||||||
* @property {Object} [docAttachments] - The document attachments (may not
|
* @property {Record<string, CatalogAttachment> | null} [docAttachments] - The
|
||||||
* exist in most PDF documents).
|
* document attachments (may not exist in most PDF documents).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1589,9 +1731,19 @@ 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();
|
||||||
const kids = node.get("K");
|
let kids = node.getRaw("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;
|
||||||
@ -1601,6 +1753,12 @@ 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
|
||||||
@ -1740,8 +1898,7 @@ class Catalog {
|
|||||||
case "GoToR":
|
case "GoToR":
|
||||||
const urlDict = action.get("F");
|
const urlDict = action.get("F");
|
||||||
if (urlDict instanceof Dict) {
|
if (urlDict instanceof Dict) {
|
||||||
const fs = new FileSpec(urlDict, /* skipContent = */ true);
|
url = new FileSpec(urlDict).filename;
|
||||||
({ rawFilename: url } = fs.serializable);
|
|
||||||
} else if (typeof urlDict === "string") {
|
} else if (typeof urlDict === "string") {
|
||||||
url = urlDict;
|
url = urlDict;
|
||||||
} else {
|
} else {
|
||||||
@ -1766,22 +1923,21 @@ class Catalog {
|
|||||||
|
|
||||||
case "GoToE":
|
case "GoToE":
|
||||||
const target = action.get("T");
|
const target = action.get("T");
|
||||||
let attachment;
|
/** @type {string | null} */
|
||||||
|
let id = null;
|
||||||
|
|
||||||
if (docAttachments && target instanceof Dict) {
|
if (target instanceof Dict) {
|
||||||
const relationship = target.get("R");
|
const relationship = target.get("R");
|
||||||
const name = target.get("N");
|
const name = target.get("N");
|
||||||
|
|
||||||
if (isName(relationship, "C") && typeof name === "string") {
|
if (isName(relationship, "C") && typeof name === "string") {
|
||||||
attachment =
|
id = stringToPDFString(name, /* keepEscapeSequence = */ true);
|
||||||
docAttachments[
|
|
||||||
stringToPDFString(name, /* keepEscapeSequence = */ true)
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attachment) {
|
if (docAttachments && id) {
|
||||||
resultObj.attachment = attachment;
|
resultObj.attachmentId = id;
|
||||||
|
resultObj.attachment = docAttachments.get(id);
|
||||||
|
|
||||||
// NOTE: the destination is relative to the *attachment*.
|
// NOTE: the destination is relative to the *attachment*.
|
||||||
const attachmentDest = fetchRemoteDest(action);
|
const attachmentDest = fetchRemoteDest(action);
|
||||||
|
|||||||
@ -58,11 +58,9 @@ class CCITTFaxStream extends DecodeStream {
|
|||||||
if (this.eof) {
|
if (this.eof) {
|
||||||
return this.buffer;
|
return this.buffer;
|
||||||
}
|
}
|
||||||
if (!bytes) {
|
bytes ??= this.stream.isAsync
|
||||||
bytes = this.stream.isAsync
|
|
||||||
? (await this.stream.asyncGetBytes()) || this.bytes
|
? (await this.stream.asyncGetBytes()) || this.bytes
|
||||||
: 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,14 +775,12 @@ class CFFParser {
|
|||||||
} else if (localSubrIndex) {
|
} else if (localSubrIndex) {
|
||||||
localSubrToUse = localSubrIndex;
|
localSubrToUse = localSubrIndex;
|
||||||
}
|
}
|
||||||
if (valid) {
|
valid &&= this.parseCharString(
|
||||||
valid = this.parseCharString(
|
|
||||||
state,
|
state,
|
||||||
charstring,
|
charstring,
|
||||||
localSubrToUse,
|
localSubrToUse,
|
||||||
globalSubrIndex
|
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;
|
||||||
@ -894,9 +892,22 @@ class CFFParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (maxZoneHeight > 0) {
|
if (maxZoneHeight > 0) {
|
||||||
|
// The lower bound of AFDKO's valid window is `0.5 / maxZoneHeight`.
|
||||||
|
// When that bound is itself above the default BlueScale the font simply
|
||||||
|
// has small zones (e.g. Eurostile LT Std, or the SofiaPro fonts shipped
|
||||||
|
// with a near-default 0.037): even the default 0.039625 would be
|
||||||
|
// flagged as out-of-range, so this is the rendered intent and forcing
|
||||||
|
// BlueScale up only misaligns/collapses overshooting glyphs (notably
|
||||||
|
// with macOS's Core Text rasterizer). Only apply the lower clamp when
|
||||||
|
// its target does not exceed the default.
|
||||||
|
// Round the bound in order to avoid too long operand (issue 21466).
|
||||||
|
const PRECISION = 1e5;
|
||||||
|
const lowerBound = 0.5 / maxZoneHeight;
|
||||||
const minBlueScale =
|
const minBlueScale =
|
||||||
blueScale < DEFAULT_BLUE_SCALE ? 0.5 / maxZoneHeight : -Infinity;
|
lowerBound <= DEFAULT_BLUE_SCALE
|
||||||
const maxBlueScale = 1 / maxZoneHeight;
|
? Math.ceil(lowerBound * PRECISION) / PRECISION
|
||||||
|
: -Infinity;
|
||||||
|
const maxBlueScale = Math.floor(PRECISION / maxZoneHeight) / PRECISION;
|
||||||
const clamped = MathClamp(blueScale, minBlueScale, maxBlueScale);
|
const clamped = MathClamp(blueScale, minBlueScale, maxBlueScale);
|
||||||
if (clamped !== blueScale) {
|
if (clamped !== blueScale) {
|
||||||
privateDict.setByName("BlueScale", clamped);
|
privateDict.setByName("BlueScale", clamped);
|
||||||
@ -1417,10 +1428,9 @@ class CFFFDSelect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getFDIndex(glyphIndex) {
|
getFDIndex(glyphIndex) {
|
||||||
if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
|
return glyphIndex < 0 || glyphIndex >= this.fdSelect.length
|
||||||
return -1;
|
? -1
|
||||||
}
|
: this.fdSelect[glyphIndex];
|
||||||
return this.fdSelect[glyphIndex];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -182,28 +182,14 @@ class ChunkedStream extends Stream {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getBytes(length) {
|
getBytes(length) {
|
||||||
const bytes = this.bytes;
|
|
||||||
const pos = this.pos;
|
const pos = this.pos;
|
||||||
const strEnd = this.end;
|
const endPos = !length ? this.end : Math.min(pos + length, this.end);
|
||||||
|
|
||||||
if (!length) {
|
if (endPos > this.progressiveDataLength) {
|
||||||
if (strEnd > this.progressiveDataLength) {
|
this.ensureRange(pos, endPos);
|
||||||
this.ensureRange(pos, strEnd);
|
|
||||||
}
|
}
|
||||||
this.pos = strEnd;
|
this.pos = endPos;
|
||||||
return bytes.subarray(pos, strEnd);
|
return this.bytes.subarray(pos, endPos);
|
||||||
}
|
|
||||||
|
|
||||||
let end = pos + length;
|
|
||||||
if (end > strEnd) {
|
|
||||||
end = strEnd;
|
|
||||||
}
|
|
||||||
if (end > this.progressiveDataLength) {
|
|
||||||
this.ensureRange(pos, end);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.pos = end;
|
|
||||||
return bytes.subarray(pos, end);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getByteRange(begin, end) {
|
getByteRange(begin, end) {
|
||||||
@ -253,10 +239,10 @@ class ChunkedStream extends Stream {
|
|||||||
};
|
};
|
||||||
Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", {
|
Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", {
|
||||||
get() {
|
get() {
|
||||||
if (this.numChunksLoaded === this.numChunks) {
|
return (
|
||||||
return true;
|
this.numChunksLoaded === this.numChunks ||
|
||||||
}
|
this.getMissingChunks().length === 0
|
||||||
return this.getMissingChunks().length === 0;
|
);
|
||||||
},
|
},
|
||||||
configurable: true,
|
configurable: true,
|
||||||
});
|
});
|
||||||
@ -274,13 +260,13 @@ class ChunkedStream extends Stream {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class ChunkedStreamManager {
|
class ChunkedStreamManager {
|
||||||
aborted = false;
|
#aborted = false;
|
||||||
|
|
||||||
currRequestId = 0;
|
currRequestId = 0;
|
||||||
|
|
||||||
_chunksNeededByRequest = new Map();
|
_chunksNeededByRequest = new Map();
|
||||||
|
|
||||||
_loadedStreamCapability = Promise.withResolvers();
|
#loadedStreamCapability = Promise.withResolvers();
|
||||||
|
|
||||||
_promisesByRequest = new Map();
|
_promisesByRequest = new Map();
|
||||||
|
|
||||||
@ -302,7 +288,7 @@ class ChunkedStreamManager {
|
|||||||
while (true) {
|
while (true) {
|
||||||
const { value, done } = await rangeReader.read();
|
const { value, done } = await rangeReader.read();
|
||||||
|
|
||||||
if (this.aborted) {
|
if (this.#aborted) {
|
||||||
chunks = null;
|
chunks = null;
|
||||||
return; // Ignoring any data after abort.
|
return; // Ignoring any data after abort.
|
||||||
}
|
}
|
||||||
@ -337,7 +323,7 @@ class ChunkedStreamManager {
|
|||||||
const missingChunks = this.stream.getMissingChunks();
|
const missingChunks = this.stream.getMissingChunks();
|
||||||
this._requestChunks(missingChunks);
|
this._requestChunks(missingChunks);
|
||||||
}
|
}
|
||||||
return this._loadedStreamCapability.promise;
|
return this.#loadedStreamCapability.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
_requestChunks(chunks) {
|
_requestChunks(chunks) {
|
||||||
@ -360,13 +346,13 @@ class ChunkedStreamManager {
|
|||||||
|
|
||||||
const chunksToRequest = [];
|
const chunksToRequest = [];
|
||||||
for (const chunk of chunksNeeded) {
|
for (const chunk of chunksNeeded) {
|
||||||
let requestIds = this._requestsByChunk.get(chunk);
|
const requestIds = this._requestsByChunk.getOrInsertComputed(
|
||||||
if (!requestIds) {
|
chunk,
|
||||||
requestIds = [];
|
() => {
|
||||||
this._requestsByChunk.set(chunk, requestIds);
|
|
||||||
|
|
||||||
chunksToRequest.push(chunk);
|
chunksToRequest.push(chunk);
|
||||||
|
return [];
|
||||||
}
|
}
|
||||||
|
);
|
||||||
requestIds.push(requestId);
|
requestIds.push(requestId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,7 +369,7 @@ class ChunkedStreamManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return capability.promise.catch(reason => {
|
return capability.promise.catch(reason => {
|
||||||
if (this.aborted) {
|
if (this.#aborted) {
|
||||||
return; // Ignoring any pending requests after abort.
|
return; // Ignoring any pending requests after abort.
|
||||||
}
|
}
|
||||||
throw reason;
|
throw reason;
|
||||||
@ -473,7 +459,7 @@ class ChunkedStreamManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (stream.isDataLoaded) {
|
if (stream.isDataLoaded) {
|
||||||
this._loadedStreamCapability.resolve(stream);
|
this.#loadedStreamCapability.resolve(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
const loadedRequests = [];
|
const loadedRequests = [];
|
||||||
@ -534,10 +520,6 @@ class ChunkedStreamManager {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onError(err) {
|
|
||||||
this._loadedStreamCapability.reject(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
getBeginChunk(begin) {
|
getBeginChunk(begin) {
|
||||||
return Math.floor(begin / this.chunkSize);
|
return Math.floor(begin / this.chunkSize);
|
||||||
}
|
}
|
||||||
@ -547,12 +529,13 @@ class ChunkedStreamManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
abort(reason) {
|
abort(reason) {
|
||||||
this.aborted = true;
|
this.#aborted = true;
|
||||||
this.pdfStream?.cancelAllRequests(reason);
|
this.pdfStream?.cancelAllRequests(reason);
|
||||||
|
|
||||||
for (const capability of this._promisesByRequest.values()) {
|
for (const capability of this._promisesByRequest.values()) {
|
||||||
capability.reject(reason);
|
capability.reject(reason);
|
||||||
}
|
}
|
||||||
|
this.#loadedStreamCapability.reject(reason);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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,6 +183,21 @@ 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,
|
||||||
@ -379,6 +394,20 @@ 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(
|
||||||
@ -446,24 +475,36 @@ 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 length = base.numComps * (highVal + 1);
|
const count = highVal + 1;
|
||||||
this.lookup = new Uint8Array(length);
|
const length = base.numComps * count;
|
||||||
|
const palette = new Uint8Array(length);
|
||||||
|
|
||||||
if (lookup instanceof BaseStream) {
|
if (lookup instanceof BaseStream) {
|
||||||
const bytes = lookup.getBytes(length);
|
palette.set(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) {
|
||||||
this.lookup[i] = lookup.charCodeAt(i) & 0xff;
|
palette[i] = lookup.charCodeAt(i);
|
||||||
}
|
}
|
||||||
} 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) {
|
||||||
@ -473,10 +514,12 @@ class IndexedCS extends ColorSpace {
|
|||||||
'IndexedCS.getRgbItem: Unsupported "dest" type.'
|
'IndexedCS.getRgbItem: Unsupported "dest" type.'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const { base, highVal, lookup } = this;
|
const rgbLookup = this.#rgbLookup;
|
||||||
const start =
|
const pos = MathClamp(Math.round(src[srcOffset]), 0, this.highVal) * 3;
|
||||||
MathClamp(Math.round(src[srcOffset]), 0, highVal) * base.numComps;
|
|
||||||
base.getRgbBuffer(lookup, start, 1, dest, destOffset, 8, 0);
|
dest[destOffset] = rgbLookup[pos];
|
||||||
|
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) {
|
||||||
@ -486,20 +529,21 @@ class IndexedCS extends ColorSpace {
|
|||||||
'IndexedCS.getRgbBuffer: Unsupported "dest" type.'
|
'IndexedCS.getRgbBuffer: Unsupported "dest" type.'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const { base, highVal, lookup } = this;
|
const { highVal } = this;
|
||||||
const { numComps } = base;
|
const rgbLookup = this.#rgbLookup;
|
||||||
const outputDelta = base.getOutputLength(numComps, alpha01);
|
|
||||||
|
|
||||||
for (let i = 0; i < count; ++i) {
|
for (let i = 0; i < count; ++i) {
|
||||||
const lookupPos =
|
const pos = MathClamp(Math.round(src[srcOffset++]), 0, highVal) * 3;
|
||||||
MathClamp(Math.round(src[srcOffset++]), 0, highVal) * numComps;
|
|
||||||
base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
|
dest[destOffset++] = rgbLookup[pos];
|
||||||
destOffset += outputDelta;
|
dest[destOffset++] = rgbLookup[pos + 1];
|
||||||
|
dest[destOffset++] = rgbLookup[pos + 2];
|
||||||
|
destOffset += alpha01;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getOutputLength(inputLength, alpha01) {
|
getOutputLength(inputLength, alpha01) {
|
||||||
return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);
|
return inputLength * (3 + alpha01);
|
||||||
}
|
}
|
||||||
|
|
||||||
isDefaultDecode(decode, bpc) {
|
isDefaultDecode(decode, bpc) {
|
||||||
|
|||||||
@ -243,9 +243,7 @@ class ColorSpaceUtils {
|
|||||||
break;
|
break;
|
||||||
case "Pattern":
|
case "Pattern":
|
||||||
baseCS = cs[1] || null;
|
baseCS = cs[1] || null;
|
||||||
if (baseCS) {
|
baseCS &&= this.#subParse(baseCS, options);
|
||||||
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,7 +342,8 @@ function lookupNormalRect(arr, fallback) {
|
|||||||
* each part of the path.
|
* each part of the path.
|
||||||
*/
|
*/
|
||||||
function parseXFAPath(path) {
|
function parseXFAPath(path) {
|
||||||
const positionPattern = /(.+)\[(\d+)\]$/;
|
// Anchoring prevents retrying the match at every character.
|
||||||
|
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) {
|
||||||
@ -376,7 +377,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)}`);
|
buffer.push(`#${char.toString(16).padStart(2, "0")}`);
|
||||||
start = i + 1;
|
start = i + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -386,7 +387,7 @@ function escapePDFName(str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (start < str.length) {
|
if (start < str.length) {
|
||||||
buffer.push(str.substring(start, str.length));
|
buffer.push(str.substring(start));
|
||||||
}
|
}
|
||||||
|
|
||||||
return buffer.join("");
|
return buffer.join("");
|
||||||
@ -450,7 +451,7 @@ function _collectJS(entry, xref, list, parents) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function collectActions(xref, dict, eventType) {
|
function collectActions(xref, dict, eventType) {
|
||||||
const actions = Object.create(null);
|
const actions = new Map();
|
||||||
const additionalActionsDicts = getInheritableProperty({
|
const additionalActionsDicts = getInheritableProperty({
|
||||||
dict,
|
dict,
|
||||||
key: "AA",
|
key: "AA",
|
||||||
@ -476,7 +477,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[action] = list;
|
actions.set(action, list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -488,10 +489,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.Action = list;
|
actions.set("Action", list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return objectSize(actions) > 0 ? actions : null;
|
return actions.size ? actions : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const XMLEntities = {
|
const XMLEntities = {
|
||||||
@ -533,7 +534,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 > 0xd7ff && (char < 0xe000 || char > 0xfffd)) {
|
if (char > 0xffff) {
|
||||||
// char is represented by two u16
|
// char is represented by two u16
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -545,7 +546,7 @@ function encodeToXmlString(str) {
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
if (start < str.length) {
|
if (start < str.length) {
|
||||||
buffer.push(str.substring(start, str.length));
|
buffer.push(str.substring(start));
|
||||||
}
|
}
|
||||||
return buffer.join("");
|
return buffer.join("");
|
||||||
}
|
}
|
||||||
@ -561,6 +562,17 @@ 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]+/)) {
|
||||||
@ -575,6 +587,18 @@ 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";
|
||||||
@ -751,6 +775,7 @@ export {
|
|||||||
lookupRect,
|
lookupRect,
|
||||||
MAX_INT_32,
|
MAX_INT_32,
|
||||||
MissingDataException,
|
MissingDataException,
|
||||||
|
normalizeCSSFontFamily,
|
||||||
numberToString,
|
numberToString,
|
||||||
ParserEOFException,
|
ParserEOFException,
|
||||||
parseXFAPath,
|
parseXFAPath,
|
||||||
|
|||||||
@ -13,6 +13,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @import {BaseStream} from "./base_stream.js";
|
||||||
|
*/
|
||||||
|
|
||||||
import {
|
import {
|
||||||
bytesToString,
|
bytesToString,
|
||||||
FormatError,
|
FormatError,
|
||||||
@ -26,10 +30,11 @@ import {
|
|||||||
warn,
|
warn,
|
||||||
} from "../shared/util.js";
|
} from "../shared/util.js";
|
||||||
import { calculateSHA384, calculateSHA512 } from "./calculate_sha_other.js";
|
import { calculateSHA384, calculateSHA512 } from "./calculate_sha_other.js";
|
||||||
import { Dict, isName, Name } from "./primitives.js";
|
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
|
||||||
@ -754,6 +759,9 @@ class CipherTransform {
|
|||||||
/** @type {Map<string, CipherConstructors>} */
|
/** @type {Map<string, CipherConstructors>} */
|
||||||
#cipherCache = new Map();
|
#cipherCache = new Map();
|
||||||
|
|
||||||
|
/** @type {Name | null} */
|
||||||
|
embeddedFilterName = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ResolveCipher} resolveCipher
|
* @param {ResolveCipher} resolveCipher
|
||||||
* Resolve a cipher constructor from a crypt filter name.
|
* Resolve a cipher constructor from a crypt filter name.
|
||||||
@ -789,7 +797,11 @@ class CipherTransform {
|
|||||||
* @returns {DecryptStream}
|
* @returns {DecryptStream}
|
||||||
*/
|
*/
|
||||||
createStream(stream, length, cryptFilterName = null) {
|
createStream(stream, length, cryptFilterName = null) {
|
||||||
const Cipher = this.#getCipher(cryptFilterName || this.streamFilterName);
|
const defaultFilterName =
|
||||||
|
this.embeddedFilterName && isDict(stream.dict, "EmbeddedFile")
|
||||||
|
? this.embeddedFilterName
|
||||||
|
: this.streamFilterName;
|
||||||
|
const Cipher = this.#getCipher(cryptFilterName || defaultFilterName);
|
||||||
const cipher = new Cipher();
|
const cipher = new Cipher();
|
||||||
return new DecryptStream(
|
return new DecryptStream(
|
||||||
stream,
|
stream,
|
||||||
@ -842,7 +854,18 @@ 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;
|
||||||
|
|
||||||
static get _defaultPasswordBytes() {
|
static get _defaultPasswordBytes() {
|
||||||
return shadow(
|
return shadow(
|
||||||
this,
|
this,
|
||||||
@ -1042,6 +1065,7 @@ class CipherTransformFactory {
|
|||||||
}
|
}
|
||||||
this.filterName = filter.name;
|
this.filterName = filter.name;
|
||||||
this.dict = dict;
|
this.dict = dict;
|
||||||
|
this.#fileId = fileId;
|
||||||
const algorithm = dict.get("V");
|
const algorithm = dict.get("V");
|
||||||
if (
|
if (
|
||||||
!Number.isInteger(algorithm) ||
|
!Number.isInteger(algorithm) ||
|
||||||
@ -1077,6 +1101,29 @@ class CipherTransformFactory {
|
|||||||
throw new FormatError("invalid key length");
|
throw new FormatError("invalid key length");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let cf = null;
|
||||||
|
let stmf = Name.get("Identity");
|
||||||
|
let strf = Name.get("Identity");
|
||||||
|
let eff = stmf;
|
||||||
|
|
||||||
|
if (algorithm >= 4) {
|
||||||
|
cf = dict.get("CF");
|
||||||
|
if (cf instanceof Dict) {
|
||||||
|
// The 'CF' dictionary itself should not be encrypted, and by setting
|
||||||
|
// `suppressEncryption` we can prevent an infinite loop inside of
|
||||||
|
// `XRef_fetchUncompressed` if the dictionary contains indirect
|
||||||
|
// objects (fixes issue7665.pdf).
|
||||||
|
cf.suppressEncryption = true;
|
||||||
|
}
|
||||||
|
stmf = dict.get("StmF") || Name.get("Identity");
|
||||||
|
strf = dict.get("StrF") || Name.get("Identity");
|
||||||
|
eff = dict.get("EFF") || stmf;
|
||||||
|
}
|
||||||
|
this.cf = cf;
|
||||||
|
this.stmf = stmf;
|
||||||
|
this.strf = strf;
|
||||||
|
this.eff = eff;
|
||||||
|
|
||||||
const ownerBytes = stringToBytes(dict.get("O")),
|
const ownerBytes = stringToBytes(dict.get("O")),
|
||||||
userBytes = stringToBytes(dict.get("U"));
|
userBytes = stringToBytes(dict.get("U"));
|
||||||
// prepare keys
|
// prepare keys
|
||||||
@ -1091,19 +1138,20 @@ class CipherTransformFactory {
|
|||||||
this.encryptMetadata = encryptMetadata;
|
this.encryptMetadata = encryptMetadata;
|
||||||
|
|
||||||
const fileIdBytes = stringToBytes(fileId);
|
const fileIdBytes = stringToBytes(fileId);
|
||||||
let passwordBytes;
|
let passwordBytes, rawPasswordBytes;
|
||||||
if (password) {
|
if (password) {
|
||||||
if (revision === 6) {
|
if (revision === 6) {
|
||||||
try {
|
const preppedPassword = saslPrep(password);
|
||||||
password = utf8StringToString(password);
|
passwordBytes = utf8PasswordToBytes(preppedPassword);
|
||||||
} catch {
|
if (preppedPassword !== password) {
|
||||||
warn(
|
rawPasswordBytes = utf8PasswordToBytes(password);
|
||||||
"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;
|
||||||
if (algorithm !== 5) {
|
if (algorithm !== 5) {
|
||||||
@ -1126,9 +1174,12 @@ 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
|
||||||
|
? [passwordBytes, rawPasswordBytes]
|
||||||
|
: [passwordBytes]) {
|
||||||
encryptionKey = this.#createEncryptionKey20(
|
encryptionKey = this.#createEncryptionKey20(
|
||||||
revision,
|
revision,
|
||||||
passwordBytes,
|
candidate,
|
||||||
ownerPassword,
|
ownerPassword,
|
||||||
ownerValidationSalt,
|
ownerValidationSalt,
|
||||||
ownerKeySalt,
|
ownerKeySalt,
|
||||||
@ -1140,9 +1191,28 @@ class CipherTransformFactory {
|
|||||||
userEncryption,
|
userEncryption,
|
||||||
perms
|
perms
|
||||||
);
|
);
|
||||||
|
if (encryptionKey) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!encryptionKey) {
|
if (!encryptionKey) {
|
||||||
if (!password) {
|
if (!password) {
|
||||||
|
if (
|
||||||
|
this.algorithm >= 4 &&
|
||||||
|
isName(this.stmf, "Identity") &&
|
||||||
|
isName(this.strf, "Identity")
|
||||||
|
) {
|
||||||
|
const effCF = this.cf?.get(this.eff.name);
|
||||||
|
const authEvent = effCF?.get("AuthEvent");
|
||||||
|
|
||||||
|
if (isName(authEvent, "EFOpen")) {
|
||||||
|
// For EFOpen with Identity as default stream/string filters, defer
|
||||||
|
// password prompting until an EmbeddedFile stream is actually read.
|
||||||
|
this.encryptionKey = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
throw new PasswordException(
|
throw new PasswordException(
|
||||||
"No password given",
|
"No password given",
|
||||||
PasswordResponses.NEED_PASSWORD
|
PasswordResponses.NEED_PASSWORD
|
||||||
@ -1182,21 +1252,23 @@ class CipherTransformFactory {
|
|||||||
} else {
|
} else {
|
||||||
this.encryptionKey = encryptionKey;
|
this.encryptionKey = encryptionKey;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (algorithm >= 4) {
|
/**
|
||||||
const cf = dict.get("CF");
|
* Set password.
|
||||||
if (cf instanceof Dict) {
|
*
|
||||||
// The 'CF' dictionary itself should not be encrypted, and by setting
|
* @param {string} password
|
||||||
// `suppressEncryption` we can prevent an infinite loop inside of
|
* New password.
|
||||||
// `XRef_fetchUncompressed` if the dictionary contains indirect
|
* @returns {undefined}
|
||||||
// objects (fixes issue7665.pdf).
|
* Nothing.
|
||||||
cf.suppressEncryption = true;
|
*/
|
||||||
}
|
setPassword(password) {
|
||||||
this.cf = cf;
|
const transform = new CipherTransformFactory(
|
||||||
this.stmf = dict.get("StmF") || Name.get("Identity");
|
this.dict,
|
||||||
this.strf = dict.get("StrF") || Name.get("Identity");
|
this.#fileId,
|
||||||
this.eff = dict.get("EFF") || this.stmf;
|
password
|
||||||
}
|
);
|
||||||
|
this.encryptionKey = transform.encryptionKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1220,6 +1292,18 @@ class CipherTransformFactory {
|
|||||||
if (!cfm || cfm.name === "None") {
|
if (!cfm || cfm.name === "None") {
|
||||||
return NullCipher;
|
return NullCipher;
|
||||||
}
|
}
|
||||||
|
if (!this.encryptionKey) {
|
||||||
|
throw new PasswordException(
|
||||||
|
"No password given",
|
||||||
|
PasswordResponses.NEED_PASSWORD
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (this.algorithm === 5 || cfm.name === "AESV3") {
|
||||||
|
// V=5 always uses 256-bit AES with the file encryption key, even
|
||||||
|
// when a producer wrongly sets the crypt filter's CFM to AESV2
|
||||||
|
// (bug 2046659).
|
||||||
|
return AES256Cipher.bind(null, this.encryptionKey);
|
||||||
|
}
|
||||||
if (cfm.name === "V2") {
|
if (cfm.name === "V2") {
|
||||||
return ARCFourCipher.bind(
|
return ARCFourCipher.bind(
|
||||||
null,
|
null,
|
||||||
@ -1242,13 +1326,16 @@ class CipherTransformFactory {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (cfm.name === "AESV3") {
|
|
||||||
return AES256Cipher.bind(null, this.encryptionKey);
|
|
||||||
}
|
|
||||||
throw new FormatError("Unknown crypto method");
|
throw new FormatError("Unknown crypto method");
|
||||||
};
|
};
|
||||||
|
|
||||||
return new CipherTransform(resolveCipher, this.strf, this.stmf);
|
const transform = new CipherTransform(
|
||||||
|
resolveCipher,
|
||||||
|
this.strf,
|
||||||
|
this.stmf
|
||||||
|
);
|
||||||
|
transform.embeddedFilterName = this.eff;
|
||||||
|
return transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
// algorithms 1 and 2
|
// algorithms 1 and 2
|
||||||
|
|||||||
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